1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> David J. MALAN: Să scrie un program în pe care vom încerca să schimbe valorile 3 00:00:02,700 --> 00:00:04,970 două variabile, x și y. 4 00:00:04,970 --> 00:00:07,490 În avans, am scris mult din deja acest program. 5 00:00:07,490 --> 00:00:11,130 În primul rând, am declara o variabilă, x, și se păstrează în ea valoarea, 1. 6 00:00:11,130 --> 00:00:14,120 Apoi am declara variabila y și depozitați în ea valoarea, 2. 7 00:00:14,120 --> 00:00:17,700 >> Apoi am proceda cu printf pentru a afișa valorile celor două variabile. 8 00:00:17,700 --> 00:00:21,090 Apoi am pretind cu un alt printf să fie schimbarea acestor variabile. 9 00:00:21,090 --> 00:00:23,690 Apoi am apela o funcție numită de swap. 10 00:00:23,690 --> 00:00:26,100 Și apoi am susțin că variabilele au fost schimbate. 11 00:00:26,100 --> 00:00:30,610 Și apoi am imprima că ceea ce pretind sunt noile valori ale lui x și y. 12 00:00:30,610 --> 00:00:32,030 >> Acum, ceea ce este această funcție schimb? 13 00:00:32,030 --> 00:00:34,970 Nu e ceva care vine cu C. Într-adevăr, dacă ne uităm la partea de sus a mea 14 00:00:34,970 --> 00:00:38,850 fișier, veți observa că m-am declarat un prototip pentru această funcție de swap 15 00:00:38,850 --> 00:00:42,750 precizând că este nevoie de două int, numit în mod arbitrar a și b, iar această 16 00:00:42,750 --> 00:00:44,300 Funcția nu se întoarce nimic. 17 00:00:44,300 --> 00:00:48,370 Deci, probabil, că face ceea ce spune în swap-uri a lui și valorile lui B. 18 00:00:48,370 --> 00:00:50,170 Să pună în aplicare acum swap. 19 00:00:50,170 --> 00:00:53,820 >> În primul rând, am de gând să declare o temporar variabilă și atribuiți-l 20 00:00:53,820 --> 00:00:57,260 valoarea într-o, deși aș putea doar la fel de ușor stocate în ea b. 21 00:00:57,260 --> 00:01:00,925 Am apoi merge pentru a schimba valoarea unei a fi egală cu cea din b. 22 00:01:00,925 --> 00:01:04,849 Și apoi în cele din urmă, am de gând să schimbe valoare de b a fi ceea ce a fost un dar este 23 00:01:04,849 --> 00:01:06,340 acum în temp. 24 00:01:06,340 --> 00:01:08,910 >> Acum, eu pretind ceea ce tocmai am facut este logic corect. 25 00:01:08,910 --> 00:01:12,780 Am păstrat-o într-o variabilă temporar, schimbat o valoare de a fi b lui, și apoi 26 00:01:12,780 --> 00:01:15,580 a schimbat valoarea b lui de a fi ceea ce a fost o. 27 00:01:15,580 --> 00:01:18,620 Dar când am compila și rula acest Programul, mi-e teamă că nu e 28 00:01:18,620 --> 00:01:20,140 merge ceea ce văd. 29 00:01:20,140 --> 00:01:21,625 >> Face, nu de swap. 30 00:01:21,625 --> 00:01:24,350 dot slash, nu de swap. 31 00:01:24,350 --> 00:01:27,560 Și, din păcate, în conformitate cu printf, valoarea lui x și y, chiar 32 00:01:27,560 --> 00:01:31,560 după ce ne-am pretinde a fi schimbarea ei, este încă 1 și 2. 33 00:01:31,560 --> 00:01:32,630 >> Acum, de ce este asta? 34 00:01:32,630 --> 00:01:36,160 Ei bine, se pare că, în principal, atunci când ne-am apela această funcție de swap, care trece în 35 00:01:36,160 --> 00:01:39,960 x și y ca argumente, este de fapt copii ale x și y, care 36 00:01:39,960 --> 00:01:41,310 sunt trecute în swap. 37 00:01:41,310 --> 00:01:45,430 Și anume, valorile 1 și 2 sunt trecut în schimb ca a și b. 38 00:01:45,430 --> 00:01:48,590 Și e un și b care suntem în cele din urmă schimbarea în principal. 39 00:01:48,590 --> 00:01:50,810 >> Adică, 1 devine 2, 2 devine 1. 40 00:01:50,810 --> 00:01:54,630 Dar, pentru că de swap nu are nici o valoare întoarcere și pentru că au primit copii ale x 41 00:01:54,630 --> 00:01:58,220 și y, e comportament a nici un efect asupra x și y. 42 00:01:58,220 --> 00:02:02,610 Î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ă 43 00:02:02,610 --> 00:02:03,990 luneta la principal. 44 00:02:03,990 --> 00:02:05,070 >> Deci, avem o problemă. 45 00:02:05,070 --> 00:02:06,320 Dar cum să-l repari? 46 00:02:06,320 --> 00:02:08,312