C 面試常見問題

2021-08-04 15:20:11 字數 1133 閱讀 1239

1. 引用和指標的區別

區別:(1)引用不能為空,指標可以為空

(2)引用必須初始化,指標不需要

(3)引用初始化以後不能改變,指標可以改變初始化物件後的值

(4)引用訪問物件後是直接訪問,指標訪問物件是間接訪問

(5)引用大小是所引用物件的大小,指標大小是指標類本身的大小

(6)引用沒有const, 指標有const

(7)引用和指標的++運算子 

(8)引用不需要分配記憶體空間,指標需要。

2. 虛函式實現的基本原理

每乙個虛函式(無論本身還是繼承而來)的類都至少有乙個與之對應的虛函式表,其中放著該類所有虛函式對應的函式指標。

作用是實現了多型的機制,父類指標呼叫實際子類的成員函式。可以讓父類的指標有多種形態(實現多型所必須的,父類型別指標指向子類例項,執行會執行子類定義的函式)

析構函式必須是虛函式,建構函式不能是虛函式。

3. 多型的實現

根據虛函式表找到恰當的虛函式,對於乙個父類物件指標型別變數,給父類指標呼叫父類的函式,給子類物件指標,呼叫子類中的函式。

4. struct和class區別

大體相似,區別是訪問許可權,struct訪問的是public,class預設訪問的是private。

5.描述記憶體分配方式以及區別

(1)靜態儲存區域分配,內存在編譯時已經分配好了,例如全域性變數,static變數

(2)在棧上建立,執行函式時,內部區域性變數儲存單元在棧上建立,結束時釋放。

(3)在堆上建立:動態記憶體分配,執行時用malloc或new 申請任意記憶體,自己控制free 或delete。

6. 陣列和指標區別?

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

指標記憶體只有指標變數位元組數。

7. static和const分別怎麼用?

static:全域性變數定義為乙個全域性靜態變數。

記憶體中的位置:靜態儲存區(整個程式期間都存在)

初始化:未初始化為0

作用域:申明檔案之外不可見

const: (1)限定變數為不可修改

(2)限定成員函式不可修改任何資料成員

8. 內聯函式和巨集的差別

內聯函式在編譯可以直接嵌到目標**中,巨集只是乙個簡單的替換。

C 面試常見問題

智慧型指標的作用是管理乙個指標,因為存在以下這種情況 申請的空間在函式結束時忘記釋放,造成記憶體洩漏。使用智慧型指標可以很大程度上的避免這個問題,因為智慧型指標就是乙個類,當超出了類的作用域是,類會自動呼叫析構函式,析構函式會自動釋放資源。所以智慧型指標的作用原理就是在函式結束時自動釋放記憶體空間,...

C 面試常見問題(五)

使用動態庫進行鏈結。動態庫 so dll 具體的區別下面這篇部落格講得比較詳細。大家可以移步至 c 靜態庫與動態庫 因此乙個物件的大小 所有非靜態成員大小的總和 由以上分析可以得到菱形繼承物件的記憶體大小問題 includeusing namespace std class a 大小為8,int 4...

C 面試常見問題補充

c 面試常見問題 1.指標常量 int const p 和常量指標的區別 const int p int const p 指標常量 本質上是乙個常量,指標用來說明常量的型別,表示該常量是乙個指標型別的常量。在指標常量中,指標自身的值是乙個常量,不可改變,始終指向同乙個位址,在定義的同時必須初始化。指...