1 00:00:00,000 --> 00:00:03,080 >> SPEAKER 1: Det viser seg at vi kan hell Bytte verdiene i to 2 00:00:03,080 --> 00:00:07,670 variabler ved å sende dem inn i en fungere ikke av verdi eller ved å kopiere, men 3 00:00:07,670 --> 00:00:10,390 ved henvisning, eller ved deres adresser. 4 00:00:10,390 --> 00:00:12,740 Med andre ord, vi må utnytte noe som er kjent som en peker. 5 00:00:12,740 --> 00:00:15,580 En peker, egentlig, er bare adressen til noen variable. 6 00:00:15,580 --> 00:00:19,660 Og så hvis vi gir en funksjon som heter, si, bytte med adressen 7 00:00:19,660 --> 00:00:23,550 en variabel og adressen til en annen variabel, bør swap gis myndighet til 8 00:00:23,550 --> 00:00:26,090 går til hver av disse adresser og faktisk endre 9 00:00:26,090 --> 00:00:27,360 verdier som er der. 10 00:00:27,360 --> 00:00:28,890 >> La oss se dette i sammenheng. 11 00:00:28,890 --> 00:00:31,360 La oss reimplement swap som følger. 12 00:00:31,360 --> 00:00:35,810 Først, la oss endre en ikke å være en int men for å være en peker til en int eller 13 00:00:35,810 --> 00:00:36,920 adressen til en int. 14 00:00:36,920 --> 00:00:40,820 Så la oss gjøre det samme for b, skiftende det fra en int for å være en peker til en 15 00:00:40,820 --> 00:00:42,780 int eller adressen til en int. 16 00:00:42,780 --> 00:00:45,860 >> Deretter innsiden av swap, la oss fortsatt erklære tmp slik at vi har en 17 00:00:45,860 --> 00:00:47,810 midlertidig sted for en verdi. 18 00:00:47,810 --> 00:00:52,430 Men en verdi er ikke en selv, fordi, igjen, er et nå adressen 19 00:00:52,430 --> 00:00:53,270 av noen int. 20 00:00:53,270 --> 00:00:57,320 Så hvis vi ønsker å gå til denne adressen og få int på denne adressen, har vi 21 00:00:57,320 --> 00:01:03,020 deferanseoperasjon denne pekeren, også i form av stjernen operatør, skriver stjerne en. 22 00:01:03,020 --> 00:01:05,470 >> Neste, jeg ønsker ikke å endre verdien av en. 23 00:01:05,470 --> 00:01:08,770 Jeg ønsker å endre verdien på en, husk, igjen, 24 00:01:08,770 --> 00:01:10,350 at en er en adresse. 25 00:01:10,350 --> 00:01:14,050 Så for å gjøre det, jeg igjen trenger å si stjerne en blir. 26 00:01:14,050 --> 00:01:18,360 Og nå ønsker jeg å sette i verdi det er ved b, ikke verdien av b, som 27 00:01:18,360 --> 00:01:19,720 er også en adresse. 28 00:01:19,720 --> 00:01:22,280 >> Så igjen sier jeg, stjerne b. 29 00:01:22,280 --> 00:01:26,690 Så i min siste linje, trenger jeg å overskrive hva som står på adresse b med 30 00:01:26,690 --> 00:01:28,970 hva som sto på en opprinnelige plassering. 31 00:01:28,970 --> 00:01:32,910 For å gjøre det, jeg gjør stjerne b får tmp. 32 00:01:32,910 --> 00:01:34,820 >> Nå ved slutten av dagen, denne Funksjonen er fortsatt bare 33 00:01:34,820 --> 00:01:35,950 tre linjer med kode. 34 00:01:35,950 --> 00:01:39,860 Men fordi det er å manipulere verdier ved hjelp av sin adresse og ikke den 35 00:01:39,860 --> 00:01:43,700 rå-verdier som var gått inn i det funksjon, jeg hevder at swap er nå 36 00:01:43,700 --> 00:01:47,670 myndighet til å endre verdiene som sendes inn via deres adresser. 37 00:01:47,670 --> 00:01:49,510 >> Men jeg trenger å gjøre én endring fortsatt. 38 00:01:49,510 --> 00:01:52,190 Jeg kan ikke lenger passere i x-og y selv. 39 00:01:52,190 --> 00:01:55,030 Jeg trenger å passere i adresser av x og y. 40 00:01:55,030 --> 00:01:58,160 Og for å gjøre det, trenger jeg noen litt forskjellig notasjon opp toppen. 41 00:01:58,160 --> 00:02:02,510 Jeg ønsker å bytte x og y ved å passere i adressen til x, angitt med 42 00:02:02,510 --> 00:02:07,190 ampersand x, og adressen til y, angitt med tegnet y. 43 00:02:07,190 --> 00:02:10,570 >> Tilsvarende opp topp nå må jeg endre funksjonen prototype til 44 00:02:10,570 --> 00:02:14,980 matche den endringen som jeg har gjort, slik at en er, igjen, en peker til en int. 45 00:02:14,980 --> 00:02:17,190 b er, igjen, en peker til en int. 46 00:02:17,190 --> 00:02:18,770 Og nå kan jeg lagre filen. 47 00:02:18,770 --> 00:02:20,680 Og la oss rekompilere og kjøre den. 48 00:02:20,680 --> 00:02:25,330 >> Gjør swap dot slash swap. 49 00:02:25,330 --> 00:02:29,660 Og denne gangen, x og y er faktisk nå byttet slik at deres verdier ikke 50 00:02:29,660 --> 00:02:31,950 1 og 2, men 2 og en. 51 00:02:31,950 --> 00:02:34,900