C++で以下の例の様に、値をそのままFunctionに渡した場合、
void modVal(int a){
a = 10;
}
これを以下のように使った場合でも、xの値は変更されずに5のままとなります。
int main(){
int x = 5;
modVal(x);
printf("%d\n", x); // 5のまま
}
これは、modVal内で、xはコピーとして扱われているためです。
Func内でxを上書きしたい場合には、xのメモリアドレスを渡すことで、意図する機能となります。
&aはaの値のメモリアドレスを表し、modValの*aは、aのアドレスにある値を直接参照します。
void modVal(int *a){
*a = 10;
}
int main(){
int x = 5;
modVal(&x);
printf("%d\n", x); // 10にアップデートされる。
}
一方で、Arrayを渡す場合には対応が異なります。C++では、Arrayを渡した場合にはArray内のIndex-0のポインターを渡していることになるようです。したがって、Func内で渡したArrayに加えられた変更は、オリジナルのArrayへの変更をもたらすようです。