先贴一段代码,
void swap_zhi(int v1,int v2)
{
int temp=v1;
v1=v2;
v2=temp;
}
void swap(int *p1,int *p2)
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
void swap1(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
void swap_ref(int &p1,int &p2)
{
int temp;
temp=p1;
p1=p2;
p2=temp;
}
void main(0
{
int a1=10;
int b1=20;
int *p_1=&a1;
int *p_2=&b1;
//swap(p_1,p_2);
//swap1(p_1,p_2);
swap_ref(a1,b1);
}
上面,swap_zhi是典型的传值函数,swap和swap1分别是传址函数,和传址函数的对比函数,swap_ref是引用传递函数。
传值函数执行时,实参的值不会变换,只有形参会发生改变。
传址函数执行时,实参的地址不会变,形参的地址改变;但是实参的指向会发生变化,可以实现数据的顺序更改。
引用传递函数执行时,实参和形参都会改变,原因则是由于形参此时只是实参的一个引用,只是一个别名,没有复制的过程,所以引用用来做形参传递参数是效率最高的。