void Swap_err1(int a,int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
printf("%d,%d\n",a,b);
}
int main()
{
int a = 10;
int b = 20;
Swap_err1(a,b);
}
我们可以看到结果为:
但是若将输出函数放在mian函数中时
#include<stdio.h>
void Swap_err1(int a,int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
//printf("%d,%d\n",a,b);
}
int main()
{
int a = 10;
int b = 20;
Swap_err1(a,b);
printf("%d,%d\n",a,b);
}
结果就变成了:
而这是因为:在一般传值调用的机制中只能把实参传送个形参,因此在函数调用调用,形参值发生改变,而实参中的值不会发生改变。
这种情况我么就可以用指针来解决,因为指针传递的是一个变量的地址,而一个变量的地址若我们不去修改,那它是在被随机分配完毕之后是不会变化的。
#include<stdio.h>
void Swap(int *p1,int *p2)
{
int tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main()
{
int a = 10;
int b = 20;
Swap(&a,&b);
printf("%d,%d\n",a,b);
}
结果如下:
这是因为用指针将a和b的地址进行了交换,所以调用Swap函数可以将a和b的数值进行交换。