C++函数的两种传值方式为:值传递和引用传递

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyl424525/article/details/89326123

C++函数的两种传递方式为:值传递和引用传递(地址传递)。

1.值传递

在值传递过程中,实参和形参位于内存中两个不同地址中,实参先自己复制一次拷贝,再把拷贝复制给形参。所以,在值传递过程中,形参的变化不会对实参有任何的影响。如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。
find(int x){}
y= find(z);
上面的例子中,z是实参,x是形参。x变z不变。

2.引用传递(地址传递)

在函数调用的时候,实参是变量本身,但传递的是实参的地址,地址一样也就意味着实参和形参是一样的,当你的形参发生改变时,实参也会发生改变。
find(int &x){}
y= find(z);
上面的例子中,z是实参,x是形参。z随x而改变。

const引用传递
find(const int &x){}
y= find(z);
上面的例子中,z是实参,x是形参。z不随x而改变
这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效。也就是说,在值传递中要进行两次拷贝,浪费内存资源是相当可耻的,const的出现有效避免了这种情况的出现,只需拷贝一次就够了。

函数参数是指针

指针作为一种变量,可以采用值传递和引用传递两种方式。
指针和变量一样,也是有地址的,只不过变量的值被解释成一个值,而指针的值被解释成一个地址。
指针和引用一样,在函数调用中,被调用函数可以修改实参:
void fun(int *x){
*x += 5; //修改的是指针x指向的内存单元值
}
void main(void){
int y = 0;
fun(&y);
cout<<<<"y = "<<y<<endl; //y = 5;
}

总结:
(1)效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧凑、清晰。
(2)引用传递做函数参数”是C++的特性,C语言不支持。
(3)GetElem(L,i)只是找到第i个元素的值,线性表的结构并未发生任何改变,所以参数L前面不用加&。ListInsert(&L,i,e)是在线性表L的第i个元素处插入一个数值为e的元素,线性表L的结构发生了改变,长度增加了,所以在L前必须加上&。如果不加,显示L时,新增元素就显示不出来,显示L的长度,也仍然是增加以前的值,比实际长度少1.

猜你喜欢

转载自blog.csdn.net/yyl424525/article/details/89326123