传值,传址和传引用

眉间皱痕 提交于 2020-03-11 14:57:49

传值
传值方式:将实参的值拷贝给函数或方法,在函数内对形参进行操作,操作的对象是实参的拷贝,对实参本身没有影响,在函数结束返回后,形参被丢弃释放,实参的内容不会被改变。
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的值。
  引用即对象的别名,传对象的引用,用于把一个对象的地址作为参数传递过去,而不是对象本身。引用传递,避免了一次实参到形参的拷贝,提高了效率。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!