const 修饰符使用方法

来源:互联网 发布:抢单app编程 编辑:程序博客网 时间:2024/05/02 16:43

C/C++中的const修饰符跟指针一起声明时,经常容易搞混淆。而这是几乎所有的面试都会考到的。其实要辨别const到底修饰的是什么,只需要巧妙地分析变量的声明即可。下面是简单的总结。

基本原则:const只限定从const开始向右直到变量名的部分。

也就是说,在分析声明语句时,找到const的位置,然后向右变量名前面的*的个数。假定有n个*,那么const修饰的内容就是 (*...*变量名).

例1. const int *p

从const开始向右数,只有1个*,因此const限定的是(*p)。也就是说(*p)是常量,而p是可变的。由于p是整形指针,因此const限定了(*p)也就是p指向的内容,而没有限定p本身。

例2. int const *p

从const开始向右数,只有1个*,因此语义与例1相同。

例3. int* const p

const右边没有*,因此const直接限定p,也就是指针本身。而指针指向的内容(*p)未限定。

例4. const int * const p

一个const限定指针本身,另一个const限定指针内容。

例5. const int **p

const右边为(**p),因此const限定(**p)。由于p为整数指针的指针,因此const限定有,(**p)只能为常量整数。也就是:

(*p)++合法;

p++合法;

(**p)++非法.

例6. int const **p

同例5.

例7. int * const *p

const限定的是(*p),因此:

(*p)++非法;

p++合法;

(**p)++合法

例8. int * const * const p

两个const分别限定了(*p)和p,因此:

(*p)++非法;

p++非法;

(**p)++合法

例9. const int ** const p

两个const分别限定了(**p)和p,因此:

 

(*p)++合法;

p++非法;

(**p)++非法

 

例10. const int * const * p

两个const分别限定了(**p)和(*p),因此:

 

(*p)++非法;

p++合法;

(**p)++非法

 

 

例11. const int * const * const p

三个const分别限定了(**p),(*p)和p,因此:

 

(*p)++非法;

p++非法;

(**p)++非法


参考http://blog.csdn.net/rangzh/archive/2009/10/13/4666529.aspx

原创粉丝点击