C++で配列を関数に渡す方法を徹底解説!3つの宣言方法と実例コード
C++では、配列全体をそのまま引数として関数に渡すことはできません。しかし、インデックスを付けずに配列名を指定することで、配列へのポインタを関数に渡すことが可能です。
1次元配列を関数の引数として渡したい場合、仮引数(フォームパラメータ)は以下の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, sum = 0;
double avg;
for (i = 0; i < size; ++i) {
sum += arr[i];
}
avg = double(sum) / size;
return avg;
}関数の呼び出し方
上記の関数を、main関数から次のように呼び出します。
#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 << "Average value is: " << avg << endl;
return 0;
}このコードをコンパイルして実行すると、次のような結果が出力されます。
Average value is: 214.4
注意点:配列の長さは関数側では分からない
ご覧のとおり、関数側から見ると配列の長さはまったく問題になりません。これは、C++が仮引数に対して境界チェック(範囲外アクセスの検査)を行わないためです。
C++では配列を関数に渡す際、実際には配列の先頭要素へのポインタが渡されるだけです。そのため、関数内で配列のサイズが必要な場合は、この例のようにサイズを別の引数として一緒に渡すのが一般的な作法となります。サイズ情報を渡し忘れると、範囲外のメモリにアクセスしてしまう危険があるため、注意しましょう。
-
C/C++の多次元配列とは?基本概念から動的メモリ確保まで徹底解説
C/C++における多次元配列とは、簡単に言えば「配列の配列」として定義されるデータ構造です。多次元配列では、データが表形式(行優先順/row-major order)でメモリ上に格納されます。 以下の図は、3×3×3の次元を持つ多次元配列のメモリ割り当て戦略を示したものです。 アルゴリズム 2次元配列を動的に確保し、操作するための基本的な手順は以下の通りです。 Begin 配列の次元を宣言する new演算子を使用して2次元配列 a[][] を動的に確保する 配列に要素を格納する 配列の内容を出力する deleteによってメモリを解放する End サン
-
C++で配列を使う方法!宣言から要素へのアクセスまで徹底解説
配列(Array)とは、同じ型の要素が連続したメモリ領域上に並んでいるデータ構造で、一意の識別子(変数名)にインデックスを組み合わせることで、個々の要素に個別にアクセスできます。C++で配列を使用するには、まず配列を宣言する必要があります。 int arr[10]; このコードは、int型の要素を10個格納できる配列を宣言しています。これにより、連続したメモリ領域に10個の整数を保存することが可能になります。 配列の要素へアクセスする方法 配列の特定の要素を参照するには、配列アクセス演算子「[]」を使い、アクセスしたい要素のインデックスを指定します。ここで重要なのは、C++の配列のインデックス