>> SPEAKER 1: Rezultas ni povas sukcese interŝanĝas la valorojn en du
variablojn per preterpasas ilin enen funkcias ne per valoro aŭ per kopio, sed
per referenco aux laux iliaj adresoj.
En aliaj vortoj, ni devas utiligi iu konata kiel montrilo.
A montrilon, vere, estas nur la adreso de iu variablo.
Kaj do, se ni ofertas funkcio vokita, diru, interŝanĝu kun la adreso de
variablo kaj la adreson de alia variablo, swap devus esti rajtigita
iru al ĉiu el tiuj adresoj kaj efektive ŝanĝas la
valorojn kiuj estas tie.
>> Ni vidas ĉi tion en kunteksto.
Ni reimplement swap jene.
Unue, ni ŝanĝas oni ne esti int sed esti montrilo al int aŭ la
adreso de int.
Do ni faru la saman por b, ŝanĝante opon de int esti montrilo al
int aŭ la adreso de int.
>> Tiam ene de interŝanĝo, ni ankoraŭ deklari tmp tiel ke ni havas
provizora loko por la valoro.
Sed la valoro ne estas mem, ĉar, denove, nun estas la adreso
de iu int.
Do, se ni volas iri al tiu adreso kaj get int en tiu adreso, ni havas
dereference ĉi montrilon, ankaŭ por vojo de la stelon operatoro, skribante stelo al.
>> Tuj poste, mi ne volas ŝanĝi la valoro de a.
Mi volas ŝanĝi la valoron ĉe a, konsiderante, denove,
ke a estas adreso.
Do fari tion, mi ankoraux bezonas diri stelon oni ricevas.
Kaj nun mi volas meti en la valoro tio estas je b, ne la valoron de b, kio
Ankaŭ estas adreso.
>> Do denove mi diros: stelo b.
Tiam en mia lasta linio, mi bezonas anstataŭigi kio estas cxe adreso b kun
kio estis en la originala situo.
Por tion fari, mi faros stelo b gets tmp.
>> Nun je la fino de la tago, tiu funkcio estas ankoraŭ nur
tri linioj de kodo.
Sed ĉar ĝi estas manipulanta valoroj pere de ilia adreso kaj ne la
kruda valoroj kiuj transiris en la funkcio, mi asertas ke swap nun estas
fortigitaj ŝanĝi la valoroj kiu ili pasis en tra iliaj adresoj.
>> Sed mi bezonos fari unu ŝanĝo ankoraŭ.
Mi ne plu povas pasi en x kaj y sin.
Mi bezonas Iam en la adresoj de x kaj y.
Kaj fari tion, mi bezonas iom iomete malsama skribmaniero supren top.
Mi volas interŝanĝi x kaj y per pasante en la adreso de x, indikitaj de
ampersand x, kaj la adreso de y, indikitaj de ampersand y.
>> Simile, supren supro nun mi bezonas ŝanĝi la funkcia prototipo por
kongruas al la ŝanĝo kiun mi faris, por ke a estas, denove, montrilon al int.
b estas, denove, montrilon al int.
Kaj nun mi povas savi mian dosieron.
Kaj ni rekompili kaj ruli ĝin.
>> Faru swap dot oblikvo swap.
Kaj cxi tiu tempo, x kaj y estas ja nun interŝanĝis tiaj ke ilia valoroj ne estas
1 kaj 2, sed 2 kaj 1.