const修饰指针

c/c++

浏览数:251

2019-3-30

今天我看了一下const修饰指针的几种情况,总结一下:

int b = 500;
1、int const * a=&b;
2、const int *a = &b;
3、int * const a = &b;
4、const int * const a = &b

总结一句话就是,const关键字在*之前,修饰的指针所指的对象;const关键字在*之后,修饰的是指针本身;所以上面情况1和2是同一种情况——表示的是指针所指的内容是常量。在这种情况下,不允许修改内容。

int b = 500;
int const * a=&b;
*a=600;//错误❌

如果我们真的要改变*a的值,可以这样做:

int c =700;
a=&c;
cout<<*a<<endl;//结果为700;

在情况1和情况2下,因为只是指针指向的内容是常量,但是指针本身并不是常量,所以在声明的时候,可以不进行初始化;也就是说

const int *a;//✅

而情况3,const修饰的指针,就是说此时我们的指针是一个常量,也就是说,在初始化指针以后,我们就不可以改变指针的值。但是指针指向的内容是可以改变的。也就是说

int b = 500;
int * const a = &b;
*a=700;
cout<<*a<<endl;//结果为700

最后一种情况,指针本身和指向的内容都是常量,都是不可以改变的。