通过函数调用实现两个数交换会 有以下几种情况:
情况一
#include<stdio.h>
int main()
{
int a = 2,b = 3;
void swap(int x, int y);
swap(a,b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap(int x, int y) //形参不能传递给实参,即形参对实参不构成影响
{
int tmp = x
x = y;
y = tmp;//所以当a,b传过来的时候,形参当中x,y 进行了交换,而不能反传给实参
//所以此程序有误;
x = y;
y = tmp;
所以上述程序错误
情况二
#include<stdio.h>
int main()
{
int a = 2,b = 3;
void swap(int x, int y);
swap(a,b);
printf("a=%d,b=%d\n",a,b);
return 0;
} ,
void swap(int *x, int *y)
{
int *tmp =* x; //实现的是两个指针指向的交换并不影响a,b的值
*x = *y;
*y = tmp;
}
所以上述程序错误
情况三(正确)
#include<stdio.h>
int main()
{
int a = 2,b = 3;
void swap(int x, int y);
swap(&a,&b); //a,b的地址传递给形参
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap(int *x, int *y)
{
int tmp = *x; //tmp 中存放a的地址
*x = *y; //x中存放b的地址
*y = tmp; //y中存放a的地址
}
总结:
- 形参是实参的一份临时拷贝,形参和实参在开辟空间时,其开辟的空间是不同的
- 单项传递,即由实参传递给形参,形参无法传递实参
- 通过指针将形参和实参联系起来