C语言指针的兼容性_const

2017-06-22  本文已影响0人  HOLD_C

链接: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。

没了。

上一篇 下一篇

猜你喜欢

热点阅读