You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C++中使用指针修改变量值后,目标变量的值仍未发生预期变化

C++代码运行结果解释

核心原因是执行*p1=20时,p1已经不再指向firstvalue的内存地址,所以这行代码不会修改firstvalue的值。

我们逐行拆解指针操作的执行过程:

  • 初始状态:firstvalue = 5,secondvalue = 15,两个变量占用独立的内存空间
  • p1 = &firstvalue;:p1存储firstvalue的内存地址,即p1指向firstvalue
  • p2 = &secondvalue;:p2存储secondvalue的内存地址,即p2指向secondvalue
  • *p1 = 10;:修改p1指向的内存值,此时firstvalue被修改为10
  • *p2 = *p1;:将p1指向的内存值(10)赋值给p2指向的内存,此时secondvalue被修改为10
  • 关键操作 p1 = p2;:将p2存储的secondvalue地址赋值给p1,此时p1不再指向firstvalue,和p2共同指向secondvalue
  • *p1 = 20;:修改p1当前指向的内存值,也就是把secondvalue改为20,这步操作完全不涉及firstvalue的内存空间,所以firstvalue保持之前的10不变

和你给出的运行结果完全吻合:

  • firstvalue未被后续操作修改,输出为10
  • secondvalue被最后一步赋值操作修改,输出为20
  • p1和p2的输出地址完全一致,证明二者指向同一个变量
  • 解引用p1、p2得到的值都是20,对应secondvalue的最终值

内容的提问来源于stack exchange,提问作者ADAM78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:48:01