C++配列を関数に渡す完全ガイド:1次元・多次元配列の実例付き
C++ で配列を関数に渡す方法
このガイドでは、C++で1次元および多次元配列を関数に渡す方法を、実コード例で解説します。
C++では配列を関数引数として渡せ、ポインタを介して間接的に返すこともできます。配列がポインタに退化する仕組みと、メモリ・パフォーマンスへの影響を理解することは、効率的なコードを書く上で不可欠です。
配列を関数パラメータとして渡す構文
配列を受け取る関数の宣言はこうなります:
returnType functionName(dataType arrayName[arraySize]) {
// 関数本体
}
例:
int total(int marks[5]) {
// 実装
}
ここでは marks は5要素の int 配列です。関数呼び出し時、配列名(先頭要素へのポインタ)のみが渡されます。
実例 1: 1次元配列を関数に渡す
#include <iostream>
using namespace std;
// 点数を表示する関数を宣言
void display(int m[5]) {
cout << "Displaying marks:" << endl;
for (int i = 0; i < 5; ++i) {
cout << "Student " << i + 1 << ": " << m[i] << endl;
}
}
int main() {
int marks[5] = {88, 76, 90, 61, 69};
display(marks); // 配列名で渡す
return 0;
}
出力
Displaying marks: Student 1: 88 Student 2: 76 Student 3: 90 Student 4: 61 Student 5: 69
重要ポイント:
display(marks);でmarks[0]のアドレスが渡される- 関数内では
int m[5]はint* m;として扱われ、同じメモリを指す m[i]を変更すると元のmarks配列も変わる——参照渡しのセマンティクスを示す
多次元配列を関数に渡す
2次元配列の場合、コンパイラが要素オフセットを計算できるよう、2番目の次元のサイズ(列数)を指定する必要があります。
実例 2: 2次元配列を関数に渡す
#include <iostream>
using namespace std;
void display(int n[][2]) {
cout << "Displaying values:" << endl;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 2; ++j) {
cout << "num[" << i << "][" << j << "]: " << n[i][j] << endl;
}
}
}
int main() {
int num[3][2] = {{3, 4}, {9, 5}, {7, 1}};
display(num);
return 0;
}
出力
Displaying values: num[0][0]: 3 num[0][1]: 4 num[1][0]: 9 num[1][1]: 5 num[2][0]: 7 num[2][1]: 1
注意点:
- 行数(3)は省略可能。配列定義から推測できるため
- 列サイズ(
[][2])の指定は必須。正しいポインタ演算のため
より高次元の配列も同じルールに従います:最初の次元以外のすべてのサイズを指定する必要があります。
関数から配列を返す
関数から配列全体を直接返すことはできません。代わりに、最初の要素へのポインタを返します。これは静的に割り当てられた配列、動的配列、または一時オブジェクトを参照する可能性があります。ローカル(スタック)配列へのポインタを返すとダングリング参照になるため、注意が必要です。
例(静的配列):
int* getArray() {
static int arr[5] = {1, 2, 3, 4, 5};
return arr; // 先頭要素へのポインタ
}
動的割り当ての場合、安全性と自動メモリ管理のため std::vector<T> の返却を検討してください。
本番コードでの安全な配列扱いについては、さらなる学習を推奨します。
C言語
- C# ジャグ配列をマスターする:宣言、初期化、アクセス
- C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
- C++フレンド関数とフレンドクラス:アクセス制御のマスター
- C言語演算子完全ガイド:算術・関係・論理・ビット演算子
- C++配列を徹底解説:宣言、初期化、ポインタ活用テクニック
- C++動的配列の確保をマスター:コード例付き実践ガイド
- C++演算子オーバーロード:コード例付き実践ガイド
- C++関数を実例で徹底解説:基本から応用まで
- Cプログラミング入門:初心者向け包括チュートリアル
- C++オーバーロード完全マスター:関数と演算子のオーバーロード
- C++ポリモーフィズム完全理解:仮想関数と純粋仮想関数