1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Napišimo program ki se trudimo, da bi zamenjali vrednote 3 00:00:02,700 --> 00:00:04,970 dve spremenljivki, x in y. 4 00:00:04,970 --> 00:00:07,490 Vnaprej, sem napisal veliko že tega programa. 5 00:00:07,490 --> 00:00:11,130 Prvič, izjavljam, spremenljivo, X, in shranite v njem vrednosti, 1. 6 00:00:11,130 --> 00:00:14,120 Potem izjavljam veličino Y in shranite v njem vrednosti, 2. 7 00:00:14,120 --> 00:00:17,700 >> Potem sem se nadaljuje z printf prikazati vrednosti teh dveh spremenljivk. 8 00:00:17,700 --> 00:00:21,090 Potem sem trdijo, z drugo printf da je treba zamenjavo teh spremenljivk. 9 00:00:21,090 --> 00:00:23,690 Potem sem poklical funkcijo imenovano swap. 10 00:00:23,690 --> 00:00:26,100 In potem sem trdijo, da so spremenljivke so bile zamenjane. 11 00:00:26,100 --> 00:00:30,610 In potem sem izpisal, da je tisto, kar trdijo so nove vrednosti x in y. 12 00:00:30,610 --> 00:00:32,030 >> Zdaj, kaj je ta funkcija swap? 13 00:00:32,030 --> 00:00:34,970 To ni nekaj, kar prihaja z C. Pravzaprav, če pogledamo na vrhu mojega 14 00:00:34,970 --> 00:00:38,850 datoteka, boste opazili, da sem izjavila prototip za to funkcijo swap 15 00:00:38,850 --> 00:00:42,750 navedbo, da je potrebno dve Ints, poljubno imenuje in B, in to 16 00:00:42,750 --> 00:00:44,300 funkcija ne vrne ničesar. 17 00:00:44,300 --> 00:00:48,370 Torej, verjetno pa ne, kaj piše v zamenjavah a in vrednot B je. 18 00:00:48,370 --> 00:00:50,170 Pojdimo zdaj izvajajo zamenjave. 19 00:00:50,170 --> 00:00:53,820 >> Najprej bom razglasi začasno spremenljivka in ji naloži 20 00:00:53,820 --> 00:00:57,260 vrednost, čeprav sem lahko samo tako enostavno shranjena v njej b. 21 00:00:57,260 --> 00:01:00,925 Jaz pa bom za spremembo vrednosti v biti enaka kot v b. 22 00:01:00,925 --> 00:01:04,849 In potem na koncu, bom spremenila vrednost B v kar je vendar 23 00:01:04,849 --> 00:01:06,340 zdaj v temp. 24 00:01:06,340 --> 00:01:08,910 >> Zdaj sem po tisto, kar sem pravkar storil je logično pravilna. 25 00:01:08,910 --> 00:01:12,780 Sem shranjeni v začasne spremenljivke, spremenili vrednost je biti b-ih, nato pa 26 00:01:12,780 --> 00:01:15,580 spremenilo B je vrednost, da bo tisto, kar je bil. 27 00:01:15,580 --> 00:01:18,620 Toda, ko sem pripravijo in vodijo to Program, me skrbi, da to ni 28 00:01:18,620 --> 00:01:20,140 dogaja tisto, kar vidim. 29 00:01:20,140 --> 00:01:21,625 >> Poskrbite, nobene zamenjave. 30 00:01:21,625 --> 00:01:24,350 dot poševnica, brez zamenjave. 31 00:01:24,350 --> 00:01:27,560 In na žalost, po printf, vrednost za x in y, celo 32 00:01:27,560 --> 00:01:31,560 po tem, ko trdimo, da se menjava jim je še vedno 1 in 2. 33 00:01:31,560 --> 00:01:32,630 >> Zdaj zakaj je to? 34 00:01:32,630 --> 00:01:36,160 No, izkazalo se je, da je v glavnem, ko smo oklic to funkcijo zamenjave, ki poteka v 35 00:01:36,160 --> 00:01:39,960 x in y kot argument, da je dejansko kopije izmed X in Y, ki 36 00:01:39,960 --> 00:01:41,310 se prenesejo v zamenjavo. 37 00:01:41,310 --> 00:01:45,430 Namreč, njihove vrednosti 1 in 2 sta prešla v zamenjave kot a in b. 38 00:01:45,430 --> 00:01:48,590 In to je in b, da smo na koncu zamenjavo v glavnem. 39 00:01:48,590 --> 00:01:50,810 >> To pomeni, da 1 postane 2, 2 postane 1. 40 00:01:50,810 --> 00:01:54,630 Ampak zato, ker je swap brez vrnitve vrednosti in ker je prejela izvode x 41 00:01:54,630 --> 00:01:58,220 in y, to vedenje je nobenega vpliva na x in y. 42 00:01:58,220 --> 00:02:02,610 Dejansko, so zajeta in b, tako rekoč da bi zamenjali, ker se x in y ostajajo 43 00:02:02,610 --> 00:02:03,990 zajeta na glavno. 44 00:02:03,990 --> 00:02:05,070 >> Torej imamo problem. 45 00:02:05,070 --> 00:02:06,320 Ampak kako to popraviti? 46 00:02:06,320 --> 00:02:08,312