作者uziel (= ̄ω ̄=)
看板java
标题Re: [问题] java的call by reference
时间Wed Apr 7 21:04:11 2010
仅就 C++ 的部份回答
: 但 以下的 c++ 却能正常运作
: #include <iostream>
: class Object{
: public:
: int value;
: };
: void dodo(Object*& obj){
: obj = new Object();
: obj->value = 10;
: }
: void main(){
: Object* obj;
: dodo(obj);
: std::cout << obj->value;
: }
: 这边我pass pointer 的 reference到 function dodo,但却正常运作了
: 难道!?! java不是这样运作的????
C++ 在宣告函数的时候可以使用「参考」(reference),也就是宣告变数加个「&」符号,
代表这个变数是个别名,程式在此不会在 stack 里面多塞一个新的变数,而是使用呼叫
者所传入的「那一个」变数...好像有点饶舌,直接看以下的程式:
/**************************** start ******************************/
#include <iostream>
class Object{
public:
int value;
};
void dodo(Object*& obj){ // 这个 obj 是个「参考」
obj = new Object();
obj->value = 10;
std::cout << "address of obj in dodo() = " << &obj << endl;
}
void main(){
Object* obj;
dodo(obj);
std::cout << obj->value << endl;
std::cout << "address of obj in main() = " << &obj << endl;
}
/**************************** end ********************************/
这个程式在 main() 与 dodo() 各自印出他们的 obj 变数的记忆体地址,执行结果这
两个地址应该是相同的,显示 main() 的 obj 跟 dodo() 的 obj 根本是同一个,在
dodo() 里面操作 obj 就等於在 main() 操作,所以此程式能正常运作。
请参考:
http://www.wretch.cc/blog/cwz0205/15360838
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.50.74
※ 编辑: uziel 来自: 220.134.50.74 (04/07 21:09)