Re: [問題] java的call by reference

看板java作者 (= ̄ω ̄=)時間15年前 (2010/04/07 21:04), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
僅就 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)
文章代碼(AID): #1Bl8BDIY (java)
文章代碼(AID): #1Bl8BDIY (java)