题目:交换两个整形a和b的值。
1.(错误代码)直接的想法是设计一个自定义函数swap来实现值的交换,需要第三个变量c。
代码如下:
#include <stdio.h>
int swap(int x, int y)
{
int c = 0;
c = y;
y = x;
x = 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;
}
但是这个代码无法实现交换,由调试可知,当将实参ab传递给形参xy时,形参是实参的临时拷贝,有自己的独立内存空间地址,形参的改变不会影响实参。
修改方法:采用指针,将ab的地址赋给变量*px和*py,从而实现间接修改ab的值的作用。
代码如下:
int swap(int* px, int* py)
{
int c = 0;
c = *py;
*py = *px;
*px = c;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
swap(&a, &b); //此处取ab的地址传给swap函数,由*px和*py接收
printf("%d %d\n", a, b);
return 0;
}