>> SPEAKER 1: Det viser sig, at vi kan held bytte værdierne i to
variabler ved at sende dem i en fungere ikke i værdi eller ved kopi, men
ved henvisning eller ved deres adresser.
Med andre ord har vi brug for at udnytte noget kendt som en pegepind.
En pointer, virkelig, er blot den adresse nogle variabel.
Og så hvis vi giver en funktion kaldes, sige, bytte med adressen på
en variabel og adressen på en anden variabel, bør swap have beføjelse til at
gå til hver af disse adresser og faktisk ændre
værdier, der er der.
>> Lad os se det i sammenhæng.
Lad os reimplement swap som følger.
Først, lad os ændre en ikke at være en int men at være en pointer til en int eller
adressen på en int.
Så lad os gøre det samme for b, skiftende det fra en int til at være en pegepind til en
int eller adressen på en int.
>> Så inde i swap, lad os stadig erklære tmp, så vi har en
midlertidigt sted for en værdi.
Men en værdi er ikke i sig selv, fordi igen, en nu adressen
nogle int.
Så hvis vi ønsker at gå til denne adresse og få int på denne adresse, vi har
dereference denne pointer, også i form af stjernen operatør, skrive stjerne en.
>> Næste, jeg ikke ønsker at ændre værdien af ​​en.
Jeg ønsker at ændre værdien ved a, holde i tankerne, igen,
at a er en adresse.
Så for at gøre det, jeg igen har brug at sige stjerne et får.
Og nu vil jeg sætte i værdien det er på b, ikke værdien af ​​b, som
også er en adresse.
>> Så igen siger jeg, stjernede b.
Så i min sidste linje, jeg har brug for at overskrive, hvad der er på adressen b med
hvad var på en oprindelige placering.
For at gøre det, jeg gør stjernede b får tmp.
>> Nu ved slutningen af ​​dagen, er dette Funktionen er stadig lige
tre linjer kode.
Men fordi det er at manipulere værdier ved hjælp af deres adresse og ikke
rå værdier, som blev passeret ind i funktion, jeg hævder, at swap er nu
beføjelse til at ændre de værdier, er gået ind via deres adresser.
>> Men jeg har brug for at lave en ændring endnu.
Jeg kan ikke længere passere i x og y selv.
Jeg har brug for at passere i de adresser af x og y.
Og for at gøre det, jeg har brug for nogle lidt anderledes notation op øverst.
Jeg ønsker at bytte x og y ved at passere i adresse x, angivet ved
ampersand x, og adressen på y, indikeret ved tegnet y.
>> Ligeledes op øverst nu har jeg brug for ændre den funktion prototype til
matche den forandring, jeg har lavet, så en er, igen, en pointer til en int.
b er, igen, en pointer til en int.
Og nu kan jeg gemme min fil.
Og lad os genkompilere og køre den.
>> Gør swap dot skråstreg swap.
Og denne gang, x og y er faktisk nu byttes således, at deres værdier er ikke
1 og 2, men 2 og 1.