[問題] 不確定教科書上的內文是否被解讀正確

作者: zzss2003 (brotherD)   2018-03-01 11:58:42
圖片: https://imgur.com/a/gyTea
在Software Engineering Observation 7.2
我的解讀是,如果一個calling function有兩個argument a,b:
result = func(a,b);
那麼如果這個function的prototype是這樣
int func(int a, int b);
那在implementation的部分,就只允許a或b的值被更改(兩個不能同時被更改),而且被更
改的那個值一定要被return回去(我覺得我這句解讀錯誤)
如果要同時更改a與b,必須把prototype改成這樣
int func(int *a, int *b);
請問各位大大你們的理解是怎麼樣呢?? 謝謝
作者: Hazukashiine (私は幸せです)   2018-03-01 12:00:00
兩個不能同時被更改?
作者: steve1012 (steve)   2018-03-01 12:21:00
這句話要配例子看才有意思假設你有兩個 變數 a,b 你想call一個 function 來改 ab的話 用 clla by reference可以直接在 function 裡面改他們的值但是你要是想用回傳值改的話 因為只回傳一個 int 你只能改一個值
作者: Lipraxde (Lipraxde)   2018-03-01 13:04:00
怎麼感覺你一直在計較些小地方啊
作者: MOONRAKER (㊣牛鶴鰻毛人)   2018-03-01 13:37:00
聖經就是大家都會說要看 但是通常不看 最好不用自己看再說一次你這樣讀書效率只會差不會好依照早期經驗 效果也很可疑
作者: rodion (r-kan/reminder)   2018-03-01 16:33:00
上面的解讀我看起來不太正確...我的解讀:即使C function是call-by-value(copy),某些情形依舊不適合在called function中更改argument值,作者舉例array的ptr及size就屬於這類型argument不好意思沒看清楚原PO問的是7.27.2我的解讀是作者想說的只是call-by-value的argument僅僅能在作為function return value的接收端被更改 (個人感覺這樣的說法不能說是錯,但有點沒必要,任何變數都能做為=的lhs而被更改,不是嗎)
作者: phishingphi (hsnutontu)   2018-03-02 00:35:00
太鑽牛角尖的念書方法了。單從這段話來說他只是再說個例子然後帶出 7.3 而已。如果想把 array 內的值打印出來,那怎麼會有人去改caller 傳給你的資訊? 起點和多少個元素都是 caller跟你說的。pass-by-value 的 signature 你宣告成 const 意義不大,我就複製一份給你這個函數去玩,你想怎麼改就怎麼改,只要想想你這個函數要幹嘛就好了。話說回來就是 7.3 是說把某些不該被改到的東西定成const 然後 compiler 就能幫你檢查是不是手殘或眼拙而不小心改到一些不該改的值。小結:黃色框起來的字我認為只是為了帶出 7.3,但是函數 pass-by-value parameter 的通常不需要帶 constpass-by-reference 則要看情況。(小結後面的但是好像應該擺到上面...和書的字面內容無關,純屬個人看法)。
作者: steve1012 (steve)   2018-03-02 01:28:00
原 po哪裡寫了 const 嗎 怎麼沒看到
作者: adrianshum (Alien)   2018-03-02 02:51:00
理解成這樣就好了:一般情況下function 只能return單一數值,所以caller 只能用單一變數接收,意味一次function call 只能影響到一個變數。要一次影響多個變數就請用pass by ref
作者: phishingphi (hsnutontu)   2018-03-02 18:37:00
回網友 steve1012:圖片7.3有類似的含義,只是順著原po的例子探討1. pass by value 的argument 要不要加const 2. pass by value 因為是 copy 所以函數要怎麼改就怎麼改,我認為不用加const。都是7.3延伸。原po用黃色框起來的字只是連結7.3的轉折語而已。

Links booklink

Contact Us: admin [ a t ] ucptt.com