>> DAVID J. Malan: Mari kita menulis sebuah program dalam yang kami mencoba untuk menukar nilai-nilai
dua variabel, x dan y.
Di muka, saya sudah menulis banyak program ini sudah.
Pertama, saya mendeklarasikan variabel, x, dan simpan di dalamnya nilai, 1.
Lalu aku mendeklarasikan variabel y dan simpan di dalamnya nilai, 2.
>> Kemudian saya lanjutkan dengan printf untuk menampilkan nilai-nilai dari dua variabel.
Lalu aku mengklaim dengan printf lain untuk menukar variabel tersebut.
Lalu aku memanggil fungsi yang disebut swap.
Dan kemudian saya menyatakan bahwa variabel telah bertukar.
Dan kemudian saya mencetak bahwa apa yang saya klaim adalah nilai-nilai baru x dan y.
>> Sekarang apa fungsi ini Swap?
Ini bukan sesuatu yang datang dengan C. Memang, jika kita melihat di bagian atas saya
berkas, Anda akan melihat bahwa saya telah menyatakan prototipe untuk fungsi ini pertukaran
menetapkan bahwa dibutuhkan dua ints, sewenang-wenang disebut a dan b, dan ini
Fungsi tidak mengembalikan apa-apa.
Jadi mungkin, ia melakukan apa yang tertulis swap a dan nilai b.
Mari kita sekarang menerapkan swap.
>> Pertama, aku akan mendeklarasikan sementara variabel dan menetapkan ke
nilai dalam, meskipun aku hanya bisa dengan mudah disimpan di dalamnya b.
Saya kemudian akan mengubah nilai dari untuk menjadi sama dengan yang di b.
Dan kemudian terakhir, aku akan mengubah nilai b menjadi apa itu tapi
sekarang di temp.
>> Sekarang saya mengklaim apa yang baru saja dilakukan secara logika benar.
Aku sudah disimpan dalam variabel sementara, mengubah nilai untuk menjadi b, dan kemudian
mengubah nilai b untuk menjadi apa adalah.
Tapi ketika saya mengkompilasi dan menjalankan ini Program, saya khawatir itu tidak
akan apa yang saya lihat.
>> Membuat, tidak ada swap.
dot slash, tidak ada swap.
Dan sayangnya, menurut printf, nilai x dan y, bahkan
setelah kami mengaku akan swapping mereka, masih 1 dan 2.
>> Sekarang kenapa begitu?
Nah, ternyata bahwa dalam utama, ketika kita memanggil fungsi ini swap, lewat di
x dan y sebagai argumen, itu sebenarnya salinan x dan y yang
dilewatkan ke swap.
Yakni, nilai-nilai mereka 1 dan 2 dilewatkan ke dalam swap karena a dan b.
Dan itu a dan b bahwa kita akhirnya menukar utama.
>> Artinya, 1 menjadi 2, 2 menjadi 1.
Tetapi karena swap tidak memiliki nilai kembali dan karena itu menerima salinan x
dan y, itu perilaku telah tidak berpengaruh pada x dan y.
Memang, a dan b scoped, sehingga untuk berbicara, untuk swap, sedangkan x dan y tetap
scoped to main.
>> Jadi kita punya masalah.
Tapi bagaimana untuk memperbaikinya?