>> DAVID J. Malan: Pojďme napsat program které se snažíme vyměnit hodnoty
dvě proměnné, x a y.
V předstihu, jsem napsal hodně již tohoto programu.
Za prvé, jsem deklarovat proměnnou, x, a uložit do ní hodnotu, 1..
Pak Prohlašuji proměnnou y a uložit do ní hodnotu, 2.
>> Poté jsem se s printf zobrazení hodnoty těchto dvou veličin.
Pak jsem tvrdit s jiným printf je třeba vyměňovat tyto proměnné.
Pak jsem volat funkci nazvanou swap.
A pak jsem se tvrdí, že proměnné byly prohozeny.
A pak jsem vytisknout to, co tvrdím, jsou nové hodnoty x a y.
>> Teď, co je tato funkce Swap?
Není to něco, co přichází s C. Skutečně, podíváme-li se na vrcholu mého
soubor, zjistíte, že jsem prohlásil, prototyp pro tuto funkci swapu
s uvedením, že to trvá dva ints, libovolně volal a a b, a to
funkce nic nevrací.
Takže pravděpodobně, že dělá to, co říká, v swapy a a B hodnoty v.
Pojďme se nyní realizovat výměnu.
>> Za prvé, já jdu vyhlásit dočasný proměnnou a přiřadit k ní
hodnota, i když jsem mohl jen jak snadno skladovat v IT B.
Já pak změní na hodnotu of být stejná jako v b..
A pak konečně, budu měnit Hodnota b se to, co bylo, ale je
nyní v tepl.
>> Teď tvrdí, co jsem právě udělal je logicky správný.
Jsem uloženy v dočasné proměnné, Změněná hodnota je být b je, a pak
změnil B je hodnota být to, co je to.
Ale když jsem zkompilovat a spustit tento Program, obávám se, že to není
bude to, co vidím.
>> Ujistěte se, ani výměnu.
tečka lomítko, bez swapu.
A bohužel, podle printf, hodnota x a y, i
poté, co tvrdí, že se vymění ně, je stále 1 a 2..
>> A teď, proč to je?
No, ukázalo se, že v hlavní, když jsme volání této funkce swap, předáním
x a y jako argumenty, že je to ve skutečnosti kopie x a y, které
jsou předány do swapu.
Konkrétně, jejich hodnoty 1 a 2 jsou předán do swapu, jako a, b.
A je to A a B, které jsme nakonec vyměňovat v hlavní.
>> To znamená, že se 1 2, 1 2 se stane.
Ale protože odkládací nemá žádnou návratovou hodnotu a proto, že obdržela kopie x
a y, je to chování žádný vliv na x a y.
Ve skutečnosti, a a b jsou rozsahem, tak říkajíc, vyměnit, přičemž x a y i nadále
rozsahem na hlavní.
>> Takže máme problém.
Ale jak to opravit?