结构体成员函数无法修改目标结构体变量的问题求助
问题原因及解决方案
你的代码问题出在函数参数的传递方式:modify函数的参数test op是值传递,当调用a.modify(b)时,程序会创建一个b的临时副本op,函数内部修改的只是这个副本的x值,原对象b完全不受影响,所以输出结果还是初始的2。
解决方案1:使用引用传递
将函数参数改为引用类型,这样函数会直接操作传入的原对象,而不是副本。修改后的代码如下:
#include <iostream> struct test { int x{}; void modify(test& op) // 改为引用参数 { op.x = op.x + 1; } }; int main() { test a{}; a.x = 1; test b{}; b.x = 2; a.modify(b); std::cout << b.x << '\n'; // 输出3 return 0; }
解决方案2:使用指针传递
如果更习惯使用指针,也可以将参数改为指针类型,调用时传入对象的地址:
#include <iostream> struct test { int x{}; void modify(test* op) // 改为指针参数 { op->x = op->x + 1; // 用->访问指针指向的成员 } }; int main() { test a{}; a.x = 1; test b{}; b.x = 2; a.modify(&b); // 传入b的地址 std::cout << b.x << '\n'; // 输出3 return 0; }
两种方案都能直接修改原对象b的x值,运行后会得到预期的结果3。
内容的提问来源于stack exchange,提问作者stupiddevil
相关产品推荐
相关产品推荐

