Почему этот код не меняет номера?

Возможный дубликат:
Почему эти функции обмена ведут себя по-разному?

Посмотрите на приведенный ниже код, целью которого является обмен двумя номерами, но это не так. Пожалуйста, помогите мне понять причину, почему это не так. Я новичок в программировании, поэтому буду благодарен, если вы объясните это больше, чем обычно. Спасибо!

#include  void swap (int a, int b); int main (void) { int x = 1; int y = 2; swap (x, y); printf ("Now x is %d and y is %d\n", x, y); return 0; } //function definition of swap void swap (int a, int b) { int temp = a; int a = b; int b = temp; } 

C является передачей по значению, поэтому функция swap получает копии значений и не может влиять на переменные в вызывающем.

Чтобы повлиять на переменные в вызывающем, вам необходимо передать указатели на них.

 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } 

и назовите его

 swap(&x, &y); 

в main .

Это связано с тем, что вы передаете переменные копией, а не указателем. Другими словами, ваши функции swap() получают свои личные копии x и y и заменяют их, и результат обмена не отображается вызывающим. Правильный код может выглядеть примерно так:

 #include  void swap(int *a, int *b); int main(void) { int x = 1; int y = 2; swap(&x, &y); printf("Now x is %d and y is %d\n", x, y); return 0; } //function definition of swap void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }