作者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
→ ericinttu:認真回文給個推 59.117.186.181 04/01 22:57
推 supercygnus:thanks!!118.167.105.124 04/02 17:42
→ MOONRAKER:一樓口惠而實不至 59.115.203.121 04/02 20:09