指针常量与常指针

以前弄不明白指针常量与常指针的区别,最近读了《C++Primer》,总算是恍然大悟,特此与大家一起分享我的收获。

这两样东西在原文中称为const pointer(指针常量)和pointer to const(指向常量的指针,简称常指针)。英文名似乎比中文翻译清晰多了,前者是一个常量,而且这个常量是指针类型;后者是一个指针,而且这个指针指向一个常量。

那么在定义的时候这两种是有区别的,它们的使用方式如下:

//const pointer(指针常量)
int x = 1;
int *const px = &x;

//pointer to const(常指针)
const double pi = 3.14159;
const double *cptr = π
可以看出,我们定义了一个整型数x,然后定义了一个指针常量px,用x的地址初始化px。这样px就是指向整型数x的指针常量,之所以称为常量,是因为不能对px赋值,用下面的代码说明这个问题。

int y = 2;
px = &y;  //错误:px是常量,不能对常量赋值
*px = y;  //正确:可以给px指向的对象赋值,这种情况下不会改变px的值,只是改变px指向的对象的值
然后我们来看常指针的使用方式。我们定义了一个浮点型常量pi,然后定义了一个常指针cptr,用pi的地址初始化cptr。这样cptr就是指向浮点型常量pi的指针,因此称为常指针(有人也称为常量指针,是同一个意思)。我们再写一段代码说明常指针的使用。

double d1 = 1.414;
const double d2 = 1.414;
cptr = &d1;  //错误:cptr只能指向浮点型常量
cptr = &d2;  //正确:d2是浮点型常量
好了,到此这两种指针应该是说清楚了。

等等,,,好像还有一种指针,叫做......

常指针常量

擦擦擦,好拗口(其实是我自己想出来的名字,用英文讲就是const pointer to const)

再写一个例子

//const pointer to const(常指针常量)
const char c = 'a';
const char *const pc = &c;
我们定义了一个字符常量c,然后定义一个常指针常量pc,并用c的地址初始化pc。这样pc就是指向字符常量c的常量指针,什么意思呢,看下面的情况。

const char c2 = 'c';
pc = &c2;  //错误:pc是常量,不能给常量赋值
*pc = c2;  //错误:*pc是常量,不能给常量赋值
这样一来,pc和*pc都是常量,不能有任何改动。这种类型好像应用不多。。。。

哎呀,两个指针就写了这么多,其实还有常引用也是值得讲的东西,下次再说吧。

请大家积极反馈再见

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值