const修飾的變數的儲存位置

2021-09-09 07:41:48 字數 789 閱讀 9802

c語言中const全域性變數儲存在唯讀資料段,編譯期最初將其儲存在符號表中,第一次使用時為其分配記憶體,在程式結束時釋放。

而const區域性變數(區域性變數就是在函式中定義的乙個const變數,)儲存在棧中,**塊結束時釋放。

在c語言中可以通過指針對const區域性變數進行修改,而不可以對const全域性變數進行修改。因為const全域性變數是儲存在唯讀資料段

c++中,乙個const不是必需建立記憶體空間,而在c中,乙個const總是需要一塊記憶體空間。

在c++中是否要為const全域性變數分配記憶體空間,取決於這個const變數的用途,如果是充當著乙個值替換(即就是將乙個變數名替換為乙個值),那麼就不分配記憶體空間,不過當對這個const全域性變數取位址或者使用extern時,會分配記憶體,儲存在唯讀資料段。也是不能修改的。

c++中對於區域性的const變數要區別對待:

對於基礎資料型別,也就是const int a = 10這種,編譯器會把它放到符號表中,不分配記憶體,當對其取位址時,會分配記憶體

對於基礎資料型別,如果用乙個變數初始化const變數,如果const int a = b,那麼也是會給a分配記憶體

對於自定資料型別,比如類物件,那麼也會分配記憶體。

c中const預設為外部連線,c++中const預設為內部連線.當c語言兩個檔案中都有const int a的時候,編譯器會報重定義的錯誤。而在c++中,則不會,因為c++中的const預設是內部連線的。如果想讓c++中的const具有外部連線,必須顯示宣告為: extern const int a = 10。

const修飾的變數

const定義的常量不能直接被修改,只能間接被修改,如,通過指標。int main const int a 20 int p 10 指標變數指向的是a的位址,通過給指標變數p賦值來改變a中的值 printf d n a return 0 結果 10 在c語言中,當const修飾的識別符號,這個識別符...

const修飾的變數

1.const char p1 2.char const p2 以上兩種情況,到底哪種是指標不能變,哪種是變數不能變呢?下面做乙個記錄,防止以後出錯 記住一句口訣 左定值,右定向 如果const在 左邊,那麼定義的變數值不能改變,但指標是可以改變的 如果const在 右邊,方向即指標不能變,也就是這...

const 修飾的唯讀變數

const 修飾的唯讀變數必須在定義的同時初始化 編譯器通常不為普通const 唯讀變數分配儲存空間,而是將它們儲存在符號表中,這使 得它成為乙個編譯期間的值,沒有了儲存與讀記憶體的操作,使得它的效率也很高。例如 define m 3 巨集常量 const int n 5 此時並未將n 放入記憶體中...