用一个函数来来实现交换两个数?
初学者通常会采用以下代码来实现,但结果却不如人意
include<stdio.h>
void swap(int x, int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
int main()
{
int a = 5;
int b = 10;
printf("未交换:a=%d,b=%d", a, b);
swap(a, b);
printf("未交换:a=%d,b=%d", a, b);
return 0;
}
这是为什么呢?
因为函数被调用时,形参x和y重新开辟了两个空间用来存放a和b的值,x和y的地址与a和b的地址不一样,所以把x,y的值交换并不会影响到a和b的值
所以用什么方法来实现这个功能呢?
通过地址的交换数值来实现
如上图所示,调用函数时,把a的地址发给x,b的地址发给y,通过x和y找到a和b的值进行交换
代码如下
void swap(int* x, int* y)
{
int z = 0;
z = *x;
*x =* y;
*y = z;
}
int main()
{
int a = 5;
int b = 10;
printf("未交换:a=%d,b=%d", a, b);
swap(&a, &b);
printf("未交换:a=%d,b=%d", a, b);
return 0;
}
添加公众号:光脚的小孩
免费获得大量学习资料