C++ 配列を関数に渡す
C++では、インデックスを付けない配列名を指定することで、配列を指すポインタを渡すことができます。
C++で配列を関数に渡すと、配列型は自動的にポインタ型に変換されるため、実際に渡されるのはアドレスです。
関数に一次元配列をパラメータとして渡したい場合、関数の仮パラメータを以下の3つの方法のいずれかで宣言する必要があります。これら3つの宣言方法の結果は同じです。どの方法でも、コンパイラに整数型ポインタを受け取ることを伝えるからです。同様に、多次元配列を仮パラメータとして渡すこともできます。
方法 1
仮パラメータはポインタです:
void myFunction(int *param)
{
.
.
.
}
方法 2
仮パラメータはサイズが定義された配列です:
void myFunction(int param[10])
{
.
.
.
}
方法 3
仮パラメータはサイズが未定義の配列です:
void myFunction(int param[])
{
.
.
.
}
例
では、次の関数を見てみましょう。この関数は配列をパラメータとして受け取り、もう1つのパラメータも渡されます。渡されたパラメータに基づいて、配列内の各要素の平均値を返します:
double getAverage(int arr[], int size)
{
int i, sum = 0;
double avg;
for (i = 0; i < size; ++i)
{
sum += arr[i];
}
avg = double(sum) / size;
return avg;
}
では、上記の関数を次のように呼び出してみましょう:
例
#include <iostream>
using namespace std;
// 関数宣言
double getAverage(int arr[], int size);
int main ()
{
// 5つの要素を持つ整数型配列
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
// 配列を指すポインタをパラメータとして渡す
avg = getAverage( balance, 5 ) ;
// 戻り値を出力
cout << "平均値は:" << avg << endl;
return 0;
}
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
平均值是: 214.4
ご覧のとおり、関数にとって配列の長さは重要ではありません。C++は仮パラメータに対して境界チェックを行わないからです。
その他の拡張
C++ 配列