为什么C++中使用指针修改变量值后,目标变量的值仍未发生预期变化
C++代码运行结果解释
核心原因是执行*p1=20时,p1已经不再指向firstvalue的内存地址,所以这行代码不会修改firstvalue的值。
我们逐行拆解指针操作的执行过程:
- 初始状态:
firstvalue = 5,secondvalue = 15,两个变量占用独立的内存空间 p1 = &firstvalue;:p1存储firstvalue的内存地址,即p1指向firstvaluep2 = &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未被后续操作修改,输出为10secondvalue被最后一步赋值操作修改,输出为20- p1和p2的输出地址完全一致,证明二者指向同一个变量
- 解引用p1、p2得到的值都是20,对应
secondvalue的最终值
内容的提问来源于stack exchange,提问作者ADAM78
相关产品推荐
相关产品推荐

