实现一个函数来交换两个整数的内容;
思路:1.从键盘获取要交换的两个整型;
2.交换两个数的内容;
3.输出交换后的结果。
代码:
错误代码:
#include<stdio.h>
void Swap(int x, int y)
{
int tmp = x;
x = y;
y = tmp;
}
int main()
{
int a = 0;
int b = 0;
//输入
printf("请输入要交换的两个数(例如:3 5):\n");
scanf("%d %d", &a, &b);//3 5
//交换
printf("交换前:a=%d b=%d\n", a, b);
Swap(a, b);
//输出
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
//当函数调用的时候,实参传递给形参,这时形参是实参的一份
//临时拷贝,对形参的修改不影响实参。
所以,交换后,由于在Swap函数里的临时变量x,y在出函数后被销毁,而且还是临时变量,与Swap(a,b)里的a,b是不同的,x,y的值无法返回给a,b。也就是,当函数调用的时候,实参传递给形参,这时形参是实参的一份临时拷贝,对形参的修改不影响实参。就有了下图的结果;
正确的做法是要把a,b的地址传给Swap函数,用指针来存地址,也就是在实参和形参之间建立联系,使x,y与a,b的地址空间相同。
Right:
#include<stdio.h>
Swap(int* x, int* y)
{
int swap = 0;
if (*x != *y)
{
swap = *x;
*x = *y;
*y = swap;
printf("交换后:%d %d\n",*x,*y);
}
else
{
printf("错误!\n");
}
}
int main()
{
int a = 0;
int b = 0;
printf("请输入要交换的两个整数:\n");
scanf("%d %d",&a,&b);
Swap(&a,&b);
return 0;
}