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

配列は添え字付き変数でした。
     int[] a = new int[n];
と宣言すると、n 個の変数が用意されるのでした。
具体的には、
a[0],a[1],a[2],・・・,a[n-1]
です。最後がnではなくn-1なのでしたね。
n を配列の要素数といいます。
     int[] a = new int[1];
と宣言すれば、要素数1の配列ですから、実質『変数を宣言した=箱を用意した』のと同じです。

ところで、箱そのものは渡せないのに、
箱の中身を変えてもらう魔法にような方法があるのでしょうか。
それがあるんです。
実際にやってみましょう。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace メソッドに配列を渡す
{
  class Program
  {
    static void Main[string[] args]
    {
      int[] a = new int[1];
      a[0] = 3;
      Console.WriteLine["a[0]={0:d} ", a[0]];
      f[a];
      Console.WriteLine["a[0]={0:d} ", a[0]];
    }
    static void f[int[] a]
    {
      a[0] = 5;
    }
  }
}


実行画面
a[0]=3
a[0]=5


『なんだ!?結局
    f [a]
で箱を渡しているではないか?』
と思いになるかもしれませんが、
第5講第8話のコードを少し変えて、
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace メソッドに配列を渡す
{
  class Program
  {
    static void Main(string[] args)
    {
      int a ;
      a = 3;
      Console.WriteLine("a={0:d} ", a);
      f(a);
      Console.WriteLine("a={0:d} ", a);
    }
    static void f(int a)
    {
      a = 5;
    }
  }
}

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

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

2つのコードの主要部分を並べてみると、
    
static void Main[string[] args]
    {
      int[] a = new int[1];
      a[0] = 3;
      Console.WriteLine["a[0]={0:d} ", a[0]];
      f[a];
      Console.WriteLine["a[0]={0:d} ", a[0]];
    }
    static void f[int[] a]
    {
      a[0] = 5;
    }


    static void Main(string[] args)
    {
      int a ;
      a = 3;
      Console.WriteLine("a={0:d} ", a);
      f(a);
      Console.WriteLine("a={0:d} ", a);
    }
    static void f(int a)
    {
      a = 5;
    }

と大変そっくりですが、結果は異なっています。
下のコードが箱そのもの=変数そのものを渡すことが出来ないことを示しています。
上のコードでも決して箱そのものは渡していません。
でも、
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 入門 サイト 基礎から応用まで
本サイトトップへ