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 題中...