1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Laten we een programma schrijven in waarmee we proberen om de waarden van de swap 3 00:00:02,700 --> 00:00:04,970 twee variabelen, x en y. 4 00:00:04,970 --> 00:00:07,490 Van te voren heb ik veel geschreven van dit programma reeds. 5 00:00:07,490 --> 00:00:11,130 Eerst heb ik een variabele declareert, x, en opslaan daarin de waarde 1. 6 00:00:11,130 --> 00:00:14,120 Dan verklaar ik variabele y en opslaan daarin de waarde 2. 7 00:00:14,120 --> 00:00:17,700 >> Dan ga ik met printf om te laten zien de waarden van deze twee variabelen. 8 00:00:17,700 --> 00:00:21,090 Dan beweren ik met een andere printf te wisselen die variabelen. 9 00:00:21,090 --> 00:00:23,690 Dan roep ik een functie genaamd swap. 10 00:00:23,690 --> 00:00:26,100 En dan beweren dat ik de variabelen zijn verwisseld. 11 00:00:26,100 --> 00:00:30,610 En dan print ik dat wat ik beweer zijn de waarden van x en y. 12 00:00:30,610 --> 00:00:32,030 >> Nu, wat is deze functie swap? 13 00:00:32,030 --> 00:00:34,970 Het is niet iets dat komt met C. Sterker nog, als we kijken naar de top van mijn 14 00:00:34,970 --> 00:00:38,850 bestand, zult u merken dat ik heb verklaard een prototype voor deze functie swap 15 00:00:38,850 --> 00:00:42,750 specificeren dat het duurt twee ints, willekeurig genaamd a en b, en deze 16 00:00:42,750 --> 00:00:44,300 functie geeft niets. 17 00:00:44,300 --> 00:00:48,370 Dus vermoedelijk, het doet wat het zegt in swaps a's en waarden b's. 18 00:00:48,370 --> 00:00:50,170 Laten we nu implementeren swap. 19 00:00:50,170 --> 00:00:53,820 >> Ten eerste, ik ga een tijdelijke te verklaren variabele en ken 20 00:00:53,820 --> 00:00:57,260 de waarde in een, al zou ik dat gewoon zo gemakkelijk opgeslagen in het b. 21 00:00:57,260 --> 00:01:00,925 Ik ben vervolgens naar de waarde te veranderen van een gelijk aan het in b worden. 22 00:01:00,925 --> 00:01:04,849 En dan tot slot, ik ga veranderen de waarde van b te zijn wat een was, maar is 23 00:01:04,849 --> 00:01:06,340 nu in temp. 24 00:01:06,340 --> 00:01:08,910 >> Beweren nu ik wat ik net heb gedaan is logisch correct. 25 00:01:08,910 --> 00:01:12,780 Ik heb een opgeslagen in een tijdelijke variabele, veranderd van waarde zijn b's, en 26 00:01:12,780 --> 00:01:15,580 veranderde waarde b's te zijn wat een was. 27 00:01:15,580 --> 00:01:18,620 Maar toen ik compileren en uitvoeren van deze programma, ik ben bang dat het niet 28 00:01:18,620 --> 00:01:20,140 gaan wat ik zie. 29 00:01:20,140 --> 00:01:21,625 >> Maken, geen swap. 30 00:01:21,625 --> 00:01:24,350 dot slash, geen swap. 31 00:01:24,350 --> 00:01:27,560 En helaas, volgens printf, de waarde van x en y, zelfs 32 00:01:27,560 --> 00:01:31,560 nadat we beweren te zijn swapping hen nog 1 en 2. 33 00:01:31,560 --> 00:01:32,630 >> Waarom is dat? 34 00:01:32,630 --> 00:01:36,160 Nou, het blijkt dat in de belangrijkste, als we noemen deze functie swap, passeren in 35 00:01:36,160 --> 00:01:39,960 x en y als argumenten, het is eigenlijk afschriften van x en y dat 36 00:01:39,960 --> 00:01:41,310 worden doorgegeven aan de swap. 37 00:01:41,310 --> 00:01:45,430 Namelijk, de waarden 1 en 2 overgegaan in ruil als a en b. 38 00:01:45,430 --> 00:01:48,590 En het is een en b dat we uiteindelijk swapping in de belangrijkste. 39 00:01:48,590 --> 00:01:50,810 >> Dat wil zeggen, 1 wordt 2, 2 wordt 1. 40 00:01:50,810 --> 00:01:54,630 Maar omdat swap heeft geen return waarde en omdat het ontvangen kopieën van x 41 00:01:54,630 --> 00:01:58,220 en y is het gedrag geen effect op x en y. 42 00:01:58,220 --> 00:02:02,610 Inderdaad, a en b zijn scoped, om zo te zeggen, om te wisselen, terwijl x en y blijven 43 00:02:02,610 --> 00:02:03,990 binnen het bereik van de belangrijkste. 44 00:02:03,990 --> 00:02:05,070 >> Dus hebben we een probleem. 45 00:02:05,070 --> 00:02:06,320 Maar hoe dit te verhelpen? 46 00:02:06,320 --> 00:02:08,312