>> 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?