指针的两级间接关系与`const`/非`const`混合赋值的理解
对于指针的两级间接关系同const
关键字赋值这部分,无论在看《C Primer Plus》还是《C++ Primer Plus》都是比较绕的地方,在这里我尝试简单梳理下关系。
为什么进入两级间接关系与一级间接关系不同, `const`与非`const`混合指针赋值方式将不再安全?
首先要明确一件事:
非`const`指针是不能指向`const`值的。
原因很简单,非const
指针可以改变指向的值,所以非const
指针若指向const
值,故可以改变const
值,前后就矛盾了,因此这种赋值时禁止的。
那再来看两级关系,
先声明两级关系的变量1
2
3const int ** pp;
int * p;
const int n = 13;
先假设允许两级关系的赋值,也就是非const
指针赋值给const
指针的指针1
pp = &p;
那么…
pp 做为const
变量是可以与const
值n关联的,即1
*pp = &n;
然后, 由于刚才pp
指向了p
, p
指向的值就是n
,则就意味着
!!! p
指向了n
!!!
这样一来,就和一开始说的情况一样了,我们将一个非const
指针p
指向了一个const
值n
,这样是禁止的。
所以,两级间接关系const
与非const
混合指针赋值方式将不安全。