const 修饰符使用方法

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值