1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Olgem kirjutada programmi mida me püüame vahetada väärtused 3 00:00:02,700 --> 00:00:04,970 kahe muutuja x ja y. 4 00:00:04,970 --> 00:00:07,490 Eelnevalt olen kirjutanud palju Selle programmi juba. 5 00:00:07,490 --> 00:00:11,130 Esiteks, ma kuulutada muutuja, x, ja salvestada see väärtus, 1. 6 00:00:11,130 --> 00:00:14,120 Siis ma kuulutada muutuja y ja salvestada see väärtus, 2. 7 00:00:14,120 --> 00:00:17,700 >> Siis ma jätkata printf kuvamiseks väärtused nende kahe muutuja. 8 00:00:17,700 --> 00:00:21,090 Siis ma väita teise printf tuleb vahetada need muutujad. 9 00:00:21,090 --> 00:00:23,690 Siis ma kutsun funktsioon nimega swap. 10 00:00:23,690 --> 00:00:26,100 Ja siis ma väita, et muutujad on vahetatud. 11 00:00:26,100 --> 00:00:30,610 Ja siis ma välja printida, et mida ma väita, on uued väärtused x ja y. 12 00:00:30,610 --> 00:00:32,030 >> Nüüd sellest, mis on selle funktsiooni swap? 13 00:00:32,030 --> 00:00:34,970 See ei ole midagi, mis on kaasas C. Tõepoolest, kui me vaatame peale minu 14 00:00:34,970 --> 00:00:38,850 fail, märkad, et ma olen kuulutanud prototüüp see funktsioon swap 15 00:00:38,850 --> 00:00:42,750 täpsustades, et ta võtab kaks ints, omavoliliselt kutsutakse ja b ning see 16 00:00:42,750 --> 00:00:44,300 funktsioon ei tagasta midagi. 17 00:00:44,300 --> 00:00:48,370 Nii arvatavasti see, mida ta ütleb aastal vahetustehingud ja B väärtused. 18 00:00:48,370 --> 00:00:50,170 Olgem nüüd rakendada swap. 19 00:00:50,170 --> 00:00:53,820 >> Esiteks, ma kinnitan, ajutine muutuja ja anda sellele 20 00:00:53,820 --> 00:00:57,260 väärtus, kuigi ma võiksin lihtsalt nii lihtsalt salvestatud see b. 21 00:00:57,260 --> 00:01:00,925 Ma siis lähen väärtuse muutmiseks of võrduma et b. 22 00:01:00,925 --> 00:01:04,849 Ja siis lõpuks, ma lähen muuta väärtus b olla see oli vaid 23 00:01:04,849 --> 00:01:06,340 nüüd temp. 24 00:01:06,340 --> 00:01:08,910 >> Nüüd ma väita, mida ma just teinud on loogiliselt korrektne. 25 00:01:08,910 --> 00:01:12,780 Olen salvestatud ajutisse muutuja, muutunud väärtus olema B, ja siis 26 00:01:12,780 --> 00:01:15,580 muutunud b väärtust, et see, mida tema oli. 27 00:01:15,580 --> 00:01:18,620 Aga kui ma kompileerida ja käivitada programm, ma kardan, et see pole 28 00:01:18,620 --> 00:01:20,140 läheb, mida ma näen. 29 00:01:20,140 --> 00:01:21,625 >> Tee ei swap. 30 00:01:21,625 --> 00:01:24,350 dot kärpida, ei swap. 31 00:01:24,350 --> 00:01:27,560 Ja kahjuks, vastavalt printf, väärtuse x ja y, isegi 32 00:01:27,560 --> 00:01:31,560 pärast me väita, et vahetada neid on veel 1 ja 2. 33 00:01:31,560 --> 00:01:32,630 >> Nüüd, miks see nii on? 34 00:01:32,630 --> 00:01:36,160 Noh, tuli välja, et peamine, kui me nimetame seda funktsiooni swap, mis kulgeb 35 00:01:36,160 --> 00:01:39,960 x ja y argumendina, et see on tegelikult koopiaid x ja y, mis 36 00:01:39,960 --> 00:01:41,310 on vastu võetud, swap. 37 00:01:41,310 --> 00:01:45,430 Nimelt nende väärtuste 1 ja 2 on läks swap ja b. 38 00:01:45,430 --> 00:01:48,590 Ja see on a ja b, et me oleme lõpuks Vahetatakse peamistes. 39 00:01:48,590 --> 00:01:50,810 >> See tähendab, et 1 muutub 2, 2 muutub 1. 40 00:01:50,810 --> 00:01:54,630 Aga kuna swap puudub tagastatav väärtus ja kuna ta sai koopiad x 41 00:01:54,630 --> 00:01:58,220 ja y, see käitumine on mingit mõju x ja y. 42 00:01:58,220 --> 00:02:02,610 Tõepoolest, ja b on rivist niiöelda, swap, et x ja y jääma 43 00:02:02,610 --> 00:02:03,990 scoped peamine. 44 00:02:03,990 --> 00:02:05,070 >> Nii et meil on probleem. 45 00:02:05,070 --> 00:02:06,320 Aga kuidas seda parandada? 46 00:02:06,320 --> 00:02:08,312