C++的const

const與指針

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

const與引用

這裏寫圖片描述

這裏寫圖片描述

const int x=5;int *p=&x;

這是錯誤的。可變量不可以成爲不可變量的別名。

int x=5;const *p=&x;

這是正確的。*p只有“讀”的功能,&x有“讀、寫”兩個功能,相當於講一個大的量賦給一個小的,因而不會出問題。

補充:如何區別&是引用還是取地址符?
(1)如果&是取址運算符,也就意味着取一個變量的地址並付給指針變量。
一般形式是:

int a =5//定義一個變量,並初始化
int *p        //定義一指針變量
p = &a;    //把a的地址賦給指針變量p

(2)如果&是引用標識符,意味着可以給變量取別名,&前面會有數據類型
引用的聲明方法:

    類型標識符 &引用名=目標變量名。

const定義

常量的兩種定義:
通過const定義是有類型的,編譯時會檢查語法錯誤。
通過define宏定義,計算機不檢查語法錯誤。

int const a = 3; int *p = &a;//表達錯誤
//指針指向const修飾的變量時,應該是const int const *p = &a;

原因:變量的權限比常量const的權限要高,而計算機允許權限高的變量賦值給權限低的常量(形象說明:變量似長官一樣不受他人管束,而常量作爲員工只能老實地一成不變。上級長官對下級員工賦予使命(賦值),反之則逆天了),如

int a = 3; int * const p = &a;//就是正確的。反之則會報錯。

const int *p = &aint const *p = &a一樣,都是指針所指向的內容爲常量(const放在變量聲明符的位置無關)
而int *const a;爲指針本身是常量,而指針所指向的內容不是常量,這種情況下不能對指針本身進行更改操作,如a++是錯誤的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章