Функция подкачки не работает

Почему этот метод обмена не работает

void swap(int *x,int *y){

     int *temp;
     temp = x;
     x = y;
     y = temp;
}

Зачем? Я думаю, что это так же, как обычный..

3 ответа

C передает аргументы функции по значению: вы меняете только копии указателей.

Если вы хотите поменять местами два int:

void swap(int *x,int *y)
{
   int temp;
   temp = *x;
   *x = *y;
   *y = temp;
}
  1. x а также y ведут себя так же, как локальные переменные.

  2. ваш код поменялся x а также y значения, а не значения, на которые они указывают.

Вы меняете адреса, хранящиеся во временных указателях в стеке, а не на значения, хранящиеся в памяти, на которую они указывают. Вы хотите сделать это вместо этого:

void swap(int *x,int *y){

     int temp = *x;
     *x = *y;
     *y = temp;
}
Другие вопросы по тегам