C 經典面試題 三

2021-07-03 12:25:45 字數 2347 閱讀 2797

21.用c++寫個程式,如何判斷乙個作業系統是16位還是32位的?

【標準答案】定義乙個指標p,列印出sizeof(p),如果節果是4,則表示該作業系統是32位,列印結果是2,表示是16位。

22.用c++寫個程式,如何判斷乙個作業系統是16位還是32位的?不能用sizeof()函式。

【參***】 

int a = ~0;

if( a>65536 )

{ cout<<"32 bit"<

這個參***估計參考了不少年了。。。現在大部分機器都32、64位的了,所以,應該把65536改為4294967296,來判斷機器是 32位 || 64 位

23.

void * ( * (*fp1)(int))[10];

float (*(* fp2)(int,int,int))(int);

int (* ( * fp3)())[10]();

分別表示什麼意思?

【標準答案】  

1.void * ( * (*fp1)(int))[10];  

fp1是乙個指標,指向乙個函式,這個函式的引數為int型,函式的返回值是乙個指標,這個指標指向乙個陣列,這個陣列有10個元素,每個元素是乙個void*型指標。

2.float (*(* fp2)(int,int,int))(int);  

fp2是乙個指標,指向乙個函式,這個函式的引數為3個int型,函式的返回值是乙個指標,這個指標指向乙個函式,這個函式的引數為int型,函式的返回值是float型。

3.int (* ( * fp3)())[10]();  

fp3是乙個指標,指向乙個函式,這個函式的引數為空,函式的返回值是乙個指標,這個指標指向乙個陣列,這個陣列有10個元素,每個元素是乙個指標,指向乙個函式,這個函式的引數為空,函式的返回值是int型。

24.多型類中的虛函式表是compile-time,還是run-time時建立的?

【標準答案】虛函式表是在編譯期就建立了,各個虛函式這時被組織成了乙個虛函式的入口位址的陣列.而物件的隱藏成員--虛函式表指標是在執行期--也就是建構函式被呼叫時進行初始化的,這是實現多型的關鍵。

25.錯誤的轉義字元是 ()

a.'\091' b.'\\'

c.'\0' d.'\'『

【標準答案】a

a錯誤的關鍵在於,其中出現了9,這樣它就不是8進製的轉換了。

26.若陣列名作實參而指標變數作形參,函式呼叫實參傳給形參的是 ()

a.陣列的長度b.陣列第乙個元素的值c.陣列所有元素的值d.陣列第乙個元素的位址

【標準答案】d

27.變數的指標含意是指變數的 ()

a.值  b.位址 c.儲存  d.名字

【標準答案】b

28.記憶體的分配方式有幾種?

【參***】

一、從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數。

二、在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

三、從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。

29.float a,b,c ,問等式 (a+b)+c==(b+a)+c 和(a+b)+c==(a+c)+b能否成立?

【參***】

兩者都不行。在比較float或double時,不能簡單地比較。由於計算誤差,相等的概率很低。應判斷兩數之差是否落在區間(-e,e)內。這個e應比浮點數的精度大乙個數量級。  

我想到的是另乙個運算子 %。不能對float或double使用%運算子,原因和參***中的說法類似

30.全域性變數和區域性變數有什麼區別?是怎麼實現的?作業系統和編譯器是怎麼知道的? 

【參***】

1>/2>

生命週期不同:

全域性變數隨主程式建立而建立,隨主程式銷毀而銷毀;記憶體中分配在全域性資料區。

區域性變數在區域性函式內部,甚至區域性迴圈體等內部存在,退出就不存在; 分配在棧區。

使用方式不同:

通過宣告後全域性變數程式的各個部分都可以用到;

區域性變數只能在區域性使用;  

3>

作業系統和編譯器通過記憶體分配的位置來知道的,

全域性變數分配在全域性資料段並且在程式開始執行的時候被載入。

區域性變數則分配在堆疊裡面 。

另,全域性變數會被初始化為0,而區域性變數以隨機值進行初始化

未完。。。待續(*^_v_^*)

c 經典面試題

1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...

C 經典面試題

1.輸入乙個字串,將其逆序後輸出。使用c 不建議用偽碼 include using namespace std void main a p malloc 1024 應該寫成 p char malloc 1024 沒有釋放p的空間,造成記憶體洩漏。8.下面的 有什麼問題?並請給出正確的寫法。void ...

C 經典面試題

c 知識總結目錄索引 二 哪些函式不能宣告成虛函式 三 為什麼析構函式和建構函式內不能呼叫虛函式 四 為什麼析構函式最好宣告成虛函式 五 實現乙個不能被繼承的類 六 實現乙個類定義出來的物件都在堆上面 七 實現乙個類定義出來的物件都在棧上面 八 實現乙個類,定義出的物件不能在堆上 九 用c語言實現繼...