1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> David J. Malan: Ajmo napisati program u koje ćemo pokušati zamijeniti vrijednosti 3 00:00:02,700 --> 00:00:04,970 dvije varijable, x i y. 4 00:00:04,970 --> 00:00:07,490 U unaprijed, ja sam napisao mnogo ovog programa već. 5 00:00:07,490 --> 00:00:11,130 Prvo, sam proglasi varijablu, X, i pohraniti u njemu vrijednost, jednom. 6 00:00:11,130 --> 00:00:14,120 Onda sam proglasiti varijabla y i pohraniti u njemu vrijednost, 2. 7 00:00:14,120 --> 00:00:17,700 >> Onda sam nastaviti s printf prikazati vrijednosti tih dviju varijabli. 8 00:00:17,700 --> 00:00:21,090 Onda ja tvrdim s drugim printf biti zamjene tih varijabli. 9 00:00:21,090 --> 00:00:23,690 Onda sam pozvati funkciju nazvanu swapa. 10 00:00:23,690 --> 00:00:26,100 I onda ja tvrdim da su varijable su zamijenili. 11 00:00:26,100 --> 00:00:30,610 A onda sam se ispisati da je ono što ja tvrdim su nove vrijednosti za X i Y. 12 00:00:30,610 --> 00:00:32,030 >> Sada ono što je ova funkcija swapa? 13 00:00:32,030 --> 00:00:34,970 To nije nešto što dolazi s C. Zapravo, ako ćemo gledati na vrhu moje 14 00:00:34,970 --> 00:00:38,850 file, primijetit ćete da sam proglasio Prototip ove funkcije swapa 15 00:00:38,850 --> 00:00:42,750 navodeći da je potrebno dva Ints, proizvoljno naziva A i B, a to 16 00:00:42,750 --> 00:00:44,300 funkcija ne vraća ništa. 17 00:00:44,300 --> 00:00:48,370 Pa valjda, čini ono što govori u swaps A-ih i vrijednosti B-a. 18 00:00:48,370 --> 00:00:50,170 Ajmo sad provesti zamjenu. 19 00:00:50,170 --> 00:00:53,820 >> Prvo, ja ću proglasiti privremeno promjenjiva i dodijeliti ga 20 00:00:53,820 --> 00:00:57,260 vrijednost, iako sam mogao samo lako pohranjeni u njemu b. 21 00:00:57,260 --> 00:01:00,925 Ja sam tada će se promijeniti vrijednost u biti jednaka onoj u B. 22 00:01:00,925 --> 00:01:04,849 I onda na kraju, ja ću promijeniti Vrijednost b da bude ono što je bio, ali je 23 00:01:04,849 --> 00:01:06,340 sada u temp. 24 00:01:06,340 --> 00:01:08,910 >> Sad ja tvrdim ono što sam upravo učinio je logički ispravan. 25 00:01:08,910 --> 00:01:12,780 Ja sam pohranjeni u privremenu varijablu, promijenila vrijednost da bi B-a, a zatim 26 00:01:12,780 --> 00:01:15,580 promijenila vrijednost B je da se ono što je bilo. 27 00:01:15,580 --> 00:01:18,620 Ali kad sam sastaviti i pokrenuti ovaj Program, brinem se da to nije 28 00:01:18,620 --> 00:01:20,140 događa se ono što vidim. 29 00:01:20,140 --> 00:01:21,625 >> Napravite, nema zamjenu. 30 00:01:21,625 --> 00:01:24,350 dot udarac, nema zamjenu. 31 00:01:24,350 --> 00:01:27,560 I, nažalost, prema printf, vrijednost x i y, čak 32 00:01:27,560 --> 00:01:31,560 nakon što tvrdimo da se zamjene ih, još uvijek je 1 i 2. 33 00:01:31,560 --> 00:01:32,630 >> Sad zašto je to tako? 34 00:01:32,630 --> 00:01:36,160 Pa, ispada da se u glavnom, kad smo nazvati ovu funkciju swap, prolazi u 35 00:01:36,160 --> 00:01:39,960 x i y kao argument, to je zapravo kopije xiy da 36 00:01:39,960 --> 00:01:41,310 uvodi se u swapa. 37 00:01:41,310 --> 00:01:45,430 Naime, njihove vrijednosti 1 i 2 su prešao u zamjeni kao i b. 38 00:01:45,430 --> 00:01:48,590 A to je i b da smo u konačnici zamjene u glavnom. 39 00:01:48,590 --> 00:01:50,810 >> To je, 1 postaje 2, 2 postaje 1. 40 00:01:50,810 --> 00:01:54,630 Ali zato Swap nema povratnu vrijednost i zato je dobio kopije x 41 00:01:54,630 --> 00:01:58,220 i y, to je ponašanje nema utjecaja na xiy. 42 00:01:58,220 --> 00:02:02,610 Doista, i b su scoped, da se tako izrazim, swap, a x i y ostane 43 00:02:02,610 --> 00:02:03,990 scoped na glavni. 44 00:02:03,990 --> 00:02:05,070 >> Dakle, imamo problem. 45 00:02:05,070 --> 00:02:06,320 No, kako to popraviti? 46 00:02:06,320 --> 00:02:08,312