关于const与 指针的到底是改变什么值的问题

参考了这篇博文:
https://blog.csdn.net/hai008007/article/details/80592402?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160117404419195188348022%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160117404419195188348022&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v2-1-80592402.first_rank_ecpm_v3_pc_rank_v2&utm_term=const%E6%8C%87%E9%92%88&spm=1018.2118.3001.4187

  1. const double pi = 3.14; const int * cptr = π
  2. int a = 10; int * const cptr = & a;
    1语句表明cptr是一个int类型的指针,const表明他是一个指向常量的指针,所以“pi”必须是一个常量,不能更改。并且,cptr也不能更改。他的作用是存放常量对象的地址。
    2语句表明cptr是一个常量并且是一个int类型的指针,永远指向a,不能更改。它一定要先初始化。换句话说,cptr的值不能更改,永远是a的地址,指向a的值;但是a的值得可以自己改的。也就是说,不变的是cptr的值,而非指向的那个值。
    (分辨他们的阅读技巧:只看等号左边,从右到左读,依次判断什么类型。)

我的表达有些拗口,其实不太好理解。看看大佬的解释吧。
const int * pOne; //指向整形常量 的指针,它指向的值不能修改
int * const pTwo; //指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。
const int *const pThree; //指向整形常量 的常量指针 。它既不能再指向别的常量,指向的值也不能修改。

理解这些声明的技巧在于,查看关键字const右边来确定什么被声明为常量 ,如果该关键字的右边是类型,则值是常量;如果关键字的右边是指针变量,则指针本身是常量。下面的代码有助于说明这一点:
const int *p1; //the int pointed to is constant
int * const p2; // p2 is constant, it can’t point to anything else

总结:
关键看指针指向的值变化还是看它本身的变化。
如果,它本身是一个用const修饰,再去说明它是一个指针的表达形式,那么说明它本身的值不能变。
如果,它显示表明是一个指针类型(此时可以理解为它已经有具体的指向的值了),再用const去修饰说明它是一个常量,那么说明它指向的值不变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值