理解常量指针和指针常量

之所以会出现常量指针和指针常量都拜一个关键字const所赐,或许可以这么说,是const关键字使得情况变得更加有趣。

常量指针

如何声明一个常量指针,如下:
int const *pa
如何理解呢?
首先看定义,它叫“常量指针”,这四个字前两个是定语用来修饰后面的指针,因此它实际想表达的结果是:他是一个指针
其次更深层次来理解它,在声明int const*pa中它首先是一个定义了指针pa,然后这个指针所指向的内容被const修饰,那么这个指针所指向的结果是一个常量。总结,int const *pa 它定义了一个指针p,这个指针所指向的是一个int型的常量。

指针常量

声明如下
int b = 10;
int *const pb = b;
首先看定义,指针是定语来修饰常量,那么它的本质是一个常量。
在声明int *const pb中定义了一个常量pb并且用指针来修饰它,那么pb的值就是一个常量指针。(注因为指针常量是一个常量,在声明的时候一定要给它赋初始值。一旦赋值,以后这个常量再也不能指向别的地址)

看完概念之后我们来分析他们的用法和区别

这里写图片描述

上面分别定义了常量指针和指针常量,运行上面的代码会出现如下错误:

这里写图片描述

所以我们来研究一下const到底做了什么。
常量指针pa:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。
即pa = &c完全可以,但 *pa = c用来改变pa所指向的内容并不可以。
在定义中起始已经解释了,但是缘何并且如何理解呢?
可以看到int const *pa = &a;const修饰的是*pa,因此指针指向的内容不能改变即*pa不能修改。但pa的值是可以修改的。
指针常量pb:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
同上,可以理解const封锁了pb而不是*pb,因此pb不可以修改,但是*pb可以修改。

常量指针的用处

使用字符串处理函数的时候,应该会注意到这些函数的声明。字符串比较函数的声明是这样的
int strcmp(const char *des, const char *src);
函数的参数声明用了常量指针的形式,就保证了在函数内部,那 个常量不被更改。也就是说,对des和src的内容更改的操作在函数内部是不被允许的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值