首先你要清楚const的作用,以及用const定义的指针与没用const定义的指针的区别。不清楚的话请先百度。下面来说明多重间接运算的问题。
在这里就直接引用书中的解释吧,它解释的很清楚。
考虑下面这段代码:
int * p1;cosnt int * p2;const int ** pp2;p1 = p2;//非法,把const指针赋给非const指针p2 = p1;//合法,把非const指针赋给const指针pp2 = p1;//非法,把非const指针赋给const指针----- <重点>重点>
大家都知道,把const指针赋给非const指针是错误的,因为您可能会使用新指针来改变const数据。但是把非const指针赋给const指针是允许的,这样的赋值有一个前提:只进行一层间接运算。
P2 = p1;//合法,把非const指针赋给const指针
在进行两层间接运算时,这样的赋值不再安全。如果允许这样赋值,可能会产生如下问题:
const int ** p2;int * p1;const int n = 13;pp2 = &p1;//不允许,但我们假设允许*pp2 = &n;//合法,二者都是const,但这同时会使p1指向n*p1 = 10;//合法,但这将改变const a的值