副プログラムの驚き

 投稿者:nagram  投稿日:2013年12月12日(木)22時02分56秒
  十進BASICでは、副プログラムの実引数に変数を指定すると参照渡しとなり、副プログラム内で仮引数の値が変わると実引数の値も変わります。次のプログラムの出力結果を予想してみて下さい。6でしょうか、4でしょうか。

10 LET a=3
20 CALL example(a,a)
30 PRINT a
40 SUB example(p,q)
50    LET p=p+q
60    LET q=q+1
70 END SUB
80 END

どうでしょうか、この結果を予想できましたか? 50行で、p+qの計算結果が変数qにも代入されているのです。「副プログラムを呼び出すとき複数の実引数に同じ変数を指定すると、それに対応する仮引数は同一の変数としてふるまう」ということです。ヘルプの「変数引数」の項目を読むと「副プログラムの実引数に変数を書いたとき,仮引数は実引数と同じ記憶場所を指す」とあるので納得しますが、直感的には戸惑う結果です。
 

Re: 副プログラムの驚き

 投稿者:山中和義  投稿日:2013年12月13日(金)16時44分43秒
  > No.3217[元記事へ]

nagramさんへのお返事です。

> 仮引数と実引数

10 LET a=3
20 CALL example(a,a)

この20行目を実行することは、
SUB~END SUBの変数p,qをそれぞれ文字a,aに置き換えることに相当します。
すなわち、
40 SUB example(a,a)
50    LET a=a+a !2a→a
60    LET a=a+1 !2a+1→a
70 END SUB

よって、結果は2a+1=2*3+1=7になります。

 

戻る