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?