1. ホーム
  2. c++

[解決済み] C++で配列の関数への渡し方

2023-07-16 12:40:41

質問

#include <iostream>
using namespace std;

void printarray (int arg[], int length) {
    for (int n = 0; n < length; n++) {
        cout << arg[n] << " ";
        cout << "\n";
    }
}

int main ()
{
     int firstarray[] = {5, 10, 15};
     int secondarray[] = {2, 4, 6, 8, 10};
     printarray(firstarray, 3);
     printarray(secondarray, 5);

     return 0;
}

このコードは動作しますが、どのように配列が渡されているのかを理解したいです。

への呼び出しが行われたとき printarray 関数を呼び出すと、配列の名前が渡されます。配列の名前は、配列の最初の要素のアドレスを参照しています。これはどのように等しいかというと int arg[] ?

どのように解決するのですか?

構文

int[]

int[X] // Where X is a compile-time positive integer

とは全く同じです。

int*

関数のパラメータリストのとき(オプションの名前は省きました)。

さらに、配列名は関数に渡されると (参照渡しでなく) 最初の要素へのポインタに分解されるので、両方とも int firstarray[3]int secondarray[5] に減衰します。 int* s.

また、配列の参照と、添え字構文によるポインタの参照の両方が起こる(添え字構文が x[y] である)、同じインデックスを使用した場合、同じ要素へのl値を得ることができます。

これらの3つのルールの組み合わせにより、このコードは合法であり、期待通りに動作します。これは、配列がポインタに崩壊した後に知ることができない配列の長さと共に、ポインタを関数に渡すだけです。