为了账号安全,请及时绑定邮箱和手机立即绑定

int *const y = &x;和const int *y = &x;的区别

http://img1.sycdn.imooc.com//58dcbecf0001bb7403670321.jpg

http://img1.sycdn.imooc.com//58dcc1250001c83103550298.jpg

这两个结果一样,为什么会一样呢,这两种写法的区别在哪里?

正在回答

2 回答

int *const y = &x;是将指针y定义为常量,不能改变,即y=&z将会报错。

const int *y = &x;是将*y定义为常量,即*y=20(int x=3)将会报错。

而x没有被定义为常量,则x的值可以改变,所以两次结果一样


2 回复 有任何疑惑可以回复我~
#1

twelve1212 提问者

*y是常量,然后改变x的大小,*y也会随之发生改变,这样的一种情况为何不会让计算机执行上有什么危险呢?
2017-03-30 回复 有任何疑惑可以回复我~
#2

慕粉1556379847 回复 twelve1212 提问者

怎么会有危险呢?int x=3;const int *y=&x; x值是可以改变的,定义的y是一个指向x指针变量,那么y始终是指向x的,没有危险,使*y不可以被重新赋值,即不允许通过*y改变x的值,也不存在危险。 比较const int x=3;int *y=&x;和int x=3;const int *y=&x;第一种情况不允许。而第二种可以。因为常量相当于只读权限,不可被重写,那么用小权限指向大权限没有问题,反过来就不允许,会报错。 我认为,y是依附于x的,所以说,*y被改变是没有问题的。不知道有没有帮助到你。
2017-03-31 回复 有任何疑惑可以回复我~
#3

twelve1212 提问者 回复 慕粉1556379847

明白了!!感谢解答!!
2017-03-31 回复 有任何疑惑可以回复我~

int a;  int const *p=&a; 这时候改变a的值,*p是不会改变的,你只要记住 int const看成一个整体。他修饰的是*p,那*p一定不会变

0 回复 有任何疑惑可以回复我~
#1

twelve1212 提问者

第一段代码改变x的值,*y的值也就改变了呀??
2017-03-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之离港篇
  • 参与学习       122700    人
  • 解答问题       474    个

C++扫清通往面向对象的最后一道障碍,将所有知识点融会贯通

进入课程

int *const y = &x;和const int *y = &x;的区别

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信