DAVID J. Malan: Poďme napísať program ktoré sa snažíme vymeniť hodnoty dve premenné, x a y. V predstihu, som napísal veľa už tohto programu. Po prvé, som deklarovať premennú, x, a uložiť do nej hodnotu, 1.. Potom Prehlasujem premennú y a uložiť do nej hodnotu, 2. Potom som sa s printf zobrazenie hodnoty týchto dvoch veličín. Potom som tvrdiť s iným printf je potrebné vymieňať tieto premenné. Potom som volať funkciu nazvanú swap. A potom som sa tvrdí, že premenné boli prehodené. A potom som vytlačiť to, čo tvrdím, sú nové hodnoty x a y. Teraz, čo je táto funkcia Swap? Nie je to niečo, čo prichádza s C. Skutočne, ak sa pozrieme na vrchole môjho súbor, zistíte, že som vyhlásil, prototyp pre túto funkciu swapu s uvedením, že to trvá dva ints, ľubovoľne volal a a b, a to funkcie nič nevracia. Takže pravdepodobne, že robí to, čo hovorí, v swapy a a B hodnoty v. Poďme sa teraz realizovať výmenu. Po prvé, ja idem vyhlásiť dočasný premennú a priradiť k nej hodnota, aj keď som mohol len ako ľahko skladovať v IT B. Ja potom zmení na hodnotu of byť rovnaká ako v b. A potom konečne, budem meniť Hodnota b sa to, čo bolo, ale je teraz v tepl. Teraz tvrdí, čo som práve urobil je logicky správny. Som uložené v dočasnej premennej, Zmenená hodnota je byť b je, a potom zmenil B je hodnota byť to, čo je to. Ale keď som skompilovať a spustiť tento Program, obávam sa, že to nie je bude to, čo vidím. Uistite sa, ani výmenu. bodka lomítko, bez swapu. A bohužiaľ, podľa printf, hodnota x a y, aj potom, čo tvrdia, že sa vymení ne, je stále 1 a 2.. A teraz, prečo to je? No, ukázalo sa, že v hlavnej, keď sme volanie tejto funkcie swap, odovzdaním x a y ako argumenty, že je to v skutočnosti kópie x a y, ktoré sú odovzdané do swapu. Konkrétne, ich hodnoty 1 a 2 sú odovzdaný do swapu, ako a, b A je to A a B, ktoré sme nakoniec vymieňať v hlavnej. To znamená, že sa 1 2, 1 2 sa stane. Ale pretože odkladací nemá žiadnu návratovú hodnotu a preto, že dostala kópie x a y, je to správanie žiadny vplyv na x a y. V skutočnosti, a a b sú rozsahom, tak povediac, vymeniť, pričom x a y i naďalej rozsahom na hlavnej. Takže máme problém. Ale ako to opraviť?