1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. MALAN: Mari kita menulis program di yang kita cuba untuk menukar nilai-nilai 3 00:00:02,700 --> 00:00:04,970 dua pembolehubah, x dan y. 4 00:00:04,970 --> 00:00:07,490 Terlebih dahulu, saya telah menulis banyak program ini sudah. 5 00:00:07,490 --> 00:00:11,130 Pertama, saya mengisytiharkan pembolehubah, x, dan menyimpan di dalamnya nilai, 1. 6 00:00:11,130 --> 00:00:14,120 Kemudian saya mengisytiharkan pembolehubah y dan menyimpan di dalamnya nilai, 2. 7 00:00:14,120 --> 00:00:17,700 >> Kemudian saya meneruskan printf untuk memaparkan nilai-nilai kedua-dua pembolehubah. 8 00:00:17,700 --> 00:00:21,090 Kemudian saya menuntut dengan printf lain untuk bertukar-tukar mereka pembolehubah. 9 00:00:21,090 --> 00:00:23,690 Kemudian saya memanggil fungsi yang dipanggil swap. 10 00:00:23,690 --> 00:00:26,100 Dan kemudian saya menuntut bahawa pembolehubah telah ditukar. 11 00:00:26,100 --> 00:00:30,610 Dan kemudian saya mencetak bahawa apa yang saya menuntut merupakan nilai-nilai baru x dan y. 12 00:00:30,610 --> 00:00:32,030 >> Sekarang apa yang swap fungsi ini? 13 00:00:32,030 --> 00:00:34,970 Ia bukan sesuatu yang datang dengan C. Malah, jika kita lihat di bahagian atas saya 14 00:00:34,970 --> 00:00:38,850 fail, anda akan notis bahawa saya telah diisytiharkan prototaip untuk swap fungsi ini 15 00:00:38,850 --> 00:00:42,750 yang menyatakan bahawa ia mengambil masa dua Ints, sewenang-wenangnya dipanggil a dan b, dan ini 16 00:00:42,750 --> 00:00:44,300 fungsi tidak kembali apa-apa. 17 00:00:44,300 --> 00:00:48,370 Jadi mungkin, ia melakukan apa yang ia berkata dalam pertukaran satu dan nilai-nilai b ini. 18 00:00:48,370 --> 00:00:50,170 Sekarang mari kita melaksanakan swap. 19 00:00:50,170 --> 00:00:53,820 >> Pertama, saya akan mengisytiharkan sementara berubah-ubah dan memberikan kepadanya 20 00:00:53,820 --> 00:00:57,260 nilai dalam, walaupun saya boleh hanya sebagai mudah disimpan di dalamnya b. 21 00:00:57,260 --> 00:01:00,925 Saya kemudian akan menukar nilai daripada menjadi sama dengan yang dalam b. 22 00:01:00,925 --> 00:01:04,849 Dan kemudian akhir sekali, saya akan menukar nilai b untuk menjadi apa yang adalah tetapi 23 00:01:04,849 --> 00:01:06,340 kini dalam temp. 24 00:01:06,340 --> 00:01:08,910 >> Sekarang saya menuntut apa yang saya baru sahaja dilakukan adalah benar secara logik. 25 00:01:08,910 --> 00:01:12,780 Saya disimpan dalam pembolehubah sementara, berubah itu nilai untuk menjadi b, dan kemudian 26 00:01:12,780 --> 00:01:15,580 berubah nilai b untuk menjadi apa yang ini adalah satu. 27 00:01:15,580 --> 00:01:18,620 Tetapi apabila saya menyusun dan menjalankan ini program, saya bimbang itu bukan 28 00:01:18,620 --> 00:01:20,140 akan apa yang saya lihat. 29 00:01:20,140 --> 00:01:21,625 >> Buat, tiada swap. 30 00:01:21,625 --> 00:01:24,350 dot slash, tiada swap. 31 00:01:24,350 --> 00:01:27,560 Dan malangnya, menurut printf, nilai x dan y, walaupun 32 00:01:27,560 --> 00:01:31,560 selepas kami menuntut untuk bertukar-tukar mereka, masih 1 dan 2. 33 00:01:31,560 --> 00:01:32,630 >> Sekarang mengapa itu? 34 00:01:32,630 --> 00:01:36,160 Nah, ternyata bahawa dalam utama, apabila kita memanggil swap fungsi ini, lulus dalam 35 00:01:36,160 --> 00:01:39,960 x dan y sebagai hujah, ia sebenarnya salinan x dan y yang 36 00:01:39,960 --> 00:01:41,310 yang diserahkan swap. 37 00:01:41,310 --> 00:01:45,430 Iaitu, nilai 1 dan 2 adalah diluluskan swap sebagai a dan b. 38 00:01:45,430 --> 00:01:48,590 Dan ia a dan b bahawa kita akhirnya bertukar-tukar dalam kerja. 39 00:01:48,590 --> 00:01:50,810 >> Iaitu, 1 menjadi 2, 2 menjadi 1. 40 00:01:50,810 --> 00:01:54,630 Tetapi kerana swap tidak mempunyai nilai pulangan dan kerana ia menerima salinan x 41 00:01:54,630 --> 00:01:58,220 dan y, ia tingkah laku telah kesan ke atas x dan y. 42 00:01:58,220 --> 00:02:02,610 Sesungguhnya, a dan b adalah scoped, jadi untuk bercakap, untuk menukar, manakala x dan y kekal 43 00:02:02,610 --> 00:02:03,990 scoped untuk utama. 44 00:02:03,990 --> 00:02:05,070 >> Oleh itu, kita mempunyai masalah. 45 00:02:05,070 --> 00:02:06,320 Tetapi bagaimana untuk memperbaikinya? 46 00:02:06,320 --> 00:02:08,312