關於常量修飾符 const

2021-08-21 03:28:18 字數 1149 閱讀 7956

關於常量修飾符 const

一直對const的理解就是簡單的常量修飾符,定義乙個不可改變的變數【注意這裡是變數,也就是說const叫常量修飾符,但實際上它定義的是乙個變數,只不過由編譯器限定未不可修改】。

後來聽了老師的課發現const有許多有意思的用法:

1:const int i = 10; --> i的值不可改變,若i = 11;則報錯

2:const int *j = (int*)&i; 和 int const *j = (int*)&i; --> j指向的變數的內容不可變,若 *j = 20; 則報錯

老師給出的建議是看const前面是什麼,那麼那部分就不可修改,比如int const i = 5; const 前是int, 則表示i的值不能被修改

int const * j; const 前也是int, 則表示i指向的變數的值不能被修改

而int * const j; const 前是int *,表示指標指向的值不能被修改

還有乙個有意思的大家可以自己試一下,這個我還不知道是什麼原因,

const in a = 10;

int *p = (int*)&a;

int *j = (int*)&a;

cout << *p << " " << a << " " << *j << endl;

cout << p << " " << &a << " " << j << endl;

*p = 20;

cout << *p << " " << a << " " << *j << endl;

cout << p << " " << &a << " " << j << endl;

上面這段**的結果很有意思,執行完*p = 20;後,*p和*j都變為20,但是a還是10。與此同時可以看到p和j指向的位址和a的位址是相同的。

在別人的部落格裡找到了答案

const全域性變數儲存在全域性儲存空間,其值只有可讀屬性,不能修改;

const區域性變數儲存在堆疊中,可通過指標修改其值;

const變數在預處理是處理,編譯器只對其值讀取一次。

關於常量修飾符 const

const修飾符限定的常量

型別前加const修飾符限定變數為唯讀,稱為常量,定義時必須初始化,且初始化後編譯器不允許再修改常量的值。const在型別前面 const int value value是const const char value value是const,value可變 const char value valu...

const 型別修飾符

const是用來限定所指定的變數或者函式不可作修改。1 修飾變數 當const用來修飾變數的時候,const所指定部分不可修改。a.修飾常規變數 如 const int a 10 int const a 10 這兩種方式的效果一樣,都是將a描述為常量,a的值在被賦初值後不可以修改。但是這和由巨集定義...

const修飾符 小結

1.const 和extern 預設狀態下const物件僅在檔案內有效 當編譯器以初始化的方式定義乙個const物件時,編譯器將在編譯過程中吧用到該變數的地方都替換成對應的值,為了執行上述替換,編譯器必須知道變數的初始值,所以通常const的有效域就在本檔案 為了能在其他檔案中使用該const變數 ...