为何程序执行后变量a的值仍为7?C++函数传参问题咨询
为什么变量a的值仍为7?
核心原因是C++的传值调用和传引用调用的区别,咱们一步步拆解:
1. 函数参数的传递规则
看test函数的参数定义:
void test(int m , int &n)
- 第一个参数
int m是传值调用:调用test(a,b)时,程序会把实参a的值(7)复制一份给形参m。m和a是完全独立的两个变量,占用不同内存空间,修改m不会影响a。 - 第二个参数
int &n是传引用调用:形参n是实参b的「别名」,直接指向b的内存地址。对n的任何修改,本质都是直接修改b内存里的值。
2. 代码执行的完整流程
- 在
main函数里,初始化a=7、b=12。 - 调用
test(a,b):- 形参
m拿到a的副本,值为7;n绑定到b,当前值是12。 - 执行
n = n - 2*m:计算得12 - 2*7 = -2,这会直接修改b的值,此时b变成-2。 - 执行
m = 2*m:把m的值改成14,但这只是修改了m这个副本,和a没有任何关系,a的内存里还是原来的7。
- 形参
- 回到
main函数输出,a的值依旧是7,b的值变成了-2。
内容的提问来源于stack exchange,提问作者frnendy
相关产品推荐
相关产品推荐

