1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. MALAN: Vamos a escribir un programa en que tratamos de cambiar los valores de 3 00:00:02,700 --> 00:00:04,970 dos variables, X e Y. 4 00:00:04,970 --> 00:00:07,490 De antemano, he escrito mucho de este programa ya. 5 00:00:07,490 --> 00:00:11,130 En primer lugar, declaro una variable, x, y almacenar en ella el valor de 1. 6 00:00:11,130 --> 00:00:14,120 Entonces me declaro variable y y almacenar en ella el valor de 2. 7 00:00:14,120 --> 00:00:17,700 >> Luego procedo con printf para mostrar los valores de estas dos variables. 8 00:00:17,700 --> 00:00:21,090 Entonces yo reclamo con otra printf para ser intercambio de esas variables. 9 00:00:21,090 --> 00:00:23,690 Entonces yo llamo una función llamada swap. 10 00:00:23,690 --> 00:00:26,100 Y entonces yo sostengo que las variables se han intercambiado. 11 00:00:26,100 --> 00:00:30,610 Y luego imprimo lo que yo reclamo son los nuevos valores de x e y. 12 00:00:30,610 --> 00:00:32,030 >> Ahora, ¿qué es este canje función? 13 00:00:32,030 --> 00:00:34,970 No es algo que viene con C. De hecho, si nos fijamos en la parte superior de mi 14 00:00:34,970 --> 00:00:38,850 archivo, te darás cuenta de que he declarado un prototipo para esta función de intercambio 15 00:00:38,850 --> 00:00:42,750 especificando que se necesitan dos enteros, arbitrariamente llamadas A y B, y este 16 00:00:42,750 --> 00:00:44,300 función no devuelve nada. 17 00:00:44,300 --> 00:00:48,370 Así que, presumiblemente, se hace lo que dice en una de las permutas y los valores de b. 18 00:00:48,370 --> 00:00:50,170 Ahora vamos a implementar swap. 19 00:00:50,170 --> 00:00:53,820 >> En primer lugar, voy a declarar el temporal variable y asignarle 20 00:00:53,820 --> 00:00:57,260 el valor de una, aunque sólo pudiera como se almacena fácilmente en ella b. 21 00:00:57,260 --> 00:01:00,925 Entonces yo voy a cambiar el valor de un ser igual a la de B. 22 00:01:00,925 --> 00:01:04,849 Y luego, por último, voy a cambiar el valor de b para ser lo que era, pero es un 23 00:01:04,849 --> 00:01:06,340 ahora en temp. 24 00:01:06,340 --> 00:01:08,910 >> Ahora puedo reclamar lo que acabo de hacer es lógicamente correcto. 25 00:01:08,910 --> 00:01:12,780 Yo he guardado una en una variable temporal, cambiado el valor de un ser B y, a continuación, 26 00:01:12,780 --> 00:01:15,580 cambiado el valor de b para ser lo que fue una de. 27 00:01:15,580 --> 00:01:18,620 Pero cuando compilar y ejecutar este programa, me preocupa que no es 28 00:01:18,620 --> 00:01:20,140 va de lo que veo. 29 00:01:20,140 --> 00:01:21,625 >> Hacer, no intercambio. 30 00:01:21,625 --> 00:01:24,350 dot slash, ningún intercambio. 31 00:01:24,350 --> 00:01:27,560 Y, por desgracia, de acuerdo con printf, el valor de x e y, incluso 32 00:01:27,560 --> 00:01:31,560 después de que pretendemos ser el canje ellos, sigue siendo 1 y 2. 33 00:01:31,560 --> 00:01:32,630 >> Ahora ¿por qué es eso? 34 00:01:32,630 --> 00:01:36,160 Bueno, resulta que en la principal, cuando llamar a esta función de intercambio, pasando 35 00:01:36,160 --> 00:01:39,960 xey como argumentos, en realidad es copias de x e y que 36 00:01:39,960 --> 00:01:41,310 se pasó a swap. 37 00:01:41,310 --> 00:01:45,430 Es decir, sus valores 1 y 2 son pasado a la memoria de intercambio como a y b. 38 00:01:45,430 --> 00:01:48,590 Y es a y b que somos en última instancia, intercambio de principal. 39 00:01:48,590 --> 00:01:50,810 >> Es decir, 1 se convierte en 2, 2 se convierte en 1. 40 00:01:50,810 --> 00:01:54,630 Pero debido permuta no devuelve ningún valor y porque recibió copias de x 41 00:01:54,630 --> 00:01:58,220 ey, es el comportamiento ha ningún efecto en xe y. 42 00:01:58,220 --> 00:02:02,610 De hecho, a y b están en el ámbito, por así decirlo, para cambiar, mientras que x e y se mantienen 43 00:02:02,610 --> 00:02:03,990 como alcance principal. 44 00:02:03,990 --> 00:02:05,070 >> Así que tenemos un problema. 45 00:02:05,070 --> 00:02:06,320 Pero, ¿cómo solucionarlo? 46 00:02:06,320 --> 00:02:08,312