David J. Malan: Leiskite parašyti programą kurį mes stengiamės sukeisti vertybes du kintamieji X ir Y. Iš anksto, aš parašiau daug Šios programos jau. Pirma, aš pareiškiu, kintamasis, x, ir laikyti ją vertę, 1. Tada aš deklaruoti kintamojo y ir laikyti ją vertę, 2. Tada darau su printf rodyti tų dviejų kintamųjų reikšmės. Tada galiu reikalauti kitu printf būti apsikeičiama kintamuosius. Tada aš vadinu funkcija vadinama swap. Ir tada aš teigia, kad kintamieji buvo sukeisti. Ir tada aš spausdinti tai, ką galiu kreiptis yra naujos reikšmės x ir y. Dabar, kas yra ši funkcija apsikeitimo? Tai nėra kažkas, kad ateina su C. Iš tiesų, jei pažvelgsime į viršų mano failą, jūs pastebėsite, kad aš paskelbė Šiai funkcijai apsikeitimo prototipas nurodant, kad jis trunka dvi Ints, savavališkai vadinamas a ir b, o tai funkcija negrąžina nieko. Taigi, matyt, tai ką ji sako ir apsikeitimo a "ir" b vertybes. Leiskite dabar įgyvendinti apsikeitimo. Pirma, aš ruošiuosi paskelbti laikinai kintama ir priskirti jai į vertę, nors galėjau tik kaip lengvai saugomi it b. Aš tada keisis vertę iš būti lygus, kad b. Ir tada galiausiai, aš ruošiuosi keisti vertė b, kad kas buvo, bet yra dabar temp. Dabar galiu reikalauti tai, ką aš ką tik padaryta logiškai teisinga. Aš saugomi laikinoje kintamąjį, pasikeitė vertę būti pusryčiai, tada pasikeitė B vertę būtų ką s buvo. Bet kai aš kompiliuoti ir paleisti tai programa, aš nerimauti, kad ne vyksta, ką aš matau. Padaryti, jokio apsikeitimo. dot velniop, jokio apsikeitimo. Ir, deja, pagal printf, X ir Y vertė, net kai mes teigia, kad būti apsikeičiama jiems vis dar 1 ir 2. Dabar kodėl tai, kad? Na, paaiškėja, kad pagrindinis, kai mes skambinti Ši funkcija swap, einančios x ir y argumentais, tai tikrai kopijos x ir y, kad yra perduodami į apsikeitimo. Būtent jų reikšmės 1 ir 2 dalys perėjo į apsikeitimo kaip ir b. Ir tai a ir b, kad mes galiausiai Swapping pagrindinis. Tai reiškia, kad 1 tampa 2, 2 tampa 1. Bet kadangi apsikeitimo neturi grąžos vertę ir kadangi ji gavo kopijas x ir y, tai elgesys ne pagal x ir y poveikis. Iš tiesų, a ir b yra scoped, taip sakant, apsikeitimo, o x ir y lieka scoped į pagrindinį. Taigi, mes turime problemą. Bet kaip ją išspręsti?