>> DAVID J. Malan: Да се ​​напише програма, в което ние се опитваме да сменяте стойностите на
две променливи, X и Y.
В предварително, аз съм писал много на тази програма вече.
Първо, аз декларирам променлива, х, и се съхранява в него стойността, 1.
Тогава декларира променлива Y и съхранявате в него стойността, 2.
>> След това продължете с ФОРМАТ за да се покаже стойностите на тези две променливи.
След това аз твърдя с друг ФОРМАТ да се смяна тези променливи.
След това аз наричам функция, наречена суап.
И след това аз твърдя, че променливите са разменят.
И тогава аз отпечатате, че това, което аз твърдя, са новите стойности на х и у.
>> Сега какво е тази функция суап?
Това не е нещо, което идва с C. Всъщност, ако погледнем в горната част на моя
файл, вие ще забележите, че съм обявен прототип за тази функция суап
уточнява, че това отнема две целочислени, произволно нарича и б, и този
функция не връща нищо.
Така че, вероятно, той прави това, което казва, че в суапове на А и Б стойности.
Нека сега приложи суап.
>> Първо, аз отивам да обяви временно променлива и му възложи
стойността в, въпреки че можех просто толкова лесно, съхранявани в нея б.
Аз след това ще се промени стойността за да бъде равна на тази в б.
И тогава най-накрая, аз отивам да се промени стойност на Б да бъде това, което е било, но е
сега в темп.
>> Сега аз твърдя това, което току-що направихте е логически правилно.
Аз бях съхранили във временна променлива, променена стойност да бъде б, а след това
променила Б стойност да бъде това, което беше.
Но когато се съставят и стартирате тази програма, аз се притеснявам, че не е
става това, което виждам.
>> Уверете се, не суап.
дот наклонена черта, не суап.
За съжаление, според ФОРМАТ, стойността на х и у, дори
след като твърдят, че са смяна тях, е все още 1 и 2.
>> Сега, защо е това?
Е, оказва се, че в основния, когато ние наричаме тази функция суап, минаваща през
X и Y като аргументи, това е всъщност копия на х и у, че
са преминали в суап.
Именно техните стойности 1 и 2 са преминава в замяна като и б.
И това е А и Б, че ние сме в крайна сметка смяна в основния.
>> Това означава, че 1 се превръща в 2, 2 става 1.
Но тъй като суап има няма връщане стойност и защото го е получила копия от х
и Y, това е поведение е няма ефект на х и у.
В действителност, а и б са с обхват, така да се каже, за да сменяте, докато X и Y остават
с обхват на основното.
>> Така че имаме проблем.
Но как да го оправя?