C++常量指针和指向常量的指针辨析

const 修饰指针有两种类型,一种是指向常量的指针,一种是指针本身是常量(即指针指向固定一块地址,不能更改,而这块地址中存储的内容可以是变量)。也有两者复合的结果(使用两个const)。

这里的关键是,const这个说明符(specifier)的结合规则永远是结合到“最近的词”(而且优先向左)。具体判断时,要从标识符(identifier, 这里即为指针变量的名字)开始从右往左读:

const int* u;  // u是一个指针,指向整型,这个整型是个常量。

int const * u;  // u是一个指针,指向常量整型。(和上面等价)

int* const u; // u是一个常量指针,指向一个整型变量。 (与上面两个不同)

const int* const u; // u是一个常量指针,指向一个整型常量。

上面第一第二种定义方式是等价的,但是第二种有一定迷惑性。另一种帮助理解的方式是,指针符号*是向右结合的。因此只有将* const的格式才是指针常量。

使用说明

  • 可以给指向const的指针分配一个non-const对象,因为这仅仅是在说:虽然这个对象可以变化,但我在使用这个指针时不会改变这个对象。故不矛盾。

  • 但是,不可以给指向non-const的指针分配一个const对象,因为这会威胁到由const保证的安全性。

  • 如果想要强行实现第二点,可以使用类型转化,来强行完成赋值。但是不推荐这么做。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值