1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Mari kita menulis sebuah program dalam yang kami mencoba untuk menukar nilai-nilai 3 00:00:02,700 --> 00:00:04,970 dua variabel, x dan y. 4 00:00:04,970 --> 00:00:07,490 Di muka, saya sudah menulis banyak program ini sudah. 5 00:00:07,490 --> 00:00:11,130 Pertama, saya mendeklarasikan variabel, x, dan simpan di dalamnya nilai, 1. 6 00:00:11,130 --> 00:00:14,120 Lalu aku mendeklarasikan variabel y dan simpan di dalamnya nilai, 2. 7 00:00:14,120 --> 00:00:17,700 >> Kemudian saya lanjutkan dengan printf untuk menampilkan nilai-nilai dari dua variabel. 8 00:00:17,700 --> 00:00:21,090 Lalu aku mengklaim dengan printf lain untuk menukar variabel tersebut. 9 00:00:21,090 --> 00:00:23,690 Lalu aku memanggil fungsi yang disebut swap. 10 00:00:23,690 --> 00:00:26,100 Dan kemudian saya menyatakan bahwa variabel telah bertukar. 11 00:00:26,100 --> 00:00:30,610 Dan kemudian saya mencetak bahwa apa yang saya klaim adalah nilai-nilai baru x dan y. 12 00:00:30,610 --> 00:00:32,030 >> Sekarang apa fungsi ini Swap? 13 00:00:32,030 --> 00:00:34,970 Ini bukan sesuatu yang datang dengan C. Memang, jika kita melihat di bagian atas saya 14 00:00:34,970 --> 00:00:38,850 berkas, Anda akan melihat bahwa saya telah menyatakan prototipe untuk fungsi ini pertukaran 15 00:00:38,850 --> 00:00:42,750 menetapkan bahwa dibutuhkan dua ints, sewenang-wenang disebut a dan b, dan ini 16 00:00:42,750 --> 00:00:44,300 Fungsi tidak mengembalikan apa-apa. 17 00:00:44,300 --> 00:00:48,370 Jadi mungkin, ia melakukan apa yang tertulis swap a dan nilai b. 18 00:00:48,370 --> 00:00:50,170 Mari kita sekarang menerapkan swap. 19 00:00:50,170 --> 00:00:53,820 >> Pertama, aku akan mendeklarasikan sementara variabel dan menetapkan ke 20 00:00:53,820 --> 00:00:57,260 nilai dalam, meskipun aku hanya bisa dengan mudah disimpan di dalamnya b. 21 00:00:57,260 --> 00:01:00,925 Saya kemudian akan mengubah nilai dari untuk menjadi sama dengan yang di b. 22 00:01:00,925 --> 00:01:04,849 Dan kemudian terakhir, aku akan mengubah nilai b menjadi apa itu tapi 23 00:01:04,849 --> 00:01:06,340 sekarang di temp. 24 00:01:06,340 --> 00:01:08,910 >> Sekarang saya mengklaim apa yang baru saja dilakukan secara logika benar. 25 00:01:08,910 --> 00:01:12,780 Aku sudah disimpan dalam variabel sementara, mengubah nilai untuk menjadi b, dan kemudian 26 00:01:12,780 --> 00:01:15,580 mengubah nilai b untuk menjadi apa adalah. 27 00:01:15,580 --> 00:01:18,620 Tapi ketika saya mengkompilasi dan menjalankan ini Program, saya khawatir itu tidak 28 00:01:18,620 --> 00:01:20,140 akan apa yang saya lihat. 29 00:01:20,140 --> 00:01:21,625 >> Membuat, tidak ada swap. 30 00:01:21,625 --> 00:01:24,350 dot slash, tidak ada swap. 31 00:01:24,350 --> 00:01:27,560 Dan sayangnya, menurut printf, nilai x dan y, bahkan 32 00:01:27,560 --> 00:01:31,560 setelah kami mengaku akan swapping mereka, masih 1 dan 2. 33 00:01:31,560 --> 00:01:32,630 >> Sekarang kenapa begitu? 34 00:01:32,630 --> 00:01:36,160 Nah, ternyata bahwa dalam utama, ketika kita memanggil fungsi ini swap, lewat di 35 00:01:36,160 --> 00:01:39,960 x dan y sebagai argumen, itu sebenarnya salinan x dan y yang 36 00:01:39,960 --> 00:01:41,310 dilewatkan ke swap. 37 00:01:41,310 --> 00:01:45,430 Yakni, nilai-nilai mereka 1 dan 2 dilewatkan ke dalam swap karena a dan b. 38 00:01:45,430 --> 00:01:48,590 Dan itu a dan b bahwa kita akhirnya menukar utama. 39 00:01:48,590 --> 00:01:50,810 >> Artinya, 1 menjadi 2, 2 menjadi 1. 40 00:01:50,810 --> 00:01:54,630 Tetapi karena swap tidak memiliki nilai kembali dan karena itu menerima salinan x 41 00:01:54,630 --> 00:01:58,220 dan y, itu perilaku telah tidak berpengaruh pada x dan y. 42 00:01:58,220 --> 00:02:02,610 Memang, a dan b scoped, sehingga untuk berbicara, untuk swap, sedangkan x dan y tetap 43 00:02:02,610 --> 00:02:03,990 scoped to main. 44 00:02:03,990 --> 00:02:05,070 >> Jadi kita punya masalah. 45 00:02:05,070 --> 00:02:06,320 Tapi bagaimana untuk memperbaikinya? 46 00:02:06,320 --> 00:02:08,312