《C专家编程》中,关于const char** 和 char** 能否相容的解释很有意思。
描述的意思大概是根据ANSI C标准,const char** 和 char** 类型并不相容。
在ANnSI C标准中,规定:
6.3.2.2 每个实参都应该具有自己的类型,这样它的值就可以赋值给与它对应的形参类型的对象(该对象的类型不能含有限定符)
6.3.16.1 要使上述的赋值形式合法,必须满足下列条件之一:两个操作数都是指向有限定符或无限定符的相容类型的指针,
左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。
即下列形式合法
char *cp;
const char *ccp;
ccp=cp;
cp=ccp;//结果产生编译警告