函数作用是交换a和b的值
值传递
运行结果没有进行值的交换
#include <stdio.h>
void Change(int x, int y)
{
int m;
m=x;
x=y;
y=m;
printf("x的值是%d\n",x);//x=3
printf("y的值是%d\n",y);//y=5
}
int main()
{
int a=5;
int b=3;
Change(a,b);
printf("a的值是%d\n",a);//a=5
printf("b的值是%d\n",b);//b=3
return 0;
}
用指针进行地址传递
运行结果进行了值得交换
#include <stdio.h>
void Change(int *x, int *y)
{
int m;
m=*x;
*x=*y;
*y=m;
printf("*x的值是%d\n",*x);//*x=3
printf("*y的值是%d\n",*y);//*y=5
printf("x的值是%x\n",x);//x=62fe1c
printf("y的值是%x\n",y);//y=62fe18
}
int main()
{
int a=5;
int b=3;
Change(&a,&b);
printf("a的值是%d\n",a);//a=3
printf("b的值是%d\n",b);//b=5
printf("a的地址是%x\n",&a);//a=62fe1c
printf("b的地址是%x\n",&b);//b=62fe18
return 0;
}
可以看出 Change(&a,&b);的调用其实是将a的地址给了x;b的值给了y。
所以说是进行了地址的传递,在 Change(int x, int y)函数中对x和y的操作就相当于对a和b的操作。
引用传递
值发生了交换
#include <stdio.h>
void Change(int &x, int &y)
{
int m;
m=x;
x=y;
y=m;
printf("x的值是%d\n",x);//x=3
printf("y的值是%d\n",y);//y=5
}
int main()
{
int a=5;
int b=3;
Change(a,b);
printf("a的值是%d\n",a);//a=3
printf("b的值是%d\n",b);//b=5
return 0;
}
这种事直接传递的地址,相当于在其本身上进行运算