請問call by value result

看板CSSE (電腦科學及軟體工程)作者 (阿湯)時間7年前 (2017/01/24 11:55), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/1
有一個題目如下: 採取pass by value result參數傳遞的方法,請回答下面程式執行的結果: int y=1,x=1; int fun(ant a,int b){b+=a; a=b+x; return a;} int main() { int x=2; y=fun(x,y)+y; printf("x=%d,y=%d",x,y); } 我的解題過程如下 實際參數 形式參數 global main fun x y x a b 1 1 2 數值:2 數值:1 運算式:b+=a ->b=3 運算式:a=b+x ->a=3+globalx ->a=3+1=4 (將a值繫結到main的x) (將b值繫結到 global的y) (回傳a值4) 3 4 運算式:y=fun(x,y)+y; ->y=4+3=7 因此我的答案是x=4,y=7;但解答是x=4,y=5 不知我的解題過程哪裡有錯呢? 麻煩各位大大,謝謝了..... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.232.225.26 ※ 文章網址: https://www.ptt.cc/bbs/CSSE/M.1485230145.A.A97.html

01/24 12:09, , 1F
這應該不是 call by value result 的問題
01/24 12:09, 1F

01/24 12:10, , 2F
而是 fun(x,y)+y 後面那個 y 的值何時取得的問題
01/24 12:10, 2F

01/24 12:10, , 3F
如果是呼叫完才取得值那是你的 y=7
01/24 12:10, 3F

01/24 12:10, , 4F
如果是呼叫前就取得值的話就是解答的 y=5
01/24 12:10, 4F

01/24 12:14, , 5F
因為標準 C/C++ 沒有這種呼叫法所以很難猜測出題者怎麼想
01/24 12:14, 5F

01/24 17:44, , 6F
fun(x,y){...return a}+y --> fun=a +y --> 4+1
01/24 17:44, 6F

04/03 23:21, , 7F
掛debugger印一下變數就知道了
04/03 23:21, 7F

04/12 18:46, , 8F
跑一次就知道結果:x=2, y=5
04/12 18:46, 8F
文章代碼(AID): #1OXj11gN (CSSE)
文章代碼(AID): #1OXj11gN (CSSE)