→ sarafciel: 你從char的角度看是是call by ref,char *的話就是call 06/27 10:00
→ stupid0319: 我怎麼看也都是pass by value 06/27 10:00
→ sarafciel: by value沒有錯 外面的des跟src指到的東西會改 但是des 06/27 10:01
→ sarafciel: 跟src本身是call by value傳進去 所以不會變 06/27 10:02
→ sarafciel: *才 06/27 10:07
所以s跟t是local variable?然後把&des跟&src的value copy一份過去給s與t?
※ 編輯: zzss2003 (61.216.156.33), 06/27/2018 10:26:12
→ loveflames: 答對了 06/27 10:27
→ sarafciel: &des跟&src的(X) des跟src的value(O) 06/27 10:30
→ sarafciel: 你想傳&des跟&src的話 s跟t要宣告成char ** 06/27 10:31
拍謝,打錯了。是des與src的value,多打了&
→ loveflames: java的reference行為比較像C/C++的指標,以這角度來說 06/27 10:34
→ loveflames: 是call by value,而C++ reference是真正意義的call 06/27 10:35
→ sarafciel: 改成這樣的話就會是你內文後段說的行為 06/27 10:35
→ loveflames: by reference,不過底層實作也是用指標 06/27 10:35
謝謝各位的建議,我想我要來複習一下by val與by ref的定義了
※ 編輯: zzss2003 (60.251.49.183), 06/27/2018 11:00:05
→ MOONRAKER: 看到參數前面有&才是pass by ref 而那是C++ 06/27 11:43
→ MOONRAKER: C是沒有pass by ref的 06/27 11:44
→ tinlans: 這類名詞只是 syntax sugar 層級上的詮釋, 06/27 12:34
→ tinlans: 換句話說不那麼甜美還要多勞動你的就不會是 by ref。 06/27 12:34
→ tinlans: 你看不清楚的話,先 typedef char *CharPtr, 06/27 12:37
→ tinlans: 然後把全部的 char * 換成 CharPtr 就會懂了。 06/27 12:37
→ tinlans: 指標型別,充其量也只是變數的一種型別,就只是這樣。 06/27 12:39
→ tinlans: 在語言結構上,int 和 char * 都僅僅是一個型別而已。 06/27 12:40
→ uranusjr: Java 的 reference 其實是個徹頭徹尾的 pointer, 根本不 06/27 18:09
→ uranusjr: 是理論意義上的參考, 一切都是個假象 06/27 18:10