指针常量 & 常量指针

引入


# 今天在看某开发手册的里的示例代码时
const ACHAR* pName;
pLinetypeTblRcd->getName(pName);
看到这两行代码时,突然有点蒙
pLinetypeTblRcd保存着一个线型表记录对象的地址
它调用getName方法则是获取该线型的线型名称
我就想,既然要获取线型名,为什么不是定义缓冲区,将首地址传过去进行copy再拿到名称
如果我自己实现这个方法可能就是这样实现了
假设不用缓冲区,也就代表直接将实参指向了线型表记录里保存名字内存的首地址,那不是也修改了这个指针吗?为什么要用const修饰呢?
紧接着我就扒了一下该函数的原型,返回值我就忽略了
getName(ACHAR*& pName) const
传入的是一个指针变量的引用,且使用了const 修饰该函数
果然用的也是引用,就直接操作调用处的指针变量了
越想越不对劲。为什么可以修改const修饰的变量???
这时候,死去的记忆就慢慢浮现出来了!!!
没错, 其实这个pName是一个常量指针,是我小丑了

# 接下来我就凭借个人的理解讲一下常量指针和指针常量


1、常量指针


顾名思义, 常量指针,那就是一个指针,就像数组指针,是一个指向数组的指针一样,该指针就是保存数组地址的指针。
那么常量指针,就是一个指向常量(保存常量地址)的指针。
定义语法:
const 数据类型 * 变量名
例如:
const char *p;
这里有说法的,本人的理解是,const后面修饰的是*p,学过指针的都知道,*p代表去取p指向内存里的值,那么const其实就是限制了*p只读,这个指针变量p实际上还是可以去更换指向的。
这个指针p,就称之为常量指针,被它指向的变量,都是只读的。


2、指针常量


那就是一个常量,类似整型常量,保存整型数据常量,那么这个指针常量,就是保存地址的常量。
该值一确定,就是只读的、不能修改的。
定义语法:
数据类型* const 变量名
例如:
char* const p;
这个p本身是一个指针变量,在p前加了一个const修饰,就表示这个p是只读的,是个常量。
也就是这个p的指向一但确认,就不能修改了,但是*p,p指向对象的数值还是可以修改的。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值