>> 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ť?