常量指針(底層const)
int const* p
const int* p
單純從名字上來了解,即為常量的指針。是以該指針指向的值是常量,不可修改,但該指針本身可以修改,也就是說指針本身可以指向别的值。底層const是const在*或&左邊。
直覺上通過代碼來了解常量指針
int a = 1, b = 2;
const int* p = &a; // 注意這裡const修飾的是是一個整形指針,屬于常量指針,故該指針指向的值
// *p(*代表取值,去除該指針指向的值)不可被修改
p = &b // 正确,常量指針是指向的值不可以改變,但是指針本身可以改變(指向别的地方)
*p = 3 // 錯誤,常量指針,指向的值是const int類型的,不可被改變
指針常量(頂層const)
int* const p
可以從代碼上這樣了解記憶, 即首先他是一個int類型的指針,他的名字叫p,而p又被const修飾,故p這個指針不可被修改頂層const是const在或&右邊。
直覺上通過代碼來了解指針常量
int a = 1, b = 2;
int* const p = &a;
p = &b // 錯誤,指針p不可被修改
*p = 3 // 正确,指針常量,指針不可被修改,但指針所指向的值可以修改
總結
常量指針:指針p可以改變(指向别的地方),但指針目前所指向的值p不能改變
指針常量:指針指向的值p可以改變,但指針p不能指向别的地方
小技巧
就是看const離誰比較近,離誰近就修飾誰。
常量指針const修飾的是int(*p),故這個指針指向的int類型的值不能改變;
指針常量const修飾的是p,故p這個指針不能變。