1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Selamat Datang untuk A5, semua orang. 3 00:00:07,820 --> 00:00:11,270 Kami mempunyai minggu yang menarik di hadapan kita, kebanyakannya kerana terdapat banyak baru 4 00:00:11,270 --> 00:00:12,350 menghadapi di dalam bilik ini. 5 00:00:12,350 --> 00:00:12,920 Ia indah. 6 00:00:12,920 --> 00:00:15,740 Banyak anda berada di sini oleh kemalangan, yang adalah lebih baik. 7 00:00:15,740 --> 00:00:18,220 Jadi mudah-mudahan anda akan terus menyertai kami. 8 00:00:18,220 --> 00:00:20,220 >> Minggu ini kita akan menghabiskan sebahagian besar daripada seksyen 9 00:00:20,220 --> 00:00:21,870 persediaan untuk kuiz. 10 00:00:21,870 --> 00:00:26,580 Jadi setiap agenda kita, kita akan bercakap serba sedikit tentang sumber untuk kelas, 11 00:00:26,580 --> 00:00:30,350 tetapi juga untuk kuiz, dan kemudian, sekali lagi, membelanjakan sebahagian besar daripada kelas bercakap 12 00:00:30,350 --> 00:00:31,390 mengenai soalan. 13 00:00:31,390 --> 00:00:33,900 Setelah kami selesai menjawab anda soalan, atau jika soalan-soalan anda 14 00:00:33,900 --> 00:00:39,010 secara semula jadi membawa kita kepada beberapa coding, saya mempunyai masalah sampel dari ujian tengah semester 15 00:00:39,010 --> 00:00:43,180 lalu bahawa kita akan memberi kod kepada hidup dalam seksyen bersama-sama yang juga membawa beberapa lain 16 00:00:43,180 --> 00:00:45,420 topik yang baik untuk melindungi. 17 00:00:45,420 --> 00:00:48,280 >> Jadi pertama, seperti yang kita telah melalui untuk pasangan minggu lalu untuk mengingatkan anda 18 00:00:48,280 --> 00:00:51,700 guys, terdapat satu tan sumber disediakan untuk kursus ini. 19 00:00:51,700 --> 00:00:55,020 Ramai daripada mereka akan menjadi sangat membantu kepada anda kerana anda terus 20 00:00:55,020 --> 00:00:57,280 belajar untuk kuiz 0, kerana ia petang Selasa. 21 00:00:57,280 --> 00:00:59,630 Jadi anda semua telah belajar untuk sedikit. 22 00:00:59,630 --> 00:01:02,640 >> Terdapat nota kuliah dan sumber kod yang anda perlu 23 00:01:02,640 --> 00:01:04,050 pasti menyemak. 24 00:01:04,050 --> 00:01:05,019 Menonton seluar pendek. 25 00:01:05,019 --> 00:01:07,470 Semak study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Dan kemudian, yang disenaraikan di bawah, sebilangan sumber-sumber lain. 27 00:01:11,770 --> 00:01:14,020 >> Sekali lagi, kuiz 0 adalah esok di 01:00. 28 00:01:14,020 --> 00:01:18,230 Jika anda tidak berbuat demikian sudah, daftar keluar Mengenai Kuiz 0 dokumen berkenaan 29 00:01:18,230 --> 00:01:21,370 laman utama kursus ini untuk memikirkan di mana anda mengambil kuiz. 30 00:01:21,370 --> 00:01:25,770 Kuiz bermula pada 1:10 dan berakhir 70 minit kemudian. 31 00:01:25,770 --> 00:01:29,610 Jadi, jika anda muncul selepas 1:10, anda akan mendapat yang banyak beberapa minit 32 00:01:29,610 --> 00:01:30,940 daripada 70 untuk mengambil kuiz. 33 00:01:30,940 --> 00:01:33,570 Jadi pastikan anda berada di sana pada masa. 34 00:01:33,570 --> 00:01:38,690 Jika anda seorang pelajar lanjutan atau mempunyai beberapa pertimbangan ujian lain, ia 35 00:01:38,690 --> 00:01:40,400 mungkin tidak di 01:00 esok. 36 00:01:40,400 --> 00:01:43,540 Tetapi sekali lagi, periksa Kuiz Mengenai 0 dokumen untuk memastikan anda tahu apabila 37 00:01:43,540 --> 00:01:44,760 anda mengambil kuiz. 38 00:01:44,760 --> 00:01:46,440 Saya menulis 75 minit di sini. 39 00:01:46,440 --> 00:01:48,580 Saya berfikir bahawa yang betul, bukan 70. 40 00:01:48,580 --> 00:01:53,420 >> Ia meliputi semua bahan dari seminggu 0 kuliah minggu lepas pada hari Rabu. 41 00:01:53,420 --> 00:01:59,350 Dan sekali lagi, untuk kuiz ini, setiap yang dokumen, anda akan mendapat satu dua belah bahagian dan 8 42 00:01:59,350 --> 00:02:03,770 1/2 sebanyak 11 lembaran kertas yang anda mendapat untuk digunakan sebagai nota semasa kuiz. 43 00:02:03,770 --> 00:02:08,570 Ramai orang, jika tidak kebanyakan orang, mempunyai mendapati bahawa cara yang paling berguna tunggal 44 00:02:08,570 --> 00:02:11,970 belajar untuk kuiz ini adalah untuk membuat lembaran kajian, satu 45 00:02:11,970 --> 00:02:13,730 satu-Sider, mereka sendiri. 46 00:02:13,730 --> 00:02:17,710 Jadi melihat orang-orang yang lalu jika anda telah melihat orang-orang yang lalu. 47 00:02:17,710 --> 00:02:19,960 Mencapai rakan-rakan untuk melihat apa yang mereka memakai mereka. 48 00:02:19,960 --> 00:02:23,610 >> Tetapi tangan-down, cara terbaik yang anda boleh pengajian adalah untuk pergi melalui segala-galanya dan 49 00:02:23,610 --> 00:02:26,530 meraut ke bawah untuk apa yang patut atau perlu bukan milik pada yang selembar 50 00:02:26,530 --> 00:02:30,570 kertas, kerana itulah yang benar-benar cara membantu bagi anda untuk memastikan 51 00:02:30,570 --> 00:02:33,620 anda akan melalui segala-galanya dan mempunyai beberapa kebiasaan dengannya. 52 00:02:33,620 --> 00:02:36,690 Kebanyakan orang, kita dapati, walaupun mereka telah lembaran kertas duduk betul 53 00:02:36,690 --> 00:02:39,840 seterusnya kepada mereka pada kuiz, tidak berpaling kepadanya, kerana, sekali lagi, yang sangat 54 00:02:39,840 --> 00:02:43,290 proses melalui maklumat telah membantu mereka belajar. 55 00:02:43,290 --> 00:02:45,370 >> Adakah sesiapa mempunyai apa-apa soalan kira-kira kuiz 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Mempunyai semua orang - 58 00:02:51,450 --> 00:02:53,230 Saya tidak akan melakukan mengangkat tangan. 59 00:02:53,230 --> 00:02:53,550 Jangan sekali-kali fikiran. 60 00:02:53,550 --> 00:02:54,790 Saya akan meminta yang mula belajar. 61 00:02:54,790 --> 00:02:58,360 Tetapi saya tidak mahu membuat anda semua tidak mengangkat tangan anda. 62 00:02:58,360 --> 00:03:01,290 Jadi seperti yang saya kata - ya, Avi, teruskan. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Apa yang akan menjadi satu perkara yang berguna memakai satu-pager? 64 00:03:04,205 --> 00:03:05,875 >> PELAJAR: Itu terpulang kepada anda. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Anda mendapat menggunakan pertimbangan anda. 66 00:03:08,210 --> 00:03:13,220 Perkara yang berguna untuk meletakkan di satu alat kelui, jika anda keliru tentang O besar 67 00:03:13,220 --> 00:03:17,510 runtime jenis-jenis carian dan macam, meletakkan bahawa di sana dalam 68 00:03:17,510 --> 00:03:18,760 carta bagus berguna. 69 00:03:18,760 --> 00:03:22,250 Dengan cara itu, jika anda meminta kepada kuiz, anda tidak perlu untuk cuba dan angka 70 00:03:22,250 --> 00:03:23,560 ia keluar atau sebab melalui runtime. 71 00:03:23,560 --> 00:03:24,730 Anda hanya boleh menyalin ke bawah. 72 00:03:24,730 --> 00:03:28,320 Jika anda melihat kuiz yang lalu, banyak kali, ada berjalan soalan masa. 73 00:03:28,320 --> 00:03:34,150 Jadi yang akan menjadi contoh yang baik perkara memakai satu alat kelui anda. 74 00:03:34,150 --> 00:03:37,450 >> Lain-lain perkara yang baik untuk memakai, jika anda keliru tentang bagaimana untuk mengisytiharkan 75 00:03:37,450 --> 00:03:40,570 fungsi atau apa yang bahagian yang berlainan di pengisytiharan fungsi adalah, menulis 76 00:03:40,570 --> 00:03:43,400 yang di sana, versi generik dan maka mungkin satu contoh. 77 00:03:43,400 --> 00:03:47,290 Jika anda keliru tentang petunjuk, gambarajah bagaimana petunjuk 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 keliru tentang rekursi, yang mencuba fungsi rekursif di sana 80 00:03:52,440 --> 00:03:54,980 juga boleh menjadi benar-benar membantu. 81 00:03:54,980 --> 00:03:57,290 Adakah ini memberikan anda beberapa idea? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Anda perlu memahami proses Himpun keseluruhan, seperti 83 00:04:01,820 --> 00:04:03,220 bagaimana semua kerja? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Semua yang telah dibincangkan boleh 85 00:04:06,620 --> 00:04:08,060 muncul pada kuiz. 86 00:04:08,060 --> 00:04:08,930 Soalan - 87 00:04:08,930 --> 00:04:11,300 tetapi sekali lagi, beberapa perkara akan wajaran berat daripada yang lain. 88 00:04:11,300 --> 00:04:14,330 Beberapa perkara yang telah datang lagi dan sekali lagi dalam kelas, dalam 89 00:04:14,330 --> 00:04:15,590 kuliah, dan seksyen. 90 00:04:15,590 --> 00:04:17,220 Perkara-perkara lain tidak mempunyai datang yang kerap. 91 00:04:17,220 --> 00:04:22,900 >> Kami telah berbincang banyak tentang # termasuk dan -L sesuatu dan apa yang mereka bermakna dalam 92 00:04:22,900 --> 00:04:24,390 proses penyusunan. 93 00:04:24,390 --> 00:04:29,120 Kami telah berbincang banyak tentang GDB, berpaut, mereka bendera yang berbeza yang kita gunakan apabila 94 00:04:29,120 --> 00:04:33,100 kita menyusun sesuatu, dan apa yang make15, sebagai contoh, benar-benar 95 00:04:33,100 --> 00:04:34,510 bermakna dan benar-benar tidak. 96 00:04:34,510 --> 00:04:38,110 Kami tidak bercakap sebanyak kira-kira setiap langkah tunggal dalam 97 00:04:38,110 --> 00:04:39,240 proses penyusunan. 98 00:04:39,240 --> 00:04:40,410 Kami masih bercakap mengenainya. 99 00:04:40,410 --> 00:04:42,550 Jadi ia masih sesuatu yang anda perlu biasa dengan. 100 00:04:42,550 --> 00:04:44,610 Apapun, kita tidak akan menjadi - 101 00:04:44,610 --> 00:04:49,140 perkara-perkara yang datang lebih kerap di dalam kelas lebih cenderung untuk datang lebih 102 00:04:49,140 --> 00:04:52,495 sering dan lebih banyak wajaran kuiz. 103 00:04:52,495 --> 00:04:53,280 >> Sejuk. 104 00:04:53,280 --> 00:04:54,580 Apa-apa soalan lain tentang kuiz 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, jadi saya meletakkan senarai topik di papan. 107 00:05:00,050 --> 00:05:01,550 Saya telah melalui sukatan pelajaran. 108 00:05:01,550 --> 00:05:07,340 Saya telah melalui seksyen kajian daripada malam tadi dan mereka slaid untuk datang 109 00:05:07,340 --> 00:05:13,710 dengan senarai tidak lengkap topik yang kami telah meliputi setakat ini dalam CS50 110 00:05:13,710 --> 00:05:16,800 dan perkara-perkara yang mungkin muncul di kuiz. 111 00:05:16,800 --> 00:05:19,900 Jadi, saya tidak akan pergi melalui setiap satu tunggal ini. 112 00:05:19,900 --> 00:05:22,370 Yang akan mengambil masa yang lebih masa daripada yang kami ada sekarang. 113 00:05:22,370 --> 00:05:26,880 Tetapi saya meletakkan ini di sini untuk diharapkan berjoging memori anda tentang perkara-perkara yang boleh 114 00:05:26,880 --> 00:05:28,420 atau mungkin tidak biasa dengan anda. 115 00:05:28,420 --> 00:05:32,850 >> Dan saya suka membelanjakan sebahagian besar daripada seksyen menjawab soalan anda tentang 116 00:05:32,850 --> 00:05:35,130 topik-topik ini, topik yang tidak dilindungi di sini. 117 00:05:35,130 --> 00:05:36,130 Kita boleh menulis kod pseudo. 118 00:05:36,130 --> 00:05:40,010 Kita boleh menulis kod sebenar untuk memastikan bahawa anda - 119 00:05:40,010 --> 00:05:44,280 Saya boleh menjawab soalan anda dan membantu semua orang asasnya memahami 120 00:05:44,280 --> 00:05:48,330 banyak topik-topik ini supaya anda akan berasa bersedia dan selesa pergi ke 121 00:05:48,330 --> 00:05:50,150 kuiz esok. 122 00:05:50,150 --> 00:05:52,300 Jadi dibacakan senarai. 123 00:05:52,300 --> 00:05:54,780 Anda diharapkan telah datang ke seksyen dengan beberapa soalan juga. 124 00:05:54,780 --> 00:05:58,480 Apabila anda sedia, mengangkat tangan anda dan kami akan memulakan. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Perlu diingat, soalan-soalan yang anda ada, tidak ada soalan bodoh. 127 00:06:05,200 --> 00:06:06,250 Kami telah mendengar bahawa banyak. 128 00:06:06,250 --> 00:06:09,490 Dan soalan-soalan yang anda ada, saya sanggup membuat taruhan, ramai orang lain kedua-dua 129 00:06:09,490 --> 00:06:11,740 duduk di sini dan menonton dalam talian mempunyai juga. 130 00:06:11,740 --> 00:06:13,770 Jadi, anda hanya boleh membantu orang ramai dengan bertanya soalan. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> Marcus: Antara timbunan dan timbunan, ada yang telah diperuntukkan 133 00:06:18,040 --> 00:06:22,880 peratusan memori ditakrifkan sebagai ini adalah untuk tindanan atau untuk timbunan itu? 134 00:06:22,880 --> 00:06:25,010 Atau bagaimana bahawa kerja, sebenarnya? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Soalan Besar. 136 00:06:26,230 --> 00:06:28,640 Saya akan menyokong mengesan sedikit. 137 00:06:28,640 --> 00:06:30,910 Adakah semua orang - 138 00:06:30,910 --> 00:06:31,660 sila jujur ​​di sini. 139 00:06:31,660 --> 00:06:34,130 Saya tahu saya meminta anda untuk meningkatkan anda tangan di hadapan rakan-rakan anda. 140 00:06:34,130 --> 00:06:38,510 Tetapi adakah terdapat orang yang merasa tidak selesa dengan timbunan dan longgokan 141 00:06:38,510 --> 00:06:42,980 dan ingin pergi ke yang dan apa yang mereka maksudkan? 142 00:06:42,980 --> 00:06:43,880 Mengangkat 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 atas tindanan dan timbunan itu benar-benar cepat dan kemudian 146 00:06:48,420 --> 00:06:50,370 bergerak ke menjawab soalan anda. 147 00:06:50,370 --> 00:06:58,250 >> Jadi, jika kita menarik keluar kotak untuk mewakili memori pada komputer anda, apakah beberapa 148 00:06:58,250 --> 00:07:02,160 perkara-perkara yang pergi di dalam kotak ini? 149 00:07:02,160 --> 00:07:03,630 Utama. 150 00:07:03,630 --> 00:07:04,020 Fungsi utama. 151 00:07:04,020 --> 00:07:05,890 Di manakah pergi utama? 152 00:07:05,890 --> 00:07:08,090 >> PELAJAR: [didengar]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Jadi kita akan meletakkan utama di sini. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Apa lagi yang pergi di dalam kotak ini? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> PELAJAR: Fungsi yang anda memanggil. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Fungsi yang kita panggil. 159 00:07:19,020 --> 00:07:20,440 Dan di mana mereka pergi? 160 00:07:20,440 --> 00:07:21,300 >> PELAJAR: Dalam timbunan. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Mereka pergi dalam tindanan. 162 00:07:22,380 --> 00:07:27,350 Jadi, kita akan memanggil ini perkara ke bawah sini tindanan. 163 00:07:27,350 --> 00:07:31,880 Dan sehingga atas, kami mempunyai timbunan itu. 164 00:07:31,880 --> 00:07:35,450 Jadi memori bukan kotak seperti ini. 165 00:07:35,450 --> 00:07:37,330 Tetapi ia sebenarnya cukup sama. 166 00:07:37,330 --> 00:07:40,840 Ia akan menjadi banyak kotak ke atas dan lebih, bergantung kepada berapa besar anda 167 00:07:40,840 --> 00:07:43,730 komputer adalah atau bagaimana besar memori anda. 168 00:07:43,730 --> 00:07:46,950 >> Pada quote-unquote "bawah" adalah timbunan. 169 00:07:46,950 --> 00:07:50,880 Dan terdapat pelbagai perkara yang pergi pada timbunan. 170 00:07:50,880 --> 00:07:53,840 Dan orang-orang bergantung kepada fungsi anda ada di dalam kod anda. 171 00:07:53,840 --> 00:07:57,780 Anda sentiasa mempunyai satu fungsi dalam anda kod yang disebut utama, jadi selalu ada satu 172 00:07:57,780 --> 00:08:00,480 seksyen turun di sini dalam stack dikhaskan untuk utama. 173 00:08:00,480 --> 00:08:03,980 >> Bahagian-bahagian dalam tindanan dipanggil bingkai tindanan. 174 00:08:03,980 --> 00:08:09,580 Apabila anda memanggil fungsi yang lain, mengatakan utama panggilan fungsi carian binari, 175 00:08:09,580 --> 00:08:11,075 kita meletakkan bingkai lain dalam timbunan. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Lebih khusus lagi, kita akan menderma sebahagian daripada memori pada kami 178 00:08:17,320 --> 00:08:22,960 komputer untuk menyimpan carian binari ini tempatan pembolehubah dan untuk menjalankan perduaan 179 00:08:22,960 --> 00:08:24,150 kod carian. 180 00:08:24,150 --> 00:08:26,810 >> Jadi kita panggil carian binari. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 Dalam sebahagian ini ingatan, kita akan untuk menyimpan pembolehubah tempatan. 183 00:08:33,340 --> 00:08:35,270 Kami akan menyimpan panggilan printf itu. 184 00:08:35,270 --> 00:08:38,159 Apa pun yang berlaku, fungsi yang akan disimpan di sana. 185 00:08:38,159 --> 00:08:40,350 Carian binari akan melaksanakan. 186 00:08:40,350 --> 00:08:42,210 Ia akan melengkapkan pelaksanaan. 187 00:08:42,210 --> 00:08:47,450 Apakah perkataan dalam C yang menandakan fungsi yang perlu 188 00:08:47,450 --> 00:08:49,306 melengkapkan pelaksanaannya? 189 00:08:49,306 --> 00:08:50,040 >> PELAJAR: Pulang. 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 kenyataan balasan, hujung fungsi 192 00:08:53,230 --> 00:08:54,350 apabila ia mencecah itu. 193 00:08:54,350 --> 00:08:56,740 Jadi carian binari akan melanda kembali. 194 00:08:56,740 --> 00:09:01,360 Ini sebahagian daripada memori akan dasarnya dibebaskan atas. 195 00:09:01,360 --> 00:09:03,510 Dan utama akan kembali ke pelaksanaan. 196 00:09:03,510 --> 00:09:07,240 Jadi utama akan berhenti seketika di mana-mana adalah, panggilan carian binari, mendapatkan beberapa nilai balasan, 197 00:09:07,240 --> 00:09:08,700 dan terus pelaksanaan. 198 00:09:08,700 --> 00:09:10,840 Tempoh timbunan akan hilang. 199 00:09:10,840 --> 00:09:14,810 >> Jika kita memanggil fungsi rekursif, yang adalah satu fungsi yang memanggil dirinya lebih 200 00:09:14,810 --> 00:09:18,480 kali, kita mungkin akan mendapat - katakan kita lakukan carian binari secara rekursif. 201 00:09:18,480 --> 00:09:21,520 Kami mungkin akan mendapat carian binari versi satu, carian binari dua, carian binari 202 00:09:21,520 --> 00:09:24,090 tiga, carian binari empat, binari carian lima. 203 00:09:24,090 --> 00:09:27,950 Kemudian pada carian binari akhir lima akan melanda kes asas, dan tindanan 204 00:09:27,950 --> 00:09:31,010 bingkai akan kembali dan menyimpan penutup sehingga kita kembali kepada utama. 205 00:09:31,010 --> 00:09:32,530 Kami boleh pergi ke rekursi dalam sedikit. 206 00:09:32,530 --> 00:09:35,530 Tetapi semua ini adalah untuk mengatakan, jika anda memanggil fungsi berganda pada satu masa, 207 00:09:35,530 --> 00:09:39,250 akan ada susunan berganda bingkai dalam timbunan. 208 00:09:39,250 --> 00:09:42,900 >> Timbunan itu, di sisi lain, sehingga di sini, bukan untuk fungsi, 209 00:09:42,900 --> 00:09:44,380 bukan untuk pembolehubah tempatan. 210 00:09:44,380 --> 00:09:48,920 Ia untuk dinamik diperuntukkan pembolehubah. 211 00:09:48,920 --> 00:09:57,210 Jadi ini adalah pembolehubah yang boleh dimulakan sama ada utama atau 212 00:09:57,210 --> 00:09:58,640 berfungsi bahawa panggilan utama. 213 00:09:58,640 --> 00:10:00,790 Di mana-mana dalam kod anda, mereka boleh dimulakan. 214 00:10:00,790 --> 00:10:04,360 Dan untuk memulakan dinamik yang ubah diperuntukkan. 215 00:10:04,360 --> 00:10:06,970 Apa fungsi dalam C kita digunakan? 216 00:10:06,970 --> 00:10:07,600 >> PELAJAR: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: Malloc. 218 00:10:09,240 --> 00:10:10,800 Anda memanggil malloc. 219 00:10:10,800 --> 00:10:12,260 Anda mendapat ruang memori. 220 00:10:12,260 --> 00:10:15,020 Dan bahawa ruang memori adalah pada timbunan itu. 221 00:10:15,020 --> 00:10:18,840 Dan bahawa ruang memori kekal di sana sehingga anda memanggil percuma. 222 00:10:18,840 --> 00:10:22,670 >> Pembolehubah Jadi dinamik diperuntukkan dalam timbunan akan wujud selagi anda 223 00:10:22,670 --> 00:10:25,250 mahu mereka wujud, dan mereka tidak akan hilang sehingga anda dengan jelas 224 00:10:25,250 --> 00:10:26,760 memberitahu mereka untuk pergi. 225 00:10:26,760 --> 00:10:29,670 Anda boleh membuat mereka dalam satu fungsi. 226 00:10:29,670 --> 00:10:31,930 Timbunan bahawa fungsi ini bingkai akan hilang. 227 00:10:31,930 --> 00:10:35,490 Tetapi berubah-ubah yang masih akan wujud dalam timbunan itu sehingga ia dibebaskan, 228 00:10:35,490 --> 00:10:39,650 berpotensi dengan fungsi yang dipanggil carian binari atau apa sahaja. 229 00:10:39,650 --> 00:10:42,580 >> Maka orang-orang pembolehubah timbunan tinggal di sana selama yang anda mahu 230 00:10:42,580 --> 00:10:43,490 mereka tinggal di sana. 231 00:10:43,490 --> 00:10:46,090 Dan mereka akan diletakkan di sini. 232 00:10:46,090 --> 00:10:47,450 Dan kemudian yang seterusnya mendapat diletakkan di sana. 233 00:10:47,450 --> 00:10:50,210 Mereka terus mendapat diisi, dan mereka tinggal di sana sehingga anda memanggil percuma. 234 00:10:50,210 --> 00:10:52,870 >> Dan pada dasarnya, timbunan dan tindanan, mendapat soalan Marcus ini, 235 00:10:52,870 --> 00:10:54,500 berkembang ke arah satu sama lain. 236 00:10:54,500 --> 00:10:57,730 Dan jika mereka menghadapi satu sama lain, anda telah menggunakan kesemua memori yang anda 237 00:10:57,730 --> 00:11:01,330 komputer, dan program anda akan berhenti kerana anda tidak mempunyai apa-apa memori lebih 238 00:11:01,330 --> 00:11:02,420 meninggalkan untuk digunakan. 239 00:11:02,420 --> 00:11:07,290 Di antara mereka, terdapat perkara yang berpotensi lain. 240 00:11:07,290 --> 00:11:10,980 Tetapi bagi skop kursus ini, anda tidak perlu bimbang tentang itu. 241 00:11:10,980 --> 00:11:12,020 >> Sehingga adalah jawapan kepada soalan anda. 242 00:11:12,020 --> 00:11:13,520 Jangan bimbang mengenainya. 243 00:11:13,520 --> 00:11:15,550 Tetapi itu adalah jawapan yang panjang. 244 00:11:15,550 --> 00:11:17,800 Semua yang anda perlu tahu adalah timbunan dan tindanan akan - 245 00:11:17,800 --> 00:11:18,900 pertama bermula di bahagian bawah. 246 00:11:18,900 --> 00:11:19,570 Tindanan tidak. 247 00:11:19,570 --> 00:11:20,790 Timbunan itu terpulang sana. 248 00:11:20,790 --> 00:11:21,990 Mereka akan berkembang lebih dekat dengan satu sama lain. 249 00:11:21,990 --> 00:11:23,110 >> Dan jika mereka menyentuh, itu masalah. 250 00:11:23,110 --> 00:11:24,500 Anda kehabisan memori. 251 00:11:24,500 --> 00:11:28,760 Tetapi juga, di samping mengetahui di mana mereka, apa yang disimpan dalam kedua-dua 252 00:11:28,760 --> 00:11:30,512 stack dan timbunan. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Apabila mereka berlanggar, ialah limpahan timbunan? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Apabila mereka berlanggar, itu bukan satu limpahan timbunan. 256 00:11:35,670 --> 00:11:38,340 A limpahan timbunan adalah kawasan yang berbeza yang kita boleh pergi lebih jika anda mahu. 257 00:11:38,340 --> 00:11:40,020 OK, kita akan kembali kepada yang dalam sedikit. 258 00:11:40,020 --> 00:11:42,730 >> PELAJAR: Apakah perkataan yang dipanggil apabila mereka memukul satu sama lain, 259 00:11:42,730 --> 00:11:44,450 stack dan timbunan itu? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Buat masa ini, jangan bimbang tentang. 261 00:11:46,640 --> 00:11:47,750 Hanya tahu - 262 00:11:47,750 --> 00:11:50,530 Saya akan menjawab soalan itu selepas kelas. 263 00:11:50,530 --> 00:11:52,680 Jika mereka berjalan ke dalam satu sama lain, anda kehabisan ingatan, kerana tidak ada yang lebih 264 00:11:52,680 --> 00:11:53,330 ruang di sana. 265 00:11:53,330 --> 00:11:55,450 >> PELAJAR: Maaf, apa yang kesilapan seg? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Segmen kesalahan boleh dipanggil untuk - 267 00:11:58,710 --> 00:12:02,240 ia bergantung mengapa dipanggil bersalah seg ini. 268 00:12:02,240 --> 00:12:06,260 Kadang-kadang, limpahan timbunan anda, ia akan mengatakan seg kesalahan sebagai ralat. 269 00:12:06,260 --> 00:12:08,180 >> PELAJAR: Bagaimana pula penyahrujukan pembolehubah null? 270 00:12:08,180 --> 00:12:10,040 Adakah itu satu kesalahan seg? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: penyahrujukan penunjuk batal - 272 00:12:11,480 --> 00:12:17,850 OK, jadi jika anda mempunyai penunjuk bahawa anda ditetapkan sama dengan nol, petunjuk, ingat, 273 00:12:17,850 --> 00:12:20,270 alamat kedai memori sebagai nilai-nilai mereka. 274 00:12:20,270 --> 00:12:23,660 Dan penunjuk null asasnya menyimpan 0, 0-ke- 275 00:12:23,660 --> 00:12:26,670 menangani dalam pembolehubah itu. 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-ke-dalam ingatan itu bukan dalam gambar kita, itu di sana 278 00:12:35,030 --> 00:12:38,800 di suatu tempat, itu terpelihara untuk komputer. 279 00:12:38,800 --> 00:12:40,130 Kami tidak dibenarkan untuk disentuh. 280 00:12:40,130 --> 00:12:44,680 >> Oleh itu, apabila program anda melaksanakan, jika ada sesuatu yang cuba untuk pergi ke memori 281 00:12:44,680 --> 00:12:48,990 alamat 0, ia tahu bahawa yang merupakan nilai kosong. 282 00:12:48,990 --> 00:12:50,820 Ia tahu apa-apa perlu berada di sana. 283 00:12:50,820 --> 00:12:53,420 Jadi, jika anda mencuba dan menggunakan sesuatu yang ada dan merawat sesuatu seperti ada atau 284 00:12:53,420 --> 00:12:58,355 cuba untuk pergi ke lokasi tersebut, anda akan mendapat kesalahan seg atau ralat. 285 00:12:58,355 --> 00:13:00,520 Adakah yang menjawab soalan anda? 286 00:13:00,520 --> 00:13:03,170 >> Dan sekarang kita akan kembali untuk timbunan limpahan. 287 00:13:03,170 --> 00:13:09,560 Perkara dalam tindanan, kerana anda lelaki itu mempunyai dilihat sebelum ini, di - mari kita menarik menutup 288 00:13:09,560 --> 00:13:11,966 daripada bingkai tindanan. 289 00:13:11,966 --> 00:13:15,050 Bolehkah semua orang melihat bahawa? 290 00:13:15,050 --> 00:13:16,650 Oleh itu, kita mempunyai kerangka timbunan kami. 291 00:13:16,650 --> 00:13:23,260 Kami menyimpan array dalam sebagai tempatan pembolehubah dalam fungsi ini. 292 00:13:23,260 --> 00:13:29,510 Supaya berkata pelbagai kami mempunyai lima tempat. 293 00:13:29,510 --> 00:13:33,230 Semua lima daripada akan disimpan dalam kerangka timbunan. 294 00:13:33,230 --> 00:13:37,540 >> Jika kita mula menulis di luar batas array ini - 295 00:13:37,540 --> 00:13:43,990 jadi jika kita mula menulis ke dalam, mari kita mengatakan yang 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 mula menulis ke dalam indeks 5, yang kita tidak mempunyai apabila kita mempunyai 298 00:13:50,980 --> 00:13:55,900 pelbagai saiz 5, kami mula menulis ke dalam indeks 6, 7, 8, 9, kita boleh mendapatkan Stack a 299 00:13:55,900 --> 00:13:57,960 Ralat limpahan. 300 00:13:57,960 --> 00:14:00,510 >> Secara umumnya ia tidak - 301 00:14:00,510 --> 00:14:04,910 anda mungkin akan mendapat masalah jika anda pergi alih oleh satu. 302 00:14:04,910 --> 00:14:08,640 Tetapi secara amnya, anda akan masuk ke dalam masalah yang paling jika anda pergi alih oleh banyak 303 00:14:08,640 --> 00:14:12,770 dan anda pergi setakat ini lebih yang anda menulis lebih alamat kembali itu 304 00:14:12,770 --> 00:14:16,080 fungsi, yang terletak di bawah bingkai tindanan. 305 00:14:16,080 --> 00:14:16,520 >> Kerana, bukan? 306 00:14:16,520 --> 00:14:17,670 Anda - dalam - maaf. 307 00:14:17,670 --> 00:14:18,550 Tidak "kerana betul." 308 00:14:18,550 --> 00:14:20,470 >> Dalam bingkai tindanan, anda perlu pembolehubah tempatan anda. 309 00:14:20,470 --> 00:14:27,090 Pada bahagian paling bawah tindanan bingkai adalah alamat kembali. 310 00:14:27,090 --> 00:14:28,790 Itulah di mana fungsi pergi apabila ia berakhir. 311 00:14:28,790 --> 00:14:33,750 Dan jika anda menulis ganti pulangan yang alamat, kemudian apabila bingkai tindanan ini, 312 00:14:33,750 --> 00:14:36,680 apabila anda akan melalui tindanan bingkai dan melaksanakan setiap baris, anda 313 00:14:36,680 --> 00:14:40,350 akan pergi ke alamat kembali baru anda yang ditulis ada dan bukannya 314 00:14:40,350 --> 00:14:40,910 satu sebenar. 315 00:14:40,910 --> 00:14:45,050 Dan itulah bagaimana kita telah melihat beberapa pelanggaran peraturan keselamatan 316 00:14:45,050 --> 00:14:46,780 boleh berlaku dengan komputer. 317 00:14:46,780 --> 00:14:52,760 >> Limpahan Jadi timbunan, pendek, adalah apabila anda menulis ganti bahagian dalam tindanan 318 00:14:52,760 --> 00:14:55,440 anda sepatutnya menggunakan, tempatan pembolehubah anda sepatutnya untuk digunakan, dan 319 00:14:55,440 --> 00:14:58,070 khususnya apabila anda mula menulis ganti perkara-perkara penting seperti 320 00:14:58,070 --> 00:14:59,100 kembali alamat. 321 00:14:59,100 --> 00:15:00,090 Dan di mana anda akan mendapat ralat. 322 00:15:00,090 --> 00:15:03,980 Atau mungkin juga anda boleh memulakan walaupun menulis ke - 323 00:15:03,980 --> 00:15:05,370 mengatakan carian binari adalah kanan di atas utama. 324 00:15:05,370 --> 00:15:07,790 Jika anda overwrote banyak, anda boleh menulis ke dalam utama. 325 00:15:07,790 --> 00:15:10,230 Tetapi secara amnya, anda mendapat ralat sebelum maka, kerana komputer tahu 326 00:15:10,230 --> 00:15:12,270 anda melakukan sesuatu yang anda tidak boleh lakukan. 327 00:15:12,270 --> 00:15:12,560 Yeah. 328 00:15:12,560 --> 00:15:13,910 >> PELAJAR: Apakah perbezaan di antara limpahan timbunan 329 00:15:13,910 --> 00:15:16,940 dan suatu buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Penimbal limpahan adalah jenis yang lebih generik 331 00:15:19,420 --> 00:15:20,395 apa yang saya baru diterangkan. 332 00:15:20,395 --> 00:15:22,610 >> PELAJAR: Jadi limpahan timbunan adalah contoh suatu buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Tepat sekali. 334 00:15:23,420 --> 00:15:28,700 Ini adalah pelbagai yang kita boleh berfikir sebagai penampan, ruang untuk perkara-perkara untuk pergi masuk 335 00:15:28,700 --> 00:15:30,600 Ini adalah buffer overflow timbunan. 336 00:15:30,600 --> 00:15:33,210 Kita boleh mempunyai suatu buffer overflow timbunan. 337 00:15:33,210 --> 00:15:36,870 Jika ada penampan, yang ada sering adalah satu pameran timbunan itu, dan kami 338 00:15:36,870 --> 00:15:40,600 overwrote mereka batas, maka kita akan mempunyai suatu buffer overflow timbunan. 339 00:15:40,600 --> 00:15:44,870 >> Dan di luar skop kursus ini, mereka dikesan sedikit berbeza. 340 00:15:44,870 --> 00:15:48,040 Pengkompil mempunyai khas cara-cara mengesan setiap. 341 00:15:48,040 --> 00:15:50,660 Tetapi suatu buffer overflow adalah lebih generik jenis apa yang saya diterangkan, 342 00:15:50,660 --> 00:15:54,090 yang merupakan satu buffer overflow timbunan. 343 00:15:54,090 --> 00:15:56,240 Adakah yang menjawab soalan anda? 344 00:15:56,240 --> 00:15:57,910 Manis. 345 00:15:57,910 --> 00:16:01,850 >> Adakah terdapat apa-apa soalan lain yang berkaitan kepada tindanan atau timbunan itu? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Yeah. 348 00:16:05,510 --> 00:16:08,220 >> PELAJAR: Saya tahu anda perlu tali percuma kerana mereka dalam timbunan itu 349 00:16:08,220 --> 00:16:09,305 dan anda tidak mahu bocor ingatan. 350 00:16:09,305 --> 00:16:12,240 Tetapi adakah anda mempunyai untuk membebaskan pembolehubah global dan barangan seperti itu? 351 00:16:12,240 --> 00:16:14,335 Atau adakah mereka secara automatik dibebaskan? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Soalan yang baik. 353 00:16:15,700 --> 00:16:22,340 Jadi dalam CS50.H, kita mewujudkan perkara ini untuk anda dipanggil rentetan. 354 00:16:22,340 --> 00:16:23,800 String A adalah benar-benar apa? 355 00:16:23,800 --> 00:16:24,810 >> PELAJAR: Char bintang. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: Bintang char, penunjuk untuk aksara, penunjuk untuk 357 00:16:29,180 --> 00:16:30,650 pelbagai aksara. 358 00:16:30,650 --> 00:16:32,210 Itulah yang tali itu. 359 00:16:32,210 --> 00:16:36,050 Oleh itu, kita perlu untuk membebaskannya, kerana getstring, yang kita digunakan banyak - 360 00:16:36,050 --> 00:16:38,370 Nama tali sama getstring - 361 00:16:38,370 --> 00:16:43,560 yang mallocs bagi kami sebahagian memori pada ditimbunkannya dan kemudian kembali penunjuk kepada 362 00:16:43,560 --> 00:16:47,230 watak pertama yang tali, bintang char. 363 00:16:47,230 --> 00:16:52,760 >> Jadi kononnya, jika anda tidak menulis percuma di mana-mana rentetan anda 364 00:16:52,760 --> 00:16:55,600 bahawa anda telah dipanggil setakat ini, anda mempunyai telah bocor beberapa ingatan. 365 00:16:55,600 --> 00:16:57,430 Sudah tentu kita tidak bercakap tentang , jadi tiada siapa yang mendapat dalam 366 00:16:57,430 --> 00:16:58,520 masalah untuk melakukannya. 367 00:16:58,520 --> 00:16:59,980 Tetapi pada masa akan datang, ya. 368 00:16:59,980 --> 00:17:03,990 Apabila anda memanggil getstring, anda mallocing sedikit ruang pada timbunan itu. 369 00:17:03,990 --> 00:17:07,640 Dan jika anda tidak memanggil percuma kemudian bahawa tali, anda mempunyai kebocoran memori. 370 00:17:07,640 --> 00:17:09,440 Yang menjawab soalan anda? 371 00:17:09,440 --> 00:17:10,606 >> Yeah 372 00:17:10,606 --> 00:17:15,020 >> PELAJAR: Jadi untuk melakukan itu, kita menggunakan betul percuma sebelum kembali? 373 00:17:15,020 --> 00:17:18,510 Seperti, dalam skop, saya rasa jika kita katakan, seperti, int utama, dalam 374 00:17:18,510 --> 00:17:24,410 skop kod itu dalam masa yang pendakap kerinting, betul sebelum - 375 00:17:24,410 --> 00:17:26,140 anda tahu di mana anda akan biasanya meletakkan kembali. 376 00:17:26,140 --> 00:17:27,950 Adakah anda meletakkan percuma sebelum itu? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Jadi anda boleh meletakkan percuma di mana sahaja anda mahu meletakkan percuma. 378 00:17:31,000 --> 00:17:33,810 Oleh kerana ini adalah dinamik diperuntukkan pembolehubah, kerana mereka boleh 379 00:17:33,810 --> 00:17:39,170 hidup di luar skop tertentu fungsi, jika anda memanggil malloc dalam 380 00:17:39,170 --> 00:17:44,140 fungsi yang berasingan, sebagai contoh, getstring, anda boleh menghubungi percuma di utama. 381 00:17:44,140 --> 00:17:46,050 Anda tidak perlu untuk memanggil ia dalam fungsi tertentu 382 00:17:46,050 --> 00:17:47,570 mana malloc dipanggil. 383 00:17:47,570 --> 00:17:50,340 Tetapi anda perlu memanggilnya sebelum pulangan utama. 384 00:17:50,340 --> 00:17:51,120 >> Dan ia benar-benar bergantung. 385 00:17:51,120 --> 00:17:54,960 Ia bergantung kepada mengapa anda malloced yang ruang di tempat pertama. 386 00:17:54,960 --> 00:17:57,320 Sesetengah orang akan memanggil membebaskan cukup cepat. 387 00:17:57,320 --> 00:17:59,220 Sesetengah orang tidak akan memanggil bebas sehingga akhir program mereka. 388 00:17:59,220 --> 00:18:00,660 Dan mereka akan melalui dan segala-galanya percuma. 389 00:18:00,660 --> 00:18:03,597 Ia bergantung kepada mengapa anda dipanggil malloc. 390 00:18:03,597 --> 00:18:11,270 >> PELAJAR: Dan apa yang anda akan berkata jika anda dipanggil penggunaan getstring? 391 00:18:11,270 --> 00:18:13,320 Anda akan katakan percuma apa? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Jadi sintaks secara percuma adalah semata-mata bebas, paren terbuka, berhampiran 393 00:18:20,040 --> 00:18:22,130 paren, dan nama penunjuk. 394 00:18:22,130 --> 00:18:26,410 Jadi, jika anda menulis nama setaraf tali getstring, anda meletakkan nama di sini. 395 00:18:26,410 --> 00:18:27,760 Itulah nama penunjuk. 396 00:18:27,760 --> 00:18:30,570 Dan ia tahu untuk bebaskan ingatan itu. 397 00:18:30,570 --> 00:18:33,920 >> PELAJAR: Oleh itu, apabila ia membebaskan memori, penunjuk masih menunjukkan ke tempat itu 398 00:18:33,920 --> 00:18:34,970 dalam memori? 399 00:18:34,970 --> 00:18:39,020 Atau adalah penunjuk juga dikosongkan alamat yang ia menjurus kepada. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Kita harus cuba itu. 401 00:18:40,290 --> 00:18:41,430 Kita perlu memberi kod itu. 402 00:18:41,430 --> 00:18:43,880 Mari kita kembali apabila kita dapat pengekodan, dan mari kita kod itu. 403 00:18:43,880 --> 00:18:46,000 Dan jika anda mahu untuk memikirkan jawapannya itu, anda juga boleh kod yang 404 00:18:46,000 --> 00:18:46,690 dalam masa yang sama. 405 00:18:46,690 --> 00:18:49,100 Tetapi itu adalah satu persoalan yang besar. 406 00:18:49,100 --> 00:18:53,480 >> PELAJAR: Adakah mungkin untuk sesuatu yang percuma juga tidak lama lagi? 407 00:18:53,480 --> 00:18:58,530 Jadi anda masih memerlukannya untuk program anda, dan anda dibebaskan ruang memori? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Ya. 409 00:18:59,200 --> 00:19:03,020 Ia adalah mungkin, jika anda sesuatu yang percuma dan kemudian anda menggunakannya semula, anda akan 410 00:19:03,020 --> 00:19:06,890 menghadapi ralat. 411 00:19:06,890 --> 00:19:10,810 Tetapi itu pada anda, kerana anda dibebaskan sesuatu dan kemudian dipanggil kemudian. 412 00:19:10,810 --> 00:19:13,940 Jadi bahawa adalah satu kesilapan pengaturcara. 413 00:19:13,940 --> 00:19:14,780 Tetapi ya. 414 00:19:14,780 --> 00:19:17,760 Anda boleh menulis itu. 415 00:19:17,760 --> 00:19:19,240 >> Sebarang pertanyaan lanjut mengenai - 416 00:19:19,240 --> 00:19:19,760 ya. 417 00:19:19,760 --> 00:19:22,820 >> PELAJAR: Jadi, jika anda sepatutnya hanya membebaskannya secara umum sebelum 418 00:19:22,820 --> 00:19:25,490 program berakhir, adakah itu bermakna jika program berakhir dan anda tidak membebaskannya, 419 00:19:25,490 --> 00:19:27,580 memori yang masih diperuntukkan? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Jika program anda berakhir dan anda terlupa untuk membebaskan sesuatu, maka 421 00:19:31,330 --> 00:19:34,390 memori yang telah diperuntukkan di seluruh hayat program anda. 422 00:19:34,390 --> 00:19:37,670 Apabila program anda menutup sepenuhnya, memori yang tidak akan 423 00:19:37,670 --> 00:19:39,490 untuk tinggal di sana selama-lamanya. 424 00:19:39,490 --> 00:19:42,080 Komputer ini cukup pintar untuk mengetahui bahawa apabila program ditutup, ia 425 00:19:42,080 --> 00:19:46,440 perlu menghilangkan semua memori yang dikaitkan dengan program itu. 426 00:19:46,440 --> 00:19:51,240 >> Walau bagaimanapun, terdapat alat anda boleh menjalankan satu program untuk mengesan jika, apabila 427 00:19:51,240 --> 00:19:54,720 program selesai, anda terlupa untuk membebaskan beberapa memori. 428 00:19:54,720 --> 00:19:57,960 Dan untuk masalah seterusnya menetapkan ke mana anda akan menggunakan malloc dan menggunakan 429 00:19:57,960 --> 00:20:02,610 petunjuk, anda akan menjalankan ini program program anda untuk melihat jika, 430 00:20:02,610 --> 00:20:06,530 apabila pulangan utama, anda mempunyai beberapa perkara-perkara yang dibiarkan unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Jadi mereka tidak akan tinggal malloced selama-lamanya dalam komputer anda. 432 00:20:09,130 --> 00:20:11,720 Yang akan membazir, kerana dengan cepat, komputer 433 00:20:11,720 --> 00:20:12,960 akan kehabisan ingatan. 434 00:20:12,960 --> 00:20:16,450 Tetapi jika mereka berjalan sehingga akhir anda program dan mereka tidak dibebaskan dan anda 435 00:20:16,450 --> 00:20:20,260 program keluar, itu masih masalah bahawa alat ini akan membantu anda menangani. 436 00:20:20,260 --> 00:20:21,520 >> PELAJAR: Adakah itu Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: Ia dipanggil Valgrind. 438 00:20:22,910 --> 00:20:23,520 Dan anda akan menjadi - 439 00:20:23,520 --> 00:20:25,780 >> PELAJAR: Tetapi kita tidak perlu tahu bahawa untuk kuiz, walaupun? 440 00:20:25,780 --> 00:20:27,600 Maksud saya, ia bercakap tentang sedikit dalam kuliah. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Jadi Valgrind adalah nama alat itu. 442 00:20:33,600 --> 00:20:37,180 Mengetahui apa yang ia adalah cukup untuk kuiz. 443 00:20:37,180 --> 00:20:40,200 Tetapi anda tidak menggunakan lagi pada anda masalah ditetapkan kerana kita tidak mempunyai 444 00:20:40,200 --> 00:20:43,520 set masalah yang telah diuruskan dengan jelas dengan malloc atau anda menggunakan malloc. 445 00:20:43,520 --> 00:20:45,330 Jadi anda tidak menggunakan Valgrind yet. 446 00:20:45,330 --> 00:20:47,760 Tetapi anda akan menggunakannya lebih awal daripada kemudian. 447 00:20:47,760 --> 00:20:48,710 >> PELAJAR: Bolehkah 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 >> PELAJAR: Bolehkah anda mengulangi apa yang tujuan Valgring adalah? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind adalah nama yang - 451 00:20:53,100 --> 00:20:59,890 seperti GDB membantu anda debug program anda, Valgrind membantu anda memahami jika 452 00:20:59,890 --> 00:21:03,210 perkara yang tidak dibebaskan apabila program anda menutup. 453 00:21:03,210 --> 00:21:05,110 Jadi, anda akan berjalan pada program anda. 454 00:21:05,110 --> 00:21:09,230 Dan program anda keluar, dan ia akan mengatakan program anda dipanggil malloc banyak ini 455 00:21:09,230 --> 00:21:13,670 kali untuk banyak bait ini, dan anda hanya dipanggil percuma banyak kali ini. 456 00:21:13,670 --> 00:21:16,520 Dan supaya anda meninggalkan ini bytes banyak tanpa dibebaskan. 457 00:21:16,520 --> 00:21:18,050 Atau ia akan mengatakan anda telah dibebaskan segala-galanya. 458 00:21:18,050 --> 00:21:19,070 Kerja yang baik. 459 00:21:19,070 --> 00:21:19,480 >> PELAJAR: OK. 460 00:21:19,480 --> 00:21:21,060 Dan ia dipanggil 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 >> PELAJAR: Satu soalan mengenai petunjuk. 463 00:21:25,970 --> 00:21:30,080 Jadi mengatakan anda n bintang x sama sesuatu. 464 00:21:30,080 --> 00:21:33,330 Yang sama, apa sahaja yang anda meletakkan ada, adalah bahawa apa yang sedang diletakkan di dalam 465 00:21:33,330 --> 00:21:36,120 apa x menuding kepada, atau penunjuk x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Bolehkah anda mengulangi soalan? 467 00:21:37,690 --> 00:21:39,340 Bolehkah kita menarik semasa anda mengatakan ia? 468 00:21:39,340 --> 00:21:42,710 >> PELAJAR: Dalam kuiz, sebenarnya, yang anda menghantar kami, ia adalah seperti, char 469 00:21:42,710 --> 00:21:46,520 kebenaran bintang sama batu CS50, bukan? 470 00:21:46,520 --> 00:21:52,190 Jadi adakah ini bermakna bahawa batu CS50 adalah apa yang benar itu menunjuk ke? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Jadi anda bercakap kira-kira bintang char dalam tali, bagaimana 472 00:21:55,810 --> 00:21:56,460 yang bekerja? 473 00:21:56,460 --> 00:21:56,890 Yeah. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Mari kita menarik ini di sini. 476 00:21:59,140 --> 00:22:07,100 >> [SAMPINGAN PERBUALAN] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Jadi ubah ini akan menjadi jenis char bintang. 478 00:22:11,130 --> 00:22:14,580 Bagaimana besar adalah pembolehubah jenis char bintang? 479 00:22:14,580 --> 00:22:15,510 Berapa banyak bait? 480 00:22:15,510 --> 00:22:16,450 >> PELAJAR: Empat. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Ia empat bait. 482 00:22:18,210 --> 00:22:21,420 Berapa banyak hak dijadikan pemboleh ubah jenis int bintang? 483 00:22:21,420 --> 00:22:22,210 >> PELAJAR: Empat. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Empat bait. 485 00:22:24,910 --> 00:22:28,280 Jika ia penunjuk, maka ia sentiasa empat bait, kerana petunjuk, mereka 486 00:22:28,280 --> 00:22:30,070 nilai adalah alamat ingatan. 487 00:22:30,070 --> 00:22:35,160 Dan alamat-alamat ingatan di CS50 perkakas empat bait. 488 00:22:35,160 --> 00:22:42,900 Oleh itu, apabila kita panggil getstring, atau apabila kita katakan, stringname sama, dan kemudian di 489 00:22:42,900 --> 00:22:46,140 petikan berganda meletakkan tali, kami meletakkan - 490 00:22:46,140 --> 00:22:46,920 baik, itu sedikit berbeza. 491 00:22:46,920 --> 00:22:48,630 Kami akan jangan getstring sebagai contoh. 492 00:22:48,630 --> 00:22:52,150 Atau char bintang sesuatu sama tali. 493 00:22:52,150 --> 00:22:54,360 Maaf, beri saya contoh yang yang anda baca? 494 00:22:54,360 --> 00:22:57,590 >> PELAJAR: char kebenaran bintang sama "Batu-batu cs50" dalam tanda petik. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Jadi bintang ini, ini kami akan memanggil ubah 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 membuat dalam pembolehubah x. 498 00:23:05,970 --> 00:23:07,610 Ia jenis char bintang. 499 00:23:07,610 --> 00:23:10,950 Ia adalah penunjuk kepada satu siri aksara. 500 00:23:10,950 --> 00:23:12,200 Jadi turun di sini - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Jadi ini adalah bagaimana ini akan bekerja dalam ingatan. 503 00:23:25,890 --> 00:23:27,410 Ini akan menyimpan alamat memori. 504 00:23:27,410 --> 00:23:31,770 Ia akan menyimpan alamat memori aksara pertama dalam tatasusunan. 505 00:23:31,770 --> 00:23:33,830 Dan kemudian apabila anda diikuti penunjuk, anda akan 506 00:23:33,830 --> 00:23:35,200 mendapatkan watak pertama. 507 00:23:35,200 --> 00:23:38,780 >> Dan jika anda membaca perkara ini seperti tali, komputer anda adalah pintar 508 00:23:38,780 --> 00:23:42,930 cukup untuk mengetahui, membaca perkara ini sehingga ia sampai ke serangan balas 0. 509 00:23:42,930 --> 00:23:45,530 Tetapi jika anda membaca ia watak di satu masa, jadi anda iterating melalui 510 00:23:45,530 --> 00:23:49,910 tali ini, maka anda hanya akan membaca aksara pada satu masa sehingga anda sampai ke 511 00:23:49,910 --> 00:23:50,850 garis sendeng terbalik 0. 512 00:23:50,850 --> 00:23:52,335 Yang mungkin tidak menjawab anda soalan, walaupun. 513 00:23:52,335 --> 00:23:55,610 >> PELAJAR: Ya, tetapi anda tidak mempunyai malloced ruang yang 514 00:23:55,610 --> 00:23:58,400 namun bagi penunjuk itu. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Jadi saya tidak pasti betul-betul apa yang anda cari di, 516 00:24:02,510 --> 00:24:03,640 kerana saya tidak membuat kuiz itu. 517 00:24:03,640 --> 00:24:06,370 Yang sepatutnya menjadi berguna sumber dari TF yang lain. 518 00:24:06,370 --> 00:24:11,380 Jika anda membuat tali pada stack atau sebagai pembolehubah tempatan, ia akan 519 00:24:11,380 --> 00:24:16,920 hanya menjadi pelbagai caj dan bukan umumnya bintang char menunjuk ke 520 00:24:16,920 --> 00:24:18,600 tali yang lain. 521 00:24:18,600 --> 00:24:20,550 Tetapi saya tidak tahu. 522 00:24:20,550 --> 00:24:25,065 Yang boleh menjadi penunjuk yang lain tali pada timbunan juga. 523 00:24:25,065 --> 00:24:27,240 Yeah. 524 00:24:27,240 --> 00:24:31,116 >> PELAJAR: Saya tahu bahawa anda perlu memperuntukkan memori jika penunjuk berada 525 00:24:31,116 --> 00:24:33,360 mendapat diisytiharkan di dalam fungsi lain. 526 00:24:33,360 --> 00:24:36,740 Adakah anda perlu melakukan perkara yang sama jika ia diisytiharkan dalam utama, 527 00:24:36,740 --> 00:24:39,570 anda menggunakannya di 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 boleh mengisytiharkan penunjuk kepada mana-mana alamat ingatan dalam ingatan. 530 00:24:46,670 --> 00:24:51,440 Ia boleh menjadi alamat memori tempatan berubah-ubah, walaupun sering kali, 531 00:24:51,440 --> 00:24:55,760 orang tidak mengisytiharkan alamat-alamat ingatan kepada pembolehubah tempatan kerana mereka pergi 532 00:24:55,760 --> 00:24:59,890 jauh sekali fungsi yang mengembalikan, yang sebabnya kita biasanya malloc sesuatu. 533 00:24:59,890 --> 00:25:04,630 Tetapi ya, anda boleh mengisytiharkan penunjuk yang lain pembolehubah tempatan. 534 00:25:04,630 --> 00:25:06,360 Ia hanya umumnya tidak dilakukan. 535 00:25:06,360 --> 00:25:09,480 Tetapi saya boleh lihat bahawa perkara tertentu selepas kelas. 536 00:25:09,480 --> 00:25:10,650 Yeah. 537 00:25:10,650 --> 00:25:12,350 >> PELAJAR: Saya rasa ini adalah jenis daripada apa yang diminta. 538 00:25:12,350 --> 00:25:16,930 Ia seolah-olah pelik untuk Memulakan penunjuk bukan sebagai 539 00:25:16,930 --> 00:25:20,760 alamat, tetapi seperti apa seolah-olah seperti nilai. 540 00:25:20,760 --> 00:25:25,970 Ia seolah-olah seperti CS50 adalah apa yang di dalam perkara yang sedang menunjuk kepada dan 541 00:25:25,970 --> 00:25:28,820 bukan alamat sebenar, bukan? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Jadi, itu tidak kes itu, walaupun. 543 00:25:30,520 --> 00:25:32,470 Itu bukan apa yang berlaku. 544 00:25:32,470 --> 00:25:35,910 Apabila anda mengisytiharkan bintang char, ia adalah alamat ingatan. 545 00:25:35,910 --> 00:25:38,860 Penunjuk semua alamat-alamat ingatan menunjuk kepada sesuatu yang lain. 546 00:25:38,860 --> 00:25:41,480 Bahawa sesuatu lagi yang berada di timbunan, tetapi selalunya adalah pada 547 00:25:41,480 --> 00:25:43,440 ditimbunkannya dalam cara kita akan melihat ia digunakan. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Tetapi stringname sama dua quote "Getstring," kita dapat melihat bahawa dan kita 550 00:25:53,500 --> 00:25:55,010 boleh melihat melalui itu dan kod itu. 551 00:25:55,010 --> 00:26:01,190 getstring rentetan adalah tidak disimpan di dalam yang berubah-ubah, atau apa sahaja tali 552 00:26:01,190 --> 00:26:04,580 namanya adalah tidak disimpan dalam yang berubah-ubah, kerana itu bukan bagaimana 553 00:26:04,580 --> 00:26:06,070 petunjuk bekerja. 554 00:26:06,070 --> 00:26:06,770 Adakah ini masuk akal? 555 00:26:06,770 --> 00:26:07,170 >> PELAJAR: Yeah. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Mudah-mudahan, yang tidak mengelirukan kepada sesiapa. 558 00:26:11,690 --> 00:26:15,732 Tetapi jika ia adalah, kita boleh melihat pada sekali lagi dalam sedikit, kerana sedang kita sebenarnya akan 559 00:26:15,732 --> 00:26:19,240 kod sesuatu yang akan diharapkan bekerja dengan tali dan membantu anda berasa 560 00:26:19,240 --> 00:26:22,170 lebih selesa dengan mereka. 561 00:26:22,170 --> 00:26:24,869 >> Apa-apa soalan lain yang berkaitan dengan ini topik atau topik lain yang 562 00:26:24,869 --> 00:26:26,119 Saya akan meletakkan kembali ke atas? 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 adalah benar-benar tidak berkaitan, tetapi boleh kita hanya pergi ke atas 568 00:26:39,860 --> 00:26:42,760 benar-benar cepat apa yang kita perlu tahu tentang perbezaan 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 bait? 572 00:26:52,111 --> 00:26:53,060 >> Alden: Ia empat bait. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Ia empat bait. 574 00:26:54,360 --> 00:26:58,420 Dan 64 bit adalah berapa banyak bait? 575 00:26:58,420 --> 00:26:59,112 >> PELAJAR: Lapan. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Lapan bait. 577 00:27:00,610 --> 00:27:03,980 Jadi sekali lagi, lapan bit adalah salah satu bait. 578 00:27:03,980 --> 00:27:08,340 Perkakas CS50 anda mesin 32-bit. 579 00:27:08,340 --> 00:27:13,650 Jadi alamat ingatan yang empat bait panjang. 580 00:27:13,650 --> 00:27:17,460 Terdapat 2 kepada 32 alamat ingatan. 581 00:27:17,460 --> 00:27:21,310 0-2 kepada 32 tolak 1. 582 00:27:21,310 --> 00:27:27,630 Dan saya tidak positif, tetapi itu mungkin skop apa yang anda perlu 583 00:27:27,630 --> 00:27:35,230 tahu untuk mesin 32-bit, bahawa memori alamat, sekali lagi, empat bait panjang, 584 00:27:35,230 --> 00:27:39,620 dan itulah jumlah maksimum alamat ingatan. 585 00:27:39,620 --> 00:27:41,680 >> Selain itu, jenis data - 586 00:27:41,680 --> 00:27:45,020 ini mungkin menjadi sesuatu yang baik itu diperhatikan. 587 00:27:45,020 --> 00:27:49,610 Saiz jenis data bergantung kepada mesin yang anda bekerja dengan. 588 00:27:49,610 --> 00:27:56,760 Jadi char, watak tunggal, ialah bagaimana banyak bait perkakas CS50 kita? 589 00:27:56,760 --> 00:27:57,980 Satu bait. 590 00:27:57,980 --> 00:28:02,310 Dan ia sebenarnya satu bait sebagai baik pada mesin 64-bit. 591 00:28:02,310 --> 00:28:05,920 >> Dan kebanyakan jenis data adalah nombor yang sama daripada bait di kedua-dua mesin. 592 00:28:05,920 --> 00:28:11,620 Tetapi beberapa jenis data akan berbeza di kedua-dua mesin. 593 00:28:11,620 --> 00:28:14,590 Jadi yang akan berpotensi Satu-satunya perkara yang anda perlu tahu. 594 00:28:14,590 --> 00:28:16,710 >> Tetapi itu, saya fikir, adalah di luar batas - 595 00:28:16,710 --> 00:28:20,990 Saya hampir positif, jika anda melihat kembali di kuiz lama, ia berkata, menganggap untuk 596 00:28:20,990 --> 00:28:24,090 pengekodan masalah anda menggunakan mesin 32-bit. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Tetapi ada, untuk pergi bersama-sama dengan yang di dalam sekiranya anda berminat, terdapat 599 00:28:30,620 --> 00:28:35,920 jenis data yang sama saiz pada semua mesin. 600 00:28:35,920 --> 00:28:42,670 >> Jika anda telah melihat sesuatu seperti uint32_t, anda mungkin atau mungkin 601 00:28:42,670 --> 00:28:43,260 tidak telah melihat bahawa. 602 00:28:43,260 --> 00:28:44,290 Itu merupakan jenis data. 603 00:28:44,290 --> 00:28:47,570 Yang berkata, menjadi 32 bit tidak kira apa mesin ini dihidupkan. 604 00:28:47,570 --> 00:28:50,350 Oleh itu, apabila orang menulis mudah alih kod, mereka mungkin tidak akan menggunakan Ints. 605 00:28:50,350 --> 00:28:53,260 Mereka sebaliknya akan menggunakan data lain jenis yang mereka tahu akan sama 606 00:28:53,260 --> 00:28:54,780 saiz 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 mempunyai soalan mengenai proses penyusunan. 610 00:29:00,150 --> 00:29:04,110 Jadi, jika anda menulis satu program yang menggunakan perpustakaan seperti CS50 atau sesuatu 611 00:29:04,110 --> 00:29:06,840 seperti itu, saya tahu bahawa perpustakaan yang perlu, pada satu ketika, menjadi 612 00:29:06,840 --> 00:29:08,590 disusun dan dikaitkan masuk 613 00:29:08,590 --> 00:29:13,380 Tetapi berapa banyak yang berlaku semasa penyusunan program anda? 614 00:29:13,380 --> 00:29:15,880 Apa yang sebahagian daripada proses perpustakaan berlaku apabila anda 615 00:29:15,880 --> 00:29:18,560 menyusun program anda sendiri? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Jadi mari kita pergi ke umumnya langkah-langkah proses ini. 617 00:29:24,020 --> 00:29:26,280 Anda menulis. C fail anda. 618 00:29:26,280 --> 00:29:33,530 Dalam. C fail anda, anda # include anda perpustakaan header, sebagai contoh, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Apakah yang tajam termasuk talian 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 menambah prototaip fungsi dari pengepala 622 00:29:43,350 --> 00:29:45,120 fail dalam perpustakaan. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Tepat sekali. 624 00:29:45,600 --> 00:29:49,870 Ia menambah mereka fungsi prototaip kepada kod anda. 625 00:29:49,870 --> 00:29:55,230 Oleh itu, apabila kod anda sedang dikumpul dalam peringkat awal, pengkompil tahu 626 00:29:55,230 --> 00:29:59,250 bahawa fungsi-fungsi ini benar-benar wujud, dan bahawa di suatu tempat mereka telah ditentukan. 627 00:29:59,250 --> 00:30:02,460 Yang. H fail tidak termasuk takrif bagi 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 termasuk sesuatu yang berkata getstring adalah satu perkara yang sebenar yang 630 00:30:07,960 --> 00:30:09,270 boleh berlaku. 631 00:30:09,270 --> 00:30:14,240 Dan standardio.h kata printf adalah satu perkara sebenar yang boleh berlaku. 632 00:30:14,240 --> 00:30:23,190 >> Header Jadi c Bahasa dengan ini. fail mendapat bertukar menjadi beberapa 633 00:30:23,190 --> 00:30:27,750 kod mesin yang boleh dibaca, yang akhirnya mendapat bertukar menjadi binari 634 00:30:27,750 --> 00:30:30,030 kod, 0 dan 1 ini. 635 00:30:30,030 --> 00:30:33,590 Dan itu kod yang akhirnya mendapat dilaksanakan. 636 00:30:33,590 --> 00:30:38,550 The-l cs50 talian - sebagai contoh, bila anda menulis dentang - 637 00:30:38,550 --> 00:30:41,830 dan kemudian anda termasuk-l cs50, anda taip yang masuk 638 00:30:41,830 --> 00:30:42,180 Dan anda melihat bahawa. 639 00:30:42,180 --> 00:30:43,890 Apabila anda menulis membuat, anda akan melihat baris yang menyatakan di sini. 640 00:30:43,890 --> 00:30:47,740 Dan kita akan melihat bahawa dalam kedua apabila kita kod atau kemudian apabila kita kod. 641 00:30:47,740 --> 00:30:50,390 >> Tetapi itu-l talian cs50 melakukan sesuatu agak berbeza daripada 642 00:30:50,390 --> 00:30:52,440 yang # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Apakah garis yang-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 bahawa ia menghubungkan perpustakaan untuk fungsi 646 00:31:00,310 --> 00:31:02,710 memanggil, seperti. fail o. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Jadi sangat rapat, jika tidak melihat-on. 648 00:31:08,200 --> 00:31:16,220 The-l cs50 mengambil fail binari dan memasukkan ia dengan fail binari anda. 649 00:31:16,220 --> 00:31:21,410 Jadi cs50.h, tidak ada gunanya dalam mengubah cs50.h dari bahasa C kepada perduaan setiap 650 00:31:21,410 --> 00:31:23,130 kali tunggal ia sedang digunakan. 651 00:31:23,130 --> 00:31:26,650 Itu akan menjadi bodoh, kerana yang akan membazirkan banyak masa. 652 00:31:26,650 --> 00:31:30,420 Jadi ia telah disusun dan bertukar menjadi laksana. 653 00:31:30,420 --> 00:31:35,430 Dan kini ia akan digabungkan dengan fail anda pada akhir. 654 00:31:35,430 --> 00:31:38,370 Maka orang-orang 1 dan 0 ini akan untuk bergabung dengan orang yang anda 655 00:31:38,370 --> 00:31:39,150 dan 0 ini pada akhir. 656 00:31:39,150 --> 00:31:43,670 Jadi sekarang anda benar-benar akan mempunyai sebenar 1 dan 0 yang menentukan cara getstring, 657 00:31:43,670 --> 00:31:47,890 sebagai contoh, kerja-kerja, atau bagaimana printf, sebagai contoh, kerja-kerja. 658 00:31:47,890 --> 00:31:52,750 >> Dan untuk maklumat lanjut, ada penyusun pendek yang Nate memberikan yang 659 00:31:52,750 --> 00:31:55,410 anda perlu menyemak yang pergi melalui langkah-langkah ini. 660 00:31:55,410 --> 00:31:56,050 Tetapi - 661 00:31:56,050 --> 00:31:56,560 ya. 662 00:31:56,560 --> 00:32:01,700 >> PELAJAR: Adakah mereka sentiasa dalam o fail. apabila mereka dalam bentuk perpustakaan, 663 00:32:01,700 --> 00:32:06,764 sedia untuk bergabung, yang dikaitkan - seperti mereka dalam kod binari? 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 >> PELAJAR: Adakah itu semestinya untuk perpustakaan apabila 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 tidak. S fail, yang akan menjadi kod mesin, yang juga akan menjadi 669 00:32:17,300 --> 00:32:17,975 samar kepada anda. 670 00:32:17,975 --> 00:32:19,410 Anda tidak perlu bimbang tentang mereka. 671 00:32:19,410 --> 00:32:24,930 Tetapi secara amnya, yeah, mereka akan berada di dalam. o fail bersedia untuk pergi. 672 00:32:24,930 --> 00:32:27,170 >> PELAJAR: Oleh itu, apabila anda menghantar kepada perpustakaan, adakah anda hanya kapal 673 00:32:27,170 --> 00:32:28,880 yang. h dan. o? 674 00:32:28,880 --> 00:32:32,210 Anda tidak kapal itu. C atau. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: Jadi - 676 00:32:33,070 --> 00:32:36,260 dan ini adalah pendek ini juga, jika maklumat ini seolah-olah datang yang 677 00:32:36,260 --> 00:32:36,700 sedikit cepat. 678 00:32:36,700 --> 00:32:39,870 Tetapi pendek pada penyusun perbincangan tentang ini juga. 679 00:32:39,870 --> 00:32:43,290 Apabila anda kapal perpustakaan, jika anda kapal yang. h, Fail pengepala, orang-orang 680 00:32:43,290 --> 00:32:46,290 prototaip fungsi, dan 1 dan 0 ini, itu sahaja yang anda perlukan untuk memberi. 681 00:32:46,290 --> 00:32:50,640 Anda tidak perlu untuk memberi bagaimana fungsi berfungsi,. c fail. 682 00:32:50,640 --> 00:32:56,360 Kerana titik pengambilan, atau menunjukkan API, titik di SPL ini, 683 00:32:56,360 --> 00:32:59,650 perpustakaan mudah alih Stanford, ia untuk anda bimbang tentang bagaimana baru 684 00:32:59,650 --> 00:33:04,220 GRect kerja-kerja, atau bagaimana bergerak kerja-kerja, atau bagaimana menambah kerja-kerja. 685 00:33:04,220 --> 00:33:06,520 Semua yang anda perlu tahu ialah bahawa add adalah fungsi yang anda boleh 686 00:33:06,520 --> 00:33:08,880 digunakan, dan ia ini. 687 00:33:08,880 --> 00:33:12,760 Jadi anda benar-benar tidak perlu tahu bagaimana ia ditulis dalam C. Anda hanya perlu 688 00:33:12,760 --> 00:33:15,460 tahu, berikut adalah fungsi, apa yang mereka lakukan, dan di sini adalah ini 1 dan 0 689 00:33:15,460 --> 00:33:18,870 apabila anda benar-benar mahu menggunakan mereka. 690 00:33:18,870 --> 00:33:19,530 >> Sejuk. 691 00:33:19,530 --> 00:33:26,980 Sebarang pertanyaan lanjut mengenai penyusun topik-topik yang lain di atas kapal? 692 00:33:26,980 --> 00:33:30,300 >> PELAJAR: Saya mempunyai persoalan melaksanakan fungsi rekursif. 693 00:33:30,300 --> 00:33:31,170 Satu soalan mengenai rekursi. 694 00:33:31,170 --> 00:33:33,030 Saya mempunyai perasaan yang akan datang. 695 00:33:33,030 --> 00:33:38,310 Jadi mari kita cepat melalui rekursi dengan tertentu 696 00:33:38,310 --> 00:33:40,690 Sebagai contoh, fungsi faktorial. 697 00:33:40,690 --> 00:33:44,920 Kerana ini adalah satu contoh yang sering datang ke atas 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 faktor. 701 00:33:56,410 --> 00:33:59,120 Dan apakah 4 faktorial bermakna? 702 00:33:59,120 --> 00:34:00,696 Apakah yang lakukan? 703 00:34:00,696 --> 00:34:02,235 Bagaimana anda mengira 4 faktorial? 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 satu lagi cara 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 faktor. 709 00:34:19,022 --> 00:34:22,080 Kerana 3 faktorial 3 kali 2 kali 1. 710 00:34:22,080 --> 00:34:27,580 Jadi 4 kali 3 faktorial 4 kali 3 kali 2 kali 1. 711 00:34:27,580 --> 00:34:32,679 Inilah sebabnya mengapa faktorial adalah besar calon untuk rekursi, kerana ia 712 00:34:32,679 --> 00:34:36,630 jelas bahawa ada sesuatu yang berlaku berulang-ulang pada 713 00:34:36,630 --> 00:34:39,820 bilangan yang lebih kecil perkara sehingga anda mencapai akhir. 714 00:34:39,820 --> 00:34:42,570 Apabila anda mencapai 1, 1 faktorial ialah 1. 715 00:34:42,570 --> 00:34:43,719 Anda tidak boleh pergi lebih jauh. 716 00:34:43,719 --> 00:34:47,219 0 faktorial juga ditakrifkan sebagai 1. 717 00:34:47,219 --> 00:34:50,679 Oleh itu, apabila anda dapat 1 atau 0, anda pada akhirnya, dan anda boleh 718 00:34:50,679 --> 00:34:53,219 mula pergi kembali. 719 00:34:53,219 --> 00:34:59,540 Jadi, jika kita mahu menulis rekursif yang fungsi untuk mengira Faktorial, 720 00:34:59,540 --> 00:35:02,170 kita akan menulis beberapa kod pseudo untuk itu sekarang. 721 00:35:02,170 --> 00:35:03,300 Sebelum kita menulis kod pseudo yang - 722 00:35:03,300 --> 00:35:05,660 Saya akan memberikan anda semua beberapa minit untuk menulis kod pseudo atau hanya berfikir 723 00:35:05,660 --> 00:35:09,600 mengenainya - terdapat dua perkara setiap fungsi rekursif memerlukan. 724 00:35:09,600 --> 00:35:12,530 Apakah kedua-dua perkara? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Ia mempunyai untuk memanggil sendiri. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Nuh? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Teruskan. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Ia mempunyai untuk memanggil sendiri. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Jadi rekursi fungsi memerlukan panggilan rekursif, yang 731 00:35:19,220 --> 00:35:20,220 panggilan kepada dirinya sendiri. 732 00:35:20,220 --> 00:35:20,770 Itulah satu. 733 00:35:20,770 --> 00:35:21,510 Dan apa yang perkara yang lain? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Kes asas. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: Kes asas. 736 00:35:23,780 --> 00:35:26,940 Kes asas adalah, di sini apabila kita berhenti. 737 00:35:26,940 --> 00:35:29,510 Jadi fungsi anda mendapat dipanggil. 738 00:35:29,510 --> 00:35:31,410 Kes asas diutamakan. 739 00:35:31,410 --> 00:35:33,710 Adakah anda ingin tahu jika anda pada akhir. 740 00:35:33,710 --> 00:35:37,110 Dan jika anda tidak berada di hujung, anda membuat panggilan rekursif anda. 741 00:35:37,110 --> 00:35:39,880 Dan anda melalui fungsi ini sekali lagi, menyemak kes asas anda lagi. 742 00:35:39,880 --> 00:35:42,575 Jika anda tidak akhirnya, anda membuat satu lagi panggilan rekursif, 743 00:35:42,575 --> 00:35:44,130 dan sebagainya, dan sebagainya. 744 00:35:44,130 --> 00:35:47,110 >> Itulah sebabnya fungsi rekursif sentiasa perlu kes-kes asas dan orang-orang 745 00:35:47,110 --> 00:35:48,210 panggilan rekursif. 746 00:35:48,210 --> 00:35:51,280 Jika anda tidak mempunyai panggilan rekursif, ia tidak akan menjadi fungsi rekursif. 747 00:35:51,280 --> 00:35:53,210 Jika anda tidak mempunyai kes asas, anda akan pergi selama-lamanya dan 748 00:35:53,210 --> 00:35:54,780 tidak akan ada pengakhiran. 749 00:35:54,780 --> 00:35:57,870 Dan kes asas yang sentiasa datang pertama, kerana anda akan sentiasa mahu untuk memeriksa 750 00:35:57,870 --> 00:36:00,420 jika anda berada di hujung yang pertama. 751 00:36:00,420 --> 00:36:04,770 Jadi sebelum kita melakukan kod pseudo, mengapa anda tidak mengambil satu minit untuk berfikir tentang 752 00:36:04,770 --> 00:36:09,360 bagaimana fungsi faktorial rekursi akan ditulis? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Juga, seperti yang banyak yang anda lakukan, penulisan ia keluar pada sehelai kertas adalah 755 00:36:26,010 --> 00:36:27,960 apa yang anda akan perlu lakukan pada kuiz esok. 756 00:36:27,960 --> 00:36:32,160 Amalan Jadi mungkin baik untuk membuat memastikan kod yang anda menulis 757 00:36:32,160 --> 00:36:34,420 dalam helaian kertas - 758 00:36:34,420 --> 00:36:35,160 atau anda boleh berbuat demikian. 759 00:36:35,160 --> 00:36:36,710 Anda tahu di mana koma bertitik adalah. 760 00:36:36,710 --> 00:36:37,660 Anda ingat sintaks. 761 00:36:37,660 --> 00:36:40,400 Kerana anda tidak sedang dapat mempunyai pengkompil memberitahu anda membuat kesilapan. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Selain itu, di sepanjang garis, esok, apabila anda pengekodan masalah, jika anda 764 00:37:07,240 --> 00:37:11,490 sedang bergegas untuk masa, atau jika anda sangat keliru dengan bagaimana anda sepatutnya 765 00:37:11,490 --> 00:37:16,030 menulis perkara yang tertentu dalam c, ia akan behoove anda untuk menulis kod pseudo- 766 00:37:16,030 --> 00:37:18,160 atau menulis komen dalam juga. 767 00:37:18,160 --> 00:37:21,940 Kerana ada kredit separa untuk banyak soalan kuiz ini. 768 00:37:21,940 --> 00:37:24,840 Jadi anda mungkin bergegas, atau anda mungkin hanya keliru. 769 00:37:24,840 --> 00:37:28,030 Penulisan dalam komen atau pseudo-kod sering cara yang anda 770 00:37:28,030 --> 00:37:29,360 boleh mendapatkan kredit separa. 771 00:37:29,360 --> 00:37:31,440 >> Jadi jangan meninggalkan sesuatu kosong di kuiz. 772 00:37:31,440 --> 00:37:33,490 Tidak ada hukuman bagi meletakkan sesuatu masuk 773 00:37:33,490 --> 00:37:37,650 Malah, meletakkan dalam pseudo-kod atau komen akan membantu murid kelas yang 774 00:37:37,650 --> 00:37:40,410 memikirkan jika anda benar-benar tahu apa yang anda bercakap tentang, dan mungkin anugerah 775 00:37:40,410 --> 00:37:42,030 anda beberapa kredit separa untuk itu. 776 00:37:42,030 --> 00:37:44,510 >> Juga bersama-sama orang-orang garisan, menulis dengan jelas. 777 00:37:44,510 --> 00:37:47,650 Jika kita tidak boleh benar-benar apa yang anda menulis, kita tidak akan memanggil anda 778 00:37:47,650 --> 00:37:49,900 pada tengah malam esok untuk angka apa yang anda menulis. 779 00:37:49,900 --> 00:37:51,520 Kami hanya akan mengambil kira mata. 780 00:37:51,520 --> 00:37:56,570 Tulis dengan jelas supaya kita boleh mendengar, atau sebaliknya, kita boleh membaca apa yang anda tulis. 781 00:37:56,570 --> 00:38:00,230 >> Dan jika ia berkata dua ayat, tidak menulis perenggan. 782 00:38:00,230 --> 00:38:02,280 Ikut arahan. 783 00:38:02,280 --> 00:38:03,500 Tulis dengan jelas. 784 00:38:03,500 --> 00:38:07,720 Dan menulis dalam orang komen atau kod pseudo untuk soalan-soalan yang boleh 785 00:38:07,720 --> 00:38:10,270 anugerah kredit separa. 786 00:38:10,270 --> 00:38:12,520 >> OK, mari kita pergi ke faktor. 787 00:38:12,520 --> 00:38:15,000 Oleh itu, kita mempunyai fungsi faktorial. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Jika saya untuk benar-benar menulis ini dalam C, apa yang saya perlu meletakkan 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 balasan, yang, pada ini kes, kami akan memberikan int. 793 00:38:30,060 --> 00:38:35,450 Dan kemudian di dalam pendakap kerinting, adalah apa yang berlaku di dalam pendakap kerinting untuk 794 00:38:35,450 --> 00:38:36,850 fungsi? 795 00:38:36,850 --> 00:38:37,950 >> PELAJAR: Jenis Hujah. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: hujah dananya. 797 00:38:39,150 --> 00:38:42,680 Jadi faktorial mungkin akan mengambil pertengkaran. 798 00:38:42,680 --> 00:38:44,500 Ia akan mungkin hanya mengambil satu hujah. 799 00:38:44,500 --> 00:38:49,450 Dan kita akan berkata ia akan mengambil integer dipanggil x. 800 00:38:49,450 --> 00:38:52,770 Dan sekali lagi, semasa menulis prototaip fungsi atau menulis fungsi 801 00:38:52,770 --> 00:38:57,110 dalam kod anda sebelum menentukan ia, anda menulis jenis data dan nama 802 00:38:57,110 --> 00:39:01,370 yang berubah-ubah bagi fungsi itu sahaja. 803 00:39:01,370 --> 00:39:06,350 Jadi, anda boleh lulus beberapa nombor ke dalam ini fungsi, ia akan dirujuk sebagai x 804 00:39:06,350 --> 00:39:07,340 dalaman. 805 00:39:07,340 --> 00:39:08,755 >> Kami mempunyai fungsi faktorial kami. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Kita perlu dua perkara, satu kes asas dan panggilan rekursif. 808 00:39:15,850 --> 00:39:20,900 Apakah kes asas untuk faktorial? 809 00:39:20,900 --> 00:39:24,850 Seseorang yang menulis ia keluar dan yang tidak mempunyai bercakap lagi, apa yang asas 810 00:39:24,850 --> 00:39:26,100 kes bagi faktorial? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> PELAJAR: Jika n adalah kurang daripada 2, kembali 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Jika n adalah kurang daripada 2, kembali 1. 814 00:39:33,520 --> 00:39:37,216 Saya suka bahawa, kerana itu menjaga 0 dan 1. 815 00:39:37,216 --> 00:39:45,290 Oleh itu, kita akan melakukan x <2, kembali 1. 816 00:39:45,290 --> 00:39:47,870 Jika kita mendapat lulus 0, jika kita mendapat lulus 1, fungsi ini akan 817 00:39:47,870 --> 00:39:49,790 segera kembali 1. 818 00:39:49,790 --> 00:39:54,020 Jika kita mendapat lulus beberapa nombor yang lebih besar daripada atau sama dengan 2, kita akan 819 00:39:54,020 --> 00:39:55,370 mempunyai panggilan rekursif kami. 820 00:39:55,370 --> 00:39:57,855 >> Dan sebagainya bagaimana yang akan bekerja? 821 00:39:57,855 --> 00:40:01,070 Bolehkah orang lain yang bekerja di ini yang tidak bercakap belum memberi saya 822 00:40:01,070 --> 00:40:07,380 panggilan rekursif untuk fungsi ini dalam kod pseudo? 823 00:40:07,380 --> 00:40:10,770 Jika kita mendapat lulus dalam beberapa x dan ia lebih daripada 2, apa yang 824 00:40:10,770 --> 00:40:13,370 kita mahu lakukan? 825 00:40:13,370 --> 00:40:17,930 Kami juga telah contoh bertulis mengenai sampingan yang mungkin memberi anda petunjuk. 826 00:40:17,930 --> 00:40:20,770 >> PELAJAR: Hubungi x kali faktorial x tolak 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Tepat betul. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Kita akan kembali x kali faktorial x tolak 1. 830 00:40:37,750 --> 00:40:41,810 Dan itu, walaupun saya telah menulis sehingga, pada dasarnya, apa yang anda berkata dalam bahasa Inggeris, 831 00:40:41,810 --> 00:40:44,580 fungsi faktorial ini akan mendapat dipanggil lagi. 832 00:40:44,580 --> 00:40:46,320 Ia akan melaksanakan pada x tolak 1. 833 00:40:46,320 --> 00:40:49,320 Ia akan kembali dengan beberapa integer, dan maka ia akan membiak kedua-dua 834 00:40:49,320 --> 00:40:52,050 bersama-sama, dan nilai yang akan menjadi kembali kepada apa sahaja yang dipanggil ini 835 00:40:52,050 --> 00:40:55,010 fungsi faktorial, yang mungkin menjadi satu lagi contoh 836 00:40:55,010 --> 00:40:58,420 fungsi faktorial ini. 837 00:40:58,420 --> 00:41:01,360 >> Jadi itulah satu contoh rekursif yang fungsi, yang sangat 838 00:41:01,360 --> 00:41:02,530 fungsi rekursif mudah. 839 00:41:02,530 --> 00:41:04,530 Tetapi kebanyakan mereka akan menjadi seperti ini. 840 00:41:04,530 --> 00:41:11,170 Jika anda ingin rekursif yang baik mencabar untuk kuiz, cuba pengekodan 841 00:41:11,170 --> 00:41:13,230 carian binari secara rekursif. 842 00:41:13,230 --> 00:41:18,950 Kerana jika anda lakukan carian binari untuk masalah menetapkan tiga, anda mungkin melakukannya 843 00:41:18,950 --> 00:41:21,730 iterative dalam gelung sementara. 844 00:41:21,730 --> 00:41:23,700 >> Tetapi ia juga boleh ditulis secara rekursif. 845 00:41:23,700 --> 00:41:26,310 Anda akan perlu untuk menulis sendiri fungsi berasingan yang mengambil beberapa 846 00:41:26,310 --> 00:41:29,020 hujah baris arahan yang berbeza - atau tidak hujah baris arahan, beberapa 847 00:41:29,020 --> 00:41:30,910 berbeza hujah hanya biasa. 848 00:41:30,910 --> 00:41:33,870 Tetapi anda boleh menulis carian binari secara rekursif juga. 849 00:41:33,870 --> 00:41:36,190 >> PELAJAR: Jadi anda boleh juga ditulis, bukannya x tolak 1, anda 850 00:41:36,190 --> 00:41:39,502 boleh juga telah menulis x tolak tolak, atau anda boleh mempunyai 851 00:41:39,502 --> 00:41:40,830 ditulis tolak tolak x. 852 00:41:40,830 --> 00:41:44,740 Bolehkah anda hanya menjelaskan benar-benar cepat mengapa mereka akan menjadi perkara yang berbeza, 853 00:41:44,740 --> 00:41:49,510 seperti apa perbezaan antara x tolak tolak dan tolak tolak x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Tidak, saya tidak akan pergi ke dalam itu. 855 00:41:51,320 --> 00:41:55,500 Tetapi saya akan bercakap kepada anda mengenainya selepas kelas. x tolak tolak, tolak tolak x 856 00:41:55,500 --> 00:41:57,780 SUSUTAN x oleh 1. 857 00:41:57,780 --> 00:41:59,090 Tetapi mereka melakukannya agak berbeza. 858 00:41:59,090 --> 00:42:00,340 Tetapi saya tidak mahu pergi ke dalam itu. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Soalan-soalan lain mengenai rekursi atau fungsi ini? 861 00:42:09,090 --> 00:42:10,140 Yang tidak benar-benar walaupun kod pseudo. 862 00:42:10,140 --> 00:42:15,060 Yang pada dasarnya kod di dalam C anda akan menulis untuk ini. 863 00:42:15,060 --> 00:42:19,393 >> OK, mana-mana soalan-soalan lain tentang topik di sini? 864 00:42:19,393 --> 00:42:19,864 Yeah. 865 00:42:19,864 --> 00:42:23,130 >> PELAJAR: Saya mempunyai buruk cepat titik terapung dan tepat. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Terapung titik dan tepat. 867 00:42:24,260 --> 00:42:26,920 Bolehkah seseorang benar-benar cepat memberi saya buruk daripada 868 00:42:26,920 --> 00:42:28,210 titik terapung dan tepat? 869 00:42:28,210 --> 00:42:30,420 Anda semua terpaksa melakukan ini untuk anda masalah ditetapkan, jadi anda semua 870 00:42:30,420 --> 00:42:31,700 biasa dengannya. 871 00:42:31,700 --> 00:42:35,090 Atau mungkin tidak semua. 872 00:42:35,090 --> 00:42:36,602 Sesiapa sahaja? 873 00:42:36,602 --> 00:42:39,530 Berikan saya tempat yang bermula. 874 00:42:39,530 --> 00:42:40,750 Terapung titik dan tepat. 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: Terdapat hanya beberapa terhingga nombor yang boleh diwakili 882 00:42:51,550 --> 00:42:57,930 kerana anda pada, dalam kita kes, sistem 32-bit. 883 00:42:57,930 --> 00:43:03,080 Jadi anda jenis perlu membuat beberapa nombor. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Jadi, itu betul-betul betul. 885 00:43:03,910 --> 00:43:08,110 Terdapat hanya sejumlah nombor yang boleh diwakili. 886 00:43:08,110 --> 00:43:11,770 Jika anda membiak dua nombor yang sangat besar, ia mungkin melimpah jumlah yang 887 00:43:11,770 --> 00:43:13,950 ruang anda perlu mewakili integer. 888 00:43:13,950 --> 00:43:17,930 Itulah sebabnya kadang-kadang kita menggunakan panjang panjang dan bukan int satu. 889 00:43:17,930 --> 00:43:19,210 Yang mempunyai lebih ruang. 890 00:43:19,210 --> 00:43:21,210 Yang boleh menampung bilangan yang lebih besar. 891 00:43:21,210 --> 00:43:24,310 >> Titik terapung ketepatan mempunyai kaitan dengan itu, tetapi juga mempunyai kaitan dengan 892 00:43:24,310 --> 00:43:29,300 Hakikat bahawa nombor perpuluhan tidak sentiasa diwakili. 893 00:43:29,300 --> 00:43:29,540 Maaf. 894 00:43:29,540 --> 00:43:31,280 Izinkan saya meletakkan kembali ini ke atas. 895 00:43:31,280 --> 00:43:36,610 Perpuluhan bilangan 1.0 tidak selalunya diwakili seperti yang anda jangkakan, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Ia kadang-kadang digambarkan sebagai 1,000000001 atau ,999999999. 898 00:43:50,360 --> 00:43:52,780 Ia mungkin juga 89 dibuang di sana. 899 00:43:52,780 --> 00:43:56,560 Jadi nombor-nombor perpuluhan tidak diwakili sama seperti yang anda lakukan 900 00:43:56,560 --> 00:43:58,430 mengharapkan mereka diwakili. 901 00:43:58,430 --> 00:44:00,010 >> Jadi dalam masalah set - 902 00:44:00,010 --> 00:44:00,860 adalah ia dua? - 903 00:44:00,860 --> 00:44:05,290 masalah menetapkan dua, di mana kita diuruskan nombor titik apung, apabila kita mahu 904 00:44:05,290 --> 00:44:08,690 mereka untuk mewakili apa yang kita mahu mereka untuk mewakili, bilangan 905 00:44:08,690 --> 00:44:12,860 daripada beberapa sen, atau bilangan sen, kita menggandakan mereka dengan 100. 906 00:44:12,860 --> 00:44:14,750 Kami bulat mereka. 907 00:44:14,750 --> 00:44:18,660 Dan kemudian kita terputus segala-galanya di belakang titik perpuluhan. 908 00:44:18,660 --> 00:44:22,020 Itu adalah untuk memastikan bahawa mereka akan sebenarnya sama betul-betul apa yang kita mahu 909 00:44:22,020 --> 00:44:22,410 mereka sama. 910 00:44:22,410 --> 00:44:26,870 >> Kerana apabila anda mengambil sesuatu yang yang terapung dan mengubahnya menjadi int, anda 911 00:44:26,870 --> 00:44:29,860 memotong semuanya ke kanan titik perpuluhan. 912 00:44:29,860 --> 00:44:33,900 Oleh kerana ada beberapa titik terapung ketakpersisan, 100.000 mungkin 913 00:44:33,900 --> 00:44:37,440 diwakili sebagai 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Dan jika anda hanya memotong segala-galanya kepada merta yang betul, anda akan 915 00:44:40,350 --> 00:44:41,600 mendapatkan nombor yang salah. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Yeah. 918 00:44:44,180 --> 00:44:45,290 >> PELAJAR: Saya mempunyai soalan mengenai pemutus. 919 00:44:45,290 --> 00:44:47,500 Apakah perintah ia berlaku dalam? 920 00:44:47,500 --> 00:44:54,480 Jika anda akan melakukan terapung, kurungan, 1 dibahagikan dengan 10, ia jangan 1 dibahagikan dengan 10, 921 00:44:54,480 --> 00:44:58,910 kemudian mendapatkan 0.1, kemudian ke dalam apungan? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Jika anda melakukan terapung 1 dibahagikan dengan 10 - 923 00:45:01,470 --> 00:45:02,550 >> PELAJAR: Ya, dan kemudian sama - 924 00:45:02,550 --> 00:45:04,240 dengan baik, ia akan biasanya mempunyai ia sama dalam - 925 00:45:04,240 --> 00:45:04,690 Yeah. 926 00:45:04,690 --> 00:45:06,760 Anda ingin ia apungan, bukan? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, jadi kita akan menggunakannya untuk Segue ke dalam memikirkan 928 00:45:12,790 --> 00:45:15,390 jawapan kepada soalan-soalan melalui pengkodan. 929 00:45:15,390 --> 00:45:18,180 Kerana anda mungkin akan mempunyai banyak soalan-soalan ini minit, dan cara yang baik 930 00:45:18,180 --> 00:45:19,100 untuk menyelesaikannya adalah melalui pengkodan. 931 00:45:19,100 --> 00:45:21,320 Jadi, kita akan kod hak ini sekarang, dan kemudian kita akan kembali dan 932 00:45:21,320 --> 00:45:24,020 kod soalan anda telah. 933 00:45:24,020 --> 00:45:24,950 >> Jadi baris pertama - 934 00:45:24,950 --> 00:45:29,390 Aku tidak bertulis itu - apa yang perkara pertama yang kami mahu lakukan apabila kita 935 00:45:29,390 --> 00:45:32,250 membuka fail baru dalam gedit? 936 00:45:32,250 --> 00:45:34,190 >> PELAJAR: Termasuk. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Termasuk apa? 938 00:45:35,920 --> 00:45:37,952 >> PELAJAR: 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 perlu kita termasuk? 941 00:45:42,590 --> 00:45:46,820 Kami hanya akan menyemak apa yang berlaku apabila anda membuang sesuatu kepada apungan. 942 00:45:46,820 --> 00:45:48,605 Tetapi apa yang kita perlu termasuk jika kita akan menulis program C? 943 00:45:48,605 --> 00:45:49,300 >> PELAJAR: 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 Kita sebenarnya tidak perlu, kerana ini program, cs50.h, walaupun ia 946 00:45:54,880 --> 00:45:55,920 sentiasa membantu untuk memasukkannya ke. 947 00:45:55,920 --> 00:45:58,260 Tetapi kita sentiasa perlu stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> PELAJAR: Apabila pengekodan dalam C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Apabila pengekodan di C. 950 00:46:15,770 --> 00:46:17,090 >> Jadi saya simpan sebagai ini. C fail. 951 00:46:17,090 --> 00:46:18,590 Saya mendapat beberapa sintaks penonjolan bagus. 952 00:46:18,590 --> 00:46:22,890 Saya menulis di dalam tidak sah utama. 953 00:46:22,890 --> 00:46:24,792 Apa yang tidak sah bermakna? 954 00:46:24,792 --> 00:46:26,740 >> PELAJAR: Tidak mengambil apa-apa hujah baris arahan. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: cara Void, dalam ini kes, utama tidak mengambil apa-apa 956 00:46:28,900 --> 00:46:29,700 hujah baris arahan. 957 00:46:29,700 --> 00:46:32,720 Dalam kes-kes lain, ia bermakna fungsi tersebut tidak mengambil hujah baris arahan. 958 00:46:32,720 --> 00:46:36,560 Atau majlis itu, jika saya menulis tidak sah utama (tidak sah), yang akan berkata ini utama 959 00:46:36,560 --> 00:46:38,460 tidak kembali apa-apa. 960 00:46:38,460 --> 00:46:39,960 Jadi tidak sah hanya bermakna apa-apa. 961 00:46:39,960 --> 00:46:42,510 Apa yang saya akan menulis jika saya mengambil hujah baris arahan? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> PELAJAR: int arka c string arka v 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc tali argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Yang tepat itu? 967 00:46:55,572 --> 00:46:58,720 >> PELAJAR: Ia char kurungan argv bintang. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Jadi, anda boleh menulis kurungan tali argv atau argv char bintang 969 00:47:01,730 --> 00:47:03,710 kurungan, tetapi anda perlu kurungan. 970 00:47:03,710 --> 00:47:06,290 Kerana argv adalah satu pameran tali, ingat. 971 00:47:06,290 --> 00:47:07,360 Ia bukan hanya satu rentetan. 972 00:47:07,360 --> 00:47:10,350 Jadi tali argv adalah, inilah satu tali dipanggil argv. 973 00:47:10,350 --> 00:47:13,630 Kurungan String argv adalah, di sini pelbagai tali. 974 00:47:13,630 --> 00:47:17,865 Jadi int kurungan argc tali 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 mahu simpan dalam integer? 977 00:47:23,050 --> 00:47:24,285 >> PELAJAR: Ya, integer. 978 00:47:24,285 --> 00:47:25,840 Atau dalam apungan. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: Dalam apungan? 980 00:47:26,710 --> 00:47:30,790 Seperti, apungan x sama 1 dibahagikan 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 saya mencetak apungan dalam 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 >> PELAJAR:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Apakah integer? 989 00:47:50,810 --> 00:47:52,110 d atau i. 990 00:47:52,110 --> 00:47:53,000 Apakah rentetan? 991 00:47:53,000 --> 00:47:54,240 >> PELAJAR: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 Bagaimana saya mendapat barisan baru? 994 00:47:57,550 --> 00:47:58,800 >> PELAJAR: garis sendeng terbalik n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Apa saya kembali jika berjalan utama dengan betul? 997 00:48:07,100 --> 00:48:08,360 >> PELAJAR: 0. 998 00:48:08,360 --> 00:48:09,430 Adakah saya perlu untuk menulis baris itu, walaupun? 999 00:48:09,430 --> 00:48:10,170 >> PELAJAR: No 1000 00:48:10,170 --> 00:48:11,513 OK, kita tidak akan menulisnya, kemudian. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Bolehkah semua orang membaca bahawa? 1003 00:48:17,190 --> 00:48:18,485 Ia kelihatan agak kecil. 1004 00:48:18,485 --> 00:48:20,160 Bolehkah semua orang melihat, atau jika Saya membuat ia lebih besar? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Saya berfikir untuk kamera, kami akan membuat ia agak besar, walaupun. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Jika saya ingin menjadikan ini . C memfailkan ke dalam laku, apa 1009 00:48:38,410 --> 00:48:39,260 saya menulis? 1010 00:48:39,260 --> 00:48:41,610 >> PELAJAR: Buat ujian. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Maaf? 1012 00:48:42,080 --> 00:48:42,790 >> PELAJAR: Buat ujian. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Buat ujian. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Kami bercakap mengenai garis ini lebih awal. 1016 00:48:48,410 --> 00:48:49,140 Dentang. 1017 00:48:49,140 --> 00:48:51,270 Apa yang dilafaz? 1018 00:48:51,270 --> 00:48:52,200 Nama pengkompil. 1019 00:48:52,200 --> 00:48:53,920 Apa garis ini? 1020 00:48:53,920 --> 00:48:55,580 >> PELAJAR: Menetapkan ia untuk penggunaan GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Set ia untuk penggunaan GDB. 1022 00:48:59,230 --> 00:49:02,338 Keturunan ini, apa itu? 1023 00:49:02,338 --> 00:49:03,290 >> PELAJAR: Kod sumber. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Itulah fail sumber,. c fail. 1025 00:49:06,010 --> 00:49:08,150 Apa yang kedua-dua baris lakukan? 1026 00:49:08,150 --> 00:49:10,245 Atau kedua-dua tidak baris. 1027 00:49:10,245 --> 00:49:12,300 >> PELAJAR: Ia nama ia menguji. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Jadi dash o berkata, nama itu sesuatu yang berbeza. 1029 00:49:15,410 --> 00:49:16,790 Dan di sini anda memanggil ia ujian. 1030 00:49:16,790 --> 00:49:18,900 Jika saya tidak mempunyai bahawa dalam, apa yang ia akan menamakan ini? 1031 00:49:18,900 --> 00:49:20,260 >> PELAJAR: A.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: A.out. 1033 00:49:22,340 --> 00:49:25,366 Apakah ini lakukan? 1034 00:49:25,366 --> 00:49:27,670 >> PELAJAR: Pautan perpustakaan matematik. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Ia menghubungkan di perpustakaan matematik. 1036 00:49:29,550 --> 00:49:32,880 Kami tidak termasuk perpustakaan matematik, tetapi kerana itulah begitu biasa, mereka telah 1037 00:49:32,880 --> 00:49:35,780 make bertulis kepada sentiasa termasuk perpustakaan matematik. 1038 00:49:35,780 --> 00:49:39,050 Dan begitu juga, ini termasuk perpustakaan CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, jadi jika kita senarai, kami kini mempunyai boleh laku dipanggil ujian. 1040 00:49:43,010 --> 00:49:45,150 Untuk melaksanakannya, saya menulis ujian. 1041 00:49:45,150 --> 00:49:48,330 Saya melihat bahawa titik terapung saya, seperti yang dijangkakan, sama dengan 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Adakah ini - 1044 00:49:51,590 --> 00:49:52,060 jadi - 1045 00:49:52,060 --> 00:49:55,210 >> PELAJAR: Kemudian jika anda meletakkan terapung sekarang, seperti anda membuang sebagai apungan - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Cast 1 kepada apungan? 1047 00:49:56,870 --> 00:49:59,180 >> PELAJAR: Tidak, membuang perkara yang penuh - 1048 00:49:59,180 --> 00:49:59,500 yeah. 1049 00:49:59,500 --> 00:50:02,460 Jika anda hanya melakukan itu, akan yang menjadikannya 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, jadi benar-benar cepat, 1 dibahagikan dengan 10, mereka adalah 1051 00:50:07,170 --> 00:50:08,690 integer yang dibahagikan. 1052 00:50:08,690 --> 00:50:13,580 Oleh itu, apabila anda membahagikan integer, mereka 0, dan anda menyimpan bahawa 0 dalam 1053 00:50:13,580 --> 00:50:17,170 terapung, kerana tanda palang adalah hanya bahagian integer. 1054 00:50:17,170 --> 00:50:19,180 Jadi sekarang kita membelok sesuatu ke dalam apungan. 1055 00:50:19,180 --> 00:50:21,650 >> Mari kita lihat apa yang berlaku. 1056 00:50:21,650 --> 00:50:22,900 Kami akan membuat ujian. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Jadi sekarang kita melihat bahawa palang yang tidak bahagian integer, ia terapung 1059 00:50:31,090 --> 00:50:32,640 bahagian mata. 1060 00:50:32,640 --> 00:50:35,700 Kerana salah satu hujah-hujah telah dibuang kepada apungan. 1061 00:50:35,700 --> 00:50:38,380 Jadi sekarang ia telah berkata, merawat ini bahagian seperti kita berurusan dengan 1062 00:50:38,380 --> 00:50:40,140 titik terapung, bukan dengan integer. 1063 00:50:40,140 --> 00:50:42,760 Dan jadi kita mendapat jawapan yang kita harapkan. 1064 00:50:42,760 --> 00:50:44,620 >> Mari kita lihat apa yang berlaku - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Jika saya mahu mencetak lebih perpuluhan tempat, bagaimana saya boleh melakukannya? 1067 00:50:51,646 --> 00:50:55,550 >> PELAJAR: Point f dot, atau kerana ramai tempat perpuluhan yang anda mahu. 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 perpuluhan. 1070 00:51:04,440 --> 00:51:06,610 Dan kita lihat sekarang kami mendapat beberapa barangan pelik. 1071 00:51:06,610 --> 00:51:09,650 Dan yang kembali kepada soalan anda mengenai terapung titik ketakpersisan. 1072 00:51:09,650 --> 00:51:10,950 Ada barangan pelik disimpan di sini. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, adakah itu menjawab soalan anda? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Apa lagi yang anda mahu kod dengan cepat? 1077 00:51:20,200 --> 00:51:25,470 >> PELAJAR: Saya hanya mahu melihat sama ada atau tidak, jika anda dibebaskan beberapa penunjuk, 1078 00:51:25,470 --> 00:51:30,410 sama ada penunjuk yang masih telah disimpan di dalam ia alamat apa yang ia telah 1079 00:51:30,410 --> 00:51:32,170 menunjuk ke sebelum ini. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, jadi mari kita melakukannya. 1081 00:51:34,100 --> 00:51:38,030 Ptr bintang Char, ini mewujudkan pembolehubah dipanggil ptr jenis char bintang. 1082 00:51:38,030 --> 00:51:39,280 Bagaimana untuk menulis malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> Alden: Hanya malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Tetapi ia telah menjadi saiz, dan dalam kes ini, saya rasa boleh 1087 00:51:51,040 --> 00:51:52,465 akan menunjuk ke char. 1088 00:51:52,465 --> 00:51:54,450 Jadi ia akan menjadi char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, jadi lebih secara umum, dalam - 1090 00:51:57,520 --> 00:51:58,770 mari kita mengedit. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Di dalam malloc, anda mahu bilangan daripada bait pada timbunan itu. 1093 00:52:09,260 --> 00:52:12,320 Secara umumnya, apa yang kita lihat bahawa kita lakukan adalah kita akan malloc 1094 00:52:12,320 --> 00:52:14,940 tali, sebagai contoh, atau tatasusunan integer. 1095 00:52:14,940 --> 00:52:21,600 Jadi, jika kita mahu 10 integer, atau 10 aksara, 10 akan memberikan kami 10. 1096 00:52:21,600 --> 00:52:24,370 Dan kemudian saiz aksara akan memberikan kami saiz yang daripada aksara, yang pada 1097 00:52:24,370 --> 00:52:25,120 hal ini adalah 1 bait. 1098 00:52:25,120 --> 00:52:26,250 Kami mendapat 10 bait. 1099 00:52:26,250 --> 00:52:28,540 Jika kita menulis saiz int, yang akan memberi kita 40 bait. 1100 00:52:28,540 --> 00:52:31,520 >> Jadi lebih umum, di dalam malloc adalah bilangan bait yang anda mahu. 1101 00:52:31,520 --> 00:52:34,620 Dalam kes ini, kami mendapat 1 bait. 1102 00:52:34,620 --> 00:52:36,900 Yang seolah-olah seperti penggunaan pelik daripada malloc, tetapi untuk kita 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 >> Kami akan memanggil percuma. 1106 00:52:43,420 --> 00:52:47,040 Kami membuangnya dan kami menggunakan ptr lagi. 1107 00:52:47,040 --> 00:52:48,750 Dan apa yang anda mahu untuk memeriksa? 1108 00:52:48,750 --> 00:52:50,550 >> PELAJAR: Saya hanya mahu untuk memeriksa sama ada 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, sama ada ia menunjuk kepada apa-apa? 1111 00:52:53,050 --> 00:52:57,740 >> PELAJAR: Ya, betul-betul, sama ada ia masih mempunyai alamat ingatan. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Jadi anda mahu untuk memeriksa nilai ptr? 1113 00:53:02,220 --> 00:53:03,470 >> PELAJAR: Ya, betul-betul. 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 menyemak nilai 1116 00:53:10,160 --> 00:53:11,880 titik - apa yang, Jordan berkata, nilai? 1117 00:53:11,880 --> 00:53:13,720 Atau apa yang disimpan di dalam ptr? 1118 00:53:13,720 --> 00:53:14,620 >> PELAJAR: Satu alamat ingatan. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: Satu alamat ingatan. 1120 00:53:16,330 --> 00:53:20,520 Jadi, jika saya menulis hanya ini, ia akan memberi saya nilai ptr. 1121 00:53:20,520 --> 00:53:22,800 Dan bagaimana saya mencetak alamat memori? 1122 00:53:22,800 --> 00:53:26,470 Apakah rentetan format untuk alamat ingatan? 1123 00:53:26,470 --> 00:53:27,430 >> PELAJAR:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% p. 1125 00:53:28,050 --> 00:53:29,500 % S adalah rentetan. 1126 00:53:29,500 --> 00:53:30,750 % P untuk penunjuk. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Yang tepat itu? 1129 00:53:43,540 --> 00:53:44,790 Yang betul. 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 ia masih mempunyai sesuatu di dalamnya. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Ini mungkin yang lebih soalan yang menarik. 1135 00:53:57,645 --> 00:53:59,198 Apakah garis yang lakukan? 1136 00:53:59,198 --> 00:54:00,830 >> PELAJAR: dosa Seg. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Apa? 1138 00:54:01,310 --> 00:54:02,678 >> PELAJAR: Saya rasa ia seg kesalahan. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> PELAJAR: Saya rasa ia akan seg bersalah. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Jadi baris ini daripada ptr kod, bintang, apa yang 1142 00:54:08,265 --> 00:54:10,152 adakah bintang bermakna? 1143 00:54:10,152 --> 00:54:11,240 >> PELAJAR: Kandungan. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Yeah. 1145 00:54:11,560 --> 00:54:13,910 Pergi untuk mendapatkan kandungan. 1146 00:54:13,910 --> 00:54:16,830 Jadi ini akan pergi kepada memori yang menangani disana dan memberikan saya itu. 1147 00:54:16,830 --> 00:54:21,030 Saya menggunakan% c betul di sini kerana terdapat adalah watak-watak yang disimpan di sana. 1148 00:54:21,030 --> 00:54:23,390 Jadi, kita akan pergi ke alamat kami hanya melihat - atau ia mungkin akan menjadi 1149 00:54:23,390 --> 00:54:25,190 sedikit ini berbeza kali kita menjalankan program. 1150 00:54:25,190 --> 00:54:28,010 Tetapi kita akan pergi ke alamat yang yang kita tahu masih wujud 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 ia tidak seg bersalah. 1154 00:54:37,110 --> 00:54:38,970 Ia hanya tidak memberikan kita apa-apa. 1155 00:54:38,970 --> 00:54:43,350 Ia mungkin sebenarnya memberikan kita sesuatu, kita tidak dapat melihatnya. 1156 00:54:43,350 --> 00:54:45,110 Dan yang kembali kepada idea ini - 1157 00:54:45,110 --> 00:54:47,270 dan kami tidak akan mendapat terlalu banyak ke dalam ini, kerana itulah di luar 1158 00:54:47,270 --> 00:54:48,460 skop kursus ini. 1159 00:54:48,460 --> 00:54:51,260 Tetapi kita bercakap tentang di sini, jika kita telah melampaui batas array oleh 1160 00:54:51,260 --> 00:54:54,890 1, kita tidak mungkin akan mendapat dalam kesusahan. 1161 00:54:54,890 --> 00:54:58,550 >> Kadang-kadang, apabila anda hanya pergi sebanyak 1, anda melakukan sesuatu yang salah, dan anda 1162 00:54:58,550 --> 00:54:59,220 akan berada dalam masalah. 1163 00:54:59,220 --> 00:55:00,820 Tetapi anda tidak sentiasa mendapat dalam kesusahan. 1164 00:55:00,820 --> 00:55:05,170 Ia bergantung berapa banyak perkara yang tidak baik anda lakukan, anda akan mendapat dalam kesusahan. 1165 00:55:05,170 --> 00:55:07,790 Yang tidak bermakna, menjadi ceroboh dengan kod anda. 1166 00:55:07,790 --> 00:55:12,080 Tetapi ia adalah untuk mengatakan, program ini tidak akan sentiasa berhenti, walaupun anda pergi ke suatu tempat 1167 00:55:12,080 --> 00:55:14,130 anda tidak sepatutnya pergi. 1168 00:55:14,130 --> 00:55:18,170 >> Satu contoh yang baik iaitu, banyak orang dalam masalah mereka menetapkan 3, yang 1169 00:55:18,170 --> 00:55:22,350 telah 15, tidak menyemak batas lembaga. 1170 00:55:22,350 --> 00:55:25,860 Jadi anda melihat ke kiri, memandang kepada betul, memandang ke atas, memandang 1171 00:55:25,860 --> 00:55:27,000 ke bawah. 1172 00:55:27,000 --> 00:55:31,540 Tetapi anda tidak menyemak untuk melihat jika atas sebenarnya akan berada di papan. 1173 00:55:31,540 --> 00:55:35,220 Dan ramai orang yang melakukan itu dan bertukar yang dalam, program mereka bekerja 1174 00:55:35,220 --> 00:55:38,960 dengan sempurna, kerana di mana lembaga yang disimpan dalam memori, jika anda pergi satu 1175 00:55:38,960 --> 00:55:42,300 di atas atau diperiksa bahawa memori alamat, tidak ada apa-apa 1176 00:55:42,300 --> 00:55:44,870 terutamanya dahsyat tentang itu, supaya program anda tidak 1177 00:55:44,870 --> 00:55:45,970 akan menjerit pada anda. 1178 00:55:45,970 --> 00:55:48,870 >> Tetapi kita masih akan berlepas mata jika anda tidak menyemak itu, kerana anda 1179 00:55:48,870 --> 00:55:50,850 telah melakukan sesuatu yang anda tidak sepatutnya lakukan, dan anda boleh mempunyai 1180 00:55:50,850 --> 00:55:51,860 mendapat dalam kesusahan. 1181 00:55:51,860 --> 00:55:54,040 Kemungkinan adalah, walaupun, anda mungkin tidak. 1182 00:55:54,040 --> 00:55:57,790 Jadi ini adalah untuk menunjukkan bahawa, ya, kita masih boleh pergi kepadanya. 1183 00:55:57,790 --> 00:55:59,010 Dan kami tidak mendapat dalam masalah dalam kes ini. 1184 00:55:59,010 --> 00:56:04,000 Jika kita cuba untuk berbuat membaca 100 aksara seterusnya, kita akan 1185 00:56:04,000 --> 00:56:06,000 mungkin mendapat dalam kesusahan. 1186 00:56:06,000 --> 00:56:09,400 Dan anda boleh membaca kod 100 seterusnya watak-watak jika anda mahu dengan melakukan beberapa 1187 00:56:09,400 --> 00:56:10,110 jenis untuk gelung. 1188 00:56:10,110 --> 00:56:10,850 Yeah. 1189 00:56:10,850 --> 00:56:16,250 >> PELAJAR: Oleh kerana kita telah diberikan bahawa ruang yang nilai sebenar, kita tidak akan 1190 00:56:16,250 --> 00:56:17,050 sebenarnya dapat melihat apa-apa. 1191 00:56:17,050 --> 00:56:21,740 Sekiranya kita cuba dengan menetapkan bahawa sama dengan suka c atau sesuatu? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Soalan Besar. 1193 00:56:22,640 --> 00:56:25,340 Bagaimana saya menetapkan nilai yang - 1194 00:56:25,340 --> 00:56:28,980 apa baris kod saya menulis di atas talian tujuh melakukan apa yang anda berkata? 1195 00:56:28,980 --> 00:56:34,040 >> PELAJAR: Bintang ptr sama tunggal quote c berakhir petikan tunggal. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Jadi yang yang meletakkan aksara, c, di lokasi itu, 1197 00:56:36,970 --> 00:56:40,200 kerana sekali lagi, bintang yang bermakna pergi ke sana. 1198 00:56:40,200 --> 00:56:43,320 Dan apabila digunakan di sebelah kiri pengendali tugasan, yang sama 1199 00:56:43,320 --> 00:56:47,270 menandatangani, kita tidak akan mendapat bahawa nilai yang begitu banyak seperti yang nilai itu. 1200 00:56:47,270 --> 00:56:48,520 Sekarang mari kita lihat apa yang berlaku. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Kami meletakkan sesuatu di sana dan ia adalah di sana. 1203 00:56:56,770 --> 00:56:58,000 Kami dipanggil percuma. 1204 00:56:58,000 --> 00:57:00,100 Beberapa perkara mungkin berlaku pada timbunan itu. 1205 00:57:00,100 --> 00:57:01,890 Jadi ia bukan di sana lagi. 1206 00:57:01,890 --> 00:57:07,440 Apapun, kita tidak mendapat dalam kesusahan untuk pergi ke sana. 1207 00:57:07,440 --> 00:57:10,260 >> Saya lakukan ini dalam kod untuk menggambarkan yang banyak ini 1208 00:57:10,260 --> 00:57:12,410 soalan-soalan yang anda ada, mereka benar-benar menarik 1209 00:57:12,410 --> 00:57:13,650 menjawab banyak masa. 1210 00:57:13,650 --> 00:57:15,260 Dan mereka soalan benar-benar baik. 1211 00:57:15,260 --> 00:57:19,010 Dan anda boleh memikirkan mereka keluar di anda sendiri sekiranya, sebagai contoh, 1212 00:57:19,010 --> 00:57:19,990 kita tidak di bahagian. 1213 00:57:19,990 --> 00:57:20,940 Yeah. 1214 00:57:20,940 --> 00:57:24,430 >> PELAJAR: Oleh kerana anda tidak menghantar penunjuk mana-mana, anda perlu 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 kepada soalan awal anda. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Adakah ia hanya satu pemboleh ubah tempatan? 1219 00:57:29,980 --> 00:57:32,280 Malloc sini bukanlah bahawa menarik. 1220 00:57:32,280 --> 00:57:35,260 Penggunaan malloc di sini tidak yang menarik kerana ia 1221 00:57:35,260 --> 00:57:36,500 hanya pembolehubah tempatan. 1222 00:57:36,500 --> 00:57:40,970 >> PELAJAR: Jadi boleh anda lakukan char ptr bintang sama hello? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Oh. 1224 00:57:41,400 --> 00:57:43,300 Jadi kita akan kini kembali kepada soalan awal anda. 1225 00:57:43,300 --> 00:57:46,885 Saya rasa anda tidak berpuas hati dengan jawapan 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 >> PELAJAR: Yeah. 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 yang anda mahu untuk mencetak? 1232 00:57:57,850 --> 00:58:00,026 Oleh itu, kita akan mencetak rentetan seperti itu? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> PELAJAR: Menarik. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Jadi ini mengatakan ini hujah mempunyai jenis watak. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Jadi ini harus bersifat. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> PELAJAR: Hanya mengambil yang pertama. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Jadi ini adalah apa yang saya katakan sebelum ini. 1242 00:58:28,610 --> 00:58:34,240 Seperti saya katakan, ia tidak menyimpan tali di dalam penunjuk berubah-ubah. 1243 00:58:34,240 --> 00:58:35,120 Ia menyimpan - 1244 00:58:35,120 --> 00:58:36,350 >> PELAJAR: Nilai pertama tali. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Alamat nilai pertama rentetan. 1246 00:58:40,810 --> 00:58:46,940 Jika kita untuk mencetak ini, kami mendapat nilai di dalam penunjuk. 1247 00:58:46,940 --> 00:58:51,005 Dan kita akan melihat ia adalah, sememangnya, alamat ingatan. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Adakah ini masuk akal? 1250 00:58:56,440 --> 00:58:56,940 Maaf. 1251 00:58:56,940 --> 00:58:58,996 Tunggu, adakah itu menjawab anda soalan, walaupun? 1252 00:58:58,996 --> 00:58:59,790 >> PELAJAR: Yeah. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Ini baris kod adalah mewujudkan rentetan dan yang lain 1254 00:59:05,830 --> 00:59:09,115 penunjuk berubah-ubah itu menunjuk kepada rentetan itu, array yang. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Yeah. 1257 00:59:14,980 --> 00:59:19,200 >> PELAJAR: Jadi, jika kita pergi satu memori menangani lanjut, akan kita h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Adakah ia telah disimpan sebagai rentetan? 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 adalah berharga untuk dilakukan. 1263 00:59:30,790 --> 00:59:33,780 Ini adalah titik aritmetik, yang anda semua lihat sebelum dan harus 1264 00:59:33,780 --> 00:59:35,550 agak selesa dengan. 1265 00:59:35,550 --> 00:59:36,905 Ini adalah serupa dengan menulis - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 jika kita menulis baris ini kod, kita telah melihat pelbagai notasi sebelum ini. 1268 00:59:46,350 --> 00:59:55,900 Ini akan memberikan kita kedua nilai dalam ini pelbagai, h. 1269 00:59:55,900 --> 01:00:05,010 >> Jika kita melakukan ini, ini juga harus memberi kita nilai kedua dalam array yang. 1270 01:00:05,010 --> 01:00:08,320 Kerana ia akan tidak kepada memori yang alamat perkara yang pertama, tetapi 1271 01:00:08,320 --> 01:00:10,530 alamat ingatan perkara yang lebih. 1272 01:00:10,530 --> 01:00:14,360 Dan kemudian dereferences pengendali bintang penunjuk itu. 1273 01:00:14,360 --> 01:00:16,940 Dan sekali lagi, mari kita lihat. 1274 01:00:16,940 --> 01:00:18,664 Kita mendapat h lagi. 1275 01:00:18,664 --> 01:00:20,980 >> PELAJAR: Apa sebenarnya tidak dereference bermakna? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Dereference adalah perkataan mewah untuk pergi ke. 1277 01:00:23,650 --> 01:00:26,390 Pergi ke itu dan mendapatkan apa yang ada adalah untuk dereference penunjuk. 1278 01:00:26,390 --> 01:00:28,240 Ia hanya satu perkataan mewah untuk itu. 1279 01:00:28,240 --> 01:00:29,986 >> PELAJAR: Jika kita mahu cetak keseluruhan tali tersebut, boleh kita 1280 01:00:29,986 --> 01:00:31,930 melakukan penunjuk Ampersand? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, kita akan berhenti seketika di sini. 1282 01:00:33,490 --> 01:00:35,480 Kami akan berakhir di sini. 1283 01:00:35,480 --> 01:00:41,760 Ampersand memberi anda alamat yang lokasi, jadi apabila anda Ampersand daripada 1284 01:00:41,760 --> 01:00:44,080 pembolehubah, ia memberi anda alamat di mana pembolehubah yang disimpan. 1285 01:00:44,080 --> 01:00:48,580 Penunjuk Ampersand akan memberi anda alamat ptr mana ptr adalah dalam ingatan. 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 boleh memikirkan ini perkara sendiri. 1288 01:00:52,640 --> 01:00:55,740 Tetapi sekali lagi, ini akan dijadikan bahan verging yang sedikit di luar apa yang anda perlu tahu untuk 1289 01:00:55,740 --> 01:00:58,000 skop jangka pertengahan ini - 1290 01:00:58,000 --> 01:00:59,070 atau kuiz ini, bukan. 1291 01:00:59,070 --> 01:01:00,270 Maaf. 1292 01:01:00,270 --> 01:01:03,770 >> Kami akan bergerak ke atas, kerana saya akan suka lakukan satu masalah pengekodan 1293 01:01:03,770 --> 01:01:05,100 sebelum masa terpulang. 1294 01:01:05,100 --> 01:01:09,340 Dan kita akan memberi kod kepada apa yang saya fikir adalah yang paling menarik ini 1295 01:01:09,340 --> 01:01:11,020 contoh, atoi. 1296 01:01:11,020 --> 01:01:14,520 Jadi ini adalah satu soalan mengenai kuiz dua tahun lalu. 1297 01:01:14,520 --> 01:01:17,810 Dan saya mempunyai ke atas pesawat di sini. 1298 01:01:17,810 --> 01:01:20,680 >> Orang ditanya kuiz - 1299 01:01:20,680 --> 01:01:23,640 mereka diberi lebih sedikit tesxt dalam soalan, tetapi saya dihapuskan 1300 01:01:23,640 --> 01:01:26,640 teks kerana ia adalah tidak perlu untuk tujuan kita sekarang. 1301 01:01:26,640 --> 01:01:29,180 Ia hanya beberapa latar belakang kepada apa atoi lakukan. 1302 01:01:29,180 --> 01:01:31,425 Tetapi anda semua tahu dan sangat biasa dengan atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Saya cadangkan anda kod ini di atas sekeping kertas. 1304 01:01:35,620 --> 01:01:39,310 Saya juga mencadangkan anda menggunakan strategi yang bahawa kami telah pergi ke atas 1305 01:01:39,310 --> 01:01:41,040 banyak dalam seksyen kami. 1306 01:01:41,040 --> 01:01:44,130 Pertama, pastikan anda memahami apa atoi ini lakukan. 1307 01:01:44,130 --> 01:01:47,580 Lukiskan gambar atau datang dengan beberapa imej mental dalam kepala anda. 1308 01:01:47,580 --> 01:01:51,120 Seterusnya, menulis kod pseudo untuk ini. 1309 01:01:51,120 --> 01:01:53,120 Kuiz, jika semua yang anda dapatkan adalah kod pseudo, sekurang-kurangnya anda 1310 01:01:53,120 --> 01:01:54,550 meletakkan sesuatu ke bawah. 1311 01:01:54,550 --> 01:02:00,070 Dan kemudian map kod pseudo yang ke C. Jika anda mempunyai cek di anda 1312 01:02:00,070 --> 01:02:03,760 kod pseudo, seperti memeriksa jika sesuatu adalah 1, yang dipetakan jika 1313 01:02:03,760 --> 01:02:05,750 keadaan dan sebagainya. 1314 01:02:05,750 --> 01:02:07,850 Dan akhirnya, kod program di C. 1315 01:02:07,850 --> 01:02:15,000 >> Oleh itu, pergilah kembali ke atoi dan mengambil masa lima minit kod ini di atas sekeping 1316 01:02:15,000 --> 01:02:19,480 kertas, yang mungkin kira-kira yang jumlah masa yang anda akan mengambil masa pada 1317 01:02:19,480 --> 01:02:21,260 kuiz untuk atoi kod. 1318 01:02:21,260 --> 01:02:27,060 Lima hingga 15 minit, lima kepada 12, lima hingga 10 minit, kira-kira jumlah 1319 01:02:27,060 --> 01:02:30,150 masa anda akan menghabiskan pada ini soalan dalam kuiz. 1320 01:02:30,150 --> 01:02:31,670 Jadi mengambil masa lima minit sekarang, sila. 1321 01:02:31,670 --> 01:02:35,957 Dan jika anda mempunyai sebarang soalan, 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 >> [PERBUALAN SAMPINGAN] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, jadi yang lima minit. 1326 01:08:37,580 --> 01:08:39,880 Itu adalah mungkin kira-kira jumlah masa anda akan menghabiskan pada bahawa pada kuiz, 1327 01:08:39,880 --> 01:08:42,120 mungkin akhir rendah pada masa itu. 1328 01:08:42,120 --> 01:08:44,010 Kami akan menggulung dalam sedikit. 1329 01:08:44,010 --> 01:08:45,740 Marilah kita memulakan pengekodan ini. 1330 01:08:45,740 --> 01:08:49,479 Dan jika kita tidak mendapat semua jalan melalui, jawapan untuk ini dan ini 1331 01:08:49,479 --> 01:08:54,189 soalan kuiz boleh didapati, sekali lagi, Musim gugur 2011 adalah apabila soalan ini 1332 01:08:54,189 --> 01:08:54,913 muncul di kuiz. 1333 01:08:54,913 --> 01:08:57,830 >> Dan ia bernilai lapan mata kuiz kemudian. 1334 01:08:57,830 --> 01:09:01,140 Lapan mata adalah di hujung yang tinggi jumlah yang mata sesuatu yang bernilai. 1335 01:09:01,140 --> 01:09:04,790 Kebanyakan soalan adalah dalam julat satu hingga enam mata. 1336 01:09:04,790 --> 01:09:08,500 Jadi ini adalah lebih mencabar soalan, pasti. 1337 01:09:08,500 --> 01:09:09,750 Bolehkah sesiapa mendapatkan saya bermula? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Secara amnya, apa yang kita akan mahu melakukan dengan ini 1340 01:09:15,380 --> 01:09:17,550 berfungsi atoi, secara logik? 1341 01:09:17,550 --> 01:09:19,569 Apa yang kita mahu lakukan? 1342 01:09:19,569 --> 01:09:22,279 Jadi, kita akan menulis beberapa kod pseudo. 1343 01:09:22,279 --> 01:09:24,090 >> PELAJAR: Tukar aksara kepada integer. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Tukar aksara kepada integer. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Jadi berapa banyak watak-watak yang kita akan perlu dilakukan? 1347 01:09:30,870 --> 01:09:32,295 >> PELAJAR: Kesemua mereka. 1348 01:09:32,295 --> 01:09:34,100 >> PELAJAR: Semua watak-watak dalam string. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Semua watak-watak dalam string. 1350 01:09:35,540 --> 01:09:42,180 Jadi, jika kita mahu pergi melalui setiap watak dalam tali, apakah perkara yang 1351 01:09:42,180 --> 01:09:44,560 dalam C yang kita lihat yang telah dibenarkan kita melalui setiap 1352 01:09:44,560 --> 01:09:45,939 watak dalam rentetan? 1353 01:09:45,939 --> 01:09:46,819 >> PELAJAR: A untuk gelung. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: A untuk gelung. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Oleh itu, kita akan melalui gelung setiap watak dalam s. 1357 01:09:55,330 --> 01:10:00,940 >> Maka apa yang kita akan mahu melakukan apabila kita sesuatu yang tertentu? 1358 01:10:00,940 --> 01:10:02,480 Katakanlah kita sudah mula meluluskan 90. 1359 01:10:02,480 --> 01:10:03,460 Kita mendapat 9. 1360 01:10:03,460 --> 01:10:04,240 Ia bersifat. 1361 01:10:04,240 --> 01:10:07,440 Apa yang kita mahu lakukan dengan bahawa watak 9? 1362 01:10:07,440 --> 01:10:10,082 >> PELAJAR: Tolakkan dari watak 0? 1363 01:10:10,082 --> 01:10:11,860 >> PELAJAR: Tambah 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Tolakkan ia dari watak 0? 1365 01:10:13,350 --> 01:10:13,800 >> PELAJAR: Yeah. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Mengapa anda mahu berbuat demikian? 1367 01:10:15,573 --> 01:10:16,560 >> PELAJAR: [didengar] 1368 01:10:16,560 --> 01:10:17,010 nilai. 1369 01:10:17,010 --> 01:10:18,380 Nilai int itu. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, jadi kita mengambil watak 9, tolak daripada 1371 01:10:21,580 --> 01:10:25,820 watak 0 untuk mendapatkan integer sebenar 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 watak yang 9 tolak 0 watak adalah 9? 1375 01:10:37,000 --> 01:10:39,222 Apa carta adakah anda melihat? 1376 01:10:39,222 --> 01:10:43,130 >> PELAJAR: Terdapat logik sembilan tempat-tempat di antara 9 dan 0. 1377 01:10:43,130 --> 01:10:44,620 Atau anda boleh melihat jadual ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: Jadual ASCII. 1379 01:10:45,120 --> 01:10:46,490 Tetapi ya, anda betul juga. 1380 01:10:46,490 --> 01:10:47,780 Oleh itu, kita tolak 0. 1381 01:10:47,780 --> 01:10:49,010 Jadi sekarang kita mempunyai integer 9. 1382 01:10:49,010 --> 01:10:49,970 Dan apa yang kita mahu lakukan dengan itu? 1383 01:10:49,970 --> 01:10:54,970 Jika kita mempunyai 90, ia integer yang pertama kita, apa yang kita mahu lakukan? 1384 01:10:54,970 --> 01:10:58,180 >> PELAJAR: Saya dimasukkan ke dalam integer sementara pelbagai, kemudian melakukan matematik kepadanya 1385 01:10:58,180 --> 01:11:02,088 kemudian untuk menjadikannya berakhir. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> PELAJAR: Anda boleh mula pada akhir array dan kemudian bergerak ke hadapan supaya 1388 01:11:06,990 --> 01:11:10,350 bahawa setiap kali anda bergerak ke hadapan, 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 Yang berbunyi seperti yang cukup idea menarik. 1391 01:11:12,250 --> 01:11:16,040 Kita boleh mula pada akhir pelbagai kami, dan kita boleh menggunakan strleng. 1392 01:11:16,040 --> 01:11:17,030 Kita boleh menggunakan strleng di sini. 1393 01:11:17,030 --> 01:11:18,870 Kami akan panjang tali kami. 1394 01:11:18,870 --> 01:11:20,100 Kami bermula pada akhir. 1395 01:11:20,100 --> 01:11:29,170 Dan + yang pertama, kita hanya mengambil yang integer, dan mungkin kita mewujudkan seperti 1396 01:11:29,170 --> 01:11:32,270 integer pembolehubah baru sehingga atas mana kita menyimpan segala-galanya. 1397 01:11:32,270 --> 01:11:37,340 Oleh itu, kita gelung melalui setiap char dalam s dari belakang ke depan, kita tolak 0, dan 1398 01:11:37,340 --> 01:11:42,790 maka kita menerimanya, dan bergantung kepada di mana ia adalah, kita kali ia 1399 01:11:42,790 --> 01:11:45,860 oleh kuasa 10. 1400 01:11:45,860 --> 01:11:50,644 Kerana yang pertama, apa yang kita membiak watak paling kanan oleh? 1401 01:11:50,644 --> 01:11:51,440 >> PELAJAR: 10 kepada 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 kepada 0. 1403 01:11:53,170 --> 01:11:56,010 Apa yang kita kali kedua watak paling kanan oleh? 1404 01:11:56,010 --> 01:11:57,450 >> PELAJAR: [didengar]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Apa? 1406 01:11:57,960 --> 01:11:59,150 >> PELAJAR: 10 kepada 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 kepada 1. 1408 01:12:00,420 --> 01:12:03,754 Watak ketiga paling kanan? 1409 01:12:03,754 --> 01:12:04,580 >> PELAJAR: 10 kepada 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 kepada 2. 1411 01:12:05,350 --> 01:12:07,200 >> PELAJAR: Maaf, saya tidak faham apa yang kami lakukan di sini. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, mari kita pergi ke belakang, maka. 1413 01:12:08,640 --> 01:12:12,500 Oleh itu, kita akan mendapat diluluskan pada rentetan. 1414 01:12:12,500 --> 01:12:14,470 Kerana kita menulis atoi. 1415 01:12:14,470 --> 01:12:15,260 Oleh itu, kita mendapat lulus dalam rentetan. 1416 01:12:15,260 --> 01:12:17,640 Katakanlah kita sudah mula berlalu dalam rentetan 90. 1417 01:12:17,640 --> 01:12:19,930 >> Perkara pertama yang kita akan lakukan ialah menyediakan pembolehubah integer baru yang kami 1418 01:12:19,930 --> 01:12:22,150 hanya akan mewujudkan sebagai integer baru kami. 1419 01:12:22,150 --> 01:12:24,630 Itulah apa yang kita akan untuk kembali pada akhir. 1420 01:12:24,630 --> 01:12:30,110 Kita perlu melalui setiap watak dalam tali kerana kita telah menentukan 1421 01:12:30,110 --> 01:12:34,430 bahawa kita perlu untuk menyentuh satu sama satu dan kemudian menambah kepada integer baru kami. 1422 01:12:34,430 --> 01:12:36,330 >> Tetapi kita tidak boleh hanya menambah ia sebagai nombor. 1423 01:12:36,330 --> 01:12:38,270 Kita tidak boleh hanya mengambil 9 dan menambah 9 untuk integer kami. 1424 01:12:38,270 --> 01:12:40,560 Ia bergantung kepada apa yang berlaku ia adalah dalam string. 1425 01:12:40,560 --> 01:12:42,960 Kami akan perlu melipatgandakan ia oleh kuasa 10. 1426 01:12:42,960 --> 01:12:45,580 Oleh kerana itu bagaimana 10 kerja-kerja asas. 1427 01:12:45,580 --> 01:12:49,050 >> Oleh itu, kita akan mendapat sebenar watak, atau integer sebenar 1428 01:12:49,050 --> 01:12:53,860 nombor, dengan menolak watak 0 dari watak 9 seperti yang kami lakukan dengan 1429 01:12:53,860 --> 01:12:57,560 menolak watak modal A daripada apa sahaja watak kita telah di salah satu 1430 01:12:57,560 --> 01:12:58,120 masalah itu. 1431 01:12:58,120 --> 01:13:04,190 Oleh itu, kita benar-benar akan mendapat nombor dari 0 ke 9 disimpan sebagai nombor nyata, dan kita akan 1432 01:13:04,190 --> 01:13:07,590 kalikan dengan kuasa 10 bergantung 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 dalam integer pembolehubah baru kami. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Jadi apa ini akan kelihatan seperti akan akan - kita akan menarik di sini. 1437 01:13:37,890 --> 01:13:40,086 Jika kita mendapat lulus dalam rentetan 90 - 1438 01:13:40,086 --> 01:13:41,336 >> PELAJAR: [didengar]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Tetapi atoi mengambil rentetan. 1441 01:13:45,540 --> 01:13:46,350 Jadi, kita akan melalui pegangan. 1442 01:13:46,350 --> 01:13:49,900 Kami akan mendapatkan diluluskan pada 90. 1443 01:13:49,900 --> 01:13:51,540 Kami pergi dari belakang ke hadapan. 1444 01:13:51,540 --> 01:13:53,920 Kami mengambil 0. 1445 01:13:53,920 --> 01:13:55,080 >> PELAJAR: Saya minta maaf. 1446 01:13:55,080 --> 01:13:55,880 Mungkin ini adalah bodoh. 1447 01:13:55,880 --> 01:13:59,440 Jika kita mendapat diluluskan pada tali, mengapa 90 apa yang kita 1448 01:13:59,440 --> 01:14:00,260 mendapat diluluskan pada? 1449 01:14:00,260 --> 01:14:03,160 Oleh kerana 90 adalah integer. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Kerana atoi mengambil tali dan bertukar ke dalam integer 1451 01:14:06,820 --> 01:14:08,320 perwakilan tali itu. 1452 01:14:08,320 --> 01:14:13,650 Tetapi tali 90 bukan integer 90 atau nombor 90. 1453 01:14:13,650 --> 01:14:17,920 Rentetan 90 adalah pelbagai dua, atau tiga watak, sebaliknya, 9 1454 01:14:17,920 --> 01:14:22,740 watak, 0, dan backslash 0 watak. 1455 01:14:22,740 --> 01:14:26,260 >> Dan kita menulis atoi kerana, Sebagai contoh, apabila anda mengambil arahan 1456 01:14:26,260 --> 01:14:30,230 hujah baris, dan ia disimpan di dalam argv, ia disimpan sebagai rentetan. 1457 01:14:30,230 --> 01:14:32,940 Tetapi jika anda mahu merawat ia sebagai nombor, anda perlu menukarkannya kepada 1458 01:14:32,940 --> 01:14:34,700 integer sebenar. 1459 01:14:34,700 --> 01:14:37,210 Yang kita lakukan salah satu set masalah kita. 1460 01:14:37,210 --> 01:14:38,800 Yang kita lakukan dalam jumlah yang set masalah kita. 1461 01:14:38,800 --> 01:14:41,690 Semua orang yang mengambil integer sebagai hujah baris arahan. 1462 01:14:41,690 --> 01:14:46,490 Jadi itulah sebabnya fungsi atoi kami mengambil rentetan. 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 tolak watak 0 daripadanya, kerana watak-watak 0 1465 01:14:55,050 --> 01:14:58,810 ditolak oleh watak 0 memberikan anda nombor sebenar 0, mengikut 1466 01:14:58,810 --> 01:15:00,950 matematik ASCII yang kita lakukan. 1467 01:15:00,950 --> 01:15:04,870 >> Oleh kerana watak-watak yang digambarkan sebagai berbeza daripada sebenar mereka - 1468 01:15:04,870 --> 01:15:08,830 aksara, sebagai contoh, huruf kecil adalah 97. 1469 01:15:08,830 --> 01:15:10,260 Ia bukan - oops! 1470 01:15:10,260 --> 01:15:13,290 Ia bukan apa sahaja yang anda inginkan ia akan menjadi, 0, sebagai contoh. 1471 01:15:13,290 --> 01:15:16,200 Jadi, anda perlu tolak watak untuk mendapatkan 0. 1472 01:15:16,200 --> 01:15:18,950 >> Jadi, kita akan berbuat demikian di sini untuk mendapatkan jumlah sebenar. 1473 01:15:18,950 --> 01:15:22,560 Dan kemudian kita akan kalikan dengan kuasa 10 bergantung di mana ia 1474 01:15:22,560 --> 01:15:27,030 adalah dalam tali, dan kemudian mengambil yang dan menambah kepada pemegang tempat kita 1475 01:15:27,030 --> 01:15:32,520 berubah-ubah supaya kita boleh datang dengan integer baru akhir kami. 1476 01:15:32,520 --> 01:15:35,080 Adakah yang masuk akal untuk semua orang? 1477 01:15:35,080 --> 01:15:37,730 >> Oleh itu, kita tidak akan memberi kod ini sekarang, kerana kita 1478 01:15:37,730 --> 01:15:38,830 semakin kesuntukan masa. 1479 01:15:38,830 --> 01:15:40,860 Saya memohon maaf kerana masa itu. 1480 01:15:40,860 --> 01:15:44,620 Tetapi ini adalah apa, mudah-mudahan, anda akan dapat melakukan kuiz - pada 1481 01:15:44,620 --> 01:15:47,710 kurangnya, mendapatkan kod pseudo ini ditulis keluar. 1482 01:15:47,710 --> 01:15:50,840 >> Dan kemudian, jika kita menulis yang kod pseudo, sebenarnya, kita boleh melakukan ini 1483 01:15:50,840 --> 01:15:51,490 agak cepat. 1484 01:15:51,490 --> 01:15:55,230 Setiap baris komen kita kita menulis di sini diterjemahkan kepada kira-kira 1485 01:15:55,230 --> 01:15:56,970 satu baris kod C. 1486 01:15:56,970 --> 01:16:01,780 Mengisytiharkan pembolehubah baru, penulisan gelung, ada penolakan, ada 1487 01:16:01,780 --> 01:16:07,070 darab, dan beberapa tugasan. 1488 01:16:07,070 --> 01:16:09,020 Kita akan mungkin juga mahu menulis talian kembali. 1489 01:16:09,020 --> 01:16:12,040 Kami juga mungkin mahu meletakkan beberapa cek di sini. 1490 01:16:12,040 --> 01:16:12,655 Yeah. 1491 01:16:12,655 --> 01:16:15,720 >> PELAJAR: Jadi boleh kita merawat s sebagai rentetan sebenar? 1492 01:16:15,720 --> 01:16:18,730 Kerana saya tahu ia hanya alamat. 1493 01:16:18,730 --> 01:16:22,090 Seperti, bagaimana anda akan mendapat panjang tali yang dihulurkan melalui? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Jadi bagaimanakah panjang tali? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> PELAJAR: strlen, yeah. 1497 01:16:26,660 --> 01:16:30,550 Tetapi anda boleh meletakkan s sebagai hujah untuk itu? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Jadi strlen mengambil bintang char. 1499 01:16:34,620 --> 01:16:38,090 Dan ia mengikuti bahawa bintang char, dan ia menyimpan mengira sehingga ia sampai ke satu 1500 01:16:38,090 --> 01:16:41,865 garis sendeng terbalik 0. strlen sebenarnya salah satu program lain yang kami 1501 01:16:41,865 --> 01:16:42,850 telah pergi ke kod. 1502 01:16:42,850 --> 01:16:44,560 Itu satu lagi satu yang baik untuk kod. 1503 01:16:44,560 --> 01:16:47,270 Satu yang lebih mudah, kerana jika anda akan berfikir tentang itu 1504 01:16:47,270 --> 01:16:47,830 konsep - 1505 01:16:47,830 --> 01:16:51,620 Saya hanya berkata ia dengan kuat - strlen berikut penunjuk dan menyimpan berterusan dan 1506 01:16:51,620 --> 01:16:54,210 mengira dan mengesan sehingga anda mencapai garis sendeng terbalik 0. 1507 01:16:54,210 --> 01:16:56,530 >> PELAJAR: OK, faham. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Jadi terbaik nasib kuiz 0 esok. 1509 01:17:00,200 --> 01:17:03,170 Jika anda mempunyai sebarang soalan, saya akan berada di luar selepas ini. 1510 01:17:03,170 --> 01:17:05,610 Jangan ragu untuk e-mel saya. 1511 01:17:05,610 --> 01:17:08,480 Mendekati TF anda sendiri jika anda tidak dalam seksyen saya, atau mendapatkan saya 1512 01:17:08,480 --> 01:17:10,005 e-mel jika anda mahu ia. 1513 01:17:10,005 --> 01:17:13,140 >> Jika anda ingin dimarahi oleh dan hanya menghantar saya e-mel, e-mel freakout, saya akan 1514 01:17:13,140 --> 01:17:16,710 mengembalikan kamu, seperti, muka senyum, atau, seperti, satu jenaka atau sesuatu. 1515 01:17:16,710 --> 01:17:18,190 Jadi berasa bebas untuk berbuat demikian juga. 1516 01:17:18,190 --> 01:17:20,750 Nasib baik lagi, dan saya akan lihat anda semua minggu depan. 1517 01:17:20,750 --> 01:17:23,435