第8講 プロシージャ(2)
第1話 VBの魔法!
VBでは変数そのものすなわち箱そのものは渡すことが出来ません。
プロシージャ内で宣言した変数のスコープ(適用範囲)はプロシージャ内に限定されているからです。
引数で渡していたのは、箱そのものではなくあくまで箱の中身である値です。
ですが、仕事を依頼したプロシージャに、
箱の中身を変更してもらいたいときがあります。
箱を渡していないのに、
箱の中身を変えるなんてこと出来るのでしょうか。

配列は添え字付き変数でした。
    Dim a(n) As Integer
と宣言すると、n + 1 個の変数が用意されるのでした。
添え字は0から始まるので、nより1つ多くなるのでした。
n + 1 を配列の要素数といいます。
    Dim a(0) As Integer
と宣言すれば、要素数1の配列ですから、実質『変数を宣言した=箱を用意した』のと同じです。

ところで、箱そのものは渡せないのに、
箱の中身を変えてもらう魔法にような方法があるのでしょうか。
それがあるんです。
実際にやってみましょう。
Module Module1

  Sub Main() '私は社長だ。
    Dim a(0) As Integer '配列を宣言したが箱が1個しか用意されていないので変数を宣言したのと同じ
    a(0) = 3
    Console.WriteLine("a(0)={0:d}", a(0))
    f (a)
    Console.WriteLine("a(0)={0:d}", a(0))
  End Sub

  Sub f(x() As Integer)
    x(0) = 5
  End Sub

End Module

実行画面
a(0)=3
a(0)=5


『なんだ!?結局
    f (a)
で箱を渡しているではないか?』
と思いになるかもしれませんが、
第5講第8話のコードを少し変えて、
Module Module1

  Sub Main() '私は社長だ。
    Dim a As Integer '変数aの宣言
    a = 3
    Console.WriteLine("a = {0:d}", a)
    f(a)
    Console.WriteLine("a = {0:d}", a)
  End Sub

  Sub f(x As Integer)
    x = 5
  End Sub

End Module
とすると実行結果は
a = 3
a = 3

です。
箱そのものは決して渡せないのです。

2つのコードの主要部分を並べてみると、
  
Sub Main() '私は社長だ。
    Dim a(0) As Integer '配列を宣言したが箱が1個しか用意されていないので変数を宣言したのと同じ
    a(0) = 3
    Console.WriteLine("a(0)={0:d}", a(0))
    f (a)
    Console.WriteLine("a(0)={0:d}", a(0))
  End Sub

  Sub f(x() As Integer)
    x(0) = 5
  End Sub


  
Sub Main() '私は社長だ。
    Dim a As Integer '変数aの宣言
    a = 3
    Console.WriteLine("a = {0:d}", a)
    f(a)
    Console.WriteLine("a = {0:d}", a)
  End Sub

  Sub f(x As Integer)
    x = 5
  End Sub

と大変そっくりですが、結果は異なっています。
下のコードが箱そのもの=変数そのものを渡すことが出来ないことを示しています。
上のコードでも決して箱そのものは渡していません。
でも、
a(0)=3
a(0)=5

です。

いったいどういうことなんでしょうか。


第7講第10話へ   第2話へ

002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ