CC 的一些面試基本題

2021-05-08 09:25:43 字數 4444 閱讀 3252

標題: c/c++的一些面試基本題

發信站: 兵馬俑bbs (wed jun 16 15:00:

14 2010), 本站( 下面是自己面試時或是聽別人說的一些c/c++面試基本題,都是語言細節和一些基本功,準備找工作的同學是可以看看。至於演算法方面的,我面試過的公司都沒有問什麼有深度的東西(總是問我排序,堆疊方面的)。關於演算法,我個人推薦一本書,algorithms in c(c演算法),我覺得這本書寫的很好,很值得看(我現在就在看),如果能掌握了這本書的話,面試演算法問題就不大了。

我知道很多人更喜歡introduction to algorithms(演算法導論)這本書,這本書我買了一年多,慚愧,看了一半都不到,習題寫得**也不多。不過我個人更喜歡algorithms in c這本書,感覺它更適合我。

下面就是那些題目了,答案基本上我檢驗過,應該錯誤不多。

1.求下面函式的返回值(騰訊,阿里巴巴今年筆試都有)

int func(int x)

return countx;

}假定x = 9999。 答案:8

思路:將x化為2進製數,看1的位數。

2. 什麼是「引用」?申明和使用「引用」要注意哪些問題?(阿里巴巴面試的題)

答:引用就是某個目標變數的「別名」(alias),對應用的操作與對變數直接操作效果完全相同。申明乙個引用的時候,切記要對其進行初始化。

引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告乙個引用,不是新定義了乙個變數,它只表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。不能建立陣列的引用。

3.求下面程式輸出:

#i nclude

uniona;

int main()

答案:266 (低位低位址,高位高位址,記憶體占用情況是ox010a)

4.在c++ 程式中呼叫被c 編譯器編譯後的函式,為什麼要加extern 「c」,extern 「c」,extern用法?(阿里巴巴面試我的題)

答:這個題主要考察c和c++一些交叉編譯技術,要答很多內容,我當時也沒答全。

5.main 函式執行以前,還會執行什麼**?

答案:全域性物件的建構函式會在main 函式之前執行。

6.描述記憶體分配方式以及它們的區別(阿里巴巴面試我)?

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

2) 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集。

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

7.當乙個結構體a 中沒有生命任何成員變數與成員函式,這時sizeof(a)的值是多少,如果不是零,請解釋一下編譯器為什麼沒有讓它為零。(autodesk)

答案:肯定不是零。舉個反例,如果是零的話,宣告乙個a[10]物件陣列,而每乙個物件占用的空間是零,這時就沒辦法區分a[0],a[1]…了(事實上,我在linux gcc 下測試過,結果確實是0,汗。。

)。8.比較c++中的4種型別轉換方式及運用(阿里巴巴一面我,當時沒答上,很久沒用c++寫程式,忘了很多東西)?

const_cast,字面上理解就是去const屬性。

static_cast,命名上理解是靜態型別轉換。如int轉換成char。

dynamic_cast,命名上理解是動態型別轉換。如子類和父類之間的多台型別轉換。

reinterpreter_cast,僅僅重新解釋型別,但沒有進行二進位制的轉換。

具體的運用只要是要注意 dynamic_cast和 reinterpreter_cast

9. 請說出const與#define 相比,有何優點?

答案:1) const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。

而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤。

2) 有些整合化的除錯工具可以對const 常量進行除錯,但是不能對巨集常量進行除錯。

10.簡述陣列與指標的區別?

陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。指標可以隨時指向任意型別的記憶體塊。

(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])

11.類成員函式的過載、覆蓋和隱藏區別?

答案:a.成員函式被過載的特徵:

(1)相同的範圍(在同乙個類中);

(2)函式名字相同;

(3)引數不同;

(4)virtual 關鍵字可有可無。

b.覆蓋是指派生類函式覆蓋基類函式,特徵是:

(1)不同的範圍(分別位於派生類與基類);

(2)函式名字相同;

(3)引數相同;

(4)基類函式必須有virtual 關鍵字。

c.「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下:

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual 關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)

12.不用if語句和? :語句比較2個數的大小。

答案:( ( a + b ) + abs( a - b ) ) / 2

13.如何列印出當前原始檔的檔名以及原始檔的當前行號?

答案:cout << __file__ ;

cout<<__line__ ;

__file__和__line__是系統預定義巨集,這種巨集並不是在某個檔案中定義的,而是由編譯器定義的。

14.main 主函式執行完畢後,是否可能會再執行一段**,給出說明?

答案:可以,可以用_onexit 註冊乙個函式,它會在main 之後執行。

15.如何判斷一段程式是由c 編譯程式還是由c++編譯程式編譯的?

答案:#ifdef __cplusplus

cout<<"c++";

#else

cout<<"c";

#endif

16.下面程式的輸出結果是什麼啊?

#define sqr(x) x*x

int main(int argc, char* argv)

答案: 1

17,const在乙個函式中的4個位置的不同用法(面試我時我沒有答上這個題,汗)

主要是要理解const函式,不能改變物件。否則編譯會報錯。

18.寫出執行結果:

union v x;

unsigned char c;

} v;

v.c = 100;

printf("%d", v.x.s2);

}答案: 1

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

a1:16位的系統下,

int i = 65536;

cout << i; // 輸出0;

int i = 65535;

cout << i; // 輸出-1;

32位的系統下,

int i = 65536;

cout << i; // 輸出65536;

int i = 65535;

cout << i; // 輸出65535;

a2:int a = ~0;

if( a>65536 ) c;

c.a = 1;

return (c.b == 1); }}

27.多型類中的虛函式表是compile-time,還是run-time時建立的(此題我沒有答上)?

答:是在編譯時建立的。但在執行時刻才能知道究竟事呼叫那個函式。

28.寫乙個函式,判斷乙個int型的整數是否是2的冪,即是否可以表示成2^x的形式(不可以用迴圈)

bool istwopower(int s)

一些簡單的c c 面試題

第1題 考查對volatile關鍵字的認識 1.include 2.3.static jmp buf buf 4.5.main 6.15.b 5 16.longjmp buf 1 17.複製 請問,這段程式的輸出是 a 3 b 5 c 0 d 以上均不是 第2題 考查型別轉換 1.main 2.9....

打好CC的一些技巧

選擇獵頭作為職業,那一定要充滿活力 信心 熱情和興趣。cc作為獵手的乙個基本功,是相當的重要的。如何打好cc,這可能是剛入行的新人比較困惑的一件事情。打 看似簡單,但卻要一定的膽量和技巧。以下幾方面是應該注意的 1 心態 該用什麼樣的心態去打cc,四個字 自信 放鬆 剛入行打cc那種誠惶誠恐 緊張難...

股指期數的一些基本制度

持倉限額制度 交易所為了防範市場操縱和少數投資者風險過度集中的情況,對會員和客戶手中持有的合約數量上限進行一定的限制,這就是持倉限額制度。限倉數量是指交易所規定結算會員或投資者可以持有的 按單邊計算的某一合約的最大數額。一旦會員或客戶的持倉總數超過了這個數額,交易所可按規定強行平倉或者提高保證金比例...