このスワップ方法が機能しなかった理由
void swap(int *x,int *y){
int *temp;
temp = x;
x = y;
y = temp;
}
なんで?一般的なものと同じだと思います..
C は関数の引数を値で渡します。ポインタのコピーを交換するだけです。
2つを交換したい場合int
:
void swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
それらが指すメモリに格納されている値ではなく、スタック上の一時ポインタに格納されているアドレスをスワップしています。代わりにこれを行いたい:
void swap(int *x,int *y){
int temp = *x;
*x = *y;
*y = temp;
}
x
y
ローカル変数と同じように動作します。
あなたのコードは、それらが指す値ではなく、値を交換x
しています。y