[C#] C言語との違い (関数の引数)

関数引数の渡し方
基本はcall by valueでこれはC言語と同じ。ただし、値渡しのためのコピーの効果はvalue typeとreference typeで違いはある。
call by referenceは2種類の

  • 呼び出し元が出力を受け取るもの(呼び側で初期化していなくてよい)
  • 呼び出し先が値を参照して変更する(呼び側で初期化が必要)

に分けられる。これを実現するには引数の型の前や変数の前にout(出力を受け取る)やref(参照と変更)を付ける。

static void Add(int x, int y, out int ans)
{
     ans = x + y;
}

このときは

int res;
Add(1, 2, out res);

のように使う。呼び出し元にもoutと書く。outを使うときは初期化せずに呼んでもよい。呼ばれた側がoutを付けていないとコンパイルエラーとなる。
refの場合は、相手が値を参照するので値を入れておく必要がある。
言語仕様上はoutやrefはmodifierという位置づけ。

広告
%d人のブロガーが「いいね」をつけました。