>> DAVID J. MALAN: Låt oss skriva ett program i som vi försöker byta värderingar
två variabler, x och y.
I förväg har jag skrivit mycket av detta program redan.
Först, jag deklarerar en variabel, x, och lagra i det värdet, 1.
Då ska jag deklarera variabel y och lagra i det värdet, 2.
>> Då ska jag fortsätta med printf att visa värdena av dessa två variabler.
Då jag hävdar med en annan printf att byta dessa variabler.
Då kallar jag en funktion som kallas swap.
Och så påstår jag att variablerna har bytts.
Och då jag skriver ut att det jag påstår är de nya värdena för x och y.
>> Nu vad är denna funktion swap?
Det är inte något som kommer med C. Om vi ​​tittar på toppen av min
fil, kommer du att märka att jag har förklarat en prototyp för denna funktion swap
som anger att det tar två Ints, godtyckligt kallas a och b, och detta
Funktionen returnerar inte någonting.
Så förmodligen, det gör vad den säger i swappar A: s och B: s värderingar.
Låt oss nu genomföra swap.
>> Först kommer jag att förklara en tillfällig variabel och tilldela den
värdet i en, men jag kunde bara som lätt lagras i det b..
Jag sedan kommer att ändra värdet en att vara lika stor som i b..
Och så slutligen, jag ska ändra värde på b för att vara vad en var, men är
nu i temp.
>> Nu påstår jag vad jag just har gjort är logiskt korrekt.
Jag har sparat ett i en temporär variabel, bytte ett värde att vara B: s, och sedan
bytte b värde att vara vad en var.
Men när jag kompilera och köra detta program, är jag rädd att det inte
går vad jag ser.
>> Gör ingen swap.
dot slash, ingen swap.
Och tyvärr, enligt printf, värdet av x och y, även
efter att vi påstår att byta dem, är fortfarande 1 och 2.
>> Nu varför är det?
Tja, visar det sig att i huvud, när vi kallar denna funktion swap, som går i
x och y som argument, det är faktiskt kopior av x och y som
förs in i swap.
Nämligen deras värden 1 och 2 är passerat in swap som a och b.
Och det är a och b som vi är i slutändan byta i main.
>> Det vill säga, 1 blir 2, 2 blir 1.
Men eftersom swap har inget returvärde och eftersom det fick kopior av x
och y, är det beteende har ingen effekt på x och y.
Faktum är a och b scoped, så att säga, att byta, medan x och y kvar
scoped till huvud.
>> Så vi har ett problem.
Men hur man fixar det?