C++的交换函数但是最后的运行结果我想不明白 为什么第三行不是a=10 b=20

img

img

img

第三行是swap_v的调用结果,swap_v的参数是按值传递(必须有&符号才会按引用传递,C++的默认传参仍然是按值传递),这个方式下,实参仅是传进的变量的副本,不是这些变量本身,对副本的修改不会影响原变量。

第一次:定义 int a=10,b=20; 此时输出:a=10,b=20
第二次:swap_r(int &,int &)函数参数是地址引用,所以运行后,实际改变了主函数中a b 的值,a=20,b=10,输出也是:a=20 ,b=10
第三次:swap_v(int ,int )函数参数是值传递,函数体里a b虽然交换了值,但并没有传递回主函数,并没有改变主函数中a b的值,此时主函数输出的 a b 的值,仍然是第二次交换的结果,即a=20,b=10