1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. MALAN: Lad os skrive et program i som vi forsøger at bytte de værdier af 3 00:00:02,700 --> 00:00:04,970 to variable, x og y. 4 00:00:04,970 --> 00:00:07,490 På forhånd har jeg skrevet meget af dette program allerede. 5 00:00:07,490 --> 00:00:11,130 Først vil jeg erklære en variabel, x, og gemmer i den værdien 1. 6 00:00:11,130 --> 00:00:14,120 Så jeg erklære variable y og opbevares i den værdien, 2.. 7 00:00:14,120 --> 00:00:17,700 >> Fortsæt derefter jeg med printf at vise værdierne af disse to variable. 8 00:00:17,700 --> 00:00:21,090 Så jeg hævder med en anden printf at bytte disse variabler. 9 00:00:21,090 --> 00:00:23,690 Så kalder jeg en funktion kaldet swap. 10 00:00:23,690 --> 00:00:26,100 Og så påstår jeg, at de variable er blevet byttet. 11 00:00:26,100 --> 00:00:30,610 Og så vil jeg printe ud, at hvad jeg hævder er de nye værdier af x og y. 12 00:00:30,610 --> 00:00:32,030 >> Nu, hvad er denne funktion swap? 13 00:00:32,030 --> 00:00:34,970 Det er ikke noget, der kommer med C. Ja, hvis vi ser på toppen af ​​min 14 00:00:34,970 --> 00:00:38,850 fil, vil du bemærke, at jeg har erklæret en prototype for denne funktion swap 15 00:00:38,850 --> 00:00:42,750 præcisering af, at det tager to ints, vilkårligt kaldes a og b, og det 16 00:00:42,750 --> 00:00:44,300 funktionen returnerer ikke noget. 17 00:00:44,300 --> 00:00:48,370 Så formentlig, det gør hvad det siger i swaps A'er og B'er værdier. 18 00:00:48,370 --> 00:00:50,170 Lad os nu gennemføre swap. 19 00:00:50,170 --> 00:00:53,820 >> Først vil jeg erklære en midlertidig variabel og tildele den 20 00:00:53,820 --> 00:00:57,260 værdien i en, selvom jeg kunne bare som nemt opbevares i det b.. 21 00:00:57,260 --> 00:01:00,925 Jeg derefter gå til at ændre værdien af at være den samme som i b.. 22 00:01:00,925 --> 00:01:04,849 Og så til sidst, vil jeg ændre værdien af ​​b at være, hvad en var, men er 23 00:01:04,849 --> 00:01:06,340 nu temp. 24 00:01:06,340 --> 00:01:08,910 >> Nu hævder jeg, hvad jeg lige har gjort er logisk korrekte. 25 00:01:08,910 --> 00:01:12,780 Jeg har gemt en i en midlertidig variabel, ændret en værdi at være b s, og derefter 26 00:01:12,780 --> 00:01:15,580 ændrede b værdi at være, hvad en s var. 27 00:01:15,580 --> 00:01:18,620 Men når jeg kompilere og køre dette program, jeg bange for, at det ikke 28 00:01:18,620 --> 00:01:20,140 går, hvad jeg ser. 29 00:01:20,140 --> 00:01:21,625 >> Foretag ingen swap. 30 00:01:21,625 --> 00:01:24,350 dot slash, ingen swap. 31 00:01:24,350 --> 00:01:27,560 Og desværre, ifølge printf, værdien af ​​x og y, selv 32 00:01:27,560 --> 00:01:31,560 efter at vi hævder at bytte dem, er stadig 1 og 2. 33 00:01:31,560 --> 00:01:32,630 >> Nu hvorfor er det? 34 00:01:32,630 --> 00:01:36,160 Tja, det viser sig, at i hovedsagen, da vi kalder denne funktion swap, der passerer i 35 00:01:36,160 --> 00:01:39,960 x og y som argumenter, er det faktisk kopier af x og y, der 36 00:01:39,960 --> 00:01:41,310 er gået ind i swap. 37 00:01:41,310 --> 00:01:45,430 Nemlig, deres værdier 1 og 2 gået ind swap som a og b. 38 00:01:45,430 --> 00:01:48,590 Og det er a og b, at vi i sidste ende bytte i main. 39 00:01:48,590 --> 00:01:50,810 >> Det vil sige, 1 bliver 2, 2 bliver 1. 40 00:01:50,810 --> 00:01:54,630 Men fordi swap har ingen returværdi og fordi det modtaget kopier af x 41 00:01:54,630 --> 00:01:58,220 og y, er det adfærd har ingen effekt på x og y. 42 00:01:58,220 --> 00:02:02,610 Faktisk a og b scoped, så at sige, at bytte, og x og y er fortsat 43 00:02:02,610 --> 00:02:03,990 scoped til main. 44 00:02:03,990 --> 00:02:05,070 >> Så vi har et problem. 45 00:02:05,070 --> 00:02:06,320 Men hvordan man kan løse det? 46 00:02:06,320 --> 00:02:08,312