1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Да се ​​напише програма, в което ние се опитваме да сменяте стойностите на 3 00:00:02,700 --> 00:00:04,970 две променливи, X и Y. 4 00:00:04,970 --> 00:00:07,490 В предварително, аз съм писал много на тази програма вече. 5 00:00:07,490 --> 00:00:11,130 Първо, аз декларирам променлива, х, и се съхранява в него стойността, 1. 6 00:00:11,130 --> 00:00:14,120 Тогава декларира променлива Y и съхранявате в него стойността, 2. 7 00:00:14,120 --> 00:00:17,700 >> След това продължете с ФОРМАТ за да се покаже стойностите на тези две променливи. 8 00:00:17,700 --> 00:00:21,090 След това аз твърдя с друг ФОРМАТ да се смяна тези променливи. 9 00:00:21,090 --> 00:00:23,690 След това аз наричам функция, наречена суап. 10 00:00:23,690 --> 00:00:26,100 И след това аз твърдя, че променливите са разменят. 11 00:00:26,100 --> 00:00:30,610 И тогава аз отпечатате, че това, което аз твърдя, са новите стойности на х и у. 12 00:00:30,610 --> 00:00:32,030 >> Сега какво е тази функция суап? 13 00:00:32,030 --> 00:00:34,970 Това не е нещо, което идва с C. Всъщност, ако погледнем в горната част на моя 14 00:00:34,970 --> 00:00:38,850 файл, вие ще забележите, че съм обявен прототип за тази функция суап 15 00:00:38,850 --> 00:00:42,750 уточнява, че това отнема две целочислени, произволно нарича и б, и този 16 00:00:42,750 --> 00:00:44,300 функция не връща нищо. 17 00:00:44,300 --> 00:00:48,370 Така че, вероятно, той прави това, което казва, че в суапове на А и Б стойности. 18 00:00:48,370 --> 00:00:50,170 Нека сега приложи суап. 19 00:00:50,170 --> 00:00:53,820 >> Първо, аз отивам да обяви временно променлива и му възложи 20 00:00:53,820 --> 00:00:57,260 стойността в, въпреки че можех просто толкова лесно, съхранявани в нея б. 21 00:00:57,260 --> 00:01:00,925 Аз след това ще се промени стойността за да бъде равна на тази в б. 22 00:01:00,925 --> 00:01:04,849 И тогава най-накрая, аз отивам да се промени стойност на Б да бъде това, което е било, но е 23 00:01:04,849 --> 00:01:06,340 сега в темп. 24 00:01:06,340 --> 00:01:08,910 >> Сега аз твърдя това, което току-що направихте е логически правилно. 25 00:01:08,910 --> 00:01:12,780 Аз бях съхранили във временна променлива, променена стойност да бъде б, а след това 26 00:01:12,780 --> 00:01:15,580 променила Б стойност да бъде това, което беше. 27 00:01:15,580 --> 00:01:18,620 Но когато се съставят и стартирате тази програма, аз се притеснявам, че не е 28 00:01:18,620 --> 00:01:20,140 става това, което виждам. 29 00:01:20,140 --> 00:01:21,625 >> Уверете се, не суап. 30 00:01:21,625 --> 00:01:24,350 дот наклонена черта, не суап. 31 00:01:24,350 --> 00:01:27,560 За съжаление, според ФОРМАТ, стойността на х и у, дори 32 00:01:27,560 --> 00:01:31,560 след като твърдят, че са смяна тях, е все още 1 и 2. 33 00:01:31,560 --> 00:01:32,630 >> Сега, защо е това? 34 00:01:32,630 --> 00:01:36,160 Е, оказва се, че в основния, когато ние наричаме тази функция суап, минаваща през 35 00:01:36,160 --> 00:01:39,960 X и Y като аргументи, това е всъщност копия на х и у, че 36 00:01:39,960 --> 00:01:41,310 са преминали в суап. 37 00:01:41,310 --> 00:01:45,430 Именно техните стойности 1 и 2 са преминава в замяна като и б. 38 00:01:45,430 --> 00:01:48,590 И това е А и Б, че ние сме в крайна сметка смяна в основния. 39 00:01:48,590 --> 00:01:50,810 >> Това означава, че 1 се превръща в 2, 2 става 1. 40 00:01:50,810 --> 00:01:54,630 Но тъй като суап има няма връщане стойност и защото го е получила копия от х 41 00:01:54,630 --> 00:01:58,220 и Y, това е поведение е няма ефект на х и у. 42 00:01:58,220 --> 00:02:02,610 В действителност, а и б са с обхват, така да се каже, за да сменяте, докато X и Y остават 43 00:02:02,610 --> 00:02:03,990 с обхват на основното. 44 00:02:03,990 --> 00:02:05,070 >> Така че имаме проблем. 45 00:02:05,070 --> 00:02:06,320 Но как да го оправя? 46 00:02:06,320 --> 00:02:08,312