1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Pieņemsim uzrakstīt programmu ko mēs cenšamies mijmaiņas vērtības 3 00:00:02,700 --> 00:00:04,970 divi mainīgie, x un y. 4 00:00:04,970 --> 00:00:07,490 Iepriekš, es esmu uzrakstījis daudz Šīs programmas jau. 5 00:00:07,490 --> 00:00:11,130 Pirmkārt, es apliecinu, mainīgu, X, un uzglabāt to vērtību, 1. 6 00:00:11,130 --> 00:00:14,120 Tad es apliecinu, mainīgo y un uzglabāt to vērtību, 2. 7 00:00:14,120 --> 00:00:17,700 >> Tad es turpināt printf lai parādītu vērtības šiem diviem mainīgajiem. 8 00:00:17,700 --> 00:00:21,090 Tad es varu pieprasīt ar citu printf kas pārnešana tos faktorus. 9 00:00:21,090 --> 00:00:23,690 Tad es aicinu funkciju sauc swap. 10 00:00:23,690 --> 00:00:26,100 Un tad es apgalvo, ka mainīgie Ir aizstāja. 11 00:00:26,100 --> 00:00:30,610 Un tad es izdrukāt ka tas, ko es varu pieprasīt ir jaunas vērtības x un y. 12 00:00:30,610 --> 00:00:32,030 >> Tagad to, kas ir šī funkcija swap? 13 00:00:32,030 --> 00:00:34,970 Tas nav kaut kas, kas nāk ar C. Patiešām, ja mēs skatāmies uz augšā manu 14 00:00:34,970 --> 00:00:38,850 failu, jūs ievērosiet, ka es esmu deklarēts prototips šīs funkcijas swap 15 00:00:38,850 --> 00:00:42,750 norādot, ka tas aizņem divas Ints, patvaļīgi sauc a un b, un šis 16 00:00:42,750 --> 00:00:44,300 funkcija neatgriež neko. 17 00:00:44,300 --> 00:00:48,370 Tātad, iespējams, tas, ko tā saka ar mijmaiņas darījumiem ir pienācis un B vērtībām. 18 00:00:48,370 --> 00:00:50,170 Pieņemsim tagad īstenot swap. 19 00:00:50,170 --> 00:00:53,820 >> Pirmkārt, es esmu gatavojas pasludināt pagaidu mainīga un piešķirt tai 20 00:00:53,820 --> 00:00:57,260 vērtība, lai gan es varētu tikai kā viegli uzglabāt tajā b. 21 00:00:57,260 --> 00:01:00,925 Es tad iet, lai mainītu vērtību gada ir vienāda ar to b. 22 00:01:00,925 --> 00:01:04,849 Un tad visbeidzot, es esmu gatavojas mainīt b vērtību, lai būtu, kas bija, bet ir 23 00:01:04,849 --> 00:01:06,340 tagad temp. 24 00:01:06,340 --> 00:01:08,910 >> Tagad es pieprasīt to, ko es esmu tikko veikts ir loģiski pareizs. 25 00:01:08,910 --> 00:01:12,780 Esmu uzglabā ar pagaidu mainīgo, mainījusies vērtību būt b s, un pēc tam 26 00:01:12,780 --> 00:01:15,580 mainīja B vērtību, lai būtu, kas ir bijis. 27 00:01:15,580 --> 00:01:18,620 Bet, kad es apkopot un palaist šo programmu, es jāuztraucas, ka tas nav 28 00:01:18,620 --> 00:01:20,140 notiek tas, ko es redzu. 29 00:01:20,140 --> 00:01:21,625 >> Veikt, nav swap. 30 00:01:21,625 --> 00:01:24,350 dot slash, bez swap. 31 00:01:24,350 --> 00:01:27,560 Un Diemžēl, saskaņā ar printf, vērtība x un y, pat 32 00:01:27,560 --> 00:01:31,560 kad mēs apgalvot, ka pārnešana tos, joprojām ir 1 un 2. 33 00:01:31,560 --> 00:01:32,630 >> Tagad, kāpēc tā? 34 00:01:32,630 --> 00:01:36,160 Nu, izrādās, ka galvenais, kad mēs nosaukt šo funkciju swap, kas iet 35 00:01:36,160 --> 00:01:39,960 x un y kā argumenti, tas ir faktiski kopijas, x un y, ka 36 00:01:39,960 --> 00:01:41,310 ir pagājis uz swap. 37 00:01:41,310 --> 00:01:45,430 Proti, to vērtības 1 un 2 nonākt swap kā a un b. 38 00:01:45,430 --> 00:01:48,590 Un tas ir, un b, ka mēs esam galu galā pārnešana galvenais. 39 00:01:48,590 --> 00:01:50,810 >> Tas nozīmē, ka 1 kļūst par 2, 2 kļūst par 1. 40 00:01:50,810 --> 00:01:54,630 Bet tāpēc, ka swap nav atgriezto vērtību un tāpēc, ka tā ir saņēmusi kopijas x 41 00:01:54,630 --> 00:01:58,220 un y, tā uzvedība ir Ietekmi uz x un y. 42 00:01:58,220 --> 00:02:02,610 Patiešām, un b ir scoped, tā sakot, swap, bet x un y paliek 43 00:02:02,610 --> 00:02:03,990 scoped uz galveno. 44 00:02:03,990 --> 00:02:05,070 >> Tāpēc mums ir problēma. 45 00:02:05,070 --> 00:02:06,320 Bet kā to salabot? 46 00:02:06,320 --> 00:02:08,312