C语言指针的兼容性_const
链接:www.cnblogs.com/rushuizhijing/archive/2011/08/26/2154737.html
本文只对上面链接中的 “ 四、关于char **p 、const char **p的类型相容性问题模块下
char **p1;const char**p2=p1;//不合法,会有警告warning: initialization from incompatible pointer type”,进行解决,我当初就是这块看不懂,一头雾水。
如果你也对上述连接中的该部分存有疑虑,我相信本文会对你有所帮助。
正文:
char **p1;const char**p2=p1;//不合法,会有警告warning: initialization from incompatible pointer type
知识点:把非const指针赋值给const指针是允许的,但这样的赋值有一个前提:只进行一次间接运算
在进行两次间接运算时,这样的赋值不再安全,可能会产生如下的问题:
const int **pp2;
int *p1;
const int n=13;
pp2=&p1; //不允许,但我们假设允许(看看会发生什么?)【key】
*pp2=&n; //合法,二者都是const,但同时会使 p1指向 n
*p1=10; //合法,但这将改变const n的值
摘自 C Primer Plus(第五版)中文版【美】Stephen Prata
所以,如果【key】处如果允许,那么将会改变一个const n 的值,所以,编译器会报Warning。
值得一提的是:编译器对于const的检查是在编译期进行的,而在程序运行期间不再进行检查,
所以如果出现 n=10;那么编译器会毫不客气的给出error。
没了。