#include <stdio.h>
#include <stdlib.h>
//这里为形参从新分配一个存储单元
//因此形参的改变不影响实参
//因此获得的打印值是a1=0,a2=0
void swap1(int x,int y)
{
x=1;
y=1;
}
//一级指针x指向的是a的地址
//*x就是a的地址中存的值,也就是a的值,
//因此改变*x就是改变a的值
void swap2(int *x,int *y)
{
*x=2;
*y=2;
}
//这里直接就是x和a指向同一片内存区,
//x只不过是a的别名,因此改x就是改a
//可是这个在c里面是编译通不过的,由于c里面尚未引用
//惋惜,我以为引用真是个好东西
void swap3(int &x,int &y)
{
x=3;
y=3;
}
int main()
{
int a=0,b=0;
swap1(a,b);
printf(
"a1=%d,b1=%d\n",a,b);
//这里必定要注意,若是传的参数是a,b,编译也不会出错,由于a,b和地址同样,都是int类型
//只是把a,b的值当地址传,传的地址是不对的,会出现segmentation fault
swap2(&a,&b);
printf(
"a2=%d,b2=%d\n",a,b);
swap3(a,b);
printf(
"a2=%d,b2=%d\n",a,b);
}