第3課 進化後的const分析

2021-09-26 14:56:38 字數 2739 閱讀 3245

(1)const修飾的變數具有唯讀屬性,本質還是變數,只是告訴編譯器該變數不能出現在賦值符號的左邊

(2)const 修飾的區域性變數在棧上分配空間,修飾的全域性變數在唯讀儲存區分配空間

(3)const 只在編譯期間有用,在執行期間無用。const 不能定義真正意義上的常量(const英文含義)!

(4)c 語言中的常量只有列舉這一種型別。

1 #include 2

3int main(void)4

const修飾區域性變數

1 #include 2

3const

int i = 10;4

5int main(void)6

1516

/***

17程式會發生段錯誤,const修飾的全域性變數放在唯讀儲存區,不能通過指標進行修改

18**

*/

const修飾的全域性變數

c++ 在 c 的基礎上對 const 進行了進化處理

(1)當編譯器碰見const宣告時在符號表中放入常量

(2)編譯過程中若發現使用常量則直接以符號表中的值替換

何為符號表?符號表是編譯器在編譯程式時產生的一張**,其本質是編譯器在編譯程式時產生的一種資料結構

(3)編譯過程中若發現下述情況則給對應的常量分配儲存空間

① 對 const 常量使用了extern關鍵字

② 對 const 常量使用&操作符

note1:c++ 編譯器雖然可能為const 常量分配記憶體空間,但不會使用其儲存空間中的值,這樣做只是為了相容 c 語言。

note2

何為相容?c++ 完全相容 c 指的是,用c編譯器能編譯通過的 c 程式,使用 c++ 編譯器也可以成功編譯,但是執行結果不一定相同

1 #include 2

3int

main()421

22//

在c中的輸出結果: c = 5 , *p = 5

23//

在c++中的輸出結果:c = 0 , *p = 5

c/c++中的const

本質分配記憶體

c唯讀變數

區域性變數分配在棧上;全域性變數分配在唯讀儲存區

c++常量

當使用 & 操作符對 const 常量取位址時會分配記憶體空間;

當 const 修飾全域性變數,並且在其它檔案中使用 extern 引用時會分配記憶體空間

定義處理方式

c++ 中的 constconst int c = 5;

由編譯器處理,編譯器會進行型別檢查和作用域檢查

巨集# define c 5

由預處理器處理,只是簡單的文字替換

1 #include 2

3void

f()489

void

g()10

1415

intmain()

16; //

在c中編譯該句**時,由於 a+b 兩個變數的和只能在執行時確定,因此會報錯

20//

c++可以從符號表中取得a + b的值為3

21int i = 0;22

23for(i=0; i

2427

28f();

29g();

3031

return0;

32 }

c++中的const與巨集

(1)與 c 語言不同,c++ 中的const 不是唯讀變數

(2)c++ 中的const是乙個真正意義上的常量

(3)c++ 編譯器可能會為const常量分配空間

(4)c++完全相容c 語言中的const常量的語法特性

注:本文總結於狄泰唐老師的《c++深度解析》課程

狄泰qq群:199546072

本人qq號:502218614

第3課 進化後的const分析

本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 const修改的變數是唯讀的,本質還是變數const修改的區域性變數在棧上分配空間 const修改的全域性變數在唯讀儲存區分配空間 const只在編譯期有用,在執行期無用 const 修飾的變數不是真的常量,它只是告訴 編譯器該變數...

進化後的const分析

一 c語言中的const 1.const修飾的變數是唯讀的,本質上還是變數 2.const修飾的區域性變數在棧上分配空間 3.const修飾的全域性變數在唯讀儲存區分配空間 4.const只在編譯期有用,在執行期無用 const修飾的變數不是 真正的常量,它只是告訴編譯器該變數不能出現在賦值符號的左...

C 進化後的const分析

事物的難度遠遠低於對事物的恐懼!對於const關鍵字,在c高階分析中,我們知道,const在c語言中有如下特性 const修飾的變數是唯讀的,其本質還是變數而,也就是唯讀變數 依舊可以通過別的手段修改const變數 const修飾的區域性變數在棧上分配空間 const修飾的全域性變數或靜態區域性變數...