eg:
有三種寫法的表達式:
int i;
const int *pa = &i;
int const *pb = &i;
int *const pc = &i;
無論多少種寫法,無非隻有兩個結果:(隻需要判斷const和*的位置關系,判斷const标志的是什麼東東)
(1).const 在 * 前面,const标志的是指針,不能被修改。
const在指針前,(如 int const *pa = &i;)此時表示指針是一個常量,不能被 修改即不能再指向其它變量的位址,具體展現在:可以通過指針修改變量的值,如i。
int const *pa = &i;
*pa = 9; //正确
p++ //錯誤,指向了下一個位址
p-- //錯誤,同上。
(2).const 在*的後面 ,const标志的是指針指向的變量位址。即不能通過指針去修改變量。
int i;
int* const pb = &i;
*pb = 9; //錯誤,不能通過指針修改變量i的值。可以了解為這種指向關系是const。
i = 9; //正确,
pb = &j; //正确。此時pb取的是變量j的位址,修改的不是i。
總結:要麼指針不可被修改,要麼通過指針不可被修改。