C 經典面試題 一

2021-07-03 12:23:32 字數 2836 閱讀 5407

最近看一些面試題,覺得如果自己被問到了,並不能很利落的回答出來。

一是從來沒有這個意識,二是沒有認真的梳理下。

1.c和c++中struct有什麼區別?

1> c++中的struct類似於class,有變數,有建構函式、虛函式等,有繼承,多型等類的特徵;

2> c中的struct只有變數,不能有函式,但是可以有函式指標

2.c++中的struct和class有什麼區別?

在c++中,兩者區別不大,但是有2個主要的區別

1>. 繼承許可權:struct預設是public繼承;class預設是private繼承

2>. 訪問許可權:struct預設是public訪問;class預設是private訪問

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

【標準答案】

#ifdef __cplusplus

cout<<「c++";

#else

cout<<"c";

#endif

(這個以前還真沒注意過,漲姿勢了。。。)

4. c和c++有什麼不同?

【參***】

從機制上:

c是面向過程的(但c也可以編寫物件導向的程式);

c++是物件導向的,提供了類。但是,c++編寫物件導向的程式比c容易。

從適用的方向: c適合要求**體積小的,效率高的場合,如嵌入式; c++適合更上層的,複雜的; llinux核心大部分是c寫的,因為它是系統軟體,效率要求極高。

從名稱上也可以看出,c++比c多了+,說明c++是c的超集;那為什麼不叫c+而叫c++呢,是因為c++比 c來說擴充的東西太多了,所以就在c後面放上兩個+;於是就成了c++。

c語言是結構化程式設計語言,c++是物件導向程式設計語言。 c++側重於物件而不是過程,側重於類的設計而不是邏輯的設計。

關於這個問題,個人覺得《effective c++》上面第一條說的很好,

view c++ as a federation of languages. 把c++當做乙個語言聯邦。

c++由四部分組成

1> c語言部分;

2> 物件導向部分,包括封裝、繼承、多型這些c語言所沒有的特性;

3> 泛型程式設計部分,大多數類、函式要考慮到把它設計成模板,方便復用;

4> stl庫,裡面封裝了大量的優秀模板,是 3> 中內容的整合, 學會使用它們可以讓**更高效。當然,最好去深入了解stl原始碼,那樣會對c++有更深的理解。

5.「引用」與指標的區別是什麼?

【參***】

指標通過某個指標變數指向乙個物件後,對它所指向的變數間接操作。

程式中使用指標,程式的可讀性差;而引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。

在另一本c++著作《more effective c++》裡,第一條就是論述 point 和 reference的區別

總結一下 ,

1> 指標是乙個儲存位址的變數,而引用是乙個變數的別名。所以在乙個函式中,傳引用要比傳指標速度更快。

2> 指標可以指向乙個空值,而引用必須初始化。指標可以如下形式出現

int *p;
是合法但不合理的(相當於是乙個野指標)。

可以宣告乙個指向空值的指標

int *p=null

而引用不行

int &r;
是錯誤的

引用必須初始化為乙個變數的別名,如

int a=5;

int &r=a;

3> 也是因為 2>的特性,指標在使用前要判斷是否為空,而引用必定不為空(否則會報錯),所以不用判斷。

4> 指標可以更改指向的記憶體位址,而引用是和變數繫結的,不可更改。

5> 在運算子過載過程中,通常返回乙個引用往往比返回乙個指標更好,使用指標易引起語義上的歧義。

6.class a

;class b: class a 

virtual void func2()

a, a中的func1和b中的func2都是虛函式

b, a中的func1和b中的func2都不是虛函式.

c, a中的func2是虛函式.,b中的func1不是虛函式.

d, a中的func2不是虛函式,b中的func1是虛函式. 

【標準答案】a

水題。。

7.int id[sizeof(unsigned long)];這個對嗎?為什麼?

【標準答案】

正確 這個 sizeof是編譯時運算子,編譯時就確定了 可以看成和機器有關的常量。

8.某檔案中定義的靜態全域性變數(或稱靜態外部變數)其作用域是 ()?

a.只限某個函式

b.本檔案   c.跨檔案 d.不限制作用域

【參***】b。靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。

在《c和指標》上看過,static關鍵字會改變具有外部鏈結性的變數和函式

9.c++函式中值的傳遞方式有哪幾種?

【標準答案】

c++函式的三種傳遞方式為:值傳遞、指標傳遞和引用傳遞。

(指標傳遞就是通常說的位址傳遞)

10.對於乙個頻繁使用的短小函式,在c語言中應用什麼實現,在c++中應用什麼實現?

【標準答案】c用巨集定義,c++用inline

define實現的函式功能容易出bug,所以在c++中最好不要使用

未完。。。待續(*^_v_^*)

c 經典面試題

1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...

C 經典面試題

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

C 經典面試題

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