作者cat99961 (阿汤)
看板CSSE
标题请问call by value result
时间Tue Jan 24 11:55:42 2017
有一个题目如下:
采取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://webptt.com/cn.aspx?n=bbs/CSSE/M.1485230145.A.A97.html
1F:推 LPH66: 这应该不是 call by value result 的问题 01/24 12:09
2F:→ LPH66: 而是 fun(x,y)+y 後面那个 y 的值何时取得的问题 01/24 12:10
3F:→ LPH66: 如果是呼叫完才取得值那是你的 y=7 01/24 12:10
4F:→ LPH66: 如果是呼叫前就取得值的话就是解答的 y=5 01/24 12:10
5F:→ LPH66: 因为标准 C/C++ 没有这种呼叫法所以很难猜测出题者怎麽想 01/24 12:14
6F:→ ggg12345: fun(x,y){...return a}+y --> fun=a +y --> 4+1 01/24 17:44
7F:推 jerry771210: 挂debugger印一下变数就知道了 04/03 23:21
8F:推 pakls: 跑一次就知道结果:x=2, y=5 04/12 18:46