Re: [問題] java的call by reference
僅就 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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):