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