1 00:00:00,000 --> 00:00:03,080 >> HÖGTALARE 1: Det visar sig att vi kan framgångsrikt byta värden i två 2 00:00:03,080 --> 00:00:07,670 variabler genom att skicka dem till en fungerar inte med värde eller genom kopiering, men 3 00:00:07,670 --> 00:00:10,390 genom hänvisning eller deras adresser. 4 00:00:10,390 --> 00:00:12,740 Med andra ord måste vi utnyttja något som kallas en pekare. 5 00:00:12,740 --> 00:00:15,580 En pekare, egentligen, är bara adressen för en viss variabel. 6 00:00:15,580 --> 00:00:19,660 Och så om vi ger en funktion som heter, säg, byta med adressen till 7 00:00:19,660 --> 00:00:23,550 en variabel och adressen till en annan variabel bör swap ges befogenhet att 8 00:00:23,550 --> 00:00:26,090 går till var och en av dessa adresser och faktiskt ändra 9 00:00:26,090 --> 00:00:27,360 värden som finns där. 10 00:00:27,360 --> 00:00:28,890 >> Låt oss se detta i sitt sammanhang. 11 00:00:28,890 --> 00:00:31,360 Låt oss reimplement swap enligt följande. 12 00:00:31,360 --> 00:00:35,810 Först, låt oss ändra en att inte vara en int men för att vara en pekare till en int eller 13 00:00:35,810 --> 00:00:36,920 adressen till en int. 14 00:00:36,920 --> 00:00:40,820 Sedan ska vi göra samma sak för b, ändra den från en int vara en pekare till en 15 00:00:40,820 --> 00:00:42,780 int eller adressen till en int. 16 00:00:42,780 --> 00:00:45,860 >> Sedan inne i swap, låt oss ändå förklara tmp så att vi har en 17 00:00:45,860 --> 00:00:47,810 tillfällig plats för ett värde. 18 00:00:47,810 --> 00:00:52,430 Men ett värde är inte i sig, eftersom det, igen, är nu den adress 19 00:00:52,430 --> 00:00:53,270 vissa int. 20 00:00:53,270 --> 00:00:57,320 Så om vi vill gå till den adressen och får int på den adressen, vi har 21 00:00:57,320 --> 00:01:03,020 dereference denna pekare, även i form av stjärnan operatören, skriver stjärnan en. 22 00:01:03,020 --> 00:01:05,470 >> Sedan vill jag inte byta värdet av en. 23 00:01:05,470 --> 00:01:08,770 Jag vill ändra värdet på a, med tanke på, igen, 24 00:01:08,770 --> 00:01:10,350 att a är en adress. 25 00:01:10,350 --> 00:01:14,050 Så för att göra det, återigen måste jag att säga stjärn ett får. 26 00:01:14,050 --> 00:01:18,360 Och nu vill jag sätta i värde det är vid b, inte värdet på b, som 27 00:01:18,360 --> 00:01:19,720 också är en adress. 28 00:01:19,720 --> 00:01:22,280 >> Så återigen säger jag, stjärna b.. 29 00:01:22,280 --> 00:01:26,690 Sedan i min sista raden, jag behöver skriva över vad som står på adress b med 30 00:01:26,690 --> 00:01:28,970 vad som var på en ursprungliga plats. 31 00:01:28,970 --> 00:01:32,910 För att göra det, gör jag stjärn b får tmp. 32 00:01:32,910 --> 00:01:34,820 >> Nu i slutet av dagen, detta Funktionen är fortfarande bara 33 00:01:34,820 --> 00:01:35,950 tre rader kod. 34 00:01:35,950 --> 00:01:39,860 Men eftersom det är att manipulera värden genom sin adress och inte den 35 00:01:39,860 --> 00:01:43,700 råvärden som gått in i funktion, jag hävdar att swap är nu 36 00:01:43,700 --> 00:01:47,670 befogenhet att ändra värdena som förs in via deras adresser. 37 00:01:47,670 --> 00:01:49,510 >> Men jag måste göra en förändring fortfarande. 38 00:01:49,510 --> 00:01:52,190 Jag kan inte längre gå in x och y själva. 39 00:01:52,190 --> 00:01:55,030 Jag behöver skicka in adresserna av x och y. 40 00:01:55,030 --> 00:01:58,160 Och att göra det, jag behöver lite svagt olika notation där uppe. 41 00:01:58,160 --> 00:02:02,510 Jag vill byta x och y genom att i adressen av x, som indikeras av 42 00:02:02,510 --> 00:02:07,190 et-x, och adressen till y, indikeras av et-tecken y. 43 00:02:07,190 --> 00:02:10,570 >> På samma sätt där uppe nu måste jag ändra funktionens prototyp till 44 00:02:10,570 --> 00:02:14,980 matcha den förändring som jag har gjort, så att a är, återigen, en pekare till en int. 45 00:02:14,980 --> 00:02:17,190 b är, återigen, en pekare till en int. 46 00:02:17,190 --> 00:02:18,770 Och nu kan jag spara min fil. 47 00:02:18,770 --> 00:02:20,680 Och låt oss kompilera och köra den. 48 00:02:20,680 --> 00:02:25,330 >> Gör swap prick snedstreck swap. 49 00:02:25,330 --> 00:02:29,660 Och den här gången, x och y är faktiskt nu bytte så att deras värden inte 50 00:02:29,660 --> 00:02:31,950 1 och 2, men 2 och 1. 51 00:02:31,950 --> 00:02:34,900