作者arcred (坚持阿伏哥联盟)
站内Programming
标题Re: [请问] PASCAL程式语言参数传递问题
时间Fri Apr 1 22:53:55 2011
※ 引述《supercygnus (......)》之铭言:
: ※ [本文转录自 ask 看板 #1Db8QBRR ]
: 作者: supercygnus (......) 看板: ask
: 标题: [请问] PASCAL程式语言参数传递问题
: 时间: Thu Mar 31 21:50:00 2011
: 在下列片段虚拟码中,若参数传递使用(1) Call-by-Value,(2)Call-by-Address,
: 壜(3) Call-by-Name,计算执行後,x 与y 最後值分别为何?
: program main();
: int x, y;
: procedure SUB(int a, b, c, d);
: begin
: b:=a+d;
: a:=c;
: d:=d+1;
: return
: end;
: begin
: x:=1;
: y:=2;
: SUB(x, y, x+y, y);
: end
: (1) x=1,y=2
: (2) x=3,y=4
: (3) x=4,y=4
: 第一题我知道,但是第2跟第3题到底要怎麽看呢?
: SUB副程式里面return 到底在return 什麽呢~? 谢谢
这是void return 答案是看xy有没有被sub影响
(2) call-by-address代表用同记忆体空间,
而未定义输入则会新辟记忆体空间储存在此称为z
SUB(x,y,x+y,y)
^^^z:=x+y=3
-> b:=a+d // y:=1+2=3
-> a:=c // x:=z=3
-> d:=d+1 // y:=3+1=4
finally, x=3 and y=4
(3) call-by-name类似於call-by-address但可看成将运算式的输入直接在sub下展开
SUB(x,y,x+y,y)
-> b:=a+d // y:=1+2=3
-> a:=c // x:= x+y = 1+3=4
-> d:=d+1 // y:=3+1=4
finally, x=4 and y=4
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 68.98.169.112
1F:→ ericinttu:认真回文给个推 59.117.186.181 04/01 22:57
2F:推 supercygnus:thanks!!118.167.105.124 04/02 17:42
3F:→ MOONRAKER:一楼口惠而实不至 59.115.203.121 04/02 20:09