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

const的地址变化

如题: const int x=3,int *y=&x;

理论上是成立的,因为const只是将X的变成常量无法修改,int *y=&x;只是将X的地址赋给指针Y,实则X的值并没有改变,可视频中说是错误用法


正在回答

3 回答

确实是错误用法,C++信奉一个原则,不管你设计的程序是否涉及到错误方法使用,只要存在错误,不管用没用到,就是错的!我们看你说的例子,x是常变量,不可以修改,如果y是指向x的指针,那么*y也不能修改,*y可以看做是x的引用,毕竟引用本质就是指针啊,也得是常变量,这点没问题吧,记住这就是编译器在上述中得到的信息点,接下来声明指针y,声明指针y的时候到底要不要表明,*y是const,如果表明,没问题了,这点没有疑问吧,如果不标明呢,这个语句int *y=&x意味着什么呢?*y可以修改,是变量,这是C++语法上允许的,但是上面的指出了*y必须常变量才能符合要求,所以如果不声明,前后矛盾,C++编译器只能报错,我们看上面提到的原则,虽然你没有通过*y修改x的值,但是只要声明这个变量,提供了这种修改值的方法,就是错的,没有理由!

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

weixin_慕慕1405962

那是不是说,对于指向常变量的指针,他自己本身也必须是常变量指针?
2019-01-23 回复 有任何疑惑可以回复我~

你通过x没法修改了,但是你定义的y还可以修改,你觉得合理吗

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

六个蒸蛋

不能这么说。比如以下代码 int x; const int& y=x; 通过 y 没法修改 y 的值,但可以通过对 x 重新赋值修改 y 的值。这两条语句是可以通过编译的。
2019-11-07 回复 有任何疑惑可以回复我~

你说的没错

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

举报

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

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

进入课程

const的地址变化

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