[问题] 不确定教科书上的内文是否被解读正确

楼主: 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