1 00:00:00,000 --> 00:00:01,110 >> [MUZIK bermain] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. MALAN: Baiklah. 4 00:00:11,650 --> 00:00:15,610 Ini adalah CS50, dan ini adalah akhir Minggu Empat. 5 00:00:15,610 --> 00:00:19,420 Dan salah satu topik hari ini ialah forensik digital, 6 00:00:19,420 --> 00:00:20,989 seni pulih maklumat. 7 00:00:20,989 --> 00:00:22,780 Dan memang, walaupun anda di tengah 8 00:00:22,780 --> 00:00:25,070 sekarang Damai di Three dan Breakout, minggu depan, 9 00:00:25,070 --> 00:00:27,880 tumpuan akan diberikan pada tepat domain ini. 10 00:00:27,880 --> 00:00:30,686 >> Jadi salah satu pekerjaan yang paling sejuk yang pernah saya terpaksa kembali ke sekolah siswazah, 11 00:00:30,686 --> 00:00:33,560 apabila saya bekerja untuk tempatan Middlesex County Daerah Peguam ini 12 00:00:33,560 --> 00:00:34,950 pejabat, melakukan forensik bekerja. 13 00:00:34,950 --> 00:00:37,450 Jadi pada dasarnya, Massachusetts Polis Negeri, kadang-kadang, 14 00:00:37,450 --> 00:00:40,100 apabila bekerja pada kes-kes akan membawa perkara-perkara seperti cakera keras 15 00:00:40,100 --> 00:00:42,185 dan cakera liut dan kad memori dan seumpamanya. 16 00:00:42,185 --> 00:00:44,060 Dan mereka akan menyerahkan mereka kepada saya dan mentor saya, 17 00:00:44,060 --> 00:00:48,070 dan matlamat kami adalah untuk mencari bukti, jika ada apa-apa, di media-media ini. 18 00:00:48,070 --> 00:00:50,700 Sekilas sekarang, anda mungkin telah melihat dunia forensik 19 00:00:50,700 --> 00:00:53,000 dalam media, TV dan filem. 20 00:00:53,000 --> 00:00:55,730 Tetapi kerja saya, dan berani mengatakan dunia itu, 21 00:00:55,730 --> 00:00:57,550 tidak cukup seperti anda akan melihatnya. 22 00:00:57,550 --> 00:01:00,794 Mari kita lihat apa yang anda mungkin telah melihat. 23 00:01:00,794 --> 00:01:01,460 [VIDEO MAIN SEMULA] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Sekarang, mari kita lihat baik pada anda. 26 00:01:05,380 --> 00:01:06,850 >> [MUZIK bermain] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Hold Ia. 29 00:01:12,932 --> 00:01:13,657 Berlari kembali itu. 30 00:01:13,657 --> 00:01:14,733 >> -Wait Minit. 31 00:01:14,733 --> 00:01:15,233 Pergi ke kanan. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -Terdapat. 34 00:01:16,870 --> 00:01:17,369 Membekukan itu. 35 00:01:17,369 --> 00:01:17,930 Skrin -full. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Membekukan itu. 38 00:01:18,875 --> 00:01:20,160 -Tighten Di atas itu, akan anda? 39 00:01:20,160 --> 00:01:22,126 >> -Vector Dalam pada itu lelaki dengan roda belakang. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom Di di sini di tempat ini. 41 00:01:24,435 --> 00:01:28,580 >> -with Peralatan yang betul, imej boleh dibesarkan dan tajam. 42 00:01:28,580 --> 00:01:29,330 >> -Apa Itu? 43 00:01:29,330 --> 00:01:30,780 >> -Ia Merupakan satu program peningkatan. 44 00:01:30,780 --> 00:01:32,170 >> -Boleh Anda jelas bahawa sebarang? 45 00:01:32,170 --> 00:01:33,070 >> -Saya Tidak tahu. 46 00:01:33,070 --> 00:01:34,150 Mari kita meningkatkan ia. 47 00:01:34,150 --> 00:01:35,440 >> -Meningkatkan Seksyen A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Saya dipertingkatkan terperinci, dan- 50 00:01:38,562 --> 00:01:40,020 -Saya Fikir ada cukup untuk meningkatkan. 51 00:01:40,020 --> 00:01:40,976 Melepaskannya ke skrin saya. 52 00:01:40,976 --> 00:01:42,559 >> -Saya Dipertingkatkan pantulan pada mata dia. 53 00:01:42,559 --> 00:01:44,322 -Let S berjalan melalui peningkatan video. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Anda boleh meningkatkan ini? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Pada. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Aku Telah bekerja pada refleksi ini. 58 00:01:49,458 --> 00:01:50,402 >> Renungan seseorang -Terdapat itu ini. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -Terdapat Satu renungan muka manusia. 61 00:01:52,870 --> 00:01:53,694 >> Renungan-The! 62 00:01:53,694 --> 00:01:54,610 -Terdapat Adalah satu pantulan. 63 00:01:54,610 --> 00:01:55,880 -Zoom Di atas cermin. 64 00:01:55,880 --> 00:01:57,860 Anda boleh melihat pantulan. 65 00:01:57,860 --> 00:01:59,630 >> -Boleh Anda meningkatkan imej dari sini? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -Boleh Anda meningkatkan ia? 68 00:02:01,210 --> 00:02:02,190 -Boleh Anda meningkatkan ia? 69 00:02:02,190 --> 00:02:03,066 -Boleh Kita meningkatkan ini? 70 00:02:03,066 --> 00:02:03,898 -Boleh Anda meningkatkan ia? 71 00:02:03,898 --> 00:02:04,740 -Hold Pada saat. 72 00:02:04,740 --> 00:02:05,281 Saya akan meningkatkan. 73 00:02:05,281 --> 00:02:06,470 -Zoom Di pintu. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Move Dalam. 77 00:02:08,509 --> 00:02:09,340 -Lebih. 78 00:02:09,340 --> 00:02:10,094 -Wait, Berhenti. 79 00:02:10,094 --> 00:02:10,750 -Stop. 80 00:02:10,750 --> 00:02:11,250 -Pause Ia. 81 00:02:11,250 --> 00:02:13,542 -Putar Kami 75 darjah sekitar menegak, sila. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Stop. 84 00:02:16,127 --> 00:02:19,330 Kembali ke bahagian kira-kira pintu lagi. 85 00:02:19,330 --> 00:02:21,420 >> -Got Enhancer imej bitmap yang boleh? 86 00:02:21,420 --> 00:02:24,420 >> -Maybe Kita boleh menggunakan Pradeep Singh kaedah untuk melihat ke tingkap. 87 00:02:24,420 --> 00:02:25,902 >> Perisian-The adalah keadaan seni. 88 00:02:25,902 --> 00:02:26,866 >> Nilai eigen-The dimatikan. 89 00:02:26,866 --> 00:02:29,758 >> -with Hak gabungan algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> Pencahayaan diambil -Dia ini algoritma ke tahap yang seterusnya, 91 00:02:32,168 --> 00:02:34,110 dan saya boleh menggunakannya untuk meningkatkan gambar ini. 92 00:02:34,110 --> 00:02:36,840 >> -Lock Pada dan membesarkan-paksi z. 93 00:02:36,840 --> 00:02:37,351 >> -Meningkatkan. 94 00:02:37,351 --> 00:02:37,850 Meningkatkan. 95 00:02:37,850 --> 00:02:38,720 -Meningkatkan. 96 00:02:38,720 --> 00:02:40,070 -Freeze Dan meningkatkan. 97 00:02:40,070 --> 00:02:43,420 [VIDEO AKHIR MAIN SEMULA] 98 00:02:43,420 --> 00:02:45,830 DAVID J. MALAN: Jadi mereka adalah semua kata-kata, tetapi mereka tidak 99 00:02:45,830 --> 00:02:47,870 digunakan dalam ayat dengan betul. 100 00:02:47,870 --> 00:02:52,370 Dan sesungguhnya pada masa akan datang, bila-bila masa, sila, anda mendengar seseorang mengatakan perkataan tersebut, 101 00:02:52,370 --> 00:02:54,250 "Meningkatkan," ketawa hanya sedikit. 102 00:02:54,250 --> 00:02:57,190 Kerana apabila anda cuba untuk meningkatkan, misalnya, ini adalah apa yang berlaku. 103 00:02:57,190 --> 00:02:58,580 >> Jadi di sini adalah satu gambar yang cantik. 104 00:02:58,580 --> 00:02:59,720 Ini adalah CS50 sendiri Daven. 105 00:02:59,720 --> 00:03:03,740 Dan katalah kita mahu memberi tumpuan dalam pada sekelip dalam matanya, 106 00:03:03,740 --> 00:03:05,870 atau pantulan yang lelaki yang buruk yang jelas 107 00:03:05,870 --> 00:03:07,820 yang ditangkap oleh kamera keselamatan. 108 00:03:07,820 --> 00:03:10,330 Ini adalah apa yang berlaku apabila anda zum masuk pada imej yang 109 00:03:10,330 --> 00:03:14,060 hanya mempunyai beberapa terhingga bit yang dikaitkan dengannya. 110 00:03:14,060 --> 00:03:15,420 >> Itulah apa yang anda akan mendapat. 111 00:03:15,420 --> 00:03:19,190 Dan sesungguhnya, di mata Daven ini tetapi adalah empat, mungkin enam piksel 112 00:03:19,190 --> 00:03:22,110 yang mengarang apa telah kelip redup di sana. 113 00:03:22,110 --> 00:03:25,890 Jadi Set Masalah Empat akhirnya akan mempunyai anda meneroka dunia ini, terutamanya 114 00:03:25,890 --> 00:03:28,090 oleh sifat sesuatu kita panggil fail i / o, di mana 115 00:03:28,090 --> 00:03:31,000 i / o adalah hanya satu cara mewah daripada berkata input dan output. 116 00:03:31,000 --> 00:03:34,280 >> Jadi setakat ini, semua interaksi kami mempunyai dengan komputer 117 00:03:34,280 --> 00:03:36,770 telah sebahagian besarnya dengan anda papan kekunci dan skrin, 118 00:03:36,770 --> 00:03:40,770 tetapi tidak begitu banyak dengan cakera keras, atau menyimpan fail di luar yang anda 119 00:03:40,770 --> 00:03:41,620 diri anda menulis. 120 00:03:41,620 --> 00:03:44,570 Program anda setakat ini mempunyai tidak mewujudkan, dan menyimpan, 121 00:03:44,570 --> 00:03:46,270 dan mengemas kini fail-fail mereka sendiri. 122 00:03:46,270 --> 00:03:47,150 >> Nah, apa yang gambar? 123 00:03:47,150 --> 00:03:48,105 Well, sesuatu seperti JPEG. 124 00:03:48,105 --> 00:03:50,520 Ini adalah imej yang anda mungkin mempunyai atau memuat naik ke Facebook, 125 00:03:50,520 --> 00:03:51,690 atau melihat mana-mana sahaja di web. 126 00:03:51,690 --> 00:03:54,460 Sesungguhnya, gambar yang kita hanya saw daripada Daven adalah JPEG a. 127 00:03:54,460 --> 00:03:57,570 Dan apa yang menarik mengenai fail seperti JPEG 128 00:03:57,570 --> 00:04:02,170 adalah bahawa mereka boleh dikenal pasti, biasanya, dengan corak tertentu bit. 129 00:04:02,170 --> 00:04:05,200 >> Dalam erti kata lain, apakah yang membezakan JPEG dari GIF yang 130 00:04:05,200 --> 00:04:08,109 dari PING dari kalimah dokumen dari fail Excel? 131 00:04:08,109 --> 00:04:09,900 Nah, ia hanya berbeza corak bit. 132 00:04:09,900 --> 00:04:12,820 Dan orang-corak yang berbeza adalah biasanya pada permulaan fail-fail. 133 00:04:12,820 --> 00:04:18,200 >> Supaya apabila komputer anda membuka Word yang doc, atau apabila komputer yang membuka JPEG, 134 00:04:18,200 --> 00:04:20,940 ia kelihatan biasanya di beberapa bit pertama dalam fail. 135 00:04:20,940 --> 00:04:24,059 Dan jika ia mengiktiraf corak, ia berkata, oh, ini adalah imej. 136 00:04:24,059 --> 00:04:25,850 Biar saya memaparkannya kepada pengguna sebagai grafik. 137 00:04:25,850 --> 00:04:27,870 Atau, oh, ini kelihatan seperti doc Word. 138 00:04:27,870 --> 00:04:30,480 Biar saya tunjukkan kepada pengguna sebagai esei. 139 00:04:30,480 --> 00:04:33,020 >> Jadi misalnya, JPEG, ternyata, adalah 140 00:04:33,020 --> 00:04:35,460 agak canggih di bawah hood. 141 00:04:35,460 --> 00:04:40,140 Tetapi tiga bait pertama dalam kebanyakan setiap JPEG bermula dengan tiga nombor. 142 00:04:40,140 --> 00:04:44,680 Jadi bait sifar, satu dan dua, pada setiap JPEG, 255, maka jumlah yang paling 143 00:04:44,680 --> 00:04:46,675 216, maka bilangan 255. 144 00:04:46,675 --> 00:04:48,990 >> Dan apa yang anda akan dapat untuk mula melakukan minggu depan 145 00:04:48,990 --> 00:04:52,920 sebenarnya poking di bawah hud fail seperti JPEG 146 00:04:52,920 --> 00:04:57,210 dan seperti fail bitmap, dan melihat apa yang sentiasa berada di sana selama 147 00:04:57,210 --> 00:04:58,650 kerana anda telah menggunakan komputer. 148 00:04:58,650 --> 00:05:01,860 >> Tetapi apa yang tidak ada biasanya bertulis seperti nombor perpuluhan seperti ini. 149 00:05:01,860 --> 00:05:04,620 Saintis komputer tidak cenderung untuk bercakap dalam perpuluhan. 150 00:05:04,620 --> 00:05:06,139 Mereka tidak benar-benar bercakap dalam perduaan. 151 00:05:06,139 --> 00:05:07,930 Biasanya, apabila kita hendak untuk menyatakan nombor, 152 00:05:07,930 --> 00:05:10,710 kita sebenarnya menggunakan perenambelasan, yang mana yang diketahui 153 00:05:10,710 --> 00:05:13,027 daripada, katakan, Set Masalah Satu, yang mencabar 154 00:05:13,027 --> 00:05:14,610 anda untuk berfikir tentang sistem yang berbeza. 155 00:05:14,610 --> 00:05:17,170 >> Kami, sudah tentu, sudah biasa dengan perpuluhan, sifar melalui sembilan. 156 00:05:17,170 --> 00:05:18,215 Kita bercakap tentang binari. 157 00:05:18,215 --> 00:05:20,710 Dan kita tidak benar-benar mempunyai untuk menggunakan yang banyak di sini 158 00:05:20,710 --> 00:05:22,470 pada keluar, kerana komputer akan menggunakan itu. 159 00:05:22,470 --> 00:05:24,900 Tetapi pengaturcara akan sangat sering, tetapi tidak semestinya, 160 00:05:24,900 --> 00:05:29,360 menggunakan perenambelasan, yang hanya bermakna anda mempunyai 16 huruf dalam abjad anda, 161 00:05:29,360 --> 00:05:31,330 berbanding dengan dua atau 10. 162 00:05:31,330 --> 00:05:34,530 >> Jadi bagaimana anda mengira yang lebih tinggi daripada sembilan dalam perenambelasan? 163 00:05:34,530 --> 00:05:41,120 Anda pergi 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, hanya dengan konvensyen. 164 00:05:41,120 --> 00:05:43,540 Tetapi apa yang penting adalah bahawa setiap ini adalah simbol tunggal. 165 00:05:43,540 --> 00:05:44,340 Tidak ada 10. 166 00:05:44,340 --> 00:05:48,400 Tidak ada 11, per se, kerana setiap digit anda, hanya suka dalam perpuluhan 167 00:05:48,400 --> 00:05:51,940 dan sama seperti dalam binari, sekiranya hanya menjadi watak tunggal, oleh konvensyen. 168 00:05:51,940 --> 00:05:55,280 >> Supaya kemudian adalah abjad yang kita ada ada di tangan kita untuk perenambelasan. 169 00:05:55,280 --> 00:05:58,600 Jadi apakah yang JPEG kelihatan seperti jika anda adalah untuk menulis tiga pertama 170 00:05:58,600 --> 00:06:01,980 tidak bait sebagai perpuluhan tetapi, misalnya, sebagai perenambelasan? 171 00:06:01,980 --> 00:06:03,640 Dan mengapa hex bahkan segala yang berguna? 172 00:06:03,640 --> 00:06:05,290 >> Nah, melihat cepat pada contoh. 173 00:06:05,290 --> 00:06:09,030 Jadi, jika saya menulis bit yang mewakili ini numbers-- perpuluhan 174 00:06:09,030 --> 00:06:12,450 ini mungkin sedikit berkarat sekarang dari beberapa minggu ke belakang, 175 00:06:12,450 --> 00:06:14,820 tetapi satu di sebelah kiri dan satu hak yang cukup mudah. 176 00:06:14,820 --> 00:06:17,990 255 adalah yang terbesar bilangan kami boleh mewakili dengan lapan bit. 177 00:06:17,990 --> 00:06:18,820 Ia adalah semua orang. 178 00:06:18,820 --> 00:06:21,320 Jadi satu-satunya itu lemah-lembut, menarik ialah yang pertengahan. 179 00:06:21,320 --> 00:06:24,700 Dan jika anda jenis buat di luar yang matematik, anda akan simpulkan bahawa, memang, 180 00:06:24,700 --> 00:06:27,949 yang corak satu dan sifar mewakili 216. 181 00:06:27,949 --> 00:06:30,240 Jadi mari kita hanya menetapkan untuk sekarang ini adalah betul. 182 00:06:30,240 --> 00:06:31,730 Tetapi mengapa ini menarik? 183 00:06:31,730 --> 00:06:33,970 >> Nah, satu bait, sudah tentu, adalah lapan bit. 184 00:06:33,970 --> 00:06:38,980 Dan ternyata bahawa jika anda berfikir sebuah bait sebagai dua ketulan empat bit, 185 00:06:38,980 --> 00:06:39,500 seperti ini. 186 00:06:39,500 --> 00:06:41,000 Biar saya menambah beberapa ruang. 187 00:06:41,000 --> 00:06:42,550 Jadi sebelum, selepas. 188 00:06:42,550 --> 00:06:46,520 Saya baru sahaja menambah beberapa ruang putih demi visualisasi di sini. 189 00:06:46,520 --> 00:06:51,840 Bagaimana mungkin kita dalam mewakili, katakan, perenambelasan setiap quad bit, 190 00:06:51,840 --> 00:06:52,880 setiap set empat bit? 191 00:06:52,880 --> 00:06:56,420 >> Jadi misalnya, di sebelah kiri sekarang, kita mempunyai 1111 dalam perduaan. 192 00:06:56,420 --> 00:07:00,420 Apakah nombor yang dalam perpuluhan, jika anda membuat pengiraan? 193 00:07:00,420 --> 00:07:03,780 Anda mempunyai tempat orang, tempat yang berdua-dua, tempat merangkak, dan tempat yang lapan. 194 00:07:03,780 --> 00:07:04,341 >> PENONTON: 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. MALAN: Ini 15. 196 00:07:05,340 --> 00:07:08,340 Jadi jika kita melakukan lapan campur empat tambah dua tambah satu, kita akan mendapat 15. 197 00:07:08,340 --> 00:07:11,790 Jadi saya boleh menulis 15 di bawah 1111, tetapi seluruh titik di sini 198 00:07:11,790 --> 00:07:13,190 adalah perenambelasan, tidak perpuluhan. 199 00:07:13,190 --> 00:07:17,310 Jadi, daripada menulis 15, 1-5, Saya akan menulis bahawa dalam hex, 200 00:07:17,310 --> 00:07:22,311 yang jika anda berfikir kembali, jika anda mempunyai sifar melalui f, apa yang 15 akan menjadi? 201 00:07:22,311 --> 00:07:22,810 PENONTON: f. 202 00:07:22,810 --> 00:07:24,434 DAVID J. MALAN: Jadi ternyata f itu ini. 203 00:07:24,434 --> 00:07:29,140 Dan anda boleh bekerja yang keluar dengan berkata, baik, jika yang adalah 10, maka OK, f ialah 15. 204 00:07:29,140 --> 00:07:33,250 Jadi sesungguhnya, kita boleh menulis semula set sama seperti nombor f f. 205 00:07:33,250 --> 00:07:35,750 Kemudian jika kita lakukan sedikit matematik, kami akan simpulkan bahawa itu d. 206 00:07:35,750 --> 00:07:38,650 Lapan adalah cukup mudah, kerana kita mempunyai satu dalam lapan tempat itu. 207 00:07:38,650 --> 00:07:40,620 Dan kemudian, kita mempunyai pasangan yang lebih f f ini. 208 00:07:40,620 --> 00:07:44,669 >> Jadi apa yang manusia cenderung untuk melakukannya oleh konvensyen apabila mereka menggunakan perenambelasan adalah mereka hanya 209 00:07:44,669 --> 00:07:47,710 menulis ini sedikit lebih ringkas, menyingkirkan kebanyakan ruang putih. 210 00:07:47,710 --> 00:07:50,890 Dan hanya untuk menjadi super jelas kepada pembaca bahawa ini adalah perenambelasan, 211 00:07:50,890 --> 00:07:54,670 konvensyen yang mudah di kalangan manusia adalah anda menulis sifar 212 00:07:54,670 --> 00:07:58,000 x, yang tidak mempunyai makna lain daripada pengecam visual, 213 00:07:58,000 --> 00:07:59,590 di sini datang beberapa hex. 214 00:07:59,590 --> 00:08:04,210 >> Dan kemudian, anda meletakkan kedua-dua digit, f f dalam kes ini, maka d, maka f f. 215 00:08:04,210 --> 00:08:06,700 Jadi cerita panjang pendek, perenambelasan hanya cenderung 216 00:08:06,700 --> 00:08:11,990 berguna kerana setiap yang digit, sifar melalui f, sempurna garis 217 00:08:11,990 --> 00:08:13,880 dengan corak empat bit. 218 00:08:13,880 --> 00:08:18,080 >> Jadi, jika anda mempunyai dua digit perenambelasan, sifar melalui F, sekali lagi dan sekali lagi, 219 00:08:18,080 --> 00:08:20,256 yang memberikan anda dengan sempurna lapan bit atau satu bait. 220 00:08:20,256 --> 00:08:22,380 Jadi itulah sebabnya ia cenderung untuk menjadi konvensional berguna. 221 00:08:22,380 --> 00:08:24,990 Tidak ada intelektual kandungan benar-benar di luar itu, 222 00:08:24,990 --> 00:08:27,010 selain daripada utiliti sebenar. 223 00:08:27,010 --> 00:08:29,310 >> Sekarang JPEG bukan satu-satunya memfailkan format grafik. 224 00:08:29,310 --> 00:08:33,230 Anda mungkin ingat bahawa terdapat fail seperti ini di dunia, 225 00:08:33,230 --> 00:08:34,830 sekurang-kurangnya dari beberapa tahun lalu. 226 00:08:34,830 --> 00:08:37,580 >> Jadi ini sebenarnya dipasang dalam Windows XP 227 00:08:37,580 --> 00:08:39,960 pada berjuta-juta komputer di seluruh dunia. 228 00:08:39,960 --> 00:08:43,000 Dan ini adalah fail bitmap, BMP. 229 00:08:43,000 --> 00:08:47,690 Dan fail bitmap, seperti yang anda akan lihat di sebelah minggu, hanya bermakna corak titik, 230 00:08:47,690 --> 00:08:51,710 piksel kerana mereka dipanggil, sebuah peta pada bit, benar-benar. 231 00:08:51,710 --> 00:08:55,160 >> Jadi apa yang menarik, walaupun, tentang perkara ini format fail, BMP, adalah 232 00:08:55,160 --> 00:08:58,590 bahawa di bawah hud, ia mempunyai lebih daripada hanya tiga bait 233 00:08:58,590 --> 00:09:01,020 yang mendirikan header, jadi untuk bercakap, beberapa gigitan pertama. 234 00:09:01,020 --> 00:09:03,330 Ia benar-benar kelihatan sedikit rumit pada pandangan pertama. 235 00:09:03,330 --> 00:09:04,704 Dan anda akan melihat ini dalam P set. 236 00:09:04,704 --> 00:09:06,810 Dan mendapat sesuatu keluar tertentu ini sekarang 237 00:09:06,810 --> 00:09:10,720 tidak begitu penting, kerana hanya fakta bahawa pada permulaan setiap bitmap 238 00:09:10,720 --> 00:09:13,823 fail, format grafik, ada sejumlah besar nombor. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Sekarang Microsoft, yang pengarang format ini, 241 00:09:16,720 --> 00:09:18,820 cenderung untuk memanggil orang-orang perkara yang tidak ints dan aksara 242 00:09:18,820 --> 00:09:22,259 dan terapung tetapi kata-kata dan d kata-kata dan Roh meronta-ronta dan bait. 243 00:09:22,259 --> 00:09:23,800 Jadi mereka hanya jenis data yang berbeza. 244 00:09:23,800 --> 00:09:25,170 Mereka nama yang berbeza untuk perkara yang sama. 245 00:09:25,170 --> 00:09:26,740 Tetapi anda akan melihat bahawa dalam P Set Empat. 246 00:09:26,740 --> 00:09:31,450 >> Tetapi ini hanya untuk mengatakan bahawa jika manusia double-klik beberapa fail .BMP pada beliau 247 00:09:31,450 --> 00:09:35,015 atau cakera keras beliau, dan membuka tingkap sehingga menunjukkan kepadanya atau beliau imej itu, 248 00:09:35,015 --> 00:09:38,500 yang berlaku kerana operasi sistem mungkin perasan bukan sahaja 249 00:09:38,500 --> 00:09:41,460 sambungan fail .BMP di dalam nama fail, 250 00:09:41,460 --> 00:09:45,010 tetapi juga hakikat bahawa ada beberapa konvensyen dengan corak bit 251 00:09:45,010 --> 00:09:47,490 pada awal-awal dari fail bitmap. 252 00:09:47,490 --> 00:09:50,270 >> Tetapi mari kita kini memberi tumpuan kepada seperti fail rumit, 253 00:09:50,270 --> 00:09:52,120 tetapi sebaliknya kepada sesuatu yang seperti ini. 254 00:09:52,120 --> 00:09:55,190 Katakan di sini di gedit, saya hanya perlu permulaan 255 00:09:55,190 --> 00:09:57,070 daripada program yang cukup mudah. 256 00:09:57,070 --> 00:09:58,860 Saya telah mendapat beberapa termasuk sehingga atas. 257 00:09:58,860 --> 00:10:02,120 Sekarang saya telah mendapat #temasuk "structs.h" tetapi Saya akan kembali kepada yang dalam sekejap. 258 00:10:02,120 --> 00:10:03,974 Tetapi ini adalah berguna untuk sekarang. 259 00:10:03,974 --> 00:10:05,890 Jadi ini adalah satu program yang perkara yang berlaku untuk melaksanakan 260 00:10:05,890 --> 00:10:07,335 seperti pangkalan data pendaftar. 261 00:10:07,335 --> 00:10:09,710 Jadi pangkalan data pelajar, dan setiap pelajar di dunia 262 00:10:09,710 --> 00:10:13,190 mempunyai nama dan rumah dan mungkin beberapa barangan lain, tetapi kami akan memastikan ia mudah. 263 00:10:13,190 --> 00:10:15,140 Setiap pelajar mempunyai nama dan sebuah rumah. 264 00:10:15,140 --> 00:10:17,700 >> Jadi jika saya mahu menulis program yang tujuan dalam hidup 265 00:10:17,700 --> 00:10:19,860 hanya untuk melelar dari sifar pada sehingga tiga, 266 00:10:19,860 --> 00:10:22,070 jika ada tiga pelajar di Universiti Harvard. 267 00:10:22,070 --> 00:10:25,350 Dan saya hanya mahu untuk mendapatkan, menggunakan GetString, nama setiap pelajar dan rumah, 268 00:10:25,350 --> 00:10:26,600 dan kemudian hanya mencetak mereka keluar. 269 00:10:26,600 --> 00:10:28,630 >> Ini adalah jenis seperti Minggu Satu, Dua Minggu barangan sekarang, 270 00:10:28,630 --> 00:10:30,810 di mana saya hanya mahu untuk gelung atau sesuatu seperti itu. 271 00:10:30,810 --> 00:10:34,500 Dan saya mahu memanggil GetString beberapa kali, dan kemudian mencetak f beberapa kali. 272 00:10:34,500 --> 00:10:37,340 Jadi bagaimana saya boleh melakukan ini, walaupun, apabila kedua-dua nama dan rumah 273 00:10:37,340 --> 00:10:39,070 terlibat bagi setiap pelajar? 274 00:10:39,070 --> 00:10:42,830 >> Jadi naluri pertama saya mungkin adalah untuk melakukan sesuatu seperti ini. 275 00:10:42,830 --> 00:10:49,620 Pertama saya mungkin berkata, dengan baik, memberi saya, berkata, pelbagai rentetan dipanggil nama. 276 00:10:49,620 --> 00:10:51,530 Dan saya tidak mahu hardcode tiga di sini. 277 00:10:51,530 --> 00:10:53,064 Apa yang saya mahu meletakkan di sana? 278 00:10:53,064 --> 00:10:55,730 Jadi PELAJAR, kerana itulah yang tetap diisytiharkan di bahagian atas, 279 00:10:55,730 --> 00:10:57,860 hanya jadi saya tidak perlu hardcode tiga di pelbagai tempat. 280 00:10:57,860 --> 00:11:00,859 Dengan cara ini, saya boleh menukar ia satu tempat, dan ia memberi kesan kepada perubahan di mana-mana. 281 00:11:00,859 --> 00:11:04,470 Dan kemudian, saya boleh lakukan rentetan menempatkan PELAJAR. 282 00:11:04,470 --> 00:11:10,250 >> Dan sekarang, saya mungkin melakukan sesuatu seperti untuk (int i = 0; i 00:11:14,390 Jadi saya menaip cepat, tetapi ini adalah mungkin sintaks biasa sekarang. 284 00:11:14,390 --> 00:11:17,030 >> Dan sekarang, ini adalah lebih baru-baru ini. 285 00:11:17,030 --> 00:11:22,890 Jika saya ingin dimasukkan ke dalam i-ke- nama pelajar, saya rasa saya melakukan ini. 286 00:11:22,890 --> 00:11:26,480 Dan kemudian, bukan nama tetapi rumah braket i. 287 00:11:26,480 --> 00:11:29,930 Saya melakukan ini, GetString, dan membiarkan saya kembali dan menetapkan garis ini. 288 00:11:29,930 --> 00:11:30,430 Setuju? 289 00:11:30,430 --> 00:11:31,200 Setuju? 290 00:11:31,200 --> 00:11:32,366 Ia bukan sangat user-friendly. 291 00:11:32,366 --> 00:11:33,890 Saya tidak memberitahu pengguna apa yang perlu dilakukan. 292 00:11:33,890 --> 00:11:36,520 >> Tetapi sekarang, jika saya juga mahu kemudian, mari kita 293 00:11:36,520 --> 00:11:40,060 katakan, mencetak perkara-perkara ini out-- jadi TODO kemudian. 294 00:11:40,060 --> 00:11:42,330 Saya akan melakukan lebih banyak dengan this-- ini boleh dikatakan IS 295 00:11:42,330 --> 00:11:45,970 pelaksanaan yang betul mendapatkan nama dan rumah-rumah, tiga 296 00:11:45,970 --> 00:11:48,870 daripada mereka jumlah setiap, dari pengguna. 297 00:11:48,870 --> 00:11:51,280 >> Tetapi ini tidak reka bentuk yang sangat baik, bukan? 298 00:11:51,280 --> 00:11:55,220 Bagaimana jika seseorang pelajar bukan hanya nama dan rumah, tetapi juga nombor ID, 299 00:11:55,220 --> 00:11:57,770 dan nombor telefon, dan alamat e-mel, 300 00:11:57,770 --> 00:12:00,280 dan mungkin laman utama, dan mungkin pemegang Twitter, 301 00:12:00,280 --> 00:12:03,730 dan apa-apa bilangan butiran lain dikaitkan dengan pelajar atau seseorang, 302 00:12:03,730 --> 00:12:04,610 amnya. 303 00:12:04,610 --> 00:12:07,720 Bagaimana kita akan mula menambah fungsi untuk program ini? 304 00:12:07,720 --> 00:12:14,080 >> Well, saya rasa seperti cara yang paling mudah mungkin adalah untuk melakukan sesuatu seperti, katakan, 305 00:12:14,080 --> 00:12:16,490 int PELAJAR id. 306 00:12:16,490 --> 00:12:18,380 Jadi saya boleh meletakkan semua ID mereka di sana. 307 00:12:18,380 --> 00:12:22,240 Dan kemudian, sesuatu seperti nombor telefon, 308 00:12:22,240 --> 00:12:24,400 Saya tidak pasti bagaimana untuk menyatakan bahawa hanya lagi. 309 00:12:24,400 --> 00:12:30,280 Jadi mari kita pergi ke depan dan hanya panggilan ini Twitters PELAJAR, yang 310 00:12:30,280 --> 00:12:33,550 adalah sedikit pelik, but-- dan sekumpulan yang lebih bidang. 311 00:12:33,550 --> 00:12:36,360 >> Saya mula dengan berkesan copy dan paste di sini. 312 00:12:36,360 --> 00:12:39,416 Dan ini akan berkembang cukup susah dipakai cukup cepat, bukan? 313 00:12:39,416 --> 00:12:42,290 Bukankah lebih baik jika terdapat di dunia struktur data yang dikenali 314 00:12:42,290 --> 00:12:45,600 bukan sebagai int atau tali, tetapi sesuatu peringkat yang lebih tinggi, pengambilan, jadi 315 00:12:45,600 --> 00:12:47,570 untuk bercakap, yang dikenali sebagai seorang pelajar? 316 00:12:47,570 --> 00:12:50,220 C tidak datang dengan terbina dalam fungsi untuk pelajar, 317 00:12:50,220 --> 00:12:52,260 tetapi bagaimana jika saya mahu memberikan apa-apa? 318 00:12:52,260 --> 00:12:55,640 >> Nah, ternyata, saya akan membuka fail yang dipanggil structs.h sini, 319 00:12:55,640 --> 00:12:57,090 dan anda boleh melakukan perkara tersebut. 320 00:12:57,090 --> 00:12:58,290 Dan kita akan mula melakukan ini sekarang. 321 00:12:58,290 --> 00:13:01,490 Dan di bawah hud P Set Tiga, anda telah telah melakukan ini sekarang. 322 00:13:01,490 --> 00:13:05,920 Tidak ada perkara seperti g agar you atau satu g bujur dalam bahasa pengaturcaraan C. 323 00:13:05,920 --> 00:13:10,570 >> Orang di Stanford yang dilaksanakan jenis data dengan menggunakan pendekatan ini di sini, 324 00:13:10,570 --> 00:13:13,900 mengisytiharkan data baru mereka sendiri jenis menggunakan kata kunci baru 325 00:13:13,900 --> 00:13:16,744 dipanggil struct dan satu lagi satu dipanggil typedef. 326 00:13:16,744 --> 00:13:19,660 Dan memang, walaupun sintaks kelihatan sedikit berbeza daripada barangan 327 00:13:19,660 --> 00:13:23,550 yang kita lihat sebelum ini, dalam dasarnya, ia super mudah. 328 00:13:23,550 --> 00:13:25,297 >> Ini hanya bermakna "menentukan jenis." 329 00:13:25,297 --> 00:13:27,255 Itu akan menjadi satu struktur, dan struktur yang 330 00:13:27,255 --> 00:13:29,400 adalah sama seperti bekas untuk pelbagai perkara. 331 00:13:29,400 --> 00:13:31,780 Dan struktur yang akan mempunyai tali yang dipanggil nama, 332 00:13:31,780 --> 00:13:33,210 dan tali yang dipanggil rumah. 333 00:13:33,210 --> 00:13:37,520 Dan mari kita memanggil, hanya untuk kemudahan, ini seluruh pelajar struktur data. 334 00:13:37,520 --> 00:13:40,320 >> Jadi masa ini anda dapat koma bernoktah, anda ada sekarang 335 00:13:40,320 --> 00:13:43,280 dicipta data anda sendiri Jenis dipanggil pelajar 336 00:13:43,280 --> 00:13:46,420 yang kini berdiri bersama int, dan apungan, dan char, dan tali, 337 00:13:46,420 --> 00:13:50,270 dan g agar you, dan g bujur, dan apa-apa bilangan perkara-perkara lain orang telah dicipta. 338 00:13:50,270 --> 00:13:53,340 >> Jadi apa yang berguna tentang ini sekarang ialah jika saya kembali 339 00:13:53,340 --> 00:13:57,430 untuk struct 0 dan menghabiskan ini pelaksanaan, yang saya telah menulis 340 00:13:57,430 --> 00:14:02,080 terlebih dahulu di sini, melihat bahawa semua daripada messiness yang tidak dapat dielakkan bahawa 341 00:14:02,080 --> 00:14:05,490 adalah kira-kira untuk mula berlaku seperti yang saya tambah nombor telefon dan twitter dan semua 342 00:14:05,490 --> 00:14:07,370 perkara-perkara lain untuk definisi pelajar, 343 00:14:07,370 --> 00:14:11,810 kini ia ringkas dibungkus sebagai hanya satu pelbagai pelajar. 344 00:14:11,810 --> 00:14:15,500 >> Dan setiap orang pelajar kini mempunyai beberapa perkara di dalamnya. 345 00:14:15,500 --> 00:14:16,930 Supaya hanya meninggalkan satu soalan. 346 00:14:16,930 --> 00:14:19,700 Bagaimana anda mendapat pada nama, dan rumah, dan ID, 347 00:14:19,700 --> 00:14:21,640 dan apa-apa sahaja adalah bahagian dalam pelajar tersebut? 348 00:14:21,640 --> 00:14:22,930 Super mudah, juga. 349 00:14:22,930 --> 00:14:25,730 Sintaks baru, tetapi idea yang mudah. 350 00:14:25,730 --> 00:14:29,239 >> Anda hanya indeks ke dalam array, seperti yang kita lakukan pada minggu lepas dan ini. 351 00:14:29,239 --> 00:14:31,030 Dan apa yang jelas sekeping baru sintaks? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Adil., Yang bermaksud "pergi di dalam struktur dan mendapatkan bidang yang dipanggil 354 00:14:35,880 --> 00:14:39,030 nama, dapatkan bidang yang dipanggil rumah, mendapatkan bidang yang dipanggil pelajar. " 355 00:14:39,030 --> 00:14:41,940 >> Jadi dalam P Set Tiga, jika anda masih bekerja pada itu, 356 00:14:41,940 --> 00:14:44,020 kebanyakan orang dan masih adalah, menyedari bahawa apabila anda 357 00:14:44,020 --> 00:14:46,130 mula menggunakan perkara-perkara seperti g rects dan g oval 358 00:14:46,130 --> 00:14:50,201 dan lain-lain yang seolah-olah tidak datang dari Minggu Zero, Satu atau Dua, 359 00:14:50,201 --> 00:14:52,950 menyedari bahawa itu kerana Stanford mengisytiharkan beberapa jenis data baru. 360 00:14:52,950 --> 00:14:56,160 >> Dan sesungguhnya, itulah yang kita akan lakukan, dan juga, dalam P Set Empat, apabila 361 00:14:56,160 --> 00:14:59,880 kita mula untuk menangani perkara-perkara seperti imej, bitmap, dan banyak lagi. 362 00:14:59,880 --> 00:15:02,882 Jadi, itu hanya penggoda dan model mental untuk apa yang akan datang. 363 00:15:02,882 --> 00:15:04,590 Sekarang, saya melengah-lengahkan sedikit pagi ini. 364 00:15:04,590 --> 00:15:09,560 Saya jenis ingin tahu untuk melihat apa yang kertas dinding Microsoft sebenarnya 365 00:15:09,560 --> 00:15:10,310 kelihatan seperti hari ini. 366 00:15:10,310 --> 00:15:15,200 Dan ternyata orang pada tahun 2006 sebenarnya pergi ke hampir tepat 367 00:15:15,200 --> 00:15:19,210 tempat yang sama untuk mengambil gambar pada hakikatnya apa yang kelihatan seperti itu hari ini. 368 00:15:19,210 --> 00:15:21,380 Bidang ini kini sedikit terlalu besar. 369 00:15:21,380 --> 00:15:24,850 >> Jadi bercakap kini imej, mari kita membawa balik Daven sini 370 00:15:24,850 --> 00:15:26,890 pada skrin dan Nicholas, dan hanya mengingatkan anda 371 00:15:26,890 --> 00:15:30,540 bahawa jika anda ingin menyertai kami untuk makan tengah hari Jumaat, pergi ke URL biasa kami 372 00:15:30,540 --> 00:15:31,440 di sini. 373 00:15:31,440 --> 00:15:33,530 >> Jadi di mana yang kita meninggalkan off pada hari Isnin? 374 00:15:33,530 --> 00:15:35,140 Kami memperkenalkan masalah ini, bukan? 375 00:15:35,140 --> 00:15:37,610 Ini seolah-olah yang betul pelaksanaan swap, 376 00:15:37,610 --> 00:15:40,460 mana anda mengambil dua ints, satu dipanggil, satu dipanggil b, 377 00:15:40,460 --> 00:15:44,130 swap mereka, seperti Laura lakukan di sini di atas pentas dengan susu dan air, 378 00:15:44,130 --> 00:15:46,820 dengan menggunakan sementara berubah-ubah, atau cawan kosong, 379 00:15:46,820 --> 00:15:50,540 supaya kita boleh meletakkan b dalam dan di b tanpa membuat keadaan kucar-kacir perkara. 380 00:15:50,540 --> 00:15:51,560 Kami menggunakan pemboleh ubah. 381 00:15:51,560 --> 00:15:52,870 Ia dipanggil temp. 382 00:15:52,870 --> 00:15:55,520 >> Tetapi apa yang asas masalah dengan kod ini pada hari Isnin? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Apa masalahnya disini? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Yeah. 387 00:16:00,605 --> 00:16:01,970 >> PENONTON: Ia mengambil lebih banyak ruang. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. MALAN: Membawa lebih banyak ruang, kerana saya menggunakan pembolehubah, 389 00:16:04,719 --> 00:16:05,400 dan itu OK. 390 00:16:05,400 --> 00:16:07,300 Yang benar, tetapi saya akan mengatakan itu OK. 391 00:16:07,300 --> 00:16:10,030 Ia hanya 32 bit dalam grand skim perkara, jadi tidak masalah besar. 392 00:16:10,030 --> 00:16:10,655 Pemikiran yang lain? 393 00:16:10,655 --> 00:16:12,572 PENONTON: Ia hanya Swap pembolehubah tempatan. 394 00:16:12,572 --> 00:16:13,571 DAVID J. MALAN: Tepat sekali. 395 00:16:13,571 --> 00:16:15,090 Ia hanya Swap pembolehubah tempatan. 396 00:16:15,090 --> 00:16:18,173 Kerana bila-bila masa anda memanggil function-- apabila saya mempunyai dulang dari Annenberg 397 00:16:18,173 --> 00:16:19,840 Kali terakhir, anda perlu utama di bahagian bawah. 398 00:16:19,840 --> 00:16:23,560 Sebaik sahaja anda memanggil fungsi yang dipanggil swap, swap tidak mendapat x dan y, 399 00:16:23,560 --> 00:16:24,400 nilai-nilai asal. 400 00:16:24,400 --> 00:16:26,392 Apa swap get, adakah kita mendakwa? 401 00:16:26,392 --> 00:16:27,100 PENONTON: Copies. 402 00:16:27,100 --> 00:16:28,090 DAVID J. MALAN: Jadi salinannya. 403 00:16:28,090 --> 00:16:31,120 Jadi ia menjadi satu dan dua, jika anda ingat contoh dari masa lalu, 404 00:16:31,120 --> 00:16:34,730 tetapi salinan satu dan dua yang berjaya ditukar. 405 00:16:34,730 --> 00:16:38,550 Tetapi malangnya pada akhirnya, nilai-nilai masih yang sama. 406 00:16:38,550 --> 00:16:41,880 Oleh itu, kita boleh melihat ini dengan kami rakan baru, mudah-mudahan GDB, 407 00:16:41,880 --> 00:16:45,180 bahawa anda atau TFS dan ini Ca mempunyai telah membimbing anda ke arah seperti berikut. 408 00:16:45,180 --> 00:16:51,210 >> Jadi tidak ingat swap kelihatan like-- mari membuka this-- kelihatan seperti ini. 409 00:16:51,210 --> 00:16:54,160 Kami dimulakan x kepada satu, y kepada dua. 410 00:16:54,160 --> 00:16:55,620 Telah mempunyai banyak cetak f ini. 411 00:16:55,620 --> 00:16:58,080 Tetapi, seruan utama di sini adalah untuk menukar, yang 412 00:16:58,080 --> 00:17:00,260 betul-betul kami kod hanya melihat masa lalu. 413 00:17:00,260 --> 00:17:03,180 Yang betul pada pertama pandangan, tetapi fungsi, 414 00:17:03,180 --> 00:17:06,800 program ini tidak berjaya, kerana ia tidak kekal swap x dan y. 415 00:17:06,800 --> 00:17:10,190 >> Jadi mari kita lihat ini, panas cepat di sini dengan GDB, ./noswap a. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Sekumpulan maklumat kukuh bahawa Saya akan menghapuskan dengan Kawalan L sekarang. 418 00:17:15,200 --> 00:17:17,516 Dan sekarang, saya akan pergi ke depan dan menjalankannya. 419 00:17:17,516 --> 00:17:19,349 Dan malangnya, yang tidak begitu berguna. 420 00:17:19,349 --> 00:17:22,355 Ia berlari program bahagian dalam ini program dipanggil GDB, penyahpepijat a, 421 00:17:22,355 --> 00:17:23,730 tetapi ia tidak membenarkan saya mencucuk sekitar. 422 00:17:23,730 --> 00:17:26,229 >> Jadi bagaimana saya boleh benar-benar berhenti seketika pelaksanaan di dalam program ini? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Jadi memecahkan. 425 00:17:28,329 --> 00:17:32,340 Dan saya boleh memecahkan mana-mana garis nombor, satu, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Tetapi saya juga boleh memecahkan simbolik dengan mengatakan rehat utama. 427 00:17:35,530 --> 00:17:38,980 Dan itu akan ditetapkan berehat mata, nampaknya di talian 16 dalam utama. 428 00:17:38,980 --> 00:17:40,050 Dan di mana adalah talian 16? 429 00:17:40,050 --> 00:17:42,960 Mari kita pergi sehingga kod dan naik ke noswap. 430 00:17:42,960 --> 00:17:46,930 Dan sesungguhnya, talian 16 adalah pertama dalam program ini. 431 00:17:46,930 --> 00:17:52,130 >> Jadi sekarang, jika saya pergi ke depan dan jenis menjalankan masa ini, Masukkan, ia berhenti. 432 00:17:52,130 --> 00:17:53,080 Jadi mari kita mencucuk sekitar. 433 00:17:53,080 --> 00:17:55,716 Cetak x-- mengapa x sifar? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 Dan mengabaikan tanda dolar. 436 00:17:57,830 --> 00:17:59,725 Itu hanya untuk pelamun penggunaan program. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Kenapa x sifar pada masa ini? 439 00:18:03,140 --> 00:18:03,640 Yeah. 440 00:18:03,640 --> 00:18:07,061 >> PENONTON: Ia berhenti di depan talian 16, tidak benar-benar pada baris 16. 441 00:18:07,061 --> 00:18:08,060 DAVID J. MALAN: Tepat sekali. 442 00:18:08,060 --> 00:18:11,630 GDB, secara lalai, telah berhenti pelaksanaan sebelum talian 16. 443 00:18:11,630 --> 00:18:14,820 Jadi ia tidak dilaksanakan, yang bermakna x mempunyai nilai tertentu yang tidak diketahui. 444 00:18:14,820 --> 00:18:17,150 Dan kita bernasib baik bahawa itu sesuatu yang bersih seperti sifar. 445 00:18:17,150 --> 00:18:20,310 Jadi sekarang saya menaip depan, kini ia dilaksanakan 16. 446 00:18:20,310 --> 00:18:22,000 Ia menunggu saya untuk melaksanakan 17. 447 00:18:22,000 --> 00:18:23,400 Biar saya pergi ke hadapan dan cetak x. 448 00:18:23,400 --> 00:18:24,094 Ia adalah salah. 449 00:18:24,094 --> 00:18:25,260 Biar saya pergi ke hadapan dan cetak y. 450 00:18:25,260 --> 00:18:26,176 Apakah yang perlu saya lihat sekarang? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> PENONTON: [didengar] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. MALAN: A lebih kuat sedikit. 454 00:18:29,165 --> 00:18:30,040 >> PENONTON: [didengar] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. MALAN: Tidak cukup kata sepakat. 457 00:18:32,120 --> 00:18:34,760 Jadi ya, kami melihat beberapa nilai sampah. 458 00:18:34,760 --> 00:18:37,862 Sekarang, y adalah 134514064 sana. 459 00:18:37,862 --> 00:18:39,320 Nah, ia hanya beberapa nilai sampah. 460 00:18:39,320 --> 00:18:41,350 Program ni menggunakan RAM untuk tujuan yang berlainan. 461 00:18:41,350 --> 00:18:42,350 Ada fungsi lain. 462 00:18:42,350 --> 00:18:44,040 Orang lain telah menulis di dalam komputer saya. 463 00:18:44,040 --> 00:18:46,789 Jadi bit-bit telah digunakan untuk nilai-nilai yang lain, dan apa yang saya melihat 464 00:18:46,789 --> 00:18:49,470 adalah sisa-sisa beberapa penggunaan terdahulu memori itu. 465 00:18:49,470 --> 00:18:53,350 >> Jadi tidak ada masalah besar, kerana sebaik sahaja sebagai saya menaip depan dan kemudian mencetak y, 466 00:18:53,350 --> 00:18:55,640 ia dimulakan untuk nilai yang saya cari. 467 00:18:55,640 --> 00:18:57,400 Jadi sekarang, mari kita pergi ke depan sedikit lebih cepat. 468 00:18:57,400 --> 00:18:58,540 N untuk seterusnya. 469 00:18:58,540 --> 00:18:59,570 Mari kita buat sekali lagi. 470 00:18:59,570 --> 00:19:00,530 Mari kita buat sekali lagi. 471 00:19:00,530 --> 00:19:02,404 Tetapi saya tidak mahu untuk memukul di sini, kerana jika saya 472 00:19:02,404 --> 00:19:05,110 mahu melihat apa yang berlaku di dalam swap, apa arahan? 473 00:19:05,110 --> 00:19:05,520 >> PENONTON: langkah. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. MALAN: langkah. 475 00:19:06,436 --> 00:19:09,800 Jadi ini langkah saya ke dalam fungsi, dan bukannya di atasnya. 476 00:19:09,800 --> 00:19:12,270 Dan sekarang, ia sedikit samar jujur, tetapi ini adalah hanya 477 00:19:12,270 --> 00:19:14,581 memberitahu saya saya di talian 33 sekarang. 478 00:19:14,581 --> 00:19:15,580 Dan mari kita buat ini lagi. 479 00:19:15,580 --> 00:19:16,080 Cetak temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Nilai sampah, negatif masa ini, tetapi itu hanya masih nilai sampah. 482 00:19:20,170 --> 00:19:22,810 Jadi mari kita buat akan datang, cetak temp. 483 00:19:22,810 --> 00:19:27,130 Ia dimulakan dengan 1, yang adalah nilai x, aka a. 484 00:19:27,130 --> 00:19:29,110 >> Sekarang, di mana adalah kita dan x datang dari? 485 00:19:29,110 --> 00:19:32,510 Nah, notis utama, kami dipanggil nilai-nilai ini x dan y. 486 00:19:32,510 --> 00:19:34,740 Kami kemudian lulus mereka untuk menukar seperti berikut. 487 00:19:34,740 --> 00:19:37,010 X datang pertama, koma y. 488 00:19:37,010 --> 00:19:40,020 Dan kemudian, swap boleh menghubungi mereka x dan y. 489 00:19:40,020 --> 00:19:42,630 Tetapi untuk kejelasan, ia memanggil mereka dan b. 490 00:19:42,630 --> 00:19:45,970 Tetapi a dan b kini akan menjadi salinan x dan y masing-masing. 491 00:19:45,970 --> 00:19:50,660 >> Jadi, jika saya kembali ke GDB, temp kini satu dan kini satu. 492 00:19:50,660 --> 00:19:56,130 Tetapi jika saya lakukan seterusnya dan kini melakukan cetak yang, telah pun berpindah ke atas. 493 00:19:56,130 --> 00:20:00,030 Susu itu telah dicurahkan ke dalam bekas kaca jus oren, atau sebaliknya. 494 00:20:00,030 --> 00:20:04,750 >> Dan jika saya lakukan seterusnya lagi, dan kini jika saya mencetak sebagai cek kewarasan, 495 00:20:04,750 --> 00:20:07,687 yang masih dua, tetapi b kini satu. 496 00:20:07,687 --> 00:20:08,770 Terus terang, ia masih di sana. 497 00:20:08,770 --> 00:20:10,670 Saya tidak peduli apa temp adalah. 498 00:20:10,670 --> 00:20:16,850 Tetapi sebaik sahaja saya kini menaip, katakan, terus kembali, kini saya di hujung 499 00:20:16,850 --> 00:20:17,480 program ini. 500 00:20:17,480 --> 00:20:20,730 Dan malangnya, x ialah masih satu dan y masih dua. 501 00:20:20,730 --> 00:20:22,272 >> Jadi apa yang utiliti GDB sana? 502 00:20:22,272 --> 00:20:23,980 Ia tidak membantu saya menetapkan masalah per se, 503 00:20:23,980 --> 00:20:26,265 tetapi ia mudah-mudahan membantu saya memahaminya dengan menyedari 504 00:20:26,265 --> 00:20:30,000 bahawa ya, logik saya adalah betul, tetapi kod saya tidak akhirnya mempunyai 505 00:20:30,000 --> 00:20:31,450 kesan yang kekal. 506 00:20:31,450 --> 00:20:34,570 Jadi, itu masalah kami kini akan menyelesaikan hari ini. 507 00:20:34,570 --> 00:20:37,870 >> Tetapi mari kita ke sana dengan cara ini. 508 00:20:37,870 --> 00:20:39,230 Rentetan adalah satu pembohongan. 509 00:20:39,230 --> 00:20:41,860 Ia juga bukan jenis data yang wujud di C. Ia 510 00:20:41,860 --> 00:20:44,750 merupakan sinonim untuk beberapa masa untuk sesuatu yang lain, 511 00:20:44,750 --> 00:20:47,300 dan kita boleh mendedahkan bahawa seperti berikut. 512 00:20:47,300 --> 00:20:53,282 >> Biar saya pergi ke hadapan dan membuka program yang dipanggil membandingkan-0. 513 00:20:53,282 --> 00:20:56,240 Dan bukannya menaip satu ini keluar, kami akan mula berjalan melalui kod 514 00:20:56,240 --> 00:20:58,040 Saya telah menulis, tetapi ia hanya beberapa baris. 515 00:20:58,040 --> 00:20:59,570 Jadi ini adalah membandingkan-0. 516 00:20:59,570 --> 00:21:02,380 Dan perkara pertama yang saya lakukan semakin barisan teks. 517 00:21:02,380 --> 00:21:05,610 >> Tetapi melihat apa yang saya lakukan untuk kali pertama. 518 00:21:05,610 --> 00:21:07,910 Apa yang berbeza dengan jelas garis 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Sebenarnya, tunggu satu minit. 521 00:21:11,402 --> 00:21:12,110 Ini adalah salinan dua. 522 00:21:12,110 --> 00:21:13,568 Itu bukan walaupun program yang betul. 523 00:21:13,568 --> 00:21:14,780 Baiklah, spoiler amaran. 524 00:21:14,780 --> 00:21:16,890 Baiklah, jadi tidak apa itu. 525 00:21:16,890 --> 00:21:18,520 Itulah jawapan kepada soalan yang akan datang. 526 00:21:18,520 --> 00:21:21,450 >> Berikut adalah membandingkan-0, dan saya kira-kira untuk mendapatkan baris teks. 527 00:21:21,450 --> 00:21:22,435 Program ini lebih mudah. 528 00:21:22,435 --> 00:21:23,560 Jadi ini adalah mudah. 529 00:21:23,560 --> 00:21:28,070 Ini seperti Minggu Satu, Dua Minggu barangan pada masa ini. rentetan s = GetString. 530 00:21:28,070 --> 00:21:29,700 Sekarang, saya berkata lagi di sini. 531 00:21:29,700 --> 00:21:31,830 rentetan t = GetString. 532 00:21:31,830 --> 00:21:35,300 Dan kemudian, perkara terakhir dalam ini program, seperti namanya, 533 00:21:35,300 --> 00:21:37,090 adalah saya akan cuba untuk membandingkan mereka. 534 00:21:37,090 --> 00:21:40,709 >> Jadi, jika s, tali yang pertama, sama = t, maka saya 535 00:21:40,709 --> 00:21:42,250 akan mengatakan anda menaip perkara yang sama. 536 00:21:42,250 --> 00:21:44,291 Yang lain, saya akan mengatakan anda taip perkara yang berbeza. 537 00:21:44,291 --> 00:21:45,880 Jadi mari kita menyusun dan menjalankan program ini. 538 00:21:45,880 --> 00:21:48,481 Oleh itu, membandingkan sifar. 539 00:21:48,481 --> 00:21:48,980 Kelihatan baik. 540 00:21:48,980 --> 00:21:50,490 Tiada kesilapan kompilasi. 541 00:21:50,490 --> 00:21:52,386 >> Biar saya pergi ke hadapan kini dan taip ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Biar saya pergi ke hadapan dan mengatakan sesuatu : Daven dan sesuatu: Rob. 544 00:21:59,220 --> 00:22:00,450 Dan saya menaip perkara yang berbeza. 545 00:22:00,450 --> 00:22:01,250 Setakat ini, begitu baik. 546 00:22:01,250 --> 00:22:02,680 Program seolah-olah betul. 547 00:22:02,680 --> 00:22:03,880 >> Tetapi mari kita berjalan lagi. 548 00:22:03,880 --> 00:22:05,800 Mengatakan sesuatu: Gabe. 549 00:22:05,800 --> 00:22:07,140 Mengatakan sesuatu: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Baiklah. 552 00:22:09,020 --> 00:22:10,851 Mungkin saya memukul bar ruang atau sesuatu yang 'funky'. 553 00:22:10,851 --> 00:22:11,600 Mari kita buat sekali lagi. 554 00:22:11,600 --> 00:22:13,020 Jadi Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Perkara yang berbeza. 559 00:22:17,330 --> 00:22:19,430 Jadi apa yang berlaku? 560 00:22:19,430 --> 00:22:23,200 >> Jadi kita mempunyai dua baris kod, GetString dipanggil dua kali. 561 00:22:23,200 --> 00:22:25,760 Dan kemudian, saya hanya cuba untuk membandingkan dan t. 562 00:22:25,760 --> 00:22:28,370 Tetapi apa yang benar-benar maka yang sedang berlaku? 563 00:22:28,370 --> 00:22:31,180 Nah, kira-kira tulisan tangan saya untuk penjual daging contoh ini agak. 564 00:22:31,180 --> 00:22:34,630 Dan mari kita sebenarnya membuang ini sehingga di sini, juga. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Oleh itu, kita mempunyai talian seperti rentetan s = GetString. 567 00:22:45,712 --> 00:22:48,295 Supaya hanya yang pertama garis yang menarik daripada program itu. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Tetapi apa yang selama ini telah berlaku di bawah hud? 570 00:22:52,974 --> 00:22:55,890 Nah, di kiri sebelah adalah rentetan, yang beberapa jenis pembolehubah, 571 00:22:55,890 --> 00:22:56,785 dan ia dipanggil s. 572 00:22:56,785 --> 00:23:00,019 Jadi saya tahu bahawa ini adalah menggunakan memori, atau RAM, komputer saya entah bagaimana. 573 00:23:00,019 --> 00:23:02,060 Jadi saya akan secara abstrak menarik bahawa segiempat. 574 00:23:02,060 --> 00:23:04,820 32 bit, ternyata, tetapi lanjut mengenai bahawa pada masa akan datang. 575 00:23:04,820 --> 00:23:06,410 Kemudian, apa yang berlaku di sini? 576 00:23:06,410 --> 00:23:08,700 >> Nah, jelas GetString mendapat rentetan daripada pengguna. 577 00:23:08,700 --> 00:23:11,360 Dan GetString mendapat Zamyla atau Gabe atau Daven. 578 00:23:11,360 --> 00:23:14,640 Jadi mari kita memilih yang pertama dari orang-orang, yang merupakan Daven. 579 00:23:14,640 --> 00:23:19,174 Dengan berkesan, apa GetString mendapat saya dalam kes pertama adalah D-a-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 Dan kemudian, apa lagi melakukannya ia memberi saya diam-diam? 582 00:23:25,045 --> 00:23:25,920 PENONTON: [didengar] 583 00:23:25,920 --> 00:23:28,720 DAVID J. MALAN: Ya, yang / 0 atau batal watak. 584 00:23:28,720 --> 00:23:30,550 Jadi ia berkesan memberikan saya rentetan. 585 00:23:30,550 --> 00:23:34,550 Tetapi kita sudah tahu dari sebelumnya kelihatan bahawa rentetan hanya array 586 00:23:34,550 --> 00:23:37,895 aksara, dan ia ditamatkan oleh watak sentinel istimewa ini, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Tetapi jika ini adalah benar dan ini ialah kuasa dua, 589 00:23:42,310 --> 00:23:44,160 ini adalah jelas persegi panjang yang lebih besar. 590 00:23:44,160 --> 00:23:46,830 Dan sesungguhnya, ini adalah, Saya menuntut, hanya 32 bit. 591 00:23:46,830 --> 00:23:49,500 Dan ini adalah jelas lebih daripada 32 bit, kerana ini mungkin 592 00:23:49,500 --> 00:23:51,583 lapan ditambah lapan ditambah lapan ditambah lapan ditambah lapan, 593 00:23:51,583 --> 00:23:53,320 hanya kerana bait dalam ASCII. 594 00:23:53,320 --> 00:23:57,030 Bagaimana palang pintu yang kita akan menyesuaikan Daven ke dalam kotak kecil ini di sini? 595 00:23:57,030 --> 00:23:59,880 >> Nah, apa yang GetString sebenarnya lakukan? 596 00:23:59,880 --> 00:24:03,680 Nah, grid ini di sini mewakili memori komputer saya atau RAM. 597 00:24:03,680 --> 00:24:07,564 Jadi mari kita sewenang-wenangnya mengatakan bahawa jika masing-masing mewakili satu bait, 598 00:24:07,564 --> 00:24:09,730 maka kita boleh memikirkan setiap bait sebagai mempunyai alamat, 599 00:24:09,730 --> 00:24:13,830 33 seperti Oxford Street, atau 34 Oxford Street, atau 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Jadi seperti rumah mempunyai alamat dan bangunan mempunyai alamat, 601 00:24:16,700 --> 00:24:19,810 begitu juga bytes individu ingatan mempunyai alamat atau nombor 602 00:24:19,810 --> 00:24:21,042 yang unik mengenal pasti mereka. 603 00:24:21,042 --> 00:24:22,000 Sekarang, ini sewenang-wenangnya. 604 00:24:22,000 --> 00:24:25,370 Tetapi untuk memastikan ia mudah, saya akan menggunakan perenambelasan hanya dengan konvensyen, 605 00:24:25,370 --> 00:24:28,200 tetapi 0x ertinya apa-apa selain daripada "ini adalah perenambelasan." 606 00:24:28,200 --> 00:24:31,030 dan saya akan menuntut bahawa "D" berakhir di Byte Satu dalam ingatan. 607 00:24:31,030 --> 00:24:34,210 >> Saya mendapat apa-apa lagi berlaku di memori, jadi Daven mendapat tempat pertama 608 00:24:34,210 --> 00:24:35,509 di Byte Satu. 609 00:24:35,509 --> 00:24:36,800 Ini, maka, akan menjadi 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Ini akan 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Ini akan menjadi 0x4. 614 00:24:41,800 --> 00:24:43,025 Ini akan 0x5. 615 00:24:43,025 --> 00:24:44,025 Ini akan menjadi 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Tetapi apabila anda mula berfikir tentang apa perbuatan komputer 618 00:24:48,290 --> 00:24:50,710 di bawah hud, anda boleh mula untuk membuat kesimpulan 619 00:24:50,710 --> 00:24:54,960 bagaimana anda, beberapa tahun yang lalu, akan telah melaksanakan C sendiri. 620 00:24:54,960 --> 00:24:58,360 Apakah mungkin GetString returning-- kerana ia 621 00:24:58,360 --> 00:25:00,946 berasa seperti ia tidak kembali Daven, per se, 622 00:25:00,946 --> 00:25:03,320 kerana dia pasti tidak akan untuk menyesuaikan diri box-- kecil ini 623 00:25:03,320 --> 00:25:05,090 jadi apa yang GetString mungkin kembali? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> PENONTON: [didengar] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. MALAN: Lokasi Daven. 627 00:25:10,540 --> 00:25:12,770 Dan ia telah melakukan ini sejak Minggu Satu. 628 00:25:12,770 --> 00:25:16,150 Apa GetString adalah benar-benar kembali bukan tali, per se. 629 00:25:16,150 --> 00:25:17,780 Itulah salah satu pembohongan putih yang kecil. 630 00:25:17,780 --> 00:25:22,520 Ia kembali alamat rentetan dalam ingatan, alamat unik. 631 00:25:22,520 --> 00:25:24,820 Daven hidup pada 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Tetapi yang lebih ringkas, Gavin tinggal di 0x1, Alamat Nombor Satu. 633 00:25:29,310 --> 00:25:32,280 >> Jadi apa yang akan dimasukkan ke dalam ini kotak kecil itu, menjadi jelas, 634 00:25:32,280 --> 00:25:35,930 hanya alamat rentetan itu. 635 00:25:35,930 --> 00:25:38,110 Jadi selama ini, ini mempunyai telah berlaku. 636 00:25:38,110 --> 00:25:41,650 Tetapi apa yang ini mengisyaratkan sekarang ialah jika semua s mempunyai 637 00:25:41,650 --> 00:25:44,710 adalah nombor di dalamnya, siapa yang untuk menghalang anda, pengaturcara, 638 00:25:44,710 --> 00:25:47,970 daripada meletakkan sebarang nombor di apa-apa ubah dan hanya melompat 639 00:25:47,970 --> 00:25:49,080 dengan sebahagian memori? 640 00:25:49,080 --> 00:25:51,320 Dan sesungguhnya, kita akan melihat itu adalah satu ancaman masa depan. 641 00:25:51,320 --> 00:25:53,500 >> Tetapi untuk sekarang, ini berasa tidak mencukupi. 642 00:25:53,500 --> 00:25:55,630 Jika saya katakan, dapatkan saya rentetan, anda memberi saya Daven. 643 00:25:55,630 --> 00:25:57,230 Tetapi anda tidak benar-benar memberi saya Daven. 644 00:25:57,230 --> 00:25:59,310 Apa yang anda berikan saya adalah alamat Daven ini. 645 00:25:59,310 --> 00:26:04,310 Bagaimana saya kemudian pasti mana Daven bermula dan ends-- 646 00:26:04,310 --> 00:26:07,140 cerita ini mendapat weird-- Daven di mana bermula dan berakhir, 647 00:26:07,140 --> 00:26:10,435 dan kemudian, seterusnya rentetan dalam ingatan bermula? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Nah, jika anda menyerahkan saya awal Daven, 650 00:26:13,620 --> 00:26:17,230 dasarnya, bagaimana saya tahu di mana akhir namanya? 651 00:26:17,230 --> 00:26:20,550 Itulah watak null khas yang adalah lebih penting sekarang 652 00:26:20,550 --> 00:26:23,040 jika tali itu di bawahnya hud yang hanya dikenal pasti 653 00:26:23,040 --> 00:26:25,820 unik mengikut lokasi mereka dalam ingatan. 654 00:26:25,820 --> 00:26:28,130 Jadi selama ini, itu apa yang telah berlaku. 655 00:26:28,130 --> 00:26:32,470 >> Oleh itu, apabila kita melihat di kod itu di sini, terangkan 656 00:26:32,470 --> 00:26:35,790 jika anda akan pepijat dalam talian 26. 657 00:26:35,790 --> 00:26:39,560 Mengapa Zamyla dan Zamyla berbeza? 658 00:26:39,560 --> 00:26:41,330 Mengapa Gabe dan Gabe berbeza? 659 00:26:41,330 --> 00:26:42,154 Ya, di belakang. 660 00:26:42,154 --> 00:26:43,390 >> PENONTON: Mereka mempunyai alamat yang berbeza. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. MALAN: Hanya kerana mereka mempunyai alamat yang berbeza. 662 00:26:45,931 --> 00:26:48,820 Kerana apabila anda memanggil GetString sekali lagi, yang saya akan lakukan dengan cepat di sini, 663 00:26:48,820 --> 00:26:52,870 jika ini adalah barisan kedua, tali t, seperti yang saya lakukan dalam program itu, 664 00:26:52,870 --> 00:26:55,030 sama satu lagi panggilan untuk GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Lain kali saya panggil GetString, saya akan 667 00:26:58,670 --> 00:27:00,190 untuk mendapatkan sebahagian yang berbeza ingatan. 668 00:27:00,190 --> 00:27:02,220 >> GetString dibenarkan untuk meminta operasi 669 00:27:02,220 --> 00:27:03,800 sistem untuk lebih banyak memori. 670 00:27:03,800 --> 00:27:07,894 Ia tidak akan menggunakan semula yang sama enam bait setiap kali. 671 00:27:07,894 --> 00:27:09,810 Ia akan untuk mendapatkan yang baru sebahagian daripada ingatan, yang 672 00:27:09,810 --> 00:27:12,780 t bermakna akan mendapatkan beberapa nilai lain di sini. 673 00:27:12,780 --> 00:27:15,380 >> Oleh itu, apabila saya buat s sama = t, anda tidak membandingkan 674 00:27:15,380 --> 00:27:17,880 D terhadap ini dan A terhadap ini dan V terhadap ini. 675 00:27:17,880 --> 00:27:19,588 Anda membandingkan ini terhadap ini, yang 676 00:27:19,588 --> 00:27:24,020 terus-terang adalah useless-- cukup useful-- ini agak tidak berguna, kerana yang benar-benar 677 00:27:24,020 --> 00:27:25,830 mengambil berat di mana tali dalam memori? 678 00:27:25,830 --> 00:27:26,850 >> Dan sesungguhnya, kita tidak mempunyai. 679 00:27:26,850 --> 00:27:28,980 Dan kami tidak akan memulakan terutamanya penyayang. 680 00:27:28,980 --> 00:27:34,180 Hanya setakat bahawa pepijat boleh timbul dan ancaman keselamatan boleh timbul akan 681 00:27:34,180 --> 00:27:36,100 kita sebenarnya mula mengambil berat tentang perkara ini. 682 00:27:36,100 --> 00:27:37,230 Jadi mari kita menyelesaikan masalah ini. 683 00:27:37,230 --> 00:27:39,650 Rupa-rupanya, anda menetapkan ia hanya super. 684 00:27:39,650 --> 00:27:42,600 >> Dan mari kita sebenarnya, sebelum saya mendedahkan bahawa sekali lagi, apa yang akan 685 00:27:42,600 --> 00:27:47,170 anda lakukan jika dalam kelas CS50, dan anda mempunyai untuk melaksanakan 686 00:27:47,170 --> 00:27:48,600 perbandingan terhadap dua tali. 687 00:27:48,600 --> 00:27:51,440 Anda jelas tidak boleh hanya menggunakan s sama = t. 688 00:27:51,440 --> 00:27:54,090 Tetapi secara logik, bagaimana anda akan membandingkan tali ini 689 00:27:54,090 --> 00:27:56,370 terhadap rentetan ini menggunakan kod C? 690 00:27:56,370 --> 00:27:56,880 Yeah. 691 00:27:56,880 --> 00:27:58,780 >> PENONTON: Hanya melakukan untuk gelung [didengar] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. MALAN: Perfect. 694 00:28:01,670 --> 00:28:02,900 PENONTON: [didengar] 695 00:28:02,900 --> 00:28:03,310 DAVID J. MALAN: Yeah. 696 00:28:03,310 --> 00:28:05,390 Hanya menggunakan satu untuk gelung atau manakala gelung atau apa sahaja. 697 00:28:05,390 --> 00:28:08,710 Tetapi hanya menggunakan idea asas yang jika ini adalah sebahagian daripada ingatan atau array 698 00:28:08,710 --> 00:28:11,590 dan ini adalah, melelar lebih kedua-dua pada masa yang sama. 699 00:28:11,590 --> 00:28:12,960 Dan hanya membandingkan huruf. 700 00:28:12,960 --> 00:28:14,260 >> Dan anda perlu menjadi sedikit berhati-hati, kerana anda 701 00:28:14,260 --> 00:28:16,247 tidak mahu satu jari pergi masa lalu yang lain 702 00:28:16,247 --> 00:28:18,080 kerana satu rentetan adalah lebih lama daripada yang lain. 703 00:28:18,080 --> 00:28:21,380 Jadi anda akan mahu untuk memeriksa nilai ini khas di akhirnya, null. 704 00:28:21,380 --> 00:28:24,017 Tetapi ia benar-benar adalah, dalam akhir, semudah itu. 705 00:28:24,017 --> 00:28:26,100 Dan terus-terang, kita tidak perlu untuk mencipta semula roda itu. 706 00:28:26,100 --> 00:28:27,960 Berikut adalah Versi Dua. 707 00:28:27,960 --> 00:28:32,910 Dan apa yang saya akan katakan di sini ialah bukannya membandingkan s sama = t, 708 00:28:32,910 --> 00:28:38,964 Saya bukannya akan berkata, jika tali perbandingan s koma t sama = 0. 709 00:28:38,964 --> 00:28:40,130 Kini, apa yang istimewa pada tali? 710 00:28:40,130 --> 00:28:43,046 >> Ternyata, ia adalah fungsi yang datang dengan C, yang tujuan dalam hidup 711 00:28:43,046 --> 00:28:44,650 adalah untuk membandingkan dua tali. 712 00:28:44,650 --> 00:28:48,300 Dan kacau bandingkan, jika kita membaca yang Laman lelaki atau dokumentasi atau CS50 713 00:28:48,300 --> 00:28:50,630 rujukan, ia akan hanya memberitahu anda bahawa kacau 714 00:28:50,630 --> 00:28:55,730 membandingkan pulangan sama ada negatif nombor atau nombor positif atau sifar, 715 00:28:55,730 --> 00:28:57,660 di mana sifar bermakna mereka sama. 716 00:28:57,660 --> 00:28:58,570 >> Jadi hanya sangkaan semata-mata. 717 00:28:58,570 --> 00:29:00,390 Apa yang ia mungkin bermakna jika kacau pulangan istimewa 718 00:29:00,390 --> 00:29:02,110 nilai negatif atau nilai positif? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 PENONTON: Lebih daripada atau kurang daripada. 721 00:29:04,285 --> 00:29:05,570 DAVID J. MALAN: Ya, lebih besar daripada atau kurang daripada. 722 00:29:05,570 --> 00:29:08,640 Jadi, jika anda mahu untuk menyusun keseluruhan sekumpulan tali dalam dictionary-- yang 723 00:29:08,640 --> 00:29:12,975 seperti yang kita akan akhirnya turun road-- yang fungsi sempurna menggunakan berpotensi, 724 00:29:12,975 --> 00:29:15,850 kerana ia akan berbuat demikian perbandingan tali untuk anda, dan memberitahu 725 00:29:15,850 --> 00:29:20,060 anda tidak datang sebelum b, atau melakukan b sebelum datang satu abjad. 726 00:29:20,060 --> 00:29:21,490 Kita boleh melakukan perkara tersebut. 727 00:29:21,490 --> 00:29:23,620 >> Dan notis saya lakukan satu lain perkara dalam contoh ini. 728 00:29:23,620 --> 00:29:26,870 Apa lagi yang telah berubah lebih tinggi dalam ini fungsi utama? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 Dan ini adalah yang dusta putih lain. 732 00:29:31,150 --> 00:29:33,750 Semua masa ini, apabila anda telah telah menulis rentetan, 733 00:29:33,750 --> 00:29:38,350 kami telah diam-diam menulis semula tali sebagai char * jadi dilafaz yang benar-benar 734 00:29:38,350 --> 00:29:39,270 memahami anda. 735 00:29:39,270 --> 00:29:42,450 >> Dalam erti kata lain, dalam CS50.h dan seperti yang kita akhirnya akan melihat, 736 00:29:42,450 --> 00:29:45,950 kami membuat tali sinonim dipanggil itulah perkara yang sama seperti char *. 737 00:29:45,950 --> 00:29:49,910 Dan buat masa ini, hanya tahu bahawa *, Dalam konteks ini, sekurang-kurangnya, 738 00:29:49,910 --> 00:29:51,286 ertinya alamat. 739 00:29:51,286 --> 00:29:52,210 >> Alamat apa? 740 00:29:52,210 --> 00:29:56,390 Nah, hakikat bahawa saya berkata char *, dan tidak int * atau terapung *, 741 00:29:56,390 --> 00:30:00,820 bermakna char * adalah alamat char a. 742 00:30:00,820 --> 00:30:06,770 Jadi kotak kecil ini di sini, aka tali, adalah benar-benar jenis char *, 743 00:30:06,770 --> 00:30:10,490 yang hanya satu cara mewah untuk mengatakan, ruang ini akan alamat. 744 00:30:10,490 --> 00:30:12,430 Dan apakah alamat yang merujuk kepada? 745 00:30:12,430 --> 00:30:13,780 Rupa-rupanya, char a. 746 00:30:13,780 --> 00:30:16,410 >> Tetapi kita boleh benar-benar mempunyai int * dan lain-lain. 747 00:30:16,410 --> 00:30:20,790 Tetapi untuk sekarang, char * adalah benar-benar yang paling mudah dan salah satu faedah. 748 00:30:20,790 --> 00:30:23,310 Jadi masalah ini akan meningkat, walaupun, sekali lagi. 749 00:30:23,310 --> 00:30:24,830 >> Katakan saya membuka program ini. 750 00:30:24,830 --> 00:30:27,670 Mari kita lihat jika sekarang kita boleh meramalkan apa yang salah dengan kod ini. 751 00:30:27,670 --> 00:30:31,140 Jadi, dalam program ini, copy-0, saya akan pergi ke depan dan sekali lagi memanggil 752 00:30:31,140 --> 00:30:34,190 GetString dan menyimpan nilai dalam s. 753 00:30:34,190 --> 00:30:38,800 >> Kemudian, mengapa saya lakukan ini, hanya sebagai peringatan dari minggu yang lalu? 754 00:30:38,800 --> 00:30:40,960 Kami telah mengatakan bahawa GetString kadang-kadang kembali null. 755 00:30:40,960 --> 00:30:42,793 Apakah ertinya jika GetString kembali batal? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Sesuatu telah berlaku. 758 00:30:46,034 --> 00:30:48,950 Ia mungkin bermakna tali terlalu besar, daripada komputer ingatan. 759 00:30:48,950 --> 00:30:51,724 Ia berlaku super, super, super jarang, tetapi ia boleh berlaku. 760 00:30:51,724 --> 00:30:53,890 Kami mahu menyemak untuk itu, dan itu semua kita lakukan. 761 00:30:53,890 --> 00:30:57,910 >> Oleh kerana kita akan melihat sekarang, jika anda tidak mula memeriksa lazimnya untuk perkara-perkara 762 00:30:57,910 --> 00:31:00,870 seperti null, anda mungkin sebenarnya mula pergi 763 00:31:00,870 --> 00:31:03,106 ke alamat dalam ingatan yang tidak sah. 764 00:31:03,106 --> 00:31:05,980 Dan anda akan mula mendorong lebih dan lebih segmentasi kesalahan. 765 00:31:05,980 --> 00:31:08,360 Atau Mac atau PC, hanya menyebabkan komputer untuk menggantung 766 00:31:08,360 --> 00:31:10,340 atau program untuk membekukan, berpotensi. 767 00:31:10,340 --> 00:31:14,930 >> Jadi sekarang, saya menuntut dalam salinan-0.c, bahawa saya Aku akan menyalin tali ini dengan cara 768 00:31:14,930 --> 00:31:15,685 dari beratur 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 Kemudian, saya akan menuntut di bahagian bawah 771 00:31:18,750 --> 00:31:21,430 di sini bahawa saya akan untuk menukar salah seorang daripada mereka. 772 00:31:21,430 --> 00:31:22,330 >> Jadi notis ini. 773 00:31:22,330 --> 00:31:24,370 Saya memanggil rakan strlen lama. 774 00:31:24,370 --> 00:31:28,960 Dan hanya menjelaskan dalam bahasa Inggeris apa baris ini 34 melakukan? 775 00:31:28,960 --> 00:31:32,480 Apa yang t kurungan 0 mewakili di sebelah kiri. 776 00:31:32,480 --> 00:31:32,980 Yeah. 777 00:31:32,980 --> 00:31:34,339 >> PENONTON: aksara Pertama t? 778 00:31:34,339 --> 00:31:35,880 DAVID J. MALAN: aksara Pertama t. 779 00:31:35,880 --> 00:31:36,379 Itu sahaja. 780 00:31:36,379 --> 00:31:40,024 Watak pertama t, saya mahu untuk memberikan versi huruf besar 781 00:31:40,024 --> 00:31:41,190 watak pertama dalam t. 782 00:31:41,190 --> 00:31:43,200 Jadi, ini adalah kesempatan surat pertama. 783 00:31:43,200 --> 00:31:46,340 Dan kemudian, perkara yang terakhir saya lakukan dalam program ini saya menuntut di sini 784 00:31:46,340 --> 00:31:50,340 asal, s, dan di sini salinan, t. 785 00:31:50,340 --> 00:31:54,610 >> Tetapi berdasarkan kisah kita memberitahu tentang apa yang tali benar-benar adalah, 786 00:31:54,610 --> 00:31:57,520 apa yang benar-benar talian 28 lakukan, dan apa yang 787 00:31:57,520 --> 00:31:59,405 bug yang terhasil akan untuk berada di skrin? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Jadi pertama, soalan pertama, 28. 790 00:32:03,500 --> 00:32:09,040 Apa yang tali t = s benar-benar buat? 791 00:32:09,040 --> 00:32:16,430 Jika kita mempunyai di sebelah kiri-tangan sebelah sini rentetan t = s; 792 00:32:16,430 --> 00:32:19,400 yang memberikan saya satu kotak di sini dan satu kotak di sini. 793 00:32:19,400 --> 00:32:25,530 Dan andaikan alamat ini adalah 0x, katakan, 50 kali ini, sewenang-wenangnya. 794 00:32:25,530 --> 00:32:28,847 Apa rentetan t = s lakukan di bawah hood? 795 00:32:28,847 --> 00:32:30,340 >> PENONTON: [didengar] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. MALAN: Ia menyimpan memori menangani sana, jadi 0x50 pergi ke sana. 797 00:32:34,100 --> 00:32:37,980 Jadi jika sekarang, saya pergi ke pertama watak dalam t dan huruf besar itu, 798 00:32:37,980 --> 00:32:39,535 apa yang saya lakukan untuk berkesan s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Saya benar-benar melakukan perkara yang sama, bukan? 801 00:32:43,450 --> 00:32:47,680 Kerana jika Alamat 0x50-- dan adil, saya tidak mempunyai banyak ruang di atas kapal di sini, 802 00:32:47,680 --> 00:32:51,750 tetapi menganggap bahawa ini adalah 0x50 turun di sini, di suatu tempat di memori komputer saya. 803 00:32:51,750 --> 00:32:55,825 >> Dan saya, misalnya, Gabe dalam huruf kecil di sini, seperti ini. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 Sehingga aku berkata t kurungan 0 mendapat dipermodalkan. 806 00:33:01,980 --> 00:33:04,860 Nah, t kurungan 0 adalah huruf pertama dalam t. 807 00:33:04,860 --> 00:33:07,840 Jadi sedikit g akan menjadi besar G. Tetapi masalahnya 808 00:33:07,840 --> 00:33:09,410 adalah, apa s juga menunjukkan? 809 00:33:09,410 --> 00:33:10,300 >> PENONTON: Perkara yang sama. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. MALAN: Perkara yang tepat sama. 811 00:33:11,841 --> 00:33:16,342 Jadi penjelasan yang mudah mungkin, walaupun sintaks adalah sedikit pelik. 812 00:33:16,342 --> 00:33:17,050 Jadi mari kita buat ini. 813 00:33:17,050 --> 00:33:20,210 Membuat salinan-0 dan kemudian ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Mengatakan sesuatu: Gabe. 816 00:33:24,110 --> 00:33:26,760 Dan malangnya, kedua-dua mereka kini telah dipermodalkan, 817 00:33:26,760 --> 00:33:29,500 tetapi untuk yang asas sebab itu kami hanya 818 00:33:29,500 --> 00:33:32,350 kini berhadapan dengan alamat. 819 00:33:32,350 --> 00:33:36,470 >> Jadi bagaimana kita mula address-- pun tidak intended-- 820 00:33:36,470 --> 00:33:39,270 bagaimana kita mula menangani masalah tertentu ini? 821 00:33:39,270 --> 00:33:44,400 Nah, dalam copy1.c, mereka akan berdepan untuk mendapatkan sedikit lebih rumit. 822 00:33:44,400 --> 00:33:49,310 Tetapi saya akan menuntut penyelesaian dari segi konsep yang mudah. 823 00:33:49,310 --> 00:33:50,852 >> Begitu sukar untuk mendapatkan pada pandangan pertama. 824 00:33:50,852 --> 00:33:53,560 Tidak akan mudah untuk yang pertama masa anda menaip keluar, mungkin, 825 00:33:53,560 --> 00:33:57,440 tetapi jika masalahnya ialah bahawa hanya melakukan t = s hanya 826 00:33:57,440 --> 00:33:59,694 salinan alamat, apa, sekali lagi jika saya boleh mengambil kepada kamu, 827 00:33:59,694 --> 00:34:02,110 akan menjadi penyelesaian sebenarnya untuk menyalin rentetan? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> PENONTON: Kami akan mungkin menggunakan gelung lagi. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. MALAN: Yeah. 831 00:34:06,890 --> 00:34:08,390 Jadi, kita akan memerlukan gelung lagi. 832 00:34:08,390 --> 00:34:11,800 Dan kerana jika kita mahu untuk menyalin yang s tali ke tali yang lain, 833 00:34:11,800 --> 00:34:14,120 kita mungkin mahu melakukannya watak oleh watak. 834 00:34:14,120 --> 00:34:17,199 Tetapi masalahnya ialah, jika ini adalah asalnya s, 835 00:34:17,199 --> 00:34:22,159 kini kita perlu mula dengan jelas memperuntukkan memori untuk t. 836 00:34:22,159 --> 00:34:24,320 >> Dalam erti kata lain, mari kita melukis semula kali terakhir ini. 837 00:34:24,320 --> 00:34:28,659 Jika ini adalah rentetan s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 Dan mari kita meletakkan ini di sini, juga. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Ini adalah GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 Kemudian, gambar sesuatu seperti itu akan menjadi seperti dahulu, 844 00:34:43,860 --> 00:34:44,360 g-a-b-e / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 Yang kelihatan sesuatu yang kecil seperti ini. 847 00:34:48,960 --> 00:34:53,650 Dan s Oleh itu, kita panggil ini 0x50, dan itu akan menjadi 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Jadi ini adalah 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 Dan kemudian, saya tali t. 851 00:34:59,690 --> 00:35:02,450 Dalam ingatan, itu hanya akan memberi saya satu persegi kecil seperti ini. 852 00:35:02,450 --> 00:35:04,080 Jadi apa langkah penting sekarang? 853 00:35:04,080 --> 00:35:09,870 Jika saya hendak salin ke dalam t, apa kosong yang kita perlu mengisi di sini? 854 00:35:09,870 --> 00:35:12,050 Atau apa yang kita perlu melakukan pada tahap yang tinggi? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Yeah? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Seseorang? 859 00:35:17,020 --> 00:35:17,690 Yeah. 860 00:35:17,690 --> 00:35:19,214 >> PENONTON: Kita perlu [didengar]. 861 00:35:19,214 --> 00:35:21,380 DAVID J. MALAN: Ya, kita perlu mengisi kosong ini. 862 00:35:21,380 --> 00:35:24,340 Saya tidak boleh menyalin dan kemudian kesempatan Nama Gabe ini 863 00:35:24,340 --> 00:35:28,120 sehingga saya bertanya sistem operasi untuk satu lagi sebahagian daripada memori 864 00:35:28,120 --> 00:35:30,640 itu sekurang-kurangnya sama besar seperti yang asal. 865 00:35:30,640 --> 00:35:32,130 Supaya meninggalkan kita dengan soalan. 866 00:35:32,130 --> 00:35:36,080 >> Bagaimana saya meminta sistem operasi tidak hanya untuk pointer-- sedikit mudah 867 00:35:36,080 --> 00:35:38,530 kerana ini dipanggil, satu alamat, yang tidak pointer-- 868 00:35:38,530 --> 00:35:40,980 untuk kotak kecil mudah seperti ini dipanggil rentetan? 869 00:35:40,980 --> 00:35:44,200 Bagaimana saya meminta operasi sistem untuk sebahagian besar daripada memori? 870 00:35:44,200 --> 00:35:48,430 Setakat ini, saya hanya mendapat belakang yang tidak langsung dengan memanggil GetString. 871 00:35:48,430 --> 00:35:50,740 Jadi bagaimana GetString walaupun mendapat ingatan? 872 00:35:50,740 --> 00:35:53,430 >> Nah, ternyata bahawa ada fungsi lain ini di sini 873 00:35:53,430 --> 00:35:55,160 bahawa kita kini akan mula digunakan. 874 00:35:55,160 --> 00:35:59,780 Sekarang, ini kelihatan than-- cara yang lebih samar dan saya satu-satunya yang boleh melihat it-- 875 00:35:59,780 --> 00:36:03,150 baris ini kelihatan cara yang lebih samar maka sepatutnya pada pandangan pertama. 876 00:36:03,150 --> 00:36:04,650 Tetapi mari kita mengusik berasingan. 877 00:36:04,650 --> 00:36:07,950 >> Di sebelah kiri, saya mempunyai char * t. 878 00:36:07,950 --> 00:36:13,280 Jadi, dalam Bahasa Inggeris, mari kita mulakan untuk merumuskan ayat yang betul dalam jargon teknikal. 879 00:36:13,280 --> 00:36:19,757 Jadi ini memperuntukkan ubah jenis char * dipanggil t. 880 00:36:19,757 --> 00:36:21,090 Sekarang, apakah yang benar-benar bermakna? 881 00:36:21,090 --> 00:36:23,881 >> Nah, itu bermakna, apa yang saya akan untuk dimasukkan ke dalam pembolehubah ini dipanggil t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Alamat char a. 884 00:36:26,402 --> 00:36:28,360 Jadi itu hanya lebih mudah, cara yang lebih munasabah 885 00:36:28,360 --> 00:36:29,930 menggambarkan sebelah kiri. 886 00:36:29,930 --> 00:36:32,890 Jadi yang mencipta kotak ini di sini sahaja. 887 00:36:32,890 --> 00:36:34,760 Oleh itu, sebelah kanan, mungkin, akan 888 00:36:34,760 --> 00:36:37,170 untuk memperuntukkan bahawa lebih besar sebahagian memori bagaimana? 889 00:36:37,170 --> 00:36:38,340 Jadi mari kita mengusik ini selain. 890 00:36:38,340 --> 00:36:41,131 >> Ia hangat pada pandangan pertama, tetapi apa yang berlaku di dalam sini? 891 00:36:41,131 --> 00:36:43,740 Pertama, ada malloc, yang nampaknya rakan baru kami, 892 00:36:43,740 --> 00:36:45,450 "Memori memperuntukkan." 893 00:36:45,450 --> 00:36:49,560 Jadi ini adalah hujah yang dihulurkan ke dalamnya, maka ia adalah satu hujah yang cukup besar. 894 00:36:49,560 --> 00:36:50,970 Jadi mari kita mengusik ini selain. 895 00:36:50,970 --> 00:36:53,410 >> strlen s, sudah tentu, mewakili the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 PENONTON: Bilangan aksara. 898 00:36:55,600 --> 00:36:56,710 DAVID J. MALAN: Hanya Bilangan aksara dalam s. 899 00:36:56,710 --> 00:36:59,040 Jadi panjang s, tali asal. 900 00:36:59,040 --> 00:37:00,350 Jadi G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 Jadi ia mungkin empat dalam kes ini. 902 00:37:02,320 --> 00:37:05,485 Mengapa saya lakukan selepas +1 memanggil strlen s? 903 00:37:05,485 --> 00:37:06,360 PENONTON: [didengar] 904 00:37:06,360 --> 00:37:07,590 DAVID J. MALAN: Untuk itu watak null khas. 905 00:37:07,590 --> 00:37:11,260 Jika anda bertanya kepada saya apa yang panjang Nama Gabe ini, saya akan mengatakan empat. 906 00:37:11,260 --> 00:37:14,480 Di bawah hood, walaupun, saya perlu bahawa bait kelima untuk watak null. 907 00:37:14,480 --> 00:37:16,100 Jadi itulah sebabnya saya lakukan +1 itu. 908 00:37:16,100 --> 00:37:21,730 >> Sekarang hanya dalam kes anda menjalankan ini program pada komputer selain daripada, katakan, 909 00:37:21,730 --> 00:37:24,610 perkakas CS50 ini, di mana saiz yang char 910 00:37:24,610 --> 00:37:26,350 mungkin berbeza dari computer-- saya sendiri 911 00:37:26,350 --> 00:37:30,590 ternyata bahawa saya boleh memanggil ini Pengendali sizeof, hanya meminta komputer, 912 00:37:30,590 --> 00:37:32,870 apa yang saiz char pada komputer ini? 913 00:37:32,870 --> 00:37:37,400 >> Dan dengan mendarabkan lima ini contohnya dengan saiz arang, yang 914 00:37:37,400 --> 00:37:40,440 pada kebanyakan komputer akan hanya menjadi satu, malloc 915 00:37:40,440 --> 00:37:44,830 akan memperuntukkan bagi saya ini besar sebahagian memori di sini di sebelah kanan. 916 00:37:44,830 --> 00:37:47,140 Dan ia akan return-- ia adalah function-- yang jadi 917 00:37:47,140 --> 00:37:48,265 akan kembali kepada saya apa? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 PENONTON: Alamatnya? 920 00:37:51,830 --> 00:37:53,709 DAVID J. MALAN: Alamat apa? 921 00:37:53,709 --> 00:37:55,250 PENONTON: Daripada memori ia diperuntukkan? 922 00:37:55,250 --> 00:37:56,450 DAVID J. MALAN: Daripada memori ia diperuntukkan. 923 00:37:56,450 --> 00:37:59,189 Jadi saya tidak tahu, terus-terang, di mana ini akan berakhir. 924 00:37:59,189 --> 00:38:01,480 Saya akan mencadangkan ia akan berakhir di 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Benar-benar sewenang-wenangnya, tetapi di tempat lain selain 0x50, 927 00:38:06,009 --> 00:38:08,800 kerana sistem operasi, apa yang Windows dan Mac OS lakukan untuk saya, adalah 928 00:38:08,800 --> 00:38:11,230 memastikan bahawa ia memberi saya ketulan berbeza RAM. 929 00:38:11,230 --> 00:38:14,210 >> Jadi ini adalah nilai di mana ini sebahagian memori mungkin berakhir. 930 00:38:14,210 --> 00:38:16,060 Jadi ini adalah apa yang berakhir di sini, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Jadi sekarang jelas, saya boleh memahami ini tidak sama seperti ini, 933 00:38:21,570 --> 00:38:23,960 kerana mereka menghala ke arah ketulan berbeza ingatan. 934 00:38:23,960 --> 00:38:29,980 Jadi, jika saya kini benar-benar mahu untuk menyalin ini dalam, mari kita buat penyelesaian yang dicadangkan anda. 935 00:38:29,980 --> 00:38:36,870 >> Mari kita pergi, buat untuk gelung, dan melakukan t kurungan i mendapat s kurungan i. 936 00:38:36,870 --> 00:38:39,760 Oleh kerana sekarang saya boleh menggunakan ini notasi pelbagai-suka, 937 00:38:39,760 --> 00:38:43,390 kerana walaupun malloc sangat secara umum saya memperuntukkan ingatan, 938 00:38:43,390 --> 00:38:45,290 ingatan adalah bait hanya berdampingan. 939 00:38:45,290 --> 00:38:47,240 Bait, bait, bait, kembali ke belakang ke belakang. 940 00:38:47,240 --> 00:38:50,030 >> Saya boleh pasti sebagai programmer memperlakukannya sebagai array, yang 941 00:38:50,030 --> 00:38:55,090 ertinya saya boleh menggunakan ini akhirnya akrab notasi hanya beberapa kurungan persegi. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Jadi biarlah saya berhenti di sana, kerana ini adalah banyak sekali gus, walaupun 944 00:39:00,020 --> 00:39:03,530 walaupun idea asas imbasan kembali adalah rentetan itu, selama ini, 945 00:39:03,530 --> 00:39:05,550 bukan jenis data baru per se. 946 00:39:05,550 --> 00:39:10,150 Ia hanya satu penunjuk yang dipanggil, alamat aksara, 947 00:39:10,150 --> 00:39:12,650 yang hanya bermakna ia sebilangan bahawa dengan konvensyen manusia 948 00:39:12,650 --> 00:39:15,350 kita cenderung untuk menulis sebagai 0x sesuatu. 949 00:39:15,350 --> 00:39:18,590 >> Tetapi ia hanya nombor, 33 seperti Oxford Street, 950 00:39:18,590 --> 00:39:20,530 yang berlaku untuk menjadi Alamat bangunan CS ini. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Apa-apa soalan mengenai butiran ini? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Yeah? 955 00:39:25,289 --> 00:39:28,530 >> PENONTON: Mengapa kita semak untuk t sama dengan nol? 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. MALAN: Mengapa kita memeriksa t sama dengan nol? 957 00:39:30,740 --> 00:39:33,250 Jika kita membaca documentation-- yang question-- hebat untuk malloc, 958 00:39:33,250 --> 00:39:37,020 ia akan berkata dalam cetakan halus, kadang-kadang malloc mungkin kembali batal, 959 00:39:37,020 --> 00:39:38,080 seperti GetString. 960 00:39:38,080 --> 00:39:41,820 Dan sesungguhnya GetString kembali null jika, sebaliknya, malloc kembali batal, 961 00:39:41,820 --> 00:39:43,130 kerana GetString menggunakan malloc. 962 00:39:43,130 --> 00:39:46,400 >> Dan yang mungkin berlaku jika OS, Mac OS, Windows, apa sahaja, semata-mata 963 00:39:46,400 --> 00:39:48,130 daripada memori untuk anda. 964 00:39:48,130 --> 00:39:49,820 Jadi, apa yang berlaku di sana. 965 00:39:49,820 --> 00:39:52,910 >> Dan biarlah saya mendedahkan satu perkara lain yang mungkin akan meniup fikiran anda 966 00:39:52,910 --> 00:39:55,100 atau benar-benar terlalu jauh lebih garisan. 967 00:39:55,100 --> 00:39:59,770 Tetapi saya tarik yang sama untuk gelung untuk menyalin, 968 00:39:59,770 --> 00:40:05,480 yang masa lalu, ingat adalah ini. t kurungan i mendapat s kurungan i. 969 00:40:05,480 --> 00:40:06,740 >> Nice dan user-friendly. 970 00:40:06,740 --> 00:40:09,330 Terasa seperti Minggu Dua lagi. 971 00:40:09,330 --> 00:40:14,920 Tetapi versi ini sebenarnya boleh ditulis semula kerana ini, yang kelihatan samar. 972 00:40:14,920 --> 00:40:18,280 Ia adalah satu teknik yang dikenali sebagai penunjuk aritmetik, alamat aritmetik. 973 00:40:18,280 --> 00:40:19,600 Tetapi mengapa ini berfungsi? 974 00:40:19,600 --> 00:40:22,220 >> Sekarang annoyingly, yang pengarang C memutuskan untuk menggunakan 975 00:40:22,220 --> 00:40:25,070 simbol * untuk tujuan yang berlainan. 976 00:40:25,070 --> 00:40:29,020 Kita telah melihat ia digunakan sekali pun, char *, yang bermaksud "memberi saya pembolehubah 977 00:40:29,020 --> 00:40:31,210 itu akan mengandungi alamat char a. " 978 00:40:31,210 --> 00:40:33,990 * Jadi char dalam konteks itu bermaksud "memberi saya pemboleh ubah." 979 00:40:33,990 --> 00:40:40,050 >> Malangnya, jika anda menggunakan * tanpa perkataan di hadapannya, seperti arang, 980 00:40:40,050 --> 00:40:41,905 ia kini dikenali sebagai Pengendali dereference. 981 00:40:41,905 --> 00:40:43,530 Dan kita akan melihat lebih banyak daripada ini tidak lama lagi. 982 00:40:43,530 --> 00:40:44,930 Tetapi ia hanya bermaksud "pergi ke sana." 983 00:40:44,930 --> 00:40:49,070 Ia seperti mengatakan, jika seseorang menyerahkan saya di atas sekeping kertas "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 jika saya buat "* 33 Oxford Street," yang bermakna "Pergi jalan ke bangunan CS itu." 985 00:40:53,830 --> 00:40:57,220 >> Jadi * ertinya hanya pergi ke sana jika tidak ada perkataan di hadapannya. 986 00:40:57,220 --> 00:40:59,100 Jadi apa yang t, menjadi jelas? 987 00:40:59,100 --> 00:41:03,250 t ialah alamat sebahagian daripada memori yang telah diberikan semula kepada saya. 988 00:41:03,250 --> 00:41:06,650 adalah alamat apa, menjadi jelas, dalam contoh kita telah berbincang, 989 00:41:06,650 --> 00:41:07,500 daripada Gabe huruf kecil? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 adalah alamat daripada-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 PENONTON: string ini. 994 00:41:12,460 --> 00:41:14,126 DAVID J. MALAN: Daripada nama asal Gabe ini. 995 00:41:14,126 --> 00:41:16,660 Jadi ia alamat sebahagian memori ini. 996 00:41:16,660 --> 00:41:22,220 Jadi, jika saya katakan t + i-- i, notis, hanya kawan lama kami. 997 00:41:22,220 --> 00:41:24,770 Ia hanya satu pembolehubah indeks yang yang iterating dari sifar ke atas sehingga 998 00:41:24,770 --> 00:41:26,960 dengan panjang tali s. 999 00:41:26,960 --> 00:41:30,367 Jadi ia akan menjadi sifar, maka satu, kemudian dua, kemudian tiga, kemudian empat. 1000 00:41:30,367 --> 00:41:33,200 Jadi mari kita memasang ini baru Keping teka-teki Scratch-suka, jika anda akan, 1001 00:41:33,200 --> 00:41:36,140 walaupun, sekali lagi, sintaks adalah jauh lebih sukar difahami berbanding Scratch. 1002 00:41:36,140 --> 00:41:39,522 Jadi t adalah alamat + i akan memberi saya 1003 00:41:39,522 --> 00:41:42,480 nombor, kerana semua ini adalah nombor yang kita telah lukisan sebagai hex. 1004 00:41:42,480 --> 00:41:43,560 Tetapi mereka hanya nombor. 1005 00:41:43,560 --> 00:41:49,960 >> Jadi, jika alamat t kita berkata adalah 0x88, 0x88 apa yang ditambah sifar. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Walaupun anda tidak selesa dengan hex lagi, mengambil meneka. 1008 00:41:53,980 --> 00:41:54,410 >> PENONTON: asal. 1009 00:41:54,410 --> 00:41:55,850 >> DAVID J. MALAN: Masih 0x88. 1010 00:41:55,850 --> 00:41:58,910 Jadi apakah * 0x88 bermakna? 1011 00:41:58,910 --> 00:42:02,670 Ia bermaksud, "pergi ke sana" yang bermaksud berkesan, "meletakkan jari anda di sini." 1012 00:42:02,670 --> 00:42:06,930 Dan sekarang di sebelah kanan ungkapan ini, * dan kemudian di parens, 1013 00:42:06,930 --> 00:42:11,586 s + i bermakna s, yang merupakan menangani di sini g kecil. 1014 00:42:11,586 --> 00:42:16,220 s + 0 adalah, sudah tentu, s, apa sahaja adalah. 1015 00:42:16,220 --> 00:42:21,230 >> Jadi sekarang, ia * s, yang seperti 33 * Oxford Street bermakna pergi ke alamat yang 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Jadi di sini adalah jari ini, tangan kanan. 1018 00:42:24,170 --> 00:42:26,050 Jadi, apa yang saya akan menyalin ke apa? 1019 00:42:26,050 --> 00:42:30,260 Perkara yang di sebelah kanan, yang merupakan Gabe, g sedikit di sini, ke sini. 1020 00:42:30,260 --> 00:42:32,750 >> Dan kesan yang lelaran pertama gelung, 1021 00:42:32,750 --> 00:42:36,200 seperti yang dicadangkan walaupun ia kelihatan gila lebih rumit daripada apa-apa 1022 00:42:36,200 --> 00:42:42,110 yang kita lihat sebelum ini, adalah semata-mata mengatakan pergi di sini dan menyalin aksara yang di sini. 1023 00:42:42,110 --> 00:42:44,700 Ia memberikan anda peta untuk kedua-dua lokasi. 1024 00:42:44,700 --> 00:42:46,130 >> Dan kita akan melihat lebih banyak daripada ini. 1025 00:42:46,130 --> 00:42:50,600 Tetapi untuk sekarang, harapan hanya kepada memperkenalkan beberapa idea-idea asas. 1026 00:42:50,600 --> 00:42:53,550 Dan sesungguhnya, mari kita lihat satu program akhir di sini, 1027 00:42:53,550 --> 00:42:57,480 dan kemudian claymation yang dijanjikan, yang akan membuat segala-galanya hak semua. 1028 00:42:57,480 --> 00:42:57,980 Baiklah. 1029 00:42:57,980 --> 00:43:01,680 Jadi biarlah saya membuka up-- ada kita pergi. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Oleh itu, marilah me-- kita akan kembali untuk gambar ini tidak lama lagi. 1032 00:43:05,440 --> 00:43:08,360 Biar saya membuka contoh terakhir ini di sini. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Jadi di sini adalah super, super program yang Kuasa melakukan 1035 00:43:12,710 --> 00:43:15,050 apa-apa dalam kehidupan yang melakukan yang berikut. 1036 00:43:15,050 --> 00:43:18,740 Ia pertama mengisytiharkan dua pembolehubah, x dan y, yang tidak nombor kali ini, 1037 00:43:18,740 --> 00:43:19,240 per se. 1038 00:43:19,240 --> 00:43:20,448 Mereka bukan integer, per se. 1039 00:43:20,448 --> 00:43:22,899 Mereka nampaknya int *. 1040 00:43:22,899 --> 00:43:25,690 Jadi, sesiapa sahaja, apa yang dimaksudkan jika jenis data, pembolehubah anda, 1041 00:43:25,690 --> 00:43:26,860 adalah jenis int * bintang? 1042 00:43:26,860 --> 00:43:30,240 Itulah alamat int satu. 1043 00:43:30,240 --> 00:43:31,990 >> Jadi saya sudah tidak tahu di mana ia adalah lagi. 1044 00:43:31,990 --> 00:43:35,150 Ia hanya bermaksud "meletakkan, akhirnya, alamat satu int di sini. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, di mana ia adalah di ingatan, alamat akan ada. 1046 00:43:38,340 --> 00:43:40,200 Dan itulah yang y adalah akan menjadi, juga. 1047 00:43:40,200 --> 00:43:44,920 >> Jika saya kini mengatakan x = malloc (sizeof (int)), ini adalah cara yang mewah untuk mengatakan, 1048 00:43:44,920 --> 00:43:49,000 hey sistem operasi, melalui malloc, memberi saya memori yang cukup untuk saiz 1049 00:43:49,000 --> 00:43:52,370 daripada int, yang mungkin akan menjadi 32 bit atau empat bait. 1050 00:43:52,370 --> 00:43:53,680 >> Jadi apakah malloc kembali? 1051 00:43:53,680 --> 00:43:55,250 Malloc kembali alamat. 1052 00:43:55,250 --> 00:43:57,020 Jadi apa yang akan mendapat disimpan di dalam x? 1053 00:43:57,020 --> 00:44:00,600 Alamat sebahagian daripada ingatan, empat bait, malloc yang 1054 00:44:00,600 --> 00:44:03,360 hanya dijumpai untuk saya dengan meminta sistem operasi. 1055 00:44:03,360 --> 00:44:08,240 >> Sekarang Sementara itu, garis empat di sini, * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Hanya untuk jelas, apa yang berlaku di bawah sana? 1057 00:44:09,990 --> 00:44:11,530 Di sebelah kiri, * x. 1058 00:44:11,530 --> 00:44:13,610 itu seperti * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Jadi * x bermaksud apa? 1060 00:44:15,523 --> 00:44:16,450 >> PENONTON: Pergi ke. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. MALAN: Pergi ke alamat itu. 1062 00:44:17,908 --> 00:44:20,466 Di mana sahaja bahawa sebahagian daripada ingatan adalah, pergi kepadanya. 1063 00:44:20,466 --> 00:44:21,979 Dan meletakkan apa yang ada, jelas? 1064 00:44:21,979 --> 00:44:22,520 PENONTON: 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. MALAN: 42. 1066 00:44:23,580 --> 00:44:25,650 Baiklah, * y, idea sama. 1067 00:44:25,650 --> 00:44:26,860 Pergi ke alamat dalam y. 1068 00:44:26,860 --> 00:44:31,740 Letakkan nombor 13 ada, tetapi apa yang y pada masa ini? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 PENONTON: Tidak ada memori untuk y. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. MALAN: Ada ada memori untuk y. 1072 00:44:35,710 --> 00:44:38,215 Jadi apakah y mungkin mengandungi, seperti yang kita telah berkata? 1073 00:44:38,215 --> 00:44:38,520 >> PENONTON: Sampah. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. MALAN: Sesetengah nilai sampah. 1075 00:44:39,480 --> 00:44:41,320 Sekarang, nilai sampah masih nombor. 1076 00:44:41,320 --> 00:44:43,160 Ia masih boleh dikelirukan dengan alamat. 1077 00:44:43,160 --> 00:44:45,160 Ia seolah-olah seseorang menulis sesuatu sesuatu ke bawah, 1078 00:44:45,160 --> 00:44:48,002 dan saya disalah tafsir sebagai makna beberapa bangunan di jalan. 1079 00:44:48,002 --> 00:44:50,460 Dan jika anda hanya cuba untuk pergi ke beberapa bangunan yang bukan milik anda, 1080 00:44:50,460 --> 00:44:53,710 atau beberapa sebahagian memori anda tidak mempunyai telah diberikan, perkara-perkara buruk mungkin berlaku. 1081 00:44:53,710 --> 00:44:57,740 Komputer mungkin kemalangan, atau lain-lain tingkah laku mungkin berlaku tidak dapat ditentukan. 1082 00:44:57,740 --> 00:45:01,310 >> Jadi intro, kemudian, untuk Binky adalah ini. 1083 00:45:01,310 --> 00:45:04,290 Saya masih ingat, 20 beberapa tahun ganjil kemudian, 1084 00:45:04,290 --> 00:45:07,200 di mana saya adalah apabila saya akhirnya difahami petunjuk. 1085 00:45:07,200 --> 00:45:09,520 >> Yang mengatakan, jika anda meninggalkan di sini dalam tiga minit 1086 00:45:09,520 --> 00:45:12,170 dan rasa saya tidak memahami petunjuk, menyedari 1087 00:45:12,170 --> 00:45:14,410 Saya telah diingati kerana 20 tahun atas sebab tertentu gila 1088 00:45:14,410 --> 00:45:17,140 bila dan mengapa ia akhirnya tenggelam dalam, duduk dengan pengajaran saya 1089 00:45:17,140 --> 00:45:19,501 rakan-rakan, Nishat Mehta dalam belakang Dewan Makan Eliot. 1090 00:45:19,501 --> 00:45:21,250 Sekarang, saya ingat ini kerana ini adalah 1091 00:45:21,250 --> 00:45:23,920 salah satu topik yang saya, di tertentu, bergelut dengan. 1092 00:45:23,920 --> 00:45:26,470 Dan kemudian, ia akhirnya diklik, seperti saya berani mengatakan banyak topik 1093 00:45:26,470 --> 00:45:27,460 akhirnya akan. 1094 00:45:27,460 --> 00:45:32,590 Dan kini, untuk membuat yang merasakan semua lebih bahagia dan semua yang lebih meyakinkan, 1095 00:45:32,590 --> 00:45:35,360 mari kita lihat akhir kami lepas tiga minit di sini di Binky, 1096 00:45:35,360 --> 00:45:37,675 daripada rakan kami, Nick Parlante dari Stanford. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEO MAIN SEMULA] 1099 00:45:41,580 --> 00:45:42,750 >> -Hey, Binky. 1100 00:45:42,750 --> 00:45:43,500 Bangun! 1101 00:45:43,500 --> 00:45:45,960 Ia adalah masa untuk pointer menyeronokkan. 1102 00:45:45,960 --> 00:45:47,012 >> -Apa Itu? 1103 00:45:47,012 --> 00:45:48,723 Belajar mengenai petunjuk? 1104 00:45:48,723 --> 00:45:50,580 Oh, goody! 1105 00:45:50,580 --> 00:45:53,563 >> -Well, Untuk bermula, saya rasa kita akan memerlukan beberapa petunjuk. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Kod ini memperuntukkan dua petunjuk, yang boleh menunjukkan kepada integer. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 Well, saya melihat kedua-dua petunjuk, tetapi mereka seolah-olah tidak menjadi menunjuk ke apa-apa. 1110 00:46:02,140 --> 00:46:02,980 >> -Itu Betul. 1111 00:46:02,980 --> 00:46:05,100 Pada mulanya, petunjuk tidak menunjukkan apa-apa. 1112 00:46:05,100 --> 00:46:08,030 Apa yang mereka menunjukkan dipanggil pointees, dan menetapkan mereka itu 1113 00:46:08,030 --> 00:46:09,370 langkah yang berasingan. 1114 00:46:09,370 --> 00:46:10,220 >> -Oh, Betul, betul. 1115 00:46:10,220 --> 00:46:10,950 Saya tahu bahawa. 1116 00:46:10,950 --> 00:46:12,385 Yang pointees adalah berasingan. 1117 00:46:12,385 --> 00:46:14,315 Er, jadi bagaimana anda memperuntukkan pointee satu? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 Nah, kod ini memperuntukkan yang pointee integer baru, 1121 00:46:18,970 --> 00:46:20,950 dan ini sebahagian set x untuk menunjukkan kepadanya. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hey, Yang kelihatan lebih baik. 1124 00:46:23,230 --> 00:46:25,060 Oleh itu, ia melakukan sesuatu. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Saya akan dereference x penunjuk untuk menyimpan nombor 42 ke dalam pointee itu. 1127 00:46:30,455 --> 00:46:32,830 Untuk silap mata ini, saya perlu saya Magic Wand of penyahrujukan. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> Your Magic Wand of penyahrujukan? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 Bahawa- yang hebat. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -Ini Adalah apa kod kelihatan seperti. 1134 00:46:41,080 --> 00:46:44,110 Saya hanya akan menubuhkan nombor tersebut, dan [POP] 1135 00:46:44,110 --> 00:46:44,700 >> -Hey, Melihat. 1136 00:46:44,700 --> 00:46:46,140 Terdapat ia pergi. 1137 00:46:46,140 --> 00:46:50,980 >> -So Melakukan dereference pada x berikut anak panah untuk mengakses pointee itu. 1138 00:46:50,980 --> 00:46:53,160 Dalam kes ini, sebuah kedai 42 di sana. 1139 00:46:53,160 --> 00:46:57,710 Hey cuba menggunakannya untuk menyimpan bilangan 13 melalui penunjuk lain, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Saya hanya akan pergi ke sini untuk y, dan mendapatkan nombor 13 set up. 1142 00:47:03,270 --> 00:47:07,930 Dan kemudian, mengambil Wand daripada Penyahrujukan dan hanya [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> -Oh! 1144 00:47:08,960 --> 00:47:09,500 >> -Oh, Hey! 1145 00:47:09,500 --> 00:47:11,090 Yang tidak berjaya. 1146 00:47:11,090 --> 00:47:15,630 Katakanlah, Binky, saya tidak fikir penyahrujukan y adalah idea yang baik, kerana anda tahu, 1147 00:47:15,630 --> 00:47:17,850 menubuhkan pointee yang adalah langkah yang berasingan. 1148 00:47:17,850 --> 00:47:20,450 Dan saya tidak fikir kita pernah melakukannya. 1149 00:47:20,450 --> 00:47:21,480 >> Titik -Good. 1150 00:47:21,480 --> 00:47:21,980 Yeah. 1151 00:47:21,980 --> 00:47:25,680 Kami diperuntukkan penunjuk y, tetapi kita tidak menetapkannya untuk menunjukkan pointee a. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Sangat Taat. 1154 00:47:28,616 --> 00:47:30,240 -Hey, Anda mencari yang baik di sana, Binky. 1155 00:47:30,240 --> 00:47:33,400 Bolehkah anda menetapkan ia supaya y titik untuk pointee yang sama seperti x? 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 Saya akan menggunakan Wand Magic saya Penyerahan Hak pointer. 1158 00:47:36,780 --> 00:47:38,740 >> -ialah Yang akan menjadi masalah seperti sebelum ini? 1159 00:47:38,740 --> 00:47:39,240 -Tiada. 1160 00:47:39,240 --> 00:47:40,660 Ini tidak menyentuh pointees. 1161 00:47:40,660 --> 00:47:44,450 Ia hanya mengubah satu penunjuk kepada menunjuk kepada perkara yang sama seperti yang lain. 1162 00:47:44,450 --> 00:47:45,450 >> -Oh, Saya melihat. 1163 00:47:45,450 --> 00:47:48,200 Sekarang y mata kepada tempat yang sama x. 1164 00:47:48,200 --> 00:47:48,910 Jadi tunggu. 1165 00:47:48,910 --> 00:47:49,950 Sekarang, y adalah tetap. 1166 00:47:49,950 --> 00:47:51,120 Ia mempunyai pointee a. 1167 00:47:51,120 --> 00:47:54,510 Jadi, anda boleh mencuba Wand daripada Penyahrujukan lagi untuk menghantar 13 ke atas. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Di sini ia pergi. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hey, Melihat itu. 1171 00:47:59,340 --> 00:48:00,750 Sekarang penyahrujukan kerja-kerja y. 1172 00:48:00,750 --> 00:48:04,991 Dan kerana petunjuk berkongsian bahawa satu pointee, mereka berdua melihat 13. 1173 00:48:04,991 --> 00:48:05,490 Yeah. 1174 00:48:05,490 --> 00:48:06,870 Berkongsi, apa sahaja. 1175 00:48:06,870 --> 00:48:08,820 Jadi kita akan bertukar tempat sekarang? 1176 00:48:08,820 --> 00:48:09,440 >> Oh, melihat. 1177 00:48:09,440 --> 00:48:10,830 Kami keluar dari masa. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Hanya Ingat tiga peraturan pointer. 1180 00:48:13,530 --> 00:48:16,560 Nombor Satu, struktur asas adalah bahawa anda mempunyai penunjuk, 1181 00:48:16,560 --> 00:48:18,680 dan ia menunjuk kepada pointee a. 1182 00:48:18,680 --> 00:48:20,640 Tetapi penunjuk dan pointee adalah berasingan, 1183 00:48:20,640 --> 00:48:22,610 dan kesilapan yang sama adalah untuk menubuhkan penunjuk, 1184 00:48:22,610 --> 00:48:25,000 tetapi lupa untuk memberikan pointee a. 1185 00:48:25,000 --> 00:48:28,170 >> Nombor Dua, penunjuk penyahrujukan daftar masuk bermula pada penunjuk 1186 00:48:28,170 --> 00:48:31,050 dan mengikuti anak panah ke atas untuk mengakses pointee itu. 1187 00:48:31,050 --> 00:48:33,400 Seperti yang kita semua tahu, ini hanya berfungsi jika terdapat 1188 00:48:33,400 --> 00:48:36,270 yang pointee, yang jenis mendapat kembali Peraturan Nombor Satu. 1189 00:48:36,270 --> 00:48:39,000 >> Nombor Tiga, penunjuk tugasan mengambil masa satu penunjuk 1190 00:48:39,000 --> 00:48:42,320 dan perubahan itu untuk menunjuk kepada pointee sama seperti penunjuk lain. 1191 00:48:42,320 --> 00:48:44,160 Jadi selepas tugasan, kedua-dua petunjuk 1192 00:48:44,160 --> 00:48:45,910 akan menunjukkan kepada pointee yang sama. 1193 00:48:45,910 --> 00:48:47,990 Kadang-kadang, yang dinamakan perkongsian. 1194 00:48:47,990 --> 00:48:49,740 Dan itu semua ada kepadanya, benar-benar. 1195 00:48:49,740 --> 00:48:50,277 Selamat tinggal sekarang. 1196 00:48:50,277 --> 00:48:51,110 [VIDEO AKHIR MAIN SEMULA] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. MALAN: Itu sahaja untuk CS50. 1198 00:48:52,568 --> 00:48:55,110 Kami akan melihat anda minggu depan. 1199 00:48:55,110 --> 00:48:56,064