C++函数的三种传递方式为:值传递、指针传递和引用传递

C++函数的三种传递方式为:值传递、指针传递和引用传递数据结构

值传递:函数

void fun(int x){

x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中从新开辟的一块临时空间把y的值 送给了x;这样也增长了程序运行的时间,下降了程序的效率。

}

void main(void){

int y = 0;

fun(y);

cout<<\"y = \"<<y<<endl; //y = 0;

}

指针传递:spa

void fun(int *x){

*x += 5; //修改的是指针x指向的内存单元值

}

void main(void){

int y = 0;

fun(&y);

cout<<<<\"y = \"<<y<<endl; //y = 5;

}

引用传递:指针

void fun(int &x){

x += 5; //修改的是x引用的对象值 &x = y;

}

void main(void){

int y = 0;

fun(y);

cout<<<<\"y = \"<<y<<endl; //y = 5;

}

1.值传递:有一个形参向函数所属的栈拷贝数据的过程,若是值传递的对象是类对象或是大的结构体对象,将耗费必定的时间和空间。code

2.指针传递:一样有一个形参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节的地址。对象

3.引用传递:一样有上述的数据拷贝过程,但其是针对地址的,至关于为该数据所在的地址起了一个别名。blog

效率上讲,指针传递和引用传递比值传递效率高。通常主张使用引用传递,代码逻辑上更加紧凑、清晰。内存

引用传递作函数参数”是C++的特性,C语言不支持。class

例如:数据结构带&与不带&效率

带&的是引用型参数,它是地址传递,其实参会随着形参的改变而改变;不带&的参数是通常参数,是值传递,其实参不会随着形参的改变而改变。因此,结构改变,而且须要传回这种改变的要用引用型参数,不然用通常参数。GetElem(L,i)只是找到第i个元素的值,线性表的结构并未发生任何改变,因此参数L前面不用加&。ListInsert(&L,i,e)是在线性表L的第i个元素处插入一个数值为e的元素,线性表L的结构发生了改变,长度增长了,因此在L前必须加上&。若是不加,显示L时,新增元素就显示不出来,显示L的长度,也仍然是增长之前的值,比实际长度少1.

相关文章
相关标签/搜索