1.c和c++中struct 有什麼區別
答:c沒有protection行為,不可以定義函式,但可以有函式指標
c++有protection行為,預設是public;可以定義函式。
2.c++中的struct和class有什麼區別
答:從語法上講,class和struct做型別定義時只有兩點區別:
1> 預設繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理
2> 成員的預設訪問許可權。class的成員預設是private許可權,struct預設是public許可權。
除了這兩點,class和struct基本就是乙個東西。語法上沒有任何其它區別。
3.如何判斷一段程式是由c編譯程式還是由c++編譯程式編譯的
答:有乙個巨集可以用來判斷
#ifdef __cplusplus
cout << 「c++」;
#else
cout << 「c」;
#endif
4.c和c++有什麼不同
答:從機制上:c是面向過程的(但c也可以編寫物件導向的程式);c++是物件導向的,提供了類。但是,c++編寫物件導向的程式比c容易。
從適用的方向:c適合要求**體積小的,效率高的場合,如嵌入式,c++適合更上層的,複雜的;linux核心大部分是c寫的,因為它是系統軟體,效率要求極高。
從名稱上也可以看出,c++比c多了+,說明c++是c的超集,那為什麼不叫c+ 而叫c++呢,是因為c++比c來說擴充的東西太多了,所以就在c後面放上兩個+,於是就成了c++
c語言是結構化程式設計語言,c++是物件導向程式設計語言
c++側重於物件而不是過程,側重於類的設計而不是邏輯的設計。
5.「引用」與指標的區別是什麼?
答:指標通過某個指標變數指向乙個物件後,對它所指向的變數間接操作。程式中使用指標,程式的可讀性差,而引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。
6.class a
classb: class a {void func1(){cout << 「fun1 in class b」
id [sizeof(unsigned long)]; 這個對嗎?為什麼? 答:正確;這個sizeof是編譯時運算子,編譯時就確定了,可以看成和機器有關的常量。 8.某檔案中定義的靜態全域性變數(或稱靜態外部變數)其作用域是()? 答:本檔案。靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它。 由於靜態全域性變數作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。 9.c++函式中值的傳遞方式有哪幾種? 答:c++函式的三種傳遞方式為:值傳遞、指標傳遞和引用傳遞。 10.對於乙個頻繁使用的短小函式,在c語言中應用什麼實現,在c++中應用什麼實現 答:c用巨集定義,c++用inline 11.引用與指標有什麼區別 答:1>引用必須被初始化,指標不必 2>引用初始化以後不能被改變(c++ 11可以改變),指標可以改變所指的物件 3>不存在指向空值的引用,但是存在指向空值的指標。 12.c++中virtual與inline的含義分別是什麼? 答:在基類成員函式的宣告前加上virtual關鍵字,意味著將該成員函式宣告為虛函式。inline與函式的定義體放在一起,使該函式稱為內聯。 inline是一種用於實現的關鍵字,而不是用於宣告的關鍵字。 虛函式的特點,如果希望派生類能夠重新定義基類的方法,則在基類中將該方法定義為虛方法,這樣可以啟用動態聯編。 內聯函式的特點,使用內聯函式的目的是為了提高函式的執行效率。內聯函式體的**不能過長,因為內聯函式省去呼叫函式的時間是以**膨脹為代介的。內聯函式不能包含迴圈語句,因為執行迴圈語句要比呼叫函式的開銷大。 13.vc中,編譯工具條內的debug與release選項是什麼含義? 答:debug通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。release稱為發布版本,它往往是進行了各種優化,使得程式在**大小和執行速度上都是最優的,以便使用者很好地使用。 debug帶有大量的除錯**,執行時需要相應的執行庫,發布模式程式緊湊不含有除錯**和資訊,直接可以執行(如果不需要執行庫) 14.函式assert的用法? 答:斷言assert是僅在debug版本起作用的巨集,用於檢查「不應該」發生的情況。程式設計師可以把assert看成乙個在任何系統狀態下都可以安全使用的無害測試手段。 與#define 的比較,const有什麼優點? 答:1>const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。 而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤(邊際效應)。 2>有些整合化的除錯工具可以對const常量進行除錯,但是不能對巨集常量進行除錯。 16.請你談談引用和指標的區別 1>引用被建立的同時必須被初始化(指標則可以在任何時候被初始化) 2>不能有null引用,左值引用必須與合法的儲存單元關聯(指標則可以是null)記憶體,右值引用引用暫存器。 3>一旦引用被初始化,就不能改變引用的關係(指標則可以隨時改變所指的物件)。 17.有了malloc/free為什麼還要new/delete? 答:malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。 對於非內部資料型別的物件而言,光用malloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。 因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。 18.如果在申請動態記憶體時找不到足夠大的記憶體塊,malloc和new將返回null指標,宣告記憶體申請失敗。你是怎麼處理記憶體耗盡的? 答:1>判斷指標是否為null,如果是則馬上用return語句終止本函式。 2>判斷指標是否為null,如果是則馬上用exit(1)終止整個程式的執行 3>為new和malloc設定異常處理函式。例如visual c++可以用_set_new_hander函式為new設定使用者自定義的異常處理函式,也可以讓malloc享用與new相同的異常處理函式。 19.c++是不是型別安全的? 答:不是。兩個不同型別的指標之間可以強制轉換(用reinterpret cast)。 符號常量 1>const char *p 2>char const *p 3>char * const p 說明上面三種描述的區別: 1)p是乙個指向const char的指標,p是可以改變指向的,但是p指向的值是不能改變的 2)p指向的恰好是乙個指向const的char的普通指標 3)p是乙個指標,這個指標是指向 char 的const指標 1和2的定義是一樣的。 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位,需要用到sizeof()。 23.voidfp1)(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.多型類中的虛函式表是***pilie-time,還是run-time時建立的? 虛函式表是在編譯期就建立了,各個虛函式這時被組織成了乙個虛函式的入口位址的陣列,而物件的隱藏成員—虛函式表指標是在執行期—也就是建構函式被呼叫時進行初始化的,這是實現多型的關鍵。 25.錯誤的轉義字元是: a.』\091』 b.』\\』 c.』\0』 d.』\』 『 答:a ,因為0開頭的是二進位制 26.若陣列名作實參而指標變數作形參,函式呼叫實參傳給形參的是 答:陣列第乙個元素的位址 27.記憶體的分配方式有幾種? 答:1>從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數 2>在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。 3>從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。 c c 筆試 面試題目大彙總 1.求下面函式的返回值 微軟 intfunc x returncountx 假定x 9999。答案 8 思路 將x轉化為2進製,看含有的1的個數。2.什麼是 引用 申明和使用 引用 要注意哪些問題?答 引用就是某個目標變數的 別名 alias 對應用的操作與對變數直接操... 本試題僅用於考查c c程式設計師的基本程式設計技能。內容限於c c常用語法,不涉及資料結構 演算法以及深奧的語法。考試成績能反映出考生的程式設計質量以及對c c的理解程度,但不能反映考生的智力和軟體開發能力。筆試時間90分鐘。請考生認真答題,切勿輕視。一 請填寫bool float,指標變數與 零值... c 筆試題彙總 鍊錶反轉 單向鍊錶的反轉是乙個經常被問到的乙個面試題,也是乙個非常基礎的問題。比如乙個鍊錶是這樣的 1 2 3 4 5 通過反轉後成為5 4 3 2 1。最容易想到的方法遍歷一遍鍊錶,利用乙個輔助指標,儲存遍歷過程中當前指標指向的下乙個元素,然後將當前節點元素的指標反轉後,利用已經儲...C和C面試題目
C 經典面試題
C 面試題彙總