请问:传值和传引用、传地址的区别是什么?谢谢!!
大侠们给我详细解释一下吧,感激不尽!!! 问题点数:50、回复次数:10Top
1 楼RUBY_uu()回复于 2005-12-07 06:52:26 得分 0
还有值返回和引用返回、指针返回的区别是什么?
谢谢!!!Top
2 楼handsomerun(毛毛)回复于 2005-12-07 08:37:12 得分 10
传值,
是把实参的值赋值给行参
那么对行参的修改,不会影响实参的值
传地址
是传值的一种特殊方式,只是他传递的是地址,不是普通的如int
那么传地址以后,实参和行参都指向同一个对象
传引用
真正的以地址的方式传递参数
传递以后,行参和实参都是同一个对象,只是他们名字不同而已
对行参的修改将影响实参的值Top
3 楼handsomerun(毛毛)回复于 2005-12-07 08:38:50 得分 0
还有值返回和引用返回、指针返回
和参数传递意思差不多
Top
4 楼ningzhiyu(凝滞雨)回复于 2005-12-07 08:56:59 得分 10
觉得从函数调用的角度理解比较好
传值:
函数参数压栈的是参数的副本。
任何的修改是在副本上作用,没有作用在原来的变量上。
传指针:
压栈的是指针变量的副本。
当你对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。
传引用:
压栈的是引用的副本。由于引用是指向某个变量的,对引用的操作其实就是对他指向的变量的操作。(作用和传指针一样,只是引用少了解指针的草纸)Top
5 楼csucdl(csucdl)回复于 2005-12-07 09:29:00 得分 10
函数参数传递机制的基本理论
函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数。
值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的
实参变量。
具体的c/c++函数参数传递机制见
http://dev.csdn.net/develop/article/65/65393.shtm
Top
6 楼tyj_3()回复于 2005-12-07 09:31:12 得分 2
楼上的说的差不多了Top
7 楼csucdl(csucdl)回复于 2005-12-07 09:38:35 得分 0
函数所有的参数在传递的时候都被扩展为32 bits 的了, 返回值同样也被扩展为32 bits 并且存放于 eax 寄存器中, 除了那些 8-byte 的结构体, 它们被存储在 edx:eax 中。 那些特大类型的结构体则是存储在内存中, 而将地址存储在 eax 中作为指针指示结构体的位置
以上都是针对MS的开发工具而言
Top
8 楼junslover(笨笨猪)回复于 2005-12-07 18:01:39 得分 2
这个说了,不懂的还是不懂,以后LZ最好举例子,然后高手们再来拆解程序,追终数值。这样才能懂得更深刻点。Top
9 楼alen_ghl(东方求*)回复于 2005-12-07 18:21:42 得分 8
http://www.yesky.com/SoftChannel/72342371928899584/20041121/1878236_1.shtmlTop
10 楼xiaofeng1982(feng)回复于 2005-12-07 20:10:36 得分 8
传值:
形参怎么变,实参也不会跟着形参变.
传引用:
实参会随着形参而改变,相当于用一个变量名.
传地址:
实参会随着形参而改变,由于他们用一个地址.
这些只是本人的理解.Top





