调用栈:push 进去,return 出来
程序从 main 开始,调用 add(3, 4) 时系统压入一个新栈帧,形参 a、b 各自拿到实参的拷贝;return a + b 算出 7 交回 main,栈帧弹出,a、b 随之销毁。「形参是拷贝、返回即销毁」这两点,正是下面 swap 失败的伏笔。
传值 swap 为什么失败
void swapVal(int a, int b) 参数不带 *,是传值:x、y 和 a、b 是四个独立的盒子,分住两个栈帧。函数里用中间变量把 a、b 换得再欢,main 里的 x、y 一点没动,函数一返回拷贝销毁,交换等于白干——打印出来仍是 3 5。
指针出参:想改谁,就传谁的地址
成功版 void swapPtr(int *pa, int *pb):调用时写 swapPtr(&x, &y) 把地址递进去,函数里 int t = *pa; *pa = *pb; *pb = t; 全程解引用操作本体,打印出 5 3。只读的小参数传值就够;想让函数改到外面,必须传地址——scanf 要写 &n,也是同一个道理。