C语言里面const和指针的组合写法经常令人困扰,想不起它真正表达的意义,而且这也是面试、笔试的时候重要考查的基础知识。
看下面三种定义:
①const int * p
②int const * p
③int * const p
前两种定义表达的意思是一样的:p指针指向的内容不被改变。
最后一种表达的是:p指针的指向不被改变。
是不是有点晕?面试的时候被问起一时想不起来估计叶舌懵逼了。我是这样理解的:按照有意义的最近取义。
例如①:( const int ) ( * p ),单独的const是没有意义的,所以它所以与int结合起来一起解释,后面一个就容易解释得多,表明p是一个指针变量。两部分结合起来解释就是 p是指向了const int的指针,由于指向的内容被定义为const,指针就无权修改内容。
那么②可以这样分:( int const) ( * p ),这样分的话,意义就和①一样了。因为声明常量(int const p)和(const int p)一样。
③:( int ) ( * const p ) 因为(int *) 不能组合,所以它表达的意思是const p---》p不能被改变,*----》p是个指针,int-----》p是int的指针,组合一起就是p指针的指向不被改变。由于指向不被改变,所以才要求声明时就需要指定它的指向。
上述理解本人的一些理解总结,至于是否真的是这样,答案在《编译原理》
———————————————————如有问题,请与本人联系,谢谢!————————————————————————