>> DAVID J. Malan: Olgem kirjutada programmi mida me püüame vahetada väärtused
kahe muutuja x ja y.
Eelnevalt olen kirjutanud palju Selle programmi juba.
Esiteks, ma kuulutada muutuja, x, ja salvestada see väärtus, 1.
Siis ma kuulutada muutuja y ja salvestada see väärtus, 2.
>> Siis ma jätkata printf kuvamiseks väärtused nende kahe muutuja.
Siis ma väita teise printf tuleb vahetada need muutujad.
Siis ma kutsun funktsioon nimega swap.
Ja siis ma väita, et muutujad on vahetatud.
Ja siis ma välja printida, et mida ma väita, on uued väärtused x ja y.
>> Nüüd sellest, mis on selle funktsiooni swap?
See ei ole midagi, mis on kaasas C. Tõepoolest, kui me vaatame peale minu
fail, märkad, et ma olen kuulutanud prototüüp see funktsioon swap
täpsustades, et ta võtab kaks ints, omavoliliselt kutsutakse ja b ning see
funktsioon ei tagasta midagi.
Nii arvatavasti see, mida ta ütleb aastal vahetustehingud ja B väärtused.
Olgem nüüd rakendada swap.
>> Esiteks, ma kinnitan, ajutine muutuja ja anda sellele
väärtus, kuigi ma võiksin lihtsalt nii lihtsalt salvestatud see b.
Ma siis lähen väärtuse muutmiseks of võrduma et b.
Ja siis lõpuks, ma lähen muuta väärtus b olla see oli vaid
nüüd temp.
>> Nüüd ma väita, mida ma just teinud on loogiliselt korrektne.
Olen salvestatud ajutisse muutuja, muutunud väärtus olema B, ja siis
muutunud b väärtust, et see, mida tema oli.
Aga kui ma kompileerida ja käivitada programm, ma kardan, et see pole
läheb, mida ma näen.
>> Tee ei swap.
dot kärpida, ei swap.
Ja kahjuks, vastavalt printf, väärtuse x ja y, isegi
pärast me väita, et vahetada neid on veel 1 ja 2.
>> Nüüd, miks see nii on?
Noh, tuli välja, et peamine, kui me nimetame seda funktsiooni swap, mis kulgeb
x ja y argumendina, et see on tegelikult koopiaid x ja y, mis
on vastu võetud, swap.
Nimelt nende väärtuste 1 ja 2 on läks swap ja b.
Ja see on a ja b, et me oleme lõpuks Vahetatakse peamistes.
>> See tähendab, et 1 muutub 2, 2 muutub 1.
Aga kuna swap puudub tagastatav väärtus ja kuna ta sai koopiad x
ja y, see käitumine on mingit mõju x ja y.
Tõepoolest, ja b on rivist niiöelda, swap, et x ja y jääma
scoped peamine.
>> Nii et meil on probleem.
Aga kuidas seda parandada?