アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは

プログラムのなかで test2 (counter)かっこをつけて渡すと ByRef ByValの指定に関係なく
実行結果1が表示されます。かっこをつけないと下記のとおり(予想どおり)表示されます。

ByRef は参照渡しなので、Private Sub test2(ByRef counter)  counter = counter + 1
の結果が返されるのではないのかとおもうんですが、test2 (counter)とすると実行結果が1
となります。

上記の違いについて教えてください。
①参照渡し ByRef  実行結果 2

Private Sub test1()
Dim counter As Integer
counter = 1
test2 counter
MsgBox counter
End Sub
Private Sub test2(ByRef counter)
counter = counter + 1
End Sub
②値渡し ByVal  実行結果 1
Private Sub test3()
Dim counter As Integer
counter = 1
test4 counter
MsgBox counter
End Sub
Private Sub test4(ByVal counter)
counter = counter + 1
End Sub

A 回答 (1件)

> test2 (counter)とすると実行結果が1となります。



Subプロシージャで引数を渡すときは
 test2 counter
 Call test2(counter)
の何れかを記述します。

ご質問の様に
 test2 (counter) 左括弧の前にスペースが入る
と書くと
変数counterの値を渡すのではなく、counterの値を評価した1という値を渡すという意味(※1)になります。これによりtest2の定義でByRefが書かれていたとしても強制的に値渡しになってしまいます。

※1
例えば引数として、call test2(counter+1)としたとすると、counterの値が1の場合は計算結果の2が値渡しでtest2に渡されますよね? これの"+1"なし版とお考え下さい。


このように思わぬバグ発生の可能性がありますので記述としては
 Call test2(counter)
という書きかたをお勧めします。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
一点おしえてください。
>変数counterの値を渡すのではなく、counterの値を評価した1という値を渡すという意味(※1)になります。
【質問】
変数Counterの値とcounterの値を評価した1というのはちがういみなのでしょうか?
よろしくおねがいいたします。

お礼日時:2018/08/27 08:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!