为何调用指定C++函数后变量a的值为2而非3或4?
为什么调用f(a,a)后变量a的值是2?
先看你的代码:
#include <iostream> using namespace std; void f(int &x, int &y) { x = 1; x = x + y; } int main() { int a = 3; f(a, a); cout<<a; return 0; }
结果分析
核心原因是函数f的两个参数都是引用类型(int &),这意味着x和y并不是a的副本,而是a的别名——它们指向同一块内存地址,修改其中任何一个,本质都是修改a本身。
我们一步步拆解执行流程:
- 初始状态:
a = 3。 - 调用
f(a,a):x和y同时绑定到a,此时x和y都代表a。 - 执行
x = 1;:因为x是a的引用,所以a的值被直接改成1。 - 执行
x = x + y;:此时x和y对应的都是已经变成1的a,所以计算的是1 + 1 = 2,再把结果赋给x(也就是a),最终a的值为2。
引用参数函数的工作原理
- 引用作为函数参数时,不会为实参创建新的副本,而是直接关联到实参的内存位置。
- 如果多个引用参数绑定到同一个实参,那么对任意一个引用的修改都会实时同步到实参,后续其他引用访问的都是修改后的实参值。
内容的提问来源于stack exchange,提问作者Weegee
相关产品推荐
相关产品推荐

