传值
传值方式:将实参的值拷贝给函数或方法,在函数内对形参进行操作,操作的对象是实参的拷贝,对实参本身没有影响,在函数结束返回后,形参被丢弃释放,实参的内容不会被改变。
c++一条基本原则:在默认情况下,参数只能以值传递的方式给函数,被传递到函数的只是变量的值,永远不会是变量本身。
void exchange(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;}
exchange(a,b);在调用过程中,函数隐含的把实参ab的值分别传给了形参xy, 函数中的操作只是对形参的操作,没有对实参进行任何操作,因此,实参ab的值是不变的。
传址
传址方式:将实参的地址传递给函数,在函数内对形参进行操作等同于对实参进行相同的操作,在函数调用结束返回后,形参被释放,实参的内容是对形参进行操作后的结果。
绕开值传递问题的第一种方法指针传递,是向函数传递变量的地址取代它的值。
void exchange(int *px,int *py)
{
int temp=*px;
*px=*py;
py=temp;
}
int a=4,b=5;
exchange(&a,&b);
将ab的地址传递给函数,对px,*py的操作即是对a,b变量本身的操作。可以实现a,b的值交换。
交换
void swap(int *x, int *y)
{ int temp; temp = *x; *x = *y; *y = temp;}
或用异或
void swap(int *x, int *y)
{ *x ^= *y; *y ^= *x; *x ^= *y; }
引用传递
绕开值传递问题的第二种方法引用传递,以引用传递方式传递输入方式,跟传址的目的一样,都是把地址传给函数,但语法不同。
void exchange(int &x,int &y)
{
int temp=x;
x=y;
y=temp;
}
int a=3,b=4;
exchange(a,b);
仅形式参数的格式与值传递不同,内部定义域调用与值传递完全相同,可以实现ab值得对调。
因为在x,y 前有一个取地址符号&,在调用exchang(a,b)时会用替换x,y,称xy引用了变量ab,在函数内部便是对实参ab进行操作了,函数内部可以直接修改a,b的值。
引用即对象的别名,传对象的引用,用于把一个对象的地址作为参数传递过去,而不是对象本身。引用传递,避免了一次实参到形参的拷贝,提高了效率。
来源:CSDN
作者:sxdahh
链接:https://blog.csdn.net/sxdahh/article/details/104791671