阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

const关键字:可改不可改?

94次阅读
没有评论

共计 827 个字符,预计需要花费 3 分钟才能阅读完成。

导读 常量表达式是指在编译器编译时期就可以的到值的表达式,例如:const int a = 3,虽然听起来很简单,但实际上很容易犯错。本文简要总结它们的不同.

关于 const:顶层 const 和底层 const
一般,我们声明 const 用来存储不变的恒定量:

const int MAXN = int_max;

用指针指向:

const int *pMAXN = &MAXN;

这条语句开始的 const int 实际上是为了 MAXN 的类型做出的匹配,我们得到的 pMAXN 实际上是可修改的。

那么如何让 pMAXN 不可修改呢?

c++ 采用’双 const‘的方法:

const int * const pMAXN = &MAXN;

这样,pMAXN 成为了不可修改值的,指向 MAXN 的指针。

其中,可以修改值的 const 就被称为底层 const,而不可修改值的称为顶层 const。

const int *pMAXN = &MAXN;			// 底层 const
const int * const pMAXN = &MAXN;	// 左边底层 const,右边顶层 const
typedef 的误区

很显然,当我们使用 typedef 的时候,const 又产生了问题:

typedef char *pstring;
const pstring *ps;

在有上面的语句的基础上,这条语句是什么意思?

const pstring cstr = 0;

一般情况下,我们看到 pstring 就会直接去找它的定义,这种习惯是错误的!我们应该按照次序,先读这条语句。

首先,pstring 加上了 const 修饰符,这代表定义的语句是 const 状态,是常量表达式。其次,pstring 定义的是指向 char 类型的指针,所以,综上所述,这条语句声明了一个指向 char 的常量指针即,指针的值不可修改。

那这一条语句呢:

const char *cstr = 0;

它声明了一个指向 const char 类型的指针。指针的值可以修改。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计827字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中