David J. MALAN: Să scrie un program în pe care vom încerca să schimbe valorile două variabile, x și y. În avans, am scris mult din deja acest program. În primul rând, am declara o variabilă, x, și se păstrează în ea valoarea, 1. Apoi am declara variabila y și depozitați în ea valoarea, 2. Apoi am proceda cu printf pentru a afișa valorile celor două variabile. Apoi am pretind cu un alt printf să fie schimbarea acestor variabile. Apoi am apela o funcție numită de swap. Și apoi am susțin că variabilele au fost schimbate. Și apoi am imprima că ceea ce pretind sunt noile valori ale lui x și y. Acum, ceea ce este această funcție schimb? Nu e ceva care vine cu C. Într-adevăr, dacă ne uităm la partea de sus a mea fișier, veți observa că m-am declarat un prototip pentru această funcție de swap precizând că este nevoie de două int, numit în mod arbitrar a și b, iar această Funcția nu se întoarce nimic. Deci, probabil, că face ceea ce spune în swap-uri a lui și valorile lui B. Să pună în aplicare acum swap. În primul rând, am de gând să declare o temporar variabilă și atribuiți-l valoarea într-o, deși aș putea doar la fel de ușor stocate în ea b. Am apoi merge pentru a schimba valoarea unei a fi egală cu cea din b. Și apoi în cele din urmă, am de gând să schimbe valoare de b a fi ceea ce a fost un dar este acum în temp. Acum, eu pretind ceea ce tocmai am facut este logic corect. Am păstrat-o într-o variabilă temporar, schimbat o valoare de a fi b lui, și apoi a schimbat valoarea b lui de a fi ceea ce a fost o. Dar când am compila și rula acest Programul, mi-e teamă că nu e merge ceea ce văd. Face, nu de swap. dot slash, nu de swap. Și, din păcate, în conformitate cu printf, valoarea lui x și y, chiar după ce ne-am pretinde a fi schimbarea ei, este încă 1 și 2. Acum, de ce este asta? Ei bine, se pare că, în principal, atunci când ne-am apela această funcție de swap, care trece în x și y ca argumente, este de fapt copii ale x și y, care sunt trecute în swap. Și anume, valorile 1 și 2 sunt trecut în schimb ca a și b. Și e un și b care suntem în cele din urmă schimbarea în principal. Adică, 1 devine 2, 2 devine 1. Dar, pentru că de swap nu are nici o valoare întoarcere și pentru că au primit copii ale x și y, e comportament a nici un efect asupra x și y. Într-adevăr, a și b sunt luneta, ca să spunem așa, de a schimba, în timp ce x și y să rămână luneta la principal. Deci, avem o problemă. Dar cum să-l repari?