![c語言常見筆試題總結(jié)(13類+包括答案)_第1頁](http://file4.renrendoc.com/view4/M02/38/15/wKhkGGYbJqaAPZglAAGCIo7fTpc381.jpg)
![c語言常見筆試題總結(jié)(13類+包括答案)_第2頁](http://file4.renrendoc.com/view4/M02/38/15/wKhkGGYbJqaAPZglAAGCIo7fTpc3812.jpg)
![c語言常見筆試題總結(jié)(13類+包括答案)_第3頁](http://file4.renrendoc.com/view4/M02/38/15/wKhkGGYbJqaAPZglAAGCIo7fTpc3813.jpg)
![c語言常見筆試題總結(jié)(13類+包括答案)_第4頁](http://file4.renrendoc.com/view4/M02/38/15/wKhkGGYbJqaAPZglAAGCIo7fTpc3814.jpg)
![c語言常見筆試題總結(jié)(13類+包括答案)_第5頁](http://file4.renrendoc.com/view4/M02/38/15/wKhkGGYbJqaAPZglAAGCIo7fTpc3815.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【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定義一個宏,求出給定結(jié)構(gòu)中給定成員的偏移量
#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);問:調(diào)用setjmp時傳遞__env的內(nèi)容,還是傳遞指針?【5頭文件】問:為什么標準頭文件都有類似以下的結(jié)構(gòu)?#ifndef__INCvxWorksh
#define__INCvxWorksh#ifdef__cplusplus
extern“C”{
#endif/*…*/#ifdef__cplusplus
}
#endif#endif/*__INCvxWorksh*/【6static關(guān)鍵字】請說出static關(guān)鍵字的3種用處:
(1)用于全局變量;
(2)用于局部變量;
(3)用于函數(shù)。/*file.c*/
staticinta;
intb;staticintfn()
{
staticintx;
inty;
}【7const關(guān)鍵字】7.1const關(guān)鍵字的意義是什么?
7.2解釋以下的變量定義:constinta1;
intconsta2;
constint*a3;
int*consta4;
intconst*consta5;【8volatile關(guān)鍵字】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.”);試評論該代碼?!?1混合運算】有以下代碼:voidfoo()
{
unsignedinta=6;
intb=-20;
(a+b>6)?puts(”大于6″):puts(”小于或等于6″);
}請問調(diào)用foo()的輸出【12內(nèi)存訪問】有以下代碼: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ù)時,應(yīng)該是傳遞地址/指針。5在編譯源文件時,C編譯器和C++編譯器都會對符號(函數(shù)或變量)名作某些修正,但兩者采用的修正方法不同,所以兩者生成的目標文件不能互相鏈接。在C++中使用extern“C”可以讓C++符號獲得C鏈接特性。由于C++編譯器會自動定義__cplusplus宏,所以在C語言頭文件中采用這種結(jié)構(gòu)可以保證無論使用何種編譯器,生成的目標文件都具有C鏈接特性,能夠與標準C編譯器所生成的目標文件相鏈接。6(1)用于全局變量:外部靜態(tài)變量,只能在本源文件中被引用,不能被其它源文件所引用。
(2)用于局部變量:局部靜態(tài)變量,在函數(shù)返回后存儲單元不釋放;下一次調(diào)用該函數(shù)時,該變量為上次函數(shù)返回時的值。
(3)用于函數(shù):內(nèi)部函數(shù),只能被本源文件中的函數(shù)所調(diào)用,不能被其它源文件調(diào)用。7.1const關(guān)鍵字在C語言中用于聲明”常變量”,其值不可修改,但具有確定的數(shù)據(jù)類型。C編譯器總是為其分配相應(yīng)的存儲單元。
在C++中,const關(guān)鍵字用于聲明常量,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關(guān)鍵字用于聲明內(nèi)存映射的易失型變量,這類變量的值隨時可能由于某種編譯器所不知道的原因(例如,外部設(shè)備對其寫入)所改變,所以編譯器在進行代碼優(yōu)化時不能對其做任何的假設(shè)和依賴。8.2volatile可以和const一起使用,不過很少見。
const關(guān)鍵字的意思是限制編程者自己不能修改變量的值;兩者并不矛盾。
例如一個內(nèi)存映射的、只讀的硬件寄存器,假設(shè)它的地址是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)相關(guān)的,所以不應(yīng)當這樣寫。在WIN2K+VC環(huán)境下debug程序時會出現(xiàn)異常。
不過這樣寫,編譯器不會報錯。按道理,”hello…”的類型是constchar[N],它是不能賦值給char*的,
因為會丟失常量屬性。但在const關(guān)鍵字成為C標準之前,大家都這樣寫程序,所以char*pmsg=“hello…”
這種寫法被給予特別豁免,即使在C++中也是如此,在”TheC++ProgrammingLanguage”的附錄里對此有討論?!癶ello,world!”是字符串常量(stringliteral),它的類型是constchar[N],N為字符串的長度(包括結(jié)尾的0)。
“TheCProgrammingLanguage”指出,寫字符串常量的結(jié)果是未定義的(undefined)。所以在有些平臺(操作系統(tǒng)+編譯器)
上程序不會出錯,而在其它平臺上程序出現(xiàn)異常。GNU手冊里這樣說:
Writingintostringconstantsisaverybadidea;“constants”shouldbeconstant.
不過在GNU中它提供另外的選擇:使用-fwritable-strings進行編譯就可以。那么,為什么不允許修改字符串常量呢(它不也在內(nèi)存中嗎)?
這可能和另外一個特點有關(guān),即重復字符串的合并?,F(xiàn)在的編譯器應(yīng)該會主動幫助我們合并程序中相同的字符串常量
以節(jié)省內(nèi)存。如果stringliteral可寫,就會出現(xiàn)問題。例如:
voidfoo()
{
printf(”%s\n”,“howareyou?”);
}
voidbar()
{
char*p=“howareyou?”;
strcpy(p,“WHOAREYOU?”);
}
調(diào)用foo()當然會打印”howareyou”。但如果編譯器合并字符串,那么先調(diào)用bar(),再調(diào)用foo(),foo()打印的就是
“WHOAREYOU?”。這當然不是我們想要的結(jié)果。
另外一方面,這樣寫也有問題(確實有人這么寫):
if(func()==“something”)
…
func()是:
char*func()
{
…
return“something”;
}
這就假設(shè)編譯器一定會幫我們合并字符串,然而那也不一定。11輸出”>6″。
混合運算時的數(shù)據(jù)類型轉(zhuǎn)換次序:int–>unsigned–>long–>double。
另外,char和short必定轉(zhuǎn)換為int,float必定轉(zhuǎn)換為double。12p=(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 魯教版地理六年級下冊6.1《位置和范圍》聽課評課記錄3
- 【部編人教版】八年級上冊歷史聽課評課記錄 第11課 北洋政府的黑暗統(tǒng)治
- 浙教版數(shù)學七年級上冊5.2《解法》聽評課記錄
- 環(huán)境監(jiān)測承包協(xié)議書
- 人教版地理八年級上冊《第一節(jié) 交通運輸》聽課評課記錄1
- 滬教版數(shù)學八年級下冊20.2《一次函數(shù)的圖象與性質(zhì)》聽評課記錄1
- 湘教版數(shù)學九年級下冊《1.5 二次函數(shù)的應(yīng)用》聽評課記錄1
- 六年級科學斜面聽評課記錄
- 新北師大版數(shù)學一年級下冊《采松果》聽評課記錄
- 蘇科版數(shù)學九年級上冊聽評課記錄 用一元二次方程解決問題
- 北京理工大學應(yīng)用光學課件(大全)李林
- 國家綜合性消防救援隊伍消防員管理規(guī)定
- 河南省三門峽市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 2023年全國各地高考英語試卷:完形填空匯編(9篇-含解析)
- 五年級上冊數(shù)學習題課件 簡便計算專項整理 蘇教版 共21張
- 疼痛科的建立和建設(shè)
- 運動技能學習PPT課件
- 第六編元代文學
- 高考語文古詩詞必背重點提綱
- 超星爾雅學習通《大學生心理健康教育(蘭州大學版)》章節(jié)測試含答案
- 2020譯林版高中英語選擇性必修二單詞默寫表
評論
0/150
提交評論