版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【1使用宏】1.1
#ifdefNDEBUG
#defineTRACE(S)S
#else
#defineTRACE(S)printf(”%s;\n”,#S);S
#endif問:以上TRACE()宏的作用是什么?1.2#error的作用?1.3定義一個宏,求出給定數(shù)組中的元素的個數(shù)
#defineNELEMENTS(array)??1.4定義一個宏,求出給定結構中給定成員的偏移量
#defineOFFSET(structure,member)??【2數(shù)據(jù)聲明和定義】給定以下類型的變量a的定義式:a)Aninteger
b)Apointertoaninteger
c)Apointertoapointertoaninteger
d)Anarrayof10integers
e)Anarrayof10pointerstointegers
f)Apointertoanarrayof10integers
g)Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger
h)Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger【3復雜類型(1)】有如下表達式:char(*(*x())[])();請用文字描述x是什么?!?復雜類型(2)】jmp_buf的定義:typedefstruct_jmp_buf
{
REG_SETreg;
intextra[3];
}jmp_buf[1];setjmp函數(shù)的原型:externintsetjmp(jmp_buf__env);問:調用setjmp時傳遞__env的內容,還是傳遞指針?【5頭文件】問:為什么標準頭文件都有類似以下的結構?#ifndef__INCvxWorksh
#define__INCvxWorksh#ifdef__cplusplus
extern“C”{
#endif/*…*/#ifdef__cplusplus
}
#endif#endif/*__INCvxWorksh*/【6static關鍵字】請說出static關鍵字的3種用處:
(1)用于全局變量;
(2)用于局部變量;
(3)用于函數(shù)。/*file.c*/
staticinta;
intb;staticintfn()
{
staticintx;
inty;
}【7const關鍵字】7.1const關鍵字的意義是什么?
7.2解釋以下的變量定義:constinta1;
intconsta2;
constint*a3;
int*consta4;
intconst*consta5;【8volatile關鍵字】8.1volatile意義?例如
volatileint*p;8.2volatile能和const一起使用嗎?例如
volatileconstint*p;【9sizeof()】有以下定義:char*pmsg=“A”;
charmsg[]=“A”;
charch=‘A’;問:
sizeof(pmsg)=?
sizeof(msg)=?
sizeof(“A”)=?
sizeof(ch)=?
sizeof(‘A’)=?(在C++中等于多少?)voidf(charparam[100])
{
//sizeof(param)=?
}【10字符串】有以下代碼char*pmsg=“hello,world!”;
strcpy(pmsg,“hi,there.”);試評論該代碼。【11混合運算】有以下代碼:voidfoo()
{
unsignedinta=6;
intb=-20;
(a+b>6)?puts(”大于6″):puts(”小于或等于6″);
}請問調用foo()的輸出【12內存訪問】有以下代碼:voidfn()
{
inta[100];
int*p;p=(int*)((unsignedint)a+1);
printf(“p=0x%x\n”,*p);
}試評論以上代碼。【13C庫函數(shù)】請說明以下函數(shù)的意義:voidperror(constchar*__s);
fdprintf(int,constchar*,…);isspace(),isxdigit(),strerr(),sprintf()
答案,僅供參考:1.1這道題主要考察#的功能,S是一個表達式。TRACE()的作用就是在DEBUG狀態(tài)下,計算表達式S的值之前先打印S。1.2#error用于向編譯器報錯,并輸出它后面帶的錯誤信息。例如:
#ifndefSOMETHING
#errorSOMETHINGnotdefined!
#endif
如果在這段代碼之前未定義過SOMETHING,則在編譯時出錯,并給出”SOMETHINGnotdefined!”的錯誤信息。1.3#defineNELEMENTS(array)(sizeof(array)/sizeof((array)[0]))1.4#defineOFFSET(structure,member)((int)&(((structure*)0)->member))2(a)Aninteger:inta;
(b)Apointertoaninteger:int*a;
(c)Apointertoapointertoaninteger:int**a;
(d)Anarrayof10integers:inta[10];
(e)Anarrayof10pointerstointegers:int*a[10];
(f)Apointertoanarrayof10integers:int(*a)[10];
(g)Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger:int(*a)(int);
(h)Anarrayof10pointerstofunctionsthattakeanintegerargumentandreturnaninteger:int(*a[10])(int);3char(*(*x())[])();
這道題來自”TheCProgrammingLanguage”中的一個例子。char(*(*x())[])();首先,確定標識符:x
x是一個函數(shù),沒有參數(shù):x()
返回值是一個指針:*x()
這個指針指向一個數(shù)組:(*x())[]
數(shù)組中的每個元素是指針:*(*x())[]
指向一個不帶參數(shù)的函數(shù):(*(*x())[])()
函數(shù)的返回值是char:char(*(*x())[])()
這里,要知道*、()和[]的優(yōu)先級。4這個定義有點怪,它的意思是:jmp_buf這種類型是一個數(shù)組,只有一個元素,元素類型為struct{…}。數(shù)組名作為函數(shù)參數(shù)時,應該是傳遞地址/指針。5在編譯源文件時,C編譯器和C++編譯器都會對符號(函數(shù)或變量)名作某些修正,但兩者采用的修正方法不同,所以兩者生成的目標文件不能互相鏈接。在C++中使用extern“C”可以讓C++符號獲得C鏈接特性。由于C++編譯器會自動定義__cplusplus宏,所以在C語言頭文件中采用這種結構可以保證無論使用何種編譯器,生成的目標文件都具有C鏈接特性,能夠與標準C編譯器所生成的目標文件相鏈接。6(1)用于全局變量:外部靜態(tài)變量,只能在本源文件中被引用,不能被其它源文件所引用。
(2)用于局部變量:局部靜態(tài)變量,在函數(shù)返回后存儲單元不釋放;下一次調用該函數(shù)時,該變量為上次函數(shù)返回時的值。
(3)用于函數(shù):內部函數(shù),只能被本源文件中的函數(shù)所調用,不能被其它源文件調用。7.1const關鍵字在C語言中用于聲明”常變量”,其值不可修改,但具有確定的數(shù)據(jù)類型。C編譯器總是為其分配相應的存儲單元。
在C++中,const關鍵字用于聲明常量,C++編譯器視具體情況決定是為其分配存儲單元還是僅將其作為編譯期間的常量。7.2constinta1;a1是整型常量。
intconsta2;a2是整型常量。等同于constinta2;
constint*a3;a3是指針(a3是可變的),指向一個整型常量。等同于intconst*a3;
int*consta4;a4是常量指針(a4不可變),指向一個整型變量。
intconst*consta5;a5是常量指針(a5不可變),指向一個整型常量。等同于constint*consta5;8.1volatile關鍵字用于聲明內存映射的易失型變量,這類變量的值隨時可能由于某種編譯器所不知道的原因(例如,外部設備對其寫入)所改變,所以編譯器在進行代碼優(yōu)化時不能對其做任何的假設和依賴。8.2volatile可以和const一起使用,不過很少見。
const關鍵字的意思是限制編程者自己不能修改變量的值;兩者并不矛盾。
例如一個內存映射的、只讀的硬件寄存器,假設它的地址是p,則可以這樣聲明:volatileconstUINT32*p;9sizeof(pmsg)=指針變量的長度
sizeof(msg)=2(字符數(shù)組的長度)
sizeof(”A”)=2(字符串的長度)
sizeof(ch)=1(字符變量的長度)
sizeof(‘A’)=整型變量的長度(在C語言中,字符常量的數(shù)據(jù)類型實際上是int;在C++中,它的數(shù)據(jù)類型是char,從而原式等于1)
sizeof(param)=指針變量的長度(數(shù)組名作參數(shù)時,傳遞的是數(shù)組的起始地址)10這種寫法是和編譯器&操作系統(tǒng)相關的,所以不應當這樣寫。在WIN2K+VC環(huán)境下debug程序時會出現(xiàn)異常。
不過這樣寫,編譯器不會報錯。按道理,”hello…”的類型是constchar[N],它是不能賦值給char*的,
因為會丟失常量屬性。但在const關鍵字成為C標準之前,大家都這樣寫程序,所以char*pmsg=“hello…”
這種寫法被給予特別豁免,即使在C++中也是如此,在”TheC++ProgrammingLanguage”的附錄里對此有討論?!癶ello,world!”是字符串常量(stringliteral),它的類型是constchar[N],N為字符串的長度(包括結尾的0)。
“TheCProgrammingLanguage”指出,寫字符串常量的結果是未定義的(undefined)。所以在有些平臺(操作系統(tǒng)+編譯器)
上程序不會出錯,而在其它平臺上程序出現(xiàn)異常。GNU手冊里這樣說:
Writingintostringconstantsisaverybadidea;“constants”shouldbeconstant.
不過在GNU中它提供另外的選擇:使用-fwritable-strings進行編譯就可以。那么,為什么不允許修改字符串常量呢(它不也在內存中嗎)?
這可能和另外一個特點有關,即重復字符串的合并?,F(xiàn)在的編譯器應該會主動幫助我們合并程序中相同的字符串常量
以節(jié)省內存。如果stringliteral可寫,就會出現(xiàn)問題。例如:
voidfoo()
{
printf(”%s\n”,“howareyou?”);
}
voidbar()
{
char*p=“howareyou?”;
strcpy(p,“WHOAREYOU?”);
}
調用foo()當然會打印”howareyou”。但如果編譯器合并字符串,那么先調用bar(),再調用foo(),foo()打印的就是
“WHOAREYOU?”。這當然不是我們想要的結果。
另外一方面,這樣寫也有問題(確實有人這么寫):
if(func()==“something”)
…
func()是:
char*func()
{
…
return“something”;
}
這就假設編譯器一定會幫我們合并字符串,然而那也不一定。11輸出”>6″。
混合運算時的數(shù)據(jù)類型轉換次序:int–>unsigned–>long–>double。
另外,char和short必定轉換為int,float必定轉換為double。12p=(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務制度管理規(guī)定下發(fā)
- 醫(yī)院基建科財務制度
- 及時講解財務制度
- 政府購買服務財務制度
- 中小型公司財財務制度
- 水果超市財務制度
- 農村自來水供水運營公司應急搶修制度
- 關于出差制度
- 公司對項目安全檢查制度
- 坡地建房施工方案(3篇)
- 2026海南安??毓捎邢挢熑喂菊衅?1人筆試模擬試題及答案解析
- 2026上海碧海金沙投資發(fā)展有限公司社會招聘參考題庫必考題
- 2026年張家界航空工業(yè)職業(yè)技術學院單招職業(yè)傾向性考試模擬測試卷新版
- 2026遼寧機場管理集團校招面筆試題及答案
- 2025徽銀金融租賃有限公司社會招聘筆試歷年典型考題及考點剖析附帶答案詳解
- 孩子如何正確與師長相處與溝通
- 精神病學考試重點第七版
- 塔吊運行日志
- GB/T 14536.1-2022電自動控制器第1部分:通用要求
- GA/T 1362-2016警用裝備倉庫物資庫存管理規(guī)范
- 鋼結構基本原理及設計PPT全套課件
評論
0/150
提交評論