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?