本文內容取自於對狄泰學院 唐佐林老師 c++深度解析 課程的學習總結
const修改的變數是唯讀的,本質還是變數const修改的區域性變數在棧上分配空間
const修改的全域性變數在唯讀儲存區分配空間
const只在編譯期有用,在執行期無用
const
修飾的變數不是真的常量,它只是告訴
編譯器該變數不能出現在賦值符號的左邊
c語言中的const使得變數具有唯讀屬性
const將具有全域性生命週期的變數儲存於唯讀儲存區
const
不能定義真正意義上的常量!
編寫乙個c程式來嘗試修改const變數的值
通過實驗結果可以看出,c程式中被const修飾的變數值可以通過指標訪問的方式被修改。我們再來編寫乙個一模一樣的c++程式來執行,看結果會怎麼樣
編譯進直接報錯,const int *型別不能轉換為int *型別c++在c的基礎上對const進行了進化處理
當碰見const宣告時在符號表中放入常量
編譯過程中若發現使用常量則直接以符號表中的值替換
編譯過程中若發現下述情況則給對應的常量分配儲存空間
注意:c++編譯器雖然可能 為const常量分配空間,
但不會使用其儲存空間中的值
c語言中的const變數
c語言中的const變數是唯讀變數,會分配儲存空間c++中的const常量
可能分配儲存空間c++中的const常量類似於巨集定義當const常量為全域性,並且需要在其它檔案中使用
當使用&操作符對const常量取位址
const int c = 5; 約等於 #define c 5c++中的const常量在與巨集定義不同
const 常量是由編譯器處理通過乙個程式設計示例來說明c++中const常量與巨集定義的區別編譯器對const 常量進行型別檢查和作用域檢查
巨集定義由預處理器處理,單純的文字替換
#include
voidf(
)voidg(
)int
main()
;int i =0;
for(i=
0; i<
(a + b)
; i++)f
();g
();return0;
}
執行結果 :
從實驗結果可以看出,int array[a + b] = ;合法,即const int a和const int b在c++中是被當作全域性變數,可以用來定義陣列的大小,c語言中const只是唯讀變數,不能作為左值使用,故c語言中這樣定義陣列是不合法的。#define a 3 是在void f()函式體中定義的,但在void g()中呼叫a沒有報錯,能夠正確輸出a的值,說明巨集定義只是預處理,沒有作用域限制
第3課 進化後的const分析
1 const修飾的變數具有唯讀屬性,本質還是變數,只是告訴編譯器該變數不能出現在賦值符號的左邊。2 const 修飾的區域性變數在棧上分配空間,修飾的全域性變數在唯讀儲存區分配空間。3 const 只在編譯期間有用,在執行期間無用。const 不能定義真正意義上的常量 const英文含義 4 c ...
進化後的const分析
一 c語言中的const 1.const修飾的變數是唯讀的,本質上還是變數 2.const修飾的區域性變數在棧上分配空間 3.const修飾的全域性變數在唯讀儲存區分配空間 4.const只在編譯期有用,在執行期無用 const修飾的變數不是 真正的常量,它只是告訴編譯器該變數不能出現在賦值符號的左...
C 進化後的const分析
事物的難度遠遠低於對事物的恐懼!對於const關鍵字,在c高階分析中,我們知道,const在c語言中有如下特性 const修飾的變數是唯讀的,其本質還是變數而,也就是唯讀變數 依舊可以通過別的手段修改const變數 const修飾的區域性變數在棧上分配空間 const修飾的全域性變數或靜態區域性變數...