C 配列を関数に渡す
関数に一次元配列を引数として渡したい場合、関数の仮引数を次の3つの方法のいずれかで宣言する必要があります。これらの3つの宣言方法の結果は同じです。それぞれの方法がコンパイラに整数ポインタを受け取ることを伝えるからです。同様に、多次元配列を仮引数として渡すこともできます。
方法1
仮引数はポインタです(ポインタについては次の章で学ぶことができます):
void myFunction(int *param)
{
.
.
.
}
方法2
仮引数はサイズが定義された配列です:
void myFunction(int param[10])
{
.
.
.
}
方法3
仮引数はサイズが未定義の配列です:
void myFunction(int param[])
{
.
.
.
}
例
では、配列を引数として受け取り、さらに別の引数も受け取り、その引数に基づいて配列の要素の平均値を返す次の関数を見てみましょう:
double getAverage(int arr[], int size)
{
int i;
double avg;
double sum;
for (i = 0; i < size; ++i)
{
sum += arr[i];
}
avg = sum / size;
return avg;
}
では、上記の関数を次のように呼び出してみましょう:
例
#include <stdio.h>
/*関数宣言*/
double getAverage(int arr[], int size);
int main ()
{
/*5つの要素を持つ整数配列*/
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
/*配列へのポインタを引数として渡す*/
avg = getAverage( balance, 5 ) ;
/*戻り値を出力*/
printf( "平均値は: %f", avg );
return 0;
}
double getAverage(int arr[], int size)
{
int i;
double avg;
double sum=0;
for (i = 0; i < size; ++i)
{
sum += arr[i];
}
avg = sum / size;
return avg;
}
上記のコードがコンパイルおよび実行されると、次の結果が生成されます:
平均值是: 214.400000
ご覧のとおり、関数にとって配列の長さは重要ではありません。Cは仮引数に対して境界チェックを実行しないからです。
その他の拡張
C 配列