1-14-3. 関数への配列渡し

公開日: 18:46 1. 基本編/1-14. 配列/1-14-3. 関数への配列渡し


C++では関数への引数として配列全体を渡す機能がありません。しかしながら、要素無しで配列名を指定することで配列へのポインタを渡すことができます。

関数の引数として一次元配列を渡したい場合、次のいずれかの方法で関数に仮引数を宣言する必要があり、これら3つの方法はそれぞれint型のポインタが渡されるとコンパイラに伝えるので似た結果を生みます。

手段1

ポインタとしての仮引数
void myFunction(int *param)
{
.
.
.
}

手段2

サイズ固定の配列としての仮引数
void myFunction(int param[10])
{
.
.
.
}

手段3

サイズ不明の配列としての仮引数
void myFunction(int param[])
{
.
.
.
}

次の関数を考えてみましょう。他の引数と一緒に配列を取り、渡された引数に基づいて配列の平均値を返します。
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配列
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;

   // 引数として配列へのポインタを渡す
   avg = getAverage( balance, 5 ) ;
 
   // 戻り値を出力
   cout << "平均値: " << avg << endl; 
    
   return 0;
}

上のコードを1つのファイルにまとめコンパイル・実行すると次の結果が得られます。
平均値: 214.4

ご覧のとおり、C++は仮引数の境界チェックをしないため、関数に限って言えば配列の長さを懸念する 必要はありません。
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿