在一些面試中,還有當你投簡歷時考官可能問到一些比較簡單,但容易出錯的問題,給人的第一印象。下面有總結了一些關於區別的問題
1 請說出const與#define 相比,有何優點?
答案:1) const 常量有數據類型,而宏常量沒有數據類型。編譯器可以對前者進行類型安全檢查。而對後者只進行字符替換,沒有類型安全檢查,並且在字符替換可能會產生意料不到的錯誤。
2)有些集成化的調試工具可以對const 常量進行調試,但是不能對宏常量進行調試。
2. inline函數和用macro定義的函數之間有什麼區別?
答案:由於inline函數具有內部鏈接,因此數個文件定義相同名字的內聯函數不會發生衝突,而類函數宏就不行,會產生重複定義。
inline函數是真正的函數,可以由語句組成;但類函數宏所作的只是替換,不是真正的函數,當然也不能有語句。
macro定義
只是很初級的一種代換,實現的功能很單一而且安全性很差,比如類型錯誤、括號漏寫都會造成很大的錯誤, 而且錯誤不容易被發現,隱患很大。
inline函數
內聯函數要比前者好很多功能也要全面很多!最主要的是:內聯函數能夠進行安全檢查(比如參數類型 等)
3. 簡述數組與指針的區別?
答案:數組要麼在靜態存儲區被創建(如全局數組),要麼在棧上被創建。指針可以隨時指向任意類型的內存塊。
(1)修改內容上的差別
char a[] = “hello”;
a[0] = ‘X’;
char *p = “world”; // 注意p 指向常量字符串
p[0] = ‘X’; // 編譯器不能發現該錯誤,運行時錯誤
(2) 用運算符sizeof 可以計算出數組的容量(字節數)。sizeof(p),p 爲指針得到的是一個指針變量的字節數,而不是p 所指的內存容量。C++/C 語言沒有辦法知道指針所指的內存容量,除非在申請內存時記住它。注意當數組作爲函數的參數進行傳遞時,該數組自動退化爲同類型的指針。
char a[] = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12 字節
cout<< sizeof(p) << endl; // 4 字節
計算數組和指針的內存容量
void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4 字節而不是100 字節
}
5. New delete 與malloc free 的聯繫與區別?
答案:都是在堆(heap)上進行動態的內存操作。用malloc函數需要指定內存分配的字節數並且不能初始化對象,new 會自動調用對象的構造函數。delete 會調用對象的destructor,而free 不會調用對象的destructor.
6. struct 和 class 的區別
7結構與聯合有和區別?
8#i nclude 與#i nclude "file.h"的區別?