工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

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

重要ポイント:

  1. display(marks); で marks[0] のアドレスが渡される
  2. 関数内では int m[5] は int* m; として扱われ、同じメモリを指す
  3. 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

注意点:

より高次元の配列も同じルールに従います:最初の次元以外のすべてのサイズを指定する必要があります。


関数から配列を返す

関数から配列全体を直接返すことはできません。代わりに、最初の要素へのポインタを返します。これは静的に割り当てられた配列、動的配列、または一時オブジェクトを参照する可能性があります。ローカル(スタック)配列へのポインタを返すとダングリング参照になるため、注意が必要です。

例(静的配列):

int* getArray() {
    static int arr[5] = {1, 2, 3, 4, 5};
    return arr; // 先頭要素へのポインタ
}

動的割り当ての場合、安全性と自動メモリ管理のため std::vector<T> の返却を検討してください。

本番コードでの安全な配列扱いについては、さらなる学習を推奨します。

C言語

  1. C# ジャグ配列をマスターする:宣言、初期化、アクセス
  2. C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
  3. C++フレンド関数とフレンドクラス:アクセス制御のマスター
  4. C言語演算子完全ガイド:算術・関係・論理・ビット演算子
  5. C++配列を徹底解説:宣言、初期化、ポインタ活用テクニック
  6. C++動的配列の確保をマスター:コード例付き実践ガイド
  7. C++演算子オーバーロード:コード例付き実践ガイド
  8. C++関数を実例で徹底解説:基本から応用まで
  9. Cプログラミング入門:初心者向け包括チュートリアル
  10. C++オーバーロード完全マスター:関数と演算子のオーバーロード
  11. C++ポリモーフィズム完全理解:仮想関数と純粋仮想関数