1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Escriurem un programa en que tractem de canviar els valors de 3 00:00:02,700 --> 00:00:04,970 dues variables, X i Y. 4 00:00:04,970 --> 00:00:07,490 Per endavant, he escrit molt d'aquest programa ja. 5 00:00:07,490 --> 00:00:11,130 En primer lloc, declaro una variable, x, i emmagatzemar-hi el valor d'1. 6 00:00:11,130 --> 00:00:14,120 Llavors em declaro variable i i emmagatzemar-hi el valor de 2. 7 00:00:14,120 --> 00:00:17,700 >> Després procedeixo amb printf per mostrar els valors d'aquestes dues variables. 8 00:00:17,700 --> 00:00:21,090 Llavors jo reclam amb una altra printf per ser intercanvi d'aquestes variables. 9 00:00:21,090 --> 00:00:23,690 Llavors jo dic una funció anomenada swap. 10 00:00:23,690 --> 00:00:26,100 I llavors jo sostinc que les variables s'han intercanviat. 11 00:00:26,100 --> 00:00:30,610 I després imprimeixo el que jo reclamo són els nous valors de x i y. 12 00:00:30,610 --> 00:00:32,030 >> Ara, què és aquest canvi funció? 13 00:00:32,030 --> 00:00:34,970 No és una cosa que ve amb C. De fet, si ens fixem en la part superior de la meva 14 00:00:34,970 --> 00:00:38,850 arxiu, t'adonaràs que he declarat un prototip per a aquesta funció d'intercanvi 15 00:00:38,850 --> 00:00:42,750 especificant quals calen dos sencers, arbitràriament trucades A i B, i aquest 16 00:00:42,750 --> 00:00:44,300 funció no retorna res. 17 00:00:44,300 --> 00:00:48,370 Així que, presumiblement, es fa el que diu en una de les permutes i els valors de b. 18 00:00:48,370 --> 00:00:50,170 Ara anem a implementar swap. 19 00:00:50,170 --> 00:00:53,820 >> En primer lloc, vaig a declarar el temporal variable i assignar- 20 00:00:53,820 --> 00:00:57,260 el valor d'una, encara que només pogués com s'emmagatzema fàcilment en ella b. 21 00:00:57,260 --> 00:01:00,925 Llavors jo vaig a canviar el valor d'un ésser igual a la de B. 22 00:01:00,925 --> 00:01:04,849 I després, finalment, vaig a canviar el valor de b per ser el que era, però és un 23 00:01:04,849 --> 00:01:06,340 ara en temp. 24 00:01:06,340 --> 00:01:08,910 >> Ara puc reclamar el que acabo de fer és lògicament correcte. 25 00:01:08,910 --> 00:01:12,780 Jo he guardat una a una variable temporal, canviat el valor d'un ésser B i, a continuació, 26 00:01:12,780 --> 00:01:15,580 canviat el valor de b per ser el que va ser una de. 27 00:01:15,580 --> 00:01:18,620 Però quan compilar i executar aquest programa, em preocupa que no és 28 00:01:18,620 --> 00:01:20,140 va del que veig. 29 00:01:20,140 --> 00:01:21,625 >> Fer, no intercanvi. 30 00:01:21,625 --> 00:01:24,350 dot slash, cap intercanvi. 31 00:01:24,350 --> 00:01:27,560 I, per desgràcia, d'acord amb printf, el valor de x i i, fins i tot 32 00:01:27,560 --> 00:01:31,560 després que pretenem ser el canvi ells, segueix sent 1 i 2. 33 00:01:31,560 --> 00:01:32,630 >> Ara per què és això? 34 00:01:32,630 --> 00:01:36,160 Bé, resulta que en la principal, quan cridar a aquesta funció d'intercanvi, passant 35 00:01:36,160 --> 00:01:39,960 xiy com a arguments, en realitat és còpies de x i y que 36 00:01:39,960 --> 00:01:41,310 es va passar a swap. 37 00:01:41,310 --> 00:01:45,430 És a dir, els seus valors 1 i 2 són passat a la memòria d'intercanvi com a i b. 38 00:01:45,430 --> 00:01:48,590 I és a i b que som en última instància, intercanvi de principal. 39 00:01:48,590 --> 00:01:50,810 >> És a dir, 1 es converteix en 2, 2 es converteix en 1. 40 00:01:50,810 --> 00:01:54,630 Però a causa permuta no retorna cap valor i perquè va rebre còpies de x 41 00:01:54,630 --> 00:01:58,220 ei, és el comportament ha cap efecte en xi y. 42 00:01:58,220 --> 00:02:02,610 De fet, a i b estan en l'àmbit, per dir-ho, per canviar, mentre que x i y es mantenen 43 00:02:02,610 --> 00:02:03,990 com abast principal. 44 00:02:03,990 --> 00:02:05,070 >> Així que tenim un problema. 45 00:02:05,070 --> 00:02:06,320 Però, com solucionar-ho? 46 00:02:06,320 --> 00:02:08,312