>> Spreker 1: Dit blyk uit wat ons kan die waardes suksesvol te ruil in twee
veranderlikes deur verby hulle in 'n funksioneer nie deur waarde of deur kopieer nie, maar
deur verwysing of deur hul adresse.
Met ander woorde, ons moet benut iets wat bekend staan ​​as 'n wyser.
'N wyser, regtig, is net die adres van sommige veranderlike.
En so, as ons 'n funksie genoem, sê, ruil met die adres van
'n veranderlike en die adres van 'n ander veranderlike, moet ruil bemagtig word om
gaan na elk van die adresse en eintlik verander die
waardes wat daar is.
>> Kom ons sien dit in konteks.
Kom ons reimplement ruil soos volg.
Eerstens, laat ons verander om 'n nie 'n int te wees maar 'n verwysing na 'n int of om die
adres van 'n int.
Dan kom ons doen dieselfde vir B, veranderende dit van 'n int 'n verwysing na 'n te wees
int of die adres van 'n int.
>> Dan binnekant van ruil, laat ons nog steeds verklaar tmp sodat ons 'n
tydelike plek vir 'n waarde.
Maar 'n waarde is nie 'n self, want, weer, 'n is nou die adres
van 'n paar int.
So as ons wil om te gaan na die adres en kry int by daardie adres, ons het
dereference hierdie pointer, ook by wyse van die ster-operateur, skryf 'n ster.
>> Volgende, ek wil nie te verander die waarde van 'n.
Ek wil die waarde te verander a, in gedagte te hou, weer,
dat 'n is 'n adres.
So om dit te doen, het ek weer nodig om te sê 'n ster kry.
En nou wil ek om te sit in die waarde dit is by B, en nie die waarde van b, wat
is ook 'n adres.
>> So weer ek sê, ster b.
Toe ek in my laaste lyn, ek nodig het om te oorskryf wat by adres b met
wat op 'n oorspronklike plek.
Om dit te doen, doen ek star b kry tmp.
>> En aan die einde van die dag, van hierdie funksie is nog steeds net
drie reëls van die kode.
Maar, want dit is te manipuleer waardes deur middel van hul adres en nie die
rou waardes wat in die geslaag is funksie, ek beweer dat ruil is nou
bemagtig om die waardes te verander geslaag in via hul adresse.
>> Maar ek moet een verandering aan nog steeds maak.
Ek kan nie meer slaag in x en y hulself.
Ek moet in die adresse te slaag van x en y.
En om dit te doen, ek moet 'n paar effens verskillende notasie tot bo-op.
Ek wil x en y te ruil deur verby in die adres van x, aangedui deur
ampersand x, en die adres van y, aangedui deur ampersand y.
>> Net so, tot bo-nou moet ek die funksie se prototipe verander
ooreenstem met die verandering wat ek gemaak het, sodat 'n is, weer, 'n verwysing na 'n int.
b is, weer, 'n verwysing na 'n int.
En nou kan ek my lêer stoor.
En laat ons hercompileren en voer dit uit.
>> Maak ruil dot streep ruil.
En hierdie keer, x en y is inderdaad nou verruil so dat hulle waardes is nie
1 en 2, maar 2 en 1.