1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Ni skribi programon en kiun ni provas interŝanĝas la valorojn de 3 00:00:02,700 --> 00:00:04,970 du variabloj x kaj y. 4 00:00:04,970 --> 00:00:07,490 Anticipe, mi jam skribis multe de tiu programo jam. 5 00:00:07,490 --> 00:00:11,130 Unue, mi deklaras variablon, x, kaj stoki en ĝi la valoron, 1. 6 00:00:11,130 --> 00:00:14,120 Tiam mi deklaras variablon y kaj stoki en ĝi la valoron, 2. 7 00:00:14,120 --> 00:00:17,700 >> Tiam mi procedi kun printf montri la valoroj de tiuj du variabloj. 8 00:00:17,700 --> 00:00:21,090 Tiam mi asertas kun alia printf esti interŝanĝi tiujn variablojn. 9 00:00:21,090 --> 00:00:23,690 Tiam mi nomas funkcio nomita swap. 10 00:00:23,690 --> 00:00:26,100 Kaj poste mi asertas ke la variabloj estis ŝanĝitaj. 11 00:00:26,100 --> 00:00:30,610 Kaj poste mi presi ke kion mi asertas estas la novaj valoroj de x kaj y. 12 00:00:30,610 --> 00:00:32,030 >> Nun kio estas cxi tiu funkcio swap? 13 00:00:32,030 --> 00:00:34,970 Ĝi ne estas iu kiu venas kun C. Efektive, se ni rigardas la supro de mia 14 00:00:34,970 --> 00:00:38,850 dosiero, vi rimarkos ke mi deklaris prototipo por koncerna funkcio swap 15 00:00:38,850 --> 00:00:42,750 preciziganta kiu prenas du ints, arbitre nomas a kaj b, kaj ĉi 16 00:00:42,750 --> 00:00:44,300 funkcio ne redonas nenion. 17 00:00:44,300 --> 00:00:48,370 Do supozeble, jes, kion ĝi diras en svopoj a aj kaj b valoroj. 18 00:00:48,370 --> 00:00:50,170 Ni nun apliki swap. 19 00:00:50,170 --> 00:00:53,820 >> Unue, mi tuj rakontos portempa ŝanĝiĝema kaj asigni al ĝi 20 00:00:53,820 --> 00:00:57,260 la valoron en tio, kvankam mi povis nur tiel facile stokitaj en ĝi b. 21 00:00:57,260 --> 00:01:00,925 Mi tiam tuj ŝanĝas la valoron de A al esti egala al tiu en b. 22 00:01:00,925 --> 00:01:04,849 Kaj poste persiste, mi tuj ŝanĝas la valoro de b esti kia estis sed estas 23 00:01:04,849 --> 00:01:06,340 nun en temp. 24 00:01:06,340 --> 00:01:08,910 >> Nun mi asertas, kion mi ĵus faris Estas logike ĝusta. 25 00:01:08,910 --> 00:01:12,780 Mi jam stokita en portempa variablo, ŝanĝis la valoron esti b, kaj tiam 26 00:01:12,780 --> 00:01:15,580 ŝanĝis b valoro esti kia-aj jaroj estis. 27 00:01:15,580 --> 00:01:18,620 Sed kiam mi kompilas kaj kuri ĉi programon, mi timas ke tio ne 28 00:01:18,620 --> 00:01:20,140 irante, kion mi vidis. 29 00:01:20,140 --> 00:01:21,625 >> Faru, neniu swap. 30 00:01:21,625 --> 00:01:24,350 dot oblikvo, neniu swap. 31 00:01:24,350 --> 00:01:27,560 Kaj bedaŭrinde, laŭ printf, la valoro de x kaj y, eĉ 32 00:01:27,560 --> 00:01:31,560 post ni pretendi esti interŝanĝante ili, estas ankoraŭ 1 kaj 2. 33 00:01:31,560 --> 00:01:32,630 >> Nun kial estas tio? 34 00:01:32,630 --> 00:01:36,160 Nu, tio rezultas, ke en ĉefa, kiam ni nomas tiun funkcion swap, pasante en 35 00:01:36,160 --> 00:01:39,960 x kaj y kiel argumentoj, estas reale kopioj de x kaj y ke 36 00:01:39,960 --> 00:01:41,310 transiros en swap. 37 00:01:41,310 --> 00:01:45,430 Nome, iliaj valoroj 1 kaj 2 estas pasis en swap kiel a kaj b. 38 00:01:45,430 --> 00:01:48,590 Kaj ĝi estas a kaj b, ke ni finfine interŝanĝante en ĉefa. 39 00:01:48,590 --> 00:01:50,810 >> Tio estas, 1 iĝas 2, 2 iĝas 1. 40 00:01:50,810 --> 00:01:54,630 Sed ĉar swap havas neniun revenon valoro kaj pro tio ricevis kopiojn de x 41 00:01:54,630 --> 00:01:58,220 kaj y, ĝi estas konduto nenian efikon sur x kaj y. 42 00:01:58,220 --> 00:02:02,610 Ja, a kaj b estas scoped, por tiel diri, interŝanĝi, dum x kaj y restas 43 00:02:02,610 --> 00:02:03,990 scoped al ĉefaj. 44 00:02:03,990 --> 00:02:05,070 >> Do ni havas problemon. 45 00:02:05,070 --> 00:02:06,320 Sed kiel ripari tion? 46 00:02:06,320 --> 00:02:08,312