私は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;
}
私は問題があるが、ここではより多くの情報のWHEREコメント付きコードは説明すると思う: 4つの機能、すなわち、someFunctionがあります、someFunction2、someFunction3、someFunction4。 0、1、2の値を持つ配列yがあります。 すべての関数が元の配列の値を変更します。つまり、someFunctionX呼び出しの後のメイン関数のy要素は、関数を呼び出す前の要素と変わります。
私の質問は:なぜsomeFunction4は値を変更しない唯一の機能ですか?
ありがとうございます。私の悪い英語には申し訳ありません。
ありがとうございました。あなたの答えは明らかです。だから、古い配列を作る方法は新しい価値がありますか? – joker
割り当てを取り除く 'x = new int [n];' – GraphicsMuncher
関数内から配列サイズを変更したいのですが? – joker