>> DAVID J. Malan: Laten we een programma schrijven in waarmee we proberen om de waarden van de swap
twee variabelen, x en y.
Van te voren heb ik veel geschreven van dit programma reeds.
Eerst heb ik een variabele declareert, x, en opslaan daarin de waarde 1.
Dan verklaar ik variabele y en opslaan daarin de waarde 2.
>> Dan ga ik met printf om te laten zien de waarden van deze twee variabelen.
Dan beweren ik met een andere printf te wisselen die variabelen.
Dan roep ik een functie genaamd swap.
En dan beweren dat ik de variabelen zijn verwisseld.
En dan print ik dat wat ik beweer zijn de waarden van x en y.
>> Nu, wat is deze functie swap?
Het is niet iets dat komt met C. Sterker nog, als we kijken naar de top van mijn
bestand, zult u merken dat ik heb verklaard een prototype voor deze functie swap
specificeren dat het duurt twee ints, willekeurig genaamd a en b, en deze
functie geeft niets.
Dus vermoedelijk, het doet wat het zegt in swaps a's en waarden b's.
Laten we nu implementeren swap.
>> Ten eerste, ik ga een tijdelijke te verklaren variabele en ken
de waarde in een, al zou ik dat gewoon zo gemakkelijk opgeslagen in het b.
Ik ben vervolgens naar de waarde te veranderen van een gelijk aan het in b worden.
En dan tot slot, ik ga veranderen de waarde van b te zijn wat een was, maar is
nu in temp.
>> Beweren nu ik wat ik net heb gedaan is logisch correct.
Ik heb een opgeslagen in een tijdelijke variabele, veranderd van waarde zijn b's, en
veranderde waarde b's te zijn wat een was.
Maar toen ik compileren en uitvoeren van deze programma, ik ben bang dat het niet
gaan wat ik zie.
>> Maken, geen swap.
dot slash, geen swap.
En helaas, volgens printf, de waarde van x en y, zelfs
nadat we beweren te zijn swapping hen nog 1 en 2.
>> Waarom is dat?
Nou, het blijkt dat in de belangrijkste, als we noemen deze functie swap, passeren in
x en y als argumenten, het is eigenlijk afschriften van x en y dat
worden doorgegeven aan de swap.
Namelijk, de waarden 1 en 2 overgegaan in ruil als a en b.
En het is een en b dat we uiteindelijk swapping in de belangrijkste.
>> Dat wil zeggen, 1 wordt 2, 2 wordt 1.
Maar omdat swap heeft geen return waarde en omdat het ontvangen kopieën van x
en y is het gedrag geen effect op x en y.
Inderdaad, a en b zijn scoped, om zo te zeggen, om te wisselen, terwijl x en y blijven
binnen het bereik van de belangrijkste.
>> Dus hebben we een probleem.
Maar hoe dit te verhelpen?