return是传值还是传地址的? 蓝森林 http://www.lslnet.com 2006年6月6日 10:18
在函数里使用return来返回一个,是把这个值复制一份给接受参数,还是只是传地址,使二者指向同一块内存? |
本质上都是传值,指针地址也是值. |
-->
显然是传值。如果你在函数里定义了一个比如 int ret; 最后你 return ret; 函数退出后,原本在堆栈的 ret 所在地址已经非法。 |
-->
可以先去弄清楚两个问题::D |
看你返回的是不是局部变量了,如果是局部变量,当然非法, 如果是动态分配的就没有问题,只不过要记得FREE掉, |
-->
返回局部变量的地址非法。 |
C语言是无法真正传址的,只能传值,要看你把这个值如何看待了,你把它当成一个地址,它就是地址。 |
记得函数的参数是可以传递struct的 那能不能return一个struct? 这样应该算传值了吧 |
--> 可以 |
除非是 C++ 函数,指明返回引用之外,都是 pass-by-value 的。引用基本属于 pass-by-address,里外共享一块地址 |
那到底什么时候传值,什么时候传地址呢? 例如: char * 然后调用testFun, 请问,pTest指针的值也就是pTest这个指针变量中的值 与 testFun函数中的局部变量 p 的值是否一样的? |
对于这些问题的讨论完全没有意义,
想知道答案,做些练习, objdump 来看一看就一清二楚, 胜过别人的千言万语 |
不同意楼上的说法,多讨论是有好处的,可以多发现问题,知道自己的不懂之处,当然,不经思考的提问是不可取的。 |
-->
偏执狂的人几乎从来不参与讨论 |
知道清朝为什么灭亡,中国近代为什么落后吗?就是因为闭关锁国的! |
-->
KAO~ 这里谈论的是技术,不谈论国家 |
简单地说:永远是值。
地址也是值。 |
-->
Maybe a sketch map can say more. |
-->
Maybe a sketch map can tell more: |
昨天将书又翻了一下。觉得在绝大多数情况下传的都是值。因为传指针时也是将一个指针的“值”传给另一个指针。但是有一种情况不一样。那就是函数的返回值类型为引用且函数为左值时。这时函数的返回值为一个变量的别名,可以对其进行赋值。如下: [code]#include <iostream> using namespace std; int &min(int &i, int &j); |