¿Por qué este código no intercambia los números?

Posible duplicado:
¿Por qué estas funciones de intercambio se comportan de manera diferente?

Eche un vistazo al código a continuación, destinado a intercambiar dos números, pero no lo hace. Por favor, ayúdame a entender la razón por la que no lo hace. Soy nuevo en la progtwigción, así que le agradecería que me explicara las cosas más de lo habitual. ¡Gracias!

#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 es el valor pasado, por lo que la función de swap recibe copias de los valores y no puede afectar a las variables en la persona que llama.

Para afectar las variables en la persona que llama, necesita pasarle punteros.

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

y llamalo

 swap(&x, &y); 

en la main

Esto se debe a que se pasan las variables por copia y no por puntero. En otras palabras, sus funciones swap() reciben sus propias copias privadas de x e y intercambian y el llamante no puede ver el resultado del intercambio. El código correcto podría verse algo como esto:

 #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; }