首页 > 代码库 > C++函数的三种传递方式为:值传递、指针传递和引用传递
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; }
指针传递:
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.值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。
2.指针传递:同样有一个形参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节的地址。
3.引用传递:同样有上述的数据拷贝过程,但其是针对地址的,相当于为该数据所在的地址起了一个别名。
效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧凑、清晰。
引用传递做函数参数”是C++的特性,C语言不支持。
例:数据结构中带&与不带&
带&的是引用型参数,它是地址传递,其实参会随着形参的改变而改变;不带&的参数是一般参数,是值传递,其实参不会随着形参的改变而改变。所以,结构改变,并且需要传回这种改变的要用引用型参数,否则用一般参数。GetElem(L,i)只是找到第i个元素的值,线性表的结构并未发生任何改变,所以参数L前面不用加&。ListInsert(&L,i,e)是在线性表L的第i个元素处插入一个数值为e的元素,线性表L的结构发生了改变,长度增加了,所以在L前必须加上&。如果不加,显示L时,新增元素就显示不出来,显示L的长度,也仍然是增加以前的值,比实际长度少1.
C++函数的三种传递方式为:值传递、指针传递和引用传递
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。