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

const int *p = a; *p的值为什么还可以变化

int a = 3,b = 5;
const int *p = &a;
p = &b;    //*p = b 过不了,因为*p是const
cout<<a<<", "<<b<<", "<<endl;
//此时*p本来是常量3,现在变成了5,按理来说应该是不可变的啊


正在回答

6 回答

const int *p;意思是修饰*p变成常量,*p的值不能改变,但是p能改变,也就是说指针指向的地址可以改变,所以

p=&b是正确的,所以现在指针P指向b地址,*p就是b的值,所以变成5;不是意义上的*p直接改变,是指针指向被动改变。这是我的理解,希望能帮助你。

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

const int *p = &a;

*p不可变但是,p的值可以改变,就是指针可以指向其它变量

p = &b;

这时指针指向变量b了,那么*p的值就是b的值是5,

但是如果想用*p修改b的值,就不行




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

* 前 const ,const 修饰 *p,值不可变

* 后 const,const 修饰 p,指针指向不可变

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

const int *p=&a的时候,const修饰的是(*p)就是p指向的那个内容a是不可以通过*p=XXX来改变的,

int *const p=&a 的时候,const修饰p p只能指向a,但是可以通过 *p=XXX,来改变a的值

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

const int *p=&a;

const修饰的是*p,表示*p不可重新赋值,在不改变p的指向的变量的时候即p指向变量a,不能用*p来修改其所指变量a的值,,但是a不是常量,a的值是可以改变的,可以修改a的值,但是由于指针p指向a变量,a变量发生改变,那么指针p所指地址的内容发生改变,希望你能理解,谢谢

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

const *p 所指向的内容是可变的,p=&y正确

* const p 所指向的内容是不可变的,p=&y不正确

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

慕的地9298213 提问者

应该是* const p 所指的位置是不可变的吧?和其所指的内容有关系吗? const *p 所指的内容可变吧。 //我已经迷糊了
2018-07-20 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

const int *p = a; *p的值为什么还可以变化

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