>> HÖGTALARE 1: Det visar sig att vi kan framgångsrikt byta värden i två
variabler genom att skicka dem till en fungerar inte med värde eller genom kopiering, men
genom hänvisning eller deras adresser.
Med andra ord måste vi utnyttja något som kallas en pekare.
En pekare, egentligen, är bara adressen för en viss variabel.
Och så om vi ger en funktion som heter, säg, byta med adressen till
en variabel och adressen till en annan variabel bör swap ges befogenhet att
går till var och en av dessa adresser och faktiskt ändra
värden som finns där.
>> Låt oss se detta i sitt sammanhang.
Låt oss reimplement swap enligt följande.
Först, låt oss ändra en att inte vara en int men för att vara en pekare till en int eller
adressen till en int.
Sedan ska vi göra samma sak för b, ändra den från en int vara en pekare till en
int eller adressen till en int.
>> Sedan inne i swap, låt oss ändå förklara tmp så att vi har en
tillfällig plats för ett värde.
Men ett värde är inte i sig, eftersom det, igen, är nu den adress
vissa int.
Så om vi vill gå till den adressen och får int på den adressen, vi har
dereference denna pekare, även i form av stjärnan operatören, skriver stjärnan en.
>> Sedan vill jag inte byta värdet av en.
Jag vill ändra värdet på a, med tanke på, igen,
att a är en adress.
Så för att göra det, återigen måste jag att säga stjärn ett får.
Och nu vill jag sätta i värde det är vid b, inte värdet på b, som
också är en adress.
>> Så återigen säger jag, stjärna b..
Sedan i min sista raden, jag behöver skriva över vad som står på adress b med
vad som var på en ursprungliga plats.
För att göra det, gör jag stjärn b får tmp.
>> Nu i slutet av dagen, detta Funktionen är fortfarande bara
tre rader kod.
Men eftersom det är att manipulera värden genom sin adress och inte den
råvärden som gått in i funktion, jag hävdar att swap är nu
befogenhet att ändra värdena som förs in via deras adresser.
>> Men jag måste göra en förändring fortfarande.
Jag kan inte längre gå in x och y själva.
Jag behöver skicka in adresserna av x och y.
Och att göra det, jag behöver lite svagt olika notation där uppe.
Jag vill byta x och y genom att i adressen av x, som indikeras av
et-x, och adressen till y, indikeras av et-tecken y.
>> På samma sätt där uppe nu måste jag ändra funktionens prototyp till
matcha den förändring som jag har gjort, så att a är, återigen, en pekare till en int.
b är, återigen, en pekare till en int.
Och nu kan jag spara min fil.
Och låt oss kompilera och köra den.
>> Gör swap prick snedstreck swap.
Och den här gången, x och y är faktiskt nu bytte så att deras värden inte
1 och 2, men 2 och 1.