最近有了一个新发现,关于c语言函数的传址调用
说用函数的形式交换2个数字,如果用函数方法,初学者可能会写如下的代码
#include<stdio.h>
int swap(int x, int y)
{
int c = 0;
c = x;
x = y;
c = y;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
swap(a, b);
printf("%d %d\n", a, b);
return 0;
}
代码是可以运行的,但是并没有交换2个值;这是为什么呢?
细细想来,原来函数在调用的时候,实参传给形参,形参是实参的一份临时拷贝,所以对形参的修改是不影响实参,函数传递过程中,地址已经发生了变化,因此我们可以用地址的形式传过去,且以指针变量接收代码如下:
#include<stdio.h>
int swap(int* px, int* py)
{
int c = 0;
c = *px;
*px = *py;
*py = c;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
swap(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
运行结果如图所示: