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

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

C++では、配列全体をそのまま関数の引数として渡すことはできません。しかし、インデックスを付けずに配列名を指定することで、配列へのポインタを渡すことができます。これは「配列名は先頭要素へのポインタに読み替えられる(配列の減衰)」というC++の仕組みによるものです。

1次元配列を関数の引数として渡したい場合は、以下の3つのいずれかの方法で関数の仮引数を宣言します。どの方法でも、コンパイラに対して「整数型のポインタを受け取る」という情報が伝わるため、動作結果はすべて同じになります。

配列を関数に渡す3つの宣言方法

1. ポインタとして仮引数を宣言する

void myFunction(int *param) {
    // 何らかの処理
}

2. サイズ指定付きの配列として仮引数を宣言する

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

この場合も、実際にはサイズ10の配列がコピーされるわけではなく、単なるポインタとして扱われます。

3. サイズ指定なしの配列として仮引数を宣言する

void myFunction(int param[]) {
    // 何らかの処理
}

この書き方は最も一般的で、可読性の観点からもよく使われます。

使用例

実際に配列を関数へ渡して、最初の要素を出力するプログラムを見てみましょう。

#include<iostream>
using namespace std;

void arrayAccept(int arr[]) {
    cout << "first element is: " << arr[0];
}

int main() {
    int arr[2];
    arr[0] = 0;
    arr[1] = 1;
    arrayAccept(arr);  // 配列名をそのまま渡す
    return 0;
}

実行結果

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

first element is: 0

ポイントまとめ

  • C++では配列全体を値として関数に渡すことはできない
  • 配列名を引数に指定すると、自動的に先頭要素へのポインタとして渡される
  • 仮引数は「ポインタ」「サイズ指定あり配列」「サイズ指定なし配列」の3通りで宣言できる
  • いずれの書き方でも意味は同じで、受け取る側はポインタになる
  1. 【C++入門】関数から配列を返す方法|ポインタとstatic変数を使った実装テクニック

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

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

    C++では、配列全体をそのまま関数の引数として渡すことはできません。しかし、配列名をインデックスなしで指定することで、配列へのポインタを引数として渡すことは可能です。2次元配列を関数に渡す方法は、主に以下の3つがあります。1. 2次元配列の列のサイズを指定する最も一般的な方法です。関数の引数として、2次元配列の列数を明示的に指定して渡します。void processArr(int a[][10]) { // 何らかの処理 }2. ポインタを格納した配列を渡すポインタの配列を引数として渡す方法です。呼び出し側では、各行を動的に確保したポインタ配列を用意します。void processAr