以下是代码:
int *const *a = nullptr;
int const *const *b = nullptr;
b = a;
为什么这段代码编译运行没有错误? const指针是不是意味着我们无法改变它?
答案 0 :(得分:3)
实际上我的想法有误:我认为b
是const
,因此无法分配。但b
是可修改的(虽然它指的是const
),因此可以分配给b
。
换句话说,int const *const *b
不是const
指针,但实际上是指向const
指针的指针,因此可以更改它。
答案 1 :(得分:0)
b
是指向const int的const指针的指针。允许将其指定为指向(可写)int的const指针,因为如果要取消引用*b
,那么您将能够通读它。
另一方面,a=b
将无法编译,因为这会使指向(可写)的int指向const int,因此能够写入你不应该写的东西。类型系统会阻止这种情况。
当你考虑时,它会变得更有趣:
int const **c;
int **d;
练习:a,b,c& s之间允许哪些作业? d?为什么呢?