C 面試題彙總 持續更新

2021-08-09 19:38:07 字數 3931 閱讀 9430

1.c與c++的區別?

c是面向過程,c++物件導向,c是c++的乙個子集,c++還有繼承多型分裝等特性

2.c++11的新特性?c++14?c++17

c++11:auto關鍵字,nullptr,for新用法( for(auto a: b) ), 智慧型指標,匿名函式(lambda)等

c++14:auto關鍵字擴充套件,泛型lambda

c++17:

3.指標和引用的區別?

1.指標是乙個儲存記憶體位址的變數,指向乙個記憶體單元;引用是變數的別名

2.用const指標,沒有const引用

3.指標可以為空,引用必須初始化,不能為null

4.有多級指標,但沒有多級引用

5.指標初始化後可以指向其他儲存單元,引用初始化後不能改變

4.static和const區別?

const定義的常量在超出其作用域之後其空間會被釋放,而static定義的靜態常量在函式執行後不會釋放其儲存空間

5.const和define的區別?

1.define在預處理階段展開,const是在編譯執行階段使用

2.define沒有型別檢查,const在編譯器有執行檢查

3.define沒有分配記憶體,const會分配儲存空間

4.const可以節省空間,const常量在程式執行中只有乙份拷貝(靜態區), 而define有若干個拷貝

5.編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

6.巨集定義只做替換,程式執行時不分配記憶體

6.define和typedef的區別?

1.typedef常用於定義乙個識別符號及關鍵字的別名,不實際分配記憶體空間;define為巨集定義語句,在預處理過程中完成,缺少型別檢測

2.typdef和define不同,不僅僅是單純的型別替換

例如

#define int int* 

typedef int* pint;

int a, b; //a是int*型別,b是int

pint c, d; //c和d都是int*

7.struct和class的區別?

1.兩者都可以用成員函式,變數,以及可繼承

2.struct預設許可權為public, class為private

3.struct預設繼承方式為public,class為private

8.c++中的過載,覆蓋,隱藏的區別?

1.過載:同一作用域內,函式名相同,但是引數的型別與順序是不同的函式組為過載函式(不考慮返回值型別)

2.覆蓋(重寫):派生類中存在重新定義的函式。函式名,引數列表與返回值都和基類一致。基類的函式必須要有virtual修飾

3.隱藏:派生類存在和基類函式名相同的函式,基類可以不是virtual函式,引數列表和返回值也可以不同。

9.c++多型的實現,虛函式原理

多型: 指當不同的物件收到相同的訊息時,產生不同的動作

1.編譯時多型(靜態繫結):函式過載,運算子過載

2.執行時多型(動態繫結):虛函式

虛函式:

1.虛函式是通過一張虛函式表實現的(編譯器處理虛函式的方法:為每個類物件新增乙個隱藏成員,隱藏成員中儲存了乙個指向函式位址陣列的指標,稱為虛表指標,這種陣列成為虛函式表)

2.虛函式表中主要存放勒種虛函式的位址,用於解決繼承,重寫的問題

3.繼承的時候,若派生類重寫了虛函式,則原先指向基類虛函式位址的指標將指向派生類虛函式的位址

11.c++如何實現乙個介面

抽象類,使用純虛函式

12.c++虛繼承的作用

用於解決多重繼承的問題:

不同物件繼承的同一基類會在子類中存在的多份拷貝,浪費儲存空間,並且造成二義性

底層的實現:虛繼承的時候,子類都會有乙個虛基類的指標和虛基類表,所以基類只存在乙份拷貝,避免了二義性

13.c++虛析構函式,虛建構函式

1.虛建構函式:c++不能設定虛建構函式,

delphi可以設定虛建構函式。

14.c++中的建構函式

1.預設建構函式

2.一般建構函式

3.拷貝建構函式

4.轉換建構函式

15.四種型別轉換的區別

static_cast:

dynamic_cast:

const_cast:

reinpreter_cast:

16.淺拷貝和深拷貝

類中預設的複製建構函式進行的是淺拷貝。

1.淺拷貝只是對指標的拷貝,拷貝後指向同一記憶體空間;深拷貝不只是對指標拷貝,還對內容進行的拷貝,指向不同的位址

2.淺拷貝容易造成記憶體洩漏(析構的時候析構了兩次)

17.share_ptr, weak_ptr, auto_ptr以及unique_ptr

18.c++的記憶體模型

1.堆區(動態區):用於存放new分配的變數

2.棧區:用於存放區域性變數

3.靜態儲存區:用於儲存全域性變數和靜態變數

4.常量儲存區:儲存常量,字串常量等

5.**區:儲存**

關於自由儲存區網上意見不同,有的認為可以等價於堆區

5.自由儲存區:存放malloc分配的變數

19.c++的記憶體對齊

20.new/delete和malloc/free的區別

1.malloc/free是庫函式, new/delete是操作符

2.malloc/free只是單純的申請空間,new/delete還會呼叫建構函式和析構函式

3.malloc不丟擲異常,new會丟擲異常

21.new operator, operator new, placement new的區別

22.stl中vector的實現

23.stl中unordered_map和map的區別

1.unordered_map底層為hashtable, map底層為紅黑樹

2.unordered_map是無序的

24.stl中set和map的區別

1.兩者的底層都是紅黑樹

2.set的節點是乙個元素,map的節點是一對元素(key和value)

3.元素都會被自動排序

4.都不允許鍵值重複

5.set不能改變值,因為key=value;map可以通過key改變value

25.stl紅黑樹的實現

1.紅黑樹是乙個二叉搜尋樹

2.滿足4條規則(a.節點不是紅色就是黑色b.根節點為黑色c.如果節點為紅色,子節點必須為黑色d.任意節點到null的黑色節點數相同)

3.通過旋轉維持紅黑樹的結構

26.stl hashtable實現

27.stl常見容器的區別,用途

vector:

list:

deque:

28.如何實現乙個不可繼承的類

28.實現乙個string類

c 面試面試題 持續更新中。。。

1 下面輸出什麼?public class a public class b a class program 解答 首先4.0 是編譯不過,缺少隱式轉換,這種操作本來就是錯誤的 執行時5.0丟擲異常,無法將a轉換成b 1.0 print a 2.0 print b,3.0 print b 2 將乙個...

C 面試題整理 持續更新

1.自己實現memcpy void mymemcopy void dest,const void src,size t count 2.兩個有序鍊錶合成乙個有序鍊錶 遞迴演算法 nodeptr merge lists nodeptr one head,nodeptr two head else re...

TCP IP面試題(持續更新)

no.1 tcp ip基礎 這些知識點都可以參考 no.2 常見面試題 tcp與udp的區別 tcp協議是有連線的,有連線的意思是開始傳輸實際資料之前tcp的客戶端和伺服器端必須通過三次握手建立連線,會話結束之後通過四次揮手結束連線。而udp是無連線的 tcp協議保證資料按序傳送,按序到達,提供超時...