指针与const

2021-02-23  本文已影响0人  devilisdevil
const int a = 3;
a = 4; // 错误,a初始化后不能再重新赋值
const int *p;
// int const *p; // 在int前后紧跟const,这表示p指向的那个int型数据不能改变,但是p本身的指向是可以变的
p = &y; // 正确,改变指针指向没问题
*p = 3; // 错误,改变指针指向的内容不行
int * const p = &x; // 初始化后就不能再重新赋值了
*p = 3; // 正确,还是可以通过p改变其指向的int型变量
p = &y; // 错误,和上面的普通非指针变量a类似

请直接看总结

总结

其实不用整得这么乱七八糟的,就一点,const如果放到最前面,比如const int ***a,那么表示a[0][0][0]const int类型,不能改变的数据是int类型(可以看成是const和后面的int结合到一起,但不会继续向后面和*结合),所以如果要表示int*不可以更改,那么把这个声明该成const放到中间的方式,const左边表示的类型是不能修改的:int * const **a表示a[0][0]int *const类型,是不能修改的,但是a[0][0][0]的类型是int,它是可以修改的

如果进一步要让a[0][0][0]也不能修改,那把声明改成const int * const **a或者int const * const **a (前面说过,const写到最前面就紧和后面的int结合到一起,表示int const类型,int数据不能被改变)

有的时候把多层指针写成数组的形式,其实都差不多,还是看const左边是啥类型,比如const int a[][][]或者int const a[][][]表示a[0][0][0]const int类型,不能改变int型数据,int *const a[][]表示a[0][0]int *const类型,指向的int*不能修改,但是a[0][0][0]这个int型数据是可以修改的。

最后,对于指针变量是const的情况,定义时需要给这个指针初始化,因为后面不能再修改指向了,比如int *const p = &x;这里定义时初始化是必须的不能写成int *const p; p = &x;这样两句。

上一篇 下一篇

猜你喜欢

热点阅读