David J. MALAN: Kom ons skryf 'n program in wat ons probeer om die waardes van te ruil twee veranderlikes, x en y. In vooraf, het ek baie geskryf van hierdie program reeds. Eerstens, ek verklaar 'n veranderlike, x, en bêre in 'n waarde van 1. Toe het ek verklaar veranderlike y en stoor in dit die waarde, 2. Dan gaan ek met printf te vertoon die waardes van die twee veranderlikes. Dan eis ek met 'n ander printf te word uitruiling daardie veranderlikes. Dan noem ek 'n funksie genoem ruil. En dan het ek beweer dat die veranderlikes is omgeruil. En dan het ek druk dat wat ek beweer is die nuwe waardes van x en y. Nou wat is hierdie funksie ruil? Dit is nie iets wat kom met C. Inderdaad, as ons kyk na die top van my lêer, sal jy sien dat ek verklaar 'n prototipe vir hierdie funksie ruil spesifiseer dat dit neem twee ints, arbitrêr genoem A en B, en dit funksie nie terugkeer nie. So vermoedelik, dit doen wat dit sê in swaps A's en B's waardes. Kom ons kyk nou implementeer ruil. Eerstens, ek gaan 'n tydelike te verklaar veranderlike en opdra die waarde in 'n, al kon ek net so maklik gestoor in dit b. Ek is dan gaan die waarde te verander 'n gelyk aan dié in b te wees. En dan laastens, ek gaan om te verander die waarde van b te wees wat 'n was, maar is nou in temp. Nou kan ek eis wat ek het net gedoen is logies korrek is. Ek het 'n gestoor in 'n tydelike veranderlike, verander 'n waarde te wees b's, en dan verander b se waarde te wees wat 'n se was. Maar toe ek op te stel en die uitvoering van hierdie program, ek is bekommerd dat dit nie gaan wat ek sien. Maak geen ruil. dot streep, geen ruil. En ongelukkig, volgens printf, die waarde van x en y, selfs nadat ons daarop aanspraak maak dat die uitruiling hulle is nog steeds 1 en 2. Nou hoekom is dit? Wel, dit blyk dat in die belangrikste, wanneer ons noem dit funksie ruil, verby in x en y as argumente, dit is eintlik afskrifte van x en y wat geslaag in ruil. Naamlik, hul waardes 1 en 2 is geslaag het in ruil as a en b. En dit is A en B is dat ons uiteindelik uitruiling in die belangrikste. Dit is, 1 word 2, 2 word 1. Maar omdat ruil het geen terugkeer waarde en omdat dit ontvang afskrifte van x en y, dit is gedrag geen effek op x en y. Inderdaad, A en B is scoped, so te sê, te ruil, terwyl x en y bly scoped na. So het ons 'n probleem. Maar hoe dit op te los?