今天我看了一下const修飾指針的幾種情況,總結(jié)一下:
int b = 500;
1、int const * a=&b;
2、const int *a = &b;
3、int * const a = &b;
4、const int * const a = &b
總結(jié)一句話就是,const關(guān)鍵字在*之前,修飾的指針?biāo)傅膶ο?;const關(guān)鍵字在*之后,修飾的是指針本身;所以上面情況1和2是同一種情況——表示的是指針?biāo)傅膬?nèi)容是常量。在這種情況下,不允許修改內(nèi)容。
int b = 500;
int const * a=&b;
*a=600;//錯誤?
如果我們真的要改變*a的值,可以這樣做:
int c =700;
a=&c;
cout<<*a<<endl;//結(jié)果為700;
在情況1和情況2下,因?yàn)橹皇侵羔樦赶虻膬?nèi)容是常量,但是指針本身并不是常量,所以在聲明的時候,可以不進(jìn)行初始化;也就是說
const int *a;//?
而情況3,const修飾的指針,就是說此時我們的指針是一個常量,也就是說,在初始化指針以后,我們就不可以改變指針的值。但是指針指向的內(nèi)容是可以改變的。也就是說
int b = 500;
int * const a = &b;
*a=700;
cout<<*a<<endl;//結(jié)果為700
最后一種情況,指針本身和指向的內(nèi)容都是常量,都是不可以改變的。