#include<stdio.h>
void swap(int *a, int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void main()
{
int a, b;
printf("输入两个整数:");
scanf("%d,%d", &a, &b);
printf("结果是:%d 和 %d\n%d,%d\n", &a, &b,a,b);
swap(&a,&b);
printf("结果是:%d 和 %d\n%d,%d\n", &a, &b,a,b);
}
上面这段代码可以实现交换两个数据,但是有的人会存在一个误区,就是会认为是地址发生了交换,这种想法是错误的,在swap这个函数的调用时,我们通过传入a和b的地址,并在swap函数体中接收的*a和*b其实就是*&a和*&b,这一点很重要,*&a就是存放a变量的地址中的数值,因此,当*&a发生改变时,a的值自然也会发生改变,要注意的是,这是地址中的值的交换,而不是地址的交换,在下图的打印中,我们可以清楚地看到,在发生之前,a和b的地址与发生交换之后a和b的地址都没有发生改变。