1 00:00:00,000 --> 00:00:03,080 >> SPEAKER 1: Det viser sig, at vi kan held bytte værdierne i to 2 00:00:03,080 --> 00:00:07,670 variabler ved at sende dem i en fungere ikke i værdi eller ved kopi, 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 har vi brug for at udnytte noget kendt som en pegepind. 5 00:00:12,740 --> 00:00:15,580 En pointer, virkelig, er blot den adresse nogle variabel. 6 00:00:15,580 --> 00:00:19,660 Og så hvis vi giver en funktion kaldes, sige, bytte med adressen på 7 00:00:19,660 --> 00:00:23,550 en variabel og adressen på en anden variabel, bør swap have beføjelse til at 8 00:00:23,550 --> 00:00:26,090 gå til hver af disse adresser og faktisk ændre 9 00:00:26,090 --> 00:00:27,360 værdier, der er der. 10 00:00:27,360 --> 00:00:28,890 >> Lad os se det i sammenhæng. 11 00:00:28,890 --> 00:00:31,360 Lad os reimplement swap som følger. 12 00:00:31,360 --> 00:00:35,810 Først, lad os ændre en ikke at være en int men at være en pointer til en int eller 13 00:00:35,810 --> 00:00:36,920 adressen på en int. 14 00:00:36,920 --> 00:00:40,820 Så lad os gøre det samme for b, skiftende det fra en int til at være en pegepind til en 15 00:00:40,820 --> 00:00:42,780 int eller adressen på en int. 16 00:00:42,780 --> 00:00:45,860 >> Så inde i swap, lad os stadig erklære tmp, så vi har en 17 00:00:45,860 --> 00:00:47,810 midlertidigt sted for en værdi. 18 00:00:47,810 --> 00:00:52,430 Men en værdi er ikke i sig selv, fordi igen, en nu adressen 19 00:00:52,430 --> 00:00:53,270 nogle int. 20 00:00:53,270 --> 00:00:57,320 Så hvis vi ønsker at gå til denne adresse og få int på denne adresse, vi har 21 00:00:57,320 --> 00:01:03,020 dereference denne pointer, også i form af stjernen operatør, skrive stjerne en. 22 00:01:03,020 --> 00:01:05,470 >> Næste, jeg ikke ønsker at ændre værdien af ​​en. 23 00:01:05,470 --> 00:01:08,770 Jeg ønsker at ændre værdien ved a, holde i tankerne, igen, 24 00:01:08,770 --> 00:01:10,350 at a er en adresse. 25 00:01:10,350 --> 00:01:14,050 Så for at gøre det, jeg igen har brug at sige stjerne et får. 26 00:01:14,050 --> 00:01:18,360 Og nu vil jeg sætte i værdien det er på b, ikke værdien af ​​b, som 27 00:01:18,360 --> 00:01:19,720 også er en adresse. 28 00:01:19,720 --> 00:01:22,280 >> Så igen siger jeg, stjernede b. 29 00:01:22,280 --> 00:01:26,690 Så i min sidste linje, jeg har brug for at overskrive, hvad der er på adressen b med 30 00:01:26,690 --> 00:01:28,970 hvad var på en oprindelige placering. 31 00:01:28,970 --> 00:01:32,910 For at gøre det, jeg gør stjernede b får tmp. 32 00:01:32,910 --> 00:01:34,820 >> Nu ved slutningen af ​​dagen, er dette Funktionen er stadig lige 33 00:01:34,820 --> 00:01:35,950 tre linjer kode. 34 00:01:35,950 --> 00:01:39,860 Men fordi det er at manipulere værdier ved hjælp af deres adresse og ikke 35 00:01:39,860 --> 00:01:43,700 rå værdier, som blev passeret ind i funktion, jeg hævder, at swap er nu 36 00:01:43,700 --> 00:01:47,670 beføjelse til at ændre de værdier, er gået ind via deres adresser. 37 00:01:47,670 --> 00:01:49,510 >> Men jeg har brug for at lave en ændring endnu. 38 00:01:49,510 --> 00:01:52,190 Jeg kan ikke længere passere i x og y selv. 39 00:01:52,190 --> 00:01:55,030 Jeg har brug for at passere i de adresser af x og y. 40 00:01:55,030 --> 00:01:58,160 Og for at gøre det, jeg har brug for nogle lidt anderledes notation op øverst. 41 00:01:58,160 --> 00:02:02,510 Jeg ønsker at bytte x og y ved at passere i adresse x, angivet ved 42 00:02:02,510 --> 00:02:07,190 ampersand x, og adressen på y, indikeret ved tegnet y. 43 00:02:07,190 --> 00:02:10,570 >> Ligeledes op øverst nu har jeg brug for ændre den funktion prototype til 44 00:02:10,570 --> 00:02:14,980 matche den forandring, jeg har lavet, så en er, igen, en pointer til en int. 45 00:02:14,980 --> 00:02:17,190 b er, igen, en pointer til en int. 46 00:02:17,190 --> 00:02:18,770 Og nu kan jeg gemme min fil. 47 00:02:18,770 --> 00:02:20,680 Og lad os genkompilere og køre den. 48 00:02:20,680 --> 00:02:25,330 >> Gør swap dot skråstreg swap. 49 00:02:25,330 --> 00:02:29,660 Og denne gang, x og y er faktisk nu byttes således, at deres værdier er ikke 50 00:02:29,660 --> 00:02:31,950 1 og 2, men 2 og 1. 51 00:02:31,950 --> 00:02:34,900