DAVID J. MALAN: Vamos a escribir un programa en que tratamos de cambiar los valores de dos variables, X e Y. De antemano, he escrito mucho de este programa ya. En primer lugar, declaro una variable, x, y almacenar en ella el valor de 1. Entonces me declaro variable y y almacenar en ella el valor de 2. Luego procedo con printf para mostrar los valores de estas dos variables. Entonces yo reclamo con otra printf para ser intercambio de esas variables. Entonces yo llamo una función llamada swap. Y entonces yo sostengo que las variables se han intercambiado. Y luego imprimo lo que yo reclamo son los nuevos valores de x e y. Ahora, ¿qué es este canje función? No es algo que viene con C. De hecho, si nos fijamos en la parte superior de mi archivo, te darás cuenta de que he declarado un prototipo para esta función de intercambio especificando que se necesitan dos enteros, arbitrariamente llamadas A y B, y este función no devuelve nada. Así que, presumiblemente, se hace lo que dice en una de las permutas y los valores de b. Ahora vamos a implementar swap. En primer lugar, voy a declarar el temporal variable y asignarle el valor de una, aunque sólo pudiera como se almacena fácilmente en ella b. Entonces yo voy a cambiar el valor de un ser igual a la de B. Y luego, por último, voy a cambiar el valor de b para ser lo que era, pero es un ahora en temp. Ahora puedo reclamar lo que acabo de hacer es lógicamente correcto. Yo he guardado una en una variable temporal, cambiado el valor de un ser B y, a continuación, cambiado el valor de b para ser lo que fue una de. Pero cuando compilar y ejecutar este programa, me preocupa que no es va de lo que veo. Hacer, no intercambio. dot slash, ningún intercambio. Y, por desgracia, de acuerdo con printf, el valor de x e y, incluso después de que pretendemos ser el canje ellos, sigue siendo 1 y 2. Ahora ¿por qué es eso? Bueno, resulta que en la principal, cuando llamar a esta función de intercambio, pasando xey como argumentos, en realidad es copias de x e y que se pasó a swap. Es decir, sus valores 1 y 2 son pasado a la memoria de intercambio como a y b. Y es a y b que somos en última instancia, intercambio de principal. Es decir, 1 se convierte en 2, 2 se convierte en 1. Pero debido permuta no devuelve ningún valor y porque recibió copias de x ey, es el comportamiento ha ningún efecto en xe y. De hecho, a y b están en el ámbito, por así decirlo, para cambiar, mientras que x e y se mantienen como alcance principal. Así que tenemos un problema. Pero, ¿cómo solucionarlo?