>> DAVID J. MALAN: La oss skrive et program i som vi prøver å bytte verdiene av
to variabler, x og y.
På forhånd har jeg skrevet mye av dette programmet allerede.
Først, jeg erklærer en variabel, x, og lagre i den verdien, en.
Så jeg erklærer variabel y og lagre i den verdien, to.
>> Så jeg fortsetter med printf å vise verdiene av disse to variable.
Så jeg hevder med en annen printf skal bytte disse variablene.
Så jeg kaller en funksjon kalt swap.
Og da jeg hevder at variablene har blitt byttet.
Og så skriver jeg ut at det jeg hevder er de nye verdiene for x og y.
>> Nå hva er denne funksjonen swap?
Det er ikke noe som kommer med C. Faktisk, hvis vi ser på toppen av min
fil, vil du se at jeg har erklært en prototype for denne funksjonen swap
spesifisere at det tar to ints, vilkårlig kalles a og b, og denne
Funksjonen returnerer ikke noe.
Så formodentlig, det gjør hva det står i swap-A og b verdier.
La oss nå gjennomføre swap.
>> Først, jeg kommer til å erklære en midlertidig variable og tilordne til det
verdien i en, selv om jeg bare kunne så enkelt lagres i det b.
Jeg deretter kommer til å endre verdien fra et til å være lik det i b.
Og så til slutt, jeg kommer til å endre verdien av b å være hva en var, men er
nå i temp.
>> Nå jeg hevder det jeg nettopp har gjort er logisk riktig.
Jeg har lagret en i en midlertidig variabel, endret en verdi å være b ', og deretter
endret b verdi å være hva en var.
Men når jeg kompilere og kjøre denne programmet, jeg er redd for at det ikke
kommer det jeg ser.
>> Lag, ingen swap.
dot slash, ingen swap.
Og dessverre, i henhold til printf, verdien av x og y, selv
etter at vi hevder å være å bytte dem, er fortsatt 1 og 2.
>> Nå hvorfor er det?
Vel, det viser seg at det i hovedsak når vi kaller denne funksjonen swap, passerer i
x og y som argumenter, er det faktisk kopier av x og y som
er gått inn swap.
Nemlig, deres verdier 1 og 2 er gått inn swap som a og b.
Og det er en og b som vi er til syvende og sist bytte i hoved.
>> Det vil si, blir 1 2, 2 blir en.
Men fordi swap har ingen returverdi og fordi det mottatte kopier av x
og y, er det atferd har ingen effekt på x og y.
Faktisk, a og b er angitt omfang, så å si, å bytte, mens x og y forbli
scoped til hoved.
>> Så vi har et problem.
Men hvordan å fikse det?