const 的称谓:常量?

本篇通过const 与指针的的关系,来谈谈c语言中const的称谓。

首先看看下列常常被举例说明const的经典语句 :

     char ch,* const p = &ch;
     char const * p;
     const char * p;    

第一句 const 是修饰p的,所以p被约定称为常量指针

  • 常量指针在定义时必须初始化。如果第一句写成:char ch,* const p; 然后再 p = &ch; 那就要出错了。
  • 虽然指针p不能变,但它所指的内容则可以变,即*p = ‘d’; 是合法的。当然,p之前已经初始化,也不存在野指针的问题。

第二句和第三句完全相同,表示p所指内容通过p来更改不可以,即 *p = ‘d’错误。但p本身可以更改,即 p = &ch 没问题。

问题:很多文章都将这种情况的p称为指针常量,这种称呼或许是一种简称,或许是一种约定,但无论如何都是不恰当的。

  • 因为这条语句是在说明p本身而不是p所指的内容是个什么性质的量,如果说其是指针常量,从中文的意思看p成了个常量,这显然不妥。

  • 英文此时称之为 pointer to const(指向常量的指针),很清楚地表明:p是个指针,在这里它指向一个常量。

  • 之所以强调在这里,还是为了说明p所指的内容通过p来更改是不可以的,但仍然可以通过其它方法改变(例如将赋值p时的右值再赋值给一个普通指针变量pp,诸如pp = &ch; *pp = ‘x’),这一点和用#define定义的常量明显不同,从这个意义上说,const被称为常量同样容易引起混乱,改称固定量似乎更容易区分。起码在用于指针时应该强调一下。

最后,为了更好地说明“固定量”const的用法,举一个有代表性的例子

 int main(void){
    char ar[]="great",*p, * const *pk;
    p=ar;
    pk=&p;
//  *pk=p;//错误
    **pk='w';
    printf("%c\n",**pk);
    return 0;
}

此例中可看出 pk、**pk均可变,唯独 *pk 不可变,这正体现了const 的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值