附代码如下:
#include<stdio.h>
void swap1(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
printf("%d,%d\n",a,b);
}
void swap2(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
printf("%d,%d\n",*x,*y);
}
void swap3(int *x, int *y)
{
int *temp;
temp = x;
x = y;
y = temp;
printf("%d,%d\n",*x,*y);
}
int main()
{
int a = 3,b = 4;
printf("%d,%d\n",a,b);
swap1(a,b);
printf("%d,%d\n",a,b);
swap2(&a,&b);
printf("%d,%d\n",a,b);
swap3(&a,&b);
printf("%d,%d\n",a,b);
return 0;
}
理解如下:
1,swap1():实际交换的是形参的值,实参的值并没有发生交换,说明C中实参和形参之间的传递是实参到形参的单向传递;
2,swap2():指针变量做函数参数,在函数的执行过程中指针变量所指向的变量值发生了变化;
3,swap3():同1。不过在swap3中改变的是实参的地址。