const和指针

指针与const关键字

1 指向常量的指针

指向常量的指针(pointer to const)

这种指针不能用于改变其所指对象的值

一般情况下,指针类型必须与其所指对象的类型一致,但是也有例外:

  • 允许一个指向常量的指针指向一个非常量对象
    • 这里好好理解一下指向常量的指针:本质上是,这个指针,所指向的这个量不能变,而不是说这个指针不能指向别的内容了
      -咱就是说,只要我指针指向的这个常量a的值不被改变就行了!但是,我这个指针可以不指向这个常量,我可以指向其他的内容,这没有任何问题。
    • 注意和常量指针区分。
const double pi = 3.24; //pi是一个常量,它的值不能改变
double *ptr = π      
//第二行定义错误,ptr只是一个普通的指针变量,不能直接指向常量

const double *cptr = π
//第5行定义正确,cptr是一个可以指向常量的指针

*cptr = 42;
//第8行错误,不能给*cptr赋值
//因为*cptr是一个常量,常量不能被赋值

double dval = 3.14; //变量dval的值是3.14
cptr = &dval;//让指向常量的指针指向一个变量的地址,没有问题

2 const指针(常量指针)

  • 常量指针必须初始化
  • 初始化完成,那存放在指针中的那个地址就不能被改变了

注意看下面的代码:
放在了const关键字之前,说明指针是一个常量,
这样书写的意思是:不变的是指针本身而不是指向的那个变量所保存的值
(下面代码注释看明白就够了)

int errNumb = 0;
int *const curErr = &errNumb; 
//curErr将永远指向&errNumb
//本质上是,curErr这个东西,给他分配的内存里存放的是errNumb的地址,
//那curErr就一直存放,这个地址不能再存别的地址啦

const double pi = 3.14;
const double *const pip = π
//第8行,属于是buff叠满了,表示什么呢?
//表示pip是一个指向常量的常量指针。这又是啥意思呢?
//首先,不能用pip指针去修改常量pi
//其次,pip指针只能指向pi的地址,不能再指向别地址啦。

3 指向常量的指针指针常量在形式上的区别

指向常量的指针: const在*的左边

指针常量: const在*右边

注意:

是常量指针还是指向指针的常量只和const与*的相对位置有关
与const与函数返回值的相对位置无关

//这两个都是指向常量的指针
int a = 10;
const int * ptr = &a;
int const * ptr = &a;

//这个是指针常量
int * const ptr = &a;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辛伯达岛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值