交换a、b的值。
#include <stdio.h>
void swap1(int, int);
void swap2(int *pa, int *pb);
int main()
{
int a, b;
scanf("%d %d", &a, &b);
swap1(a, b);
printf("%d %d\n", a, b);
swap2(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
void swap2(int *pa, int *pb)
{
int temp = *pa;
*pa = *pb;
*pb = temp;
}
这是一道经典例题,但是在函数调用中经常会犯搞不清实参的形参的错误,例如:
void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
结果:
5 6
a =5 b =6
此时没有实现功能
很多人都会犯这样的错误,这样的程序实质上是改变了形参a和b的值,却并没有对实参产生影响。要想达到预想的结果方法是:定义形参a和b中存放的是实参a、b的地址,对其地址进行交换就能完成。这样实质上是交换了形参中a、b里存放的实参a、b的地址。例如:
void swap2(int *pa, int *pb)
{
int temp = *pa;
*pa = *pb;
*pb = temp;
}
运行结果为
5 6
a = 6 b = 5