如果用自定义函数交换a,b的值,你会怎样做?
#include <stdio.h>
void exchange(int a, int b) {
int t;
t = a;
a = b;
b = t;
}
int main() {
int a = 10, b = 20;
printf("%d,%d\n", a, b);
exchange(a, b);
printf("%d,%d\n", a, b);
}
输出结果:
10,20
10,20
显然这是不对的。
我们把a,b称为实际参数,把x,y,以及t成为形式参数。
因为当实参传给形参的收,形参实际上是实参的一份临时拷贝,所以对形参的修改是不会改变实参的。
所以应该这样写
#include <stdio.h>
void exchange(int *pa, int *pb) {
int t = 0;
*pa = t;
*pa = *pb;
*pb = t;
}
int main() {
int a = 10, b = 20;
printf("a=%d b=%d\n", a, b);
exchange(&a, &b);
printf("a=%d b=%d", a, b);
}
输出结果:
10,20
20,10
你应该把a,b的地址拷贝过去。a,b的地址完成交换,这样就没得说了,a和b肯定会交换。