指向常量資料的指標
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的值。
這就是常量指標和指向常量資料的指標的區別