对于指针的两级间接关系同const关键字赋值这部分,无论在看《C Primer Plus》还是《C++ Primer Plus》都是比较绕的地方,在这里我尝试简单梳理下关系。

为什么进入两级间接关系与一级间接关系不同, `const`与非`const`混合指针赋值方式将不再安全?


首先要明确一件事:

非`const`指针是不能指向`const`值的。

原因很简单,非const指针可以改变指向的值,所以非const指针若指向const值,故可以改变const值,前后就矛盾了,因此这种赋值时禁止的。


那再来看两级关系,

先声明两级关系的变量

1
2
3
const int ** pp;
int * p;
const int n = 13;

先假设允许两级关系的赋值,也就是非const指针赋值给const指针的指针

1
pp = &p; 

那么…
pp 做为const变量是可以与const值n关联的,即

1
*pp = &n;

然后, 由于刚才pp指向了pp指向的值就是n,则就意味着

!!! p指向了n !!!

这样一来,就和一开始说的情况一样了,我们将一个非const指针p指向了一个constn,这样是禁止的。

所以,两级间接关系const与非const混合指针赋值方式将不安全。

Comments