DAVID J. MALAN: Mari kita menulis program di yang kita cuba untuk menukar nilai-nilai dua pembolehubah, x dan y. Terlebih dahulu, saya telah menulis banyak program ini sudah. Pertama, saya mengisytiharkan pembolehubah, x, dan menyimpan di dalamnya nilai, 1. Kemudian saya mengisytiharkan pembolehubah y dan menyimpan di dalamnya nilai, 2. Kemudian saya meneruskan printf untuk memaparkan nilai-nilai kedua-dua pembolehubah. Kemudian saya menuntut dengan printf lain untuk bertukar-tukar mereka pembolehubah. Kemudian saya memanggil fungsi yang dipanggil swap. Dan kemudian saya menuntut bahawa pembolehubah telah ditukar. Dan kemudian saya mencetak bahawa apa yang saya menuntut merupakan nilai-nilai baru x dan y. Sekarang apa yang swap fungsi ini? Ia bukan sesuatu yang datang dengan C. Malah, jika kita lihat di bahagian atas saya fail, anda akan notis bahawa saya telah diisytiharkan prototaip untuk swap fungsi ini yang menyatakan bahawa ia mengambil masa dua Ints, sewenang-wenangnya dipanggil a dan b, dan ini fungsi tidak kembali apa-apa. Jadi mungkin, ia melakukan apa yang ia berkata dalam pertukaran satu dan nilai-nilai b ini. Sekarang mari kita melaksanakan swap. Pertama, saya akan mengisytiharkan sementara berubah-ubah dan memberikan kepadanya nilai dalam, walaupun saya boleh hanya sebagai mudah disimpan di dalamnya b. Saya kemudian akan menukar nilai daripada menjadi sama dengan yang dalam b. Dan kemudian akhir sekali, saya akan menukar nilai b untuk menjadi apa yang adalah tetapi kini dalam temp. Sekarang saya menuntut apa yang saya baru sahaja dilakukan adalah benar secara logik. Saya disimpan dalam pembolehubah sementara, berubah itu nilai untuk menjadi b, dan kemudian berubah nilai b untuk menjadi apa yang ini adalah satu. Tetapi apabila saya menyusun dan menjalankan ini program, saya bimbang itu bukan akan apa yang saya lihat. Buat, tiada swap. dot slash, tiada swap. Dan malangnya, menurut printf, nilai x dan y, walaupun selepas kami menuntut untuk bertukar-tukar mereka, masih 1 dan 2. Sekarang mengapa itu? Nah, ternyata bahawa dalam utama, apabila kita memanggil swap fungsi ini, lulus dalam x dan y sebagai hujah, ia sebenarnya salinan x dan y yang yang diserahkan swap. Iaitu, nilai 1 dan 2 adalah diluluskan swap sebagai a dan b. Dan ia a dan b bahawa kita akhirnya bertukar-tukar dalam kerja. Iaitu, 1 menjadi 2, 2 menjadi 1. Tetapi kerana swap tidak mempunyai nilai pulangan dan kerana ia menerima salinan x dan y, ia tingkah laku telah kesan ke atas x dan y. Sesungguhnya, a dan b adalah scoped, jadi untuk bercakap, untuk menukar, manakala x dan y kekal scoped untuk utama. Oleh itu, kita mempunyai masalah. Tetapi bagaimana untuk memperbaikinya?