実際には、最初の 2 つのアイデアはアドレスで配列を渡し、3 つ目は参照で配列を渡します。これを確認するための小さなテストを考案できます。
void test1(int* a) {
a[0] = 1;
}
void test2(int a[]) {
a[1] = 2;
}
void test3(int *&a) {
a[2] = 3;
}
int main() {
int *a = new int[3]();
a[0] = 0;
a[1] = 0;
a[2] = 0;
test1(a);
test2(a);
test3(a);
cout << a[0] << endl;
cout << a[1] << endl;
cout << a[2] << endl;
}
このテストの出力は
1
2
3
パラメーターが値で渡される場合、変更は関数のスコープ内にとどまるため、関数内で変更することはできません。C++ では、配列を値で渡すことはできないため、この動作を模倣するには、aconst int*
または aconst int[]
をパラメーターとして渡す必要があります。そうすれば、配列が参照渡しされても、const
プロパティのために関数内で変更されることはありません。
あなたの質問に答えるには、好ましい方法は a を使用するstd::vector
ことですが、どうしても配列を使用したい場合は、 を使用する必要がありますint*
。