推 VictorTom:不知道是不是小弟的推文讓您誤解了什麼, 簡單回推一下. 06/21 22:56
→ VictorTom:C只有Call by Value, C++就多了Call by Reference.... 06/21 22:57
→ VictorTom:但是有些中文書, 把傳pointer像 swap(int *a, int*b); 06/21 22:58
→ VictorTom:這種東西叫Call by Address, 然後說C有CbA這種傳遞法. 06/21 22:58
→ VictorTom:大概是因為作者"覺得"現在是把var的address傳進去了. 06/21 22:59
→ VictorTom:但是他忽略了這其實是把pointer用CbV的方式傳入而已. 06/21 22:59
→ VictorTom:實際上的CbA其實就像您說的, 應該是指Call by Reference 06/21 23:00
→ VictorTom:搞到最後, Call by Address這種講法讓人很難分辨到底在 06/21 23:02
→ cole945:我的意思是,簡單講,C/C++的傳pointer*也好,傳ref&也好, 06/21 23:02
→ cole945:都應屬於Call-by-ref的一種. 因為傳遞方式是看概念/模式 06/21 23:02
→ cole945:而不是看實作.__. 06/21 23:02
→ VictorTom:說Pass by Value還是Pass by Reference....Orz 06/21 23:03
→ cole945:不然,就如前面zlw也提到的,ref其實也是用addr在實作呀._.a 06/21 23:03
→ cole945:call-by和pass-by是不同的東西嗎 囧a 是我弄混嗎囧? 06/21 23:04
→ VictorTom:一樣的啦, 只是推文的時候看到您引文的"pass...." 06/21 23:04
→ VictorTom:不小心打開了; 其實也有人說用pass by會比call by更清楚 06/21 23:05
推 VictorTom:傳pointer*算CbR!? 這個說法還真是第一次聽過Orz 06/21 23:09
→ cole945:其實那本concepts of programming language中CbR的範例 06/21 23:10
→ VictorTom:您這樣的說法等於認為C語言是有Call by Reference的~_~ 06/21 23:11
→ cole945:就是用void fun(int *first, int *second)舉例@.@ 06/21 23:11
→ cole945:我說有CbR的CbR不是C++的R,而是用參數的傳法來看,是有@.@" 06/21 23:12
→ stonehomelaa:你第一行是不是打錯了? call-by-address?? 06/21 23:12
推 VictorTom:好吧, 小弟得承認無論PL或C/C++prime這一類的書都讀的不 06/21 23:14
→ VictorTom:怎樣, 看來小弟的觀念也還需要再學習一下....<(_ _)> 06/21 23:16
→ cole945:樓上有推薦單講程語,除了我提到的concepts的那本外書嗎._. 06/21 23:16
推 VictorTom:其實我也不記得以前老師用哪本書了Orz 06/21 23:19
→ VictorTom:C/C++的經典書大家推很多, 不知道PL的書有沒有@_@" 06/21 23:19
→ cole945:我剛發現 PLT 版 "請問call by address" 有 "C只有call-by 06/21 23:54
→ cole945:value"的說明 @o@" 06/21 23:54
推 VictorTom:是啊, 傳l-Value還是傳r-Value的記憶又回來了....:) 06/22 00:23
推 UNARYvvv:其實我看 VictorTom 的推文覺得沒有不妥@@ 06/22 16:47
→ UNARYvvv:C 那種透過傳遞指標讓函式內部能改到外界參數充其量是在 06/22 16:48
→ UNARYvvv:模擬 call by ref, 但在 C 語言的層次上那個指標變數就是 06/22 16:49
→ UNARYvvv:某個位址 value 而已, C++ 的話才在語言本身支援 byRef 06/22 16:51
推 zlw:Sebesta那本書說的pass by ref有說,不會有額外的空間來存放 06/22 16:55
→ zlw:我想他的意思是,記憶體放到eax去,沒有push。而這by name原本 06/22 16:56
→ zlw:是講用額外空間存放內容,但C有指標,內容是一個記憶體位址。 06/22 16:56
→ zlw:這使傳指標既像by name又像by ref,感覺就是兩者本來就非空集 06/22 16:57
→ UNARYvvv:by name 還是 by value ?? 06/22 17:04
推 zlw:抱歉,我打錯 06/22 17:05