1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> David J. MALAN: Kom ons skryf 'n program in wat ons probeer om die waardes van te ruil 3 00:00:02,700 --> 00:00:04,970 twee veranderlikes, x en y. 4 00:00:04,970 --> 00:00:07,490 In vooraf, het ek baie geskryf van hierdie program reeds. 5 00:00:07,490 --> 00:00:11,130 Eerstens, ek verklaar 'n veranderlike, x, en bêre in 'n waarde van 1. 6 00:00:11,130 --> 00:00:14,120 Toe het ek verklaar veranderlike y en stoor in dit die waarde, 2. 7 00:00:14,120 --> 00:00:17,700 >> Dan gaan ek met printf te vertoon die waardes van die twee veranderlikes. 8 00:00:17,700 --> 00:00:21,090 Dan eis ek met 'n ander printf te word uitruiling daardie veranderlikes. 9 00:00:21,090 --> 00:00:23,690 Dan noem ek 'n funksie genoem ruil. 10 00:00:23,690 --> 00:00:26,100 En dan het ek beweer dat die veranderlikes is omgeruil. 11 00:00:26,100 --> 00:00:30,610 En dan het ek druk dat wat ek beweer is die nuwe waardes van x en y. 12 00:00:30,610 --> 00:00:32,030 >> Nou wat is hierdie funksie ruil? 13 00:00:32,030 --> 00:00:34,970 Dit is nie iets wat kom met C. Inderdaad, as ons kyk na die top van my 14 00:00:34,970 --> 00:00:38,850 lêer, sal jy sien dat ek verklaar 'n prototipe vir hierdie funksie ruil 15 00:00:38,850 --> 00:00:42,750 spesifiseer dat dit neem twee ints, arbitrêr genoem A en B, en dit 16 00:00:42,750 --> 00:00:44,300 funksie nie terugkeer nie. 17 00:00:44,300 --> 00:00:48,370 So vermoedelik, dit doen wat dit sê in swaps A's en B's waardes. 18 00:00:48,370 --> 00:00:50,170 Kom ons kyk nou implementeer ruil. 19 00:00:50,170 --> 00:00:53,820 >> Eerstens, ek gaan 'n tydelike te verklaar veranderlike en opdra 20 00:00:53,820 --> 00:00:57,260 die waarde in 'n, al kon ek net so maklik gestoor in dit b. 21 00:00:57,260 --> 00:01:00,925 Ek is dan gaan die waarde te verander 'n gelyk aan dié in b te wees. 22 00:01:00,925 --> 00:01:04,849 En dan laastens, ek gaan om te verander die waarde van b te wees wat 'n was, maar is 23 00:01:04,849 --> 00:01:06,340 nou in temp. 24 00:01:06,340 --> 00:01:08,910 >> Nou kan ek eis wat ek het net gedoen is logies korrek is. 25 00:01:08,910 --> 00:01:12,780 Ek het 'n gestoor in 'n tydelike veranderlike, verander 'n waarde te wees b's, en dan 26 00:01:12,780 --> 00:01:15,580 verander b se waarde te wees wat 'n se was. 27 00:01:15,580 --> 00:01:18,620 Maar toe ek op te stel en die uitvoering van hierdie program, ek is bekommerd dat dit nie 28 00:01:18,620 --> 00:01:20,140 gaan wat ek sien. 29 00:01:20,140 --> 00:01:21,625 >> Maak geen ruil. 30 00:01:21,625 --> 00:01:24,350 dot streep, geen ruil. 31 00:01:24,350 --> 00:01:27,560 En ongelukkig, volgens printf, die waarde van x en y, selfs 32 00:01:27,560 --> 00:01:31,560 nadat ons daarop aanspraak maak dat die uitruiling hulle is nog steeds 1 en 2. 33 00:01:31,560 --> 00:01:32,630 >> Nou hoekom is dit? 34 00:01:32,630 --> 00:01:36,160 Wel, dit blyk dat in die belangrikste, wanneer ons noem dit funksie ruil, verby in 35 00:01:36,160 --> 00:01:39,960 x en y as argumente, dit is eintlik afskrifte van x en y wat 36 00:01:39,960 --> 00:01:41,310 geslaag in ruil. 37 00:01:41,310 --> 00:01:45,430 Naamlik, hul waardes 1 en 2 is geslaag het in ruil as a en b. 38 00:01:45,430 --> 00:01:48,590 En dit is A en B is dat ons uiteindelik uitruiling in die belangrikste. 39 00:01:48,590 --> 00:01:50,810 >> Dit is, 1 word 2, 2 word 1. 40 00:01:50,810 --> 00:01:54,630 Maar omdat ruil het geen terugkeer waarde en omdat dit ontvang afskrifte van x 41 00:01:54,630 --> 00:01:58,220 en y, dit is gedrag geen effek op x en y. 42 00:01:58,220 --> 00:02:02,610 Inderdaad, A en B is scoped, so te sê, te ruil, terwyl x en y bly 43 00:02:02,610 --> 00:02:03,990 scoped na. 44 00:02:03,990 --> 00:02:05,070 >> So het ons 'n probleem. 45 00:02:05,070 --> 00:02:06,320 Maar hoe dit op te los? 46 00:02:06,320 --> 00:02:08,312