>> DAVID J. MALAN: Lad os skrive et program i som vi forsøger at bytte de værdier af
to variable, x og y.
På forhånd har jeg skrevet meget af dette program allerede.
Først vil jeg erklære en variabel, x, og gemmer i den værdien 1.
Så jeg erklære variable y og opbevares i den værdien, 2..
>> Fortsæt derefter jeg med printf at vise værdierne af disse to variable.
Så jeg hævder med en anden printf at bytte disse variabler.
Så kalder jeg en funktion kaldet swap.
Og så påstår jeg, at de variable er blevet byttet.
Og så vil jeg printe ud, at hvad jeg hævder er de nye værdier af x og y.
>> Nu, hvad er denne funktion swap?
Det er ikke noget, der kommer med C. Ja, hvis vi ser på toppen af ​​min
fil, vil du bemærke, at jeg har erklæret en prototype for denne funktion swap
præcisering af, at det tager to ints, vilkårligt kaldes a og b, og det
funktionen returnerer ikke noget.
Så formentlig, det gør hvad det siger i swaps A'er og B'er værdier.
Lad os nu gennemføre swap.
>> Først vil jeg erklære en midlertidig variabel og tildele den
værdien i en, selvom jeg kunne bare som nemt opbevares i det b..
Jeg derefter gå til at ændre værdien af at være den samme som i b..
Og så til sidst, vil jeg ændre værdien af ​​b at være, hvad en var, men er
nu temp.
>> Nu hævder jeg, hvad jeg lige har gjort er logisk korrekte.
Jeg har gemt en i en midlertidig variabel, ændret en værdi at være b s, og derefter
ændrede b værdi at være, hvad en s var.
Men når jeg kompilere og køre dette program, jeg bange for, at det ikke
går, hvad jeg ser.
>> Foretag ingen swap.
dot slash, ingen swap.
Og desværre, ifølge printf, værdien af ​​x og y, selv
efter at vi hævder at bytte dem, er stadig 1 og 2.
>> Nu hvorfor er det?
Tja, det viser sig, at i hovedsagen, da vi kalder denne funktion swap, der passerer i
x og y som argumenter, er det faktisk kopier af x og y, der
er gået ind i swap.
Nemlig, deres værdier 1 og 2 gået ind swap som a og b.
Og det er a og b, at vi i sidste ende bytte i main.
>> Det vil sige, 1 bliver 2, 2 bliver 1.
Men fordi swap har ingen returværdi og fordi det modtaget kopier af x
og y, er det adfærd har ingen effekt på x og y.
Faktisk a og b scoped, så at sige, at bytte, og x og y er fortsat
scoped til main.
>> Så vi har et problem.
Men hvordan man kan løse det?