const指针的理解

const指针

有点复杂啊,一系列const组合起来。看的人头都大了!但总的来说,想要存放常量对象的地址,只能使用指向常量的指针

const double pi = 3.14;     // pi是个常量,它的值不能改变
double *ptr = &pi          //错误:ptr是一个普通指针
const double *cptr = π     //正确:cptr可以指向一个双精度常量
*cptr = 42;                         //错误:不能给*cptr赋值

这里要区别一下下面的,这里的cptr可以改变指向,但是不能改变其指向的值。因为值被前面的const限定了。

指针const

这个不一样,从标题可见是指针在前const在后,但是与上面的有什么区别呢?

指针是对象而引用不是,因此就像其他对象类型一样,允许把指针本身定为常量。常量指针必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中的那个地址)就不能在改变了。把*放在const关键字之前用于说明指针是一个常量,这样的书写形式隐含着一层意味,即不变的是指针本身的值而非指向的那个值:

int errNumber = 0;
int *const cureErr = &errNumb;                 //curErr将一直指向errNumb(那么可以通过该指针修改这个值吗?)
//答案是可以,const只限定了指针指向的位置,没有限定所指向的值
const double pi = 3.14;
const double *const pip = π               //为什么这里前面加了const呢?因为该指针指向的是一个const变量(const double)

就像之前说的,从右向左阅读,此例中,离curErr最近的符号是const,意味着curErr本身是一个常量对象。

总结一下
int pi = 1;
int p2 = 2;
const int ppi = 3;
  • const int *p = &pi,指针指向的地址可以改,但是不能通过指针修改指针所指向的值,比如 p = &p2。
  • int *const p = &pi,指针指向的地址不可以改,但是可以通过指针修改指针指向的值,比如*p = 1。
  • const int *const p = &ppi;,指针指向的地址不可以改,也不能通过指针修改指向的值。

const的右边是谁,则谁不能变

比如const的右边是int,则不能改变int值;cosnt的右边是p,且p是一个指针,那么不能改变p的指向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值