为何这段C++代码输出为433?我预期结果是273
为什么你的C++代码输出是433而不是273?
咱们一步一步拆解这段代码的执行过程,就能彻底搞明白问题出在哪了:
首先看main函数里的初始变量值:
int a=2; int b=7;
这时候main作用域里的a是2,b是7。
接下来是关键的函数调用x(b,a)——这里一定要注意:函数x的参数是引用类型(int &a,int &b),引用传递的不是变量的副本,而是直接绑定原变量的内存地址,也就是说:
- x函数里的第一个参数
a,是main函数里b的"别名"(操作它就等于操作main里的b) - x函数里的第二个参数
b,是main函数里a的"别名"(操作它就等于操作main里的a)
现在进入x函数执行代码:
a=3; b=4; return a;
- 第一行
a=3:这里的a是x的第一个参数,对应main里的b,所以main里的b被直接改成了3 - 第二行
b=4:这里的b是x的第二个参数,对应main里的a,所以main里的a被直接改成了4 - 第三行
return a:返回的是x的第一个参数(也就是main里的b,当前值是3),所以main里的c被赋值为3
最后回到main函数执行cout<<a<<b<<c;:
- main里的
a现在是4,b现在是3,c是3,连起来输出就是433
总结一下核心问题:你调用x函数时传递的参数顺序是x(b,a),而非预期的x(a,b),再加上引用传递会直接修改原变量,才导致结果和预期不符。如果想得到273,你需要把调用改成x(a,b),或者根据参数绑定关系调整x函数内的赋值逻辑。
内容的提问来源于stack exchange,提问作者Akash papnai
相关产品推荐
相关产品推荐

