值传递 vs 引用传递 —— swap 为什么成败两样
值传递交换的是「副本」,函数返回后实参纹丝不动;引用传递操作的是「本体」,实参真的被交换
值传递 · pass by value
void swap(int x, int y)
main 栈帧
a
5
b
8
拷贝一份副本
swap 栈帧(副本)
x
5
y
8
副本被回收 → main 中 a=5, b=8 交换失败 ✗
引用传递 · pass by reference
void swap(int &x, int &y)
main 栈帧
a
5
b
8
x、y 是 a、b 的别名
swap 栈帧(别名)
x 即 a
5
y 即 b
8
改别名就是改本体 → main 中 a=8, b=5 交换成功 ✓
▶ 重播