c 面試語法基礎常見問題

2021-10-06 02:23:23 字數 1102 閱讀 8543

一.基礎

1.指標和引用的不同

從組合語言來看,乙個指標和乙個引用實現是相同的,他們都存放了乙個位址。

但c++的高階語言特性賦予了引用和指標在使用上的差異

(1).引用必須初始化,必須依賴另乙個物件才能存在,是另乙個物件的別名

(2).引用初始化之後不能被改變;指標可以改變所指的物件

(3).「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身的大小;

(4).指標常量本身(以p為例)允許定址,即&p返回指標常量(常變數)本身的位址,被引用物件用*p表示;引用變數本身(以r為例)不允許定址,&r返回的是被引用物件的位址,而不是變數r的位址(r的位址由編譯器掌握,程式設計師無法直接對它進行訪問),被引用物件直接用r表示。

2.指標與記憶體關係

指標變數儲存的是乙個記憶體中的位址,指標變數本身也有乙個在記憶體中的位址

&p 指標自己的位址

p 指標儲存的位址

4.static、const、#define的用法和區別

static

(1).隱藏

所有未加static字首的全域性變數和函式都具有全域性可見性,其它的原始檔也能訪問

如果加了static,就會對其它原始檔隱藏

(2).static的第二個作用是保持變數內容的持久。(static變數中的記憶功能和全域性生存期)

儲存在靜態資料區的變數會在程式剛開始執行時就完成初始化,也是唯一的一次初始化。共有兩種變數儲存在靜態儲存區:全域性變數和static變數,只不過和全域性變數比起來,static可以控制變數的可見範圍,說到底static還是用來隱藏的。

(3).static的第三個作用是預設初始化為0(static變數)

const的作用

5.記憶體模型

從上到下

核心虛擬記憶體區

使用者棧(向下生長)

|共享庫區域

|堆 (向上生長)

讀寫資料段(.data,.bss)

唯讀**段(.text,rodata)

6.棧和堆分配

棧是由系統自動分配的,堆由程式設計師申請

棧的大小一般是固定的,堆的大小是可變的

堆會產生碎片

C 面試常見問題

1.引用和指標的區別 區別 1 引用不能為空,指標可以為空 2 引用必須初始化,指標不需要 3 引用初始化以後不能改變,指標可以改變初始化物件後的值 4 引用訪問物件後是直接訪問,指標訪問物件是間接訪問 5 引用大小是所引用物件的大小,指標大小是指標類本身的大小 6 引用沒有const,指標有con...

C 面試常見問題

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

C 面試常見問題(五)

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