C++的传值传址
先来看一段代码:
void fa(int &a,int &b)
{
int t=a;a=b;b=t;
}
void fb(int a,int b)
{
int t=a;a=b;b=t;
}
void fc(int *a,int *b)
{
int *t=a;a=b;b=t;
}
void fd(int *a,int *b)
{
int *t=a;*a=*b;*b=*t;
}
void main()
{
int c[2]={100,200};
fa(c[0],c[1]);
cout<<c[0]<<'\t'<<c[1]<<endl;
fb(c[0],c[1]);
cout<<c[0]<<'\t'<<c[1]<<endl;
fc(c[0],c[1]);
cout<<c[0]<<'\t'<<c[1]<<endl;
fd(c[0],c[1]);
cout<<c[0]<<'\t'<<c[1]<<endl;
}
输出结果:
200 100
100 200
100 200
200 100
原因探讨
1.第一个是引用,所以a,b是传入参数的别名,所以修改a,b就是修改原参数;
2.第二个是正常的传值,相当于原参数的复制品去完成函数操作,所以对原参数的值不会产生任何影响;
3.是指针的传值。相当于把原指针的值的复制品去完成函数操作,所以复制品完成了指向的交换并不影响原指针的值;
4.也是指针的传值,但是在函数中访问了原指针并修改了其数值。