Re: [問題] 請問call by address

看板PLT (程式語言與理論)作者 (godfat 真常)時間17年前 (2007/03/20 21:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/11 (看更多)
※ [本文轉錄自 java 看板] 作者: godfat (godfat 真常) 看板: java 標題: Re: [問題] 請問call by address 時間: Tue Mar 20 20:12:36 2007 根據 wikipedia, http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference ...總覺得這頁長得好像跟以前不一樣? 我記得以前是說 call by address 是 call by reference 的另一種說法 也就是說,兩件事是指同一件事 現在看起來 call by address 又是 call by reference 的變形了 其實我只是想說,名詞不太重要,不是因為他真的不重要, 而是說法真的是太多種了|||b 所以呢,知道是什麼事情就好了… :( 以 Java 來說的話,variable 本身不能被 alias, 意思就是 每一個 call 都只能傳遞 variable 本身的複製。 以 C++ 來說的話,上面那件事跟把 pointer copy 傳過去是同一件事 然後額外還有個 call by reference 就是替 variable 做 alias... Java: void f(Object of){ of = null; } void g(){ Object og = new Object(); f(og); out.println(og); } 則 instance 只有一份,Object variable 有兩份,of 和 og 是不同的 對 of 操作不會影響到 og, 經過 f(og); 後 og 還是指向該 instance. Java 永遠只有這種操作 C++: void f(Object* of){ of = NULL; } void g(){ Object* og = new Object; f(og); cout << og << endl; } 上面這段意思跟 Java 一樣,但另外還有: void f(Object*& of){ of = NULL; } 只在參數列那邊多加了個 &, 這樣就是 pointer reference, of 和 og 可以視為同一個 pointer, 所以 f(og); 後,og 會變 NULL 還有很多其他的變形,例如: void f(Object of); void f(Object** of); void f(Object**& of); void f(Object************************************************** of); 在 Java 板就不說太多了 XD -- In Lisp, you don't just write your program down toward the language, you also build the language up toward your program. 《Programming Bottom-Up》- Paul Graham 1993 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.58.12

03/20 20:35,
轉去 PLT 討論如何?
03/20 20:35
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.30.220
文章代碼(AID): #15_-ExaH (PLT)
討論串 (同標題文章)
文章代碼(AID): #15_-ExaH (PLT)