1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Selamat Datang ke A5, semua orang. 3 00:00:07,820 --> 00:00:11,270 Kami memiliki minggu menyenangkan di depan kita, terutama karena ada begitu banyak baru 4 00:00:11,270 --> 00:00:12,350 wajah di ruangan ini. 5 00:00:12,350 --> 00:00:12,920 Ini luar biasa. 6 00:00:12,920 --> 00:00:15,740 Banyak Anda berada di sini oleh kecelakaan, yang lebih baik. 7 00:00:15,740 --> 00:00:18,220 Jadi mudah-mudahan Anda akan tetap bergabung dengan kami. 8 00:00:18,220 --> 00:00:20,220 >> Minggu ini kita akan menghabiskan sebagian besar bagian 9 00:00:20,220 --> 00:00:21,870 mempersiapkan kuis. 10 00:00:21,870 --> 00:00:26,580 Jadi per agenda kita, kita akan berbicara sedikit tentang sumber daya untuk kelas, 11 00:00:26,580 --> 00:00:30,350 tetapi juga untuk kuis, dan kemudian, sekali lagi, menghabiskan sebagian besar kelas berbicara 12 00:00:30,350 --> 00:00:31,390 tentang pertanyaan. 13 00:00:31,390 --> 00:00:33,900 Setelah kami selesai menjawab Anda pertanyaan, atau jika pertanyaan Anda 14 00:00:33,900 --> 00:00:39,010 secara alami membawa kita ke beberapa coding, saya memiliki masalah sampel dari ujian tengah semester 15 00:00:39,010 --> 00:00:43,180 masa lalu bahwa kita akan hidup dalam bagian kode bersama-sama yang juga membawa beberapa lainnya 16 00:00:43,180 --> 00:00:45,420 topik yang baik untuk menutupi. 17 00:00:45,420 --> 00:00:48,280 >> Jadi pertama, seperti yang kita sudah melalui untuk beberapa minggu terakhir untuk mengingatkan Anda 18 00:00:48,280 --> 00:00:51,700 guys, ada satu ton sumber daya tersedia untuk kursus ini. 19 00:00:51,700 --> 00:00:55,020 Banyak dari mereka akan sangat membantu kepada Anda sebagai Anda terus 20 00:00:55,020 --> 00:00:57,280 belajar untuk kuis 0, karena itu Selasa sore. 21 00:00:57,280 --> 00:00:59,630 Jadi kalian semua telah belajar untuk sedikit. 22 00:00:59,630 --> 00:01:02,640 >> Ada catatan kuliah dan sumber kode yang Anda harus 23 00:01:02,640 --> 00:01:04,050 pasti memeriksa. 24 00:01:04,050 --> 00:01:05,019 Perhatikan celana pendek. 25 00:01:05,019 --> 00:01:07,470 Periksa study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Dan kemudian, tercantum di bawah ini, nomor sumber daya lainnya. 27 00:01:11,770 --> 00:01:14,020 >> Sekali lagi, kuis 0 besok pukul 1. 28 00:01:14,020 --> 00:01:18,230 Jika Anda belum melakukannya, periksa keluar Tentang Quiz 0 dokumen pada 29 00:01:18,230 --> 00:01:21,370 homepage kursus untuk mencari tahu di mana Anda mengambil kuis. 30 00:01:21,370 --> 00:01:25,770 Kuis dimulai pada 1:10 dan berakhir 70 menit kemudian. 31 00:01:25,770 --> 00:01:29,610 Jadi jika Anda muncul setelah 1:10, Anda akan mendapatkan bahwa banyak menit lebih sedikit 32 00:01:29,610 --> 00:01:30,940 dari 70 untuk mengambil kuis. 33 00:01:30,940 --> 00:01:33,570 Jadi, pastikan Anda berada di sana pada waktu. 34 00:01:33,570 --> 00:01:38,690 Jika Anda seorang mahasiswa ekstensi atau memiliki beberapa pertimbangan pengujian lain, 35 00:01:38,690 --> 00:01:40,400 mungkin tidak pada 1:00 besok. 36 00:01:40,400 --> 00:01:43,540 Tapi sekali lagi, periksa Tentang Quiz 0 dokumen untuk memastikan Anda tahu kapan 37 00:01:43,540 --> 00:01:44,760 Anda mengambil kuis. 38 00:01:44,760 --> 00:01:46,440 Saya menulis 75 menit di sini. 39 00:01:46,440 --> 00:01:48,580 Saya pikir itu benar, bukan 70. 40 00:01:48,580 --> 00:01:53,420 >> Ini mencakup semua materi dari minggu 0 ceramah minggu lalu pada hari Rabu. 41 00:01:53,420 --> 00:01:59,350 Dan sekali lagi, untuk kuis ini, per yang dokumen, Anda mendapatkan satu dua sisi dan 8 42 00:01:59,350 --> 00:02:03,770 1/2 oleh 11 lembar kertas yang Anda dapatkan untuk digunakan sebagai catatan selama kuis. 43 00:02:03,770 --> 00:02:08,570 Banyak orang, jika tidak kebanyakan orang, memiliki menemukan bahwa satu cara yang paling bermanfaat 44 00:02:08,570 --> 00:02:11,970 belajar untuk kuis ini adalah untuk membuat lembar belajar, 45 00:02:11,970 --> 00:02:13,730 satu-Sider, mereka sendiri. 46 00:02:13,730 --> 00:02:17,710 Jadi melihat yang terakhir jika Anda telah melihat orang-orang masa lalu. 47 00:02:17,710 --> 00:02:19,960 Menjangkau teman-teman untuk melihat apa mereka meletakkan pada mereka. 48 00:02:19,960 --> 00:02:23,610 >> Tapi tangan-down, cara terbaik yang Anda bisa studi ini adalah untuk pergi melalui segala sesuatu dan 49 00:02:23,610 --> 00:02:26,530 meraut itu ke apa yang harus atau seharusnya bukan milik pada lembar dari 50 00:02:26,530 --> 00:02:30,570 kertas, karena itu hanya benar-benar cara membantu bagi Anda untuk memastikan 51 00:02:30,570 --> 00:02:33,620 Anda akan melalui segala sesuatu dan memiliki beberapa keakraban dengan itu. 52 00:02:33,620 --> 00:02:36,690 Kebanyakan orang, kita menemukan, meskipun mereka telah lembar kertas duduk tepat 53 00:02:36,690 --> 00:02:39,840 di samping mereka pada kuis, tidak mengaktifkan untuk itu, karena, sekali lagi, yang sangat 54 00:02:39,840 --> 00:02:43,290 proses melalui informasi telah membantu mereka mempelajarinya. 55 00:02:43,290 --> 00:02:45,370 >> Apakah Ada yang punya pertanyaan tentang kuis 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Memiliki orang - 58 00:02:51,450 --> 00:02:53,230 Aku tidak akan melakukan unjuk tangan. 59 00:02:53,230 --> 00:02:53,550 Jangan pikiran. 60 00:02:53,550 --> 00:02:54,790 Saya akan bertanya siapa mulai belajar. 61 00:02:54,790 --> 00:02:58,360 Tapi aku tidak ingin membuat Anda semua tidak mengangkat tangan Anda. 62 00:02:58,360 --> 00:03:01,290 Jadi seperti saya katakan - ya, Avi, silakan. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Apa yang akan menjadi hal yang berguna untuk menempatkan di satu-pager? 64 00:03:04,205 --> 00:03:05,875 >> MAHASISWA: Itu terserah Anda. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Anda mendapatkan menggunakan penilaian Anda. 66 00:03:08,210 --> 00:03:13,220 Hal yang berguna untuk menempatkan di satu-pager, jika Anda bingung tentang O besar 67 00:03:13,220 --> 00:03:17,510 runtime dari berbagai jenis pencarian dan macam, menempatkan bahwa di sana dalam 68 00:03:17,510 --> 00:03:18,760 grafik pesolek berguna. 69 00:03:18,760 --> 00:03:22,250 Dengan cara itu, jika Anda meminta agar pada kuis, Anda tidak perlu mencoba dan angka 70 00:03:22,250 --> 00:03:23,560 keluar atau alasan melalui runtime. 71 00:03:23,560 --> 00:03:24,730 Anda hanya dapat mencatatnya. 72 00:03:24,730 --> 00:03:28,320 Jika Anda melihat kuis masa lalu, banyak kali, ada pertanyaan berjalan waktu. 73 00:03:28,320 --> 00:03:34,150 Sehingga akan menjadi contoh yang baik hal untuk memakai satu-pager Anda. 74 00:03:34,150 --> 00:03:37,450 >> Hal baik lainnya untuk memakai, jika Anda bingung tentang bagaimana untuk mendeklarasikan 75 00:03:37,450 --> 00:03:40,570 fungsi atau apa bagian-bagian yang berbeda dari deklarasi fungsi adalah, menulis 76 00:03:40,570 --> 00:03:43,400 yang di sana, versi generik dan kemudian mungkin sebuah contoh. 77 00:03:43,400 --> 00:03:47,290 Jika Anda bingung tentang pointer, diagram tentang bagaimana pointer kerja 78 00:03:47,290 --> 00:03:48,660 mungkin benar-benar membantu. 79 00:03:48,660 --> 00:03:52,440 Jika Anda bingung tentang rekursi, a sampel fungsi rekursif di sana 80 00:03:52,440 --> 00:03:54,980 juga bisa membuktikan menjadi benar-benar membantu. 81 00:03:54,980 --> 00:03:57,290 Apakah itu memberi Anda beberapa ide? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Anda perlu memahami Seluruh proses kompilasi, seperti 83 00:04:01,820 --> 00:04:03,220 bagaimana semuanya bekerja? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Semuanya yang telah dibahas dapat 85 00:04:06,620 --> 00:04:08,060 muncul di kuis. 86 00:04:08,060 --> 00:04:08,930 Pertanyaan - 87 00:04:08,930 --> 00:04:11,300 tapi sekali lagi, beberapa hal akan tertimbang berat daripada yang lain. 88 00:04:11,300 --> 00:04:14,330 Beberapa hal telah datang lagi dan lagi di kelas, di 89 00:04:14,330 --> 00:04:15,590 kuliah, dan bagian. 90 00:04:15,590 --> 00:04:17,220 Hal-hal lain belum datang yang sering. 91 00:04:17,220 --> 00:04:22,900 >> Kami telah berbicara banyak tentang # include dan -L sesuatu dan apa yang berarti dalam 92 00:04:22,900 --> 00:04:24,390 proses kompilasi. 93 00:04:24,390 --> 00:04:29,120 Kami telah berbicara banyak tentang GDB, cling, mereka bendera yang berbeda yang kita gunakan ketika 94 00:04:29,120 --> 00:04:33,100 kita mengkompilasi sesuatu, dan apa make15, misalnya, benar-benar 95 00:04:33,100 --> 00:04:34,510 berarti dan benar-benar. 96 00:04:34,510 --> 00:04:38,110 Kami belum bicara banyak tentang setiap langkah dalam 97 00:04:38,110 --> 00:04:39,240 proses kompilasi. 98 00:04:39,240 --> 00:04:40,410 Kami masih berbicara tentang hal itu. 99 00:04:40,410 --> 00:04:42,550 Jadi itu masih sesuatu yang Anda harus akrab dengan. 100 00:04:42,550 --> 00:04:44,610 Tapi sekali lagi, kita tidak akan - 101 00:04:44,610 --> 00:04:49,140 hal-hal yang muncul lebih sering di kelas lebih mungkin untuk datang lebih 102 00:04:49,140 --> 00:04:52,495 sering dan lebih berat tertimbang pada kuis. 103 00:04:52,495 --> 00:04:53,280 >> Keren. 104 00:04:53,280 --> 00:04:54,580 Setiap pertanyaan lain tentang kuis 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, jadi aku meletakkan daftar topik di papan tulis. 107 00:05:00,050 --> 00:05:01,550 Aku pergi melalui silabus. 108 00:05:01,550 --> 00:05:07,340 Aku pergi melalui review bagian dari tadi malam dan slide tersebut untuk datang 109 00:05:07,340 --> 00:05:13,710 dengan daftar lengkap non-topik bahwa kita telah pelajari sejauh ini di CS50 110 00:05:13,710 --> 00:05:16,800 dan hal-hal yang mungkin muncul di kuis. 111 00:05:16,800 --> 00:05:19,900 Jadi aku tidak akan pergi melalui setiap satu dari ini. 112 00:05:19,900 --> 00:05:22,370 Itu akan mengambil lebih banyak waktu daripada yang kita miliki sekarang. 113 00:05:22,370 --> 00:05:26,880 Tapi aku menempatkan ini di sini untuk mudah-mudahan jog memori Anda untuk hal-hal yang mungkin 114 00:05:26,880 --> 00:05:28,420 atau mungkin tidak akrab dengan Anda. 115 00:05:28,420 --> 00:05:32,850 >> Dan saya akan senang untuk menghabiskan sebagian besar Bagian menjawab pertanyaan Anda tentang 116 00:05:32,850 --> 00:05:35,130 topik, topik yang tidak dibahas di sini. 117 00:05:35,130 --> 00:05:36,130 Kita bisa menulis kode semu. 118 00:05:36,130 --> 00:05:40,010 Kita bisa menulis kode nyata untuk memastikan bahwa Anda - 119 00:05:40,010 --> 00:05:44,280 Saya bisa menjawab pertanyaan Anda dan membantu semua orang pada dasarnya memahami 120 00:05:44,280 --> 00:05:48,330 banyak topik ini sehingga Anda akan merasa siap dan nyaman pergi ke 121 00:05:48,330 --> 00:05:50,150 kuis besok. 122 00:05:50,150 --> 00:05:52,300 Jadi membaca atas daftar. 123 00:05:52,300 --> 00:05:54,780 Anda diharapkan telah datang ke bagian dengan beberapa pertanyaan juga. 124 00:05:54,780 --> 00:05:58,480 Bila Anda siap, angkat tangan dan kami akan memulai. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Perlu diingat, pertanyaan-pertanyaan yang Anda miliki, tidak ada pertanyaan bodoh. 127 00:06:05,200 --> 00:06:06,250 Kami telah mendengar bahwa banyak. 128 00:06:06,250 --> 00:06:09,490 Dan pertanyaan yang Anda miliki, saya bersedia untuk bertaruh, banyak orang lain baik 129 00:06:09,490 --> 00:06:11,740 duduk di sini dan menonton online memiliki juga. 130 00:06:11,740 --> 00:06:13,770 Jadi Anda hanya dapat membantu orang dengan mengajukan pertanyaan. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Antara stack dan heap, apakah ada pra-dialokasikan 133 00:06:18,040 --> 00:06:22,880 persentase memori yang didefinisikan sebagai ini adalah untuk stack atau heap? 134 00:06:22,880 --> 00:06:25,010 Atau bagaimana yang bekerja, tepatnya? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Pertanyaan besar. 136 00:06:26,230 --> 00:06:28,640 Aku akan kembali melacak sedikit. 137 00:06:28,640 --> 00:06:30,910 Apakah semua orang - 138 00:06:30,910 --> 00:06:31,660 silahkan jujur ​​di sini. 139 00:06:31,660 --> 00:06:34,130 Aku tahu aku meminta Anda untuk meningkatkan Anda tangan di depan rekan-rekan Anda. 140 00:06:34,130 --> 00:06:38,510 Tapi apakah ada orang yang merasa tidak nyaman dengan tumpukan dan tumpukan 141 00:06:38,510 --> 00:06:42,980 dan ingin pergi lebih dari itu dan apa yang berarti? 142 00:06:42,980 --> 00:06:43,880 Angkat tangan Anda jika - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Terima kasih. 145 00:06:45,120 --> 00:06:48,420 Jadi kita akan pergi ke stack dan heap benar-benar cepat dan kemudian 146 00:06:48,420 --> 00:06:50,370 pindah ke menjawab pertanyaan Anda. 147 00:06:50,370 --> 00:06:58,250 >> Jadi jika kita menarik keluar kotak untuk mewakili memori pada komputer Anda, apa adalah beberapa 148 00:06:58,250 --> 00:07:02,160 hal-hal yang masuk dalam kotak ini? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 Fungsi utama. 151 00:07:04,020 --> 00:07:05,890 Mana pergi main? 152 00:07:05,890 --> 00:07:08,090 >> SISWA: [Tak terdengar]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Jadi kita akan menempatkan utama di sini. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Apa lagi yang terjadi di dalam kotak ini? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> SISWA: Fungsi yang Anda menelepon. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Fungsi yang kita sebut. 159 00:07:19,020 --> 00:07:20,440 Dan di mana mereka pergi? 160 00:07:20,440 --> 00:07:21,300 >> MAHASISWA: Dalam stack. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Mereka pergi dalam stack. 162 00:07:22,380 --> 00:07:27,350 Jadi kita akan menyebutnya hal di sini stack. 163 00:07:27,350 --> 00:07:31,880 Dan di bagian atas, kita memiliki heap. 164 00:07:31,880 --> 00:07:35,450 Jadi memori tidak kotak seperti ini. 165 00:07:35,450 --> 00:07:37,330 Tetapi sebenarnya cukup mirip. 166 00:07:37,330 --> 00:07:40,840 Ini akan menjadi banyak lebih kotak dan lebih, tergantung pada seberapa besar Anda 167 00:07:40,840 --> 00:07:43,730 komputer atau seberapa besar memori Anda. 168 00:07:43,730 --> 00:07:46,950 >> Pada kutipan-tanda kutip "bottom" adalah stack. 169 00:07:46,950 --> 00:07:50,880 Dan ada beberapa hal yang pergi pada stack. 170 00:07:50,880 --> 00:07:53,840 Dan orang-orang tergantung pada fungsi Anda harus dalam kode Anda. 171 00:07:53,840 --> 00:07:57,780 Anda selalu memiliki satu fungsi dalam Anda kode yang disebut utama, sehingga selalu ada 172 00:07:57,780 --> 00:08:00,480 bagian di sini di tumpukan dikhususkan untuk utama. 173 00:08:00,480 --> 00:08:03,980 >> Bagian-bagian ini dalam tumpukan disebut tumpukan frame. 174 00:08:03,980 --> 00:08:09,580 Ketika Anda memanggil fungsi lain, katakanlah utama memanggil fungsi pencarian biner, 175 00:08:09,580 --> 00:08:11,075 kami menempatkan bingkai lain di stack. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Lebih khusus lagi, kita akan menyumbangkan sepotong memori pada kita 178 00:08:17,320 --> 00:08:22,960 komputer untuk menyimpan biner pencari lokal variabel dan untuk menjalankan biner 179 00:08:22,960 --> 00:08:24,150 kode pencarian. 180 00:08:24,150 --> 00:08:26,810 >> Jadi kita sebut pencarian biner. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 Dalam potongan ini dari memori, kita akan untuk menyimpan variabel lokal. 183 00:08:33,340 --> 00:08:35,270 Kita akan menyimpan panggilan printf nya. 184 00:08:35,270 --> 00:08:38,159 Apapun yang terjadi, fungsi yang akan disimpan di sana. 185 00:08:38,159 --> 00:08:40,350 Pencarian biner akan mengeksekusi. 186 00:08:40,350 --> 00:08:42,210 Hal ini akan menyelesaikan eksekusi. 187 00:08:42,210 --> 00:08:47,450 Apa kata dalam C yang menandakan bahwa fungsi harus 188 00:08:47,450 --> 00:08:49,306 menyelesaikan eksekusinya? 189 00:08:49,306 --> 00:08:50,040 >> MAHASISWA: Kembali. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Kembali. 191 00:08:50,870 --> 00:08:53,230 Jadi, setiap kali Anda melihat pernyataan kembali, fungsi ujung 192 00:08:53,230 --> 00:08:54,350 ketika hits itu. 193 00:08:54,350 --> 00:08:56,740 Jadi pencarian biner akan memukul kembalinya. 194 00:08:56,740 --> 00:09:01,360 Ini bagian dari memori pada dasarnya akan dibebaskan up. 195 00:09:01,360 --> 00:09:03,510 Dan utama akan kembali ke eksekusi. 196 00:09:03,510 --> 00:09:07,240 Jadi utama akan berhenti di mana pun itu, panggilan pencarian biner, mendapatkan beberapa nilai kembali, 197 00:09:07,240 --> 00:09:08,700 dan melanjutkan eksekusi. 198 00:09:08,700 --> 00:09:10,840 Stack frame ini akan hilang. 199 00:09:10,840 --> 00:09:14,810 >> Jika kita memanggil fungsi rekursif, yang adalah fungsi yang memanggil dirinya sendiri atas 200 00:09:14,810 --> 00:09:18,480 dan lebih, kita mungkin bisa - mengatakan kita melakukan pencarian biner rekursif. 201 00:09:18,480 --> 00:09:21,520 Kita mungkin mendapatkan biner pencarian versi satu, pencarian biner dua, pencarian biner 202 00:09:21,520 --> 00:09:24,090 tiga, pencarian biner empat, pencarian biner lima. 203 00:09:24,090 --> 00:09:27,950 Dan kemudian pencarian biner ini akhir lima akan memukul kasus dasar, dan stack 204 00:09:27,950 --> 00:09:31,010 frame akan kembali dan menjaga penutupan sampai kita kembali ke utama. 205 00:09:31,010 --> 00:09:32,530 Kita bisa pergi ke rekursi dalam sedikit. 206 00:09:32,530 --> 00:09:35,530 Tapi semua ini adalah untuk mengatakan, jika Anda memanggil beberapa fungsi sekaligus, 207 00:09:35,530 --> 00:09:39,250 akan ada beberapa tumpukan frame pada stack. 208 00:09:39,250 --> 00:09:42,900 >> Heap, di sisi lain, sampai di sini, bukan untuk fungsi, 209 00:09:42,900 --> 00:09:44,380 bukan untuk variabel lokal. 210 00:09:44,380 --> 00:09:48,920 Ini untuk dialokasikan secara dinamis variabel. 211 00:09:48,920 --> 00:09:57,210 Jadi ini adalah variabel yang dapat diinisialisasi baik utama atau 212 00:09:57,210 --> 00:09:58,640 berfungsi bahwa panggilan utama. 213 00:09:58,640 --> 00:10:00,790 Manapun dalam kode Anda, mereka dapat diinisialisasi. 214 00:10:00,790 --> 00:10:04,360 Dan untuk menginisialisasi secara dinamis variabel yang dialokasikan. 215 00:10:04,360 --> 00:10:06,970 Apa fungsi dalam C yang kita gunakan? 216 00:10:06,970 --> 00:10:07,600 >> MAHASISWA: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: Malloc. 218 00:10:09,240 --> 00:10:10,800 Kamu menyebut malloc. 219 00:10:10,800 --> 00:10:12,260 Anda mendapatkan ruang memori. 220 00:10:12,260 --> 00:10:15,020 Dan bahwa ruang memori adalah di heap. 221 00:10:15,020 --> 00:10:18,840 Dan bahwa ruang memori tetap di sana sampai Anda menelepon gratis. 222 00:10:18,840 --> 00:10:22,670 >> Jadi variabel yang dialokasikan secara dinamis dalam heap akan ada untuk selama Anda 223 00:10:22,670 --> 00:10:25,250 ingin mereka ada, dan mereka tidak akan pergi sampai Anda secara eksplisit 224 00:10:25,250 --> 00:10:26,760 memberitahu mereka untuk pergi. 225 00:10:26,760 --> 00:10:29,670 Anda dapat membuat mereka dalam satu fungsi. 226 00:10:29,670 --> 00:10:31,930 Tumpukan bahwa fungsi ini bingkai akan pergi. 227 00:10:31,930 --> 00:10:35,490 Tapi variabel yang akan tetap ada dalam tumpukan sampai dibebaskan, 228 00:10:35,490 --> 00:10:39,650 berpotensi dengan fungsi yang disebut pencarian biner atau apa pun. 229 00:10:39,650 --> 00:10:42,580 >> Jadi variabel tumpukan tinggal di sana selama yang Anda inginkan 230 00:10:42,580 --> 00:10:43,490 mereka untuk tinggal di sana. 231 00:10:43,490 --> 00:10:46,090 Dan mereka mendapatkan dimasukkan di sini. 232 00:10:46,090 --> 00:10:47,450 Dan kemudian yang berikutnya akan diletakkan di sana. 233 00:10:47,450 --> 00:10:50,210 Mereka terus mendapatkan diisi, dan mereka tinggal di sana sampai Anda menelepon gratis. 234 00:10:50,210 --> 00:10:52,870 >> Dan pada dasarnya, tumpukan dan tumpukan, mendapatkan pertanyaan Marcus, 235 00:10:52,870 --> 00:10:54,500 tumbuh terhadap satu sama lain. 236 00:10:54,500 --> 00:10:57,730 Dan jika mereka lari ke satu sama lain, Anda sudah digunakan semua memori dalam Anda 237 00:10:57,730 --> 00:11:01,330 komputer, dan program anda akan berhenti karena Anda tidak memiliki memori yang lebih 238 00:11:01,330 --> 00:11:02,420 kiri untuk menggunakan. 239 00:11:02,420 --> 00:11:07,290 Di antara mereka, ada hal-hal yang berpotensi lainnya. 240 00:11:07,290 --> 00:11:10,980 Namun untuk lingkup kursus ini, Anda tidak perlu khawatir tentang itu. 241 00:11:10,980 --> 00:11:12,020 >> Jadi itu jawabannya untuk pertanyaan Anda. 242 00:11:12,020 --> 00:11:13,520 Jangan dipikirkan. 243 00:11:13,520 --> 00:11:15,550 Tapi itu jawaban yang panjang. 244 00:11:15,550 --> 00:11:17,800 Semua yang perlu Anda ketahui adalah tumpukan dan tumpukan akan - 245 00:11:17,800 --> 00:11:18,900 seseorang mulai di bagian bawah. 246 00:11:18,900 --> 00:11:19,570 Tumpukan tidak. 247 00:11:19,570 --> 00:11:20,790 Tumpukan di atas sana. 248 00:11:20,790 --> 00:11:21,990 Mereka akan tumbuh lebih dekat satu sama lain. 249 00:11:21,990 --> 00:11:23,110 >> Dan jika mereka menyentuh, itu adalah masalah. 250 00:11:23,110 --> 00:11:24,500 Anda kehabisan memori. 251 00:11:24,500 --> 00:11:28,760 Tapi juga, selain mengetahui di mana mereka, apa yang disimpan di kedua 252 00:11:28,760 --> 00:11:30,512 stack dan heap. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Ketika mereka bertabrakan, adalah bahwa stack overflow? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Ketika mereka bertabrakan, itu bukan stack overflow. 256 00:11:35,670 --> 00:11:38,340 Sebuah stack overflow adalah daerah yang berbeda bahwa kita dapat pergi jika Anda ingin. 257 00:11:38,340 --> 00:11:40,020 OK, kami akan datang kembali ke dalam sedikit. 258 00:11:40,020 --> 00:11:42,730 >> SISWA: Apa kata yang disebut ketika mereka memukul satu sama lain, 259 00:11:42,730 --> 00:11:44,450 stack dan heap? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Untuk saat ini, jangan khawatir tentang. 261 00:11:46,640 --> 00:11:47,750 Hanya tahu - 262 00:11:47,750 --> 00:11:50,530 Saya akan menjawab pertanyaan itu setelah kelas. 263 00:11:50,530 --> 00:11:52,680 Jika mereka mengalami satu sama lain, Anda kehabisan memori, karena tidak ada lagi 264 00:11:52,680 --> 00:11:53,330 ruang yang ada. 265 00:11:53,330 --> 00:11:55,450 >> MAHASISWA: Maaf, apa kesalahan seg? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: segmen A kesalahan bisa disebut untuk - 267 00:11:58,710 --> 00:12:02,240 itu tergantung mengapa seg kesalahan disebut. 268 00:12:02,240 --> 00:12:06,260 Kadang-kadang, stack overflow Anda, itu akan mengatakan seg kesalahan sebagai kesalahan. 269 00:12:06,260 --> 00:12:08,180 >> MAHASISWA: Bagaimana dereferencing variabel nol? 270 00:12:08,180 --> 00:12:10,040 Apakah itu kesalahan seg? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: Dereferencing pointer nol - 272 00:12:11,480 --> 00:12:17,850 OK, jadi jika Anda memiliki pointer yang ditetapkan sama dengan nol, pointer, ingat, 273 00:12:17,850 --> 00:12:20,270 alamat memori store sebagai nilai-nilai mereka. 274 00:12:20,270 --> 00:12:23,660 Dan pointer nol pada dasarnya menyimpan 0, 0-th 275 00:12:23,660 --> 00:12:26,670 alamat di variabel tersebut. 276 00:12:26,670 --> 00:12:30,010 Jadi 0x, 0, 0, 0, 0, dan sebagainya. 277 00:12:30,010 --> 00:12:35,030 Alamat 0-th dalam memori yang tidak dalam gambar kita, itu terserah ada 278 00:12:35,030 --> 00:12:38,800 di suatu tempat, yang dicadangkan untuk komputer. 279 00:12:38,800 --> 00:12:40,130 Kami tidak diizinkan untuk menyentuhnya. 280 00:12:40,130 --> 00:12:44,680 >> Jadi, ketika program anda yang mengeksekusi, jika sesuatu sedang mencoba untuk pergi ke memori 281 00:12:44,680 --> 00:12:48,990 alamat 0, ia tahu bahwa yang merupakan nilai kosong. 282 00:12:48,990 --> 00:12:50,820 Ia tahu apa-apa harus ada. 283 00:12:50,820 --> 00:12:53,420 Jadi jika Anda mencoba dan menggunakan sesuatu di sana dan memperlakukan sesuatu seperti ada atau 284 00:12:53,420 --> 00:12:58,355 mencoba untuk pergi ke lokasi tersebut, Anda akan mendapatkan kesalahan seg atau kesalahan. 285 00:12:58,355 --> 00:13:00,520 Apakah itu menjawab pertanyaan Anda? 286 00:13:00,520 --> 00:13:03,170 >> Dan sekarang kita akan kembali stack overflow. 287 00:13:03,170 --> 00:13:09,560 Hal-hal di stack, seperti yang kalian punya lihat sebelumnya, di - mari kita mendekat a 288 00:13:09,560 --> 00:13:11,966 up dari bingkai stack. 289 00:13:11,966 --> 00:13:15,050 Dapatkah orang melihat itu? 290 00:13:15,050 --> 00:13:16,650 Jadi kita memiliki stack frame kami. 291 00:13:16,650 --> 00:13:23,260 Kami menyimpan array dalam sebagai lokal variabel dalam fungsi ini. 292 00:13:23,260 --> 00:13:29,510 Jadi katakan array kita memiliki lima tempat. 293 00:13:29,510 --> 00:13:33,230 Semua lima dari mereka akan disimpan dalam stack frame. 294 00:13:33,230 --> 00:13:37,540 >> Jika kita mulai menulis di luar batas-batas array ini - 295 00:13:37,540 --> 00:13:43,990 jadi jika kita mulai menulis ke dalam, katakanlah itu 0. 296 00:13:43,990 --> 00:13:46,800 Mereka adalah lima indeks array kami. 297 00:13:46,800 --> 00:13:50,980 Jika kita mulai menulis ke dalam indeks 5, yang kita tidak punya ketika kita memiliki 298 00:13:50,980 --> 00:13:55,900 array ukuran 5, kita mulai menulis ke Indeks 6, 7, 8, 9, kita bisa mendapatkan sebuah Stack 299 00:13:55,900 --> 00:13:57,960 Overflow error. 300 00:13:57,960 --> 00:14:00,510 >> Umumnya ini tidak - 301 00:14:00,510 --> 00:14:04,910 Anda mungkin akan mendapatkan masalah jika Anda pergi ke per satu. 302 00:14:04,910 --> 00:14:08,640 Tapi pada umumnya, Anda akan masuk ke kebanyakan masalah jika Anda pergi oleh banyak 303 00:14:08,640 --> 00:14:12,770 dan Anda pergi sejauh lebih dari yang Anda tulis atas alamat pengirim yang 304 00:14:12,770 --> 00:14:16,080 fungsi, yang terletak di bawah stack frame. 305 00:14:16,080 --> 00:14:16,520 >> Karena, kan? 306 00:14:16,520 --> 00:14:17,670 Anda - dalam - maaf. 307 00:14:17,670 --> 00:14:18,550 Bukan "karena benar." 308 00:14:18,550 --> 00:14:20,470 >> Dalam stack frame, Anda harus variabel lokal Anda. 309 00:14:20,470 --> 00:14:27,090 Di bagian paling bawah dari tumpukan bingkai adalah alamat pengirim. 310 00:14:27,090 --> 00:14:28,790 Di situlah fungsi pergi kalau sudah selesai. 311 00:14:28,790 --> 00:14:33,750 Dan jika Anda menimpa pengembalian yang alamat, maka ketika tumpukan bingkai ini, 312 00:14:33,750 --> 00:14:36,680 ketika Anda akan melalui stack frame dan mengeksekusi setiap baris, Anda 313 00:14:36,680 --> 00:14:40,350 akan pergi ke alamat pengirim baru Anda yang tertulis di sana bukan 314 00:14:40,350 --> 00:14:40,910 salah satu yang sebenarnya. 315 00:14:40,910 --> 00:14:45,050 Dan itulah bagaimana kita telah melihat beberapa pelanggaran keamanan 316 00:14:45,050 --> 00:14:46,780 dapat terjadi dengan komputer. 317 00:14:46,780 --> 00:14:52,760 >> Jadi stack overflow, singkatnya, adalah ketika Anda menimpa bagian dalam tumpukan 318 00:14:52,760 --> 00:14:55,440 Anda seharusnya menggunakan, lokal variabel Anda seharusnya menggunakan, dan 319 00:14:55,440 --> 00:14:58,070 khususnya ketika Anda mulai Timpa hal-hal penting seperti 320 00:14:58,070 --> 00:14:59,100 kembali alamat. 321 00:14:59,100 --> 00:15:00,090 Dan di situlah Anda akan mendapatkan error. 322 00:15:00,090 --> 00:15:03,980 Atau bahkan mungkin Anda bisa mulai bahkan menulis ke - 323 00:15:03,980 --> 00:15:05,370 mengatakan pencarian biner adalah tepat di atas utama. 324 00:15:05,370 --> 00:15:07,790 Jika Anda menimpa banyak, Anda bisa menulis menjadi utama. 325 00:15:07,790 --> 00:15:10,230 Tapi pada umumnya, Anda mendapatkan error sebelum kemudian, karena komputer tahu 326 00:15:10,230 --> 00:15:12,270 Anda melakukan sesuatu yang Anda tidak harus melakukan. 327 00:15:12,270 --> 00:15:12,560 Ya. 328 00:15:12,560 --> 00:15:13,910 >> SISWA: Apa bedanya antara stack overflow 329 00:15:13,910 --> 00:15:16,940 dan buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Buffer overflow adalah jenis yang lebih umum dari 331 00:15:19,420 --> 00:15:20,395 apa yang saya baru saja dijelaskan. 332 00:15:20,395 --> 00:15:22,610 >> MAHASISWA: Jadi stack overflow adalah contoh buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Tepat. 334 00:15:23,420 --> 00:15:28,700 Ini adalah sebuah array yang bisa kita pikirkan sebagai penyangga, ruang untuk hal-hal untuk masuk 335 00:15:28,700 --> 00:15:30,600 Ini adalah stack buffer overflow. 336 00:15:30,600 --> 00:15:33,210 Kita bisa memiliki tumpukan buffer overflow. 337 00:15:33,210 --> 00:15:36,870 Jika ada buffer, yang ada sering adalah array heap, dan kami 338 00:15:36,870 --> 00:15:40,600 menimpa batas-batas tersebut, maka kita akan memiliki tumpukan buffer overflow. 339 00:15:40,600 --> 00:15:44,870 >> Dan di luar ruang lingkup matakuliah ini, mereka terdeteksi sedikit berbeda. 340 00:15:44,870 --> 00:15:48,040 Compiler memiliki khusus cara untuk mendeteksi setiap. 341 00:15:48,040 --> 00:15:50,660 Tapi buffer overflow adalah lebih generik jenis apa yang saya jelaskan, 342 00:15:50,660 --> 00:15:54,090 yang merupakan tumpukan buffer overflow. 343 00:15:54,090 --> 00:15:56,240 Apakah itu menjawab pertanyaan Anda? 344 00:15:56,240 --> 00:15:57,910 Manis. 345 00:15:57,910 --> 00:16:01,850 >> Apakah ada pertanyaan lain terkait ke stack atau heap? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Ya. 348 00:16:05,510 --> 00:16:08,220 >> SISWA: Aku tahu kau harus string gratis karena mereka berada di tumpukan 349 00:16:08,220 --> 00:16:09,305 dan Anda tidak ingin bocor memori. 350 00:16:09,305 --> 00:16:12,240 Tapi apakah Anda harus membebaskan variabel global dan hal-hal seperti itu? 351 00:16:12,240 --> 00:16:14,335 Atau apakah mereka secara otomatis dibebaskan? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Pertanyaan yang bagus. 353 00:16:15,700 --> 00:16:22,340 Jadi di CS50.H, kita menciptakan hal ini untuk Anda disebut string. 354 00:16:22,340 --> 00:16:23,800 Sebuah string benar-benar apa? 355 00:16:23,800 --> 00:16:24,810 >> MAHASISWA: Bintang Char. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: Sebuah bintang char, pointer untuk karakter, pointer ke 357 00:16:29,180 --> 00:16:30,650 array karakter. 358 00:16:30,650 --> 00:16:32,210 Itulah yang string. 359 00:16:32,210 --> 00:16:36,050 Jadi kita perlu untuk membebaskan, karena GetString, yang kita gunakan banyak - 360 00:16:36,050 --> 00:16:38,370 string name sama GetString - 361 00:16:38,370 --> 00:16:43,560 yang mallocs bagi kita beberapa memori pada tumpukan dan kemudian kembali pointer ke 362 00:16:43,560 --> 00:16:47,230 karakter pertama dari String, bintang arang. 363 00:16:47,230 --> 00:16:52,760 >> Jadi seolah-olah, jika Anda belum menulis bebas pada salah satu string Anda 364 00:16:52,760 --> 00:16:55,600 bahwa Anda telah disebut sejauh ini, Anda memiliki telah bocor beberapa memori. 365 00:16:55,600 --> 00:16:57,430 Tentu saja kita belum berbicara tentang , jadi tidak ada yang mendapat di 366 00:16:57,430 --> 00:16:58,520 kesulitan untuk melakukannya. 367 00:16:58,520 --> 00:16:59,980 Tapi ke depan, ya. 368 00:16:59,980 --> 00:17:03,990 Ketika Anda menelepon GetString, Anda mallocing beberapa ruang di heap. 369 00:17:03,990 --> 00:17:07,640 Dan jika Anda tidak menelepon gratis di kemudian hari bahwa String, Anda memiliki kebocoran memori. 370 00:17:07,640 --> 00:17:09,440 Itu menjawab pertanyaan Anda? 371 00:17:09,440 --> 00:17:10,606 >> Ya 372 00:17:10,606 --> 00:17:15,020 >> MAHASISWA: Jadi untuk melakukan itu, kita menggunakan hak bebas sebelum kembali? 373 00:17:15,020 --> 00:17:18,510 Seperti, dalam lingkup, saya kira jika kita katakan, seperti, int main, dalam 374 00:17:18,510 --> 00:17:24,410 lingkup kode yang ada di dalam mereka kurung kurawal, tepat sebelum - 375 00:17:24,410 --> 00:17:26,140 Anda tahu di mana kau lebih biasanya menempatkan kembali. 376 00:17:26,140 --> 00:17:27,950 Apakah Anda menempatkan bebas sebelum itu? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Sehingga Anda dapat menempatkan gratis mana pun Anda ingin menempatkan gratis. 378 00:17:31,000 --> 00:17:33,810 Karena ini dialokasikan secara dinamis variabel, karena mereka dapat 379 00:17:33,810 --> 00:17:39,170 hidup di luar lingkup tertentu fungsi, jika Anda memanggil malloc dalam 380 00:17:39,170 --> 00:17:44,140 fungsi yang terpisah, misalnya, GetString, Anda dapat menghubungi gratis dalam utama. 381 00:17:44,140 --> 00:17:46,050 Anda tidak perlu menyebutnya dalam fungsi spesifik 382 00:17:46,050 --> 00:17:47,570 dimana malloc disebut. 383 00:17:47,570 --> 00:17:50,340 Tapi Anda perlu menyebutnya sebelum kembali utama. 384 00:17:50,340 --> 00:17:51,120 >> Dan itu benar-benar tergantung. 385 00:17:51,120 --> 00:17:54,960 Hal ini tergantung pada mengapa Anda malloced bahwa ruang di tempat pertama. 386 00:17:54,960 --> 00:17:57,320 Beberapa orang akan menyebutnya membebaskan cukup cepat. 387 00:17:57,320 --> 00:17:59,220 Beberapa orang tidak akan menelepon gratis sampai akhir program mereka. 388 00:17:59,220 --> 00:18:00,660 Dan mereka akan pergi melalui dan bebas segalanya. 389 00:18:00,660 --> 00:18:03,597 Hal ini tergantung pada mengapa Anda disebut malloc. 390 00:18:03,597 --> 00:18:11,270 >> MAHASISWA: Dan apa yang akan Anda katakan jika Anda menelepon menggunakan GetString? 391 00:18:11,270 --> 00:18:13,320 Anda akan mengatakan gratis apa? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Jadi sintaks gratis hanya gratis, paren terbuka, tutup 393 00:18:20,040 --> 00:18:22,130 paren, dan nama pointer. 394 00:18:22,130 --> 00:18:26,410 Jadi jika Anda menulis nama string yang sama dengan GetString, Anda memasukkan nama di sini. 395 00:18:26,410 --> 00:18:27,760 Itulah nama pointer. 396 00:18:27,760 --> 00:18:30,570 Dan ia tahu untuk membebaskan memori itu. 397 00:18:30,570 --> 00:18:33,920 >> MAHASISWA: Jadi ketika membebaskan bahwa memori, pointer masih menunjuk ke tempat itu 398 00:18:33,920 --> 00:18:34,970 dalam memori? 399 00:18:34,970 --> 00:18:39,020 Atau pointer juga dikosongkan dari alamat yang menunjuk ke. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Kita harus mencoba itu. 401 00:18:40,290 --> 00:18:41,430 Kita harus kode itu. 402 00:18:41,430 --> 00:18:43,880 Mari kita kembali ketika kita sampai coding, dan mari kita kode itu. 403 00:18:43,880 --> 00:18:46,000 Dan jika Anda ingin mencari tahu jawabannya untuk itu, Anda juga dapat kode yang 404 00:18:46,000 --> 00:18:46,690 sementara itu. 405 00:18:46,690 --> 00:18:49,100 Tapi itu pertanyaan yang bagus. 406 00:18:49,100 --> 00:18:53,480 >> MAHASISWA: Apakah mungkin untuk sesuatu yang gratis terlalu cepat? 407 00:18:53,480 --> 00:18:58,530 Jadi, Anda masih perlu untuk program anda, dan Anda membebaskan bahwa ruang memori? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Ya. 409 00:18:59,200 --> 00:19:03,020 Hal ini dimungkinkan, jika Anda gratis sesuatu dan kemudian Anda menggunakannya lagi, Anda akan 410 00:19:03,020 --> 00:19:06,890 mengalami kesalahan. 411 00:19:06,890 --> 00:19:10,810 Tapi itu pada Anda, karena Anda dibebaskan sesuatu dan kemudian disebut nanti. 412 00:19:10,810 --> 00:19:13,940 Jadi itu adalah kesalahan programmer. 413 00:19:13,940 --> 00:19:14,780 Tapi ya. 414 00:19:14,780 --> 00:19:17,760 Anda bisa menulis itu. 415 00:19:17,760 --> 00:19:19,240 >> Setiap pertanyaan lebih lanjut tentang - 416 00:19:19,240 --> 00:19:19,760 ya. 417 00:19:19,760 --> 00:19:22,820 >> MAHASISWA: Jadi, jika Anda seharusnya hanya bebas itu secara umum sebelum 418 00:19:22,820 --> 00:19:25,490 Program berakhir, artinya jika Program berakhir dan Anda tidak bebas itu, 419 00:19:25,490 --> 00:19:27,580 memori yang masih dialokasikan? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Jika program Anda berakhir dan Anda lupa untuk membebaskan sesuatu, maka 421 00:19:31,330 --> 00:19:34,390 memori yang dialokasikan sepanjang masa program Anda. 422 00:19:34,390 --> 00:19:37,670 Ketika program Anda menutup sepenuhnya, memori yang tidak akan 423 00:19:37,670 --> 00:19:39,490 untuk tinggal di sana selamanya. 424 00:19:39,490 --> 00:19:42,080 Komputer cukup pintar untuk mengetahui bahwa ketika program ditutup, itu 425 00:19:42,080 --> 00:19:46,440 harus menyingkirkan semua memori yang dikaitkan dengan program itu. 426 00:19:46,440 --> 00:19:51,240 >> Namun, ada alat yang Anda dapat menjalankan pada program untuk mendeteksi jika, ketika 427 00:19:51,240 --> 00:19:54,720 Program selesai, Anda lupa untuk membebaskan beberapa memori. 428 00:19:54,720 --> 00:19:57,960 Dan untuk masalah Anda berikutnya diatur di mana Anda akan menggunakan malloc dan menggunakan 429 00:19:57,960 --> 00:20:02,610 pointer, Anda akan menjalankan ini program pada program Anda untuk melihat apakah, 430 00:20:02,610 --> 00:20:06,530 ketika kembali utama, Anda memiliki beberapa hal-hal yang ditinggalkan unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Jadi mereka tidak akan tinggal malloced selamanya di komputer Anda. 432 00:20:09,130 --> 00:20:11,720 Itu akan sia-sia, karena sangat cepat, komputer 433 00:20:11,720 --> 00:20:12,960 akan kehabisan memori. 434 00:20:12,960 --> 00:20:16,450 Tetapi jika mereka berjalan sampai akhir Anda program dan mereka tidak dibebaskan dan Anda 435 00:20:16,450 --> 00:20:20,260 Program keluar, itu masih masalah bahwa alat ini akan membantu Anda mengatasi. 436 00:20:20,260 --> 00:20:21,520 >> MAHASISWA: Apakah itu Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: Ini disebut Valgrind. 438 00:20:22,910 --> 00:20:23,520 Dan Anda akan - 439 00:20:23,520 --> 00:20:25,780 >> MAHASISWA: Tapi kita tidak perlu tahu bahwa untuk kuis, meskipun? 440 00:20:25,780 --> 00:20:27,600 Maksudku, itu berbicara tentang sedikit dalam kuliah. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: So Valgrind adalah nama dari alat yang. 442 00:20:33,600 --> 00:20:37,180 Mengetahui apa yang dilakukannya adalah cukup untuk kuis. 443 00:20:37,180 --> 00:20:40,200 Tapi Anda belum pernah menggunakan it yet pada Anda permasalahan yang karena kita belum memiliki 444 00:20:40,200 --> 00:20:43,520 masalah set yang telah secara eksplisit ditangani dengan malloc atau Anda menggunakan malloc. 445 00:20:43,520 --> 00:20:45,330 Jadi Anda belum pernah menggunakan Valgrind belum. 446 00:20:45,330 --> 00:20:47,760 Tapi Anda akan menggunakannya lebih cepat daripada nanti. 447 00:20:47,760 --> 00:20:48,710 >> MAHASISWA: Bisakah Anda mengulangi apa Valgrind adalah? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Maaf? 449 00:20:49,190 --> 00:20:51,240 >> MAHASISWA: Bisakah Anda mengulangi apa tujuan Valgring adalah? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind adalah nama - 451 00:20:53,100 --> 00:20:59,890 seperti GDB membantu Anda men-debug program anda, Valgrind membantu Anda mengetahui apakah 452 00:20:59,890 --> 00:21:03,210 hal belum dibebaskan ketika program Anda menutup. 453 00:21:03,210 --> 00:21:05,110 Jadi, Anda akan menjalankannya pada program Anda. 454 00:21:05,110 --> 00:21:09,230 Dan program anda keluar, dan itu akan mengatakan program anda disebut malloc ini banyak 455 00:21:09,230 --> 00:21:13,670 kali untuk ini banyak byte, dan Anda hanya dipanggil gratis ini berkali-kali. 456 00:21:13,670 --> 00:21:16,520 Dan sehingga Anda meninggalkan ini banyak byte tanpa dibebaskan. 457 00:21:16,520 --> 00:21:18,050 Atau akan mengatakan Anda telah dibebaskan semuanya. 458 00:21:18,050 --> 00:21:19,070 Good job. 459 00:21:19,070 --> 00:21:19,480 >> MAHASISWA: OK. 460 00:21:19,480 --> 00:21:21,060 Dan itu disebut Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> SISWA: Sebuah pertanyaan tentang pointer. 463 00:21:25,970 --> 00:21:30,080 Jadi mengatakan Anda telah n membintangi x sama dengan sesuatu. 464 00:21:30,080 --> 00:21:33,330 Itu sama, apa pun yang Anda menempatkan ada, adalah bahwa apa yang sedang dimasukkan ke dalam 465 00:21:33,330 --> 00:21:36,120 apa x menunjuk ke, atau pointer x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Dapatkah Anda ulangi pertanyaannya? 467 00:21:37,690 --> 00:21:39,340 Bisakah kita menarik saat Anda mengatakan itu? 468 00:21:39,340 --> 00:21:42,710 >> MAHASISWA: Dalam kuis, sebenarnya, yang Anda kirimkan kepada kami, itu seperti, char 469 00:21:42,710 --> 00:21:46,520 kebenaran star sama dengan batu CS50, kan? 470 00:21:46,520 --> 00:21:52,190 Jadi, apakah itu berarti bahwa batuan CS50 adalah apa yang sebenarnya menunjuk ke? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Jadi Anda sedang berbicara tentang bintang arang dalam sebuah string, bagaimana 472 00:21:55,810 --> 00:21:56,460 yang bekerja? 473 00:21:56,460 --> 00:21:56,890 Ya. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Mari kita menggambar ini di sini. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE PERCAKAPAN] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Jadi variabel ini akan menjadi tipe bintang arang. 478 00:22:11,130 --> 00:22:14,580 Seberapa besar adalah variabel dari bintang tipe char? 479 00:22:14,580 --> 00:22:15,510 Berapa banyak byte? 480 00:22:15,510 --> 00:22:16,450 >> MAHASISWA: Empat. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Ini empat byte. 482 00:22:18,210 --> 00:22:21,420 Berapa banyak hak-hak adalah variabel tipe int bintang? 483 00:22:21,420 --> 00:22:22,210 >> MAHASISWA: Empat. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Empat byte. 485 00:22:24,910 --> 00:22:28,280 Jika itu pointer, maka selalu empat byte, karena pointer, mereka 486 00:22:28,280 --> 00:22:30,070 Nilai adalah alamat memori. 487 00:22:30,070 --> 00:22:35,160 Dan alamat memori pada CS50 alat empat byte panjang. 488 00:22:35,160 --> 00:22:42,900 Jadi ketika kita sebut GetString, atau ketika kita mengatakan, stringname sama, dan kemudian di 489 00:22:42,900 --> 00:22:46,140 tanda kutip ganda menempatkan string, kita menempatkan - 490 00:22:46,140 --> 00:22:46,920 well, itu sedikit berbeda. 491 00:22:46,920 --> 00:22:48,630 Kami akan melakukan GetString sebagai contoh. 492 00:22:48,630 --> 00:22:52,150 Atau bintang arang sesuatu sama dengan string. 493 00:22:52,150 --> 00:22:54,360 Maaf, beri saya contoh yang Anda baca? 494 00:22:54,360 --> 00:22:57,590 >> MAHASISWA: Bintang kebenaran arang sama "CS50 batu" dalam tanda kutip ganda. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Jadi bintang ini, ini kita akan menyebutnya variabel ini x untuk kami 496 00:23:02,260 --> 00:23:04,060 tujuan generik. 497 00:23:04,060 --> 00:23:05,970 Kami telah menciptakan sebuah variabel yang disebut x. 498 00:23:05,970 --> 00:23:07,610 Ini tipe star arang. 499 00:23:07,610 --> 00:23:10,950 Ini adalah pointer untuk seri karakter. 500 00:23:10,950 --> 00:23:12,200 Jadi di sini - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Jadi ini adalah bagaimana hal ini akan bekerja dalam memori. 503 00:23:25,890 --> 00:23:27,410 Ini akan menyimpan alamat memori. 504 00:23:27,410 --> 00:23:31,770 Ini akan menyimpan alamat memori dari karakter pertama dalam array. 505 00:23:31,770 --> 00:23:33,830 Dan kemudian ketika Anda mengikuti pointer, Anda akan 506 00:23:33,830 --> 00:23:35,200 mendapatkan karakter pertama. 507 00:23:35,200 --> 00:23:38,780 >> Dan jika Anda membaca hal ini seperti string, komputer Anda pintar 508 00:23:38,780 --> 00:23:42,930 cukup untuk mengetahui, membaca semua ini sampai mencapai reaksi 0. 509 00:23:42,930 --> 00:23:45,530 Tapi jika Anda membaca karakter di waktu, sehingga Anda iterasi melalui 510 00:23:45,530 --> 00:23:49,910 string ini, maka Anda hanya akan membaca karakter pada satu waktu sampai Anda mendapatkan 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Yang mungkin tidak menjawab Anda pertanyaan, meskipun. 513 00:23:52,335 --> 00:23:55,610 >> MAHASISWA: Ya, tapi Anda belum malloced ruang yang 514 00:23:55,610 --> 00:23:58,400 namun untuk pointer itu. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Jadi saya tidak yakin persis apa yang Anda lihat, 516 00:24:02,510 --> 00:24:03,640 karena saya tidak membuat kuis itu. 517 00:24:03,640 --> 00:24:06,370 Yang seharusnya membantu sumber daya dari TF lain. 518 00:24:06,370 --> 00:24:11,380 Jika Anda membuat string pada stack atau sebagai variabel lokal, itu akan 519 00:24:11,380 --> 00:24:16,920 hanya menjadi array biaya daripada umumnya bintang arang menunjuk ke 520 00:24:16,920 --> 00:24:18,600 string lain. 521 00:24:18,600 --> 00:24:20,550 Tapi aku tidak tahu. 522 00:24:20,550 --> 00:24:25,065 Itu bisa menjadi pointer yang lain string pada stack juga. 523 00:24:25,065 --> 00:24:27,240 Ya. 524 00:24:27,240 --> 00:24:31,116 >> SISWA: Saya tahu bahwa Anda perlu mengalokasikan memori jika pointer 525 00:24:31,116 --> 00:24:33,360 mendapatkan dideklarasikan di dalam fungsi lain. 526 00:24:33,360 --> 00:24:36,740 Apakah Anda perlu melakukan hal yang sama jika dinyatakan dalam utama, 527 00:24:36,740 --> 00:24:39,570 Anda menggunakannya dalam utama? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Jadi ya. 529 00:24:43,590 --> 00:24:46,670 Anda dapat mendeklarasikan pointer ke setiap alamat memori dalam memori. 530 00:24:46,670 --> 00:24:51,440 Hal ini dapat menjadi alamat memori lokal variabel, meskipun seringkali, 531 00:24:51,440 --> 00:24:55,760 orang tidak menyatakan alamat memori untuk variabel lokal karena mereka pergi 532 00:24:55,760 --> 00:24:59,890 jauh sekali fungsi yang mengembalikan, yang mengapa kita umumnya malloc hal. 533 00:24:59,890 --> 00:25:04,630 Tapi ya, Anda bisa menyatakan pointer ke variabel lokal lain. 534 00:25:04,630 --> 00:25:06,360 Hanya saja umumnya tidak dilakukan. 535 00:25:06,360 --> 00:25:09,480 Tapi aku bisa melihat pada saat itu hal tertentu setelah kelas. 536 00:25:09,480 --> 00:25:10,650 Ya. 537 00:25:10,650 --> 00:25:12,350 >> SISWA: Saya pikir ini adalah semacam dari apa yang diminta. 538 00:25:12,350 --> 00:25:16,930 Kelihatannya aneh untuk menginisialisasi pointer bukan sebagai 539 00:25:16,930 --> 00:25:20,760 alamat, tetapi karena apa yang Sepertinya nilai. 540 00:25:20,760 --> 00:25:25,970 Sepertinya CS50 adalah apa yang ada di dalamnya hal yang sedang menunjuk dan 541 00:25:25,970 --> 00:25:28,820 bukan alamat yang sebenarnya, kan? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Jadi itu tidak terjadi, meskipun. 543 00:25:30,520 --> 00:25:32,470 Itu bukan apa yang terjadi. 544 00:25:32,470 --> 00:25:35,910 Ketika Anda mendeklarasikan bintang char, itu adalah alamat memori. 545 00:25:35,910 --> 00:25:38,860 Pointer adalah semua alamat memori menunjuk ke sesuatu yang lain. 546 00:25:38,860 --> 00:25:41,480 Itu sesuatu yang lain bisa berada di stack, tetapi hampir selalu ada di 547 00:25:41,480 --> 00:25:43,440 tumpukan dalam cara kita akan melihat dulu. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Tapi stringname sama dengan double-quote "GetString," kita dapat melihat itu dan kami 550 00:25:53,500 --> 00:25:55,010 dapat melihat melalui itu dan kode itu. 551 00:25:55,010 --> 00:26:01,190 GetString string tidak disimpan di bahwa variabel, atau apa pun string 552 00:26:01,190 --> 00:26:04,580 Nama ini tidak disimpan dalam variabel, karena itu bukan cara 553 00:26:04,580 --> 00:26:06,070 pointer bekerja. 554 00:26:06,070 --> 00:26:06,770 Apakah itu masuk akal? 555 00:26:06,770 --> 00:26:07,170 >> MAHASISWA: Ya. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Mudah-mudahan, itu tidak membingungkan kepada siapa pun. 558 00:26:11,690 --> 00:26:15,732 Tapi kalau itu, kita dapat melihat lagi dalam sedikit, karena kami benar-benar akan 559 00:26:15,732 --> 00:26:19,240 kode sesuatu yang akan mudah-mudahan bekerja dengan string dan membantu Anda merasa 560 00:26:19,240 --> 00:26:22,170 lebih nyaman dengan mereka. 561 00:26:22,170 --> 00:26:24,869 >> Ada pertanyaan lain yang berkaitan dengan ini topik atau topik lain yang 562 00:26:24,869 --> 00:26:26,119 Aku akan menaruh kembali? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Dan - 565 00:26:34,840 --> 00:26:36,310 sekarang. 566 00:26:36,310 --> 00:26:37,630 Ya, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Jadi ini sama sekali tidak berhubungan, tapi bisakah kita pergi ke 568 00:26:39,860 --> 00:26:42,760 sangat cepat apa yang kita perlu tahu tentang perbedaan antara 32 dan 569 00:26:42,760 --> 00:26:46,345 Mesin 64-bit? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Ya. 571 00:26:47,740 --> 00:26:52,111 Jadi 32 bit adalah berapa banyak byte? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Ini empat byte. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Ini empat byte. 574 00:26:54,360 --> 00:26:58,420 Dan 64 bit adalah berapa banyak byte? 575 00:26:58,420 --> 00:26:59,112 >> MAHASISWA: Delapan. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Delapan byte. 577 00:27:00,610 --> 00:27:03,980 Jadi sekali lagi, delapan bit adalah satu byte. 578 00:27:03,980 --> 00:27:08,340 Alat CS50 Anda mesin 32-bit. 579 00:27:08,340 --> 00:27:13,650 Jadi alamat memori empat byte panjang. 580 00:27:13,650 --> 00:27:17,460 Ada 2 ke 32 alamat memori. 581 00:27:17,460 --> 00:27:21,310 0 sampai 2 dengan 32 dikurangi 1. 582 00:27:21,310 --> 00:27:27,630 Dan aku tidak positif, tapi itu mungkin ruang lingkup apa yang Anda butuhkan untuk 583 00:27:27,630 --> 00:27:35,230 tahu mesin 32-bit, memori alamat, sekali lagi, empat byte panjang, 584 00:27:35,230 --> 00:27:39,620 dan itulah jumlah maksimum alamat memori. 585 00:27:39,620 --> 00:27:41,680 >> Selain itu, tipe data - 586 00:27:41,680 --> 00:27:45,020 ini mungkin sesuatu yang baik itu perlu diperhatikan. 587 00:27:45,020 --> 00:27:49,610 Ukuran tipe data tergantung pada mesin Anda bekerja dengan. 588 00:27:49,610 --> 00:27:56,760 Jadi char, karakter tunggal, adalah bagaimana banyak byte pada alat CS50 kami? 589 00:27:56,760 --> 00:27:57,980 Satu byte. 590 00:27:57,980 --> 00:28:02,310 Dan itu benar-benar satu byte sebagai baik pada mesin 64-bit. 591 00:28:02,310 --> 00:28:05,920 >> Dan sebagian besar jenis data nomor yang sama dari byte pada kedua mesin. 592 00:28:05,920 --> 00:28:11,620 Tetapi beberapa tipe data akan berbeda pada kedua mesin. 593 00:28:11,620 --> 00:28:14,590 Sehingga akan berpotensi Satu-satunya hal yang perlu Anda ketahui. 594 00:28:14,590 --> 00:28:16,710 >> Tetapi bahkan itu, saya pikir, berada di luar batas - 595 00:28:16,710 --> 00:28:20,990 Aku hampir yakin, jika Anda melihat kembali di kuis tua, ia mengatakan, berasumsi untuk 596 00:28:20,990 --> 00:28:24,090 coding masalah Anda menggunakan mesin 32-bit. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Tapi ada, untuk pergi bersama dengan itu dalam Jika Anda tertarik, ada 599 00:28:30,620 --> 00:28:35,920 tipe data yang sama ukuran pada semua mesin. 600 00:28:35,920 --> 00:28:42,670 >> Jika Anda pernah melihat sesuatu seperti uint32_t, Anda mungkin atau mungkin 601 00:28:42,670 --> 00:28:43,260 tidak melihat itu. 602 00:28:43,260 --> 00:28:44,290 Itu tipe data. 603 00:28:44,290 --> 00:28:47,570 Itu mengatakan, menjadi 32 bit tidak peduli apa mesin ini adalah pada. 604 00:28:47,570 --> 00:28:50,350 Jadi, ketika orang menulis portable kode, mereka mungkin tidak akan menggunakan ints. 605 00:28:50,350 --> 00:28:53,260 Mereka bukannya akan menggunakan data-data lainnya jenis yang mereka tahu akan sama 606 00:28:53,260 --> 00:28:54,780 ukuran pada setiap mesin tunggal. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> MADHU: Saya punya pertanyaan tentang proses kompilasi. 610 00:29:00,150 --> 00:29:04,110 Jadi jika Anda sedang menulis sebuah program yang menggunakan perpustakaan seperti CS50 atau sesuatu 611 00:29:04,110 --> 00:29:06,840 seperti itu, saya tahu bahwa perpustakaan yang harus, di beberapa titik, menjadi 612 00:29:06,840 --> 00:29:08,590 dikompilasi dan dihubungkan masuk 613 00:29:08,590 --> 00:29:13,380 Tapi berapa banyak yang terjadi selama penyusunan program anda? 614 00:29:13,380 --> 00:29:15,880 Apa bagian dari proses perpustakaan terjadi ketika Anda 615 00:29:15,880 --> 00:29:18,560 kompilasi program Anda sendiri? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Jadi mari kita pergi ke umumnya langkah-langkah dari proses ini. 617 00:29:24,020 --> 00:29:26,280 Anda menulis file c. Anda. 618 00:29:26,280 --> 00:29:33,530 Dalam file c., Anda # include Anda Header perpustakaan, misalnya, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Apa yang mencakup tajam baris lakukan untuk program anda? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Ia menambahkan prototipe fungsi dari header 622 00:29:43,350 --> 00:29:45,120 file dalam perpustakaan. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Tepat. 624 00:29:45,600 --> 00:29:49,870 Ia menambahkan fungsi tersebut prototipe ke kode Anda. 625 00:29:49,870 --> 00:29:55,230 Jadi, ketika kode Anda sedang disusun dalam tahap awal, compiler tahu 626 00:29:55,230 --> 00:29:59,250 bahwa fungsi-fungsi ini benar-benar ada, dan bahwa di suatu tempat mereka telah didefinisikan. 627 00:29:59,250 --> 00:30:02,460 File-file. H tidak termasuk definisi untuk fungsi-fungsi ini atau bagaimana 628 00:30:02,460 --> 00:30:03,950 mereka benar-benar bekerja. 629 00:30:03,950 --> 00:30:07,960 Cs50.h hanya mencakup sesuatu yang mengatakan GetString adalah hal nyata yang 630 00:30:07,960 --> 00:30:09,270 bisa terjadi. 631 00:30:09,270 --> 00:30:14,240 Dan standardio.h mengatakan printf adalah sebuah hal yang nyata yang bisa terjadi. 632 00:30:14,240 --> 00:30:23,190 >> Header Jadi bahasa c Anda dengan ini. file akan berubah menjadi beberapa 633 00:30:23,190 --> 00:30:27,750 kode mesin yang dapat dibaca, yang akhirnya akan berubah menjadi biner 634 00:30:27,750 --> 00:30:30,030 kode, 0 dan 1. 635 00:30:30,030 --> 00:30:33,590 Dan itulah kode yang pada akhirnya dijalankan. 636 00:30:33,590 --> 00:30:38,550 The-l CS50 line - misalnya, ketika Anda sedang menulis dentang - 637 00:30:38,550 --> 00:30:41,830 dan kemudian Anda termasuk-l CS50, Anda mengetik itu masuk 638 00:30:41,830 --> 00:30:42,180 Dan Anda melihat bahwa. 639 00:30:42,180 --> 00:30:43,890 Ketika Anda menulis membuat, Anda akan melihat baris yang di sini. 640 00:30:43,890 --> 00:30:47,740 Dan kita akan melihat bahwa dalam satu detik ketika kita kode atau nanti pada saat kita kode. 641 00:30:47,740 --> 00:30:50,390 >> Tapi itu-l garis CS50 melakukan sesuatu sedikit berbeda dari 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Apa garis itu-l CS50 lakukan? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Saya ingin mengatakan bahwa itu link perpustakaan ke fungsi 646 00:31:00,310 --> 00:31:02,710 panggilan, seperti file o.. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Jadi sangat dekat, jika tidak spot-on. 648 00:31:08,200 --> 00:31:16,220 The-l CS50 mengambil file biner dan menyatu dengan file biner Anda. 649 00:31:16,220 --> 00:31:21,410 Jadi cs50.h, tidak ada gunanya dalam mengubah cs50.h dari bahasa C ke biner setiap 650 00:31:21,410 --> 00:31:23,130 waktu tunggal itu digunakan. 651 00:31:23,130 --> 00:31:26,650 Itu akan konyol, karena akan membuang banyak waktu. 652 00:31:26,650 --> 00:31:30,420 Jadi telah disusun dan berubah menjadi executable. 653 00:31:30,420 --> 00:31:35,430 Dan sekarang itu akan digabung dengan file Anda di akhir. 654 00:31:35,430 --> 00:31:38,370 Jadi mereka 1 dan 0 akan untuk bergabung dengan orang yang Anda 655 00:31:38,370 --> 00:31:39,150 dan 0 pada akhir. 656 00:31:39,150 --> 00:31:43,670 Jadi sekarang Anda benar-benar akan memiliki sebenarnya 1 dan 0 yang menentukan bagaimana GetString, 657 00:31:43,670 --> 00:31:47,890 misalnya, bekerja, atau bagaimana printf, misalnya, bekerja. 658 00:31:47,890 --> 00:31:52,750 >> Dan untuk informasi lebih lanjut, ada compiler pendek yang memberikan Nate bahwa 659 00:31:52,750 --> 00:31:55,410 Anda harus memeriksa yang berlangsung melalui langkah-langkah ini. 660 00:31:55,410 --> 00:31:56,050 Tapi - 661 00:31:56,050 --> 00:31:56,560 ya. 662 00:31:56,560 --> 00:32:01,700 >> MAHASISWA: Apakah mereka selalu dalam file o. ketika mereka sedang dalam bentuk perpustakaan, 663 00:32:01,700 --> 00:32:06,764 siap untuk digabung, terkait - seperti mereka dalam kode biner? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Apa - 666 00:32:08,420 --> 00:32:11,780 >> MAHASISWA: Apakah itu selalu terjadi untuk perpustakaan ketika Anda menghubungkan mereka? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Ya. 668 00:32:12,500 --> 00:32:17,300 Jadi ada. S file, yang akan kode mesin, yang juga akan 669 00:32:17,300 --> 00:32:17,975 samar bagi Anda. 670 00:32:17,975 --> 00:32:19,410 Anda tidak perlu khawatir tentang mereka. 671 00:32:19,410 --> 00:32:24,930 Tapi pada umumnya, yeah, mereka akan berada di. o file siap untuk pergi. 672 00:32:24,930 --> 00:32:27,170 >> MAHASISWA: Jadi, ketika Anda mengirim ke perpustakaan, apakah Anda hanya kapal 673 00:32:27,170 --> 00:32:28,880 h. dan. o? 674 00:32:28,880 --> 00:32:32,210 Anda tidak kapal c. Atau. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: So - 676 00:32:33,070 --> 00:32:36,260 dan ini adalah singkatnya ini juga, jika Informasi ini tampaknya datang suatu 677 00:32:36,260 --> 00:32:36,700 sedikit cepat. 678 00:32:36,700 --> 00:32:39,870 Tapi pendek pada kompiler berbicara tentang ini juga. 679 00:32:39,870 --> 00:32:43,290 Ketika Anda mengirimkan perpustakaan, jika Anda kapal h., file header, mereka 680 00:32:43,290 --> 00:32:46,290 prototipe fungsi, dan 1 dan 0 itu, itu semua yang Anda butuhkan untuk memberikan. 681 00:32:46,290 --> 00:32:50,640 Anda tidak perlu memberikan bagaimana fungsi bekerja, file c.. 682 00:32:50,640 --> 00:32:56,360 Karena titik abstraksi, atau titik API, titik di SPL ini, 683 00:32:56,360 --> 00:32:59,650 Stanford perpustakaan portabel, itu bagi Anda untuk tidak khawatir tentang bagaimana baru 684 00:32:59,650 --> 00:33:04,220 GRect bekerja, atau bagaimana memindahkan karya, atau bagaimana menambah bekerja. 685 00:33:04,220 --> 00:33:06,520 Semua yang perlu Anda ketahui adalah bahwa add adalah fungsi yang dapat Anda 686 00:33:06,520 --> 00:33:08,880 gunakan, dan hal ini. 687 00:33:08,880 --> 00:33:12,760 Jadi Anda benar-benar tidak perlu tahu bagaimana itu ditulis di C. Anda hanya perlu 688 00:33:12,760 --> 00:33:15,460 tahu, di sini adalah fungsi, apa yang mereka lakukan, dan di sini adalah 1 dan 0 689 00:33:15,460 --> 00:33:18,870 ketika Anda benar-benar ingin menggunakannya. 690 00:33:18,870 --> 00:33:19,530 >> Keren. 691 00:33:19,530 --> 00:33:26,980 Setiap pertanyaan lebih lanjut tentang compiler atau topik lainnya di papan? 692 00:33:26,980 --> 00:33:30,300 >> SISWA: Saya punya pertanyaan dari melaksanakan fungsi rekursif. 693 00:33:30,300 --> 00:33:31,170 Sebuah pertanyaan tentang rekursi. 694 00:33:31,170 --> 00:33:33,030 Aku punya perasaan yang akan datang. 695 00:33:33,030 --> 00:33:38,310 Jadi mari kita cepat pergi melalui rekursi dengan spesifik 696 00:33:38,310 --> 00:33:40,690 Misalnya, fungsi faktorial. 697 00:33:40,690 --> 00:33:44,920 Karena ini adalah sebuah contoh yang sering muncul atau digunakan 698 00:33:44,920 --> 00:33:46,170 untuk menggambarkan rekursi. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Jadi "4!" dibaca sebagai 4 faktorial. 701 00:33:56,410 --> 00:33:59,120 Dan apa artinya 4 faktorial? 702 00:33:59,120 --> 00:34:00,696 Apa artinya itu lakukan? 703 00:34:00,696 --> 00:34:02,235 Bagaimana Anda menghitung faktorial 4? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 kali 3 kali 2 kali 1. 706 00:34:07,960 --> 00:34:11,889 >> Jadi cara lain untuk menulis 4 faktorial adalah untuk menulis ini. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 kali 3 faktorial. 709 00:34:19,022 --> 00:34:22,080 Karena 3 faktorial adalah 3 kali 2 kali 1. 710 00:34:22,080 --> 00:34:27,580 Jadi 4 kali 3 faktorial adalah 4 kali 3 kali 2 kali 1. 711 00:34:27,580 --> 00:34:32,679 Inilah sebabnya mengapa faktorial adalah besar calon rekursi, karena itu 712 00:34:32,679 --> 00:34:36,630 jelas bahwa ada sesuatu yang terjadi berulang-ulang pada 713 00:34:36,630 --> 00:34:39,820 sejumlah kecil hal-hal sampai Anda mencapai akhir. 714 00:34:39,820 --> 00:34:42,570 Ketika Anda mencapai 1, 1 faktorial adalah 1. 715 00:34:42,570 --> 00:34:43,719 Anda tidak bisa pergi lebih jauh. 716 00:34:43,719 --> 00:34:47,219 0 faktorial juga didefinisikan sebagai 1. 717 00:34:47,219 --> 00:34:50,679 Jadi, ketika Anda sampai ke 1 atau 0, Anda di akhir, dan Anda dapat 718 00:34:50,679 --> 00:34:53,219 mulai naik kembali. 719 00:34:53,219 --> 00:34:59,540 Jadi jika kita ingin menulis sebuah rekursif fungsi untuk menghitung faktorial, 720 00:34:59,540 --> 00:35:02,170 kita akan menulis beberapa pseudocode untuk itu sekarang. 721 00:35:02,170 --> 00:35:03,300 Sebelum kita menulis pseudocode itu - 722 00:35:03,300 --> 00:35:05,660 Aku akan memberikan kalian beberapa menit untuk menulis kode semu atau hanya berpikir 723 00:35:05,660 --> 00:35:09,600 tentang hal ini - ada dua hal setiap fungsi rekursif kebutuhan. 724 00:35:09,600 --> 00:35:12,530 Apa kedua hal itu? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Hal ini untuk menyebut dirinya. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Silakan. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Hal ini untuk menyebut dirinya. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Jadi rekursif fungsi membutuhkan panggilan rekursif, a 731 00:35:19,220 --> 00:35:20,220 panggilan untuk dirinya sendiri. 732 00:35:20,220 --> 00:35:20,770 Itu salah satu. 733 00:35:20,770 --> 00:35:21,510 Dan apa hal lain? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Sebuah kasus dasar. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: Sebuah kasus dasar. 736 00:35:23,780 --> 00:35:26,940 Sebuah kasus dasar adalah, di sini adalah ketika kita berhenti. 737 00:35:26,940 --> 00:35:29,510 Jadi fungsi Anda dipanggil. 738 00:35:29,510 --> 00:35:31,410 Kasus dasar datang pertama. 739 00:35:31,410 --> 00:35:33,710 Anda ingin tahu apakah Anda berada di akhir. 740 00:35:33,710 --> 00:35:37,110 Dan jika Anda tidak di akhir, Anda membuat panggilan rekursif Anda. 741 00:35:37,110 --> 00:35:39,880 Dan Anda pergi melalui fungsi ini lagi, memeriksa kasus dasar Anda lagi. 742 00:35:39,880 --> 00:35:42,575 Jika Anda tidak akhirnya, Anda membuat panggilan rekursif lain, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> Itulah mengapa fungsi rekursif selalu perlu kasus-kasus dasar dan mereka 745 00:35:47,110 --> 00:35:48,210 panggilan rekursif. 746 00:35:48,210 --> 00:35:51,280 Jika Anda tidak memiliki panggilan rekursif, itu tidak akan menjadi fungsi rekursif. 747 00:35:51,280 --> 00:35:53,210 Jika Anda tidak memiliki kasus dasar, Anda akan pergi selamanya dan 748 00:35:53,210 --> 00:35:54,780 tidak akan ada akhir. 749 00:35:54,780 --> 00:35:57,870 Dan kasus dasar selalu datang pertama, karena Anda akan selalu ingin memeriksa 750 00:35:57,870 --> 00:36:00,420 jika Anda di akhir pertama. 751 00:36:00,420 --> 00:36:04,770 Jadi sebelum kita melakukan beberapa pseudocode, mengapa Anda tidak luangkan waktu sebentar untuk berpikir tentang 752 00:36:04,770 --> 00:36:09,360 bagaimana fungsi faktorial rekursif akan ditulis? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Selain itu, sebanyak yang Anda lakukan, menulis itu pada selembar kertas 755 00:36:26,010 --> 00:36:27,960 apa yang Anda akan harus lakukan pada kuis besok. 756 00:36:27,960 --> 00:36:32,160 Praktek jadi mungkin baik untuk membuat Pastikan kode Anda sedang menulis 757 00:36:32,160 --> 00:36:34,420 di atas selembar kertas - 758 00:36:34,420 --> 00:36:35,160 atau Anda bisa melakukan itu. 759 00:36:35,160 --> 00:36:36,710 Anda tahu di mana titik koma adalah. 760 00:36:36,710 --> 00:36:37,660 Kau ingat sintaks. 761 00:36:37,660 --> 00:36:40,400 Karena Anda tidak dapat memiliki compiler memberitahu Anda membuat kesalahan. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Juga, di sepanjang jalur tersebut, besok, ketika Anda telah coding masalah, jika Anda 764 00:37:07,240 --> 00:37:11,490 bergegas untuk waktu, atau jika Anda sangat bingung bagaimana Anda seharusnya 765 00:37:11,490 --> 00:37:16,030 menulis hal tertentu dalam c, itu akan behoove Anda untuk menulis pseudo-code 766 00:37:16,030 --> 00:37:18,160 atau menulis komentar di juga. 767 00:37:18,160 --> 00:37:21,940 Karena ada kredit parsial untuk banyak pertanyaan pada kuis. 768 00:37:21,940 --> 00:37:24,840 Jadi Anda mungkin terburu-buru, atau Anda mungkin saja bingung. 769 00:37:24,840 --> 00:37:28,030 Menulis dalam komentar atau pseudo-code sering cara yang Anda 770 00:37:28,030 --> 00:37:29,360 bisa mendapatkan kredit parsial. 771 00:37:29,360 --> 00:37:31,440 >> Jadi jangan meninggalkan sesuatu kosong di kuis. 772 00:37:31,440 --> 00:37:33,490 Tidak ada hukuman untuk menempatkan hal-hal masuk 773 00:37:33,490 --> 00:37:37,650 Bahkan, menempatkan dalam pseudo-code atau Komentar akan membantu grader yang 774 00:37:37,650 --> 00:37:40,410 mencari tahu apakah Anda benar-benar tahu apa yang Anda bicarakan, dan mungkin penghargaan 775 00:37:40,410 --> 00:37:42,030 Anda beberapa kredit parsial untuk itu. 776 00:37:42,030 --> 00:37:44,510 >> Juga di sepanjang jalur tersebut, menulis dengan jelas. 777 00:37:44,510 --> 00:37:47,650 Jika kita tidak bisa benar-benar apa yang Anda tulis, kita tidak akan menelepon Anda 778 00:37:47,650 --> 00:37:49,900 pada tengah malam besok untuk angka apa yang Anda tulis. 779 00:37:49,900 --> 00:37:51,520 Kami hanya akan melepas poin. 780 00:37:51,520 --> 00:37:56,570 Menulis dengan jelas sehingga kita bisa mendengar, atau lebih tepatnya, kita dapat membaca apa yang Anda tulis. 781 00:37:56,570 --> 00:38:00,230 >> Dan jika ia mengatakan dua kalimat, tidak menulis sebuah paragraf. 782 00:38:00,230 --> 00:38:02,280 Ikuti petunjuk. 783 00:38:02,280 --> 00:38:03,500 Menulis dengan jelas. 784 00:38:03,500 --> 00:38:07,720 Dan menulis pada mereka komentar atau pseudocode untuk pertanyaan-pertanyaan yang bisa 785 00:38:07,720 --> 00:38:10,270 penghargaan kredit parsial. 786 00:38:10,270 --> 00:38:12,520 >> OK, mari kita pergi ke faktorial. 787 00:38:12,520 --> 00:38:15,000 Jadi kita memiliki fungsi faktorial. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Jika saya benar-benar menulis ini di C, apa yang harus saya harus menempatkan sebelum nama 790 00:38:21,550 --> 00:38:22,800 fungsi? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Jenis kembali, yang, dalam hal ini kasus, kami akan memberikan int. 793 00:38:30,060 --> 00:38:35,450 Dan kemudian di dalam kurung kurawal, adalah apa yang terjadi di dalam kurung kurawal untuk 794 00:38:35,450 --> 00:38:36,850 fungsi? 795 00:38:36,850 --> 00:38:37,950 >> MAHASISWA: Jenis Argumen. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: argumen Its. 797 00:38:39,150 --> 00:38:42,680 Jadi faktorial mungkin akan mengambil argumen. 798 00:38:42,680 --> 00:38:44,500 Ini akan mungkin hanya mengambil satu argumen. 799 00:38:44,500 --> 00:38:49,450 Dan kami akan mengatakan itu akan mengambil integer disebut x. 800 00:38:49,450 --> 00:38:52,770 Dan lagi, ketika menulis prototipe fungsi atau menulis fungsi 801 00:38:52,770 --> 00:38:57,110 dalam kode Anda sebelum menentukan itu, Anda menulis tipe data dan nama 802 00:38:57,110 --> 00:39:01,370 bahwa variabel untuk fungsi itu saja. 803 00:39:01,370 --> 00:39:06,350 Sehingga Anda dapat melewati beberapa nomor ke ini fungsi, itu akan disebut sebagai x 804 00:39:06,350 --> 00:39:07,340 internal. 805 00:39:07,340 --> 00:39:08,755 >> Kami memiliki fungsi faktorial kami. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Kita perlu dua hal, kasus dasar dan panggilan rekursif. 808 00:39:15,850 --> 00:39:20,900 Apa kasus dasar untuk faktorial? 809 00:39:20,900 --> 00:39:24,850 Seseorang yang menulis itu dan siapa yang tidak berbicara lagi, apa dasar 810 00:39:24,850 --> 00:39:26,100 kasus untuk faktorial? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> MAHASISWA: Jika n kurang dari 2, kembali 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Jika n adalah kurang dari 2, kembali 1. 814 00:39:33,520 --> 00:39:37,216 Saya suka itu, karena itu mengurus 0 dan 1. 815 00:39:37,216 --> 00:39:45,290 Jadi kita akan lakukan x <2, kembali 1. 816 00:39:45,290 --> 00:39:47,870 Jika kita bisa melewati 0, jika kita mendapatkan berlalu 1, fungsi ini akan 817 00:39:47,870 --> 00:39:49,790 segera mengembalikan 1. 818 00:39:49,790 --> 00:39:54,020 Jika kita bisa melewati beberapa nomor lebih besar dari atau sama dengan 2, kita akan 819 00:39:54,020 --> 00:39:55,370 memiliki panggilan rekursif kami. 820 00:39:55,370 --> 00:39:57,855 >> Dan bagaimana yang akan bekerja? 821 00:39:57,855 --> 00:40:01,070 Dapatkah orang lain yang bekerja pada ini yang belum berbicara memberi saya 822 00:40:01,070 --> 00:40:07,380 panggilan rekursif untuk fungsi ini dalam pseudocode? 823 00:40:07,380 --> 00:40:10,770 Jika kita bisa diteruskan di sejumlah x dan itu lebih besar dari 2, apa 824 00:40:10,770 --> 00:40:13,370 yang ingin kita lakukan? 825 00:40:13,370 --> 00:40:17,930 Kami juga telah contoh ditulis pada samping yang mungkin memberikan petunjuk. 826 00:40:17,930 --> 00:40:20,770 >> MAHASISWA: Call x kali faktorial x dikurangi 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Tepat. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Kita akan kembali x kali faktorial dari x dikurangi 1. 830 00:40:37,750 --> 00:40:41,810 Dan itu, meskipun aku menulis, Pada dasarnya, apa yang Anda katakan dalam bahasa Inggris, 831 00:40:41,810 --> 00:40:44,580 fungsi faktorial ini akan dipanggil lagi. 832 00:40:44,580 --> 00:40:46,320 Ini akan mengeksekusi pada x dikurangi 1. 833 00:40:46,320 --> 00:40:49,320 Ini akan kembali dengan beberapa integer, dan maka akan kalikan kedua 834 00:40:49,320 --> 00:40:52,050 bersama-sama, dan nilai yang akan kembali ke apa yang disebut ini 835 00:40:52,050 --> 00:40:55,010 fungsi faktorial, kekuatan yang menjadi contoh lain dari 836 00:40:55,010 --> 00:40:58,420 fungsi faktorial ini. 837 00:40:58,420 --> 00:41:01,360 >> Jadi itu adalah contoh dari sebuah rekursif fungsi, sangat 838 00:41:01,360 --> 00:41:02,530 fungsi rekursif sederhana. 839 00:41:02,530 --> 00:41:04,530 Tapi kebanyakan dari mereka akan menjadi seperti ini. 840 00:41:04,530 --> 00:41:11,170 Jika Anda ingin rekursif baik menantang untuk kuis, coba coding 841 00:41:11,170 --> 00:41:13,230 pencarian biner rekursif. 842 00:41:13,230 --> 00:41:18,950 Karena jika Anda melakukan pencarian biner untuk masalah menetapkan tiga, Anda mungkin melakukannya 843 00:41:18,950 --> 00:41:21,730 iteratif dalam loop sementara. 844 00:41:21,730 --> 00:41:23,700 >> Tetapi juga dapat ditulis rekursif. 845 00:41:23,700 --> 00:41:26,310 Anda akan perlu untuk menulis sendiri fungsi yang terpisah yang mengambil beberapa 846 00:41:26,310 --> 00:41:29,020 berbeda argumen baris perintah - atau bukan baris perintah argumen, beberapa 847 00:41:29,020 --> 00:41:30,910 argumen hanya biasa yang berbeda. 848 00:41:30,910 --> 00:41:33,870 Tapi Anda bisa menulis pencarian biner rekursif juga. 849 00:41:33,870 --> 00:41:36,190 >> MAHASISWA: Jadi Anda bisa juga menulis, bukan x dikurangi 1, Anda 850 00:41:36,190 --> 00:41:39,502 bisa juga menulis x dikurangi dikurangi, atau Anda bisa memiliki 851 00:41:39,502 --> 00:41:40,830 ditulis dikurangi dikurangi x. 852 00:41:40,830 --> 00:41:44,740 Dapatkah Anda hanya menjelaskan mengapa sangat cepat mereka akan hal-hal yang berbeda, 853 00:41:44,740 --> 00:41:49,510 seperti apa perbedaan antara x dikurangi dikurangi dan dikurangi dikurangi x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Tidak, aku tidak akan masuk ke itu. 855 00:41:51,320 --> 00:41:55,500 Tapi saya akan berbicara dengan Anda tentang hal itu setelah kelas. x dikurangi dikurangi, dikurangi dikurangi x 856 00:41:55,500 --> 00:41:57,780 pengurangan x dengan 1. 857 00:41:57,780 --> 00:41:59,090 Tapi mereka melakukannya sedikit berbeda. 858 00:41:59,090 --> 00:42:00,340 Tapi aku tidak ingin pergi ke dalam. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Pertanyaan lain tentang rekursi atau fungsi ini? 861 00:42:09,090 --> 00:42:10,140 Itu tidak benar-benar bahkan pseudocode. 862 00:42:10,140 --> 00:42:15,060 Itu pada dasarnya kode C Anda akan menulis untuk ini. 863 00:42:15,060 --> 00:42:19,393 >> OK, pertanyaan lain tentang topik di sini? 864 00:42:19,393 --> 00:42:19,864 Ya. 865 00:42:19,864 --> 00:42:23,130 >> SISWA: Saya memiliki ikhtisar singkat dari floating point dan presisi. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Mengambang titik dan presisi. 867 00:42:24,260 --> 00:42:26,920 Dapatkah seseorang benar-benar cepat memberikan ikhtisar dari 868 00:42:26,920 --> 00:42:28,210 floating point dan presisi? 869 00:42:28,210 --> 00:42:30,420 Anda semua harus melakukan ini untuk Anda masalah ditetapkan, sehingga Anda semua 870 00:42:30,420 --> 00:42:31,700 akrab dengannya. 871 00:42:31,700 --> 00:42:35,090 Atau mungkin tidak semua dari Anda. 872 00:42:35,090 --> 00:42:36,602 Siapa saja? 873 00:42:36,602 --> 00:42:39,530 Beri aku tempat dimulai. 874 00:42:39,530 --> 00:42:40,750 Floating point dan presisi. 875 00:42:40,750 --> 00:42:42,380 Apa masalahnya? 876 00:42:42,380 --> 00:42:42,960 Ya. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Maaf. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Hanya ada jumlah terbatas angka yang dapat diwakili 882 00:42:51,550 --> 00:42:57,930 karena Anda berada di dalam kita kasus, sistem 32-bit. 883 00:42:57,930 --> 00:43:03,080 Jadi, Anda semacam harus membuat beberapa angka. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Jadi itu tepat. 885 00:43:03,910 --> 00:43:08,110 Hanya ada sejumlah angka yang dapat diwakili. 886 00:43:08,110 --> 00:43:11,770 Jika Anda mengalikan dua angka yang sangat besar, mungkin meluap jumlah 887 00:43:11,770 --> 00:43:13,950 ruang yang Anda miliki untuk mewakili integer. 888 00:43:13,950 --> 00:43:17,930 Itulah mengapa terkadang kita menggunakan lama bukan sebuah int. 889 00:43:17,930 --> 00:43:19,210 Itu memiliki lebih banyak ruang. 890 00:43:19,210 --> 00:43:21,210 Yang dapat menampung jumlah yang lebih besar. 891 00:43:21,210 --> 00:43:24,310 >> Floating point presisi harus dilakukan dengan itu, tetapi juga berkaitan dengan 892 00:43:24,310 --> 00:43:29,300 fakta bahwa angka desimal yang tidak selalu terwakili. 893 00:43:29,300 --> 00:43:29,540 Maaf. 894 00:43:29,540 --> 00:43:31,280 Biarkan aku kembali hal ini. 895 00:43:31,280 --> 00:43:36,610 Angka desimal 1.0 tidak selalu diwakili seperti yang Anda harapkan, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Hal ini kadang-kadang direpresentasikan sebagai 1,000000001 0,999999999 atau. 898 00:43:50,360 --> 00:43:52,780 Mungkin bahkan 89 dilempar di sana di suatu tempat. 899 00:43:52,780 --> 00:43:56,560 Jadi angka-angka desimal tidak diwakili persis seperti Anda akan 900 00:43:56,560 --> 00:43:58,430 mengharapkan mereka untuk diwakili. 901 00:43:58,430 --> 00:44:00,010 >> Jadi dalam masalah set - 902 00:44:00,010 --> 00:44:00,860 apakah itu dua? - 903 00:44:00,860 --> 00:44:05,290 masalah mengatur dua, di mana kita berurusan dengan angka floating point, ketika kita ingin 904 00:44:05,290 --> 00:44:08,690 mereka mewakili apa yang kita inginkan mereka untuk mewakili, jumlah 905 00:44:08,690 --> 00:44:12,860 sen, atau jumlah sen, kita kalikan mereka dengan 100. 906 00:44:12,860 --> 00:44:14,750 Kami mengitari mereka. 907 00:44:14,750 --> 00:44:18,660 Dan kemudian kita memotong segala sesuatu di belakang titik desimal. 908 00:44:18,660 --> 00:44:22,020 Ini untuk memastikan bahwa mereka akan sebenarnya sama apa yang kita inginkan 909 00:44:22,020 --> 00:44:22,410 mereka sama. 910 00:44:22,410 --> 00:44:26,870 >> Karena ketika Anda mengambil sesuatu yang a mengambang dan mengubahnya menjadi sebuah int, Anda 911 00:44:26,870 --> 00:44:29,860 memotong segala sesuatu ke kanan titik desimal. 912 00:44:29,860 --> 00:44:33,900 Karena ada beberapa floating point ketidaktepatan, 100.000 mungkin 913 00:44:33,900 --> 00:44:37,440 direpresentasikan sebagai 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Dan jika Anda hanya memotong segala sesuatu untuk hak segera, Anda akan 915 00:44:40,350 --> 00:44:41,600 mendapatkan nomor yang salah. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Ya. 918 00:44:44,180 --> 00:44:45,290 >> SISWA: aku punya pertanyaan tentang pengecoran. 919 00:44:45,290 --> 00:44:47,500 Agar Apa terjadi pada? 920 00:44:47,500 --> 00:44:54,480 Jika Anda akan melakukan float, kurung, 1 dibagi 10, apakah itu yang 1 dibagi dengan 10, 921 00:44:54,480 --> 00:44:58,910 kemudian mendapatkan 0,1, kemudian hidupkan ke pelampung? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Jika Anda mengapung 1 dibagi dengan 10 - 923 00:45:01,470 --> 00:45:02,550 >> MAHASISWA: Ya, dan kemudian sama - 924 00:45:02,550 --> 00:45:04,240 baik, itu akan normal memilikinya sama dalam - 925 00:45:04,240 --> 00:45:04,690 Ya. 926 00:45:04,690 --> 00:45:06,760 Anda ingin membuat pelampung, kan? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, jadi kita akan menggunakannya untuk Segue ke Warnet 928 00:45:12,790 --> 00:45:15,390 jawaban atas pertanyaan-pertanyaan ini melalui coding. 929 00:45:15,390 --> 00:45:18,180 Karena Anda mungkin akan memiliki banyak pertanyaan kecil ini, dan cara yang baik 930 00:45:18,180 --> 00:45:19,100 untuk menyelesaikannya adalah melalui coding. 931 00:45:19,100 --> 00:45:21,320 Jadi kita akan kode ini sekarang, dan kemudian kita akan kembali dan 932 00:45:21,320 --> 00:45:24,020 kode pertanyaan yang Anda miliki. 933 00:45:24,020 --> 00:45:24,950 >> Jadi baris pertama - 934 00:45:24,950 --> 00:45:29,390 Saya tidak seharusnya menulis itu - apa yang hal pertama yang ingin kita lakukan ketika kita 935 00:45:29,390 --> 00:45:32,250 membuka file baru di gedit? 936 00:45:32,250 --> 00:45:34,190 >> MAHASISWA: Sertakan. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Sertakan apa? 938 00:45:35,920 --> 00:45:37,952 >> MAHASISWA: perpustakaan CS50. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Apa lagi yang harus kita termasuk? 941 00:45:42,590 --> 00:45:46,820 Kami hanya akan memeriksa apa yang terjadi ketika Anda melemparkan sesuatu ke pelampung. 942 00:45:46,820 --> 00:45:48,605 Tapi apa yang kita perlu menyertakan jika kita akan menulis sebuah program C? 943 00:45:48,605 --> 00:45:49,300 >> SISWA: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Kami benar-benar tidak perlu, untuk ini Program, cs50.h, meskipun itu 946 00:45:54,880 --> 00:45:55,920 selalu membantu untuk memasukkannya. 947 00:45:55,920 --> 00:45:58,260 Tapi kita selalu membutuhkan stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> MAHASISWA: Ketika coding di C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Ketika coding di C. 950 00:46:15,770 --> 00:46:17,090 >> Jadi saya simpan sebagai berkas ini c.. 951 00:46:17,090 --> 00:46:18,590 Saya mendapatkan beberapa nice sintaks. 952 00:46:18,590 --> 00:46:22,890 Saya menulis kekosongan dalam utama. 953 00:46:22,890 --> 00:46:24,792 Apa artinya batal? 954 00:46:24,792 --> 00:46:26,740 >> MAHASISWA: Tidak mengambil argumen baris perintah. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: berarti Void, dalam hal ini kasus, utama tidak mengambil 956 00:46:28,900 --> 00:46:29,700 argumen baris perintah. 957 00:46:29,700 --> 00:46:32,720 Dalam kasus lain, itu berarti fungsi tidak mengambil argumen baris perintah. 958 00:46:32,720 --> 00:46:36,560 Atau fungsi, jika saya harus menulis batal main (void), yang akan mengatakan itu utama 959 00:46:36,560 --> 00:46:38,460 tidak mengembalikan apa-apa. 960 00:46:38,460 --> 00:46:39,960 Jadi batal hanya berarti apa-apa. 961 00:46:39,960 --> 00:46:42,510 Apa yang akan saya tulis jika saya mengambil argumen command-line? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> MAHASISWA: int busur string c busur v 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc String argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Apakah itu benar? 967 00:46:55,572 --> 00:46:58,720 >> SISWA: Ini Char kurung bintang argv. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Jadi Anda bisa menulis kurung String argv atau bintang arang argv 969 00:47:01,730 --> 00:47:03,710 kurung, tetapi Anda membutuhkan tanda kurung. 970 00:47:03,710 --> 00:47:06,290 Karena argv adalah array string, ingat. 971 00:47:06,290 --> 00:47:07,360 Ini bukan hanya satu string. 972 00:47:07,360 --> 00:47:10,350 Jadi String argv adalah, inilah satu string disebut argv. 973 00:47:10,350 --> 00:47:13,630 Kurung String argv adalah, inilah array dari string. 974 00:47:13,630 --> 00:47:17,865 Jadi int argc kurung String argv akan menjadi sesuatu yang saya 975 00:47:17,865 --> 00:47:18,810 mungkin akan menulis. 976 00:47:18,810 --> 00:47:23,050 >> Jadi, Anda ingin menyimpan dalam integer? 977 00:47:23,050 --> 00:47:24,285 >> MAHASISWA: Ya, integer. 978 00:47:24,285 --> 00:47:25,840 Atau pelampung. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: Dalam pelampung? 980 00:47:26,710 --> 00:47:30,790 Seperti, float x sama dengan 1 dibagi dengan 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Bagaimana cara mencetak pelampung di printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Apa? 986 00:47:46,714 --> 00:47:47,560 >> MAHASISWA:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Apa integer? 989 00:47:50,810 --> 00:47:52,110 d atau i. 990 00:47:52,110 --> 00:47:53,000 Apa string? 991 00:47:53,000 --> 00:47:54,240 >> MAHASISWA: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 Bagaimana cara mendapatkan baris baru? 994 00:47:57,550 --> 00:47:58,800 >> MAHASISWA: Backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Apa yang harus saya kembali jika berjalan utama dengan benar? 997 00:48:07,100 --> 00:48:08,360 >> MAHASISWA: 0. 998 00:48:08,360 --> 00:48:09,430 Apakah saya perlu menulis baris tersebut, meskipun? 999 00:48:09,430 --> 00:48:10,170 >> MAHASISWA: No 1000 00:48:10,170 --> 00:48:11,513 OK, kita tidak akan menuliskannya, lalu. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Dapatkah semua orang membaca itu? 1003 00:48:17,190 --> 00:48:18,485 Ini terlihat agak kecil. 1004 00:48:18,485 --> 00:48:20,160 Dapatkah orang melihat, atau harus Saya membuatnya lebih besar? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Saya pikir untuk kamera, kita akan membuat itu sedikit lebih besar, meskipun. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Jika saya ingin mengubah ini . C file ke dalam executable, apa 1009 00:48:38,410 --> 00:48:39,260 aku menulis? 1010 00:48:39,260 --> 00:48:41,610 >> MAHASISWA: Membuat test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Maaf? 1012 00:48:42,080 --> 00:48:42,790 >> MAHASISWA: Membuat test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Membuat test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Kami sedang membicarakan baris ini sebelumnya. 1016 00:48:48,410 --> 00:48:49,140 Dentang. 1017 00:48:49,140 --> 00:48:51,270 Apa dentang? 1018 00:48:51,270 --> 00:48:52,200 Nama compiler. 1019 00:48:52,200 --> 00:48:53,920 Apa baris ini? 1020 00:48:53,920 --> 00:48:55,580 >> MAHASISWA: Mengatur itu untuk penggunaan GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Set itu untuk penggunaan GDB. 1022 00:48:59,230 --> 00:49:02,338 Baris ini, apa itu? 1023 00:49:02,338 --> 00:49:03,290 >> MAHASISWA: Source code. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Itulah file sumber, file c.. 1025 00:49:06,010 --> 00:49:08,150 Apa yang dua baris ini lakukan? 1026 00:49:08,150 --> 00:49:10,245 Atau dua baris ini tidak. 1027 00:49:10,245 --> 00:49:12,300 >> SISWA: Ini nama itu menguji. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Jadi dasbor o mengatakan, nama itu sesuatu yang berbeda. 1029 00:49:15,410 --> 00:49:16,790 Dan di sini Anda menyebutnya tes. 1030 00:49:16,790 --> 00:49:18,900 Jika aku tidak memiliki itu di, apakah itu nama ini? 1031 00:49:18,900 --> 00:49:20,260 >> MAHASISWA: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 Apa yang dilakukan ini? 1034 00:49:25,366 --> 00:49:27,670 >> MAHASISWA: Link perpustakaan matematika. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Ini link di perpustakaan matematika. 1036 00:49:29,550 --> 00:49:32,880 Kami tidak termasuk perpustakaan matematika, tetapi karena itulah begitu umum, mereka sudah 1037 00:49:32,880 --> 00:49:35,780 make tertulis untuk selalu menyertakan perpustakaan matematika. 1038 00:49:35,780 --> 00:49:39,050 Dan juga, ini termasuk perpustakaan CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, jadi jika kita daftar, kita sekarang memiliki perintah yang disebut tes. 1040 00:49:43,010 --> 00:49:45,150 Untuk menjalankannya, saya menulis tes. 1041 00:49:45,150 --> 00:49:48,330 Saya melihat bahwa floating point saya, seperti yang diharapkan, sama dengan 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Apakah itu - 1044 00:49:51,590 --> 00:49:52,060 jadi - 1045 00:49:52,060 --> 00:49:55,210 >> MAHASISWA: Kemudian jika Anda menempatkan mengapung sekarang, seperti Anda dilemparkan sebagai pelampung - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Cast 1 sampai pelampung? 1047 00:49:56,870 --> 00:49:59,180 >> MAHASISWA: Tidak, melemparkan hal penuh - 1048 00:49:59,180 --> 00:49:59,500 ya. 1049 00:49:59,500 --> 00:50:02,460 Jika Anda hanya melakukan itu, akan yang membuatnya 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, sehingga benar-benar cepat, 1 dibagi dengan 10, yaitu 1051 00:50:07,170 --> 00:50:08,690 bilangan bulat yang dibagi. 1052 00:50:08,690 --> 00:50:13,580 Jadi, ketika Anda membagi bilangan bulat, mereka 0, dan Anda menghemat bahwa 0 dalam 1053 00:50:13,580 --> 00:50:17,170 mengapung, karena slash adalah hanya pembagian integer. 1054 00:50:17,170 --> 00:50:19,180 Jadi sekarang kita mengubah sesuatu menjadi pelampung. 1055 00:50:19,180 --> 00:50:21,650 >> Mari kita lihat apa yang terjadi. 1056 00:50:21,650 --> 00:50:22,900 Kami akan membuat tes. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Jadi sekarang kita melihat bahwa slash itu tidak pembagian integer, itu mengambang 1059 00:50:31,090 --> 00:50:32,640 pembagian titik. 1060 00:50:32,640 --> 00:50:35,700 Karena salah satu argumen telah dilemparkan ke float. 1061 00:50:35,700 --> 00:50:38,380 Jadi sekarang itu mengatakan, memperlakukan ini divisi seperti kita sedang berhadapan dengan 1062 00:50:38,380 --> 00:50:40,140 poin mengambang, bukan dengan bilangan bulat. 1063 00:50:40,140 --> 00:50:42,760 Dan jadi kami mendapatkan jawaban yang kita harapkan. 1064 00:50:42,760 --> 00:50:44,620 >> Mari kita lihat apa yang terjadi - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Jika saya ingin mencetak lebih banyak desimal bintik-bintik, bagaimana saya bisa melakukan itu? 1067 00:50:51,646 --> 00:50:55,550 >> MAHASISWA: Point dot f, atau sebanyak desimal yang Anda inginkan. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Jadi saya mencetak 10 tempat desimal. 1070 00:51:04,440 --> 00:51:06,610 Dan kita sekarang melihat kita mendapatkan beberapa hal aneh. 1071 00:51:06,610 --> 00:51:09,650 Dan yang akan kembali ke pertanyaan Anda tentang floating point ketidaktepatan. 1072 00:51:09,650 --> 00:51:10,950 Ada hal-hal aneh yang tersimpan di sini. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, apakah itu menjawab pertanyaan Anda? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Apa lagi yang Anda inginkan kode cepat? 1077 00:51:20,200 --> 00:51:25,470 >> SISWA: Aku hanya ingin melihat apakah tidak, jika Anda membebaskan beberapa pointer, 1078 00:51:25,470 --> 00:51:30,410 apakah pointer yang masih telah disimpan dalam itu alamat apa yang telah 1079 00:51:30,410 --> 00:51:32,170 menunjuk ke sebelumnya. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, jadi mari kita melakukan itu. 1081 00:51:34,100 --> 00:51:38,030 Ptr star Char, ini menciptakan sebuah variabel disebut ptr tipe bintang arang. 1082 00:51:38,030 --> 00:51:39,280 Bagaimana cara menulis malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Just malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Tapi kemudian itu harus ukuran, dan dalam hal ini, saya kira kau lebih 1087 00:51:51,040 --> 00:51:52,465 menunjuk ke char. 1088 00:51:52,465 --> 00:51:54,450 Jadi itu akan menjadi arang. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, jadi lebih umum, Inside - 1090 00:51:57,520 --> 00:51:58,770 mari kita edit. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Di dalam malloc, Anda ingin nomor dari byte di heap. 1093 00:52:09,260 --> 00:52:12,320 Secara umum, apa yang kita telah melihat bahwa kita lakukan adalah kita akan malloc 1094 00:52:12,320 --> 00:52:14,940 string, misalnya, atau array bilangan bulat. 1095 00:52:14,940 --> 00:52:21,600 Jadi jika kita ingin 10 bilangan bulat, atau 10 chars, 10 akan memberi kita 10. 1096 00:52:21,600 --> 00:52:24,370 Dan kemudian ukuran karakter akan memberikan kita bahwa ukuran karakter, yang pada 1097 00:52:24,370 --> 00:52:25,120 kasus ini adalah 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Kami mendapatkan 10 byte. 1099 00:52:26,250 --> 00:52:28,540 Jika kita menulis ukuran int, yang akan memberi kita 40 byte. 1100 00:52:28,540 --> 00:52:31,520 >> Jadi lebih umum, dalam malloc adalah jumlah byte yang Anda inginkan. 1101 00:52:31,520 --> 00:52:34,620 Dalam hal ini, kita mendapatkan 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Yang tampaknya seperti penggunaan aneh malloc, tapi untuk kami 1103 00:52:36,900 --> 00:52:38,470 tujuan masuk akal. 1104 00:52:38,470 --> 00:52:40,420 Jadi ada itu. 1105 00:52:40,420 --> 00:52:43,420 >> Kita akan menelepon gratis. 1106 00:52:43,420 --> 00:52:47,040 Kami menyingkirkan itu dan kami menggunakan ptr lagi. 1107 00:52:47,040 --> 00:52:48,750 Dan apa yang Anda ingin memeriksa? 1108 00:52:48,750 --> 00:52:50,550 >> SISWA: Aku hanya ingin memeriksa apakah atau tidak ada apa-apa 1109 00:52:50,550 --> 00:52:51,900 di dalamnya. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Jadi apakah itu menunjuk sesuatu? 1111 00:52:53,050 --> 00:52:57,740 >> MAHASISWA: Ya, tepatnya, apakah itu masih memiliki alamat memori. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Jadi, Anda ingin untuk memeriksa nilai ptr? 1113 00:53:02,220 --> 00:53:03,470 >> MAHASISWA: Ya, persis. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Apa yang saya tulis di sini jika saya ingin memeriksa nilai dari 1116 00:53:10,160 --> 00:53:11,880 Titik - apa, Jordan mengatakan, nilai? 1117 00:53:11,880 --> 00:53:13,720 Atau apa yang disimpan dalam ptr? 1118 00:53:13,720 --> 00:53:14,620 >> SISWA: Sebuah alamat memori. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: Sebuah alamat memori. 1120 00:53:16,330 --> 00:53:20,520 Jadi jika saya menulis ini saja, itu akan memberikan nilai ptr. 1121 00:53:20,520 --> 00:53:22,800 Dan bagaimana cara mencetak alamat memori? 1122 00:53:22,800 --> 00:53:26,470 Apa format string untuk alamat memori? 1123 00:53:26,470 --> 00:53:27,430 >> MAHASISWA:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% p. 1125 00:53:28,050 --> 00:53:29,500 % S adalah string. 1126 00:53:29,500 --> 00:53:30,750 % P untuk pointer. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Apakah itu benar? 1129 00:53:43,540 --> 00:53:44,790 Itu benar. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Jadi ptr sama - 1132 00:53:51,040 --> 00:53:53,350 masih memiliki sesuatu di dalamnya. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Ini mungkin lebih pertanyaan yang menarik. 1135 00:53:57,645 --> 00:53:59,198 Apa garis yang melakukan? 1136 00:53:59,198 --> 00:54:00,830 >> MAHASISWA: Seg kesalahan. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Apa? 1138 00:54:01,310 --> 00:54:02,678 >> SISWA: Saya pikir itu seg kesalahan. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> SISWA: Saya pikir itu akan seg kesalahan. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Jadi baris ini kode, bintang ptr, apa 1142 00:54:08,265 --> 00:54:10,152 berarti bintang itu? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Isi. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Ya. 1145 00:54:11,560 --> 00:54:13,910 Pergi untuk mendapatkan isi. 1146 00:54:13,910 --> 00:54:16,830 Jadi ini akan pergi ke memori alamat di sana dan memberi saya itu. 1147 00:54:16,830 --> 00:54:21,030 Saya menggunakan% c di sini karena ada adalah karakter yang tersimpan di sana. 1148 00:54:21,030 --> 00:54:23,390 Jadi kita akan pergi ke alamat kita hanya melihat - atau mungkin akan menjadi 1149 00:54:23,390 --> 00:54:25,190 sedikit ini berbeda waktu kita menjalankan program. 1150 00:54:25,190 --> 00:54:28,010 Tapi kita akan pergi ke alamat tersebut yang kita tahu masih ada 1151 00:54:28,010 --> 00:54:29,260 dan melihat apa yang ada. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Jadi tidak seg kesalahan. 1154 00:54:37,110 --> 00:54:38,970 Itu hanya tidak memberi kami apa-apa. 1155 00:54:38,970 --> 00:54:43,350 Mungkin benar-benar memberi kita sesuatu, kita tidak bisa melihatnya. 1156 00:54:43,350 --> 00:54:45,110 Dan yang akan kembali ke ide ini - 1157 00:54:45,110 --> 00:54:47,270 dan kita tidak akan mendapatkan terlalu banyak ke ini, karena itulah di luar 1158 00:54:47,270 --> 00:54:48,460 ruang lingkup matakuliah ini. 1159 00:54:48,460 --> 00:54:51,260 Tapi kita bicarakan di sini, jika kita melampaui batas-batas array dengan 1160 00:54:51,260 --> 00:54:54,890 1, kita mungkin tidak mendapat masalah. 1161 00:54:54,890 --> 00:54:58,550 >> Kadang-kadang, ketika Anda hanya pergi dengan 1, Anda melakukan sesuatu yang salah, dan Anda 1162 00:54:58,550 --> 00:54:59,220 bisa mendapat masalah. 1163 00:54:59,220 --> 00:55:00,820 Tapi Anda tidak selalu mendapat masalah. 1164 00:55:00,820 --> 00:55:05,170 Itu tergantung berapa banyak hal yang buruk Anda lakukan, Anda akan mendapat masalah. 1165 00:55:05,170 --> 00:55:07,790 Yang bukan untuk mengatakan, ceroboh dengan kode Anda. 1166 00:55:07,790 --> 00:55:12,080 Tapi itu mengatakan, program ini tidak akan selalu berhenti, bahkan jika Anda pergi ke suatu tempat 1167 00:55:12,080 --> 00:55:14,130 Anda tidak harus pergi. 1168 00:55:14,130 --> 00:55:18,170 >> Sebuah contoh yang baik dari itu adalah, banyak orang dalam masalah mereka set 3, yang 1169 00:55:18,170 --> 00:55:22,350 adalah 15, tidak memeriksa batas-batas papan. 1170 00:55:22,350 --> 00:55:25,860 Jadi Anda melihat ke kiri, melihat ke kanan, tampak atas, tampak 1171 00:55:25,860 --> 00:55:27,000 ke bawah. 1172 00:55:27,000 --> 00:55:31,540 Tapi kau tidak memeriksa untuk melihat apakah atas benar-benar akan berada di papan. 1173 00:55:31,540 --> 00:55:35,220 Dan banyak orang yang melakukan itu dan ternyata bahwa dalam program mereka bekerja 1174 00:55:35,220 --> 00:55:38,960 sempurna, karena di mana papan itu disimpan dalam memori, jika Anda pergi satu 1175 00:55:38,960 --> 00:55:42,300 di atas atau memeriksa bahwa memori alamat, tidak ada apa-apa 1176 00:55:42,300 --> 00:55:44,870 sangat mengerikan tentang itu, sehingga program Anda tidak 1177 00:55:44,870 --> 00:55:45,970 akan berteriak pada Anda. 1178 00:55:45,970 --> 00:55:48,870 >> Tapi kita masih akan melepas poin jika Anda tidak memeriksa itu, karena Anda 1179 00:55:48,870 --> 00:55:50,850 melakukan sesuatu yang Anda tidak seharusnya dilakukan, dan Anda bisa memiliki 1180 00:55:50,850 --> 00:55:51,860 mendapatkan dalam kesulitan. 1181 00:55:51,860 --> 00:55:54,040 Kemungkinannya, meskipun, Anda mungkin tidak. 1182 00:55:54,040 --> 00:55:57,790 Jadi ini adalah untuk menunjukkan bahwa, ya, kita masih bisa pergi ke sana. 1183 00:55:57,790 --> 00:55:59,010 Dan kita tidak mendapatkan di kesulitan dalam hal ini. 1184 00:55:59,010 --> 00:56:04,000 Jika kita mencoba untuk melakukan membaca selanjutnya 100 karakter, kita akan 1185 00:56:04,000 --> 00:56:06,000 mungkin mendapatkan dalam kesulitan. 1186 00:56:06,000 --> 00:56:09,400 Dan Anda dapat membaca kode 100 berikutnya karakter jika Anda inginkan dengan melakukan beberapa 1187 00:56:09,400 --> 00:56:10,110 semacam untuk loop. 1188 00:56:10,110 --> 00:56:10,850 Ya. 1189 00:56:10,850 --> 00:56:16,250 >> MAHASISWA: Karena kami ditugaskan bahwa ruang nilai yang sebenarnya, kita tidak akan 1190 00:56:16,250 --> 00:56:17,050 benar-benar dapat melihat apa-apa. 1191 00:56:17,050 --> 00:56:21,740 Haruskah kita mencobanya dengan pengaturan yang sama seperti c atau sesuatu? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Pertanyaan besar. 1193 00:56:22,640 --> 00:56:25,340 Bagaimana cara menetapkan bahwa nilai - 1194 00:56:25,340 --> 00:56:28,980 apa baris kode yang saya tulis pada baris tujuh untuk melakukan apa yang Anda katakan? 1195 00:56:28,980 --> 00:56:34,040 >> MAHASISWA: Star ptr sama tunggal quote c mengakhiri kutip tunggal. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Jadi yang menempatkan karakter, c, di lokasi itu, 1197 00:56:36,970 --> 00:56:40,200 karena lagi-lagi, bintang yang berarti pergi ke sana. 1198 00:56:40,200 --> 00:56:43,320 Dan bila digunakan di sisi kiri operator penugasan, yang sama dengan 1199 00:56:43,320 --> 00:56:47,270 menandatangani, kita tidak akan mendapatkan bahwa nilai begitu banyak seperti menetapkan nilai tersebut. 1200 00:56:47,270 --> 00:56:48,520 Sekarang mari kita lihat apa yang terjadi. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Kami menempatkan sesuatu di sana dan itu ada di sana. 1203 00:56:56,770 --> 00:56:58,000 Kami disebut gratis. 1204 00:56:58,000 --> 00:57:00,100 Beberapa hal mungkin terjadi di heap. 1205 00:57:00,100 --> 00:57:01,890 Jadi tidak ada lagi. 1206 00:57:01,890 --> 00:57:07,440 Tapi sekali lagi, kita tidak mendapatkan dalam kesulitan untuk pergi ke sana. 1207 00:57:07,440 --> 00:57:10,260 >> Aku melakukan ini dalam kode untuk menggambarkan yang banyak ini 1208 00:57:10,260 --> 00:57:12,410 pertanyaan yang Anda miliki, mereka benar-benar menarik 1209 00:57:12,410 --> 00:57:13,650 menjawab banyak waktu. 1210 00:57:13,650 --> 00:57:15,260 Dan mereka benar-benar baik pertanyaan. 1211 00:57:15,260 --> 00:57:19,010 Dan Anda dapat mencari mereka di Anda sendiri jika, misalnya, 1212 00:57:19,010 --> 00:57:19,990 kita tidak dalam bagian. 1213 00:57:19,990 --> 00:57:20,940 Ya. 1214 00:57:20,940 --> 00:57:24,430 >> MAHASISWA: Karena Anda tidak mengirim pointer di mana saja, yang perlu Anda 1215 00:57:24,430 --> 00:57:26,530 menggunakan malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Jadi ini kembali untuk pertanyaan awal Anda. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Apakah hanya variabel lokal? 1219 00:57:29,980 --> 00:57:32,280 Malloc sini bukanlah bahwa menarik. 1220 00:57:32,280 --> 00:57:35,260 Penggunaan malloc sini tidak yang menarik karena 1221 00:57:35,260 --> 00:57:36,500 hanya variabel lokal. 1222 00:57:36,500 --> 00:57:40,970 >> MAHASISWA: Jadi bisa Anda lakukan arang star ptr sama halo? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Oh. 1224 00:57:41,400 --> 00:57:43,300 Jadi kita akan sekarang kembali untuk pertanyaan awal Anda. 1225 00:57:43,300 --> 00:57:46,885 Saya pikir Anda tidak puas dengan jawaban saya. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Seperti itu? 1228 00:57:49,226 --> 00:57:49,682 >> MAHASISWA: Ya. 1229 00:57:49,682 --> 00:57:50,932 Tunggu. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: Dan di mana Anda ingin mencetak? 1232 00:57:57,850 --> 00:58:00,026 Jadi kita akan mencetak string seperti itu? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> MAHASISWA: Interesting. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Jadi ini mengatakan ini argumen memiliki tipe karakter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Jadi ini harus menjadi karakter. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> MAHASISWA: Hanya mengambil yang pertama. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Jadi ini adalah apa yang saya katakan sebelumnya. 1242 00:58:28,610 --> 00:58:34,240 Seperti saya katakan, itu tidak menyimpan String dalam pointer variabel. 1243 00:58:34,240 --> 00:58:35,120 Ini menyimpan - 1244 00:58:35,120 --> 00:58:36,350 >> SISWA: Nilai pertama string. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Alamat nilai pertama dari string. 1246 00:58:40,810 --> 00:58:46,940 Jika kita mencetak ini, kami mendapatkan nilai di dalam pointer. 1247 00:58:46,940 --> 00:58:51,005 Dan kita akan melihat itu, memang, alamat memori. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Apakah itu masuk akal? 1250 00:58:56,440 --> 00:58:56,940 Maaf. 1251 00:58:56,940 --> 00:58:58,996 Tunggu, apakah itu menjawab Anda pertanyaan, meskipun? 1252 00:58:58,996 --> 00:58:59,790 >> MAHASISWA: Ya. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Baris kode ini adalah menciptakan string dan kemudian lain 1254 00:59:05,830 --> 00:59:09,115 pointer variabel yang menunjuk string itu, array itu. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Ya. 1257 00:59:14,980 --> 00:59:19,200 >> MAHASISWA: Jadi jika kita pergi satu memori alamat lebih jauh, akan kita h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Apakah itu telah disimpan sebagai string? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Seperti, kita lakukan - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 jadi ini sangat berharga untuk melakukan. 1263 00:59:30,790 --> 00:59:33,780 Ini adalah titik aritmatika, yang kalian telah terlihat sebelumnya dan harus 1264 00:59:33,780 --> 00:59:35,550 relatif nyaman dengan. 1265 00:59:35,550 --> 00:59:36,905 Hal ini mirip dengan menulis - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 jika kita menulis baris kode, kami telah melihat notasi array sebelumnya. 1268 00:59:46,350 --> 00:59:55,900 Ini akan memberikan kita yang kedua nilai dalam array ini, h. 1269 00:59:55,900 --> 01:00:05,010 >> Jika kita melakukan ini, ini juga harus memberikan kami nilai kedua dalam array itu. 1270 01:00:05,010 --> 01:00:08,320 Karena itu akan tidak memori alamat hal pertama, tetapi 1271 01:00:08,320 --> 01:00:10,530 alamat memori dari hal yang satu atas. 1272 01:00:10,530 --> 01:00:14,360 Dan kemudian dereferences Operator star bahwa pointer. 1273 01:00:14,360 --> 01:00:16,940 Dan lagi, mari kita lihat. 1274 01:00:16,940 --> 01:00:18,664 Kami mendapatkan h lagi. 1275 01:00:18,664 --> 01:00:20,980 >> SISWA: Apa sebenarnya yang dereference artinya? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Dereference adalah kata mewah untuk pergi ke. 1277 01:00:23,650 --> 01:00:26,390 Pergi ke itu dan mendapatkan apa yang ada adalah untuk dereference pointer. 1278 01:00:26,390 --> 01:00:28,240 Itu hanya kata keren untuk itu. 1279 01:00:28,240 --> 01:00:29,986 >> MAHASISWA: Jika kita ingin print seluruh string, bisa kita 1280 01:00:29,986 --> 01:00:31,930 melakukan pointer ampersand? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, kita akan berhenti di sini. 1282 01:00:33,490 --> 01:00:35,480 Kita akan berakhir di sini. 1283 01:00:35,480 --> 01:00:41,760 Ampersand memberi Anda alamat lokasi, sehingga ketika Anda melakukan ampersand dari 1284 01:00:41,760 --> 01:00:44,080 variabel, memberikan Anda alamat dimana variabel yang disimpan. 1285 01:00:44,080 --> 01:00:48,580 Pointer ampersand akan memberikan alamat ptr mana ptr dalam memori. 1286 01:00:48,580 --> 01:00:50,140 >> Kami tidak akan pergi dengan contoh ini. 1287 01:00:50,140 --> 01:00:52,640 Anda dapat mengetahui ini hal-hal pada Anda sendiri. 1288 01:00:52,640 --> 01:00:55,740 Tetapi sekali lagi, ini bahkan mungkin verging a sedikit di luar apa yang perlu Anda ketahui untuk 1289 01:00:55,740 --> 01:00:58,000 lingkup jangka menengah ini - 1290 01:00:58,000 --> 01:00:59,070 atau kuis ini, bukan. 1291 01:00:59,070 --> 01:01:00,270 Maaf. 1292 01:01:00,270 --> 01:01:03,770 >> Kita akan pindah, karena saya akan ingin melakukan satu coding masalah 1293 01:01:03,770 --> 01:01:05,100 sebelum waktu habis. 1294 01:01:05,100 --> 01:01:09,340 Dan kami akan kode apa yang saya pikir adalah yang paling menarik dari ini 1295 01:01:09,340 --> 01:01:11,020 contoh, atoi. 1296 01:01:11,020 --> 01:01:14,520 Jadi ini adalah pertanyaan tentang kuis dua tahun lalu. 1297 01:01:14,520 --> 01:01:17,810 Dan aku punya di papan di sini. 1298 01:01:17,810 --> 01:01:20,680 >> Orang-orang bertanya pada kuis - 1299 01:01:20,680 --> 01:01:23,640 mereka diberi sedikit lebih tesxt di pertanyaan, tapi aku menghilangkan 1300 01:01:23,640 --> 01:01:26,640 teks karena itu tidak perlu untuk tujuan kita sekarang. 1301 01:01:26,640 --> 01:01:29,180 Itu hanya beberapa latar belakang apa atoi lakukan. 1302 01:01:29,180 --> 01:01:31,425 Tapi Anda semua tahu dan sangat akrab dengan atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Saya sarankan Anda kode ini pada selembar kertas. 1304 01:01:35,620 --> 01:01:39,310 Saya juga menyarankan Anda menggunakan strategi bahwa kita sudah lebih 1305 01:01:39,310 --> 01:01:41,040 banyak di bagian kami. 1306 01:01:41,040 --> 01:01:44,130 Pertama, pastikan Anda memahami apa atoi yang melakukan. 1307 01:01:44,130 --> 01:01:47,580 Buatlah gambar atau datang dengan beberapa gambaran mental itu di kepala Anda. 1308 01:01:47,580 --> 01:01:51,120 Selanjutnya, menulis pseudocode untuk ini. 1309 01:01:51,120 --> 01:01:53,120 Pada kuis, jika semua yang Anda dapatkan adalah pseudocode, setidaknya Anda 1310 01:01:53,120 --> 01:01:54,550 meletakkan sesuatu. 1311 01:01:54,550 --> 01:02:00,070 Dan kemudian peta pseudocode yang ke C. Jika Anda memiliki cek di Anda 1312 01:02:00,070 --> 01:02:03,760 pseudocode, seperti memeriksa apakah sesuatu adalah 1, yang memetakan ke sebuah jika 1313 01:02:03,760 --> 01:02:05,750 kondisi dan sebagainya. 1314 01:02:05,750 --> 01:02:07,850 Dan akhirnya, kode program di C. 1315 01:02:07,850 --> 01:02:15,000 >> Jadi kembali ke atoi dan mengambil lima menit kode ini pada selembar 1316 01:02:15,000 --> 01:02:19,480 kertas, yang mungkin tentang jumlah waktu Anda akan mengambil pada 1317 01:02:19,480 --> 01:02:21,260 kuis untuk atoi kode. 1318 01:02:21,260 --> 01:02:27,060 Lima sampai 15 menit, lima sampai 12, lima sampai 10 menit, adalah tentang jumlah 1319 01:02:27,060 --> 01:02:30,150 waktu Anda akan menghabiskan ini pertanyaan dalam kuis. 1320 01:02:30,150 --> 01:02:31,670 Jadi mengambil lima menit sekarang, silakan. 1321 01:02:31,670 --> 01:02:35,957 Dan jika Anda memiliki pertanyaan, meningkatkan tangan Anda dan saya akan datang sekitar. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SIDE PERCAKAPAN] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, jadi yang lima menit. 1326 01:08:37,580 --> 01:08:39,880 Itu mungkin tentang jumlah waktu yang Anda habiskan untuk itu pada kuis, 1327 01:08:39,880 --> 01:08:42,120 mungkin akhir rendah saat itu. 1328 01:08:42,120 --> 01:08:44,010 Kita akan rekap dalam sedikit. 1329 01:08:44,010 --> 01:08:45,740 Mari kita mulai coding ini. 1330 01:08:45,740 --> 01:08:49,479 Dan jika kita tidak mendapatkan semua jalan melalui, jawaban untuk ini dan ini 1331 01:08:49,479 --> 01:08:54,189 pertanyaan kuis yang tersedia, sekali lagi, Musim gugur 2011 adalah ketika pertanyaan ini 1332 01:08:54,189 --> 01:08:54,913 muncul di kuis. 1333 01:08:54,913 --> 01:08:57,830 >> Dan itu layak delapan poin pada kuis kemudian. 1334 01:08:57,830 --> 01:09:01,140 Delapan poin adalah pada ujung yang tinggi dari jumlah poin sesuatu yang bernilai. 1335 01:09:01,140 --> 01:09:04,790 Sebagian besar pertanyaan adalah dalam kisaran satu sampai enam poin. 1336 01:09:04,790 --> 01:09:08,500 Jadi ini adalah lebih menantang pertanyaan, pasti. 1337 01:09:08,500 --> 01:09:09,750 Ada yang bisa mendapatkan saya mulai? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Secara umum, apa yang akan kita ingin lakukan dengan ini 1340 01:09:15,380 --> 01:09:17,550 fungsi atoi, secara logis? 1341 01:09:17,550 --> 01:09:19,569 Apa yang ingin kita lakukan? 1342 01:09:19,569 --> 01:09:22,279 Jadi kita akan menulis beberapa pseudocode. 1343 01:09:22,279 --> 01:09:24,090 >> MAHASISWA: Mengkonversi karakter menjadi bilangan bulat. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Mengkonversi karakter menjadi bilangan bulat. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Jadi berapa banyak karakter kita akan harus melewati? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Semua dari mereka. 1348 01:09:32,295 --> 01:09:34,100 >> MAHASISWA: Semua karakter dalam string. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Semua karakter dalam string. 1350 01:09:35,540 --> 01:09:42,180 Jadi jika kita ingin pergi melalui setiap karakter dalam string, apa hal 1351 01:09:42,180 --> 01:09:44,560 di C kita telah melihat bahwa telah memungkinkan kita untuk pergi melalui setiap 1352 01:09:44,560 --> 01:09:45,939 karakter dalam sebuah string? 1353 01:09:45,939 --> 01:09:46,819 >> MAHASISWA: A untuk loop. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: A untuk loop. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Jadi kita akan loop melalui setiap karakter dalam s. 1357 01:09:55,330 --> 01:10:00,940 >> Lalu apa yang akan kita ingin lakukan ketika kita mendapatkan karakter tertentu? 1358 01:10:00,940 --> 01:10:02,480 Katakanlah kita mendapatkan melewati 90. 1359 01:10:02,480 --> 01:10:03,460 Kami mendapatkan 9. 1360 01:10:03,460 --> 01:10:04,240 Ini karakter. 1361 01:10:04,240 --> 01:10:07,440 Apa yang ingin kita lakukan dengan bahwa karakter 9? 1362 01:10:07,440 --> 01:10:10,082 >> MAHASISWA: Kurangi dari karakter 0? 1363 01:10:10,082 --> 01:10:11,860 >> MAHASISWA: Tambahkan 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Kurangi dari karakter 0? 1365 01:10:13,350 --> 01:10:13,800 >> MAHASISWA: Ya. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Mengapa Anda ingin melakukan itu? 1367 01:10:15,573 --> 01:10:16,560 >> SISWA: [Tak terdengar] 1368 01:10:16,560 --> 01:10:17,010 nilai. 1369 01:10:17,010 --> 01:10:18,380 Nilai int nya. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, jadi kami mengambil karakter 9, kurangi dari 1371 01:10:21,580 --> 01:10:25,820 karakter 0 untuk mendapatkan bilangan bulat yang sebenarnya 9. 1372 01:10:25,820 --> 01:10:27,070 Manis. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Dan bagaimana Anda tahu bahwa karakter 9 dikurangi 0 karakter adalah 9? 1375 01:10:37,000 --> 01:10:39,222 Bagan Apa yang Anda lihat? 1376 01:10:39,222 --> 01:10:43,130 >> MAHASISWA: Ada logis sembilan tempat antara 9 dan 0. 1377 01:10:43,130 --> 01:10:44,620 Atau Anda bisa melihat pada tabel ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: table ASCII. 1379 01:10:45,120 --> 01:10:46,490 Tapi ya, kau benar juga. 1380 01:10:46,490 --> 01:10:47,780 Jadi kita kurangi 0. 1381 01:10:47,780 --> 01:10:49,010 Jadi sekarang kita memiliki bilangan bulat 9. 1382 01:10:49,010 --> 01:10:49,970 Dan apa yang kita ingin lakukan dengan itu? 1383 01:10:49,970 --> 01:10:54,970 Jika kita memiliki 90, itu adalah bilangan bulat pertama kita, apa yang ingin kita lakukan? 1384 01:10:54,970 --> 01:10:58,180 >> SISWA: Aku akan dimasukkan ke dalam integer sementara array, kemudian melakukan matematika untuk itu 1385 01:10:58,180 --> 01:11:02,088 kemudian untuk membuatnya menjadi berakhir. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Anda dapat mulai pada akhir array dan kemudian bergerak maju begitu 1388 01:11:06,990 --> 01:11:10,350 bahwa setiap kali Anda bergerak maju, Anda kalikan dengan 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: OK. 1390 01:11:10,830 --> 01:11:12,250 Kedengarannya seperti cantik Ide yang menarik. 1391 01:11:12,250 --> 01:11:16,040 Kita bisa mulai pada akhir array kita, dan kita dapat menggunakan strleng. 1392 01:11:16,040 --> 01:11:17,030 Kita dapat menggunakan strleng di sini. 1393 01:11:17,030 --> 01:11:18,870 Kita akan mendapatkan panjang string kita. 1394 01:11:18,870 --> 01:11:20,100 Kita mulai di akhir. 1395 01:11:20,100 --> 01:11:29,170 Dan + yang pertama, kita hanya mengambil bahwa integer, dan mungkin kita buat seperti 1396 01:11:29,170 --> 01:11:32,270 variabel integer baru di bagian atas di mana kita menyimpan segalanya. 1397 01:11:32,270 --> 01:11:37,340 Jadi kita loop melalui setiap karakter di s dari kembali ke depan, kita kurangi 0, dan 1398 01:11:37,340 --> 01:11:42,790 maka kita bawa, dan tergantung pada di mana itu, kita kalikan 1399 01:11:42,790 --> 01:11:45,860 oleh kekuatan dari 10. 1400 01:11:45,860 --> 01:11:50,644 Karena pertama, apa yang kita kalikan karakter paling kanan oleh? 1401 01:11:50,644 --> 01:11:51,440 >> MAHASISWA: 10 ke 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 ke 0. 1403 01:11:53,170 --> 01:11:56,010 Apa yang kita kalikan kedua Karakter paling kanan oleh? 1404 01:11:56,010 --> 01:11:57,450 >> SISWA: [Tak terdengar]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Apa? 1406 01:11:57,960 --> 01:11:59,150 >> MAHASISWA: 10 ke 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 ke 1. 1408 01:12:00,420 --> 01:12:03,754 Karakter ketiga paling kanan? 1409 01:12:03,754 --> 01:12:04,580 >> MAHASISWA: 10 ke 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 ke 2. 1411 01:12:05,350 --> 01:12:07,200 >> MAHASISWA: Maaf, saya tidak mengerti apa yang kita lakukan di sini. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, mari kita kembali, lalu. 1413 01:12:08,640 --> 01:12:12,500 Jadi kita akan mendapatkan lulus dalam sebuah string. 1414 01:12:12,500 --> 01:12:14,470 Karena kita sedang menulis atoi. 1415 01:12:14,470 --> 01:12:15,260 Jadi kita bisa melewati dalam string. 1416 01:12:15,260 --> 01:12:17,640 Katakanlah kita mendapatkan berlalu dalam string 90. 1417 01:12:17,640 --> 01:12:19,930 >> Hal pertama yang kita akan lakukan adalah mengatur sebuah variabel integer baru yang kita 1418 01:12:19,930 --> 01:12:22,150 hanya akan membuat sebagai integer baru kami. 1419 01:12:22,150 --> 01:12:24,630 Itulah yang akan kita untuk kembali di akhir. 1420 01:12:24,630 --> 01:12:30,110 Kita harus pergi melalui setiap karakter dalam string karena kita telah menentukan 1421 01:12:30,110 --> 01:12:34,430 bahwa kita perlu menyentuh masing-masing dan kemudian menambahkannya ke bilangan bulat baru kami. 1422 01:12:34,430 --> 01:12:36,330 >> Tapi kita tidak bisa hanya menambahkannya sebagai angka. 1423 01:12:36,330 --> 01:12:38,270 Kita tidak bisa hanya mengambil 9 dan tambahkan 9 sampai bilangan bulat kami. 1424 01:12:38,270 --> 01:12:40,560 Itu tergantung pada apa tempat itu adalah dalam string. 1425 01:12:40,560 --> 01:12:42,960 Kita akan perlu mengalikan dengan kekuatan 10. 1426 01:12:42,960 --> 01:12:45,580 Karena itulah basis 10 karya. 1427 01:12:45,580 --> 01:12:49,050 >> Jadi kita akan mendapatkan yang sebenarnya karakter, atau bilangan bulat yang sebenarnya 1428 01:12:49,050 --> 01:12:53,860 nomor, dengan mengurangi karakter 0 dari karakter 9 seperti yang kami lakukan dengan 1429 01:12:53,860 --> 01:12:57,560 mengurangkan karakter capital A dari karakter apa pun yang kita punya di salah satu 1430 01:12:57,560 --> 01:12:58,120 masalah-masalah. 1431 01:12:58,120 --> 01:13:04,190 Jadi kita benar-benar akan mendapatkan nomor dari 0 sampai 9 disimpan sebagai bilangan real, dan kita akan 1432 01:13:04,190 --> 01:13:07,590 kalikan dengan kekuatan 10 tergantung di mana kita berada dalam string. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Dan kemudian kita akan menambahkan kembali ke variabel integer baru kami. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Jadi apa ini akan terlihat seperti akan akan - kita akan menarik di sini. 1437 01:13:37,890 --> 01:13:40,086 Jika kita bisa melewati dalam string 90 - 1438 01:13:40,086 --> 01:13:41,336 >> SISWA: [Tak terdengar]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Tapi atoi mengambil string. 1441 01:13:45,540 --> 01:13:46,350 Jadi kita akan pergi melalui penyelenggaraan. 1442 01:13:46,350 --> 01:13:49,900 Kita akan mendapatkan disahkan pada 90. 1443 01:13:49,900 --> 01:13:51,540 Kami pergi dari belakang ke depan. 1444 01:13:51,540 --> 01:13:53,920 Kami mengambil 0. 1445 01:13:53,920 --> 01:13:55,080 >> SISWA: Maafkan aku. 1446 01:13:55,080 --> 01:13:55,880 Mungkin ini adalah bodoh. 1447 01:13:55,880 --> 01:13:59,440 Jika kita mendapatkan berlalu dalam sebuah string, mengapa 90 apa yang kita 1448 01:13:59,440 --> 01:14:00,260 mendapatkan berlalu dalam? 1449 01:14:00,260 --> 01:14:03,160 Karena 90 adalah bilangan bulat. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Karena atoi mengambil String dan mengubahnya menjadi integer 1451 01:14:06,820 --> 01:14:08,320 representasi string tersebut. 1452 01:14:08,320 --> 01:14:13,650 Tapi string 90 tidak integer 90 atau nomor 90. 1453 01:14:13,650 --> 01:14:17,920 String 90 adalah array dari dua, atau tiga karakter, lebih tepatnya, 9 1454 01:14:17,920 --> 01:14:22,740 karakter, 0 karakter, dan backslash 0 karakter. 1455 01:14:22,740 --> 01:14:26,260 >> Dan kami sedang menulis atoi karena, untuk Misalnya, ketika Anda mengambil perintah 1456 01:14:26,260 --> 01:14:30,230 argumen baris, dan itu disimpan dalam argv, itu disimpan sebagai string. 1457 01:14:30,230 --> 01:14:32,940 Tetapi jika Anda ingin memperlakukannya sebagai angka, Anda perlu mengubahnya ke 1458 01:14:32,940 --> 01:14:34,700 bilangan bulat yang sebenarnya. 1459 01:14:34,700 --> 01:14:37,210 Yang kami lakukan satu set masalah kita. 1460 01:14:37,210 --> 01:14:38,800 Yang kita lakukan di nomor set masalah kita. 1461 01:14:38,800 --> 01:14:41,690 Setiap orang yang mengambil integer sebagai argumen baris perintah. 1462 01:14:41,690 --> 01:14:46,490 Jadi itulah mengapa fungsi atoi kami mengambil string. 1463 01:14:46,490 --> 01:14:51,910 >> Jadi sekali lagi, dalam contoh kita di sini, kami akan mengambil yang terakhir. 1464 01:14:51,910 --> 01:14:55,050 Kita akan mengurangi karakter 0 dari itu, karena karakter 0 1465 01:14:55,050 --> 01:14:58,810 dikurangi oleh karakter 0 memberi Anda sebenarnya angka 0, menurut 1466 01:14:58,810 --> 01:15:00,950 matematika ASCII yang kita lakukan. 1467 01:15:00,950 --> 01:15:04,870 >> Karena karakter yang direpresentasikan sebagai berbeda dari yang sebenarnya mereka - 1468 01:15:04,870 --> 01:15:08,830 karakter, misalnya, huruf kecil adalah 97. 1469 01:15:08,830 --> 01:15:10,260 Ini bukan - oops! 1470 01:15:10,260 --> 01:15:13,290 Ini bukan apa yang Anda harapkan hal itu terjadi, 0, misalnya. 1471 01:15:13,290 --> 01:15:16,200 Jadi, Anda harus kurangi karakter untuk mendapatkan 0. 1472 01:15:16,200 --> 01:15:18,950 >> Jadi kita akan melakukannya di sini untuk mendapatkan jumlah sebenarnya. 1473 01:15:18,950 --> 01:15:22,560 Dan kemudian kita akan kalikan dengan kekuatan 10 tergantung di mana itu 1474 01:15:22,560 --> 01:15:27,030 adalah dalam string, dan kemudian mengambil dan menambahkannya ke tempat dudukan kami 1475 01:15:27,030 --> 01:15:32,520 variabel sehingga kami bisa datang dengan bilangan bulat baru akhir kami. 1476 01:15:32,520 --> 01:15:35,080 Apakah itu masuk akal untuk semua orang? 1477 01:15:35,080 --> 01:15:37,730 >> Jadi kita tidak akan kode ini sekarang, karena kita 1478 01:15:37,730 --> 01:15:38,830 semakin kekurangan waktu. 1479 01:15:38,830 --> 01:15:40,860 Saya minta maaf untuk waktu itu. 1480 01:15:40,860 --> 01:15:44,620 Tapi ini adalah apa, mudah-mudahan, Anda akan dapat dilakukan pada kuis - di 1481 01:15:44,620 --> 01:15:47,710 Paling tidak, mendapatkan pseudocode ini ditulis. 1482 01:15:47,710 --> 01:15:50,840 >> Dan kemudian, jika kita menulis pseudocode, sebenarnya, kita bisa melakukan ini 1483 01:15:50,840 --> 01:15:51,490 cukup cepat. 1484 01:15:51,490 --> 01:15:55,230 Setiap baris dari komentar kita kita menulis di sini diterjemahkan menjadi sekitar 1485 01:15:55,230 --> 01:15:56,970 satu baris kode C. 1486 01:15:56,970 --> 01:16:01,780 Mendeklarasikan variabel baru, menulis loop, beberapa pengurangan, beberapa 1487 01:16:01,780 --> 01:16:07,070 perkalian, dan beberapa tugas. 1488 01:16:07,070 --> 01:16:09,020 Kami akan mungkin juga ingin menulis baris kembali. 1489 01:16:09,020 --> 01:16:12,040 Kami juga mungkin ingin menempatkan beberapa pemeriksaan di sini. 1490 01:16:12,040 --> 01:16:12,655 Ya. 1491 01:16:12,655 --> 01:16:15,720 >> MAHASISWA: Jadi dapat kita memperlakukan s sebagai string yang sebenarnya? 1492 01:16:15,720 --> 01:16:18,730 Karena aku tahu itu hanya sebuah alamat. 1493 01:16:18,730 --> 01:16:22,090 Seperti, bagaimana Anda akan mendapatkan panjang string yang melewati? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Jadi bagaimana panjang string? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> MAHASISWA: strlen, yeah. 1497 01:16:26,660 --> 01:16:30,550 Tapi Anda dapat menempatkan s sebagai Argumen untuk itu? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Jadi strlen mengambil star arang. 1499 01:16:34,620 --> 01:16:38,090 Dan berikut bahwa bintang char, dan terus menghitung hingga sampai ke sebuah 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen sebenarnya salah satu program lain yang kita 1501 01:16:41,865 --> 01:16:42,850 akan kode. 1502 01:16:42,850 --> 01:16:44,560 Itu satu lagi yang baik untuk kode. 1503 01:16:44,560 --> 01:16:47,270 Satu yang sedikit lebih mudah, karena jika Anda akan berpikir tentang hal itu 1504 01:16:47,270 --> 01:16:47,830 konseptual - 1505 01:16:47,830 --> 01:16:51,620 Aku hanya berkata dengan keras - strlen berikut pointer dan terus terjadi dan 1506 01:16:51,620 --> 01:16:54,210 menghitung dan melacak sampai Anda mencapai backslash 0. 1507 01:16:54,210 --> 01:16:56,530 >> MAHASISWA: OK, mendapatkannya. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Jadi terbaik keberuntungan di kuis 0 besok. 1509 01:17:00,200 --> 01:17:03,170 Jika Anda memiliki pertanyaan, saya akan berada di luar setelah ini. 1510 01:17:03,170 --> 01:17:05,610 Jangan ragu untuk email saya. 1511 01:17:05,610 --> 01:17:08,480 Menjangkau TF Anda sendiri jika Anda tidak dalam bagian saya, atau mendapatkan saya 1512 01:17:08,480 --> 01:17:10,005 email jika Anda menginginkannya. 1513 01:17:10,005 --> 01:17:13,140 >> Jika Anda ingin panik dan hanya mengirim saya email, email freakout, aku akan 1514 01:17:13,140 --> 01:17:16,710 mengirimkan kembali, seperti, wajah tersenyum, atau, seperti, lelucon atau sesuatu. 1515 01:17:16,710 --> 01:17:18,190 Jadi jangan ragu untuk melakukan itu juga. 1516 01:17:18,190 --> 01:17:20,750 Good luck lagi, dan aku akan melihat Anda semua minggu depan. 1517 01:17:20,750 --> 01:17:23,435