swap
错误版本:只是交换了两个指针本身的值
swap(&x, &y);
void swap(int *a, int *b) {
int *t;
t = a; // t 现在存储了 a 的值,即 x 的地址
a = b; // a 变成了 b 的值,即 y 的地址
b = t; // b 变成了 t 的值,即 x 的原始地址
}
正确版本
swap(&x, &y);
void swap(int *a, int *b) {
int t = *a; // 保存 a 指向的值
*a = *b; // 将 b 指向的值赋给 a 指向的位置
*b = t; // 将 a 原来的值赋给 b 指向的位置
}