请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,我想问下,用const_cast给*pa赋值之后,为什么cout出来a和*pa的值不同而pa和&a的值相同?即值不同而地址却相同

老师,我想问下,用const_cast给*pa赋值之后,为什么cout出来a和*pa的值不同而pa和&a的值相同?即值不同而地址却相同

正在回答

1回答

其实如果你能跟踪汇编会看得很清楚。这里pA指向a的地址没问题,所以&a和pA是相等的,修改pA所指内存的值,a内存处的值已经变了。当你再使用a的值时,由于定义的是const int a, 根据约定a的值定义了不能变,于是编译器会记录下a原来的值,当你使用时会直接赋值;而不再使用此时a内存里的值。所以你cout会看到a的值没有变,但实际内存的值已经变了。

4 回复 有任何疑惑可以回复我~
  • 提问者 ExcellentMiao #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-11-20 20:38:25
  • 慕少3338004 回复 提问者 ExcellentMiao #2
    真棒👍
    回复 有任何疑惑可以回复我~ 2021-05-15 11:22:56
  • cylqd #3
    这种特性存在岂不是很坑
    回复 有任何疑惑可以回复我~ 2021-09-13 16:11:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信