>> DAVID J. Malan: Ni skribi programon en kiun ni provas interŝanĝas la valorojn de
du variabloj x kaj y.
Anticipe, mi jam skribis multe de tiu programo jam.
Unue, mi deklaras variablon, x, kaj stoki en ĝi la valoron, 1.
Tiam mi deklaras variablon y kaj stoki en ĝi la valoron, 2.
>> Tiam mi procedi kun printf montri la valoroj de tiuj du variabloj.
Tiam mi asertas kun alia printf esti interŝanĝi tiujn variablojn.
Tiam mi nomas funkcio nomita swap.
Kaj poste mi asertas ke la variabloj estis ŝanĝitaj.
Kaj poste mi presi ke kion mi asertas estas la novaj valoroj de x kaj y.
>> Nun kio estas cxi tiu funkcio swap?
Ĝi ne estas iu kiu venas kun C. Efektive, se ni rigardas la supro de mia
dosiero, vi rimarkos ke mi deklaris prototipo por koncerna funkcio swap
preciziganta kiu prenas du ints, arbitre nomas a kaj b, kaj ĉi
funkcio ne redonas nenion.
Do supozeble, jes, kion ĝi diras en svopoj a aj kaj b valoroj.
Ni nun apliki swap.
>> Unue, mi tuj rakontos portempa ŝanĝiĝema kaj asigni al ĝi
la valoron en tio, kvankam mi povis nur tiel facile stokitaj en ĝi b.
Mi tiam tuj ŝanĝas la valoron de A al esti egala al tiu en b.
Kaj poste persiste, mi tuj ŝanĝas la valoro de b esti kia estis sed estas
nun en temp.
>> Nun mi asertas, kion mi ĵus faris Estas logike ĝusta.
Mi jam stokita en portempa variablo, ŝanĝis la valoron esti b, kaj tiam
ŝanĝis b valoro esti kia-aj jaroj estis.
Sed kiam mi kompilas kaj kuri ĉi programon, mi timas ke tio ne
irante, kion mi vidis.
>> Faru, neniu swap.
dot oblikvo, neniu swap.
Kaj bedaŭrinde, laŭ printf, la valoro de x kaj y, eĉ
post ni pretendi esti interŝanĝante ili, estas ankoraŭ 1 kaj 2.
>> Nun kial estas tio?
Nu, tio rezultas, ke en ĉefa, kiam ni nomas tiun funkcion swap, pasante en
x kaj y kiel argumentoj, estas reale kopioj de x kaj y ke
transiros en swap.
Nome, iliaj valoroj 1 kaj 2 estas pasis en swap kiel a kaj b.
Kaj ĝi estas a kaj b, ke ni finfine interŝanĝante en ĉefa.
>> Tio estas, 1 iĝas 2, 2 iĝas 1.
Sed ĉar swap havas neniun revenon valoro kaj pro tio ricevis kopiojn de x
kaj y, ĝi estas konduto nenian efikon sur x kaj y.
Ja, a kaj b estas scoped, por tiel diri, interŝanĝi, dum x kaj y restas
scoped al ĉefaj.
>> Do ni havas problemon.
Sed kiel ripari tion?