1.3 関数へのデータ引き渡し

  3.call by reference(参照データ渡しによる呼び出し)
 配列のポインタ参照としてデータを渡し、関数内での操作はその実体として取り扱う方法です。

 C言語においては、関数の引数の受け渡しは値による呼び出し(call by value)で行われます。そのため関数内で実引数として与えた変数の値を、実体として直接変更することはできません。

 他方、引数が配列の場合、参照による呼び出し(call by reference)となります。下記の例のように、array として与えた引数の値は、配列 array の最初の要素 arrary[0] のポインタ(番地)となり、その番地が(つまり実体として)受け継がれることになります。よって、関数内で値を変更した場合、直接、その配列要素の値が変更されるので、呼び出した側の値にも影響を与えることになります。


void function(int array[ ]);

int main(void)
{
   int array[10];
   ・・・・
  function(array);  /* 配列データを受け渡す */
}

void function(int array[ ])
{
   ・・・・
}

 上の例のように、プログラム内ですでに宣言されている配列を別の関数に渡す場合は、その配列の大きさをあらためて宣言する必要はありません。ただし、省略できるのは配列の第1要素数だけです。

 この仕様により、2次元配列(の全体)を関数の引数として渡す場合には、2番目の要素の添え字を、必ず指定する必要があり、コーディングは厄介なものになります。


void function(int array[ ][5]);

int main(void)
{
  int array[2][5];
   ・・・・
  function(array);
}

void function(int array[ ][5])
{
   ・・・・
}