关于C Primer Plus(第5版)的一个疑问?望高手指点!
中文版 p270页中下倒数第13行到第8行。是用来证明倒数第18行的。
下面是复制的英文原版:
int * p1;
const int * p2;
const int ** pp2;
p1 = p2; // not valid -- assigning const to non-const
p2 = p1; // valid -- assigning non-const to const
pp2 = &p1; // not valid -- assigning non-const to const 相当于我说的倒数第18行。
书中说两层间接运算,这样赋值不安全。理由是下面的例子。
(相当于中文版倒数第13行到第8行)
const int **pp2;
int *p1;
const int n = 13;
pp2 = &p1; // not allowed, but suppose it were
*pp2 = &n; // valid, both const, but sets p1 to point at n
*p1 = 10; // valid, but changes const n
他这里说n的值被改变了。其实,他这里举例不对啊.最后一步赋值,在这本书从里前面p263页里说了,一个没有初始化的p1是不可以赋值的。所以这个例子不能作为说明前面的理由。那么前面说两层间接运算,这样赋值不安全。这句话还要商榷了。。。
到底安不安全?有没有更合适的例子?