>> DAVID J. Malan: Napišimo program ki se trudimo, da bi zamenjali vrednote
dve spremenljivki, x in y.
Vnaprej, sem napisal veliko že tega programa.
Prvič, izjavljam, spremenljivo, X, in shranite v njem vrednosti, 1.
Potem izjavljam veličino Y in shranite v njem vrednosti, 2.
>> Potem sem se nadaljuje z printf prikazati vrednosti teh dveh spremenljivk.
Potem sem trdijo, z drugo printf da je treba zamenjavo teh spremenljivk.
Potem sem poklical funkcijo imenovano swap.
In potem sem trdijo, da so spremenljivke so bile zamenjane.
In potem sem izpisal, da je tisto, kar trdijo so nove vrednosti x in y.
>> Zdaj, kaj je ta funkcija swap?
To ni nekaj, kar prihaja z C. Pravzaprav, če pogledamo na vrhu mojega
datoteka, boste opazili, da sem izjavila prototip za to funkcijo swap
navedbo, da je potrebno dve Ints, poljubno imenuje in B, in to
funkcija ne vrne ničesar.
Torej, verjetno pa ne, kaj piše v zamenjavah a in vrednot B je.
Pojdimo zdaj izvajajo zamenjave.
>> Najprej bom razglasi začasno spremenljivka in ji naloži
vrednost, čeprav sem lahko samo tako enostavno shranjena v njej b.
Jaz pa bom za spremembo vrednosti v biti enaka kot v b.
In potem na koncu, bom spremenila vrednost B v kar je vendar
zdaj v temp.
>> Zdaj sem po tisto, kar sem pravkar storil je logično pravilna.
Sem shranjeni v začasne spremenljivke, spremenili vrednost je biti b-ih, nato pa
spremenilo B je vrednost, da bo tisto, kar je bil.
Toda, ko sem pripravijo in vodijo to Program, me skrbi, da to ni
dogaja tisto, kar vidim.
>> Poskrbite, nobene zamenjave.
dot poševnica, brez zamenjave.
In na žalost, po printf, vrednost za x in y, celo
po tem, ko trdimo, da se menjava jim je še vedno 1 in 2.
>> Zdaj zakaj je to?
No, izkazalo se je, da je v glavnem, ko smo oklic to funkcijo zamenjave, ki poteka v
x in y kot argument, da je dejansko kopije izmed X in Y, ki
se prenesejo v zamenjavo.
Namreč, njihove vrednosti 1 in 2 sta prešla v zamenjave kot a in b.
In to je in b, da smo na koncu zamenjavo v glavnem.
>> To pomeni, da 1 postane 2, 2 postane 1.
Ampak zato, ker je swap brez vrnitve vrednosti in ker je prejela izvode x
in y, to vedenje je nobenega vpliva na x in y.
Dejansko, so zajeta in b, tako rekoč da bi zamenjali, ker se x in y ostajajo
zajeta na glavno.
>> Torej imamo problem.
Ampak kako to popraviti?