1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Pojďme napsat program které se snažíme vyměnit hodnoty 3 00:00:02,700 --> 00:00:04,970 dvě proměnné, x a y. 4 00:00:04,970 --> 00:00:07,490 V předstihu, jsem napsal hodně již tohoto programu. 5 00:00:07,490 --> 00:00:11,130 Za prvé, jsem deklarovat proměnnou, x, a uložit do ní hodnotu, 1.. 6 00:00:11,130 --> 00:00:14,120 Pak Prohlašuji proměnnou y a uložit do ní hodnotu, 2. 7 00:00:14,120 --> 00:00:17,700 >> Poté jsem se s printf zobrazení hodnoty těchto dvou veličin. 8 00:00:17,700 --> 00:00:21,090 Pak jsem tvrdit s jiným printf je třeba vyměňovat tyto proměnné. 9 00:00:21,090 --> 00:00:23,690 Pak jsem volat funkci nazvanou swap. 10 00:00:23,690 --> 00:00:26,100 A pak jsem se tvrdí, že proměnné byly prohozeny. 11 00:00:26,100 --> 00:00:30,610 A pak jsem vytisknout to, co tvrdím, jsou nové hodnoty x a y. 12 00:00:30,610 --> 00:00:32,030 >> Teď, co je tato funkce Swap? 13 00:00:32,030 --> 00:00:34,970 Není to něco, co přichází s C. Skutečně, podíváme-li se na vrcholu mého 14 00:00:34,970 --> 00:00:38,850 soubor, zjistíte, že jsem prohlásil, prototyp pro tuto funkci swapu 15 00:00:38,850 --> 00:00:42,750 s uvedením, že to trvá dva ints, libovolně volal a a b, a to 16 00:00:42,750 --> 00:00:44,300 funkce nic nevrací. 17 00:00:44,300 --> 00:00:48,370 Takže pravděpodobně, že dělá to, co říká, v swapy a a B hodnoty v. 18 00:00:48,370 --> 00:00:50,170 Pojďme se nyní realizovat výměnu. 19 00:00:50,170 --> 00:00:53,820 >> Za prvé, já jdu vyhlásit dočasný proměnnou a přiřadit k ní 20 00:00:53,820 --> 00:00:57,260 hodnota, i když jsem mohl jen jak snadno skladovat v IT B. 21 00:00:57,260 --> 00:01:00,925 Já pak změní na hodnotu of být stejná jako v b.. 22 00:01:00,925 --> 00:01:04,849 A pak konečně, budu měnit Hodnota b se to, co bylo, ale je 23 00:01:04,849 --> 00:01:06,340 nyní v tepl. 24 00:01:06,340 --> 00:01:08,910 >> Teď tvrdí, co jsem právě udělal je logicky správný. 25 00:01:08,910 --> 00:01:12,780 Jsem uloženy v dočasné proměnné, Změněná hodnota je být b je, a pak 26 00:01:12,780 --> 00:01:15,580 změnil B je hodnota být to, co je to. 27 00:01:15,580 --> 00:01:18,620 Ale když jsem zkompilovat a spustit tento Program, obávám se, že to není 28 00:01:18,620 --> 00:01:20,140 bude to, co vidím. 29 00:01:20,140 --> 00:01:21,625 >> Ujistěte se, ani výměnu. 30 00:01:21,625 --> 00:01:24,350 tečka lomítko, bez swapu. 31 00:01:24,350 --> 00:01:27,560 A bohužel, podle printf, hodnota x a y, i 32 00:01:27,560 --> 00:01:31,560 poté, co tvrdí, že se vymění ně, je stále 1 a 2.. 33 00:01:31,560 --> 00:01:32,630 >> A teď, proč to je? 34 00:01:32,630 --> 00:01:36,160 No, ukázalo se, že v hlavní, když jsme volání této funkce swap, předáním 35 00:01:36,160 --> 00:01:39,960 x a y jako argumenty, že je to ve skutečnosti kopie x a y, které 36 00:01:39,960 --> 00:01:41,310 jsou předány do swapu. 37 00:01:41,310 --> 00:01:45,430 Konkrétně, jejich hodnoty 1 a 2 jsou předán do swapu, jako a, b. 38 00:01:45,430 --> 00:01:48,590 A je to A a B, které jsme nakonec vyměňovat v hlavní. 39 00:01:48,590 --> 00:01:50,810 >> To znamená, že se 1 2, 1 2 se stane. 40 00:01:50,810 --> 00:01:54,630 Ale protože odkládací nemá žádnou návratovou hodnotu a proto, že obdržela kopie x 41 00:01:54,630 --> 00:01:58,220 a y, je to chování žádný vliv na x a y. 42 00:01:58,220 --> 00:02:02,610 Ve skutečnosti, a a b jsou rozsahem, tak říkajíc, vyměnit, přičemž x a y i nadále 43 00:02:02,610 --> 00:02:03,990 rozsahem na hlavní. 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 jak to opravit? 46 00:02:06,320 --> 00:02:08,312