1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Poďme napísať program ktoré sa snažíme vymeniť hodnoty 3 00:00:02,700 --> 00:00:04,970 dve premenné, x a y. 4 00:00:04,970 --> 00:00:07,490 V predstihu, som napísal veľa už tohto programu. 5 00:00:07,490 --> 00:00:11,130 Po prvé, som deklarovať premennú, x, a uložiť do nej hodnotu, 1.. 6 00:00:11,130 --> 00:00:14,120 Potom Prehlasujem premennú y a uložiť do nej hodnotu, 2. 7 00:00:14,120 --> 00:00:17,700 >> Potom som sa s printf zobrazenie hodnoty týchto dvoch veličín. 8 00:00:17,700 --> 00:00:21,090 Potom som tvrdiť s iným printf je potrebné vymieňať tieto premenné. 9 00:00:21,090 --> 00:00:23,690 Potom som volať funkciu nazvanú swap. 10 00:00:23,690 --> 00:00:26,100 A potom som sa tvrdí, že premenné boli prehodené. 11 00:00:26,100 --> 00:00:30,610 A potom som vytlačiť to, čo tvrdím, sú nové hodnoty x a y. 12 00:00:30,610 --> 00:00:32,030 >> Teraz, čo je táto funkcia Swap? 13 00:00:32,030 --> 00:00:34,970 Nie je to niečo, čo prichádza s C. Skutočne, ak sa pozrieme na vrchole môjho 14 00:00:34,970 --> 00:00:38,850 súbor, zistíte, že som vyhlásil, prototyp pre túto funkciu swapu 15 00:00:38,850 --> 00:00:42,750 s uvedením, že to trvá dva ints, ľubovoľne volal a a b, a to 16 00:00:42,750 --> 00:00:44,300 funkcie nič nevracia. 17 00:00:44,300 --> 00:00:48,370 Takže pravdepodobne, že robí to, čo hovorí, v swapy a a B hodnoty v. 18 00:00:48,370 --> 00:00:50,170 Poďme sa teraz realizovať výmenu. 19 00:00:50,170 --> 00:00:53,820 >> Po prvé, ja idem vyhlásiť dočasný premennú a priradiť k nej 20 00:00:53,820 --> 00:00:57,260 hodnota, aj keď som mohol len ako ľahko skladovať v IT B. 21 00:00:57,260 --> 00:01:00,925 Ja potom zmení na hodnotu of byť rovnaká ako v b. 22 00:01:00,925 --> 00:01:04,849 A potom konečne, budem meniť Hodnota b sa to, čo bolo, ale je 23 00:01:04,849 --> 00:01:06,340 teraz v tepl. 24 00:01:06,340 --> 00:01:08,910 >> Teraz tvrdí, čo som práve urobil je logicky správny. 25 00:01:08,910 --> 00:01:12,780 Som uložené v dočasnej premennej, Zmenená hodnota je byť b je, a potom 26 00:01:12,780 --> 00:01:15,580 zmenil B je hodnota byť to, čo je to. 27 00:01:15,580 --> 00:01:18,620 Ale keď som skompilovať a spustiť tento Program, obávam sa, že to nie je 28 00:01:18,620 --> 00:01:20,140 bude to, čo vidím. 29 00:01:20,140 --> 00:01:21,625 >> Uistite sa, ani výmenu. 30 00:01:21,625 --> 00:01:24,350 bodka lomítko, bez swapu. 31 00:01:24,350 --> 00:01:27,560 A bohužiaľ, podľa printf, hodnota x a y, aj 32 00:01:27,560 --> 00:01:31,560 potom, čo tvrdia, že sa vymení ne, je stále 1 a 2.. 33 00:01:31,560 --> 00:01:32,630 >> A teraz, prečo to je? 34 00:01:32,630 --> 00:01:36,160 No, ukázalo sa, že v hlavnej, keď sme volanie tejto funkcie swap, odovzdaním 35 00:01:36,160 --> 00:01:39,960 x a y ako argumenty, že je to v skutočnosti kópie x a y, ktoré 36 00:01:39,960 --> 00:01:41,310 sú odovzdané do swapu. 37 00:01:41,310 --> 00:01:45,430 Konkrétne, ich hodnoty 1 a 2 sú odovzdaný do swapu, ako a, b 38 00:01:45,430 --> 00:01:48,590 A je to A a B, ktoré sme nakoniec vymieňať v hlavnej. 39 00:01:48,590 --> 00:01:50,810 >> To znamená, že sa 1 2, 1 2 sa stane. 40 00:01:50,810 --> 00:01:54,630 Ale pretože odkladací nemá žiadnu návratovú hodnotu a preto, že dostala kópie x 41 00:01:54,630 --> 00:01:58,220 a y, je to správanie žiadny vplyv na x a y. 42 00:01:58,220 --> 00:02:02,610 V skutočnosti, a a b sú rozsahom, tak povediac, vymeniť, pričom x a y i naďalej 43 00:02:02,610 --> 00:02:03,990 rozsahom na hlavnej. 44 00:02:03,990 --> 00:02:05,070 >> Takže máme problém. 45 00:02:05,070 --> 00:02:06,320 Ale ako to opraviť? 46 00:02:06,320 --> 00:02:08,312