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