當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式招聘 > 嵌入式面試題 > 經(jīng)典企業(yè)面試題整理(C語(yǔ)言),讓你不再發(fā)愁
經(jīng)典企業(yè)面試題整理(C語(yǔ)言),讓你不再發(fā)愁
時(shí)間:2018-08-06 來(lái)源:未知
1. C語(yǔ)言有多少關(guān)鍵字?
32個(gè),注意sizeof是關(guān)鍵字,不是函數(shù)。
2. C程序的一般結(jié)構(gòu)那 些?
順序,分支,循環(huán)
3. 簡(jiǎn)單列舉幾種常用的循環(huán)結(jié)構(gòu)和分支結(jié)構(gòu)。
循環(huán):For,while do,if goto(慎用)。分支:if else, switch case(注意default 的使用,和break 的添加)。
4. while 和dowhile 有何區(qū)別?
前者先判斷再執(zhí)行,后者先執(zhí)行再判斷;后者比前者多執(zhí)行一次。
5. continue 和 break 有何需別?
前者結(jié)束本次循環(huán)繼續(xù)下次循環(huán),后者直接推出循環(huán)。
6. register 有何作用?
聲明一個(gè)變量常駐寄存器,以達(dá)到提高程序運(yùn)行效率的目的,在嵌入式開(kāi)發(fā)中尤其常用,但它是一個(gè)建議性的聲明,編譯器會(huì)根據(jù)程序情況決定是否申請(qǐng)成功。
7. static 有何作用?
兩方面:1)限定存儲(chǔ)域;2)限定作用域。
8. volatile關(guān)鍵字有什么用途?
聲明為一個(gè)異變的變量,一般的變量會(huì)暫存在處理器的緩存區(qū)中,當(dāng)內(nèi)存中變量發(fā)生改變時(shí)處理器可能無(wú)法及時(shí)更新其變量的值導(dǎo)致災(zāi)難,在嵌入式開(kāi)發(fā)中尤其重要,也可達(dá)到防止編譯器優(yōu)化的目的。
9. 指針函數(shù)和函數(shù)指針有和區(qū)別?
概念不同,前者是一個(gè)函數(shù)返回值為指針類(lèi)型;后者為一個(gè)指針,指向一個(gè)函數(shù)入口地址。
10. 簡(jiǎn)述0,'0',"0",'\0'的區(qū)別。
分別為數(shù)值0,字符0(ascii碼數(shù)值為48),字符串0(占兩個(gè)字節(jié),有‘\0’作為結(jié)束符),字符串結(jié)束標(biāo)志(其數(shù)值等于0是絕對(duì)的0,但意義不同)
11. 使用gets時(shí)應(yīng)注意哪些事項(xiàng)?
防止越界,gets不檢查目的地址的空間大小。
12. 簡(jiǎn)述堆和棧的區(qū)別:
前者為程序動(dòng)態(tài)分配,創(chuàng)建和銷(xiāo)毀都需要手動(dòng)完成(使用完一定要銷(xiāo)毀,防止內(nèi)存泄露);后者為系統(tǒng)自動(dòng)分配,在函數(shù)返回時(shí)自動(dòng)銷(xiāo)毀(所以不能在函數(shù)中返回變量)。
13. 函數(shù)傳參有哪些方法?各有何特色?
值傳遞和地址傳遞,前者在傳遞時(shí)函數(shù)形參接受實(shí)參的拷貝,所以原形參不會(huì)被改變(但是大數(shù)據(jù)的拷貝會(huì)降低效率);后者傳遞變量的地址,不需拷貝,但是會(huì)改變參數(shù)的值。
14. 全局變量和局部變量有何區(qū)別?
前者在靜態(tài)區(qū),作用域是整個(gè)程序;后者在棧區(qū),作用域僅限于函數(shù)內(nèi)部。
15. 局部變量能否和全局變量重名?
可以,局部變量會(huì)屏蔽全局變量。
16. 靜態(tài)全局變量和普通全局變量有何區(qū)別?
存儲(chǔ)域方面:都相同,都在靜態(tài)區(qū);作用域方面:不同,前者是本文件,后者是全局可見(jiàn)。
17. 靜態(tài)局部變量和普通局部變量有何區(qū)別?
存儲(chǔ)域:相同,都在靜態(tài)去;作用域:相同,都在函數(shù)內(nèi)部;
但是聲明周期不同,前者聲明周期為整個(gè)程序的聲明周期知道程序推出自動(dòng)消亡;后者聲明周期為一次函數(shù)調(diào)用,函數(shù)返回即銷(xiāo)毀。
18.地址對(duì)齊方式有哪幾種?
字節(jié)對(duì)齊,半字對(duì)齊,字對(duì)齊
19.
Struct a{
Char a;
Int b;
Short c;
}
Sizeof(a) = ?
結(jié)構(gòu)體a的大小是4*3=12個(gè)字節(jié),而不是1+2+4=7個(gè)字節(jié);這里主要考察內(nèi)存對(duì)齊(地址對(duì)齊)的特點(diǎn),應(yīng)為結(jié)構(gòu)體中最大數(shù)據(jù)寬度是整型(4字節(jié)),所以按字對(duì)齊。
思考一下如何改良結(jié)構(gòu)使得存儲(chǔ)空間變小。
20. 簡(jiǎn)述程序的局部變量存在于(棧區(qū))中,全局變量存在于(靜態(tài)區(qū) )中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在于( 堆區(qū))中。
21.結(jié)構(gòu)體和聯(lián)合體的區(qū)別?
22. 宏函數(shù)與內(nèi)聯(lián)函數(shù)和普通函數(shù)的執(zhí)行效率的比:
宏函數(shù)效率高,因?yàn)槭蔷幾g器在預(yù)處理階段的替換;
23.C語(yǔ)言中注釋有哪些方法?
/**/和 #if 0 #endif 。后者是預(yù)處理命令,可以方便的對(duì)代碼區(qū)進(jìn)行選擇編譯。
解釋一下語(yǔ)句的含義:
Const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前兩個(gè)的作用是一樣,a是一個(gè)常整型數(shù)。第三個(gè)意味著a是一個(gè)指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以)。第四個(gè)意思a是一個(gè)指向整型數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù)是可以修改的,但指針是不可修改的)。最后一個(gè)意味著a是一個(gè)指向常整型數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù)是不可修改的,同時(shí)指針也是不可修改的)。如果應(yīng)試者能正確回答這些問(wèn)題,那么他就給我留下了一個(gè)好印象。順帶提一句,也許你可能會(huì)問(wèn),即使不用關(guān)鍵字const,也還是能很容易寫(xiě)出功能正確的程序,那么我為什么還要如此看重關(guān)鍵字const呢?我也如下的幾下理由:
1). 關(guān)鍵字const的作用是為給讀你代碼的人傳達(dá)非常有用的信息,實(shí)際上,聲明一個(gè)參數(shù)為常量是為了告訴了用戶(hù)這個(gè)參數(shù)的應(yīng)用目的。如果你曾花很多時(shí)間清理其它人留下的垃圾,你就會(huì)很快學(xué)會(huì)感謝這點(diǎn)多余的信息。(當(dāng)然,懂得用const的程序員很少會(huì)留下的垃圾讓別人來(lái)清理的。)
2). 通過(guò)給優(yōu)化器一些附加的信息,使用關(guān)鍵字const也許能產(chǎn)生更緊湊的代碼。
3). 合理地使用關(guān)鍵字const可以使編譯器很自然地保護(hù)那些不希望被改變的參數(shù),防止其被無(wú)意的代碼修改。簡(jiǎn)而言之,這樣可以減少bug的出現(xiàn)。
24.
int * a;
*a = 2;
上式有錯(cuò)嗎,錯(cuò)到哪里?(指針沒(méi)有初始化)
25、頭文件中的 ifndef/define/endif 干什么用?(5分)
答:防止該頭文件被重復(fù)引用。
26、#include
答:對(duì)于#include
對(duì)于#include “filename.h” ,編譯器從用戶(hù)的工作路徑開(kāi)始搜索 filename.h
華清遠(yuǎn)見(jiàn)90+項(xiàng)目獲批!教育部2021最新協(xié)同育人項(xiàng)目名
華清遠(yuǎn)見(jiàn)榮獲2021騰訊教育“年度口碑影響力職業(yè)教育品
華清遠(yuǎn)見(jiàn)受邀參加2021年武漢民辦高校信息學(xué)科合作聯(lián)盟
溫暖同行共創(chuàng)佳績(jī) 2019華清遠(yuǎn)見(jiàn)北京總部年會(huì)大曝光
助力高校AI人工智能學(xué)科建設(shè) 華清遠(yuǎn)見(jiàn)人工智能師資班
華清遠(yuǎn)見(jiàn)受邀參加四川省物聯(lián)網(wǎng)年會(huì),榮獲優(yōu)秀企業(yè)專(zhuān)家