1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. MALAN: La oss skrive et program i som vi prøver å bytte verdiene av 3 00:00:02,700 --> 00:00:04,970 to variabler, x og y. 4 00:00:04,970 --> 00:00:07,490 På forhånd har jeg skrevet mye av dette programmet allerede. 5 00:00:07,490 --> 00:00:11,130 Først, jeg erklærer en variabel, x, og lagre i den verdien, en. 6 00:00:11,130 --> 00:00:14,120 Så jeg erklærer variabel y og lagre i den verdien, to. 7 00:00:14,120 --> 00:00:17,700 >> Så jeg fortsetter med printf å vise verdiene av disse to variable. 8 00:00:17,700 --> 00:00:21,090 Så jeg hevder med en annen printf skal bytte disse variablene. 9 00:00:21,090 --> 00:00:23,690 Så jeg kaller en funksjon kalt swap. 10 00:00:23,690 --> 00:00:26,100 Og da jeg hevder at variablene har blitt byttet. 11 00:00:26,100 --> 00:00:30,610 Og så skriver jeg ut at det jeg hevder er de nye verdiene for x og y. 12 00:00:30,610 --> 00:00:32,030 >> Nå hva er denne funksjonen swap? 13 00:00:32,030 --> 00:00:34,970 Det er ikke noe som kommer med C. Faktisk, hvis vi ser på toppen av min 14 00:00:34,970 --> 00:00:38,850 fil, vil du se at jeg har erklært en prototype for denne funksjonen swap 15 00:00:38,850 --> 00:00:42,750 spesifisere at det tar to ints, vilkårlig kalles a og b, og denne 16 00:00:42,750 --> 00:00:44,300 Funksjonen returnerer ikke noe. 17 00:00:44,300 --> 00:00:48,370 Så formodentlig, det gjør hva det står i swap-A og b verdier. 18 00:00:48,370 --> 00:00:50,170 La oss nå gjennomføre swap. 19 00:00:50,170 --> 00:00:53,820 >> Først, jeg kommer til å erklære en midlertidig variable og tilordne til det 20 00:00:53,820 --> 00:00:57,260 verdien i en, selv om jeg bare kunne så enkelt lagres i det b. 21 00:00:57,260 --> 00:01:00,925 Jeg deretter kommer til å endre verdien fra et til å være lik det i b. 22 00:01:00,925 --> 00:01:04,849 Og så til slutt, jeg kommer til å endre verdien av b å være hva en var, men er 23 00:01:04,849 --> 00:01:06,340 nå i temp. 24 00:01:06,340 --> 00:01:08,910 >> Nå jeg hevder det jeg nettopp har gjort er logisk riktig. 25 00:01:08,910 --> 00:01:12,780 Jeg har lagret en i en midlertidig variabel, endret en verdi å være b ', og deretter 26 00:01:12,780 --> 00:01:15,580 endret b verdi å være hva en var. 27 00:01:15,580 --> 00:01:18,620 Men når jeg kompilere og kjøre denne programmet, jeg er redd for at det ikke 28 00:01:18,620 --> 00:01:20,140 kommer det jeg ser. 29 00:01:20,140 --> 00:01:21,625 >> Lag, 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 dessverre, i henhold til printf, verdien av x og y, selv 32 00:01:27,560 --> 00:01:31,560 etter at vi hevder å være å bytte dem, er fortsatt 1 og 2. 33 00:01:31,560 --> 00:01:32,630 >> Nå hvorfor er det? 34 00:01:32,630 --> 00:01:36,160 Vel, det viser seg at det i hovedsak når vi kaller denne funksjonen swap, passerer i 35 00:01:36,160 --> 00:01:39,960 x og y som argumenter, er det faktisk kopier av x og y som 36 00:01:39,960 --> 00:01:41,310 er gått inn swap. 37 00:01:41,310 --> 00:01:45,430 Nemlig, deres verdier 1 og 2 er gått inn swap som a og b. 38 00:01:45,430 --> 00:01:48,590 Og det er en og b som vi er til syvende og sist bytte i hoved. 39 00:01:48,590 --> 00:01:50,810 >> Det vil si, blir 1 2, 2 blir en. 40 00:01:50,810 --> 00:01:54,630 Men fordi swap har ingen returverdi og fordi det mottatte kopier av x 41 00:01:54,630 --> 00:01:58,220 og y, er det atferd har ingen effekt på x og y. 42 00:01:58,220 --> 00:02:02,610 Faktisk, a og b er angitt omfang, så å si, å bytte, mens x og y forbli 43 00:02:02,610 --> 00:02:03,990 scoped til hoved. 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 å fikse det? 46 00:02:06,320 --> 00:02:08,312