DAVID J. مالان: دعونا كتابة برنامج في التي نحاول مبادلة قيم متغيرين، x و y. مقدما، لقد كتب الكثير هذا البرنامج بالفعل. الأول، تعريف متغير، س، وتخزينه قيمة، 1. ثم أعلن متغير y و تخزين في ذلك قيمة، 2. ثم أشرع مع printf لعرض قيم هذه المتغيرات اثنين. ثم أزعم مع printf أخرى ليتم تبادل تلك المتغيرات. ثم أدعو دالة يسمى المبادلة. ومن ثم أزعم أن المتغيرات وقد تبادلت. وبعد ذلك بطباعة أن ما أزعم هي القيم الجديدة من x و y. الآن ما هو هذا ظيفة المبادلة؟ انها ليست شيئا يأتي مع C. في الواقع، إذا نظرنا إلى الجزء العلوي من بلدي ملف، ستلاحظ أن لقد أعلن نموذج أولي لهذه المهمة المبادلة تحديد أنه يأخذ اثنين رجات، دعا تعسفا أ و ب، وهذا وظيفة لا يعود أي شيء. لذلك يفترض، وتفعل ما تقول في مقايضة لوالقيم وب. دعونا الآن تنفيذ المبادلة. أولا، أنا ذاهب الى اعلان مؤقت متغير وتعيين إليها القيمة في ذلك، على الرغم من أنني يمكن فقط كما تم تخزينها بسهولة في ذلك ب. أنا ثم الذهاب الى تغيير قيمة من أن تكون مساوية لتلك التي في ب. ثم أخيرا، أنا ذاهب إلى تغيير قيمة ب أن يكون ما كان ولكن هو الآن في درجة الحرارة. الآن أزعم ما قمت به فقط هو الصحيح منطقيا. لقد تخزين في متغير مؤقت، تغيرت قيمة للتكون لب، ومن ثم تغيير قيمة ب ليكون ما كان ل. ولكن عندما كنت تجميع وتشغيل هذا البرنامج، وأنا قلق هذا ليس يذهب ما أرى. جعل، أي مقايضة. نقطة خفض، لا المبادلة. ومما يؤسف له، وفقا لprintf، قيمة x و y، حتى بعد ندعي أن مبادلة منهم، لا يزال 1 و 2. الآن لماذا؟ كذلك، اتضح أنه في الرئيسي، ونحن عندما استدعاء هذه الدالة المبادلة، ويمر في x و y كوسائط، انها فعلا نسخ من x و y التي ومرت في المبادلة. وهي قيمهم 1 و 2 مرت في المبادلة كما أ و ب. وانها وب أننا في نهاية المطاف مبادلة في الرئيسية. وهذا هو، يصبح 1 2، 2 يصبح 1. ولكن لأن المبادلة لا يوجد لديه قيمة الإرجاع ونظرا إلى أنها تلقت نسخا من خ و y، انها سلوك و أي تأثير على x و y. في الواقع، وراقب أ و ب، إذا جاز التعبير، لمبادلة، في حين تبقى x و y راقب لالرئيسي. لذلك لدينا مشكلة. ولكن كيف لاصلاحها؟