c 經典面試題

2021-06-05 19:28:56 字數 2214 閱讀 8990

1、標頭檔案中的 ifndef/define/endif 幹什麼用?

答:防止該標頭檔案被重複引用。

2、#include 和 #include 「filename.h」 有什麼區別?

答:對於#include ,編譯器從標準庫路徑開始搜尋 filename.h

對於#include 「filename.h」 ,編譯器從使用者的工作路徑開始搜尋 filename.h

3、const 有什麼用途?(請至少說明兩種)

答:(1)可以定義 const 常量,(2)const 可以修飾函式的引數、返回值,甚至函式的定義體。被const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。

4、在c++ 程式中呼叫被 c 編譯器編譯後的函式,為什麼要加 extern 「c」?

答:c++語言支援函式過載,c 語言不支援函式過載。函式被c++編譯後在庫中的名字與c 語言的不同。假設某個函式的原型為: void foo(int x, int y);該函式被c 編譯器編譯後在庫中的名字為_foo , 而c++編譯器則會產生像_foo_int_int之類的名字。c++提供了c 連線交換指定符號extern「c」來解決名字匹配問題。

5、請簡述以下兩個for 迴圈的優缺點

for (i=0; i

優點:程式簡潔

缺點:多執行了n-1 次邏輯判斷,並且打斷了迴圈「流水線」作業,使得編譯器不能對迴圈進行優化處理,降低了效率。

if (condition)

else

優點:迴圈的效率高

缺點:程式不簡潔

6. void getmemory(char *p)

void test(void)

請問執行test 函式會有什麼樣的結果?

答:程式崩潰。

因為getmemory 並不能傳遞動態記憶體,test 函式中的 str 一直都是 null。strcpy(str,"hello world");將使程式崩潰。

7. char *getmemory(void)

void test(void)

請問執行test 函式會有什麼樣的結果?

答:可能是亂碼。

因為getmemory 返回的是指向「棧記憶體」的指標,該指標的位址不是 null,但其原現的內容已經被清除,新內容不可知。

8. void getmemory2(char **p, int num)

void test(void)

請問執行test 函式會有什麼樣的結果?

答:(1)能夠輸出hello;(2)記憶體洩漏

9. void test(void)

} 請問執行test 函式會有什麼樣的結果?

答:篡改動態記憶體區的內容,後果難以預料,非常危險。

因為free(str);之後,str 成為野指標,if(str != null)語句不起作用。

10.編寫strcpy 函式

已知strcpy 函式的原型是

char *strcpy(char *strdest, const char *strsrc);

其中strdest 是目的字串,strsrc 是源字串。

(1)不呼叫c++/c 的字串庫函式,請編寫函式 strcpy

char *strcpy(char *strdest, const char *strsrc);

(2)strcpy 能把strsrc 的內容複製到strdest,為什麼還要char * 型別的返回值?

答:為了實現鏈式表示式。 

例如 int length = strlen( strcpy( strdest, 「hello world」) );

11.編寫類string 的建構函式、析構函式和賦值函式

已知類string 的原型為:

class string ;

請編寫string 的上述4 個函式。

標準答案:

// string 的析構函式

string::~string(void)

// string 的普通建構函式

string::string(const char *str) 

else

} // 拷貝建構函式

string::string(const string &other) 

// 賦值函式

string & string::operate =(const string&other) 

C 經典面試題

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

C 經典面試題

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

C 經典面試題

最近看一些面試題,覺得如果自己被問到了,並不能很利落的回答出來。一是從來沒有這個意識,二是沒有認真的梳理下。11.引用與指標有什麼區別?參 1 引用必須被初始化,指標不必。2 引用初始化以後不能被改變,指標可以改變所指的物件。3 不存在指向空值的引用,但是存在指向空值的指標。可以參考下 在 5 題中...