错误程序如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void math(int x,int y)
{
int c = x;
x = y;
y = c;
}
int main()
{
int a = 10;
int b = 20;
printf("a=%d,b=%d\n",a,b);
math(a,b);
printf("a=%d,b=%d",a,b);
return 0;
}
我们的目的是交换a和b的值,但是结果却 没有交换;
这是为什么呢,其实,实参只是把自己的值拷贝给了形式参数,
形式参数的地址与实参的地址完全不同,导致在交换两个值的时候,只是交换了形式参数的值,
原式中的a,b的两个值其实是没有变的。
那么要调用函数来交换a与b的值,可以利用地址来进行交换。
例如:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 0;
int* put =&a;
*put =20;
printf("a=%d",a);
return 0;
}
这样用put来装a的地址,再使用*put来改变a的值即可;
所以这个交换函数改善后为:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void math(int* x,int* y)
{
int c = *x;
*x = *y;
*y = c;
}
int main()
{
int a = 10;
int b = 20;
printf("a=%d,b=%d\n",a,b);
math(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
这样a与b的值就能正常交换了