配列を引数として関数に値で渡すと、最初の要素へのポインターに減衰し、最初の要素が値で渡されます。したがって、関数で受け取るのfuncは、配列の最初の要素のアドレスのコピーです。関数では、アドレスを変更するだけで、関数の配列は変更されませんmain()。で何をするにしてもarray、func()その関数に対してのみローカルです。これは次のようなものです。
void f(int x)
{
x= 100; //modifying the copy, not the variable in main()
}
int main()
{
int value = 1000;
f(x); //pass by value, means pass a copy!
}
この場合、xinの値を変更していますf()。同様に、あなたの場合、あなたはの値を変更していますarray。はポインタなのでarray、新しいメモリを割り当てることで、別の場所を指すようにしています。 すべての変更は関数に対してローカルです。
arrayまた、変数にメモリを割り当て、割り当てを解除しないため、プログラムがメモリをリークすることにも注意してください。これを回避するには、次のように記述する必要があります。
delete [] array;
関数から戻る前。繰り返しますが、これdeleteはで変更arrayされませんmain()。
ちなみに、の配列の要素を変更したい場合はmain()、代わりにこれを行う必要があります。
void func(int* array)
{
//array=new int[5]; //just comment this
for (int i=5; i>0; i--)
array[5-i]=i; //now array points to the same memory
//where main()'s array is in the memory.
}
お役に立てば幸いです。