首先你要清楚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的值