- 相關(guān)推薦
C/C++經(jīng)典面試題
面試題 1:變量的聲明和定義有什么區(qū)別
為變量分配地址和存儲(chǔ)空間的稱為定義,不分配地址的稱為聲明。一個(gè)變量可以在多個(gè)地方聲明,
但是只在一個(gè)地方定義。加入 extern修飾的是變量的聲明,說(shuō)明此變量將在文件以外或在文件后面部分
定義。
說(shuō)明:很多時(shí)候一個(gè)變量,只是聲明不分配內(nèi)存空間,直到具體使用時(shí)才初始化,分配內(nèi)存空間,
如外部變量。
面試題 2:寫出 bool 、int、 float、指針變量與“零值”比較的 if 語(yǔ)句
bool型數(shù)據(jù):
if( flag )
{
A;
}
else
{
B;
}
int型數(shù)據(jù):
if( 0 != flag )
{
A;
}
else
{
B;
}
指針型數(shù):
if( NULL == flag )
{
A;
}
else
{
B;
}
float型數(shù)據(jù):
if ( ( flag >= NORM ) && ( flag <= NORM ) )
{
A;
2
}
注意:應(yīng)特別注意在 int、指針型變量和“零值”比較的時(shí)候,把“零值”放在左邊,這樣當(dāng)把“==”
誤寫成“=”時(shí),編譯器可以報(bào)錯(cuò),否則這種邏輯錯(cuò)誤不容易發(fā)現(xiàn),并且可能導(dǎo)致很嚴(yán)重的后果。
面試題 3:sizeof 和strlen的區(qū)別
sizeof和 strlen 有以下區(qū)別:
sizeof是一個(gè)操作符,strlen是庫(kù)函數(shù)。
sizeof的參數(shù)可以是數(shù)據(jù)的類型,也可以是變量,而 strlen只能以結(jié)尾為‘\0‘的字符串作參數(shù)。
編譯器在編譯時(shí)就計(jì)算出了 sizeof 的結(jié)果。而 strlen 函數(shù)必須在運(yùn)行時(shí)才能計(jì)算出來(lái)。并且 sizeof
計(jì)算的是數(shù)據(jù)類型占內(nèi)存的大小,而 strlen計(jì)算的是字符串實(shí)際的長(zhǎng)度。
數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了。
注意:有些是操作符看起來(lái)像是函數(shù),而有些函數(shù)名看起來(lái)又像操作符,這類容易混淆的名稱一定
要加以區(qū)分,否則遇到數(shù)組名這類特殊數(shù)據(jù)類型作參數(shù)時(shí)就很容易出錯(cuò)。最容易混淆為函數(shù)的操作符就
是 sizeof。
面試題 4:C 語(yǔ)言的關(guān)鍵字 static 和 C++ 的關(guān)鍵字 static 有什么區(qū)別
在C 中static 用來(lái)修飾局部靜態(tài)變量和外部靜態(tài)變量、函數(shù)。而 C++中除了上述功能外,還用來(lái)定
義類的成員變量和函數(shù)。即靜態(tài)成員和靜態(tài)成員函數(shù)。
注意:編程時(shí) static的記憶性,和全局性的特點(diǎn)可以讓在不同時(shí)期調(diào)用的函數(shù)進(jìn)行通信,傳遞信息,
而 C++的靜態(tài)成員則可以在多個(gè)對(duì)象實(shí)例間進(jìn)行通信,傳遞信息。
面試題 5:C中的 malloc 和C++中的 new有什么區(qū)別
malloc和 new有以下不同:
(1)new、 是操作符,可以重載,只能在 C++中使用。
(2)malloc、free是函數(shù),可以覆蓋,C、C++中都可以使用。
(3)new 可以調(diào)用對(duì)象的構(gòu)造函數(shù),對(duì)應(yīng)的 調(diào)用相應(yīng)的析構(gòu)函數(shù)。
(4)malloc僅僅分配內(nèi)存,free 僅僅回收內(nèi)存,并不執(zhí)行構(gòu)造和析構(gòu)函數(shù)
(5)new、 返回的是某種數(shù)據(jù)類型指針,malloc、free 返回的是void指針。
注意:malloc申請(qǐng)的內(nèi)存空間要用 free釋放,而 new申請(qǐng)的內(nèi)存空間要用 釋放,不要混用。
因?yàn)閮烧邔?shí)現(xiàn)的機(jī)理不同。
面試題 6:寫一個(gè)“標(biāo)準(zhǔn)”宏 MIN
#define min(a,b)((a)<=(b)?(a):(b))
注意:在調(diào)用時(shí)一定要注意這個(gè)宏定義的副作用,如下調(diào)用:
((++*p)<=(x)?(++*p):(x)。
p指針就自加了兩次,違背了 MIN的本意。
面試題 7:一個(gè)指針可以是 volatile 嗎
可以,因?yàn)橹羔樅推胀ㄗ兞恳粯樱袝r(shí)也有變化程序的不可控性。常見例:子中斷服務(wù)子程序修改
一個(gè)指向一個(gè) buffer的指針時(shí),必須用 volatile來(lái)修飾這個(gè)指針。
說(shuō)明:指針是一種普通的變量,從訪問(wèn)上沒有什么不同于其他變量的特性。其保存的數(shù)值是個(gè)整型
數(shù)據(jù),和整型變量不同的是,這個(gè)整型數(shù)據(jù)指向的是一段內(nèi)存地址。
面試題 8:a 和&a 有什么區(qū)別
請(qǐng)寫出以下代碼的打印結(jié)果,主要目的是考察 a和&a的區(qū)別。
#include
void main( void )
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf(“%d,%d”,*(a+1),*(ptr-1));
return;
}
輸出結(jié)果:2,5。
注意:數(shù)組名 a可以作數(shù)組的首地址,而&a是數(shù)組的指針。思考,將原式的 int *ptr=(int *)(&a+1);
改為 int *ptr=(int *)(a+1);時(shí)輸出結(jié)果將是什么呢?
面試題 9:簡(jiǎn)述 C、C++程序編譯的內(nèi)存分配情況
C、C++中內(nèi)存分配方式可以分為三種:
(1)從靜態(tài)存儲(chǔ)區(qū)域分配:
內(nèi)存在程序編譯時(shí)就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。速度快、不容易出錯(cuò),
因?yàn)橛邢到y(tǒng)會(huì)善后。例如全局變量,static變量等。
(2)在棧上分配:
在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋
放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。
(3)從堆上分配:
即動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用 malloc 或 new 申請(qǐng)任意大小的內(nèi)存,程序員自己負(fù)責(zé)在何
時(shí)用free 或 釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活。如果在堆上分配了空間,
就有責(zé)任回收它,否則運(yùn)行的程序會(huì)出現(xiàn)內(nèi)存泄漏,另外頻繁地分配和釋放不同大小的堆空間將會(huì)產(chǎn)生
堆內(nèi)碎塊。
一個(gè)C、C++程序編譯時(shí)內(nèi)存分為 5大存儲(chǔ)區(qū):堆區(qū)、棧區(qū)、全局區(qū)、文字常量區(qū)、程序代碼區(qū)。
4
面試題 10:簡(jiǎn)述 strcpy、sprintf 與 memcpy的區(qū)別
三者主要有以下不同之處:
(1)操作對(duì)象不同,strcpy的兩個(gè)操作對(duì)象均為字符串,sprintf的操作源對(duì)象可以是多種數(shù)據(jù)類型,
目的操作對(duì)象是字符串, memcpy 的兩個(gè)對(duì)象就是兩個(gè)任意可操作的內(nèi)存地址,并不限于何種數(shù)據(jù)類型。
(2)執(zhí)行效率不同,memcpy最高,strcpy次之,sprintf的效率最低。
(3)實(shí)現(xiàn)功能不同,strcpy主要實(shí)現(xiàn)字符串變量間的拷貝,sprintf 主要實(shí)現(xiàn)其他數(shù)據(jù)類型格式到字
符串的轉(zhuǎn)化,memcpy主要是內(nèi)存塊間的拷貝。
說(shuō)明:strcpy、sprintf 與memcpy都可以實(shí)現(xiàn)拷貝的功能,但是針對(duì)的對(duì)象不同,根據(jù)實(shí)際需求,來(lái)
選擇合適的函數(shù)實(shí)現(xiàn)拷貝功能。
【C/C++經(jīng)典面試題】相關(guān)文章:
普天C++筆試題02-18
群碩筆試題Java和C++、C#11-21
C++工程師筆試題目11-25
C++程序員求職信11-21
最新凌陽(yáng)科技C++筆試分享11-21
C++程序員求職信范文11-21
UC(優(yōu)視科技)2014實(shí)習(xí)筆試題回憶版 C/C++編程11-21
有心情的試一試,考查C++/C程序員的基本編程技能11-11
面試題精選02-18