1 00:00:00,000 --> 00:00:03,269 >> [MUSIC PLAYING] 2 00:00:03,269 --> 00:00:05,391 3 00:00:05,391 --> 00:00:06,640 Camille REKHSON: Hi, semua orang. 4 00:00:06,640 --> 00:00:10,120 Selamat datang di kuis CS50 nol ulasan sesi. 5 00:00:10,120 --> 00:00:10,770 Aku Camille. 6 00:00:10,770 --> 00:00:13,140 Dan aku akan pergi atas beberapa topik dengan Anda 7 00:00:13,140 --> 00:00:16,890 orang hari ini untuk membantu Anda mempersiapkan kuis. 8 00:00:16,890 --> 00:00:20,840 Jadi, inilah kami non lengkap daftar topik Anda 9 00:00:20,840 --> 00:00:23,210 harus akrab dengan untuk kuis. 10 00:00:23,210 --> 00:00:25,740 Ini diambil langsung dari silabus. 11 00:00:25,740 --> 00:00:26,990 Aku tahu sepertinya banyak. 12 00:00:26,990 --> 00:00:30,870 Tapi percayalah, Anda telah belajar semua hal-hal ini dalam beberapa minggu terakhir. 13 00:00:30,870 --> 00:00:33,210 >> Jadi kita akan pasti akan lebih banyak hari ini. 14 00:00:33,210 --> 00:00:35,825 Tetapi juga mengambil beberapa waktu pada Anda sendiri untuk meninjau hal-hal ini. 15 00:00:35,825 --> 00:00:38,450 Dan jika Anda tidak akrab dengan apa beberapa hal-hal ini, 16 00:00:38,450 --> 00:00:42,400 pastikan Anda meminta salah satu dari kami. 17 00:00:42,400 --> 00:00:45,985 Juga, untuk kata resmi pada kuis, pergi ke link ini. 18 00:00:45,985 --> 00:00:48,860 Ini akan memiliki semua informasi yang dengan kamar yang Anda butuhkan untuk masuk, 19 00:00:48,860 --> 00:00:52,960 berpisah abjad, dan juga beberapa tips tentang apa bahan 20 00:00:52,960 --> 00:00:56,470 Anda harus belajar, dan jenis pertanyaan kuis yang dapat Anda harapkan. 21 00:00:56,470 --> 00:01:01,090 Jadi pastikan untuk memeriksa yang keluar. 22 00:01:01,090 --> 00:01:03,810 >> Juga, beberapa tips ketika Anda sedang mempersiapkan untuk ujian. 23 00:01:03,810 --> 00:01:05,730 Berlatih coding di atas kertas. 24 00:01:05,730 --> 00:01:09,280 Aku tahu kau sudah terbiasa untuk memiliki cek IDE untuk kesalahan Anda untuk Anda, 25 00:01:09,280 --> 00:01:12,280 dan it's-- ketika Anda mengetik itu, itu sedikit berbeda daripada memiliki 26 00:01:12,280 --> 00:01:13,113 untuk menulis hal-hal. 27 00:01:13,113 --> 00:01:14,560 Jadi berlatih melakukan beberapa coding. 28 00:01:14,560 --> 00:01:17,910 Beberapa fungsi yang baik untuk berlatih melakukan yang strlen dan atoi, 29 00:01:17,910 --> 00:01:20,450 melihat apakah Anda bisa menulis mereka keluar pada Anda sendiri. 30 00:01:20,450 --> 00:01:21,970 Jadilah akrab dengan set masalah. 31 00:01:21,970 --> 00:01:24,200 Kebanyakan tahun ada pertanyaan yang berhubungan 32 00:01:24,200 --> 00:01:25,700 untuk beberapa materi masalah set. 33 00:01:25,700 --> 00:01:30,480 Jadi pastikan bahwa Anda memahami bagaimana melakukan semua set masalah. 34 00:01:30,480 --> 00:01:35,240 >> Mencoba melakukan beberapa kuis tua di bawah kendala waktu 75 menit. 35 00:01:35,240 --> 00:01:37,290 Banyak kuis dapat jenis panjang. 36 00:01:37,290 --> 00:01:39,680 Jadi itu adalah cara yang baik untuk memberikan sendiri beberapa praktek, 37 00:01:39,680 --> 00:01:41,650 dan berapa lama itu akan membawa Anda, dan bagaimana Anda 38 00:01:41,650 --> 00:01:45,360 harus membagi waktu Anda untuk memastikan Anda menyelesaikan segala sesuatu dengan akhir. 39 00:01:45,360 --> 00:01:49,690 Dan juga, Anda mendapatkan halaman satu, dua lembar referensi sisi 40 00:01:49,690 --> 00:01:52,962 bahwa Anda dapat menulis apa pun yang Anda ingin untuk menggunakan selama kuis. 41 00:01:52,962 --> 00:01:54,670 Jadi, ketika Anda sedang menciptakan itu, itu juga 42 00:01:54,670 --> 00:01:57,860 cara yang hebat untuk belajar karena Anda akan jenis meninjau hal-hal 43 00:01:57,860 --> 00:01:59,610 Anda sedang menulis itu. 44 00:01:59,610 --> 00:02:05,421 >> Jadi pertanyaan umum tentang kuis, atau cara kerjanya? 45 00:02:05,421 --> 00:02:05,921 Ya. 46 00:02:05,921 --> 00:02:09,167 >> AUDIENCE: Will bahwa daftar topik bahwa Anda hanya menunjukkan akan tersedia untuk kita 47 00:02:09,167 --> 00:02:09,820 on line? 48 00:02:09,820 --> 00:02:12,736 >> Camille REKHSON: Seluruh Slide ini Acara akan diposting ke website. 49 00:02:12,736 --> 00:02:16,040 Juga, video review hari ini sesi akan di website. 50 00:02:16,040 --> 00:02:19,250 Jadi jangan terlalu khawatir tentang menulis hal-hal bawah seluruh. 51 00:02:19,250 --> 00:02:20,437 Itu semua akan berada di sana. 52 00:02:20,437 --> 00:02:21,270 Ada pertanyaan lain? 53 00:02:21,270 --> 00:02:23,810 54 00:02:23,810 --> 00:02:26,960 OK, jadi mari kita mulai. 55 00:02:26,960 --> 00:02:30,860 >> Jadi satu hal untuk menjadi akrab dengan adalah jenis data yang berbeda dan ukuran 56 00:02:30,860 --> 00:02:32,486 bahwa mereka mengambil. 57 00:02:32,486 --> 00:02:35,360 Ini juga dapat menjadi hal yang besar untuk menuliskan pada lembar referensi Anda, 58 00:02:35,360 --> 00:02:37,240 hanya untuk memastikan Anda ingat semua ini. 59 00:02:37,240 --> 00:02:39,200 Tapi-- sehingga karakter adalah 1 byte. 60 00:02:39,200 --> 00:02:40,700 Int adalah 4 byte. 61 00:02:40,700 --> 00:02:44,450 Sebuah panjang, lama, yang pada dasarnya lebih ruang untuk integer, adalah 8 byte. 62 00:02:44,450 --> 00:02:46,560 Sebuah float adalah 4 byte. 63 00:02:46,560 --> 00:02:50,620 Sebuah ganda, yang pada dasarnya memberi Anda lebih banyak ruang untuk menyimpan pelampung, adalah 8 byte. 64 00:02:50,620 --> 00:02:54,210 Dan kemudian pointer juga 8 byte. 65 00:02:54,210 --> 00:02:56,270 Pertanyaan tentang ini? 66 00:02:56,270 --> 00:03:00,380 67 00:03:00,380 --> 00:03:05,580 >> Jadi biner adalah topik yang lain kita sudah ditutupi sedikit semester ini. 68 00:03:05,580 --> 00:03:07,910 Jadi mari kita lakukan beberapa berlatih dengan mengkonversi 69 00:03:07,910 --> 00:03:10,000 antara biner dan desimal. 70 00:03:10,000 --> 00:03:13,950 Jadi ada yang punya ide apa yang pertama akan? 71 00:03:13,950 --> 00:03:32,840 72 00:03:32,840 --> 00:03:34,860 Siapa saja? 73 00:03:34,860 --> 00:03:36,270 Ya, itu 42. 74 00:03:36,270 --> 00:03:39,200 Jadi, jika Anda ingat, setiap tempat di biner 75 00:03:39,200 --> 00:03:41,860 pada dasarnya seperti 2 berkuasa bahwa tempat itu. 76 00:03:41,860 --> 00:03:43,750 >> Sehingga tempat pertama adalah 2 ke 0 kekuasaan. 77 00:03:43,750 --> 00:03:46,710 Dan kami memiliki 0 sana, jadi tidak ada. 78 00:03:46,710 --> 00:03:48,700 Tempat berikutnya adalah 2 pangkat pertama. 79 00:03:48,700 --> 00:03:51,220 Dan kita memiliki 1 ada, sehingga pada dasarnya adalah 2. 80 00:03:51,220 --> 00:03:53,642 Tempat berikutnya adalah 2 sampai kedua, yaitu 4. 81 00:03:53,642 --> 00:03:54,850 Kami tidak memiliki apa-apa di sana. 82 00:03:54,850 --> 00:03:59,390 Tempat berikutnya adalah 2 sampai lebih ketiga, yang akan menjadi 8. 83 00:03:59,390 --> 00:04:02,230 Dan kami memiliki satu di sana. 84 00:04:02,230 --> 00:04:03,470 Dan kita terus. 85 00:04:03,470 --> 00:04:07,720 Bahwa last-- terjauh ke yang tersisa adalah di mana kita memiliki 32. 86 00:04:07,720 --> 00:04:13,437 Dan, kita pada dasarnya memiliki 32 ditambah 8 ditambah 2 untuk mendapatkan 42. 87 00:04:13,437 --> 00:04:14,020 Ada pertanyaan? 88 00:04:14,020 --> 00:04:15,820 >> AUDIENCE: Apa subscript untuk? 89 00:04:15,820 --> 00:04:17,399 >> Camille REKHSON: subscript The pada dasarnya memberitahu kita itu biner. 90 00:04:17,399 --> 00:04:18,230 Jadi ada 2 ada. 91 00:04:18,230 --> 00:04:20,579 Jika ada like-- di depan satu, atau ketika kita mengkonversi desimal 92 00:04:20,579 --> 00:04:24,350 ke biner, ada 10 menunjukkan kepada kita bahwa jumlah ini awalnya dalam desimal. 93 00:04:24,350 --> 00:04:25,194 >> AUDIENCE: Terima kasih. 94 00:04:25,194 --> 00:04:26,110 >> Camille REKHSON: Ya. 95 00:04:26,110 --> 00:04:28,790 Pertanyaan lain yang satu itu? 96 00:04:28,790 --> 00:04:31,110 OK, jadi mari kita coba berikutnya satu maka, desimal ke biner. 97 00:04:31,110 --> 00:04:35,034 Jadi mengambil 50 dan menempatkan bahwa dalam biner. 98 00:04:35,034 --> 00:04:35,950 Bagaimana Anda melakukan itu? 99 00:04:35,950 --> 00:04:44,331 100 00:04:44,331 --> 00:04:45,317 Ya. 101 00:04:45,317 --> 00:04:49,754 >> AUDIENCE: 110.010. 102 00:04:49,754 --> 00:04:50,760 >> Camille REKHSON: Ya. 103 00:04:50,760 --> 00:04:54,410 Jadi satu-- cara mudah untuk berpikir tentang mengkonversi dari desimal ke biner 104 00:04:54,410 --> 00:04:57,950 adalah to-- sering membantu untuk menuliskan apa kekuatan yang berbeda dari 2 yang. 105 00:04:57,950 --> 00:05:01,460 Dan kemudian pergi melalui itu, dan melihat apapun yang tertinggi dari mereka 106 00:05:01,460 --> 00:05:05,320 adalah bahwa Anda dapat dimasukkan ke dalam ke angka desimal tanpa melampaui itu. 107 00:05:05,320 --> 00:05:09,040 >> Jadi dalam hal ini, salah satu kekuasaan 2 adalah 32. 108 00:05:09,040 --> 00:05:10,560 Jadi 32 masuk ke 50. 109 00:05:10,560 --> 00:05:14,100 Tapi kekuatan berikutnya akan 64, yang jelas tidak sesuai dengan 50. 110 00:05:14,100 --> 00:05:16,343 Jadi tertinggi yang kita miliki adalah 32. 111 00:05:16,343 --> 00:05:17,343 Yang berikutnya ke 16. 112 00:05:17,343 --> 00:05:20,140 Dan 32 ditambah 16 hanya 48. 113 00:05:20,140 --> 00:05:21,350 Sehingga masih cocok dengan 50. 114 00:05:21,350 --> 00:05:22,722 Jadi kita punya 1 di kedua dari mereka. 115 00:05:22,722 --> 00:05:25,180 Dan kemudian jika kita terus turun, satu-satunya hal yang kita perlu meninggalkan 116 00:05:25,180 --> 00:05:27,510 adalah 2 lebih untuk mendapatkan 48-50. 117 00:05:27,510 --> 00:05:31,860 Jadi kita memiliki 1 di posisi itu, dan 0 di posisi terakhir. 118 00:05:31,860 --> 00:05:35,371 Karena tidak ada di 2 ke tempat-0 th. 119 00:05:35,371 --> 00:05:37,120 Pertanyaan pada mengkonversi desimal ke biner? 120 00:05:37,120 --> 00:05:40,830 121 00:05:40,830 --> 00:05:44,100 >> Jadi sekarang mari kita coba melakukan Selain beberapa biner. 122 00:05:44,100 --> 00:05:47,235 Bagaimana bila Anda menambahkan dua sampai? 123 00:05:47,235 --> 00:05:47,735 Ya. 124 00:05:47,735 --> 00:05:51,130 >> AUDIENCE: 11100. 125 00:05:51,130 --> 00:05:52,110 >> Camille REKHSON: Ya. 126 00:05:52,110 --> 00:05:55,540 Jadi melakukan penambahan biner cukup sama seperti melakukannya dalam desimal. 127 00:05:55,540 --> 00:05:59,390 Kecuali jika Anda memiliki dua makhluk 1 ini ditambahkan bersama-sama, 1 ditambah 1 adalah 2, 128 00:05:59,390 --> 00:06:02,980 tapi 2 dalam biner adalah 1 0. 129 00:06:02,980 --> 00:06:07,090 Jadi, Anda harus membawa 1, dan menjaga membawa untuk orang-orang beberapa kolom. 130 00:06:07,090 --> 00:06:10,260 Dan selain itu, hanya menambahkan normal. 131 00:06:10,260 --> 00:06:13,125 Pertanyaan itu? 132 00:06:13,125 --> 00:06:13,625 Ya. 133 00:06:13,625 --> 00:06:16,487 >> AUDIENCE: Maaf, apa adalah tempat terakhir? 134 00:06:16,487 --> 00:06:18,475 Ada enam angka. 135 00:06:18,475 --> 00:06:23,260 Jadi kolom paling kiri, nilai apa itu? 136 00:06:23,260 --> 00:06:24,760 Camille REKHSON: Di satu bawah ini? 137 00:06:24,760 --> 00:06:26,340 AUDIENCE: Di atas satu, untuk 50. 138 00:06:26,340 --> 00:06:27,340 Camille REKHSON: Untuk 50? 139 00:06:27,340 --> 00:06:29,040 Oh, jadi yang paling kiri adalah 32. 140 00:06:29,040 --> 00:06:29,760 >> AUDIENCE: 32? 141 00:06:29,760 --> 00:06:36,770 >> Camille REKHSON: Ya, jadi itu akan menjadi 32, 16, kemudian 8, 4, 2, atau 1 0--. 142 00:06:36,770 --> 00:06:39,380 Yah, itu 2 yang ke nol, yang 1. 143 00:06:39,380 --> 00:06:41,110 Ya. 144 00:06:41,110 --> 00:06:43,834 Pertanyaan lain tentang hal ini? 145 00:06:43,834 --> 00:06:47,420 OK, jadi maka kita akan melakukan sedikit dengan heksadesimal. 146 00:06:47,420 --> 00:06:49,570 Jadi mungkin ini sedikit kurang akrab, 147 00:06:49,570 --> 00:06:51,680 karena saya tahu kami telah melakukan lebih banyak dengan biner. 148 00:06:51,680 --> 00:06:54,050 Tapi cara yang sangat baik untuk berpikir tentang heksadesimal 149 00:06:54,050 --> 00:06:57,540 adalah untuk memecah biner jumlah menjadi 4 potongan bit. 150 00:06:57,540 --> 00:07:00,950 Karena setiap 4 bit dari bilangan biner pada dasarnya 151 00:07:00,950 --> 00:07:04,560 salah satu nomor heksadesimal. 152 00:07:04,560 --> 00:07:07,420 >> Jadi jika kita memiliki satu pertama ini, kami memiliki dasarnya delapan 1 ini. 153 00:07:07,420 --> 00:07:08,620 Jadi mereka dapat dibagi up-- 154 00:07:08,620 --> 00:07:09,600 >> AUDIENCE: 255. 155 00:07:09,600 --> 00:07:10,933 >> Camille REKHSON: Katakan itu lagi. 156 00:07:10,933 --> 00:07:13,772 AUDIENCE: 255 dalam desimal, atau 0xFF dalam heksadesimal. 157 00:07:13,772 --> 00:07:14,980 Camille REKHSON: Ya, itu. 158 00:07:14,980 --> 00:07:18,860 Jadi, jika Anda membagi bahwa sampai menjadi dua potongan 4-bit, 159 00:07:18,860 --> 00:07:20,950 kita pada dasarnya memiliki empat set 1. 160 00:07:20,950 --> 00:07:22,880 Yang maximum-- yang pada dasarnya maksimum 161 00:07:22,880 --> 00:07:24,329 kita bisa mendapatkan dengan 4-bit dalam biner. 162 00:07:24,329 --> 00:07:27,120 Dan maksimal kita bisa mendapatkan untuk bahwa dalam heksadesimal akan menjadi F. 163 00:07:27,120 --> 00:07:30,290 Jadi kita akan memiliki dua F. 164 00:07:30,290 --> 00:07:31,800 Pertanyaan itu? 165 00:07:31,800 --> 00:07:32,490 Ya? 166 00:07:32,490 --> 00:07:35,184 >> AUDIENCE: Dapatkah Anda ulangi. 167 00:07:35,184 --> 00:07:36,100 Camille REKHSON: Tentu. 168 00:07:36,100 --> 00:07:39,160 Jadi masing-masing, pada dasarnya, tempat heksadesimal adalah 169 00:07:39,160 --> 00:07:42,570 setara dengan 4-bit dari biner. 170 00:07:42,570 --> 00:07:46,830 Jadi cara termudah untuk melakukannya adalah untuk istirahat itu menjadi 4-bit potongan. 171 00:07:46,830 --> 00:07:48,690 Jadi dalam hal ini, kami memiliki delapan 1 ini. 172 00:07:48,690 --> 00:07:51,010 Jadi jika kita membagi mereka menjadi dua potongan 4-bit, 173 00:07:51,010 --> 00:07:54,350 kita akan memiliki dua set empat 1 ini. 174 00:07:54,350 --> 00:07:57,181 Dan masing-masing dari mereka setara dengan F. 175 00:07:57,181 --> 00:07:58,930 Jika Anda berpikir about-- Aku tahu otak kita 176 00:07:58,930 --> 00:08:00,415 jenis kabel untuk berpikir lebih melalui desimal, 177 00:08:00,415 --> 00:08:01,831 karena itulah apa yang kita digunakan untuk. 178 00:08:01,831 --> 00:08:06,030 Jadi salah satu cara Anda bisa menganggapnya sebagai empat 1 adalah sama dengan 15 dalam desimal. 179 00:08:06,030 --> 00:08:12,960 Dan 15 dalam heksadesimal adalah F. Jadi itu cara lain Anda dapat memikirkan itu. 180 00:08:12,960 --> 00:08:13,459 Ya. 181 00:08:13,459 --> 00:08:14,790 >> AUDIENCE: Apa 0x untuk? 182 00:08:14,790 --> 00:08:18,240 >> Camille REKHSON: The 0x menunjukkan bahwa itu heksadesimal. 183 00:08:18,240 --> 00:08:21,900 Jadi kita hanya menempatkan bahwa awalan ada, biasanya. 184 00:08:21,900 --> 00:08:24,396 Pertanyaan lain itu. 185 00:08:24,396 --> 00:08:27,100 OK, jadi mari kita coba akan cara lain kemudian. 186 00:08:27,100 --> 00:08:28,712 Dalam hal ini kita have-- maaf? 187 00:08:28,712 --> 00:08:29,628 AUDIENCE: [tidak terdengar]. 188 00:08:29,628 --> 00:08:32,095 189 00:08:32,095 --> 00:08:33,720 Camille REKHSON: Kami akan biner. 190 00:08:33,720 --> 00:08:36,039 Jadi, pergi ke arah lain. 191 00:08:36,039 --> 00:08:42,090 Tapi dalam kasus ini, kami memiliki 5 dan A. Jadi, jika kita berpikir tentang hal ini, 192 00:08:42,090 --> 00:08:46,260 jika masing-masing dari those-- 5 dan A adalah berdua akan mewakili sepotong 4-bit, 193 00:08:46,260 --> 00:08:49,003 bagaimana Anda akan mengatakan 5 dalam biner? 194 00:08:49,003 --> 00:08:51,120 >> AUDIENCE: 0101. 195 00:08:51,120 --> 00:08:53,100 >> Camille REKHSON: Ya, jadi itulah 0101 bagian. 196 00:08:53,100 --> 00:08:55,250 Dan kemudian bagaimana Anda akan mengatakan A in-- 197 00:08:55,250 --> 00:08:56,910 >> AUDIENCE: 10. 198 00:08:56,910 --> 00:08:58,243 Camille REKHSON: Katakanlah itu-- maaf? 199 00:08:58,243 --> 00:08:58,990 AUDIENCE: 10. 200 00:08:58,990 --> 00:09:02,052 Camille REKHSON: Ya, jadi itulah bagian kedua dari itu. 201 00:09:02,052 --> 00:09:04,010 Dan kemudian, jika Anda menempatkan kedua bersama-sama, itu 202 00:09:04,010 --> 00:09:06,440 bagaimana Anda mendapatkan penuh biner untuk heksadesimal tersebut. 203 00:09:06,440 --> 00:09:06,940 Ya? 204 00:09:06,940 --> 00:09:10,620 >> AUDIENCE: Untuk mengetahui bahwa A adalah 1010, Anda harus menghafal itu? 205 00:09:10,620 --> 00:09:12,460 Atau dapat Anda like-- 206 00:09:12,460 --> 00:09:14,380 >> Camille REKHSON: Jadi jika you-- differe-- sehingga 207 00:09:14,380 --> 00:09:16,790 ketika Anda akan melalui biner, pada dasarnya biner 208 00:09:16,790 --> 00:09:20,550 memiliki 0 sampai 9 dan kemudian A melalui F sebagai 16-nya hal. 209 00:09:20,550 --> 00:09:25,420 Jadi jika semua jalan 0 sampai 9-- jika you-- 9 dan kemudian A, pada dasarnya 210 00:09:25,420 --> 00:09:29,640 jika kita dikonversi ke desimal, A akan seperti 10, B akan seperti 11. 211 00:09:29,640 --> 00:09:35,616 Dan jika Anda berpikir tentang biner 1010 adalah 8 dan 2, 212 00:09:35,616 --> 00:09:37,990 karena mereka adalah dua tempat-tempat yang menambahkan hingga 10, yang 213 00:09:37,990 --> 00:09:41,820 adalah apa A setara dengan. 214 00:09:41,820 --> 00:09:45,114 Jadi itu semacam mudah cara untuk berpikir tentang hal itu. 215 00:09:45,114 --> 00:09:46,405 Pertanyaan lain pada heksadesimal. 216 00:09:46,405 --> 00:09:50,510 217 00:09:50,510 --> 00:09:56,870 >> OK, jadi sekarang kita akan mengambil a melihat operator bitwise. 218 00:09:56,870 --> 00:09:58,882 Jadi ini pasti dapat datang pada kuis. 219 00:09:58,882 --> 00:10:00,590 Aku tahu kita tidak bekerja dengan mereka banyak. 220 00:10:00,590 --> 00:10:02,756 Tapi kami hanya akan melakukan sedikit review ini. 221 00:10:02,756 --> 00:10:05,490 Jadi mudah-mudahan ini akan menjadi sedikit lebih akrab bagi Anda. 222 00:10:05,490 --> 00:10:10,220 Jadi enam operator bitwise bahwa kita telah tercantum di sini. 223 00:10:10,220 --> 00:10:13,340 Dan mereka memberitahu kami memanipulasi bit individual. 224 00:10:13,340 --> 00:10:16,676 Jadi operator AND adalah ampersand tunggal. 225 00:10:16,676 --> 00:10:18,550 Jangan bingung bahwa dengan ampersand ganda, 226 00:10:18,550 --> 00:10:21,840 yang merupakan logika AND yang memungkinkan kita bandingkan dua hal. 227 00:10:21,840 --> 00:10:25,860 >> Single DAN adalah bagaimana kita bisa memanipulasi hal bitwise. 228 00:10:25,860 --> 00:10:29,910 Jadi ini memberikan kita hasil 1 jika kedua argumen bahwa kita sedang membandingkan 229 00:10:29,910 --> 00:10:32,440 adalah same-- atau yang 1. 230 00:10:32,440 --> 00:10:39,370 Dan bar vertikal, OR, akan memberikan kami 1 jika setidaknya salah satu dari mereka adalah 1. 231 00:10:39,370 --> 00:10:41,460 Jadi pada dasarnya persis apa kata-kata menyiratkan. 232 00:10:41,460 --> 00:10:46,640 DAN, jika dua bit 1, 1 dan 1 memberi kita 1. 233 00:10:46,640 --> 00:10:51,769 Tetapi dengan OR, jika itu 0 atau 1, atau 1 atau 1, dalam kedua kasus, 234 00:10:51,769 --> 00:10:53,060 kita memiliki 1 sebagai salah satu dari mereka. 235 00:10:53,060 --> 00:10:54,101 Jadi kita akan mendapatkan 1. 236 00:10:54,101 --> 00:10:56,320 AUDIENCE: Apa maksudmu yang mengatakan ia memberikan 1? 237 00:10:56,320 --> 00:10:58,236 >> Camille REKHSON: The hasil. Jenis, seperti Anda 238 00:10:58,236 --> 00:11:05,060 would-- jika Anda melakukan 0 dan 1, Hasil yang akan 1-- atau 0 239 00:11:05,060 --> 00:11:08,920 dan 1 dengan hasil yang akan 0, maaf. 240 00:11:08,920 --> 00:11:12,190 Ya, itu adalah jenis yang Hasil dari ekspresi. 241 00:11:12,190 --> 00:11:16,520 Dan kemudian, simbol tanda sisipan ini adalah XOR, atau eksklusif OR. 242 00:11:16,520 --> 00:11:21,920 Jadi itu berarti secara eksklusif satu atau tepatnya salah satu dari dua argumen sama dengan 1. 243 00:11:21,920 --> 00:11:24,210 Dan kemudian akan memberikan 1. 244 00:11:24,210 --> 00:11:27,370 >> Garis berlekuk-lekuk kecil adalah operator NOT. 245 00:11:27,370 --> 00:11:31,940 Jadi tidak seperti sisa dari mereka, yang beroperasi pada sepasang bit, 246 00:11:31,940 --> 00:11:34,930 operator tidak hanya membutuhkan satu bit, dan akan flip itu. 247 00:11:34,930 --> 00:11:37,640 Jadi jika Anda give-- jika Anda melakukan TIDAK 0, itu akan memberi Anda 1. 248 00:11:37,640 --> 00:11:40,248 Dan jika Anda melakukannya TIDAK 1, itu akan memberikan 0. 249 00:11:40,248 --> 00:11:40,748 Ya? 250 00:11:40,748 --> 00:11:41,150 >> AUDIENCE: Apa bedanya antara OR dengan satu baris 251 00:11:41,150 --> 00:11:41,983 dan OR dengan dua? 252 00:11:41,983 --> 00:11:44,430 253 00:11:44,430 --> 00:11:46,930 Camille REKHSON: Jadi OR dengan dua baris adalah OR logis. 254 00:11:46,930 --> 00:11:52,430 Jadi itulah untuk membandingkan dua bilangan bulat penuh, atau two-- 255 00:11:52,430 --> 00:11:53,730 untuk melihat apakah hal-hal yang sama. 256 00:11:53,730 --> 00:11:58,340 Atau seperti melakukan hal ini sama dengan ini, OR ini sama dengan jenis hal ini. 257 00:11:58,340 --> 00:12:04,090 Sedangkan bar tunggal OR, untuk melakukan hal-hal bitwise. 258 00:12:04,090 --> 00:12:04,590 Ya. 259 00:12:04,590 --> 00:12:06,680 >> AUDIENCE: Apa yang Anda maksud dengan bitwise? 260 00:12:06,680 --> 00:12:10,330 >> Camille REKHSON: Jadi bitwise bekerja langsung dengan bit dalam biner. 261 00:12:10,330 --> 00:12:11,596 >> AUDIENCE: Oh, saya melihat. 262 00:12:11,596 --> 00:12:15,000 >> Camille REKHSON: Ya, jadi bekerja dengan 0 dan 1. 263 00:12:15,000 --> 00:12:18,310 Kami akan melakukan beberapa contoh ini setelah itu, hanya sehingga tidak terlalu membingungkan. 264 00:12:18,310 --> 00:12:20,970 Dan kemudian dua terakhir adalah pergeseran kiri dan shift kanan. 265 00:12:20,970 --> 00:12:23,970 Yang pada dasarnya kurang dari dua tanda-tanda atau dua lebih besar dari tanda-tanda. 266 00:12:23,970 --> 00:12:26,294 Dan mereka bergeser ke bit jumlah yang diberikan dari tempat 267 00:12:26,294 --> 00:12:27,710 yang Anda berikan ke arah. 268 00:12:27,710 --> 00:12:29,980 Jadi baik akan bergeser ke kiri, atau ke kanan. 269 00:12:29,980 --> 00:12:30,480 Ya? 270 00:12:30,480 --> 00:12:32,470 AUDIENCE: Apa sintaks untuk menjalankan? 271 00:12:32,470 --> 00:12:33,950 >> Camille REKHSON: Kami akan melalui contoh dalam detik. 272 00:12:33,950 --> 00:12:35,680 Jadi mudah-mudahan, yang akan membantu. 273 00:12:35,680 --> 00:12:41,060 Pertanyaan hanya apa di sini, before-- OK. 274 00:12:41,060 --> 00:12:43,821 Jadi akan melalui beberapa contoh. 275 00:12:43,821 --> 00:12:45,070 Mari kita mulai dengan yang DAN. 276 00:12:45,070 --> 00:12:47,880 Apa yang akan kita dapatkan jika kita lakukan 0 DAN 1? 277 00:12:47,880 --> 00:12:48,899 >> AUDIENCE: 0. 278 00:12:48,899 --> 00:12:50,690 Camille REKHSON: OK, dan jika kita melakukan 1 DAN 1? 279 00:12:50,690 --> 00:12:51,622 AUDIENCE: 1. 280 00:12:51,622 --> 00:12:54,490 Camille REKHSON: Ya, bagaimana jika kita lakukan 0 OR satu? 281 00:12:54,490 --> 00:12:55,094 AUDIENCE: 1. 282 00:12:55,094 --> 00:12:56,510 Camille REKHSON: Bagaimana 1 OR 1? 283 00:12:56,510 --> 00:12:57,404 AUDIENCE: 1. 284 00:12:57,404 --> 00:13:00,410 Camille REKHSON: OK, bagaimana dengan 0 XOR 1? 285 00:13:00,410 --> 00:13:01,380 AUDIENCE: 1. 286 00:13:01,380 --> 00:13:03,120 Camille REKHSON: Dan 1 XOR 1? 287 00:13:03,120 --> 00:13:03,902 AUDIENCE: 0. 288 00:13:03,902 --> 00:13:05,360 Camille REKHSON: Kalian baik. 289 00:13:05,360 --> 00:13:06,510 Bagaimana TIDAK 0? 290 00:13:06,510 --> 00:13:07,265 >> AUDIENCE: 1. 291 00:13:07,265 --> 00:13:08,390 Camille REKHSON: Dan TIDAK 1? 292 00:13:08,390 --> 00:13:09,602 AUDIENCE: 0. 293 00:13:09,602 --> 00:13:12,810 Camille REKHSON: OK, dan kemudian terakhir ini satu adalah satu kecil dengan pergeseran. 294 00:13:12,810 --> 00:13:18,700 Jadi jika kita awalnya ditetapkan x menjadi 8, dan maka y adalah x bergeser ke kiri 3, 295 00:13:18,700 --> 00:13:19,760 apa yang akan yang memberi kita? 296 00:13:19,760 --> 00:13:20,676 >> AUDIENCE: [tidak terdengar]. 297 00:13:20,676 --> 00:13:22,817 298 00:13:22,817 --> 00:13:24,150 Camille REKHSON: Katakan itu lagi. 299 00:13:24,150 --> 00:13:26,740 AUDIENCE: [tidak terdengar]. 300 00:13:26,740 --> 00:13:28,766 Camille REKHSON: Jadi, ini benar-benar memberikan kita 64. 301 00:13:28,766 --> 00:13:29,876 AUDIENCE: [tidak terdengar]. 302 00:13:29,876 --> 00:13:32,250 Camille REKHSON: Jadi aku hanya akan menulis ini di sini, 303 00:13:32,250 --> 00:13:34,700 jadi ini membuat sedikit rasa. 304 00:13:34,700 --> 00:13:45,120 Jika kita memiliki 2 ke 0, 2 ke 1, 2 ke 2, 2 sampai 3 akan menjadi 8. 305 00:13:45,120 --> 00:13:52,380 Dan jika kita ingin mengubahnya 3 bit lebih ke kiri, yang akan menjadi 2 dengan 4, 306 00:13:52,380 --> 00:13:57,270 2 ke 5, dan 2 ke 6, dan 2 ke 6 adalah 64. 307 00:13:57,270 --> 00:13:59,920 308 00:13:59,920 --> 00:14:01,110 Apakah itu masuk akal? 309 00:14:01,110 --> 00:14:05,291 310 00:14:05,291 --> 00:14:05,791 Iya nih. 311 00:14:05,791 --> 00:14:08,725 >> AUDIENCE: Apakah pergeseran bahwa semua 1 ini dan 0 dari bilangan biner ke the-- 312 00:14:08,725 --> 00:14:09,600 >> Camille REKHSON: Ya. 313 00:14:09,600 --> 00:14:12,150 314 00:14:12,150 --> 00:14:15,170 Dan Anda tidak perlu khawatir pada kuis tentang ini menjadi negatif. 315 00:14:15,170 --> 00:14:19,510 Kami tidak akan membuat Anda berurusan dengan pergeseran negatif dengan cara apapun. 316 00:14:19,510 --> 00:14:24,070 Pertanyaan lain tentang hal ini? 317 00:14:24,070 --> 00:14:24,570 Iya nih. 318 00:14:24,570 --> 00:14:30,570 >> AUDIENCE: Jika itu bergeser ke kanan, adalah segala sesuatu yang wasn't-- apapun yang 319 00:14:30,570 --> 00:14:33,220 awalnya tidak bagian dari hal 0? 320 00:14:33,220 --> 00:14:37,110 >> Camille REKHSON: Ya, Anda akan hanya menambahkan 0 pada aslinya. 321 00:14:37,110 --> 00:14:38,110 Ya. 322 00:14:38,110 --> 00:14:41,540 >> AUDIENCE: Jadi apa yang 100 bergeser ke kanan tiga kali? 323 00:14:41,540 --> 00:14:43,290 Camille REKHSON: 100 bergeser ke kanan, 324 00:14:43,290 --> 00:14:46,057 sehingga akan mengambil semua 1 dan 0 dan hanya menggeser mereka 325 00:14:46,057 --> 00:14:48,515 ke kanan sebanyak Anda itu bergeser ke kanan. 326 00:14:48,515 --> 00:14:50,452 >> AUDIENCE: [tidak terdengar]? 327 00:14:50,452 --> 00:14:53,160 Camille REKHSON: Nah, 100-- adalah Anda berbicara tentang 100 dalam biner, 328 00:14:53,160 --> 00:14:53,910 atau 100 dalam desimal? 329 00:14:53,910 --> 00:14:55,750 AUDIENCE: Maaf, 100 dalam biner. 330 00:14:55,750 --> 00:14:58,916 >> Camille REKHSON: 100 dalam biner, jika Anda menggeser ke right-- 331 00:14:58,916 --> 00:15:01,040 jika Anda menggeser ke kanan sekali, itu akan menjadi 10. 332 00:15:01,040 --> 00:15:04,430 Jika Anda bergeser ke kanan dua kali, itu akan menjadi 001. 333 00:15:04,430 --> 00:15:07,590 Dan kemudian jika Anda menggeser lagi, Anda jenis kehilangan bit. 334 00:15:07,590 --> 00:15:09,610 Ya, itu hanya 0. 335 00:15:09,610 --> 00:15:12,140 Pertanyaan lain tentang hal ini? 336 00:15:12,140 --> 00:15:12,835 Iya nih. 337 00:15:12,835 --> 00:15:14,695 >> AUDIENCE: Jadi maka menjadi 000. 338 00:15:14,695 --> 00:15:17,020 >> Camille REKHSON: Ya. 339 00:15:17,020 --> 00:15:22,150 OK, jadi mari kita pergi melalui sedikit matematika ASCII. 340 00:15:22,150 --> 00:15:25,120 Jadi karakter dasarnya dapat diperlakukan sebagai bilangan bulat 341 00:15:25,120 --> 00:15:28,290 berdasarkan nilai-nilai ASCII mereka. 342 00:15:28,290 --> 00:15:35,250 Jadi jika kita duduk int A sama dengan 65, int B sama dengan A plus 1, int arang C sama 343 00:15:35,250 --> 00:15:39,565 D minus 1, dan arang D sama 68, apa yang akan mencetak di bagian bawah? 344 00:15:39,565 --> 00:15:46,150 345 00:15:46,150 --> 00:15:49,720 >> Jadi, kita mencetak these-- memberkati you-- kami 346 00:15:49,720 --> 00:15:53,520 mencetak semua ini sebagai karakter didasarkan pada persen C. 347 00:15:53,520 --> 00:15:56,320 Jadi kita pada dasarnya mencetak nilai karakter keempat 348 00:15:56,320 --> 00:15:58,600 variabel-variabel ini. 349 00:15:58,600 --> 00:16:04,280 Sebagai petunjuk, 65 adalah nilai ASCII modal A. Mungkin itu membantu. 350 00:16:04,280 --> 00:16:04,780 Apa? 351 00:16:04,780 --> 00:16:05,530 >> AUDIENCE: ABCD. 352 00:16:05,530 --> 00:16:07,780 >> Camille REKHSON: Ya, jadi ini akan mencetak persis 353 00:16:07,780 --> 00:16:10,290 ABCD karena kita mengatur int A sama dengan nilai ASCII dari A. 354 00:16:10,290 --> 00:16:13,085 Jadi jika kita mencetak yang keluar sebagai karakter, kita hanya mendapatkan modal A, 355 00:16:13,085 --> 00:16:15,540 A plus 1 akan menjadi modal B di ASCII. 356 00:16:15,540 --> 00:16:19,260 D minus 1 akan menjadi modal C di ASCII. 357 00:16:19,260 --> 00:16:25,185 Dan 68 adalah nilai ASCII D. Pertanyaan di ASCII? 358 00:16:25,185 --> 00:16:25,685 Iya nih. 359 00:16:25,685 --> 00:16:31,370 >> AUDIENCE: Jadi, kutip menandai sekitar A, apakah itu perubahan A ke ASCII? 360 00:16:31,370 --> 00:16:34,456 >> Camille REKHSON: Ini uses-- itu count-- tanda kutip tunggal di sekitar A 361 00:16:34,456 --> 00:16:35,330 membuat karakter. 362 00:16:35,330 --> 00:16:37,600 Dan jika Anda sedang berhadapan dengan dalam jumlah form-- 363 00:16:37,600 --> 00:16:40,320 jadi ketika, seperti dalam kasus ini, itu sedang ditangani sebagai int-- 364 00:16:40,320 --> 00:16:44,664 maka akan berurusan dengan itu nilai ASCII. 365 00:16:44,664 --> 00:16:45,164 Iya nih. 366 00:16:45,164 --> 00:16:50,060 >> AUDIENCE: Apakah Anda menyarankan kita memiliki tabel referensi ASCII? 367 00:16:50,060 --> 00:16:51,900 >> Camille REKHSON: Saya tidak think-- 368 00:16:51,900 --> 00:16:54,720 >> AUDIENCE: Atau akan itu hanya berurusan dengan ini? 369 00:16:54,720 --> 00:16:56,210 >> Camille REKHSON: Saya pikir kita akan melakukannya dengan hal-hal yang mudah. 370 00:16:56,210 --> 00:16:58,168 Saya tidak berpikir itu akan sakit untuk menuliskan mungkin 371 00:16:58,168 --> 00:17:02,653 apa modal A dan huruf kecil A adalah, hanya apa rentang mereka mulai dengan. 372 00:17:02,653 --> 00:17:05,819 Tapi saya tidak berpikir Anda perlu mengambil semua ruang untuk menempatkan meja ASCII seluruh. 373 00:17:05,819 --> 00:17:06,803 Ya. 374 00:17:06,803 --> 00:17:09,755 >> AUDIENCE: Apa bedanya antara mengatakan int A dan C arang, 375 00:17:09,755 --> 00:17:12,720 seperti yang Anda lakukan di atas? 376 00:17:12,720 --> 00:17:17,380 >> Camille REKHSON: Jadi itu hanya bagaimana yang tersimpan dalam memori. 377 00:17:17,380 --> 00:17:20,010 Tapi Anda bisa mengobatinya dengan cara baik. 378 00:17:20,010 --> 00:17:23,274 Seperti yang kita lihat di sini, kita lakukan cetak keluar A sebagai karakter. 379 00:17:23,274 --> 00:17:24,690 AUDIENCE: Jadi itu sama dengan A? 380 00:17:24,690 --> 00:17:25,606 Camille REKHSON: Ya. 381 00:17:25,606 --> 00:17:28,030 382 00:17:28,030 --> 00:17:29,537 Ada pertanyaan lain? 383 00:17:29,537 --> 00:17:32,022 >> AUDIENCE: Jadi, persen C mengatakan mencetak char? 384 00:17:32,022 --> 00:17:33,016 >> Camille REKHSON: Ya. 385 00:17:33,016 --> 00:17:35,501 >> AUDIENCE: Jadi bahkan jika A hanya memiliki didefinisikan sebagai integer, 386 00:17:35,501 --> 00:17:37,569 jika kita mencoba untuk mencetak arang sebagai 65, itu would-- 387 00:17:37,569 --> 00:17:40,110 Camille REKHSON: Ini akan pergi ke pada dasarnya pergi ke grafik ASCII 388 00:17:40,110 --> 00:17:42,990 dan mendapat apa karakter dalam grafik ASCII untuk itu 65. 389 00:17:42,990 --> 00:17:43,840 >> AUDIENCE: Terima kasih. 390 00:17:43,840 --> 00:17:44,756 >> Camille REKHSON: Ya. 391 00:17:44,756 --> 00:17:45,445 Iya nih? 392 00:17:45,445 --> 00:17:50,620 >> AUDIENCE: Jadi jika Anda melakukannya% saya, saya%, Saya%,% aku, kan hanya print-- 393 00:17:50,620 --> 00:17:52,620 Camille REKHSON: Ya, jika Anda melakukan semua 4% saya, itu 394 00:17:52,620 --> 00:17:57,170 akan mencetak ASCII nilai-nilai keempat ini. 395 00:17:57,170 --> 00:17:59,483 Ada pertanyaan lain? 396 00:17:59,483 --> 00:18:06,310 OK, jadi ruang lingkup, pada dasarnya ini membantu kita menentukan mana 397 00:18:06,310 --> 00:18:08,450 variabel yang ada dalam program Anda. 398 00:18:08,450 --> 00:18:11,910 Jadi kita sudah bicara tentang dua yang berbeda jenis lingkup, global dan lokal. 399 00:18:11,910 --> 00:18:14,560 >> Jika sebuah variabel global scoped, itu berarti seluruh program Anda 400 00:18:14,560 --> 00:18:16,292 memiliki akses ke variabel tersebut. 401 00:18:16,292 --> 00:18:18,000 Dan jika Anda secara global lingkup variabel, Anda 402 00:18:18,000 --> 00:18:19,510 menyatakan sebelum fungsi utama Anda. 403 00:18:19,510 --> 00:18:20,830 Jadi hal itu dilakukan langsung dari kelelawar. 404 00:18:20,830 --> 00:18:22,950 Dan kemudian seluruh Anda Program dapat mengaksesnya. 405 00:18:22,950 --> 00:18:26,070 >> Jika itu hanya secara lokal scoped, yang variabel terbatas pada wilayah tertentu. 406 00:18:26,070 --> 00:18:29,705 Jadi jika Anda menyatakan dalam untuk loop, hanya itu untuk loop dapat mengaksesnya. 407 00:18:29,705 --> 00:18:31,580 Atau jika Anda menyatakan dalam fungsi tertentu, 408 00:18:31,580 --> 00:18:34,940 hanya fungsi yang dapat mengaksesnya. 409 00:18:34,940 --> 00:18:38,265 Pertanyaan pada lingkup. 410 00:18:38,265 --> 00:18:41,570 >> OK, jadi fungsi prototyping. 411 00:18:41,570 --> 00:18:45,360 Pada dasarnya karena C, ketika mengkompilasi, membaca top down. 412 00:18:45,360 --> 00:18:48,800 Jika Anda menyatakan fungsi di akhir kode Anda, 413 00:18:48,800 --> 00:18:51,670 compiler tidak tahu bahwa fungsi yang ada. 414 00:18:51,670 --> 00:18:55,690 Jadi apa yang kita gunakan adalah prototipe, yang pada dasarnya memberitahu compiler, 415 00:18:55,690 --> 00:18:58,710 fungsi ini ada, pergi mencari untuk itu kemudian dalam kode. 416 00:18:58,710 --> 00:19:00,900 Jadi cara yang Anda lakukan prototipe fungsi 417 00:19:00,900 --> 00:19:03,020 adalah persis bagaimana Anda memulai off menulis fungsi. 418 00:19:03,020 --> 00:19:05,310 Anda memberikan jenis kembali, nama fungsi, 419 00:19:05,310 --> 00:19:08,930 dan kemudian argumen bahwa fungsi yang mengambil. 420 00:19:08,930 --> 00:19:13,970 >> Jadi, untuk melihat contoh cepat, dalam hal ini huruf fungsi kita bahwa kita gunakan di sini 421 00:19:13,970 --> 00:19:15,340 pada dasarnya adalah fungsi kubus. 422 00:19:15,340 --> 00:19:19,170 Jadi mengambil dalam integer dan mengembalikan kubus integer yang. 423 00:19:19,170 --> 00:19:23,190 Jadi karena kita telah menulis bahwa Fungsi bawah fungsi utama, 424 00:19:23,190 --> 00:19:26,300 dan kami ingin menggunakan output itu-- atau kita 425 00:19:26,300 --> 00:19:28,630 ingin fungsi yang fungsi utama kami, 426 00:19:28,630 --> 00:19:31,980 kita menempatkan cara prototipe di bagian atas program kami. 427 00:19:31,980 --> 00:19:34,460 Dan kemudian ketika kita sebut dalam fungsi utama kami, 428 00:19:34,460 --> 00:19:38,800 compiler tahu bahwa fungsi yang ditulis kemudian, dan akan pergi mencarinya, 429 00:19:38,800 --> 00:19:40,910 dan akan menggunakannya dengan benar. 430 00:19:40,910 --> 00:19:45,190 Pertanyaan tentang prototyping? 431 00:19:45,190 --> 00:19:45,690 Iya nih. 432 00:19:45,690 --> 00:19:46,940 >> AUDIENCE: Jadi apa gunanya? 433 00:19:46,940 --> 00:19:49,374 434 00:19:49,374 --> 00:19:50,915 Saya tidak mendapatkan titik prototyping. 435 00:19:50,915 --> 00:19:52,820 Mengapa tidak hanya memiliki itu di sana? 436 00:19:52,820 --> 00:19:54,903 >> Camille REKHSON: Nah jika itu di sini, maka ketika 437 00:19:54,903 --> 00:19:57,020 Anda bisa melapisi kubus x fungsi utama Anda, 438 00:19:57,020 --> 00:19:59,495 compiler akan tidak tahu bahwa fungsi kubus benar-benar ada. 439 00:19:59,495 --> 00:20:01,310 >> AUDIENCE: tidak Bisa Anda hanya menaruhnya di depan? 440 00:20:01,310 --> 00:20:02,350 >> Camille REKHSON: Ini praktek coding yang lebih baik 441 00:20:02,350 --> 00:20:04,150 untuk meletakkannya di bawah fungsi utama Anda. 442 00:20:04,150 --> 00:20:06,350 Jadi itu sebabnya kami akan melakukan prototyping tersebut. 443 00:20:06,350 --> 00:20:07,680 Hanya karena, jika Anda memiliki banyak fungsi, 444 00:20:07,680 --> 00:20:10,180 itu akan benar-benar berantakan untuk membaca semua fungsi yang 445 00:20:10,180 --> 00:20:12,030 sebelum Anda sampai ke daging dari program Anda. 446 00:20:12,030 --> 00:20:13,888 Ya, dan Anda harus q-- sebuah 447 00:20:13,888 --> 00:20:16,796 >> AUDIENCE: Jadi, yang menyatakan variabel Anda di atas 448 00:20:16,796 --> 00:20:18,795 sehingga Anda dapat mengaksesnya, membuat variabel global? 449 00:20:18,795 --> 00:20:21,119 Apakah yang seperti ini mana itu menyatakan itu 450 00:20:21,119 --> 00:20:23,660 di sana, sehingga tahu bahwa itu akan mengaksesnya nanti 451 00:20:23,660 --> 00:20:24,762 dan Anda dapat menggunakannya? 452 00:20:24,762 --> 00:20:26,146 >> Camille REKHSON: Ya. 453 00:20:26,146 --> 00:20:26,646 Iya nih. 454 00:20:26,646 --> 00:20:30,414 >> AUDIENCE: Haruskah the-- setiap tambahan fungsi Anda membuat kunci luar 455 00:20:30,414 --> 00:20:31,840 hal ini, or-- 456 00:20:31,840 --> 00:20:33,760 >> Camille REKHSON: Ya, jika Anda menciptakan utama functions-- lainnya 457 00:20:33,760 --> 00:20:36,385 sendiri adalah function-- jadi jika Anda sedang menciptakan fungsi lainnya, 458 00:20:36,385 --> 00:20:37,555 mereka harus berada di luar. 459 00:20:37,555 --> 00:20:38,055 Iya nih? 460 00:20:38,055 --> 00:20:39,734 >> AUDIENCE: Apa persen D? 461 00:20:39,734 --> 00:20:42,150 Camille REKHSON: Persen D adalah hal yang sama seperti persen I. 462 00:20:42,150 --> 00:20:45,915 Hal ini mengacu pada bilangan bulat. 463 00:20:45,915 --> 00:20:47,895 Iya nih. 464 00:20:47,895 --> 00:20:50,370 >> AUDIENCE: Jadi apa perbuatan utama int? 465 00:20:50,370 --> 00:20:51,724 Apa kekosongan itu? 466 00:20:51,724 --> 00:20:53,890 Camille REKHSON: Void mengatakan dibutuhkan tidak argumen. 467 00:20:53,890 --> 00:20:55,320 AUDIENCE: [tidak terdengar]. 468 00:20:55,320 --> 00:20:57,570 Camille REKHSON: Dapatkah Anda berbicara sedikit lebih keras, maaf? 469 00:20:57,570 --> 00:21:00,153 AUDIENCE: Ya, maaf, mengapa Anda menempatkan membatalkan untuk yang pertama, 470 00:21:00,153 --> 00:21:02,297 dan kemudian int masukan untuk yang kedua? 471 00:21:02,297 --> 00:21:04,720 472 00:21:04,720 --> 00:21:07,470 Camille REKHSON: Oh, untuk dua different-- untuk fungsi utama 473 00:21:07,470 --> 00:21:09,290 versus fungsi kubus? 474 00:21:09,290 --> 00:21:13,360 Jadi dalam fungsi utama, kita menggunakan void karena ada 475 00:21:13,360 --> 00:21:16,870 ada parameter yang diambil di. 476 00:21:16,870 --> 00:21:19,425 Sedangkan dalam kubus fungsi, kita memiliki sebuah input. 477 00:21:19,425 --> 00:21:22,300 Itulah mengapa dikatakan int, masukan, karena ada argumen bahwa kita 478 00:21:22,300 --> 00:21:24,571 mengambil dalam menjalankan fungsi kita. 479 00:21:24,571 --> 00:21:25,070 Ya. 480 00:21:25,070 --> 00:21:27,770 481 00:21:27,770 --> 00:21:30,464 Apakah ada pertanyaan? 482 00:21:30,464 --> 00:21:34,520 >> OK, dan kemudian dengan cepat floating-point ketidaktepatan. 483 00:21:34,520 --> 00:21:37,200 Jadi kita memiliki tak terhingga banyaknya bilangan real. 484 00:21:37,200 --> 00:21:38,950 Tapi hanya ada jumlah terbatas bit 485 00:21:38,950 --> 00:21:42,880 yang bisa kita gunakan untuk menampilkan mereka angka, dan mewakili mereka. 486 00:21:42,880 --> 00:21:45,020 Jadi kita berakhir dengan beberapa ketidaktepatan. 487 00:21:45,020 --> 00:21:49,190 Dan nomor Anda tidak akan selalu cukup apa 488 00:21:49,190 --> 00:21:51,810 Anda pikir mereka ketika Anda berurusan dengan floating-point. 489 00:21:51,810 --> 00:21:53,650 Ini hanya sesuatu yang baik untuk tahu. 490 00:21:53,650 --> 00:21:56,628 Pertanyaan tentang ini? 491 00:21:56,628 --> 00:21:59,610 Iya nih. 492 00:21:59,610 --> 00:22:02,090 >> AUDIENCE: Apakah mengacu ini dengan ide bit meluap 493 00:22:02,090 --> 00:22:03,089 yang berada di kuliah? 494 00:22:03,089 --> 00:22:06,080 Apakah itu sesuatu yang terpisah? 495 00:22:06,080 --> 00:22:09,650 >> Camille REKHSON: Mereka benar-benar terpisah, yeah. 496 00:22:09,650 --> 00:22:11,160 OK bagus. 497 00:22:11,160 --> 00:22:16,369 498 00:22:16,369 --> 00:22:17,452 PULAK GOYAL: Hi, semua orang. 499 00:22:17,452 --> 00:22:19,872 Nama saya pulak, dan aku akan menjadi akan lebih pointer. 500 00:22:19,872 --> 00:22:23,260 501 00:22:23,260 --> 00:22:25,720 OK, jadi mari kita berpikir pertama tentang apa yang tampak seperti memori. 502 00:22:25,720 --> 00:22:28,610 Jadi seperti yang Anda lihat di sini, kami mengambil memori dan kami membaginya 503 00:22:28,610 --> 00:22:30,090 ke sekelompok blok. 504 00:22:30,090 --> 00:22:33,150 Dan kami referensi masing-masing memblokir oleh alamat, kan? 505 00:22:33,150 --> 00:22:37,196 Dan tidak ada yang ingat apa jenis notasi yang kita gunakan untuk menunjukkan alamat? 506 00:22:37,196 --> 00:22:38,510 >> AUDIENCE: Heksadesimal, 0x. 507 00:22:38,510 --> 00:22:39,510 >> PULAK GOYAL: Heksadesimal, kan? 508 00:22:39,510 --> 00:22:41,509 Jadi 0x berarti kami berbicara tentang heksadesimal. 509 00:22:41,509 --> 00:22:45,740 510 00:22:45,740 --> 00:22:48,360 OK, jadi bagaimana kita menciptakan pointer? 511 00:22:48,360 --> 00:22:51,960 Jadi kami mengambil jenis, kita menempatkan itu-- menambahkan bintang untuk itu, 512 00:22:51,960 --> 00:22:53,760 dan kemudian kita menambahkan nama variabel. 513 00:22:53,760 --> 00:22:59,280 Jadi contoh kita lihat adalah int star x, y bintang arang, dan mengapung mulai z. 514 00:22:59,280 --> 00:23:01,380 Jadi ketika saya mengatakan int bintang x, bisa seseorang mengatakan padaku 515 00:23:01,380 --> 00:23:03,965 apa yang saya jenis bicarakan di sana? 516 00:23:03,965 --> 00:23:05,710 >> AUDIENCE: Lokasi disk. 517 00:23:05,710 --> 00:23:06,890 >> PULAK GOYAL: Maaf, apa? 518 00:23:06,890 --> 00:23:07,723 Bisa diulang? 519 00:23:07,723 --> 00:23:09,250 AUDIENCE: Lokasi disk. 520 00:23:09,250 --> 00:23:12,390 >> PULAK GOYAL: Jadi actually-- jadi apa Aku berarti, adalah ketika kita memiliki int bintang x, 521 00:23:12,390 --> 00:23:14,400 kita katakan adalah menciptakan pointer, dan itu 522 00:23:14,400 --> 00:23:17,130 dapat menyimpan alamat dari variabel itu int, kan? 523 00:23:17,130 --> 00:23:21,810 Jadi dengan bintang arang y, kita menciptakan pointer 524 00:23:21,810 --> 00:23:24,220 yang dapat menyimpan alamat dari variabel yang char. 525 00:23:24,220 --> 00:23:26,270 Sehingga masuk akal untuk semua orang? 526 00:23:26,270 --> 00:23:29,600 OK keren 527 00:23:29,600 --> 00:23:33,450 >> OK, jadi dengan pointer, ada dua operasi penting yang dapat kita lakukan. 528 00:23:33,450 --> 00:23:36,630 Ada referensi, dan ada yang dereferencing. 529 00:23:36,630 --> 00:23:37,130 Ya? 530 00:23:37,130 --> 00:23:38,760 >> AUDIENCE: Bisakah Anda pergi sedikit lebih lambat? 531 00:23:38,760 --> 00:23:39,510 >> PULAK GOYAL: Tentu. 532 00:23:39,510 --> 00:23:45,350 Ya, so-- ya, mengajukan pertanyaan saat aku pergi bersama jika you-- jika sesuatu yang tidak jelas. 533 00:23:45,350 --> 00:23:47,240 Jadi kita telah referensi dan dereferencing. 534 00:23:47,240 --> 00:23:51,680 Jadi, ketika Anda ingin mendapatkan alamat variabel, kemudian gunakan ampersand. 535 00:23:51,680 --> 00:23:53,620 Jadi katakanlah saya menyatakan int x di suatu tempat. 536 00:23:53,620 --> 00:23:57,450 Dan saya ingin mendapatkan alamat yang dan lulus dalam, saya akan melakukan ampersand x. 537 00:23:57,450 --> 00:24:01,260 Dan ketika Anda ingin mendapatkan nilai yang terkait dengan pointer, 538 00:24:01,260 --> 00:24:04,670 Anda menggunakan dereference operator, yang merupakan bintang. 539 00:24:04,670 --> 00:24:08,570 >> Jadi katakanlah saya memiliki int bintang x, dan Aku sudah menunjuk ke sesuatu. 540 00:24:08,570 --> 00:24:13,510 Jika saya ingin mendapatkan nilai apa itu menunjuk ke, saya hanya akan melakukan star x. 541 00:24:13,510 --> 00:24:14,960 Apakah itu jelas? 542 00:24:14,960 --> 00:24:16,390 Pertanyaan tentang itu? 543 00:24:16,390 --> 00:24:18,129 Ya. 544 00:24:18,129 --> 00:24:25,275 >> AUDIENCE: Jadi umumnya, Anda tidak akan dapat melakukan pada x dan bintang 545 00:24:25,275 --> 00:24:27,135 x dengan x sama. 546 00:24:27,135 --> 00:24:28,740 Apakah itu benar? 547 00:24:28,740 --> 00:24:31,800 Karena jika x adalah variabel, maka Anda memiliki 548 00:24:31,800 --> 00:24:35,980 yang harus dilakukan pada x untuk mendapatkan bahwa itu pointer. 549 00:24:35,980 --> 00:24:40,810 Tetapi jika x adalah pointer, maka Anda perlu untuk melakukan star x untuk mendapatkan variabel. 550 00:24:40,810 --> 00:24:43,240 >> PULAK GOYAL: Ya, jadi pertanyaan adalah tentang kapan 551 00:24:43,240 --> 00:24:45,750 kita menggunakan star-- saat Anda akan menggunakan bintang, 552 00:24:45,750 --> 00:24:47,470 dan ketika kita menggunakan ampersand, dan bisa kita 553 00:24:47,470 --> 00:24:49,160 menggunakannya dengan jenis yang sama variabel? 554 00:24:49,160 --> 00:24:51,810 Jadi biasanya jika Anda memiliki, misalnya, int x, 555 00:24:51,810 --> 00:24:55,170 Anda akan sebagian besar akan menggunakan ampersand untuk mendapatkan alamat itu. 556 00:24:55,170 --> 00:24:58,220 Karena itu tidak membuat akal untuk rasa hormat ke x. 557 00:24:58,220 --> 00:25:04,220 Padahal, jika kita memiliki int bintang x, Anda akan menggunakan operasi dereference 558 00:25:04,220 --> 00:25:07,910 karena akan tidak masuk akal untuk menggunakan x dalam kasus itu. 559 00:25:07,910 --> 00:25:09,582 Apakah itu masuk akal? 560 00:25:09,582 --> 00:25:13,192 >> AUDIENCE: Jadi Anda tidak bisa dan, dan kemudian pointer? 561 00:25:13,192 --> 00:25:14,900 PULAK GOYAL: Jadi Anda teknis, sebenarnya 562 00:25:14,900 --> 00:25:16,870 dapat melakukan ampersand dari pointer. 563 00:25:16,870 --> 00:25:18,984 Tapi itu keluar dari lingkup kelas ini. 564 00:25:18,984 --> 00:25:21,900 Untuk purpose-- untuk orang-orang Anda ' tujuan, setiap kali Anda memiliki pointer, 565 00:25:21,900 --> 00:25:25,191 Anda ingin menggunakan operator dereference untuk mendapatkan nilai yang terkait dengan itu. 566 00:25:25,191 --> 00:25:27,380 Dan ketika Anda memiliki biasa variabel, seperti int x, 567 00:25:27,380 --> 00:25:31,410 Anda ingin menggunakan ampersand operator untuk mendapatkan alamat itu. 568 00:25:31,410 --> 00:25:31,910 OKE? 569 00:25:31,910 --> 00:25:35,670 570 00:25:35,670 --> 00:25:38,850 >> OK, jadi mari kita lihat pointer dan apa yang terjadi di bawah tenda. 571 00:25:38,850 --> 00:25:42,640 Jadi hal pertama yang saya lakukan di sini adalah menyatakan int x sama dengan 5. 572 00:25:42,640 --> 00:25:48,460 Alamat variabel ini adalah 0x04, dan nilai 5. 573 00:25:48,460 --> 00:25:52,940 Jadi mari kita lihat apa yang terjadi dengan baris berikutnya. 574 00:25:52,940 --> 00:25:55,130 Jadi sekarang kita mendeklarasikan pointer. 575 00:25:55,130 --> 00:26:01,450 Alamatnya adalah 0x08, dan yang Nilai adalah alamat x. 576 00:26:01,450 --> 00:26:05,220 Apakah itu masuk akal untuk semua orang? 577 00:26:05,220 --> 00:26:06,507 Pertanyaan tentang itu? 578 00:26:06,507 --> 00:26:09,130 579 00:26:09,130 --> 00:26:13,080 >> OK, dan sekarang mari kita lihat apa terjadi dengan baris berikutnya. 580 00:26:13,080 --> 00:26:18,140 Jadi dengan baris berikutnya ini, kita memiliki alamat copy menjadi 0x10, 581 00:26:18,140 --> 00:26:20,780 dan nilainya adalah 5. 582 00:26:20,780 --> 00:26:23,570 Jadi alasan kita punya lima adalah kita berkata, kita dereference 583 00:26:23,570 --> 00:26:26,740 pointer, yang kita menyatakan sebuah bintang int. 584 00:26:26,740 --> 00:26:35,797 Dan sehingga went-- ketika kita dereference itu, katanya, OK, apa yang ada dalam 0x04 Slot. 585 00:26:35,797 --> 00:26:36,630 Dan pergi ke itu. 586 00:26:36,630 --> 00:26:40,785 Dan apa x adalah x0-- 0x04, dan nilai 5. 587 00:26:40,785 --> 00:26:41,660 Apakah itu masuk akal? 588 00:26:41,660 --> 00:26:42,334 Ya? 589 00:26:42,334 --> 00:26:50,090 >> AUDIENCE: Mengapa alamat salinan ini hanya 4 byte di atas x pointer? 590 00:26:50,090 --> 00:26:52,318 >> PULAK GOYAL: Ya, ini adalah kesalahan on-- 591 00:26:52,318 --> 00:26:55,304 >> Camille REKHSON: Jadi, ya, ingat ini ditulis dalam heksadesimal. 592 00:26:55,304 --> 00:26:56,220 PULAK GOYAL: Oh, ya. 593 00:26:56,220 --> 00:26:58,615 Camille REKHSON: Jadi ini sebenarnya 8 dan kemudian 16 594 00:26:58,615 --> 00:27:00,960 karena kita mengatakan bahwa, pointer, ingat, 595 00:27:00,960 --> 00:27:05,330 di IDE kami akan menjadi 8 byte panjang. 596 00:27:05,330 --> 00:27:06,080 PULAK GOYAL: Ya. 597 00:27:06,080 --> 00:27:09,160 598 00:27:09,160 --> 00:27:12,540 Jadi hanya harus jelas, pointer 8 byte panjang. 599 00:27:12,540 --> 00:27:14,160 Int adalah 4 byte. 600 00:27:14,160 --> 00:27:18,380 Jadi alasan mengapa apa melompat dari 0x04 ke 0x08 601 00:27:18,380 --> 00:27:20,980 karena kita harus melakukan lompatan dari 8 byte. 602 00:27:20,980 --> 00:27:24,396 Dan kemudian for-- sejak copy hanya sebuah int, 603 00:27:24,396 --> 00:27:26,020 itu 4 byte, yang merupakan setengah dari 8 byte. 604 00:27:26,020 --> 00:27:29,970 Jadi kami hanya melompat ke 0x10, yang dua dari 0x08. 605 00:27:29,970 --> 00:27:33,100 606 00:27:33,100 --> 00:27:34,570 Ada pertanyaan lain? 607 00:27:34,570 --> 00:27:36,850 OK, let's-- ya? 608 00:27:36,850 --> 00:27:39,245 >> AUDIENCE: Mengapa tidak nilai int copy 609 00:27:39,245 --> 00:27:45,000 hanya the-- mengapa 5 bukannya 0x04? 610 00:27:45,000 --> 00:27:46,270 >> PULAK GOYAL: OK, mengapa 5? 611 00:27:46,270 --> 00:27:51,600 OK, jadi ketika the-- jadi mari kita pertama berpikir tentang hal ini dalam hal jenis. 612 00:27:51,600 --> 00:27:55,600 Jadi saya katakan int copy adalah sama dengan bintang pointer. 613 00:27:55,600 --> 00:27:57,490 Jadi apa adalah jenis pointer? 614 00:27:57,490 --> 00:27:59,310 Ini adalah bintang int. 615 00:27:59,310 --> 00:28:03,850 Dan ketika saya dereference itu, Jenis menjadi int. 616 00:28:03,850 --> 00:28:06,570 Jadi apa yang kita harapkan untuk menyimpan di sini sebenarnya merupakan int. 617 00:28:06,570 --> 00:28:07,965 Apakah itu masuk akal? 618 00:28:07,965 --> 00:28:09,090 AUDIENCE: Tentu, sedikit. 619 00:28:09,090 --> 00:28:11,465 PULAK GOYAL: Jadi biasanya ketika Anda berpikir dalam hal jenis, 620 00:28:11,465 --> 00:28:15,607 membantu Anda memahami apa yang jenis nilai yang harus pergi ke sana. 621 00:28:15,607 --> 00:28:17,940 Sehingga Anda biasanya dapat menyingkirkan banyak kesalahan ini umum 622 00:28:17,940 --> 00:28:21,790 dengan berpikir dalam hal jenis. 623 00:28:21,790 --> 00:28:23,612 Biarkan aku pergi melalui slide sedikit lebih. 624 00:28:23,612 --> 00:28:26,070 Dan kita bisa mendapatkan pertanyaan di akhir bagian pointer. 625 00:28:26,070 --> 00:28:28,910 626 00:28:28,910 --> 00:28:32,290 OK, jadi kami memiliki program kereta di sini. 627 00:28:32,290 --> 00:28:35,460 Dan begitu juga anyone-- bisa seseorang mengatakan apa yang salah dengan program ini? 628 00:28:35,460 --> 00:28:39,000 629 00:28:39,000 --> 00:28:40,820 Tepat, sehingga apa yang kita mengharapkan untuk lakukan di sini 630 00:28:40,820 --> 00:28:44,520 is-- apa yang ingin kita lakukan adalah mengambil variabel int x 631 00:28:44,520 --> 00:28:48,350 dan mengubahnya itu-- membuatnya sama 5 bukan 3 dan kemudian mencetak itu. 632 00:28:48,350 --> 00:28:49,640 Tapi itu tidak terjadi. 633 00:28:49,640 --> 00:28:50,950 Dapatkah seseorang mengatakan padaku mengapa? 634 00:28:50,950 --> 00:28:51,934 Iya nih? 635 00:28:51,934 --> 00:28:54,840 >> AUDIENCE: Bila fungsi to_five mengambil x seperti itu argumen, 636 00:28:54,840 --> 00:28:58,130 tidak mengambil x itu sendiri, tetapi bukannya menciptakan salinan, sebuah, itu. 637 00:28:58,130 --> 00:29:00,115 Dan membentuk operasi itu. 638 00:29:00,115 --> 00:29:02,614 Tapi karena itu, Anda tidak mengubah nilai sebenarnya dari x. 639 00:29:02,614 --> 00:29:03,970 Karena Anda [tidak terdengar]. 640 00:29:03,970 --> 00:29:07,950 >> PULAK GOYAL: Benar, tepat, jadi ketika kita sebut 641 00:29:07,950 --> 00:29:10,100 fungsi to_five, apa kita lakukan adalah berpikir, 642 00:29:10,100 --> 00:29:12,550 memberi saya salinan nilai fungsi tersebut. 643 00:29:12,550 --> 00:29:16,010 Fungsi itu, maka, akan dan melakukan beberapa manipulasi. 644 00:29:16,010 --> 00:29:21,260 Tapi setelah itu kembali, sekarang keluar dari lingkup fungsi utama di sini. 645 00:29:21,260 --> 00:29:24,750 Dan x masih, pada kenyataannya, sama dengan 3, dan kami mencetak 3. 646 00:29:24,750 --> 00:29:26,445 OK, jadi mari kita lihat bagaimana hal ini terjadi. 647 00:29:26,445 --> 00:29:29,430 648 00:29:29,430 --> 00:29:31,180 >> OK, jadi tidak ada yang menyatakan. 649 00:29:31,180 --> 00:29:34,490 Kemudian, di sini, x sama dengan 3. 650 00:29:34,490 --> 00:29:40,820 Dan sekarang is-- pada posisi dua, satu masih belum di lingkup. 651 00:29:40,820 --> 00:29:46,790 Dan sekarang kita pergi ke posisi tiga, di mana sekarang mengasumsikan nilai 3. 652 00:29:46,790 --> 00:29:49,380 Pada empat, kita sekarang mengubah ke 5. 653 00:29:49,380 --> 00:29:53,290 Tapi sekarang, ketika kita melompat kembali ke lima, yang merupakan pernyataan cetak, 654 00:29:53,290 --> 00:29:55,380 adalah sekarang keluar dari ruang lingkup. 655 00:29:55,380 --> 00:29:57,450 Dan x masih sama dengan 3. 656 00:29:57,450 --> 00:29:59,700 Apakah ini masuk akal untuk semua orang? 657 00:29:59,700 --> 00:30:03,010 OK, jadi sekarang mari kita bicara tentang bagaimana kita dapat menggunakan pointer untuk memperbaiki ini. 658 00:30:03,010 --> 00:30:06,140 Apakah ada yang punya ide bagaimana kita bisa memperbaiki ini dengan menggunakan pointer? 659 00:30:06,140 --> 00:30:08,710 660 00:30:08,710 --> 00:30:11,490 >> AUDIENCE: Anda mengambil sebuah bintang int bukan sebuah int untuk to_five. 661 00:30:11,490 --> 00:30:12,530 >> PULAK GOYAL: Maaf, bisa Anda berbicara? 662 00:30:12,530 --> 00:30:15,266 >> AUDIENCE: Anda mengambil sebuah bintang int bukan sebuah int untuk to_five. 663 00:30:15,266 --> 00:30:16,140 PULAK GOYAL: OK, ya. 664 00:30:16,140 --> 00:30:20,250 Jadi mari kita pass-- bukan hanya lewat nilai, mari kita lulus dengan referensi. 665 00:30:20,250 --> 00:30:21,690 Fungsi baru, kan? 666 00:30:21,690 --> 00:30:25,210 Dan dengan melewati alamat, kami dapat melakukan manipulasi pada alamat. 667 00:30:25,210 --> 00:30:27,400 Dan jadi kita benar-benar, pada kenyataannya, mengubah x. 668 00:30:27,400 --> 00:30:30,570 Jadi mari kita lihat bagaimana yang bekerja. 669 00:30:30,570 --> 00:30:32,950 >> OK, jadi dalam contoh ini kita tetap itu. 670 00:30:32,950 --> 00:30:38,000 Kami telah mengubah tanda tangan kami dari to_five untuk mengambil di int 671 00:30:38,000 --> 00:30:40,540 membintangi bukan hanya sebuah int sini. 672 00:30:40,540 --> 00:30:45,470 Kemudian kita dereference ini dan menetapkan 5 untuk itu. 673 00:30:45,470 --> 00:30:48,090 Dan sekarang akan ini, pada kenyataannya, mencetak 5. 674 00:30:48,090 --> 00:30:51,960 Jadi mari kita lihat bagaimana langkah-langkah bekerja di sini. 675 00:30:51,960 --> 00:30:55,200 >> Jadi dengan langkah pertama, tidak ada yang menyatakan belum. 676 00:30:55,200 --> 00:31:00,140 Jadi di sini, dengan langkah kedua, kami telah mengatakan x sama dengan 3, 677 00:31:00,140 --> 00:31:03,970 tapi masih keluar dari ruang lingkup. 678 00:31:03,970 --> 00:31:08,100 Sekarang dengan baris ketiga, kita memiliki x masih sama dengan tiga. 679 00:31:08,100 --> 00:31:14,150 Dan sekarang, kami telah melewati in-- apa disimpan dalam sekarang alamat x. 680 00:31:14,150 --> 00:31:16,760 Apakah itu masuk akal untuk semua orang, bagaimana kita punya itu? 681 00:31:16,760 --> 00:31:21,470 Benar, kita memiliki amper-- itu bagaimana kami melewati ampersand x ke fungsi 682 00:31:21,470 --> 00:31:23,040 to_five. 683 00:31:23,040 --> 00:31:30,330 Dan kemudian ke baris berikutnya, apa kita lakukan, adalah kita dereference. 684 00:31:30,330 --> 00:31:36,120 >> Dan oleh dereferencing, kita dapat untuk mengubah nilai x 3-5. 685 00:31:36,120 --> 00:31:38,560 Karena x tinggal di alamat 0x12. 686 00:31:38,560 --> 00:31:42,440 687 00:31:42,440 --> 00:31:45,810 Dan kemudian, akhirnya, ketika kita kembali kembali ke utama, 688 00:31:45,810 --> 00:31:50,570 meskipun ini sekarang keluar dari lingkup, kami telah, pada kenyataannya, berubah x. 689 00:31:50,570 --> 00:31:51,570 Dan itu adalah 5. 690 00:31:51,570 --> 00:31:55,160 Pertanyaan tentang hal ini? 691 00:31:55,160 --> 00:31:56,036 Ya? 692 00:31:56,036 --> 00:31:58,185 >> AUDIENCE: Bisakah Anda ceritakan apa ampersand x adalah? 693 00:31:58,185 --> 00:32:00,004 Saya pikir ampersand seperti DAN. 694 00:32:00,004 --> 00:32:03,480 695 00:32:03,480 --> 00:32:07,210 >> PULAK GOYAL: Ya, jadi kami menggunakan yang sama Simbol untuk banyak hal yang berbeda. 696 00:32:07,210 --> 00:32:11,470 Jadi di sini, ketika Anda have-- di hal ini, ketika Anda memiliki, 697 00:32:11,470 --> 00:32:19,380 Saya guess-- sehingga dalam kasus ini, ketika Anda sedang berhadapan dengan pointer, 698 00:32:19,380 --> 00:32:23,640 ketika Anda menaruh ampersand di depan dari sebuah int, int variabel, atau char, 699 00:32:23,640 --> 00:32:28,609 atau aliran, apa yang Anda katakan adalah, memberi saya alamat ini. 700 00:32:28,609 --> 00:32:31,900 Tapi apa yang Anda pikirkan, kapan lagi Anda akan menggunakan ampersand adalah, katakanlah, 701 00:32:31,900 --> 00:32:33,180 dalam sebuah pernyataan jika. 702 00:32:33,180 --> 00:32:39,256 Anda memiliki yang benar, dan beberapa variabel yang mengevaluasi beberapa Boolean, 703 00:32:39,256 --> 00:32:41,380 dan beberapa variabel lain yang memvalidasi beberapa Boolean 704 00:32:41,380 --> 00:32:42,880 dan Anda ingin mendapatkan dan itu. 705 00:32:42,880 --> 00:32:44,552 Maka Anda akan menggunakan ampersand. 706 00:32:44,552 --> 00:32:47,510 SPEAKER 1: Ya, jadi hanya hari ini, kami telah berbicara tentang tiga penggunaan yang berbeda 707 00:32:47,510 --> 00:32:48,250 dari ampersand. 708 00:32:48,250 --> 00:32:51,040 Kami memiliki dua ampersands, yang apa pulak baru saja dijelaskan. 709 00:32:51,040 --> 00:32:53,420 Kami memiliki satu ampersand, yang adalah apa yang dijelaskan Camille 710 00:32:53,420 --> 00:32:54,897 sebelumnya, yang merupakan salah satu ampersand. 711 00:32:54,897 --> 00:32:56,685 Dan itu sudah bitwise DAN. 712 00:32:56,685 --> 00:32:59,640 Dan perhatikan bahwa kedua dan- bersyarat atau, maaf, 713 00:32:59,640 --> 00:33:04,180 logika AND dan bitwise DAN, mereka memiliki dua nomor, kan? 714 00:33:04,180 --> 00:33:07,354 Itu sesuatu yang Ampersand sesuatu ampersand, 715 00:33:07,354 --> 00:33:09,350 sesuatu sesuatu ampersand. 716 00:33:09,350 --> 00:33:13,862 Di sini, ketika kita hanya memiliki ampersand sesuatu, yang dereferencing. 717 00:33:13,862 --> 00:33:15,830 >> PULAK GOYAL: Ya, pertanyaan besar. 718 00:33:15,830 --> 00:33:16,677 Ya. 719 00:33:16,677 --> 00:33:21,150 >> AUDIENCE: Mengapa sejalan 5a dan bintang yang menjadi N / A? 720 00:33:21,150 --> 00:33:25,520 Mengapa mereka tidak hanya jenis mempertahankan nilai yang sama dari baris sebelumnya? 721 00:33:25,520 --> 00:33:28,000 >> PULAK GOYAL: Karena kita sudah keluar fungsi. 722 00:33:28,000 --> 00:33:30,894 Dan jadi apa happens-- jadi-UMPC sekarang kita 723 00:33:30,894 --> 00:33:33,060 keluar dari ruang lingkup fungsi itu, apa yang terjadi sebenarnya 724 00:33:33,060 --> 00:33:37,770 adalah mereka akan dihapus dari memori. 725 00:33:37,770 --> 00:33:38,808 Ya. 726 00:33:38,808 --> 00:33:42,982 >> AUDIENCE: Antara 3 atau 4 bintang sama dengan 5. 727 00:33:42,982 --> 00:33:43,690 PULAK GOYAL: Ya. 728 00:33:43,690 --> 00:33:45,575 AUDIENCE: Apa yang sebenarnya menunjukkan? 729 00:33:45,575 --> 00:33:46,950 PULAK GOYAL: Apa artinya? 730 00:33:46,950 --> 00:33:47,380 AUDIENCE: Ya. 731 00:33:47,380 --> 00:33:49,088 PULAK GOYAL: Jadi pertanyaan adalah, apa yang 732 00:33:49,088 --> 00:33:52,300 itu-- apa yang Anda lakukan secara online ketika kita mengatakan, bintang adalah sama dengan 5? 733 00:33:52,300 --> 00:33:55,210 Jadi ingat bintang yang dereference operator. 734 00:33:55,210 --> 00:33:58,640 Jadi ketika, dalam hal ini, adalah pointer. 735 00:33:58,640 --> 00:34:00,030 Ini adalah bintang int. 736 00:34:00,030 --> 00:34:03,710 Jadi ketika kita dereference oleh menggunakan bintang, apa yang kita katakan 737 00:34:03,710 --> 00:34:11,250 adalah, pergi ke apa pun yang disimpan di alamat, disimpan dalam a-- sehingga take-- jadi, 738 00:34:11,250 --> 00:34:13,280 sekarang, memiliki beberapa alamat yang tersimpan di dalamnya. 739 00:34:13,280 --> 00:34:19,920 Pergi ke mana alamat poin ke, dan sekarang mengubah apa pun itu untuk lima. 740 00:34:19,920 --> 00:34:20,420 Ya. 741 00:34:20,420 --> 00:34:23,390 >> AUDIENCE: Dapatkah Anda mengatakan dalam istilah sederhana? 742 00:34:23,390 --> 00:34:27,360 Mengubah alamat untuk 5. 743 00:34:27,360 --> 00:34:31,070 >> PULAK GOYAL: Kami tidak mengubah alamat untuk 5. 744 00:34:31,070 --> 00:34:36,340 A memiliki beberapa alamat di dalamnya, yang merupakan alamat dari variabel yang menarik. 745 00:34:36,340 --> 00:34:39,570 Dan apa yang kita katakan ketika kita dereference adalah, 746 00:34:39,570 --> 00:34:42,630 sekarang kami ingin change-- kita sekarang referensi 747 00:34:42,630 --> 00:34:45,135 bunga variabel langsung. 748 00:34:45,135 --> 00:34:48,499 Apakah itu masuk akal? 749 00:34:48,499 --> 00:34:52,280 >> SPEAKER 1: Cara lain untuk berpikir dari itu go-- sehingga adalah alamat. 750 00:34:52,280 --> 00:34:55,310 Bintang mengatakan pergi ke yang mengatasi dan melihat nilainya. 751 00:34:55,310 --> 00:34:58,000 Dan sekarang set nilainya ke 5. 752 00:34:58,000 --> 00:35:00,920 Jadi ia mengatakan, pergi ke alamat x, yang 753 00:35:00,920 --> 00:35:05,720 akan menjadi apa yang disimpan dalam, dan mengubahnya ke 5. 754 00:35:05,720 --> 00:35:06,470 PULAK GOYAL: Ya? 755 00:35:06,470 --> 00:35:10,817 AUDIENCE: Jadi posisi mana pointer akan, alamat. 756 00:35:10,817 --> 00:35:14,270 Tetapi nilai tersebut merupakan ditugaskan nilai berdasarkan alamat. 757 00:35:14,270 --> 00:35:15,020 PULAK GOYAL: Ya. 758 00:35:15,020 --> 00:35:18,076 759 00:35:18,076 --> 00:35:19,367 Pertanyaan lain tentang hal ini? 760 00:35:19,367 --> 00:35:22,774 761 00:35:22,774 --> 00:35:23,940 AUDIENCE: Saya punya pertanyaan. 762 00:35:23,940 --> 00:35:25,664 PULAK GOYAL: Ya, maaf. 763 00:35:25,664 --> 00:35:30,324 AUDIENCE: Jadi, ketika Anda store-- sehingga jika Anda mengatakan [tidak terdengar] a. 764 00:35:30,324 --> 00:35:31,032 PULAK GOYAL: Ya. 765 00:35:31,032 --> 00:35:34,448 AUDIENCE: Apakah Anda harus menyimpan x dengan ampersand? 766 00:35:34,448 --> 00:35:37,376 Mengapa kau tidak bisa hanya mengatakan x sebelum int Anda [tidak terdengar]? 767 00:35:37,376 --> 00:35:40,562 768 00:35:40,562 --> 00:35:41,270 PULAK GOYAL: So-- 769 00:35:41,270 --> 00:35:42,090 AUDIENCE: [tidak terdengar]. 770 00:35:42,090 --> 00:35:43,673 PULAK GOYAL: Jadi question-- Anda oh. 771 00:35:43,673 --> 00:35:47,160 772 00:35:47,160 --> 00:35:51,300 Jadi pertanyaan Anda, mengapa tidak bisa we-- untuk fungsi to_five, mengapa tidak bisa kita 773 00:35:51,300 --> 00:35:52,590 hanya lulus x, kan? 774 00:35:52,590 --> 00:35:53,570 >> AUDIENCE: Benar. 775 00:35:53,570 --> 00:35:59,570 >> PULAK GOYAL: OK, ya, jadi ini lagi kembali ke diskusi kita pada jenis. 776 00:35:59,570 --> 00:36:06,080 Jadi fungsi to_five sekarang mengharapkan jenis int bintang. 777 00:36:06,080 --> 00:36:07,660 Jadi apa adalah jenis x? 778 00:36:07,660 --> 00:36:09,800 X hanya sebuah int. 779 00:36:09,800 --> 00:36:13,530 Tapi apa fungsi ini mengharapkan adalah bintang int. 780 00:36:13,530 --> 00:36:16,910 Jadi mengharapkan variabel yang memiliki alamat yang tersimpan di dalamnya. 781 00:36:16,910 --> 00:36:20,250 Jadi itulah bagaimana you-- menempatkan ampersand, dan jadi itu 782 00:36:20,250 --> 00:36:22,560 bagaimana kita lulus dalam alamat, yang sekarang-- 783 00:36:22,560 --> 00:36:25,120 dan yang menafsirkan bahwa sebagai bintang int, ya. 784 00:36:25,120 --> 00:36:26,700 Pertanyaan besar. 785 00:36:26,700 --> 00:36:29,300 Pertanyaan lain tentang hal ini? 786 00:36:29,300 --> 00:36:29,800 OK keren. 787 00:36:29,800 --> 00:36:32,870 788 00:36:32,870 --> 00:36:37,020 >> OK, jadi sekarang mari kita bicara tentang pointer aritmetika. 789 00:36:37,020 --> 00:36:40,050 Jadi di sini, menambahkan dan mengurangkan i menyesuaikan pointer 790 00:36:40,050 --> 00:36:43,950 oleh i kali ukuran jenis pointer byte. 791 00:36:43,950 --> 00:36:46,170 Jadi mari kita lihat bagaimana yang terlihat seperti. 792 00:36:46,170 --> 00:36:49,640 Jadi di sini, kami sudah menyatakan int x sama dengan 5. 793 00:36:49,640 --> 00:36:56,120 Dan sekarang kita akan mendeklarasikan pointer y, dan lulus di alamat x ada. 794 00:36:56,120 --> 00:36:58,910 Jadi kita harus itu. 795 00:36:58,910 --> 00:37:01,005 Jadi x disimpan di 0x04. 796 00:37:01,005 --> 00:37:03,960 Jadi sekarang y sama dengan itu. 797 00:37:03,960 --> 00:37:12,260 Dan bisa seseorang mengatakan padaku apa yang mereka pikirkan akan terjadi ketika kita melakukan y ditambah sama dengan 1? 798 00:37:12,260 --> 00:37:19,100 799 00:37:19,100 --> 00:37:19,771 Ya? 800 00:37:19,771 --> 00:37:24,010 >> AUDIENCE: Apakah akan mengubah ke 0 kali 0 8? 801 00:37:24,010 --> 00:37:25,342 >> PULAK GOYAL: Ukuran, dan type-- 802 00:37:25,342 --> 00:37:27,789 >> AUDIENCE: Anda akan pindah alamat. 803 00:37:27,789 --> 00:37:29,080 PULAK GOYAL: Ya itu was-- ya. 804 00:37:29,080 --> 00:37:31,130 Benar sekali. 805 00:37:31,130 --> 00:37:33,110 Sehingga akan berubah menjadi 0x08. 806 00:37:33,110 --> 00:37:38,750 Dan because-- sehingga Anda akan menggunakan ini rumus, 1 kali ukuran pointer 807 00:37:38,750 --> 00:37:42,354 dan pointer dari size-- 808 00:37:42,354 --> 00:37:44,050 >> [MAHASISWA menggerutu] 809 00:37:44,050 --> 00:37:45,190 >> PULAK GOYAL: Benar. 810 00:37:45,190 --> 00:37:46,150 >> [MAHASISWA menggerutu] 811 00:37:46,150 --> 00:37:49,230 >> SPEAKER 1: Jadi jenis yang poin pointer to-- 812 00:37:49,230 --> 00:37:51,862 >> PULAK GOYAL: Apakah, yeah, ya, itu 4 byte. 813 00:37:51,862 --> 00:37:53,930 >> SPEAKER 1: Jadi int adalah 4 byte. 814 00:37:53,930 --> 00:38:01,260 >> PULAK GOYAL: Jadi jika kita telah a-- mari mengatakan kami menyatakan, saya kira, char. 815 00:38:01,260 --> 00:38:06,830 Apa yang akan itu-- sehingga katakanlah kita memiliki x arang sama dengan atau sesuatu. 816 00:38:06,830 --> 00:38:14,400 Dan kami memiliki alamat yang di 0x04, apa yang akan y ditambah equals 1 lakukan sekarang? 817 00:38:14,400 --> 00:38:14,960 Maaf apa? 818 00:38:14,960 --> 00:38:16,099 >> AUDIENCE: 0x05. 819 00:38:16,099 --> 00:38:17,140 PULAK GOYAL: 0x05, benar. 820 00:38:17,140 --> 00:38:18,520 Apakah semua orang melihat itu? 821 00:38:18,520 --> 00:38:20,212 OK, dan sekarang mari kita mengatakan itu pelampung. 822 00:38:20,212 --> 00:38:20,962 Apa yang akan terjadi? 823 00:38:20,962 --> 00:38:25,210 824 00:38:25,210 --> 00:38:26,130 Siapa saja? 825 00:38:26,130 --> 00:38:28,066 Jadi mengapung adalah berapa banyak byte? 826 00:38:28,066 --> 00:38:28,860 >> AUDIENCE: 4 bytes. 827 00:38:28,860 --> 00:38:29,651 >> PULAK GOYAL: Benar. 828 00:38:29,651 --> 00:38:32,661 Jadi itu akan menjadi hal yang sama seperti ini. 829 00:38:32,661 --> 00:38:33,160 Keren. 830 00:38:33,160 --> 00:38:36,230 831 00:38:36,230 --> 00:38:40,180 OK, dan sekarang mari kita bicara tentang pointer dan array. 832 00:38:40,180 --> 00:38:44,210 Jadi Anda melihat ini pada sebelumnya dua p set, 833 00:38:44,210 --> 00:38:48,570 di mana kita bisa treat-- array begitu dan pointer tidak hal yang sama. 834 00:38:48,570 --> 00:38:51,170 Tapi kita bisa memperlakukan array sebagai pointer. 835 00:38:51,170 --> 00:38:55,550 Jadi di sini, kita memiliki array ini di sini, yang memiliki tiga slot. 836 00:38:55,550 --> 00:38:57,570 Dalam kami slot-- pertama memiliki satu, dua, dan tiga. 837 00:38:57,570 --> 00:39:00,930 >> Jadi jika we-- sehingga kita dapat menetapkan itu dengan mengatakan, kita memiliki array, 838 00:39:00,930 --> 00:39:02,080 dereference itu. 839 00:39:02,080 --> 00:39:04,579 Dan kemudian ketika kita dereference bahwa, apa yang kita benar-benar melakukan 840 00:39:04,579 --> 00:39:05,910 adalah mengacu pada slot yang sama. 841 00:39:05,910 --> 00:39:09,230 Jadi Array bintang sama dengan 1. 842 00:39:09,230 --> 00:39:11,020 Kami bisa- bagaimana mungkin kita menulis itu-- apa 843 00:39:11,020 --> 00:39:13,404 cara alternatif kita bisa menulis itu? 844 00:39:13,404 --> 00:39:14,840 >> AUDIENCE: Array 0 sama 1. 845 00:39:14,840 --> 00:39:17,100 >> PULAK GOYAL: Tepat, tidak semua orang melihat itu? 846 00:39:17,100 --> 00:39:18,320 Hal yang sama sehingga dengan di sini. 847 00:39:18,320 --> 00:39:24,060 Jadi ketika kita memiliki array yang ditambah 1, kami do-- sehingga even-- 848 00:39:24,060 --> 00:39:28,890 ingat dengan aritmatika yang kita hanya berbicara tentang, ketika kita melakukan ditambah 1 849 00:39:28,890 --> 00:39:32,120 atau memindahkannya alih oleh 4 byte, benar. 850 00:39:32,120 --> 00:39:33,170 Apakah semua orang melihat itu? 851 00:39:33,170 --> 00:39:35,753 Dan sisi itu, ketika kita dereference itu, kita dapat mengatur bahwa untuk 2. 852 00:39:35,753 --> 00:39:37,710 Dan itulah bagaimana kita mengatur blok sebelah 2. 853 00:39:37,710 --> 00:39:41,640 Dan jadi alternatif cara untuk menulis yang juga akan berbagai braket 854 00:39:41,640 --> 00:39:44,436 0 bracket sama dengan 1. 855 00:39:44,436 --> 00:39:47,070 >> AUDIENCE: Apakah Anda memerlukan tanda kurung? 856 00:39:47,070 --> 00:39:50,840 >> PULAK GOYAL: Ya, karena kau dereferencing seluruh kuantitas 857 00:39:50,840 --> 00:39:53,460 Array ditambah 1. 858 00:39:53,460 --> 00:39:56,829 OK, dan hal yang sama untuk array ditambah 2. 859 00:39:56,829 --> 00:39:57,870 Pertanyaan tentang hal ini? 860 00:39:57,870 --> 00:39:58,369 Ya. 861 00:39:58,369 --> 00:40:01,340 AUDIENCE: Jadi array otomatis ditetapkan pada 0? 862 00:40:01,340 --> 00:40:03,054 >> PULAK GOYAL: Array is-- maaf, apa? 863 00:40:03,054 --> 00:40:03,962 >> AUDIENCE: Array adalah 0. 864 00:40:03,962 --> 00:40:07,140 Alamat array hanya 0. 865 00:40:07,140 --> 00:40:10,200 >> PULAK GOYAL: Jadi pertanyaannya adalah, adalah alamat array hanya 0? 866 00:40:10,200 --> 00:40:11,950 Jadi, tidak ada, berbagai memiliki beberapa alamat. 867 00:40:11,950 --> 00:40:14,930 Jadi ketika kita dereference itu, that's-- sehingga Anda dapat berpikir about-- 868 00:40:14,930 --> 00:40:18,230 benar seperti pointer menunjuk ke awal array. 869 00:40:18,230 --> 00:40:19,390 Sehingga memiliki beberapa alamat. 870 00:40:19,390 --> 00:40:20,580 Kami tidak tahu apa itu. 871 00:40:20,580 --> 00:40:24,170 Tetapi ketika kita dereference itu, kita tahu itulah awal dari array. 872 00:40:24,170 --> 00:40:25,980 Dan jadi ketika kita bergerak dengan 1, kita hanya bergerak 873 00:40:25,980 --> 00:40:29,090 relatif terhadap mana alamat yang. 874 00:40:29,090 --> 00:40:30,480 Ada pertanyaan lain? 875 00:40:30,480 --> 00:40:31,419 Ya? 876 00:40:31,419 --> 00:40:35,559 >> AUDIENCE: Jadi jika Anda melakukan Array braket ditambah 1-- 877 00:40:35,559 --> 00:40:37,350 PULAK GOYAL: Maaf, Aku-- bisa Anda berbicara? 878 00:40:37,350 --> 00:40:41,174 AUDIENCE: Ya, jika Anda melakukan Array braket [tidak terdengar]. 879 00:40:41,174 --> 00:40:45,227 Jadi jika Anda menempatkan pointer-- yang 880 00:40:45,227 --> 00:40:46,810 PULAK GOYAL: Maaf, saya tidak bisa mendengar Anda. 881 00:40:46,810 --> 00:40:48,100 Dapatkah Anda mengatakan itu sekali lagi? 882 00:40:48,100 --> 00:40:49,470 >> AUDIENCE: Kau OK. 883 00:40:49,470 --> 00:40:50,870 >> PULAK GOYAL: OK, maaf. 884 00:40:50,870 --> 00:40:51,420 OK keren. 885 00:40:51,420 --> 00:40:52,200 Any-- ya. 886 00:40:52,200 --> 00:40:55,710 Jadi, ketika Anda pergi dalam array braket 3-- 887 00:40:55,710 --> 00:40:56,570 >> PULAK GOYAL: Ya. 888 00:40:56,570 --> 00:40:59,832 >> AUDIENCE: --isn't there-- tidak akan itu empat tempat seperti 0, 1, 2, dan 3? 889 00:40:59,832 --> 00:41:02,630 Mengapa tidak int array yang 2? 890 00:41:02,630 --> 00:41:07,850 >> PULAK GOYAL: Tidak, jadi hanya konvensi C is-- ketika kita mendeklarasikan array, 891 00:41:07,850 --> 00:41:12,010 we-- jumlah kita diletakkan di sana adalah berapa banyak slot yang kita inginkan. 892 00:41:12,010 --> 00:41:16,970 Tapi indeks dari array yang sebenarnya Array 0, berbagai 1, dan berbagai 2. 893 00:41:16,970 --> 00:41:19,780 Jadi itu hanya konvensi tentang bagaimana kita menyatakan array. 894 00:41:19,780 --> 00:41:20,880 Ya, pertanyaan lain? 895 00:41:20,880 --> 00:41:21,380 Ya. 896 00:41:21,380 --> 00:41:23,750 AUDIENCE: Jadi kita masih berbicara tentang pointer, kan? 897 00:41:23,750 --> 00:41:24,500 PULAK GOYAL: Ya. 898 00:41:24,500 --> 00:41:28,600 AUDIENCE: Bisakah Anda masih melakukan membintangi untuk array 0 sama dengan 1? 899 00:41:28,600 --> 00:41:32,870 PULAK GOYAL: Tidak, tidak, so-- OK, jadi pertanyaannya adalah bisa 900 00:41:32,870 --> 00:41:37,370 Anda hanya melakukan star braket berbagai nol, dan kemudian mengatakan bahwa sama dengan 1. 901 00:41:37,370 --> 00:41:40,000 Jadi, tidak ada, apa yang kita katakan di sini adalah bahwa kita dapat think-- 902 00:41:40,000 --> 00:41:42,600 kita bisa memperlakukan array sebagai pointer. 903 00:41:42,600 --> 00:41:44,970 Jadi kita have-- apa yang kita katakan adalah kami memiliki dua cara 904 00:41:44,970 --> 00:41:47,370 sekarang referensi ke blok yang sama. 905 00:41:47,370 --> 00:41:52,270 Jadi doing-- jika Anda memiliki array yang nol, jenis yang sekarang int. 906 00:41:52,270 --> 00:41:55,264 Dan jika Anda mengambil bintang itu, Anda mendapatkan hal yang tidak valid. 907 00:41:55,264 --> 00:41:57,680 Jadi apa yang kita katakan di sini, adalah ada dua cara alternatif 908 00:41:57,680 --> 00:41:59,100 untuk merujuk pada blok yang sama. 909 00:41:59,100 --> 00:42:01,860 Anda juga dapat melakukan berbagai bracket 0 sama dengan 1. 910 00:42:01,860 --> 00:42:06,420 Atau Anda dapat melakukan dereference array, dan memiliki yang sama dengan 0. 911 00:42:06,420 --> 00:42:08,621 Jadi hanya dua cara melakukan hal yang sama. 912 00:42:08,621 --> 00:42:09,120 Ya. 913 00:42:09,120 --> 00:42:15,270 >> AUDIENCE: Mengapa bukan ukuran int 1 untuk menambahkan to-- 914 00:42:15,270 --> 00:42:17,650 >> PULAK GOYAL: Ukuran int 1. 915 00:42:17,650 --> 00:42:19,900 >> AUDIENCE: Karena itulah bergerak satu off. 916 00:42:19,900 --> 00:42:23,620 >> PULAK GOYAL: Karena itulah hanya cara C bekerja. 917 00:42:23,620 --> 00:42:26,460 Ini hanya cara pointer aritmatika didefinisikan. 918 00:42:26,460 --> 00:42:27,854 Ini akan mengambil pointer. 919 00:42:27,854 --> 00:42:30,020 Dan kemudian apa pun yang Anda tambahkan untuk itu, itu akan kalikan 920 00:42:30,020 --> 00:42:34,770 dengan ukuran apa pun toko pointer adalah, ya. 921 00:42:34,770 --> 00:42:35,480 Ya. 922 00:42:35,480 --> 00:42:39,595 >> AUDIENCE: Jadi kalau kita dapat mengobati pointer dan array yang sama, 923 00:42:39,595 --> 00:42:40,720 tetapi mereka berbeda. 924 00:42:40,720 --> 00:42:41,950 Jadi apa yang membuat mereka berbeda? 925 00:42:41,950 --> 00:42:45,070 Apa yang bisa kita lakukan dengan tidak satu tetapi tidak yang lain? 926 00:42:45,070 --> 00:42:52,390 >> PULAK GOYAL: Untuk tujuan ini kelas, saya pikir it's-- apa yang you-- 927 00:42:52,390 --> 00:42:56,270 >> SPEAKER 1: Jadi, we-- OK, jadi, untuk Misalnya, jika Anda mengalokasikan memori 928 00:42:56,270 --> 00:42:59,680 dan Anda memiliki pointer ke integer, misalnya. 929 00:42:59,680 --> 00:43:01,890 Jika Anda mencoba untuk memulai melakukan aritmetik pointer 930 00:43:01,890 --> 00:43:05,890 dan melampaui jumlah memori yang Anda dialokasikan, Anda akan mengalami kesalahan. 931 00:43:05,890 --> 00:43:08,250 Kita tahu dengan array, kita mengatakan di depan waktu, OK, saya 932 00:43:08,250 --> 00:43:11,400 ingin allocate-- ini pada dasarnya mengatakan, saya ingin mengalokasikan 933 00:43:11,400 --> 00:43:13,490 cukup ruang untuk tiga bilangan bulat. 934 00:43:13,490 --> 00:43:17,820 Dan jadi sekarang kita dapat memperlakukan memori seakan kami memiliki semua tiga dari mereka bilangan bulat. 935 00:43:17,820 --> 00:43:19,460 Apakah itu semacam masuk akal? 936 00:43:19,460 --> 00:43:22,042 >> PULAK GOYAL: Ya. 937 00:43:22,042 --> 00:43:22,542 Ya. 938 00:43:22,542 --> 00:43:24,778 >> AUDIENCE: Jadi bintang array, adalah bahwa menetapkan 1 939 00:43:24,778 --> 00:43:26,657 dengan 0 indeks array? 940 00:43:26,657 --> 00:43:27,365 PULAK GOYAL: Ya. 941 00:43:27,365 --> 00:43:31,160 942 00:43:31,160 --> 00:43:34,439 >> AUDIENCE: Jadi, apa setelah Dua baris berikutnya dalam hal the-- saya 943 00:43:34,439 --> 00:43:36,980 memahami bahwa Anda sedang berusaha menggunakan aritmetik pointer di sini, 944 00:43:36,980 --> 00:43:39,355 tapi sekali lagi, saya tidak mengerti apa pointer aritmatika. 945 00:43:39,355 --> 00:43:43,869 Jadi array ditambah 1, Anda mengatakan bahwa Anda sekarang 946 00:43:43,869 --> 00:43:47,540 akan ingin berbicara tentang indeks pertama ke array. 947 00:43:47,540 --> 00:43:50,050 >> PULAK GOYAL: Benar, sehingga Alasan yang bekerja adalah array, 948 00:43:50,050 --> 00:43:52,970 di sini, kita bisa memikirkan sebagai bintang int. 949 00:43:52,970 --> 00:43:56,110 Dan jadi ketika kita pointer aritmatika di atasnya, ingat rumus mana 950 00:43:56,110 --> 00:43:59,020 kita mengambil the-- Saya kira apa pun alamat saat ini, 951 00:43:59,020 --> 00:44:02,100 dan kemudian ketika kita menambahkan 1 untuk itu, kita benar-benar 952 00:44:02,100 --> 00:44:06,620 kalikan 1 dengan ukuran hal kita memanipulasi. 953 00:44:06,620 --> 00:44:09,090 Jadi dalam hal ini, ukuran int. 954 00:44:09,090 --> 00:44:11,634 Dan kemudian kami memindahkannya meneruskan oleh yang banyak. 955 00:44:11,634 --> 00:44:14,419 >> SPEAKER 1: Jadi berpura-pura Anda memiliki bintang b array. 956 00:44:14,419 --> 00:44:15,335 PULAK GOYAL: OK, ya. 957 00:44:15,335 --> 00:44:16,005 SPEAKER 1: Dengan tangan Anda. 958 00:44:16,005 --> 00:44:16,505 Kesini. 959 00:44:16,505 --> 00:44:18,350 PULAK GOYAL: Atau aku bisa hanya-- ya. 960 00:44:18,350 --> 00:44:23,660 OK jadi di sini-, sehingga susunan di mulai, tepat di sini. 961 00:44:23,660 --> 00:44:29,155 Jadi ketika kita dereference array, kami hanya mengacu pada blok pertama di sini. 962 00:44:29,155 --> 00:44:36,620 Tapi sekarang ketika saya melakukan berbagai ditambah 1, yang is-- panah yang sekarang di sini. 963 00:44:36,620 --> 00:44:38,250 Apakah itu masuk akal? 964 00:44:38,250 --> 00:44:46,690 Tepat, karena blok ini ukuran int, yaitu 4 byte. 965 00:44:46,690 --> 00:44:53,540 Dan, apa yang kita lakukan adalah kita bergerak yang pointer oleh 4 byte lebih. 966 00:44:53,540 --> 00:44:56,080 Setiap kali kita melakukan aritmatika di atasnya, itu akan selalu 967 00:44:56,080 --> 00:44:59,730 memindahkannya dengan pertambahan 4 byte. 968 00:44:59,730 --> 00:45:01,902 Karena ini adalah seperti bintang int. 969 00:45:01,902 --> 00:45:04,970 Apakah itu masuk akal? 970 00:45:04,970 --> 00:45:05,470 OKE. 971 00:45:05,470 --> 00:45:07,770 >> AUDIENCE: Jadi hal-hal dalam array adalah 5 byte, kami akan memindahkannya 5 bytes-- 972 00:45:07,770 --> 00:45:10,853 >> PULAK GOYAL: Benar, jadi jika kita memiliki bintang char, kami akan memindahkannya dengan 1 byte saja. 973 00:45:10,853 --> 00:45:13,670 Jadi dalam kasus bintang char, itu hanya akan memindahkannya alih oleh 1. 974 00:45:13,670 --> 00:45:15,420 AUDIENCE: Untuk mendapatkan berikutnya Anda perlu sebuah bintang. 975 00:45:15,420 --> 00:45:18,099 PULAK GOYAL: Ya, ya, apakah itu masuk akal? 976 00:45:18,099 --> 00:45:19,890 SPEAKER 1: Kami dapat chatting tentang hal itu lagi nanti. 977 00:45:19,890 --> 00:45:21,530 PULAK GOYAL: Yeah, yeah, pasti. 978 00:45:21,530 --> 00:45:23,214 OK keren. 979 00:45:23,214 --> 00:45:24,630 Mari kita lanjutkan ke bagian berikutnya. 980 00:45:24,630 --> 00:45:27,182 981 00:45:27,182 --> 00:45:28,140 SPEAKER 1: Oh, OK keren. 982 00:45:28,140 --> 00:45:29,205 Ya, itu saya. 983 00:45:29,205 --> 00:45:30,330 Baiklah, mengagumkan. 984 00:45:30,330 --> 00:45:35,064 OK, keren, jadi sekarang kita ke sedikit informasi yang lebih umum tentang memori. 985 00:45:35,064 --> 00:45:37,730 Juga, saya menghargai kenyataan bahwa mereka akan cukup cepat. 986 00:45:37,730 --> 00:45:40,230 Ini banyak bahan untuk mendapatkan melalui dalam satu jam setengah. 987 00:45:40,230 --> 00:45:42,880 Tapi jika ada topik Anda ingin pergi lebih mendalam ke dalam, 988 00:45:42,880 --> 00:45:44,630 kita akan memiliki jam kantor minggu ini 989 00:45:44,630 --> 00:45:46,340 di mana Anda dapat chatting dengan kami satu lawan satu. 990 00:45:46,340 --> 00:45:49,240 Atau Anda bisa datang di berakhir dan kami akan mengobrol tentang hal-hal. 991 00:45:49,240 --> 00:45:52,130 Dan seperti biasa, merasa ragu untuk mengajukan pertanyaan. 992 00:45:52,130 --> 00:45:52,695 Mengagumkan. 993 00:45:52,695 --> 00:45:55,820 Jadi, inilah gambaran kita memori yang yang kami lihat dalam kuliah miliar kali. 994 00:45:55,820 --> 00:45:58,610 Dan kita tahu bahwa tumpukan ini tumbuh dari bawah 995 00:45:58,610 --> 00:46:00,214 dan tumpukan tumbuh ke bawah. 996 00:46:00,214 --> 00:46:03,380 Dan apa perbedaan antara hal-hal bahwa kita terus tumpukan dan hal-hal 997 00:46:03,380 --> 00:46:05,981 bahwa kita tetap di stack? 998 00:46:05,981 --> 00:46:07,397 Seseorang membuang sesuatu di luar sana. 999 00:46:07,397 --> 00:46:10,806 1000 00:46:10,806 --> 00:46:11,780 Ya. 1001 00:46:11,780 --> 00:46:14,215 >> AUDIENCE: Apakah tumpukan untuk hal-hal yang hanya 1002 00:46:14,215 --> 00:46:18,095 variabel kekal bahwa kita hanya menyatakan menggunakan fungsi tertentu? 1003 00:46:18,095 --> 00:46:19,220 SPEAKER 1: Beautiful, ya. 1004 00:46:19,220 --> 00:46:23,007 Jadi setiap saat di mana, mari kita mengatakan kami berada di fungsi, 1005 00:46:23,007 --> 00:46:24,590 dan kami hanya memiliki beberapa variabel lokal. 1006 00:46:24,590 --> 00:46:26,214 Mereka akan berakhir di stack. 1007 00:46:26,214 --> 00:46:30,020 Jika, sebaliknya, kita sebut malloc dan benar-benar mengalokasikan memori, 1008 00:46:30,020 --> 00:46:32,290 yang selalu datang dari tumpukan. 1009 00:46:32,290 --> 00:46:35,100 Jadi, ya keren? 1010 00:46:35,100 --> 00:46:38,672 >> Dan ingat bahwa memori setiap Anda mengalokasikan menggunakan malloc, 1011 00:46:38,672 --> 00:46:40,130 yang akan berakhir di heap. 1012 00:46:40,130 --> 00:46:42,019 Dan jika Anda lupa untuk itu gratis, komputer 1013 00:46:42,019 --> 00:46:43,810 tidak akan tahu bahwa Anda selesai dengan itu. 1014 00:46:43,810 --> 00:46:45,560 Jadi itu hanya akan menggantung di luar sana di memori. 1015 00:46:45,560 --> 00:46:47,412 Dan kau dasarnya bocor memori itu. 1016 00:46:47,412 --> 00:46:48,120 Anda kehilangan itu. 1017 00:46:48,120 --> 00:46:51,840 Karena Anda tidak pernah mengatakan kepada komputer, hey aku sudah selesai menggunakannya, merasa bebas untuk menggunakan, 1018 00:46:51,840 --> 00:46:53,632 menempatkan hal-hal lain di sana. 1019 00:46:53,632 --> 00:46:54,470 Keren. 1020 00:46:54,470 --> 00:46:55,928 Pertanyaan ada? 1021 00:46:55,928 --> 00:46:56,428 Iya nih. 1022 00:46:56,428 --> 00:46:58,808 >> AUDIENCE: Jadi, apa jenis memori adalah tumpukan? 1023 00:46:58,808 --> 00:46:59,974 Pakan non dinamis, didelegasikan? 1024 00:46:59,974 --> 00:47:01,200 Apa yang akan Anda menyebutnya? 1025 00:47:01,200 --> 00:47:03,870 >> SPEAKER 1: Tentu, sehingga Anda bisa menganggapnya sebagai variabel lokal. 1026 00:47:03,870 --> 00:47:10,137 Panggilan sebenarnya untuk fungsi akan menumpuk. 1027 00:47:10,137 --> 00:47:10,720 ada lagi? 1028 00:47:10,720 --> 00:47:11,220 Ya? 1029 00:47:11,220 --> 00:47:14,627 AUDIENCE: Bagaimana Anda gratis memori Anda tambahkan ke the-- 1030 00:47:14,627 --> 00:47:17,710 SPEAKER 1: Tentu, jadi ketika Anda mengalokasikan memori di heap, Anda menelepon malloc. 1031 00:47:17,710 --> 00:47:20,543 Dan kemudian yang memberikan Anda kembali pointer ke beberapa alamat di memori. 1032 00:47:20,543 --> 00:47:22,630 Jadi mengatakan Anda disebut pointer itu, kan? 1033 00:47:22,630 --> 00:47:24,970 Kemudian, Anda hanya mengatakan pointer gratis. 1034 00:47:24,970 --> 00:47:27,351 Dan yang membebaskan memori. 1035 00:47:27,351 --> 00:47:27,850 Keren. 1036 00:47:27,850 --> 00:47:28,660 Pertanyaan lain? 1037 00:47:28,660 --> 00:47:28,880 Iya nih. 1038 00:47:28,880 --> 00:47:30,838 >> AUDIENCE: Apa dialokasikan secara dinamis berarti? 1039 00:47:30,838 --> 00:47:32,345 1040 00:47:32,345 --> 00:47:35,381 >> SPEAKER 1: dinamis dialokasikan berarti, dalam perjalanan program anda. 1041 00:47:35,381 --> 00:47:37,630 Jadi ketika Anda menelepon malloc di tengah program Anda, 1042 00:47:37,630 --> 00:47:40,510 pada awal program, tidak ada memori yang dialokasikan. 1043 00:47:40,510 --> 00:47:42,600 Dan sebagai komputer langkah melalui kode itu, 1044 00:47:42,600 --> 00:47:44,280 itu akan mengalokasikan memori. 1045 00:47:44,280 --> 00:47:46,507 Jadi itulah yang kita maksud dengan dinamis. 1046 00:47:46,507 --> 00:47:47,090 Pertanyaan bagus. 1047 00:47:47,090 --> 00:47:48,309 Ya? 1048 00:47:48,309 --> 00:47:50,809 AUDIENCE: Ketika Anda mendefinisikan array dengan kurung persegi, 1049 00:47:50,809 --> 00:47:54,154 apakah itu masih [tidak terdengar]? 1050 00:47:54,154 --> 00:47:55,570 SPEAKER 1: Itu pertanyaan yang bagus. 1051 00:47:55,570 --> 00:48:00,320 Saya pikir ketika Anda mengalokasikan array, itu benar-benar menempatkan pada stack. 1052 00:48:00,320 --> 00:48:03,008 Aku tidak positif tentang itu, jadi jangan mengutip saya. 1053 00:48:03,008 --> 00:48:04,430 >> SPEAKER 2: Saya pikir itu-- ya menempatkan itu di stack. 1054 00:48:04,430 --> 00:48:05,763 >> SPEAKER 1: Menempatkan pada stack. 1055 00:48:05,763 --> 00:48:07,044 OK, keren, dikonfirmasi. 1056 00:48:07,044 --> 00:48:07,710 Pertanyaan lain? 1057 00:48:07,710 --> 00:48:08,030 Ya? 1058 00:48:08,030 --> 00:48:10,946 >> AUDIENCE: Ketika Anda mendelegasikan malloc, tidak komputer secara otomatis 1059 00:48:10,946 --> 00:48:12,910 mengalokasikan memori untuk variabel Anda? 1060 00:48:12,910 --> 00:48:14,660 SPEAKER 1: Ya, untuk variabel lokal Anda, 1061 00:48:14,660 --> 00:48:16,724 secara otomatis menempatkan memori di stack. 1062 00:48:16,724 --> 00:48:18,640 AUDIENCE: Jadi apa titik menggunakan malloc? 1063 00:48:18,640 --> 00:48:19,840 SPEAKER 1: Apa titik menggunakan malloc? 1064 00:48:19,840 --> 00:48:22,850 Jadi kita melihat sekelompok contoh, seperti, misalnya, menggunakan swap, 1065 00:48:22,850 --> 00:48:25,690 di mana kita ingin ruang lingkup variabel menjadi sesuatu 1066 00:48:25,690 --> 00:48:27,940 sekedar fungsi panggilan nya. 1067 00:48:27,940 --> 00:48:29,875 Dan kami ingin sesuatu bahwa kita dapat melewati sekitar 1068 00:48:29,875 --> 00:48:31,750 dan bahwa kita dapat mengakses dari tempat yang berbeda. 1069 00:48:31,750 --> 00:48:33,791 Di situlah kita akan ingin menempatkan memori di heap. 1070 00:48:33,791 --> 00:48:37,835 Sehingga semua yang berbeda fungsi dapat mengaksesnya. 1071 00:48:37,835 --> 00:48:40,510 >> AUDIENCE: Dapatkah Anda hanya menjelaskan bahwa? 1072 00:48:40,510 --> 00:48:44,770 >> SPEAKER 1: Jadi salah satu pilihan is-- sehingga pertanyaan adalah, bisakah kita allocate-- 1073 00:48:44,770 --> 00:48:47,660 Maaf, dapat kita mendeklarasikan variabel global, pada dasarnya. 1074 00:48:47,660 --> 00:48:48,560 Itu adalah salah satu pilihan. 1075 00:48:48,560 --> 00:48:50,893 Tapi dengan banyak dari mereka, mereka cenderung untuk mendapatkan benar-benar berantakan. 1076 00:48:50,893 --> 00:48:52,847 Dan kita biasanya berpikir itu desain buruk. 1077 00:48:52,847 --> 00:48:53,821 Ya. 1078 00:48:53,821 --> 00:48:56,580 Keren, pertanyaan lain? 1079 00:48:56,580 --> 00:48:57,140 Mengagumkan. 1080 00:48:57,140 --> 00:48:58,789 OK, pindah. 1081 00:48:58,789 --> 00:49:00,580 Jadi ini sebenarnya bagaimana kita mengalokasikan memori. 1082 00:49:00,580 --> 00:49:02,670 Kami berbicara tentang ini sedikit. 1083 00:49:02,670 --> 00:49:04,240 Kami menggunakan fungsi ini disebut malloc. 1084 00:49:04,240 --> 00:49:07,850 Dan Anda mengatakan itu berapa banyak byte di memori, sehingga berapa banyak byte di heap, 1085 00:49:07,850 --> 00:49:08,610 kamu ingin. 1086 00:49:08,610 --> 00:49:13,120 Dan itu akan kembali alamat, sehingga pointer ke, sepotong memori 1087 00:49:13,120 --> 00:49:14,500 bahwa itu dialokasikan untuk Anda. 1088 00:49:14,500 --> 00:49:17,080 Jadi jenis akan menjadi batal bintang. 1089 00:49:17,080 --> 00:49:21,310 Ini akan menjadi pointer ke apa pun yang Anda memutuskan untuk menempatkan di sana. 1090 00:49:21,310 --> 00:49:23,530 Setiap kali Anda menelepon malloc, kita sudah mengatakan 1091 00:49:23,530 --> 00:49:25,640 Anda harus membebaskan begitu kami tidak memiliki kebocoran memori. 1092 00:49:25,640 --> 00:49:27,170 >> Apa hal lain bahwa Anda benar-benar 1093 00:49:27,170 --> 00:49:29,185 harus melakukan setiap satu kali Anda memanggil malloc? 1094 00:49:29,185 --> 00:49:31,210 1095 00:49:31,210 --> 00:49:32,210 OK, Anda harus membebaskan itu. 1096 00:49:32,210 --> 00:49:34,010 Apa hal lainnya? 1097 00:49:34,010 --> 00:49:35,890 Memeriksa null, indah. 1098 00:49:35,890 --> 00:49:38,850 Jadi, ya, itu benar ada di papan. 1099 00:49:38,850 --> 00:49:42,120 Jika Anda akan mencoba untuk mengalokasikan memori dan Anda telah tidak ada memori yang tersisa, 1100 00:49:42,120 --> 00:49:44,940 komputer akan mengatakan, Aku punya apa-apa untuk memberikan. 1101 00:49:44,940 --> 00:49:47,650 Dan memberikan Anda kembali nol. 1102 00:49:47,650 --> 00:49:48,400 Pertanyaan itu? 1103 00:49:48,400 --> 00:49:49,290 Ya. 1104 00:49:49,290 --> 00:49:52,995 >> AUDIENCE: Mengapa Anda pernah ingin mendeklarasikan pointer dengan tipe tertentu 1105 00:49:52,995 --> 00:49:56,329 ketika kekosongan star dapat menangani semua jenis pointer lagian? 1106 00:49:56,329 --> 00:49:57,370 SPEAKER 1: Pertanyaan yang bagus. 1107 00:49:57,370 --> 00:50:00,590 Mengapa kita akan mengatakan int bintang sebagai lawan membatalkan bintang 1108 00:50:00,590 --> 00:50:03,740 ketika kekosongan bintang bisa menangani semuanya? 1109 00:50:03,740 --> 00:50:06,390 Jadi kita tidak ingin pernah eksplisit cast pointer. 1110 00:50:06,390 --> 00:50:07,940 Ini hanya praktik buruk. 1111 00:50:07,940 --> 00:50:11,850 Tapi kita akan berbicara tentang bintang int hanya sebagai pemahaman, 1112 00:50:11,850 --> 00:50:14,195 ini adalah pointer ke integer. 1113 00:50:14,195 --> 00:50:14,850 >> AUDIENCE: OK. 1114 00:50:14,850 --> 00:50:17,558 >> SPEAKER 1: Ya, dan itu memungkinkan Anda untuk memanipulasi nilai-nilai di dalamnya 1115 00:50:17,558 --> 00:50:18,667 sebagai bilangan bulat. 1116 00:50:18,667 --> 00:50:20,008 >> AUDIENCE: Oh, OK. 1117 00:50:20,008 --> 00:50:22,250 Dan kekosongan bintang tidak akan membiarkan Anda melakukan itu? 1118 00:50:22,250 --> 00:50:25,070 >> SPEAKER 1: Hal ini tergantung pada konteks Ya, jadi jangan khawatir 1119 00:50:25,070 --> 00:50:28,460 jangan khawatir terlalu banyak tentang jenis ada. 1120 00:50:28,460 --> 00:50:32,620 Hanya tahu bahwa, secara umum, malloc mengembalikan pointer ke sesuatu. 1121 00:50:32,620 --> 00:50:33,520 Pertanyaan bagus. 1122 00:50:33,520 --> 00:50:37,260 >> AUDIENCE: Mengapa Anda kalikan itu kali 10? [Tidak terdengar]. 1123 00:50:37,260 --> 00:50:40,150 >> SPEAKER 1: Tentu, jadi saya hanya melakukan contoh acak di sini di mana 1124 00:50:40,150 --> 00:50:42,840 Saya ingin mengalokasikan cukup ruang untuk menyimpan 10 bilangan bulat. 1125 00:50:42,840 --> 00:50:44,320 Hanya pilihan acak. 1126 00:50:44,320 --> 00:50:45,250 Ya. 1127 00:50:45,250 --> 00:50:45,440 Ya, ada apa? 1128 00:50:45,440 --> 00:50:47,440 >> AUDIENCE: Apa yang Anda maksud dengan memeriksa null? 1129 00:50:47,440 --> 00:50:51,351 Apakah Anda ingin memeriksa pointer for atau malloc? 1130 00:50:51,351 --> 00:50:52,350 SPEAKER 1: Ya, persis. 1131 00:50:52,350 --> 00:50:54,599 Jadi pertanyaannya adalah, apa yang yang kita maksud dengan cek oleh nol? 1132 00:50:54,599 --> 00:50:57,880 Kami ingin to-- kapan saja kita sebut malloc dan kami kembali pointer, 1133 00:50:57,880 --> 00:51:01,110 kami ingin mengatakan, adalah pointer sama dengan null? 1134 00:51:01,110 --> 00:51:02,610 Jadi secara harfiah PTR. 1135 00:51:02,610 --> 00:51:05,620 Apakah PTR sama dengan nol. 1136 00:51:05,620 --> 00:51:06,958 Iya nih. 1137 00:51:06,958 --> 00:51:08,832 AUDIENCE: Jadi, aku agak bertanya-tanya, jika Anda 1138 00:51:08,832 --> 00:51:14,013 menginisialisasi pointer ke malloc, tidak itu menunjuk ke awal malloc? 1139 00:51:14,013 --> 00:51:15,097 Karena jika itu sebuah array-- 1140 00:51:15,097 --> 00:51:16,554 SPEAKER 1: Itu pertanyaan yang bagus. 1141 00:51:16,554 --> 00:51:19,200 Ya, jika Anda memanggil malloc, yang pointer yang itu-- katakanlah, 1142 00:51:19,200 --> 00:51:21,700 jadi di sini kita mengalokasikan 10 byte memori. 1143 00:51:21,700 --> 00:51:23,830 Jadi, saya minta maaf, cukup ruang untuk 10 bilangan bulat, 1144 00:51:23,830 --> 00:51:28,220 kita akan mendapatkan alamat bahwa bagian pertama dari memori. 1145 00:51:28,220 --> 00:51:29,880 Itu pertanyaan yang bagus. 1146 00:51:29,880 --> 00:51:30,481 Ya. 1147 00:51:30,481 --> 00:51:34,810 >> AUDIENCE: Dengan mengalokasikan 10 bilangan bulat luas, 1148 00:51:34,810 --> 00:51:38,177 bisa Anda benar-benar menggunakan pointer sebagai like-- hampir 1149 00:51:38,177 --> 00:51:39,372 seperti sebuah array bilangan bulat? 1150 00:51:39,372 --> 00:51:41,830 SPEAKER 1: Ya, Anda juga bisa menggunakannya sebagai sebuah array bilangan bulat? 1151 00:51:41,830 --> 00:51:45,970 Ya, tepatnya, ini adalah apa pulak hanya menunjukkan Anda on-- beberapa slide yang lalu, 1152 00:51:45,970 --> 00:51:48,680 di mana kita mengatakan, OK, ini adalah benar-benar hanya jenis of-- kami 1153 00:51:48,680 --> 00:51:50,805 dapat menganggapnya sebagai sebuah array 10 bilangan bulat. 1154 00:51:50,805 --> 00:51:52,222 Itu hanya kebetulan di heap. 1155 00:51:52,222 --> 00:51:54,971 AUDIENCE: Tapi Anda tidak bisa akses dengan notasi braket persegi? 1156 00:51:54,971 --> 00:51:58,220 SPEAKER 1: Anda benar-benar bisa mengakses dengan notasi braket persegi, ya. 1157 00:51:58,220 --> 00:52:00,221 Anda dapat memperlakukan mereka sama. 1158 00:52:00,221 --> 00:52:00,720 Iya nih. 1159 00:52:00,720 --> 00:52:02,420 >> AUDIENCE: Mengapa pointer pernah null? 1160 00:52:02,420 --> 00:52:04,170 >> SPEAKER 1: Mengapa pointer pernah null? 1161 00:52:04,170 --> 00:52:06,570 Jika Anda akan menggunakan semua memori di heap Anda. 1162 00:52:06,570 --> 00:52:09,141 Jika program anda memakan, makan sampai, makan memori, 1163 00:52:09,141 --> 00:52:11,890 dan tidak ada yang kiri, kemudian malloc akan say-- jika Anda mengatakan, 1164 00:52:11,890 --> 00:52:14,760 Saya ingin 100 byte lagi, itu akan mengatakan, saya tidak memiliki 100 byte. 1165 00:52:14,760 --> 00:52:15,740 Berikut null. 1166 00:52:15,740 --> 00:52:18,780 Itu berarti, saya gagal. 1167 00:52:18,780 --> 00:52:20,516 Iya nih. 1168 00:52:20,516 --> 00:52:22,830 >> AUDIENCE: Dalam hal ini, nol adalah apa-apa, kan? 1169 00:52:22,830 --> 00:52:24,110 >> SPEAKER 1: Ya, dalam kasus, null ada. 1170 00:52:24,110 --> 00:52:24,943 Anda tidak memiliki alamat. 1171 00:52:24,943 --> 00:52:28,065 Tidak ada memori. 1172 00:52:28,065 --> 00:52:31,500 Baiklah, pindah. 1173 00:52:31,500 --> 00:52:34,976 OK, mari kita bicara sangat cepat tentang buffer overflow. 1174 00:52:34,976 --> 00:52:38,210 Ketika kita mungkin mengalami buffer overflow? 1175 00:52:38,210 --> 00:52:42,980 Katakanlah kita memiliki kita a-- mengalokasikan sepotong memori, 1176 00:52:42,980 --> 00:52:44,720 dan kita akan menulis string dalam. 1177 00:52:44,720 --> 00:52:47,240 Dan kita akan mengatakan, OK, aku akan mengalokasikan 1178 00:52:47,240 --> 00:52:49,320 cukup ruang untuk enam karakter. 1179 00:52:49,320 --> 00:52:51,680 Dan aku akan meminta pengguna untuk beberapa masukan. 1180 00:52:51,680 --> 00:52:54,470 Dan input pengguna, misalnya, halo. 1181 00:52:54,470 --> 00:52:56,430 Dan yang sangat cocok baik karena kita memiliki 1182 00:52:56,430 --> 00:53:00,790 ruang untuk semua karakter halo, dan karakter terminating null. 1183 00:53:00,790 --> 00:53:02,840 Banyak ruang, tidak ada masalah. 1184 00:53:02,840 --> 00:53:08,010 >> Tapi bagaimana kalau kita beri kesempatan untuk pengguna yang jahat untuk menggunakan program kami, 1185 00:53:08,010 --> 00:53:13,152 dan mereka ketik tidak enam karakter, atau tidak lima karakter, tapi satu juta. 1186 00:53:13,152 --> 00:53:15,860 Mereka terus mengetik, dan mengetik, dan mengetik, apa yang akan terjadi? 1187 00:53:15,860 --> 00:53:18,220 Yah kami hanya memberikan enough-- komputer atau menyesal, 1188 00:53:18,220 --> 00:53:23,350 kami hanya memberikan string ini cukup ruang untuk 5 karakter. 1189 00:53:23,350 --> 00:53:28,300 Jadi, kita akan mendapatkan sesuatu seperti ini, di mana orang jahat siapa 1190 00:53:28,300 --> 00:53:31,750 mengetik di masukan dapat menimpa ukuran buffer, 1191 00:53:31,750 --> 00:53:35,922 dan bisa benar-benar masa lalu jumlah bahwa itu awalnya dialokasikan. 1192 00:53:35,922 --> 00:53:38,380 Dan kemudian apa yang dapat Anda lakukan, Yang benar-benar jahat yang dapat Anda lakukan, 1193 00:53:38,380 --> 00:53:40,260 adalah menimpa alamat pengirim. 1194 00:53:40,260 --> 00:53:42,010 Yang pada dasarnya berarti Anda dapat mengambil jenis 1195 00:53:42,010 --> 00:53:45,110 kontrol perilaku program. 1196 00:53:45,110 --> 00:53:47,880 Jadi pada tingkat yang sangat tinggi buffer overflow adalah ketika 1197 00:53:47,880 --> 00:53:49,960 Anda mengalokasikan beberapa jumlah memori. 1198 00:53:49,960 --> 00:53:53,060 Dan kemudian you-- ini karena Anda mengambil input pengguna atau sesuatu 1199 00:53:53,060 --> 00:53:57,190 seperti itu-- Anda pergi ke batas dari apa yang telah Anda awalnya dialokasikan 1200 00:53:57,190 --> 00:53:59,955 dan mulai mengacaukan program anda. 1201 00:53:59,955 --> 00:54:00,455 Iya nih? 1202 00:54:00,455 --> 00:54:03,220 >> AUDIENCE: Mengapa tidak yang hanya kembali kesalahan segmentasi? 1203 00:54:03,220 --> 00:54:05,594 >> SPEAKER 1: Mengapa tidak yang kembali kesalahan segmentasi? 1204 00:54:05,594 --> 00:54:06,570 Itu bisa. 1205 00:54:06,570 --> 00:54:10,030 Kadang-kadang kompilator atau selama salah satu runtime Anda 1206 00:54:10,030 --> 00:54:11,430 sebenarnya akan memeriksa itu. 1207 00:54:11,430 --> 00:54:13,890 Jika hal-hal tertentu terjadi, dan ini adalah jenis tingkat yang lebih rendah, 1208 00:54:13,890 --> 00:54:15,610 maka Anda perlu tahu. 1209 00:54:15,610 --> 00:54:18,820 Tapi jika Anda tidak merancang sistem ini benar, 1210 00:54:18,820 --> 00:54:21,170 maka Anda memiliki kesempatan tidak menangkap itu dan hanya 1211 00:54:21,170 --> 00:54:24,844 memungkinkan komputer take-- yang orang jahat untuk mengontrol komputer Anda. 1212 00:54:24,844 --> 00:54:25,344 Ya. 1213 00:54:25,344 --> 00:54:26,260 >> AUDIENCE: [tidak terdengar]? 1214 00:54:26,260 --> 00:54:28,934 1215 00:54:28,934 --> 00:54:29,600 SPEAKER 1: Tentu. 1216 00:54:29,600 --> 00:54:33,800 Oh, ketika saya mengatakan penyangga, saya hanya berarti jumlah memori yang telah Anda dialokasikan. 1217 00:54:33,800 --> 00:54:39,090 Jadi di sini saya berkata, oh, kami telah dialokasikan enam char-- cukup ruang untuk enam karakter. 1218 00:54:39,090 --> 00:54:42,880 Dan aku hanya menyebut bahwa buffer saya di mana saya bisa menulis informasi. 1219 00:54:42,880 --> 00:54:44,390 Ya. 1220 00:54:44,390 --> 00:54:46,791 Pertanyaan lain tentang hal ini? 1221 00:54:46,791 --> 00:54:47,290 Ya. 1222 00:54:47,290 --> 00:54:49,150 >> AUDIENCE: Bagaimana Anda menghentikannya? 1223 00:54:49,150 --> 00:54:50,274 Bagaimana Anda menghentikannya? 1224 00:54:50,274 --> 00:54:51,440 SPEAKER 1: Awesome pertanyaan. 1225 00:54:51,440 --> 00:54:52,240 Bagaimana Anda menghentikannya? 1226 00:54:52,240 --> 00:54:54,110 Bagaimana Anda mencegah buffer overflow? 1227 00:54:54,110 --> 00:54:59,160 Nah salah satu cara untuk melakukannya adalah sesuatu seperti GetString, di mana kita terus-menerus meningkatkan 1228 00:54:59,160 --> 00:55:03,200 jumlah memori yang kita mengalokasikan jika pengguna memasukkan banyak teks. 1229 00:55:03,200 --> 00:55:07,570 Lain masalahnya, jika Anda hanya ingin enam karakter, melakukan pemeriksaan cepat. 1230 00:55:07,570 --> 00:55:11,220 Mengatakan hanya masukan enam karakter. 1231 00:55:11,220 --> 00:55:12,444 Ya. 1232 00:55:12,444 --> 00:55:14,360 Jadi katakanlah Anda bekerja on-- kita akan 1233 00:55:14,360 --> 00:55:16,985 untuk pergi ke hal-hal web sedikit kemudian di course-- tapi mari 1234 00:55:16,985 --> 00:55:21,422 mengatakan Anda bekerja pada formulir, Anda akan hanya membatasi berapa banyak bisa diserahkan. 1235 00:55:21,422 --> 00:55:22,378 Ya. 1236 00:55:22,378 --> 00:55:24,768 >> AUDIENCE: GetString menarik memori dari stack, kan? 1237 00:55:24,768 --> 00:55:25,444 Hanya untuk mengklarifikasi? 1238 00:55:25,444 --> 00:55:26,485 SPEAKER 1: Sekali lagi? 1239 00:55:26,485 --> 00:55:28,400 AUDIENCE: Apakah GetString mengambil memori dari stack? 1240 00:55:28,400 --> 00:55:31,210 SPEAKER 1: Saya percaya Getm-- get int mengambil memori dari tumpukan 1241 00:55:31,210 --> 00:55:32,911 karena panggilan alokasi. 1242 00:55:32,911 --> 00:55:33,452 AUDIENCE: Oh. 1243 00:55:33,452 --> 00:55:33,951 OKE. 1244 00:55:33,951 --> 00:55:35,750 SPEAKER 1: Ya, malloc dan realloc. 1245 00:55:35,750 --> 00:55:37,120 Pertanyaan lain? 1246 00:55:37,120 --> 00:55:37,803 Ya. 1247 00:55:37,803 --> 00:55:40,650 >> AUDIENCE: Jadi dengan mendefinisikan ukuran buffering, 1248 00:55:40,650 --> 00:55:42,733 Anda mencegah seseorang dari mampu menyuntikkan kode 1249 00:55:42,733 --> 00:55:45,700 yang dapat meluncur melewati [tidak terdengar]. 1250 00:55:45,700 --> 00:55:48,130 >> SPEAKER 1: Jadi, dengan mendefinisikan ukuran buffer, 1251 00:55:48,130 --> 00:55:50,760 Anda mengatakan, OK inilah cara banyak memori kita dapat menggunakan. 1252 00:55:50,760 --> 00:55:55,550 Jika Anda memungkinkan pengguna untuk menulis di atasnya, maka Anda akan mengalami masalah. 1253 00:55:55,550 --> 00:55:57,930 Masuk akal. 1254 00:55:57,930 --> 00:55:59,370 Mengagumkan. 1255 00:55:59,370 --> 00:56:00,640 Mari kita bergerak bersama. 1256 00:56:00,640 --> 00:56:02,320 Baiklah. 1257 00:56:02,320 --> 00:56:06,652 Berbicara tentang kesalahan, di sini adalah beberapa pesan kesalahan umum 1258 00:56:06,652 --> 00:56:09,860 yang mungkin telah muncul saat Anda berada coding, bekerja pada set masalah Anda. 1259 00:56:09,860 --> 00:56:12,320 Kesempatan baik bahwa salah satu ini muncul di kuis 1260 00:56:12,320 --> 00:56:15,090 jika tahun terakhir adalah indikasi. 1261 00:56:15,090 --> 00:56:17,580 Jadi, jawaban yang sejenis di sini di papan. 1262 00:56:17,580 --> 00:56:19,510 Tetapi merasa bebas untuk berteriak lagi. 1263 00:56:19,510 --> 00:56:21,280 >> Mengapa kesalahan segmentasi terjadi? 1264 00:56:21,280 --> 00:56:24,279 Mengapa Anda mendapatkan kesalahan segmentasi ketika Anda menjalankan program anda? 1265 00:56:24,279 --> 00:56:26,760 1266 00:56:26,760 --> 00:56:28,230 >> AUDIENCE: [tidak terdengar]. 1267 00:56:28,230 --> 00:56:29,500 >> SPEAKER 1: Baik. 1268 00:56:29,500 --> 00:56:32,820 Ya, jika kita mencoba untuk mengakses memori yang tidak diberikan kepada kita. 1269 00:56:32,820 --> 00:56:34,610 Jika kita dereference pointer null. 1270 00:56:34,610 --> 00:56:38,610 Sebagai contoh, jika kita sebut malloc, dan lupa untuk memeriksa apakah itu nol, 1271 00:56:38,610 --> 00:56:42,250 dan kami hanya mencoba menggunakannya, komputer ini akan memberi kita kesalahan segmentasi. 1272 00:56:42,250 --> 00:56:42,750 Baik. 1273 00:56:42,750 --> 00:56:46,680 Bagaimana implisit deklarasi fungsi? 1274 00:56:46,680 --> 00:56:48,589 Maksudnya itu apa? 1275 00:56:48,589 --> 00:56:51,380 AUDIENCE: Anda mencoba untuk menggunakan fungsi yang Anda belum ditentukan. 1276 00:56:51,380 --> 00:56:52,130 SPEAKER 1: Baik. 1277 00:56:52,130 --> 00:56:54,504 Anda mencoba untuk menggunakan fungsi Anda belum didefinisikan. 1278 00:56:54,504 --> 00:56:56,000 Sehingga bisa menjadi salah satu dari dua hal. 1279 00:56:56,000 --> 00:56:59,320 Mungkin itu seperti contoh Camille menunjukkan Anda sebelumnya. 1280 00:56:59,320 --> 00:57:02,330 Dan Anda memiliki fungsi utama yang menyebut sesuatu yang disebut kubus. 1281 00:57:02,330 --> 00:57:04,371 Dan katakanlah Anda lupa menulis prototipe ini. 1282 00:57:04,371 --> 00:57:07,540 Anda lupa mengatakan, hey komputer, Saya memiliki fungsi ini disebut kubus. 1283 00:57:07,540 --> 00:57:09,380 Anda akan melihatnya nanti. 1284 00:57:09,380 --> 00:57:12,440 Katakanlah Anda lupa untuk menulis prototipe, Anda mungkin mendapatkan error ini. 1285 00:57:12,440 --> 00:57:14,820 Hal lain adalah, katakanlah Anda mencoba menggunakan printf, 1286 00:57:14,820 --> 00:57:16,880 dan lupa untuk menyertakan perpustakaan standar, 1287 00:57:16,880 --> 00:57:20,240 maka itu akan mengatakan implisit deklarasi fungsi. 1288 00:57:20,240 --> 00:57:22,800 Dan terakhir, namun tidak sedikit, identifier dideklarasikan. 1289 00:57:22,800 --> 00:57:23,300 Ya. 1290 00:57:23,300 --> 00:57:24,841 >> AUDIENCE: Anda punya ruang lingkup masalah. 1291 00:57:24,841 --> 00:57:28,728 Seperti mungkin Anda mencoba untuk memanggil variabel lokal yang 1292 00:57:28,728 --> 00:57:30,884 dalam jenis yang berbeda dari daerah. 1293 00:57:30,884 --> 00:57:33,550 SPEAKER 1: besar, jadi jika Anda memiliki variabel yang tidak dalam lingkup, 1294 00:57:33,550 --> 00:57:36,890 dan Anda mencoba untuk menggunakannya, Anda akan mendapat masalah. 1295 00:57:36,890 --> 00:57:40,960 Dan hanya lebih umum, katakanlah Anda mencoba untuk menggunakan x, dengan pernah mengatakan int 1296 00:57:40,960 --> 00:57:45,140 x sama dengan 5, maka Anda akan mengalami kesulitan. 1297 00:57:45,140 --> 00:57:47,640 Permisi, pertanyaan tentang ini? 1298 00:57:47,640 --> 00:57:49,330 Mengagumkan, menenggak kanan sepanjang. 1299 00:57:49,330 --> 00:57:55,692 >> OK, rekursi, mengapa might-- mari see-- saya kehilangan saya sch-- oh di sini kita pergi, 1300 00:57:55,692 --> 00:57:57,400 pastikan kami kasar pada jadwal. 1301 00:57:57,400 --> 00:57:59,060 Baiklah, keren. 1302 00:57:59,060 --> 00:58:03,150 OK, rekursi, ide umum rekursi, fungsi rekursif 1303 00:58:03,150 --> 00:58:05,380 adalah fungsi yang memanggil dirinya sendiri. 1304 00:58:05,380 --> 00:58:08,170 OK, jadi itulah yang saya maksud dengan konsep Program 1305 00:58:08,170 --> 00:58:11,130 dimana fungsi menyebut dirinya. 1306 00:58:11,130 --> 00:58:16,210 Apa yang akan menjadi some-- apa yang alasan yang baik untuk menggunakan rekursi? 1307 00:58:16,210 --> 00:58:17,550 Ketika mungkin itu berguna? 1308 00:58:17,550 --> 00:58:20,926 Atau whats program yang benar-benar cocok untuk rekursi? 1309 00:58:20,926 --> 00:58:22,330 >> AUDIENCE: Pencarian biner. 1310 00:58:22,330 --> 00:58:25,500 >> SPEAKER 1: pencarian biner cocok untuk rekursi, 1311 00:58:25,500 --> 00:58:29,060 karena Anda memiliki masalah ini yang Anda dapat terurai menjadi potongan-potongan kecil, 1312 00:58:29,060 --> 00:58:32,330 dan terus melakukan algoritma yang sama di atasnya. 1313 00:58:32,330 --> 00:58:37,790 Hal ini menyebabkan, dalam banyak kasus, lebih kode elegan itu lebih tepat. 1314 00:58:37,790 --> 00:58:40,500 Kami hanya adalah contoh pencarian biner. 1315 00:58:40,500 --> 00:58:43,100 Contoh lain adalah menggabungkan semacam. 1316 00:58:43,100 --> 00:58:45,920 Kadang-kadang, ketika Anda memikirkan algoritma, seperti faktorial, 1317 00:58:45,920 --> 00:58:47,410 itu hanya terasa rekursif, kan? 1318 00:58:47,410 --> 00:58:52,440 Karena kita tahu bahwa faktorial 5 adalah faktorial 4 kali 5. 1319 00:58:52,440 --> 00:58:56,080 Dan ketika Anda mengatur masalah seperti itu, itu hanya terasa rekursif. 1320 00:58:56,080 --> 00:58:58,530 Sehingga akan menjadi cara yang bagus untuk menulis itu. 1321 00:58:58,530 --> 00:58:59,425 Pertanyaan? 1322 00:58:59,425 --> 00:59:00,395 Iya nih. 1323 00:59:00,395 --> 00:59:01,850 >> AUDIENCE: Apa kasus dasar? 1324 00:59:01,850 --> 00:59:02,770 >> SPEAKER 1: Oh apa kasus dasar? 1325 00:59:02,770 --> 00:59:04,680 Aku berkata, jangan lupa untuk menyertakan kasus dasar. 1326 00:59:04,680 --> 00:59:07,690 Katakanlah kita sedang menulis fungsi faktorial, 1327 00:59:07,690 --> 00:59:09,620 dan kami melakukan faktorial dari 5. 1328 00:59:09,620 --> 00:59:12,352 Dan kita tahu faktorial dari 5 adalah 5 kali faktorial 4, 1329 00:59:12,352 --> 00:59:13,310 bla, bla, bla, bla. 1330 00:59:13,310 --> 00:59:14,360 Bagaimana kita tahu kapan harus berhenti? 1331 00:59:14,360 --> 00:59:16,276 Bagaimana kita tahu bahwa kita benar-benar memiliki nomor? 1332 00:59:16,276 --> 00:59:20,180 Karena jika kita terus memanggil faktorial, maka kita tidak akan pernah mendapatkan jawaban, kan? 1333 00:59:20,180 --> 00:59:24,470 Jadi ketika kita tahu bagaimana berhenti di contoh faktorial. 1334 00:59:24,470 --> 00:59:25,460 Siapapun, ya. 1335 00:59:25,460 --> 00:59:27,764 >> AUDIENCE: Ketika 1 faktorial adalah 1. 1336 00:59:27,764 --> 00:59:28,430 SPEAKER 1: Baik. 1337 00:59:28,430 --> 00:59:29,530 Jadi kita tahu. 1338 00:59:29,530 --> 00:59:33,400 Kita bisa mengambil begitu saja bahwa 1 faktorial adalah sama dengan 1. 1339 00:59:33,400 --> 00:59:36,570 Jadi jika kita mendapatkan ke titik di mana kita memanggil faktorial atas 1, 1340 00:59:36,570 --> 00:59:38,050 hanya pergi ke depan dan kembali 1. 1341 00:59:38,050 --> 00:59:39,180 Dan itu yang terjadi dasar Anda. 1342 00:59:39,180 --> 00:59:45,040 Karena kita tahu setelah kita memukul itu, dan kami selalu akan memukul itu, kami akan never-- 1343 00:59:45,040 --> 00:59:48,800 kita tidak akan hanya terus selamanya. 1344 00:59:48,800 --> 00:59:50,700 Pertanyaan lain pada rekursi? 1345 00:59:50,700 --> 00:59:51,630 Iya nih. 1346 00:59:51,630 --> 00:59:54,420 >> AUDIENCE: Jadi, ketika Anda kembali 1, itu hanya secara otomatis 1347 00:59:54,420 --> 00:59:56,290 akan menghentikan program, kan? 1348 00:59:56,290 --> 00:59:59,390 >> SPEAKER 1: Ya jadi ketika Anda memanggil kembali 1, if-- katakanlah, 1349 00:59:59,390 --> 01:00:04,480 katakanlah faktorial 2 panggilan faktorial dari 1, faktorial dari 1 1350 01:00:04,480 --> 01:00:06,120 hanya akan menyerahkan kembali 1. 1351 01:00:06,120 --> 01:00:12,790 Dan sekarang faktorial 2 akan mengatakan OK, 2 kali 1 adalah 2, dan kembali jawaban itu. 1352 01:00:12,790 --> 01:00:14,260 Iya nih. 1353 01:00:14,260 --> 01:00:16,710 >> AUDIENCE: Apakah kita perlu khawatir tentang ruang lingkup di rekursi 1354 01:00:16,710 --> 01:00:20,150 ketika Anda pergi ke sebuah algoritma? 1355 01:00:20,150 --> 01:00:21,880 >> SPEAKER 1: Ah, ya. 1356 01:00:21,880 --> 01:00:25,060 Ya, Anda perlu khawatir tentang lingkup dalam konteks rekursi. 1357 01:00:25,060 --> 01:00:29,820 Sehingga hanya variabel didefinisikan dalam menjalankan fungsi 1358 01:00:29,820 --> 01:00:32,170 akan berguna. 1359 01:00:32,170 --> 01:00:33,792 Ya pertanyaan yang bagus. 1360 01:00:33,792 --> 01:00:35,250 Baiklah, mari kita terus bergerak bersama. 1361 01:00:35,250 --> 01:00:37,320 Karena kita memiliki banyak bahan untuk melewati. 1362 01:00:37,320 --> 01:00:41,080 Tapi seperti yang saya katakan, jangan ragu untuk memukul jam kantor, atau kita setelah fakta. 1363 01:00:41,080 --> 01:00:42,850 >> Ini hanya slide benar-benar cepat. 1364 01:00:42,850 --> 01:00:45,150 Kami belajar banyak tentang pencarian dan macam. 1365 01:00:45,150 --> 01:00:47,400 Mohon mohon mohon, bagian ini secara online, 1366 01:00:47,400 --> 01:00:51,240 Saya percaya di cs50.net/quizzes. 1367 01:00:51,240 --> 01:00:53,762 Jadi pergi mengambil grafik ini dan meletakkannya di lembar ulasan Anda, 1368 01:00:53,762 --> 01:00:55,470 karena akan ada pertanyaan tentang ini. 1369 01:00:55,470 --> 01:00:56,682 Jangan melakukan kesalahan. 1370 01:00:56,682 --> 01:00:58,390 Hanya sangat cepat, apa grafik ini berarti, 1371 01:00:58,390 --> 01:01:04,370 itu berbicara tentang o besar, yang kita tahu menjadi batas atas suatu algoritma 1372 01:01:04,370 --> 01:01:05,150 waktu berjalan. 1373 01:01:05,150 --> 01:01:08,080 Dan kami memiliki omega, yang akan menjadi batas bawah 1374 01:01:08,080 --> 01:01:10,290 sebuah runtime algoritma. 1375 01:01:10,290 --> 01:01:10,840 OKE? 1376 01:01:10,840 --> 01:01:12,480 >> AUDIENCE: [tidak terdengar]. 1377 01:01:12,480 --> 01:01:12,800 >> SPEAKER 1: Ya, apa hal terakhir? 1378 01:01:12,800 --> 01:01:13,380 Apa theta? 1379 01:01:13,380 --> 01:01:16,850 Hal ini jika we-- kita hanya akan peduli di kelas ini dalam kasus 1380 01:01:16,850 --> 01:01:19,381 di mana kami batas atas dan batas bawah kami adalah sama. 1381 01:01:19,381 --> 01:01:22,005 Ya, itulah satu-satunya waktu itu akan datang di kelas ini. 1382 01:01:22,005 --> 01:01:23,320 OK, aku akan terus berjalan. 1383 01:01:23,320 --> 01:01:26,490 Jika Anda tidak mengambil gambar Anda, Aku berjanji ini akan online. 1384 01:01:26,490 --> 01:01:28,220 >> OK, mengagumkan, struct. 1385 01:01:28,220 --> 01:01:29,810 Mengapa kita ingin struct? 1386 01:01:29,810 --> 01:01:34,110 Apa alasan yang berguna kita mungkin ingin struct. 1387 01:01:34,110 --> 01:01:36,277 Seseorang berteriak sesuatu. 1388 01:01:36,277 --> 01:01:38,110 Nah mari kita lihat pada contoh di papan tulis. 1389 01:01:38,110 --> 01:01:41,090 Katakanlah kita sedang berhadapan dengan semua siswa ini. 1390 01:01:41,090 --> 01:01:44,900 Jika kita membuat program untuk CS50, ada seperti 800 orang. 1391 01:01:44,900 --> 01:01:47,890 Kita perlu write-- kita akan perlu menangani banyak informasi 1392 01:01:47,890 --> 01:01:49,020 tentang siswa. 1393 01:01:49,020 --> 01:01:50,990 Akan lebih baik jika kita bisa jenis kelompok 1394 01:01:50,990 --> 01:01:54,460 this-- semua informasi yang hubungannya dengan mahasiswa tertentu 1395 01:01:54,460 --> 01:01:56,027 menjadi salah satu jenis data. 1396 01:01:56,027 --> 01:01:58,360 Tapi kita tahu ada data ketik disebut, Mahasiswa, kan? 1397 01:01:58,360 --> 01:02:01,890 Kami memiliki sebuah integer, kita memiliki pelampung, kita memiliki string, atau bintang char, 1398 01:02:01,890 --> 01:02:03,920 tapi kami tidak punya, mahasiswa. 1399 01:02:03,920 --> 01:02:08,680 >> Jadi kita bisa lakukan adalah benar-benar jenis mendefinisikan struktur kita sendiri, sebut saja mahasiswa, 1400 01:02:08,680 --> 01:02:12,440 dan kita dapat mengasosiasikan beberapa bidang yang berbeda dengan struct itu. 1401 01:02:12,440 --> 01:02:14,410 Jadi dalam hal ini, mari kita mengatakan bahwa kita memiliki seorang mahasiswa. 1402 01:02:14,410 --> 01:02:17,350 Dan hal-hal yang kita peduli tentang adalah jumlah siswa ID 1403 01:02:17,350 --> 01:02:19,500 dan nama siswa. 1404 01:02:19,500 --> 01:02:24,175 Dan sekarang kita bisa mengasosiasikan ID ini dan nama ini dengan mahasiswa diberikan. 1405 01:02:24,175 --> 01:02:25,300 Jadi mari kita lihat beberapa contoh. 1406 01:02:25,300 --> 01:02:28,860 1407 01:02:28,860 --> 01:02:33,490 >> OK, jadi di sini saya katakan, OK, mari kita mengatakan kami ingin membuat mahasiswa. 1408 01:02:33,490 --> 01:02:35,050 Aku memanggilnya siswa 1. 1409 01:02:35,050 --> 01:02:38,850 Dan nomor ID nya, di kasus ini, kita dapat mengakses 1410 01:02:38,850 --> 01:02:45,200 dengan hanya melakukan nama siswa dot bidang kita ingin mengakses. 1411 01:02:45,200 --> 01:02:49,110 Jadi ini akan hanya menjadi mahasiswa 1 dot ID, dan kami mengaturnya sama dengan 1. 1412 01:02:49,110 --> 01:02:52,300 Karena ingat, kita mengatakan bahwa ID akan menjadi integer. 1413 01:02:52,300 --> 01:02:56,540 Dan sangat mirip, kita dapat mengatakan, ini Nama siswa akan menjadi Davin, 1414 01:02:56,540 --> 01:02:57,760 sebagai contoh. 1415 01:02:57,760 --> 01:03:01,420 Jadi kami hanya dapat mengakses lapangan dari struct menggunakan dot ini. 1416 01:03:01,420 --> 01:03:03,098 Pertanyaan itu? 1417 01:03:03,098 --> 01:03:03,598 Ya. 1418 01:03:03,598 --> 01:03:05,582 >> AUDIENCE: Apakah ada cara untuk melindungi variabel Anda? 1419 01:03:05,582 --> 01:03:08,560 Apakah ada cara untuk melindungi variabel dari yang eksternal diakses? 1420 01:03:08,560 --> 01:03:10,726 >> SPEAKER 1: Apakah ada pula untuk melindungi variabel Anda 1421 01:03:10,726 --> 01:03:12,680 dari yang eksternal diakses? 1422 01:03:12,680 --> 01:03:13,750 Tidak dalam lingkup CS50. 1423 01:03:13,750 --> 01:03:16,680 1424 01:03:16,680 --> 01:03:17,977 Pertanyaan lain? 1425 01:03:17,977 --> 01:03:18,476 Ya. 1426 01:03:18,476 --> 01:03:18,942 >> AUDIENCE: Apa struct typedef? 1427 01:03:18,942 --> 01:03:20,192 Apa artinya setiap komponen? 1428 01:03:20,192 --> 01:03:22,937 1429 01:03:22,937 --> 01:03:24,520 SPEAKER 1: Ah, apa struct typedef? 1430 01:03:24,520 --> 01:03:26,240 Apa setiap komponen berarti orang ini? 1431 01:03:26,240 --> 01:03:26,850 >> AUDIENCE: Ya. 1432 01:03:26,850 --> 01:03:27,683 >> SPEAKER 1: OK, keren. 1433 01:03:27,683 --> 01:03:31,200 Jadi ini mengatakan, hey komputer, saya ingin membuat struktur baru. 1434 01:03:31,200 --> 01:03:34,970 Dan aku akan menentukan definisi untuk itu, sehingga saya bisa menggunakannya 1435 01:03:34,970 --> 01:03:37,520 seolah-olah itu tipe seluruh program saya. 1436 01:03:37,520 --> 01:03:39,300 OK, jadi saya ingin mendefinisikan struktur. 1437 01:03:39,300 --> 01:03:41,650 Dan aku sekarang akan menjadi dapat menggunakannya sebagai tipe. 1438 01:03:41,650 --> 01:03:43,400 Dan namanya adalah mahasiswa. 1439 01:03:43,400 --> 01:03:45,730 Dan di sini adalah bidang nya. 1440 01:03:45,730 --> 01:03:48,130 >> AUDIENCE: Jadi adalah bahwa typedef struct [tidak terdengar]? 1441 01:03:48,130 --> 01:03:50,592 1442 01:03:50,592 --> 01:03:53,800 SPEAKER 1: Jika Anda ingin dapat menggunakan struct ini seluruh program Anda, 1443 01:03:53,800 --> 01:03:57,910 dan dalam kebanyakan kasus di CS50 kami lakukan, kita harus mengatakan jenis Def. 1444 01:03:57,910 --> 01:04:01,190 Dan yang memungkinkan untuk menggunakannya sama Cara yang kita gunakan seperti int atau float. 1445 01:04:01,190 --> 01:04:04,168 Komputer akan selalu tahu apa itu. 1446 01:04:04,168 --> 01:04:04,668 Ya. 1447 01:04:04,668 --> 01:04:06,560 >> AUDIENCE: Dapatkah kita menulis ini dalam file header? 1448 01:04:06,560 --> 01:04:07,060 >> SPEAKER 1: Oh, maaf. 1449 01:04:07,060 --> 01:04:08,600 Apakah kita menulis ini dalam file header? 1450 01:04:08,600 --> 01:04:11,410 Anda bisa menulis ini di bagian atas Anda Program, di bagian atas program c Anda. 1451 01:04:11,410 --> 01:04:13,010 Ya, itu akan menjadi yang paling Tempat wajar untuk itu. 1452 01:04:13,010 --> 01:04:13,509 Kembali ke sana. 1453 01:04:13,509 --> 01:04:15,704 AUDIENCE: pertanyaan yang sama, jadi sebelum main? 1454 01:04:15,704 --> 01:04:18,870 SPEAKER 1: Benar, Anda perlu ini menjadi suatu tempat yang semua orang bisa mengaksesnya. 1455 01:04:18,870 --> 01:04:20,612 Jadi sebelum utama dalam kasus Anda, ya. 1456 01:04:20,612 --> 01:04:23,820 AUDIENCE: Apakah ada perbedaan antara menempatkan siswa di atas dan di bawah? 1457 01:04:23,820 --> 01:04:25,810 SPEAKER 1: Ah, apakah ada perbedaan antara menempatkan siswa 1458 01:04:25,810 --> 01:04:26,840 di atas atau di bawah? 1459 01:04:26,840 --> 01:04:29,650 Let-- menyimpan pertanyaan itu, dan ketika kita sampai ke daftar terkait, 1460 01:04:29,650 --> 01:04:31,020 kita akan melihat bahwa, OK? 1461 01:04:31,020 --> 01:04:32,750 Jadi berpegang pada itu untuk satu detik. 1462 01:04:32,750 --> 01:04:37,080 Hal terakhir yang saya ingin menyebutkan di sini, adalah bukan memiliki struktur, 1463 01:04:37,080 --> 01:04:41,180 kami memiliki pointer ke struktur, kita bisa mengubah notasi kami 1464 01:04:41,180 --> 01:04:42,480 menjadi sedikit lebih bagus. 1465 01:04:42,480 --> 01:04:45,810 >> Kita dapat mengatakan, katakanlah kita memiliki pointer ke siswa bukan hanya 1466 01:04:45,810 --> 01:04:47,040 mahasiswa. 1467 01:04:47,040 --> 01:04:52,460 Jika kita ingin akses ke lapangan, bukannya Melakukan, juga pergi dereference pointer, 1468 01:04:52,460 --> 01:04:54,100 dan kemudian mengakses nama field. 1469 01:04:54,100 --> 01:04:57,310 Notasi ini terlihat sedikit berantakan dengan bintang di titik ini. 1470 01:04:57,310 --> 01:05:00,790 Benar-benar benar, tetapi jenis dari cara bersih untuk melakukannya, 1471 01:05:00,790 --> 01:05:03,280 hanya untuk mengatakan nama pointer panah. 1472 01:05:03,280 --> 01:05:11,460 Dan yang benar-benar menggabungkan dereferencing dan mengakses dalam satu simbol yang indah. 1473 01:05:11,460 --> 01:05:12,470 Pertanyaan itu? 1474 01:05:12,470 --> 01:05:13,760 >> AUDIENCE: Hanya mengatakan bahwa sekali lagi. 1475 01:05:13,760 --> 01:05:14,480 >> SPEAKER 1: Katakanlah bahwa sekali lagi. 1476 01:05:14,480 --> 01:05:16,021 >> AUDIENCE: Tepat apa yang Anda katakan. 1477 01:05:16,021 --> 01:05:17,870 SPEAKER 1: Tentu, tepatnya apa yang saya katakan. 1478 01:05:17,870 --> 01:05:21,580 Jika kita memiliki pointer ke mahasiswa daripada siswa itu sendiri, 1479 01:05:21,580 --> 01:05:25,410 kami can-- salah satu cara yang kita dapat mengakses lapangan adalah untuk dereference itu, dan kemudian 1480 01:05:25,410 --> 01:05:27,110 Nama akses. 1481 01:05:27,110 --> 01:05:29,040 Lain, cara yang lebih baik kami dapat melakukannya, yang hanya 1482 01:05:29,040 --> 01:05:33,550 sedikit gula sintaksis, hanya untuk melakukan pointer nama panah. 1483 01:05:33,550 --> 01:05:38,190 Dan yang akan menggabungkan dereferencing dan mengakses itu. 1484 01:05:38,190 --> 01:05:40,400 Ya, cukup keren. 1485 01:05:40,400 --> 01:05:41,260 Baiklah. 1486 01:05:41,260 --> 01:05:44,390 >> Jadi mari kita bicara tentang pertanyaan lainnya. 1487 01:05:44,390 --> 01:05:46,520 Mari melompat ke node, yang kita akan menggunakan 1488 01:05:46,520 --> 01:05:49,120 di daftar terkait hanya dalam detik. 1489 01:05:49,120 --> 01:05:53,580 Jadi di sini, Anda akan melihat bahwa ada adalah simpul kata kedua di bawah, 1490 01:05:53,580 --> 01:05:55,160 dan di atas. 1491 01:05:55,160 --> 01:05:59,040 Sebelum, ketika kami mendefinisikan mahasiswa, kami hanya memiliki mahasiswa di bagian bawah. 1492 01:05:59,040 --> 01:06:00,470 Kami tidak memiliki siswa di atas. 1493 01:06:00,470 --> 01:06:01,902 Ada yang tahu mengapa yang mungkin? 1494 01:06:01,902 --> 01:06:02,860 Apa perbedaan? 1495 01:06:02,860 --> 01:06:03,360 Ya. 1496 01:06:03,360 --> 01:06:06,212 AUDIENCE: Jadi Anda menggunakan simpul adalah definisi node, 1497 01:06:06,212 --> 01:06:08,254 jadi itu hal yang rekursif? 1498 01:06:08,254 --> 01:06:08,920 SPEAKER 1: Baik. 1499 01:06:08,920 --> 01:06:13,230 Ya, kita perlu node untuk memiliki pointer ke node lain. 1500 01:06:13,230 --> 01:06:17,640 Jadi karena kita menggunakan jenis sebelum itu sebenarnya didefinisikan, 1501 01:06:17,640 --> 01:06:20,613 kita harus meletakkannya di atas hanya sehingga tahu apa itu. 1502 01:06:20,613 --> 01:06:22,446 AUDIENCE: Jadi kita masih membutuhkannya di bagian bawah? 1503 01:06:22,446 --> 01:06:23,338 SPEAKER 1: Ya. 1504 01:06:23,338 --> 01:06:24,754 AUDIENCE: Jadi selalu di bagian bawah. 1505 01:06:24,754 --> 01:06:26,090 SPEAKER 1: Selalu di bagian bawah. 1506 01:06:26,090 --> 01:06:29,410 Jadi semua Anda akan memilikinya di bagian bawah. 1507 01:06:29,410 --> 01:06:30,720 Ada pertanyaan lain? 1508 01:06:30,720 --> 01:06:33,511 Baiklah, sehingga memungkinkan benar-benar berbicara tentang terkait daftar benar-benar cepat. 1509 01:06:33,511 --> 01:06:36,510 Jadi daftar terkait are-- kita menggunakannya bukannya array dalam beberapa kasus, 1510 01:06:36,510 --> 01:06:40,030 karena kita tahu bahwa array adalah panjang tetap, sedangkan daftar terkait 1511 01:06:40,030 --> 01:06:42,670 kita dapat tumbuh dan menyusut seperti yang kita inginkan. 1512 01:06:42,670 --> 01:06:45,790 Jadi ini adalah contoh dari apa yang linked list mungkin terlihat seperti. 1513 01:06:45,790 --> 01:06:48,590 Apa yang kita butuhkan untuk melihat adalah kepala daftar. 1514 01:06:48,590 --> 01:06:50,330 Jadi di mana daftar dimulai. 1515 01:06:50,330 --> 01:06:53,010 Dan kemudian dia simpul, masing-masing simpul berikutnya, adalah 1516 01:06:53,010 --> 01:06:55,880 jawab untuk mengetahui di mana node berikutnya adalah. 1517 01:06:55,880 --> 01:07:00,950 Jadi dalam hal ini, node yang menyimpan 1 bertanggung jawab untuk mengetahui di mana 3 adalah. 1518 01:07:00,950 --> 01:07:04,540 Orang yang menyimpan 3 adalah jawab untuk mengetahui di mana 9 adalah. 1519 01:07:04,540 --> 01:07:06,230 Dan 9 tidak memiliki orang lain untuk menunjuk ke. 1520 01:07:06,230 --> 01:07:08,750 Ini akhir dari daftar, sehingga hanya mengatakan null. 1521 01:07:08,750 --> 01:07:09,250 OKE? 1522 01:07:09,250 --> 01:07:10,530 >> AUDIENCE: Apa gunanya ini? 1523 01:07:10,530 --> 01:07:11,480 >> SPEAKER 1: Apa gunanya ini? 1524 01:07:11,480 --> 01:07:12,105 >> AUDIENCE: Ya. 1525 01:07:12,105 --> 01:07:15,390 SPEAKER 1: Karena, mari kita mengatakan bahwa kita memiliki beberapa data. 1526 01:07:15,390 --> 01:07:18,480 Dan kita tidak tahu persis bagaimana banyak data yang kita inginkan sebelumnya. 1527 01:07:18,480 --> 01:07:22,479 Jadi dengan array, katakanlah di mana kita ingin menghitung orang di baris pertama. 1528 01:07:22,479 --> 01:07:24,020 Kemungkinan itu tidak akan berubah. 1529 01:07:24,020 --> 01:07:28,120 Kami hanya bisa mengatakan, OK, saya ingin array ukuran enam. 1530 01:07:28,120 --> 01:07:30,120 Tetapi jika kita menginginkan sesuatu itu akan berubah. 1531 01:07:30,120 --> 01:07:32,900 >> Sebagai contoh, katakanlah saya sedang berusaha untuk melacak siswa 1532 01:07:32,900 --> 01:07:35,330 karena mereka datang ke ruangan untuk sesi ulasan. 1533 01:07:35,330 --> 01:07:38,420 Saya tidak tahu berapa banyak dari Anda orang-orang akan muncul. 1534 01:07:38,420 --> 01:07:43,094 Jadi saya mungkin ingin struktur data bahwa saya dapat memperluas dan menyusut. 1535 01:07:43,094 --> 01:07:45,510 Karena mungkin seseorang akan pergi, mungkin seseorang akan datang. 1536 01:07:45,510 --> 01:07:48,386 Dan setiap saat, kita dapat menambah atau menghapus node. 1537 01:07:48,386 --> 01:07:49,771 Keren, pertanyaan besar. 1538 01:07:49,771 --> 01:07:50,270 Ya. 1539 01:07:50,270 --> 01:07:52,311 >> AUDIENCE: Jika Anda dapat menggunakan sesuatu seperti GetString 1540 01:07:52,311 --> 01:07:55,750 yang membuat membiarkan Anda mendapatkan lebih banyak data Anda membutuhkannya, mengapa Anda perlu ini juga? 1541 01:07:55,750 --> 01:07:57,625 >> SPEAKER 1: Mengapa Anda menggunakan daftar bila dikaitkan 1542 01:07:57,625 --> 01:07:59,440 Anda dapat menggunakan sesuatu seperti GetString? 1543 01:07:59,440 --> 01:08:01,640 Itu pertanyaan yang bagus. 1544 01:08:01,640 --> 01:08:04,240 Ingat bahwa Get-- salah downfalls GetString 1545 01:08:04,240 --> 01:08:06,750 adalah bahwa kita tidak melakukan sangat pekerjaan yang baik membebaskan memori itu, 1546 01:08:06,750 --> 01:08:09,320 dan kami memperkenalkan sekelompok kebocoran memori ke dalam program Anda? 1547 01:08:09,320 --> 01:08:15,037 Anda bisa mengambil sebuah statis berbagai ukuran dan terus berkembang itu. 1548 01:08:15,037 --> 01:08:16,870 Tapi Anda harus menemukan tempat-tempat baru di memori. 1549 01:08:16,870 --> 01:08:18,359 Itu hanya akan menjadi banyak overhead. 1550 01:08:18,359 --> 01:08:21,050 >> Salah satu hal yang menyenangkan tentang terkait daftar sebagai lawan array, array adalah 1551 01:08:21,050 --> 01:08:22,830 semua di lokasi yang sama di memori. 1552 01:08:22,830 --> 01:08:25,540 Itu harus terus menerus potongan memori. 1553 01:08:25,540 --> 01:08:29,920 Sedangkan daftar terhubung, 2 dan 3 Mei sepenuhnya di lokasi yang berbeda. 1554 01:08:29,920 --> 01:08:31,880 Seperti 2 adalah di sini, dan 3 adalah di sini. 1555 01:08:31,880 --> 01:08:34,421 Dan selama mereka memiliki pointer satu sama lain, itu baik-baik saja. 1556 01:08:34,421 --> 01:08:35,830 Kita tahu kita bisa menemukan mereka. 1557 01:08:35,830 --> 01:08:37,084 Pertanyaan di sana? 1558 01:08:37,084 --> 01:08:40,563 >> AUDIENCE: GetString adalah fungsi di perpustakaan CS50, kan? 1559 01:08:40,563 --> 01:08:42,060 Ini tidak ada dalam program-program nyata. 1560 01:08:42,060 --> 01:08:42,851 >> SPEAKER 1: Benar. 1561 01:08:42,851 --> 01:08:44,130 Benar, itu hal lain. 1562 01:08:44,130 --> 01:08:47,210 GetString tidak ada di luar konteks CS50. 1563 01:08:47,210 --> 01:08:47,710 Ya. 1564 01:08:47,710 --> 01:08:54,556 >> AUDIENCE: Begitu juga fakta bahwa dua bisa benar-benar jauh terpisah, 1565 01:08:54,556 --> 01:08:59,859 apakah dampak efisiensi mengakses elemen dalam daftar? 1566 01:08:59,859 --> 01:09:01,359 SPEAKER 1: Itu adalah sebuah pertanyaan besar. 1567 01:09:01,359 --> 01:09:04,278 Pertanyaannya adalah, apakah itu dampak efisiensi mengakses 1568 01:09:04,278 --> 01:09:05,819 unsur-unsur yang berbeda dalam daftar. 1569 01:09:05,819 --> 01:09:06,930 Sebenarnya ya. 1570 01:09:06,930 --> 01:09:09,569 Karena kita tahu if-- mari mengatakan kita ingin mengakses 1571 01:09:09,569 --> 01:09:14,520 elemen kedua dari array, kita tahu kita hanya bisa melakukan berbagai bracket 1, kanan. 1572 01:09:14,520 --> 01:09:16,630 Itu selalu akan menjadi lokasi yang sama. 1573 01:09:16,630 --> 01:09:20,720 Tetapi jika kita ingin mendapatkan itu 3, kita tidak bisa hanya mengatakan, pergi mendapatkan bahwa 3. 1574 01:09:20,720 --> 01:09:24,009 Kita harus mengatakan, OK, mulai dari awal daftar, 1575 01:09:24,009 --> 01:09:26,050 dan sekarang kami benar-benar memiliki berjalan melalui sampai kita 1576 01:09:26,050 --> 01:09:28,149 menemukan nomor kita tertarik. 1577 01:09:28,149 --> 01:09:30,790 >> Jadi dalam hal ini kita katakan, OK ini adalah nomor pertama. 1578 01:09:30,790 --> 01:09:32,207 Jadi pada dasarnya, itu indeks 0. 1579 01:09:32,207 --> 01:09:33,790 Sekarang kita harus menemukan nomor kedua. 1580 01:09:33,790 --> 01:09:34,740 Itu index 1. 1581 01:09:34,740 --> 01:09:39,180 Sehingga benar-benar akan to-- hanya mengakses, akan mengambil waktu N. 1582 01:09:39,180 --> 01:09:42,027 Keren, N. tua besar Ya. 1583 01:09:42,027 --> 01:09:43,903 >> AUDIENCE: Apa setiap daftar? 1584 01:09:43,903 --> 01:09:45,401 Apakah mereka masing-masing array, atau apa? 1585 01:09:45,401 --> 01:09:46,859 SPEAKER 1: Itu pertanyaan yang bagus. 1586 01:09:46,859 --> 01:09:48,950 Apa masing-masing struktur yang saya sudah ditarik? 1587 01:09:48,950 --> 01:09:51,649 Mereka adalah node. 1588 01:09:51,649 --> 01:09:53,720 Jadi masing-masing sedikit Struktur memiliki dua bagian. 1589 01:09:53,720 --> 01:09:55,264 Ini memiliki integer yang memegang. 1590 01:09:55,264 --> 01:09:57,180 Itulah data aktual bahwa itu memegang. 1591 01:09:57,180 --> 01:09:58,770 Itulah jenis bagian yang berguna. 1592 01:09:58,770 --> 01:10:00,820 Dan, ini adalah apa yang membuat daftar link, 1593 01:10:00,820 --> 01:10:03,690 memiliki pointer ke node berikutnya. 1594 01:10:03,690 --> 01:10:05,260 Pertanyaan mengagumkan. 1595 01:10:05,260 --> 01:10:11,320 Baiklah, jadi mari kita lihat sangat cepat melihat beberapa contoh dari apa yang 1596 01:10:11,320 --> 01:10:12,820 kita mungkin lakukan dengan daftar terkait. 1597 01:10:12,820 --> 01:10:16,920 >> Jadi salah satu contoh yang sangat cepat adalah, misalkan kita ingin melakukan pencarian. 1598 01:10:16,920 --> 01:10:20,240 Apa jenis pencarian tidak bisa kita lakukan pada daftar terkait? 1599 01:10:20,240 --> 01:10:21,150 >> AUDIENCE: Binary. 1600 01:10:21,150 --> 01:10:21,900 >> SPEAKER 1: Binary. 1601 01:10:21,900 --> 01:10:23,408 Mengapa kita tidak bisa menggunakan pencarian biner? 1602 01:10:23,408 --> 01:10:25,181 >> AUDIENCE: [tidak terdengar]. 1603 01:10:25,181 --> 01:10:28,180 SPEAKER 1: Benar, karena dengan biner pencarian, kita harus bergantung pada kenyataan 1604 01:10:28,180 --> 01:10:31,300 bahwa kita hanya bisa melompat ke dalam array pada setiap titik. 1605 01:10:31,300 --> 01:10:33,420 Kami hanya bisa mengatakan, pergi ke elemen tengah. 1606 01:10:33,420 --> 01:10:35,550 Dengan sini, seperti yang kita katakan sedikit sebelumnya, 1607 01:10:35,550 --> 01:10:37,270 kita tidak bisa hanya melompat ke elemen tengah. 1608 01:10:37,270 --> 01:10:38,978 Dalam rangka untuk menemukan elemen, kita benar-benar 1609 01:10:38,978 --> 01:10:40,780 harus berjalan melalui seluruh daftar kami. 1610 01:10:40,780 --> 01:10:43,910 >> Jadi jika kita ingin melakukan pencarian, yang terbaik yang bisa kita lakukan hanyalah pencarian linear. 1611 01:10:43,910 --> 01:10:45,910 Kami mulai kepala, kita check-- katakanlah kami 1612 01:10:45,910 --> 01:10:47,790 mencari 9-- kita mulai di kepala. 1613 01:10:47,790 --> 01:10:49,200 Kita katakan, adalah 9 ini? 1614 01:10:49,200 --> 01:10:49,710 Tidak. 1615 01:10:49,710 --> 01:10:50,430 Adalah 9 ini? 1616 01:10:50,430 --> 01:10:50,930 Tidak. 1617 01:10:50,930 --> 01:10:51,620 Adalah 9 ini? 1618 01:10:51,620 --> 01:10:53,730 Ya, kami menemukan itu. 1619 01:10:53,730 --> 01:10:56,350 OK, itu semua itu. 1620 01:10:56,350 --> 01:10:57,940 Berikut sedikit pseudo-code. 1621 01:10:57,940 --> 01:11:01,420 Aku akan meninggalkan ini untuk Anda orang untuk churn lebih pada Anda sendiri, 1622 01:11:01,420 --> 01:11:04,370 hanya karena kita menjalankan sedikit pendek pada waktu. 1623 01:11:04,370 --> 01:11:05,610 >> Mari kita bicara tentang penyisipan. 1624 01:11:05,610 --> 01:11:08,644 Kami melihat demo benar-benar keren dari ini di kuliah di mana kita mengatakan, 1625 01:11:08,644 --> 01:11:11,560 OK, kita memiliki daftar ini terkait mana semua orang menunjuk ke satu sama lain, 1626 01:11:11,560 --> 01:11:13,400 dan seseorang muncul di panggung. 1627 01:11:13,400 --> 01:11:17,050 Bagaimana kita memasukkan bahwa orang dalam linked list kami? 1628 01:11:17,050 --> 01:11:20,150 Nah, cara yang salah untuk melakukan, yang adalah saya pikir apa yang kita lihat pertama, 1629 01:11:20,150 --> 01:11:22,740 adalah ketika orang di depan secara otomatis 1630 01:11:22,740 --> 01:11:25,270 menunjuk orang baru. 1631 01:11:25,270 --> 01:11:29,057 Dan kemudian kami jenis meninggalkan paruh kedua daftar, kan? 1632 01:11:29,057 --> 01:11:31,390 Karena kita tidak tahu di mana itu adalah dalam memori lagi. 1633 01:11:31,390 --> 01:11:34,750 Jadi untuk sangat berhati-hati tentang urutan kita memasukkan hal-hal. 1634 01:11:34,750 --> 01:11:37,860 >> Jadi di sini, katakanlah kita ingin menempatkan 1 di depan daftar kami. 1635 01:11:37,860 --> 01:11:42,190 Pertama, kita memiliki 1 poin di element-- kedua atau elemen 1636 01:11:42,190 --> 01:11:44,170 yang berisi 1. 1637 01:11:44,170 --> 01:11:47,210 Jadi, kami melakukan itu, supaya kita tidak akan kehilangan babak kedua. 1638 01:11:47,210 --> 01:11:51,020 Dan sekarang, kita dapat memiliki titik kepala ke 1. 1639 01:11:51,020 --> 01:11:52,930 Jadi sekali lagi, ini hanya seperti tingkat super tinggi. 1640 01:11:52,930 --> 01:11:55,290 Ini adalah bagaimana kita akan memasukkan sebuah node. 1641 01:11:55,290 --> 01:11:57,337 Kami memiliki banyak pseudo-kode di sini-maaf, 1642 01:11:57,337 --> 01:11:59,170 Aku tidak tahu mengapa aku menyebutnya pseudo-code. 1643 01:11:59,170 --> 01:12:00,350 Ini kode aktual. 1644 01:12:00,350 --> 01:12:02,570 Anda dapat pergi check it out nanti. 1645 01:12:02,570 --> 01:12:04,870 >> Baiklah, mari kita sangat quickly-- pertanyaan lagi 1646 01:12:04,870 --> 01:12:07,120 pada daftar terkait sebelum aku pindah ke beberapa data lain 1647 01:12:07,120 --> 01:12:08,450 struktur dalam 10 menit terakhir. 1648 01:12:08,450 --> 01:12:10,340 >> AUDIENCE: Apakah kita perlu sekarang bagaimana menulis pada tes? 1649 01:12:10,340 --> 01:12:11,040 >> SPEAKER 1: Apakah kita perlu tahu bagaimana to-- 1650 01:12:11,040 --> 01:12:12,030 >> AUDIENCE: Menulis pada tes. 1651 01:12:12,030 --> 01:12:14,071 >> SPEAKER 1: Kami membutuhkan to-- Anda harus siap 1652 01:12:14,071 --> 01:12:18,870 menulis, insert, menghapus, dan mencari daftar terkait pada tes. 1653 01:12:18,870 --> 01:12:21,480 Itu adalah sesuatu yang kita bisa mengharapkan Anda untuk melakukan. 1654 01:12:21,480 --> 01:12:22,750 Hanya pergi di atasnya. 1655 01:12:22,750 --> 01:12:26,460 Jika Anda memiliki pertanyaan pada kode, menembak TF Anda email, 1656 01:12:26,460 --> 01:12:27,750 datang ke kantor jam. 1657 01:12:27,750 --> 01:12:30,041 Masih ada banyak waktu untuk belajar, tidak perlu khawatir. 1658 01:12:30,041 --> 01:12:32,290 Baiklah, apapun lainnya pertanyaan tentang daftar terhubung? 1659 01:12:32,290 --> 01:12:32,986 Iya nih. 1660 01:12:32,986 --> 01:12:37,360 >> AUDIENCE: Jadi, jika Anda tidak menggunakan pointer untuk pergi ke satu di sebelah kanan 1661 01:12:37,360 --> 01:12:41,308 sebelum Anda menggunakan pointer untuk satu di sebelah kiri, yang 1662 01:12:41,308 --> 01:12:43,211 setara dengan menghapus segalanya, kan? 1663 01:12:43,211 --> 01:12:43,877 SPEAKER 1: Ya. 1664 01:12:43,877 --> 01:12:44,820 AUDIENCE: [tidak terdengar]. 1665 01:12:44,820 --> 01:12:47,570 SPEAKER 1: Benar, karena kita tidak bisa mendapatkannya, itu sebenarnya lebih buruk. 1666 01:12:47,570 --> 01:12:50,690 Karena kita tidak hanya tidak tahu mana itu, kita tidak bisa lagi menggunakannya, 1667 01:12:50,690 --> 01:12:53,580 tapi we've-- kami tidak membebaskan memori itu lagi. 1668 01:12:53,580 --> 01:12:58,570 Jadi itu hanya berkeliaran dan tidak berguna karena kita tidak dapat menemukannya. 1669 01:12:58,570 --> 01:12:59,580 Ya, pertanyaan keren. 1670 01:12:59,580 --> 01:13:01,280 >> Baiklah, mari kita bicara tentang tumpukan. 1671 01:13:01,280 --> 01:13:03,230 Kami melihat tumpukan sangat cepat. 1672 01:13:03,230 --> 01:13:06,280 Mereka pertama di terakhir struktur data keluar. 1673 01:13:06,280 --> 01:13:10,664 Jadi kita berpikir tentang tumpukan di Annenberg nampan tempat kami tumpukan hal-hal di atas. 1674 01:13:10,664 --> 01:13:12,580 Dan jika Anda akan datang mendapatkan nampan, Anda 1675 01:13:12,580 --> 01:13:15,870 selalu akan mengambil satu di atas, yang merupakan paling recently-- 1676 01:13:15,870 --> 01:13:18,840 yang merupakan hal yang paling kita baru-baru ini diletakkan di atas tumpukan. 1677 01:13:18,840 --> 01:13:22,680 Sehingga Anda dapat jenis memikirkan semacam ini visual bila Anda berpikir untuk tumpukan. 1678 01:13:22,680 --> 01:13:26,010 Dan kemudian, kita sudah muncul sesuatu dari atas tumpukan. 1679 01:13:26,010 --> 01:13:29,850 >> Jika kita are-- oh, dan kata-kata yang kita gunakan ketika kita berbicara tentang data ini 1680 01:13:29,850 --> 01:13:32,680 struktur biasanya, jika kita menempatkan sesuatu di stack, 1681 01:13:32,680 --> 01:13:34,550 kita katakan kita sedang mendorongnya di stack. 1682 01:13:34,550 --> 01:13:38,450 Dan jika kita mengambil sesuatu dari tumpukan, kita katakan kita sedang bermunculan dari tumpukan. 1683 01:13:38,450 --> 01:13:41,470 Jika Anda akan mengimplementasikan stack-- sebuah yang saya pasti 1684 01:13:41,470 --> 01:13:44,840 merekomendasikan Anda mencoba out-- Anda akan ingin melacak, 1685 01:13:44,840 --> 01:13:46,669 katakanlah Anda menggunakan array. 1686 01:13:46,669 --> 01:13:48,960 Aku tahu di kuliah kita berbicara tentang menggunakan kedua array 1687 01:13:48,960 --> 01:13:51,120 atau terkait daftar untuk melaksanakan stack. 1688 01:13:51,120 --> 01:13:53,490 Jika Anda menggunakan array, Anda perlu keep-- 1689 01:13:53,490 --> 01:13:56,750 alasan me-- kita perlu melacak dari ukuran dan kapasitas. 1690 01:13:56,750 --> 01:14:00,820 Jadi jumlah maksimum bahwa tumpukan kita bisa terus. 1691 01:14:00,820 --> 01:14:03,240 Pertanyaan pada tumpukan? 1692 01:14:03,240 --> 01:14:05,657 >> AUDIENCE: Apa bedanya antara ukuran dan kapasitas? 1693 01:14:05,657 --> 01:14:08,573 SPEAKER 1: Perbedaan antara ukuran dan kapasitas, pertanyaan mengagumkan. 1694 01:14:08,573 --> 01:14:10,330 Jadi katakanlah kami menggunakan sebuah array, dan kami 1695 01:14:10,330 --> 01:14:13,340 mengalokasikan cukup ruang untuk 10 bilangan bulat. 1696 01:14:13,340 --> 01:14:15,050 Dan kami mulai mengisi bahwa sampai. 1697 01:14:15,050 --> 01:14:17,330 Dan kami mendorong hal-hal di, dan kami pop hal off. 1698 01:14:17,330 --> 01:14:21,060 Kami ingin melacak maksimal Jumlah kita bisa menahan, itu kapasitas. 1699 01:14:21,060 --> 01:14:24,790 Dan kami ingin melacak jumlah saat ini yang kita miliki, itu ukuran. 1700 01:14:24,790 --> 01:14:26,530 Pertanyaan bagus. 1701 01:14:26,530 --> 01:14:28,720 Apa pun di tumpukan? 1702 01:14:28,720 --> 01:14:31,260 Baiklah, mari kita bicara tentang kejutan, antrian. 1703 01:14:31,260 --> 01:14:37,034 >> Tidak seperti tumpukan, yang pertama di terakhir keluar, ini adalah pertama, keluar pertama. 1704 01:14:37,034 --> 01:14:38,450 Jadi ini adalah like-- memikirkan garis. 1705 01:14:38,450 --> 01:14:41,530 Pikirkan berbaris di Apple Store untuk mendapatkan produk apapun. 1706 01:14:41,530 --> 01:14:44,540 Dan orang pertama di lini harus menjadi orang pertama yang telah membantu. 1707 01:14:44,540 --> 01:14:48,270 Sehingga hal pertama yang mendorong adalah ini hal pertama yang muncul. 1708 01:14:48,270 --> 01:14:49,460 Keren? 1709 01:14:49,460 --> 01:14:52,890 Sangat similarly-- oh, kata-kata yang kita menggunakan bukannya push dan pop-- 1710 01:14:52,890 --> 01:14:55,060 yang saya hanya digunakan, Aku sorry-- adalah kita katakan, 1711 01:14:55,060 --> 01:14:58,170 jika kita menempatkan sesuatu ke antrian, kami mengatakan enqueued itu. 1712 01:14:58,170 --> 01:15:00,795 Jika kita mengambil sesuatu dari antrian, kita katakan kita dequeued. 1713 01:15:00,795 --> 01:15:01,950 Saya t. 1714 01:15:01,950 --> 01:15:05,454 Saya dapat mengucapkan mereka salah, tetapi Anda mendapatkan ide. 1715 01:15:05,454 --> 01:15:08,370 Dan sekali lagi, seperti tumpukan, jika kita menerapkan ini sebagai array, 1716 01:15:08,370 --> 01:15:12,350 kita perlu melacak ukuran, kapasitas, dan kepala. 1717 01:15:12,350 --> 01:15:13,570 Apa yang saya maksud dengan kepala? 1718 01:15:13,570 --> 01:15:15,278 Mengapa kita perlu menjaga track kepala? 1719 01:15:15,278 --> 01:15:18,549 1720 01:15:18,549 --> 01:15:21,685 >> AUDIENCE: Karena di situlah awal daftar Anda. 1721 01:15:21,685 --> 01:15:24,810 SPEAKER 1: Ya, pada dasarnya kepala adalah di mana awal antrian kami. 1722 01:15:24,810 --> 01:15:29,460 Karena kita tahu, tidak seperti tumpukan, which-- Aku akan mencoba untuk menghadapi way-- ini 1723 01:15:29,460 --> 01:15:33,570 kita tahu bahwa itu selalu akan menyusut cara ini dan tumbuh dengan cara ini. 1724 01:15:33,570 --> 01:15:37,840 Antrian, orang datang ke akhir dan meninggalkan dari awal, 1725 01:15:37,840 --> 01:15:40,620 jadi kita harus melacak dari mana awal adalah. 1726 01:15:40,620 --> 01:15:43,540 Itulah yang saya maksud dengan kita perlu melacak di mana kepala adalah. 1727 01:15:43,540 --> 01:15:45,190 Keren? 1728 01:15:45,190 --> 01:15:46,440 Baiklah. 1729 01:15:46,440 --> 01:15:49,250 Delapan menit, beberapa topik yang lebih, kita bisa melakukannya. 1730 01:15:49,250 --> 01:15:51,240 >> Baiklah, tabel hash. 1731 01:15:51,240 --> 01:15:53,095 Kami berbicara sangat singkat tentang tabel hash. 1732 01:15:53,095 --> 01:15:55,720 Untuk kuis, Anda hanya perlu memahami mereka pada tingkat tinggi. 1733 01:15:55,720 --> 01:15:58,330 Ide dasarnya adalah Anda memiliki data ini. 1734 01:15:58,330 --> 01:16:02,570 Dan kami ingin mengaksesnya dalam waktu yang lebih cepat dari sesuatu seperti terkait 1735 01:16:02,570 --> 01:16:03,070 daftar. 1736 01:16:03,070 --> 01:16:05,290 Karena kita berkata, jika kita mencari melalui daftar link, 1737 01:16:05,290 --> 01:16:06,248 yang bisa mengambil waktu N. 1738 01:16:06,248 --> 01:16:08,810 Bahkan mengakses dapat mengambil N waktu dalam linked list. 1739 01:16:08,810 --> 01:16:12,930 Tabel hash memberi kita cara yang kita bisa lebih cepat mengakses hal-hal, dan lebih 1740 01:16:12,930 --> 01:16:16,970 cepat mencari hal-hal, tanpa memiliki kekangan array 1741 01:16:16,970 --> 01:16:19,030 di mana kita telah tetap ukuran. 1742 01:16:19,030 --> 01:16:23,950 >> Jadi kita berpikir tentang struktur data di mana, di mana kita memasukkannya ke dalam struktur data 1743 01:16:23,950 --> 01:16:26,620 tergantung pada ini Fungsi hash magis. 1744 01:16:26,620 --> 01:16:30,630 Jadi dalam hal ini, hash magis Fungsi hanya mengambil kata, 1745 01:16:30,630 --> 01:16:34,027 memeriksa apa huruf pertama adalah, dan kemudian hanya menyortir itu berdasarkan abjad. 1746 01:16:34,027 --> 01:16:36,110 Jadi kita pada dasarnya menempatkan mereka ke dalam ember yang berbeda. 1747 01:16:36,110 --> 01:16:39,510 Ketika kita melihat pisang, kita katakan, OK, mari kita dimasukkan ke dalam ember B. 1748 01:16:39,510 --> 01:16:41,820 Ketika kita melihat Apple, mari kita memasukkannya ke dalam ember A. 1749 01:16:41,820 --> 01:16:44,744 Jika kita melihat aprikot, mari kita dimasukkan ke dalam ember A. 1750 01:16:44,744 --> 01:16:45,600 OKE? 1751 01:16:45,600 --> 01:16:51,090 >> Jadi misalkan saya sedang mencari for-- Saya tidak tahu, apa buah lain? 1752 01:16:51,090 --> 01:16:52,920 Misalkan saya cari oranye. 1753 01:16:52,920 --> 01:16:55,340 Di mana saya harus mencari? 1754 01:16:55,340 --> 01:16:56,420 Dalam O ember. 1755 01:16:56,420 --> 01:17:01,450 Ya, hanya ada satu tempat oranye yang mungkin, OK? 1756 01:17:01,450 --> 01:17:05,370 Jadi saya katakan sebelumnya apa yang terjadi if-- baik saya katakan sebelumnya, 1757 01:17:05,370 --> 01:17:10,030 katakanlah kita menempatkan aprikot in-- tapi aku benar-benar mengatasi kenyataan bahwa, oh tidak, 1758 01:17:10,030 --> 01:17:14,990 jika saya menempatkan berry di, itu akan bertentangan dengan pisang. 1759 01:17:14,990 --> 01:17:20,160 Di mana kita meletakkannya jika ada sudah sesuatu di meja kami? 1760 01:17:20,160 --> 01:17:22,760 Yah, kita memiliki beberapa pilihan. 1761 01:17:22,760 --> 01:17:26,160 >> Pilihan nomor satu adalah linear menyelidik, yang pada dasarnya berarti, 1762 01:17:26,160 --> 01:17:28,690 katakanlah saya ingin mencoba menempatkan berry, dan saya melihat, oh tidak, 1763 01:17:28,690 --> 01:17:31,170 pisang sudah ada, Saya hanya mengatakan OK, mari 1764 01:17:31,170 --> 01:17:33,810 saya mencari tempat yang tersedia berikutnya. 1765 01:17:33,810 --> 01:17:36,744 Jadi saya berjalan, saya katakan, oh, tidak ada dalam ember D. 1766 01:17:36,744 --> 01:17:39,410 Saya tidak bisa memikirkan apa pun buah-buahan yang dimulai dengan huruf D, 1767 01:17:39,410 --> 01:17:41,620 jadi aku hanya akan menempatkan berry di sana. 1768 01:17:41,620 --> 01:17:42,650 Durian. 1769 01:17:42,650 --> 01:17:44,590 OK, jadi karena ada tidak ada di sana belum, 1770 01:17:44,590 --> 01:17:47,020 Aku mungkin juga hanya menggunakan tempat itu. 1771 01:17:47,020 --> 01:17:48,805 Apa kelemahan dari itu? 1772 01:17:48,805 --> 01:17:49,300 >> AUDIENCE: Ini rusak. 1773 01:17:49,300 --> 01:17:50,008 >> SPEAKER 1: Maaf? 1774 01:17:50,008 --> 01:17:51,280 AUDIENCE: Ini rusak. 1775 01:17:51,280 --> 01:17:53,113 >> SPEAKER 1: Ini out-- benar, kita mungkin berakhir 1776 01:17:53,113 --> 01:17:56,380 dengan hal-hal yang tidak in-- disimpan ke dalam ember di jalan 1777 01:17:56,380 --> 01:17:57,790 bahwa kita mengharapkan mereka untuk menjadi. 1778 01:17:57,790 --> 01:18:00,670 Jadi jika kita sedang mencari untuk berry, sebelum kita mengatakan, 1779 01:18:00,670 --> 01:18:02,000 oh kita dapat melihat dalam satu ember. 1780 01:18:02,000 --> 01:18:03,650 Ini hanya bisa berada di satu ember. 1781 01:18:03,650 --> 01:18:07,380 Tapi sekarang, benar-benar, itu bisa di semua ember, kan? 1782 01:18:07,380 --> 01:18:10,400 >> OK, inilah pilihan lain, chaining-- terpisah 1783 01:18:10,400 --> 01:18:16,630 yang merupakan gagasan bahwa kita akan menggunakan sedikit kemudian di P ditetapkan 5. 1784 01:18:16,630 --> 01:18:19,340 Daripada hanya memiliki satu ruang di setiap kotak, 1785 01:18:19,340 --> 01:18:23,610 mengapa kita tidak memiliki setiap kotak menjadi pointer ke sebuah linked list? 1786 01:18:23,610 --> 01:18:28,570 Di mana kita mengatakan, OK, ada ember untuk segala sesuatu yang dimulai dengan A. 1787 01:18:28,570 --> 01:18:31,990 Dan ada hanya akan menjadi terkait daftar buah yang dimulai dengan A. 1788 01:18:31,990 --> 01:18:36,240 Jadi jika kita mendapatkan buah baru, katakanlah kami get-- kita alpukat, kita memiliki apel, 1789 01:18:36,240 --> 01:18:39,530 katakanlah kita mendapatkan aprikot, bagaimana kita akan dimasukkan ke dalam daftar? 1790 01:18:39,530 --> 01:18:43,330 Nah kita akan pergi ke ember 0, dan kami akan hanya memasukkan dalam daftar menyukai kita, 1791 01:18:43,330 --> 01:18:45,320 sederhana seperti itu. 1792 01:18:45,320 --> 01:18:47,160 >> Sekarang saya selalu mengatakan ember. 1793 01:18:47,160 --> 01:18:49,470 Kita bisa menerapkan ini dalam sejumlah cara. 1794 01:18:49,470 --> 01:18:52,040 Salah satu cara khas yang ini jenis gambar menunjukkan, 1795 01:18:52,040 --> 01:18:55,580 adalah mungkin memiliki sebuah array pointer ke daftar terhubung. 1796 01:18:55,580 --> 01:18:58,174 Itu salah satu cara yang kami bisa mengimplementasikan tabel hash. 1797 01:18:58,174 --> 01:19:01,090 AUDIENCE: Apakah Anda perlu lain daftar karena pisang dan berry yang keluar 1798 01:19:01,090 --> 01:19:01,591 order? 1799 01:19:01,591 --> 01:19:03,298 SPEAKER 1: Akankah Anda need-- ah, akan Anda 1800 01:19:03,298 --> 01:19:06,310 perlu daftar lain karena pisang dan berry yang rusak? 1801 01:19:06,310 --> 01:19:09,880 Dalam hal ini, fungsi hash kami, yang memberitahu kita di mana harus menempatkan hal-hal 1802 01:19:09,880 --> 01:19:11,647 tidak peduli dengan surat kedua. 1803 01:19:11,647 --> 01:19:14,730 Tidak peduli alfabetis, hanya peduli tentang huruf pertama. 1804 01:19:14,730 --> 01:19:15,672 Pertanyaan? 1805 01:19:15,672 --> 01:19:18,947 >> AUDIENCE: Apa definisi dari yang fungsi, dan apa yang terlihat seperti? 1806 01:19:18,947 --> 01:19:19,780 SPEAKER 1: Ah, baik. 1807 01:19:19,780 --> 01:19:22,450 OK, jadi kita tidak perlu terlalu khawatir untuk kuis ini. 1808 01:19:22,450 --> 01:19:23,700 Jadi saya tidak dimasukkan ke dalam slide. 1809 01:19:23,700 --> 01:19:26,320 Kita akan diperkenalkan untuk itu untuk P ditetapkan 5. 1810 01:19:26,320 --> 01:19:31,520 Tapi pada dasarnya, ia mengatakan, diberi elemen baru, di mana saya harus meletakkannya? 1811 01:19:31,520 --> 01:19:35,450 Atau, katakanlah saya sedang mencari elemen, di mana mungkin? 1812 01:19:35,450 --> 01:19:37,860 Ya, pertanyaan besar. 1813 01:19:37,860 --> 01:19:40,870 >> OK, sangat cepat, pohon-pohon dan mencoba. 1814 01:19:40,870 --> 01:19:44,779 Jadi pohon hanya apapun dari struktur data yang terorganisir. 1815 01:19:44,779 --> 01:19:47,820 Dan kita akan melihat banyak gambar yang akan membuat ini super jelas. 1816 01:19:47,820 --> 01:19:51,180 Dan trie, yang kita lihat di kelas, adalah jenis yang sangat khusus dari pohon 1817 01:19:51,180 --> 01:19:53,440 yang pada dasarnya bekerja seperti tabel hash multi-level. 1818 01:19:53,440 --> 01:19:54,390 Ini super cool. 1819 01:19:54,390 --> 01:19:56,030 Kita akan melihatnya hanya sebentar. 1820 01:19:56,030 --> 01:19:57,821 Baiklah, jadi mari kita berbicara tentang pohon pertama. 1821 01:19:57,821 --> 01:20:01,040 Jadi ini adalah contoh yang sangat khas pohon, di mana kita memiliki beberapa hirarki. 1822 01:20:01,040 --> 01:20:03,220 Anda melihat bahwa satu di bagian paling atas, kan? 1823 01:20:03,220 --> 01:20:06,190 Dan saya dapat mengatakan atas karena ada jelas merupakan memesan karena kami 1824 01:20:06,190 --> 01:20:08,260 memiliki panah tersebut akan turun. 1825 01:20:08,260 --> 01:20:11,740 Sehingga, hal di atas, Saya menyebut bahwa simpul akar. 1826 01:20:11,740 --> 01:20:13,080 Jadi satu simpul akar. 1827 01:20:13,080 --> 01:20:17,330 Dan hal-hal di bagian bawah, yang telah ada datang dari mereka, 1828 01:20:17,330 --> 01:20:18,783 Saya mengatakan ini adalah node daun. 1829 01:20:18,783 --> 01:20:22,730 Jadi 8,9 5, 6, 7, OK. 1830 01:20:22,730 --> 01:20:27,740 Dan biasanya kita terminologi dapat katakan adalah, 1 adalah orangtua 3 ini. 1831 01:20:27,740 --> 01:20:30,740 Jadi itu hal yang datang tingkat di atasnya, dan poin untuk itu. 1832 01:20:30,740 --> 01:20:32,710 Dan 3 adalah anak 1 ini. 1833 01:20:32,710 --> 01:20:34,505 Ini hal yang 1 poin untuk. 1834 01:20:34,505 --> 01:20:35,005 Pertanyaan? 1835 01:20:35,005 --> 01:20:36,414 >> AUDIENCE: Dapatkah Anda kembali ke slide sebelumnya, please? 1836 01:20:36,414 --> 01:20:37,388 >> SPEAKER 1: Dapatkah saya kembali ke slide sebelumnya? 1837 01:20:37,388 --> 01:20:37,888 Yakin. 1838 01:20:37,888 --> 01:20:40,640 1839 01:20:40,640 --> 01:20:41,390 Pertanyaan tentang ini? 1840 01:20:41,390 --> 01:20:42,764 Atau Anda hanya ingin melihat itu? 1841 01:20:42,764 --> 01:20:44,650 AUDIENCE: Aku hanya tidak bisa melewatinya. 1842 01:20:44,650 --> 01:20:47,100 >> SPEAKER 1: OK, keren, ya. 1843 01:20:47,100 --> 01:20:49,846 Ini semua akan online sehingga tidak khawatir tentang mendapatkan setiap kata. 1844 01:20:49,846 --> 01:20:51,720 Dan untuk kepentingan waktu, aku akan pergi. 1845 01:20:51,720 --> 01:20:53,270 Apakah itu OK? 1846 01:20:53,270 --> 01:20:53,790 Mengagumkan. 1847 01:20:53,790 --> 01:20:55,720 OK keren. 1848 01:20:55,720 --> 01:20:57,790 Jadi mari kita bicara tentang kind-- sangat spesifik 1849 01:20:57,790 --> 01:20:59,710 jadi kita harus umum ini struktur pohon, 1850 01:20:59,710 --> 01:21:02,876 yang hanya apa yang memungkinkan kita untuk jenis peringkat hal hierarkis. 1851 01:21:02,876 --> 01:21:06,000 1852 01:21:06,000 --> 01:21:11,110 >> Pohon biner adalah hal-hal di mana setiap simpul memiliki paling banyak dua anak. 1853 01:21:11,110 --> 01:21:11,690 OKE? 1854 01:21:11,690 --> 01:21:14,560 Dan aku berkata, OK, sehingga tampaknya sesuai deskripsi ini. 1855 01:21:14,560 --> 01:21:16,830 Aku berkata node, bukan pohon pencarian biner. 1856 01:21:16,830 --> 01:21:19,720 Apa pohon pencarian biner? 1857 01:21:19,720 --> 01:21:20,440 Ini diurutkan. 1858 01:21:20,440 --> 01:21:22,890 Jadi Anda tahu bahwa di pohon pencarian biner, 1859 01:21:22,890 --> 01:21:26,580 semuanya ke tree-- segalanya ke kelenjar kiri lebih kecil, 1860 01:21:26,580 --> 01:21:28,830 dan segala sesuatu dengan node yang tepat adalah lebih besar. 1861 01:21:28,830 --> 01:21:30,620 Jadi ini bukan pohon pencarian biner. 1862 01:21:30,620 --> 01:21:32,770 Ini hanya sebuah pohon biner. 1863 01:21:32,770 --> 01:21:35,910 Jadi kita memiliki kategori besar pohon, kategori sedikit lebih kecil 1864 01:21:35,910 --> 01:21:40,106 pohon biner, pencarian oleh a-- pohon pencarian biner. 1865 01:21:40,106 --> 01:21:41,540 Keren? 1866 01:21:41,540 --> 01:21:44,410 Baiklah. 1867 01:21:44,410 --> 01:21:47,380 >> Dan sekarang, paling menyenangkan dari semua, kami telah mencoba kita. 1868 01:21:47,380 --> 01:21:49,500 Kalian melihat gambar ini di kuliah? 1869 01:21:49,500 --> 01:21:51,790 Ya, itu harus terlihat super familiar. 1870 01:21:51,790 --> 01:21:54,252 Mari kita lihat bagaimana kita mungkin benar-benar menerapkan ini. 1871 01:21:54,252 --> 01:21:56,210 Atau sebenarnya, mari kita lihat, apakah itu bahkan datang? 1872 01:21:56,210 --> 01:21:56,731 Nggak. 1873 01:21:56,731 --> 01:21:59,480 Baiklah, kita bahkan tidak perlu khawatir tentang itu hal tingkat rendah. 1874 01:21:59,480 --> 01:22:02,320 Kami akan memiliki banyak waktu untuk mengatasi kemudian P ditetapkan 5. 1875 01:22:02,320 --> 01:22:05,780 Tapi untuk saat ini, tingkat hanya sangat tinggi, kami tahu bahwa ini adalah apa yang tampak seperti. 1876 01:22:05,780 --> 01:22:08,530 Kami menggambarkannya sebagai jenis tabel hash multi-level 1877 01:22:08,530 --> 01:22:12,264 where-- apa toko ini? 1878 01:22:12,264 --> 01:22:14,430 Ini menyimpan nama-nama ilmuwan bahwa kita benar-benar dapat 1879 01:22:14,430 --> 01:22:20,690 mencari dengan hanya semacam mengikuti tabel hash yang berbeda turun, oke? 1880 01:22:20,690 --> 01:22:24,730 >> Dan tujuan ini, dalam teori, mereka menyediakan waktu konstan tampilan up. 1881 01:22:24,730 --> 01:22:29,630 Jadi jika saya ingin memeriksa itu, misalnya, siapa yang someone-- 1882 01:22:29,630 --> 01:22:33,410 yang Mandel dalam ini trie, aku bisa sangat cepat 1883 01:22:33,410 --> 01:22:36,260 di linear-- Maaf, di waktu yang konstan, mencari tahu 1884 01:22:36,260 --> 01:22:39,010 apakah itu di trie. 1885 01:22:39,010 --> 01:22:41,500 Tapi con, adalah melihat seberapa besar ini. 1886 01:22:41,500 --> 01:22:44,120 Kami bahkan tidak menyimpan bahwa banyak data, dan itu sangat besar. 1887 01:22:44,120 --> 01:22:47,950 Jadi satu con besar adalah bahwa hal itu menggunakan sejumlah besar memori. 1888 01:22:47,950 --> 01:22:48,746 Iya nih. 1889 01:22:48,746 --> 01:22:50,610 >> AUDIENCE: Mengapa memberikan waktu yang konstan, tepatnya? 1890 01:22:50,610 --> 01:22:51,376 >> SPEAKER 1: Sekali lagi? 1891 01:22:51,376 --> 01:22:53,360 >> AUDIENCE: Apa intuisi mengapa ia menyediakan waktu yang konstan? 1892 01:22:53,360 --> 01:22:54,610 >> SPEAKER 1: Pertanyaan yang bagus. 1893 01:22:54,610 --> 01:22:56,030 Mengapa memberikan waktu yang konstan? 1894 01:22:56,030 --> 01:22:59,280 Jadi apa yang bisa kita lakukan adalah, mari kita mengatakan kami sedang mencari Mandel. 1895 01:22:59,280 --> 01:23:02,830 Kita tahu bahwa kita ingin memulai di tingkat pertama di M. 1896 01:23:02,830 --> 01:23:06,890 Kita tahu kita ingin mengikutinya ke E. Jadi itu mengambil satu langkah, dua langkah, kan? 1897 01:23:06,890 --> 01:23:10,710 Kami mengikuti ke N. kami mengikutinya ke D. Kami mengikuti ke E. kami mengikutinya ke L. 1898 01:23:10,710 --> 01:23:15,100 Dan kemudian hal berikutnya yang kita periksa says-- delta ini mengatakan Ya, itu 1899 01:23:15,100 --> 01:23:15,990 di meja kami. 1900 01:23:15,990 --> 01:23:16,880 Itu adalah sebuah kata. 1901 01:23:16,880 --> 01:23:19,900 Itu adalah entri yang valid di trie kami. 1902 01:23:19,900 --> 01:23:22,450 Jadi kau mengatakan, OK, yang mengambil tujuh langkah. 1903 01:23:22,450 --> 01:23:27,200 Tetapi jika kita menambahkan seperti miliaran lebih para ilmuwan untuk struktur data, 1904 01:23:27,200 --> 01:23:29,470 kita tidak harus memeriksa miliaran lebih banyak hal. 1905 01:23:29,470 --> 01:23:33,580 Kami hanya pernah akan harus mengambil tujuh langkah, panjang orang yang 1906 01:23:33,580 --> 01:23:35,260 nama. 1907 01:23:35,260 --> 01:23:39,350 >> Jadi, kita suka berpikir runtime sebagai, misalkan 1908 01:23:39,350 --> 01:23:42,340 kita meningkatkan ukuran kami struktur data, berapa lama lagi 1909 01:23:42,340 --> 01:23:44,580 itu akan mengambil? 1910 01:23:44,580 --> 01:23:47,372 Dalam hal ini, jika kita menambahkan a bunch lebih banyak ilmuwan, itu tidak masalah. 1911 01:23:47,372 --> 01:23:49,413 Ini masih akan mengambil jumlah waktu yang sama. 1912 01:23:49,413 --> 01:23:50,350 Ini waktu yang konstan. 1913 01:23:50,350 --> 01:23:50,850 Iya nih. 1914 01:23:50,850 --> 01:23:53,557 >> AUDIENCE: Bagaimana Anda tidak tahu untuk memindai melalui nomor lain? 1915 01:23:53,557 --> 01:23:54,932 SPEAKER 1: Bagaimana saya tahu bagaimana to-- 1916 01:23:54,932 --> 01:23:58,236 AUDIENCE: Seperti bagaimana Anda tahu Anda pergi langsung dari M ke E dan tidak M ke A? 1917 01:23:58,236 --> 01:23:59,069 SPEAKER 1: Oh, tentu. 1918 01:23:59,069 --> 01:24:01,620 Karena aku tahu aku mencari kata Mandel, 1919 01:24:01,620 --> 01:24:04,195 dan aku hanya tahu itu M-E. Jadi itu-- ya, silakan. 1920 01:24:04,195 --> 01:24:06,528 AUDIENCE: Bukankah Anda memiliki untuk melihat surat-surat lainnya 1921 01:24:06,528 --> 01:24:07,870 di sisa [tak terdengar]? 1922 01:24:07,870 --> 01:24:10,020 >> SPEAKER 1: Ah, tidak akan saya untuk melihat OK the--, besar. 1923 01:24:10,020 --> 01:24:10,790 Ini adalah pertanyaan besar. 1924 01:24:10,790 --> 01:24:12,170 Itu tergantung bagaimana kita menerapkannya. 1925 01:24:12,170 --> 01:24:15,350 Jika kita menerapkannya hanya sebagai seperti serangkaian array 1926 01:24:15,350 --> 01:24:18,100 di mana kita tahu bahwa E adalah selalu pada posisi 0, 1927 01:24:18,100 --> 01:24:21,270 Saya tidak tahu, apa pun Indeks nomor di. 1928 01:24:21,270 --> 01:24:24,901 Ya, kita hanya bisa melakukan konstan waktu, jangan, jangan, jangan, lakukan. 1929 01:24:24,901 --> 01:24:25,400 Keren. 1930 01:24:25,400 --> 01:24:27,556 Pertanyaan di sana? 1931 01:24:27,556 --> 01:24:30,927 >> AUDIENCE: Apakah waktu yang konstan hal yang sama seperti real time? 1932 01:24:30,927 --> 01:24:33,260 SPEAKER 1: Apakah waktu yang konstan hal yang sama adalah real time? 1933 01:24:33,260 --> 01:24:34,799 Saya tidak benar-benar yakin real time adalah. 1934 01:24:34,799 --> 01:24:36,965 AUDIENCE: time Anda suka yang harfiah berlangsung kedua 1935 01:24:36,965 --> 01:24:40,150 oleh kedua sebagai lawan yang variabel independen. 1936 01:24:40,150 --> 01:24:42,960 >> SPEAKER 1: Oh, ya, Anda bisa memikirkan cara itu. 1937 01:24:42,960 --> 01:24:46,240 Dengan kata lain, itu tidak tergantung pada ukuran struktur data. 1938 01:24:46,240 --> 01:24:48,310 Itu cara untuk memikirkan itu. 1939 01:24:48,310 --> 01:24:50,510 Ada pertanyaan lain? 1940 01:24:50,510 --> 01:24:53,120 Mungkin dalam pertama kalinya dalam sejarah, kami selesai tepat waktu. 1941 01:24:53,120 --> 01:24:57,080 Jika Anda memiliki pertanyaan, merasa bebas untuk datang meminta kami, pergi ke bagian, 1942 01:24:57,080 --> 01:25:00,190 berbicara dengan Anda TF, kantor jam adalah 08:00 dan 08:30 1943 01:25:00,190 --> 01:25:03,985 sampai 11:00 pada hari Senin dan Selasa, sehingga itu adalah sedikit waktu yang berbeda, 1944 01:25:03,985 --> 01:25:05,110 jadi pastikan Anda perhatikan bahwa. 1945 01:25:05,110 --> 01:25:06,048 Ya. 1946 01:25:06,048 --> 01:25:08,673 >> AUDIENCE: Apakah kita perlu tahu hal-hal seperti argumen baris perintah, 1947 01:25:08,673 --> 01:25:10,360 ls dasbor, lari apapun? 1948 01:25:10,360 --> 01:25:11,840 >> SPEAKER 1: Command line argumen, dan perintah Linux, 1949 01:25:11,840 --> 01:25:13,010 ya, Anda perlu tahu mereka. 1950 01:25:13,010 --> 01:25:18,234 Very-- itu seperti jenis tingkat hal kita bahas dalam bagian 0, 1951 01:25:18,234 --> 01:25:19,400 sejauh perintah Linux pergi. 1952 01:25:19,400 --> 01:25:20,942 >> AUDIENCE: Apakah jam di Annenberg? 1953 01:25:20,942 --> 01:25:23,525 SPEAKER 1: jam kantor, aku tidak sepenuhnya yakin di mana mereka berada. 1954 01:25:23,525 --> 01:25:25,980 Tetapi Anda dapat memeriksa website, dan akan memberitahu Anda. 1955 01:25:25,980 --> 01:25:27,499