>> David J. Malan: Ajmo napisati program u koje ćemo pokušati zamijeniti vrijednosti
dvije varijable, x i y.
U unaprijed, ja sam napisao mnogo ovog programa već.
Prvo, sam proglasi varijablu, X, i pohraniti u njemu vrijednost, jednom.
Onda sam proglasiti varijabla y i pohraniti u njemu vrijednost, 2.
>> Onda sam nastaviti s printf prikazati vrijednosti tih dviju varijabli.
Onda ja tvrdim s drugim printf biti zamjene tih varijabli.
Onda sam pozvati funkciju nazvanu swapa.
I onda ja tvrdim da su varijable su zamijenili.
A onda sam se ispisati da je ono što ja tvrdim su nove vrijednosti za X i Y.
>> Sada ono što je ova funkcija swapa?
To nije nešto što dolazi s C. Zapravo, ako ćemo gledati na vrhu moje
file, primijetit ćete da sam proglasio Prototip ove funkcije swapa
navodeći da je potrebno dva Ints, proizvoljno naziva A i B, a to
funkcija ne vraća ništa.
Pa valjda, čini ono što govori u swaps A-ih i vrijednosti B-a.
Ajmo sad provesti zamjenu.
>> Prvo, ja ću proglasiti privremeno promjenjiva i dodijeliti ga
vrijednost, iako sam mogao samo lako pohranjeni u njemu b.
Ja sam tada će se promijeniti vrijednost u biti jednaka onoj u B.
I onda na kraju, ja ću promijeniti Vrijednost b da bude ono što je bio, ali je
sada u temp.
>> Sad ja tvrdim ono što sam upravo učinio je logički ispravan.
Ja sam pohranjeni u privremenu varijablu, promijenila vrijednost da bi B-a, a zatim
promijenila vrijednost B je da se ono što je bilo.
Ali kad sam sastaviti i pokrenuti ovaj Program, brinem se da to nije
događa se ono što vidim.
>> Napravite, nema zamjenu.
dot udarac, nema zamjenu.
I, nažalost, prema printf, vrijednost x i y, čak
nakon što tvrdimo da se zamjene ih, još uvijek je 1 i 2.
>> Sad zašto je to tako?
Pa, ispada da se u glavnom, kad smo nazvati ovu funkciju swap, prolazi u
x i y kao argument, to je zapravo kopije xiy da
uvodi se u swapa.
Naime, njihove vrijednosti 1 i 2 su prešao u zamjeni kao i b.
A to je i b da smo u konačnici zamjene u glavnom.
>> To je, 1 postaje 2, 2 postaje 1.
Ali zato Swap nema povratnu vrijednost i zato je dobio kopije x
i y, to je ponašanje nema utjecaja na xiy.
Doista, i b su scoped, da se tako izrazim, swap, a x i y ostane
scoped na glavni.
>> Dakle, imamo problem.
No, kako to popraviti?