void f(int a);
void f(int *a);
上の場合は値渡しと呼び、直接データの書き換えを行うため、return文を使用しないと変更が反映されない。
下の場合は参照渡しと呼び、ポインタで指定した参照先データの書き換えを行う。
下の場合においては呼び出し元の値も変わっている
呼び出し元関数() {
int a = 5;
int b = 5;
void f(int *a);
void f(int b);
printf("%d\n",a); //<-void fで書き換えた値が表示される。
printf("%d\n",b); //<-bは5と表示される。
}
ので、それを防ぎたいにはconst等を指定し、書き換えられなくするか
元の値を別の変数にコピーしてコピーした変数を操作するようにする。
上の表記の仕方はCやC++だが、javaとかだと
void f(int a);
void f(オブジェクト名);
のようなイメージ。
javaの参照渡しで値を書き換えたくない場合には
finalを使用する。
cloneを使って、コピーオブジェクトを渡すのも一つの手。
最終更新:2015年12月28日 22:31