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

看板C_and_CPP作者 (brotherD)時間7年前 (2018/03/01 11:58), 7年前編輯推噓4(4042)
留言46則, 7人參與, 7年前最新討論串1/1
圖片: 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); 請問各位大大你們的理解是怎麼樣呢?? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1519876725.A.882.html

03/01 12:00, 7年前 , 1F
兩個不能同時被更改?
03/01 12:00, 1F

03/01 12:21, 7年前 , 2F
這句話要配例子看才有意思
03/01 12:21, 2F

03/01 12:22, 7年前 , 3F
假設你有兩個 變數 a,b 你想call一個 function 來改 a
03/01 12:22, 3F

03/01 12:22, 7年前 , 4F
b的話 用 clla by reference可以直接在 function 裡
03/01 12:22, 4F

03/01 12:22, 7年前 , 5F
面改他們的值
03/01 12:22, 5F

03/01 12:23, 7年前 , 6F
但是你要是想用回傳值改的話 因為只回傳一個 int 你只
03/01 12:23, 6F

03/01 12:23, 7年前 , 7F
能改一個值
03/01 12:23, 7F
喔喔~我聽懂了 反正作者只是想表達用by value只能改a b其中一個,比如 a = func(a, b); 用by refernece則可以改一個以上

03/01 13:04, 7年前 , 8F
怎麼感覺你一直在計較些小地方啊
03/01 13:04, 8F
聽大家說這本書是聖經,所以我想要了解作者想表達的意思@@ ※ 編輯: zzss2003 (60.248.26.157), 03/01/2018 13:15:26

03/01 13:37, 7年前 , 9F
聖經就是大家都會說要看 但是通常不看 最好不用自己看
03/01 13:37, 9F

03/01 13:37, 7年前 , 10F
再說一次你這樣讀書效率只會差不會好
03/01 13:37, 10F

03/01 13:38, 7年前 , 11F
依照早期經驗 效果也很可疑
03/01 13:38, 11F
那M大您有什麼建議嗎~ ※ 編輯: zzss2003 (60.248.26.157), 03/01/2018 13:48:02

03/01 16:33, 7年前 , 12F
上面的解讀我看起來不太正確...
03/01 16:33, 12F

03/01 16:34, 7年前 , 13F
我的解讀:即使C function是call-by-value(copy),某些情形
03/01 16:34, 13F

03/01 16:35, 7年前 , 14F
依舊不適合在called function中更改argument值,作者舉例
03/01 16:35, 14F

03/01 16:36, 7年前 , 15F
array的ptr及size就屬於這類型argument
03/01 16:36, 15F

03/01 16:39, 7年前 , 16F
不好意思沒看清楚原PO問的是7.2
03/01 16:39, 16F

03/01 16:40, 7年前 , 17F
7.2我的解讀是作者想說的只是call-by-value的argument僅僅
03/01 16:40, 17F

03/01 16:41, 7年前 , 18F
能在作為function return value的接收端被更改 (個人感覺
03/01 16:41, 18F

03/01 16:43, 7年前 , 19F
這樣的說法不能說是錯,但有點沒必要,任何變數都能做為=的
03/01 16:43, 19F

03/01 16:43, 7年前 , 20F
lhs而被更改,不是嗎)
03/01 16:43, 20F

03/02 00:35, 7年前 , 21F
太鑽牛角尖的念書方法了。單從這段話來說他只是再說
03/02 00:35, 21F

03/02 00:35, 7年前 , 22F
個例子然後帶出 7.3 而已。
03/02 00:35, 22F

03/02 00:36, 7年前 , 23F
如果想把 array 內的值打印出來,那怎麼會有人去改
03/02 00:36, 23F

03/02 00:36, 7年前 , 24F
caller 傳給你的資訊? 起點和多少個元素都是 caller
03/02 00:36, 24F

03/02 00:37, 7年前 , 25F
跟你說的。
03/02 00:37, 25F

03/02 00:38, 7年前 , 26F
pass-by-value 的 signature 你宣告成 const 意義不
03/02 00:38, 26F

03/02 00:39, 7年前 , 27F
大,我就複製一份給你這個函數去玩,你想怎麼改就怎
03/02 00:39, 27F

03/02 00:39, 7年前 , 28F
麼改,只要想想你這個函數要幹嘛就好了。
03/02 00:39, 28F

03/02 00:41, 7年前 , 29F
話說回來就是 7.3 是說把某些不該被改到的東西定成
03/02 00:41, 29F

03/02 00:42, 7年前 , 30F
const 然後 compiler 就能幫你檢查是不是手殘或眼拙
03/02 00:42, 30F

03/02 00:42, 7年前 , 31F
而不小心改到一些不該改的值。
03/02 00:42, 31F

03/02 00:46, 7年前 , 32F
小結:黃色框起來的字我認為只是為了帶出 7.3,但是
03/02 00:46, 32F

03/02 00:49, 7年前 , 33F
函數 pass-by-value parameter 的通常不需要帶 const
03/02 00:49, 33F

03/02 00:50, 7年前 , 34F
pass-by-reference 則要看情況。
03/02 00:50, 34F

03/02 00:51, 7年前 , 35F
(小結後面的但是好像應該擺到上面...和書的字面內容
03/02 00:51, 35F

03/02 00:51, 7年前 , 36F
無關,純屬個人看法)。
03/02 00:51, 36F

03/02 01:28, 7年前 , 37F
原 po哪裡寫了 const 嗎 怎麼沒看到
03/02 01:28, 37F

03/02 02:51, 7年前 , 38F
理解成這樣就好了:一般情況下function 只能return
03/02 02:51, 38F

03/02 02:51, 7年前 , 39F
單一數值,所以caller 只能用單一變數接收,意味一
03/02 02:51, 39F

03/02 02:51, 7年前 , 40F
次function call 只能影響到一個變數。要一次影響多
03/02 02:51, 40F

03/02 02:51, 7年前 , 41F
個變數就請用pass by ref
03/02 02:51, 41F

03/02 18:37, 7年前 , 42F
回網友 steve1012:圖片7.3有類似的含義,只是順著原
03/02 18:37, 42F

03/02 18:37, 7年前 , 43F
po的例子探討1. pass by value 的argument 要不要加
03/02 18:37, 43F

03/02 18:39, 7年前 , 44F
const 2. pass by value 因為是 copy 所以函數要怎麼
03/02 18:39, 44F

03/02 18:39, 7年前 , 45F
改就怎麼改,我認為不用加const。都是7.3延伸。原po
03/02 18:39, 45F

03/02 18:39, 7年前 , 46F
用黃色框起來的字只是連結7.3的轉折語而已。
03/02 18:39, 46F
文章代碼(AID): #1QbtfrY2 (C_and_CPP)