C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で2次元配列を関数に渡す3つの方法を解説

C++では、配列全体をそのまま関数の引数として渡すことはできません。しかし、配列名をインデックスなしで指定することで、配列へのポインタを引数として渡すことは可能です。

2次元配列を関数に渡す方法は、主に以下の3つがあります。

1. 2次元配列の列のサイズを指定する

最も一般的な方法です。関数の引数として、2次元配列の列数を明示的に指定して渡します。

void processArr(int a[][10]) {
    // 何らかの処理
}

2. ポインタを格納した配列を渡す

ポインタの配列を引数として渡す方法です。呼び出し側では、各行を動的に確保したポインタ配列を用意します。

void processArr(int *a[10]) {
    // 何らかの処理
}

// 呼び出し例
int *array[10];
for(int i = 0; i < 10; i++)
    array[i] = new int[10];
processArr(array);

3. ポインタへのポインタを渡す

ダブルポインタ(int **)を引数として渡す方法です。動的に2次元配列を生成する場合に便利です。

void processArr(int **a) {
    // 何らかの処理
}

// 呼び出し例
int **array;
array = new int *[10];
for(int i = 0; i < 10; i++)
    array[i] = new int[10];
processArr(array);

実行例

ここでは、1つ目の方法を使った具体的なサンプルコードを紹介します。

#include<iostream>
using namespace std;

void processArr(int a[][2]) {
    cout << "element at index 1,1 is " << a[1][1];
}
int main() {
    int arr[2][2];
    arr[0][0] = 0;
    arr[0][1] = 1;
    arr[1][0] = 2;
    arr[1][1] = 3;

    processArr(arr);
    return 0;
}

出力結果

このプログラムを実行すると、以下の出力が得られます。

element at index 1,1 is 3

このように、2次元配列を関数に渡す際は、列数を明示する方法が最もシンプルで安全です。一方、実行時にサイズを決定したい場合は、ポインタの配列やダブルポインタを使った動的確保の方法が適しています。用途に応じて適切な方法を選択しましょう。

  1. 【C++入門】関数から配列を返す方法|ポインタとstatic変数を使った実装テクニック

    C++では、配列全体をそのまま関数の戻り値として返すことはできません。しかし、配列へのポインタを返すことで、実質的に同じ目的を達成することが可能です。ここで注意すべき点が1つあります。関数内で宣言された通常のローカル変数(自動変数)は、関数の処理が終了すると同時にメモリから破棄されるため、そのアドレスを関数の外へ返しても正しく動作しません。この問題を解決するのがstatic変数です。ローカル変数を static として宣言すると、その変数はプログラムの実行中ずっとメモリ上に保持されるため、関数が終了した後もアドレスを安全に参照できるようになります。ポインタを返す関数の基本構文配列へのポインタを

  2. 【C++入門】配列を関数に渡す3つの方法をわかりやすく解説

    C++では、配列全体をそのまま関数の引数として渡すことはできません。しかし、インデックスを付けずに配列名を指定することで、配列へのポインタを渡すことができます。これは「配列名は先頭要素へのポインタに読み替えられる(配列の減衰)」というC++の仕組みによるものです。1次元配列を関数の引数として渡したい場合は、以下の3つのいずれかの方法で関数の仮引数を宣言します。どの方法でも、コンパイラに対して「整数型のポインタを受け取る」という情報が伝わるため、動作結果はすべて同じになります。配列を関数に渡す3つの宣言方法1. ポインタとして仮引数を宣言するvoid myFunction(int *param)