私は C++ (すべての初心者 XD の通常のイントロ) を初めて使用し、この予期しない動作を見つけました。このパターンを特定するまで、プログラム内の変数と配列をトレースしました。
#include <iostream>
using namespace std;
void showArray(int arr[], int n)
{
for(int i = 0; i < n; i++) cout << arr[i] << " ";
cout << endl;
}
void someFunction(int x[], int n) // changes the original values
{
x[0] = 2;
x[1] = 1;
x[2] = 0;
}
void someFunction2(int * x, int n)
{
x[0] = 2;
x[1] = 1;
x[2] = 0;
} // changes the original values
int someFunction3(int x[], int n)
{
x[0] = 2;
x[1] = 1;
x[2] = 0;
return 0;
} // changes the original values
int someFunction4(int x[], int n)
{
x = new int[n];
x[0] = 2;
x[1] = 1;
x[2] = 0;
return 0;
} // does NOT change the original value
int main(void)
{
int * y = new int[3];
y[0] = 0;
y[1] = 1;
y[2] = 2;
showArray(y, 3);
someFunction4(y, 3);
showArray(y, 3);
return 0;
}
someFunction4()
で配列y
を変更しないのはなぜmain()
ですか? 代わりにもう一方someFunctionX()
を呼び出すと、から に正常に変更されます。main()
y
{0, 1, 2}
{2, 1, 0}