指向常量資料的指標和常量指標

kim_jin發表於2017-12-26

指向常量資料的指標

int const *p 或者const int *p

表示p is a pointer to const in是一個指向整型常量的指標,:

const int *p = &a;
p = &a;
p = &b;
*p = 2; // Error
複製程式碼

常量指標

int * const p

表示p is a const pointer to int, 即p是一個指向整型的常量指標,裡面的值不能修改,

int * const p = &n; // n已經進行過宣告
p = &d; // Error
*p = d; // YES
複製程式碼

總結

對於指向常量資料的指標來說,*p是一個常量,不能通過*p作為左值進行修改 對於常量指標來說,p是常量,不能通過p作為左值修改

圖例

| 1001 | 1002 | 1003 | 1004 | | ........ | ........ |. 100 .| ......... | ----------------------↑ ----------------------a int a = 100;

如果是int const *p = &a;的話,此時*p是個常量,值為100,但是p是個變數,所以p可以指向別的地址,比方說1002啦,但是不能通過*p來改變地址上的值為 ----------------------p ----------------------↓ | 1001 | 1002 | 1003 | 1004 | | 1003 |--------|- 100 -|------- | -----↑--------------↑ ↑ -----p--------------a *p

如果是int *const p = &a;的話,此時p是個常量,不能改變1001中的內容,也就是p只能是指向a,但是可以通過*p來改變a的值。

這就是常量指標和指向常量資料的指標的區別

相關文章