1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> David J. Malan: Leiskite parašyti programą kurį mes stengiamės sukeisti vertybes 3 00:00:02,700 --> 00:00:04,970 du kintamieji X ir Y. 4 00:00:04,970 --> 00:00:07,490 Iš anksto, aš parašiau daug Šios programos jau. 5 00:00:07,490 --> 00:00:11,130 Pirma, aš pareiškiu, kintamasis, x, ir laikyti ją vertę, 1. 6 00:00:11,130 --> 00:00:14,120 Tada aš deklaruoti kintamojo y ir laikyti ją vertę, 2. 7 00:00:14,120 --> 00:00:17,700 >> Tada darau su printf rodyti tų dviejų kintamųjų reikšmės. 8 00:00:17,700 --> 00:00:21,090 Tada galiu reikalauti kitu printf būti apsikeičiama kintamuosius. 9 00:00:21,090 --> 00:00:23,690 Tada aš vadinu funkcija vadinama swap. 10 00:00:23,690 --> 00:00:26,100 Ir tada aš teigia, kad kintamieji buvo sukeisti. 11 00:00:26,100 --> 00:00:30,610 Ir tada aš spausdinti tai, ką galiu kreiptis yra naujos reikšmės x ir y. 12 00:00:30,610 --> 00:00:32,030 >> Dabar, kas yra ši funkcija apsikeitimo? 13 00:00:32,030 --> 00:00:34,970 Tai nėra kažkas, kad ateina su C. Iš tiesų, jei pažvelgsime į viršų mano 14 00:00:34,970 --> 00:00:38,850 failą, jūs pastebėsite, kad aš paskelbė Šiai funkcijai apsikeitimo prototipas 15 00:00:38,850 --> 00:00:42,750 nurodant, kad jis trunka dvi Ints, savavališkai vadinamas a ir b, o tai 16 00:00:42,750 --> 00:00:44,300 funkcija negrąžina nieko. 17 00:00:44,300 --> 00:00:48,370 Taigi, matyt, tai ką ji sako ir apsikeitimo a "ir" b vertybes. 18 00:00:48,370 --> 00:00:50,170 Leiskite dabar įgyvendinti apsikeitimo. 19 00:00:50,170 --> 00:00:53,820 >> Pirma, aš ruošiuosi paskelbti laikinai kintama ir priskirti jai 20 00:00:53,820 --> 00:00:57,260 į vertę, nors galėjau tik kaip lengvai saugomi it b. 21 00:00:57,260 --> 00:01:00,925 Aš tada keisis vertę iš būti lygus, kad b. 22 00:01:00,925 --> 00:01:04,849 Ir tada galiausiai, aš ruošiuosi keisti vertė b, kad kas buvo, bet yra 23 00:01:04,849 --> 00:01:06,340 dabar temp. 24 00:01:06,340 --> 00:01:08,910 >> Dabar galiu reikalauti tai, ką aš ką tik padaryta logiškai teisinga. 25 00:01:08,910 --> 00:01:12,780 Aš saugomi laikinoje kintamąjį, pasikeitė vertę būti pusryčiai, tada 26 00:01:12,780 --> 00:01:15,580 pasikeitė B vertę būtų ką s buvo. 27 00:01:15,580 --> 00:01:18,620 Bet kai aš kompiliuoti ir paleisti tai programa, aš nerimauti, kad ne 28 00:01:18,620 --> 00:01:20,140 vyksta, ką aš matau. 29 00:01:20,140 --> 00:01:21,625 >> Padaryti, jokio apsikeitimo. 30 00:01:21,625 --> 00:01:24,350 dot velniop, jokio apsikeitimo. 31 00:01:24,350 --> 00:01:27,560 Ir, deja, pagal printf, X ir Y vertė, net 32 00:01:27,560 --> 00:01:31,560 kai mes teigia, kad būti apsikeičiama jiems vis dar 1 ir 2. 33 00:01:31,560 --> 00:01:32,630 >> Dabar kodėl tai, kad? 34 00:01:32,630 --> 00:01:36,160 Na, paaiškėja, kad pagrindinis, kai mes skambinti Ši funkcija swap, einančios 35 00:01:36,160 --> 00:01:39,960 x ir y argumentais, tai tikrai kopijos x ir y, kad 36 00:01:39,960 --> 00:01:41,310 yra perduodami į apsikeitimo. 37 00:01:41,310 --> 00:01:45,430 Būtent jų reikšmės 1 ir 2 dalys perėjo į apsikeitimo kaip ir b. 38 00:01:45,430 --> 00:01:48,590 Ir tai a ir b, kad mes galiausiai Swapping pagrindinis. 39 00:01:48,590 --> 00:01:50,810 >> Tai reiškia, kad 1 tampa 2, 2 tampa 1. 40 00:01:50,810 --> 00:01:54,630 Bet kadangi apsikeitimo neturi grąžos vertę ir kadangi ji gavo kopijas x 41 00:01:54,630 --> 00:01:58,220 ir y, tai elgesys ne pagal x ir y poveikis. 42 00:01:58,220 --> 00:02:02,610 Iš tiesų, a ir b yra scoped, taip sakant, apsikeitimo, o x ir y lieka 43 00:02:02,610 --> 00:02:03,990 scoped į pagrindinį. 44 00:02:03,990 --> 00:02:05,070 >> Taigi, mes turime problemą. 45 00:02:05,070 --> 00:02:06,320 Bet kaip ją išspręsti? 46 00:02:06,320 --> 00:02:08,312