1 00:00:00,000 --> 00:00:03,080 >> SPEAKER 1 Ternyata kita boleh berjaya menukar nilai-nilai dalam dua 2 00:00:03,080 --> 00:00:07,670 pembolehubah dengan melepaskan mereka ke dalam berfungsi bukan dengan nilai atau dengan salinan, tetapi 3 00:00:07,670 --> 00:00:10,390 dengan merujuk atau dengan alamat mereka. 4 00:00:10,390 --> 00:00:12,740 Dalam erti kata lain, kita perlu memanfaatkan sesuatu yang dikenali sebagai penunjuk. 5 00:00:12,740 --> 00:00:15,580 Penunjuk A, benar-benar, hanya alamat beberapa berubah-ubah. 6 00:00:15,580 --> 00:00:19,660 Dan jadi jika kita memberikan fungsi yang dipanggil, katakan, swap dengan alamat 7 00:00:19,660 --> 00:00:23,550 pembolehubah dan alamat lain berubah-ubah, swap perlu diberi kuasa untuk 8 00:00:23,550 --> 00:00:26,090 pergi ke setiap orang alamat dan benar-benar mengubah 9 00:00:26,090 --> 00:00:27,360 nilai-nilai yang ada di sana. 10 00:00:27,360 --> 00:00:28,890 >> Mari kita lihat ini dalam konteks. 11 00:00:28,890 --> 00:00:31,360 Mari kita mengimplemen semula swap seperti berikut. 12 00:00:31,360 --> 00:00:35,810 Pertama, mari kita menukar tidak menjadi int an tetapi untuk menjadi penunjuk kepada int atau yang 13 00:00:35,810 --> 00:00:36,920 alamat int satu. 14 00:00:36,920 --> 00:00:40,820 Kemudian mari kita melakukan perkara yang sama untuk b, berubah dari int untuk menjadi penunjuk kepada 15 00:00:40,820 --> 00:00:42,780 int atau alamat int satu. 16 00:00:42,780 --> 00:00:45,860 >> Kemudian dalam swap, mari kita masih mengisytiharkan tmp supaya kita mempunyai 17 00:00:45,860 --> 00:00:47,810 tempat sementara untuk nilai ini. 18 00:00:47,810 --> 00:00:52,430 Tetapi ini tidak nilai itu sendiri, kerana, sekali lagi, yang kini adalah lokasi 19 00:00:52,430 --> 00:00:53,270 beberapa int. 20 00:00:53,270 --> 00:00:57,320 Jadi, jika kita mahu pergi ke alamat itu dan mendapatkan int di alamat itu, kami mempunyai 21 00:00:57,320 --> 00:01:03,020 dereference penunjuk ini, juga dengan cara pengendali bintang, menulis bintang. 22 00:01:03,020 --> 00:01:05,470 >> Seterusnya, saya tidak mahu berubah nilai a. 23 00:01:05,470 --> 00:01:08,770 Saya ingin menukar nilai di yang, dengan mengingati, sekali lagi, 24 00:01:08,770 --> 00:01:10,350 yang alamat. 25 00:01:10,350 --> 00:01:14,050 Jadi untuk berbuat demikian, saya sekali lagi perlu untuk mengatakan bintang mendapat. 26 00:01:14,050 --> 00:01:18,360 Dan sekarang saya mahu dimasukkan ke dalam nilai itulah di b, tidak nilai b, yang 27 00:01:18,360 --> 00:01:19,720 juga alamat. 28 00:01:19,720 --> 00:01:22,280 >> Jadi sekali lagi saya katakan, bintang b. 29 00:01:22,280 --> 00:01:26,690 Kemudian pada baris terakhir saya, saya perlu menulis ganti apa yang di alamat b dengan 30 00:01:26,690 --> 00:01:28,970 apa yang di lokasi yang ini asal. 31 00:01:28,970 --> 00:01:32,910 Untuk melakukan itu, saya mendapat bintang b tmp. 32 00:01:32,910 --> 00:01:34,820 >> Kini pada akhir hari, ini fungsi masih hanya 33 00:01:34,820 --> 00:01:35,950 tiga baris kod. 34 00:01:35,950 --> 00:01:39,860 Tetapi kerana ia memanipulasi nilai-nilai melalui alamat mereka dan bukan 35 00:01:39,860 --> 00:01:43,700 nilai-nilai mentah yang telah berlalu ke dalam fungsi, saya mendakwa bahawa swap kini 36 00:01:43,700 --> 00:01:47,670 kuasa untuk menukar nilai-nilai yang adalah diluluskan pada melalui alamat mereka. 37 00:01:47,670 --> 00:01:49,510 >> Tetapi saya perlu membuat satu perubahan masih. 38 00:01:49,510 --> 00:01:52,190 Saya tidak lagi boleh lulus dalam x dan y diri mereka sendiri. 39 00:01:52,190 --> 00:01:55,030 Saya perlu lulus dalam alamat x dan y. 40 00:01:55,030 --> 00:01:58,160 Dan untuk berbuat demikian, saya memerlukan sedikit berbeza atas notasi atas. 41 00:01:58,160 --> 00:02:02,510 Saya hendak tukar x dan y dengan lulus dalam alamat x, ditandakan dengan 42 00:02:02,510 --> 00:02:07,190 Ampersand x, dan alamat y, ditandakan dengan Ampersand y. 43 00:02:07,190 --> 00:02:10,570 >> Begitu juga, sehingga atas kini yang perlu saya menukar prototaip fungsi untuk 44 00:02:10,570 --> 00:02:14,980 sepadan dengan perubahan yang saya telah dibuat, supaya adalah, sekali lagi, penunjuk kepada int satu. 45 00:02:14,980 --> 00:02:17,190 b adalah, sekali lagi, penunjuk kepada int satu. 46 00:02:17,190 --> 00:02:18,770 Dan sekarang saya boleh menyimpan fail saya. 47 00:02:18,770 --> 00:02:20,680 Dan mari kita susun semula dan menjalankannya. 48 00:02:20,680 --> 00:02:25,330 >> Buat swap swap dot slash. 49 00:02:25,330 --> 00:02:29,660 Dan kali ini, x dan y memang kini ditukar seperti bahawa nilai-nilai mereka tidak 50 00:02:29,660 --> 00:02:31,950 1 dan 2, tetapi 2 dan 1. 51 00:02:31,950 --> 00:02:34,900