C语言中const关键使用详解转

const char *pa;
char const *pb;
上面两种定义方法一样都是 pa(pb)指向的变量的值不可改变,及*pa,*pb, 而pa,和pb本身是可变的,如:
pa = &ca; //ok
×pa = 'c' //error

char * const pc = &ca;
pc本身是不可变的(只能在定义时初始化),但指向的变量值是可变的,如
pc = &ca;  //error
*pc = 'd'; //ok

const char * const pd = &cb;
pd本身是不可变的,且指向的变量也是不可变的(只能在定义时初始化)
pd = &cb;  //error
*pd = 'c'; /error

通过以上总结,无论怎样定义p都是一指针
如果const在*左边,表示该指针指向的变量是不可变的
如果const在*右边,表示该指针本身是不可变得

 

const char **p
p[i]的值可变,而p[i][j]的值不可变。

对于
char * const *p
p[i]的值不可变,而p[i][j]的值可变。

对于
const char * const *p
p[i]的值不可变,p[i][j]的值也不可变。

由是可见,第三种对于接收参数的一方而言,是最为严厉的限制。在设计接口时,这类限制有助于减少程序中的潜在问题,但却会使使用现有接口的一些程序出现错误。许多公开的标准,特别是POSIX,往往会出于这种考虑而选择char * const *。在设计程序时,对于这种char * const*,应当作const char * const *看待,而不应abuse其p[i][j]可写的特性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值