DAVID J. MALAN: Kirjoitetaan ohjelma joilla yritetään vaihtaa arvojen kaksi muuttujaa, x ja y. Etukäteen, olen kirjoittanut paljon tämän ohjelman jo. Ensinnäkin olen julistaa muuttuja, x, ja säilytä se arvo, 1. Sitten Julistan muuttuja y ja säilytä se arvo, 2. Sitten jatkan siitä printf näyttää arvoja näiden kahden muuttujan. Sitten Väitän toisen printf voidaan vaihtamalla niitä muuttujia. Soitan toiminto nimeltään swap. Ja sitten Väitän, että muuttujat ovat vaihtaneet paikkaa. Ja sitten tulostaa, että mitä Väitän ovat uudet arvot x ja y. Mitä nyt on tämä toiminto swap? Se ei ole jotain, joka tulee C. Todellakin, jos katsomme alkuun minun tiedoston, huomaat että olen julistanut prototyyppi tätä toimintoa swap täsmensi, että se kestää kaksi ints, mielivaltaisesti kutsutaan a ja b, ja tämä funktio ei palauta mitään. Joten oletettavasti se mitä se sanoo swapeihin: n ja B: n arvoja. Katsotaanpa nyt toteuttaa swap. Ensiksi aion julistaa väliaikainen muuttujan ja liittää siihen arvo, vaikka vain voisin kuten helposti tallentaa sen b. En sitten aio muuttaa arvoa of olla yhtä suuri kuin b. Ja sitten lopuksi, aion muuttaa arvo b olla mitä oli, mutta ei nyt temp. Nyt Väitän mitä olen juuri tehnyt on loogisesti oikein. Olen tallennetaan väliaikaiseen muuttujaan, muuttunut arvo on b: n, ja sitten muuttunut b: n arvo on mitä on ollut. Mutta kun kääntää ja ajaa tämän ohjelma, pelkään, että ei ole menossa mitä näen. Tee, ei swap. dot slash, ei swap. Ja valitettavasti, mukaan printf, arvo x ja y, jopa jälkeen väitämme vaihtava niitä, on edelleen 1 ja 2. Nyt miksi? No, käy ilmi, että main, kun me kutsua tätä toimintoa swap, ohimennen x ja y argumentteina, se on itse asiassa kopioita x ja y, että johdetaan swap. Nimittäin niiden arvot 1 ja 2 ovat johdetaan swap kuin a ja b. Ja se on a ja b, että olemme lopulta vaihtamalla pää. Toisin sanoen, 1 tulee 2, 2 tulee 1. Mutta koska swap ei ole paluuta arvoa ja koska se sai jäljennöksen x ja y, se käyttäytyminen on mitään vaikutusta x ja y. Todellakin, ja b scoped, niin sanotusti, vaihtaa, kun taas x ja y ovat edelleen scoped to main. Joten meillä on ongelma. Mutta miten se korjataan?