1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> SPEAKER 1: Hi semua orang. 3 00:00:05,680 --> 00:00:07,530 Kami akan bermula. 4 00:00:07,530 --> 00:00:09,330 Saya fikir orang ramai masih akan menjadi menapis dalam. 5 00:00:09,330 --> 00:00:12,840 Tetapi demi kepentingan masa, jadi kita boleh mendapatkan kalian keluar dari sini pada masa, 6 00:00:12,840 --> 00:00:14,110 kita akan bermula. 7 00:00:14,110 --> 00:00:18,780 Jadi mengalu-alukan kepada CS50 Kuiz 0 ulasan. 8 00:00:18,780 --> 00:00:23,020 Bagi anda yang tidak menyedari lagi, anda mempunyai soalan pada Rabu. 9 00:00:23,020 --> 00:00:25,700 Woo-hoo. 10 00:00:25,700 --> 00:00:29,780 >> Jika anda belum mula mempelajari belum atau tidak sedar bahawa ini wujud lagi, 11 00:00:29,780 --> 00:00:34,070 lalu kuiz dan semua maklumat mengenai kuiz anda berada di cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Ada beberapa perkara yang cukup baik di sana, lalu kuiz dari 10 lepas 13 00:00:38,090 --> 00:00:43,760 tahun serta maklumat mengenai kuiz ini dan topik 14 00:00:43,760 --> 00:00:46,250 yang akan dilindungi. 15 00:00:46,250 --> 00:00:48,980 Jadi mari kita bermula. 16 00:00:48,980 --> 00:00:54,240 >> Jadi, anda mungkin ingat guys, yang pertama hari kelas David mempunyai lampu mereka pada. 17 00:00:54,240 --> 00:00:59,650 Jadi pada asasnya, semua yang pergi di bawah hood daripada komputer ialah 18 00:00:59,650 --> 00:01:00,860 dilakukan dalam perduaan. 19 00:01:00,860 --> 00:01:04,080 Binary bermakna apa yang didengari seperti, 0 dan 1 ini. 20 00:01:04,080 --> 00:01:09,290 Ia mempunyai dua nilai-nilai yang boleh diwakili. 21 00:01:09,290 --> 00:01:14,675 >> Jadi, seperti pada hari pertama seksyen apabila David dihidupkan cahaya 22 00:01:14,675 --> 00:01:21,990 mentol untuk mewakili, atau 1, komputer kita memahami binari sebagai 0 dan 23 00:01:21,990 --> 00:01:24,110 1 ini, hidup atau mati. 24 00:01:24,110 --> 00:01:25,360 Asas Binary. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Setiap tempat diwakili dalam asas dua. 27 00:01:32,470 --> 00:01:36,260 Jadi anda menambah 2 kepada 0 kepada 1 hingga 2 semua jalan sehingga. 28 00:01:36,260 --> 00:01:41,970 >> Untuk mengira apa binari anda adalah untuk perpuluhan, anda hanya mengikuti persamaan ini 29 00:01:41,970 --> 00:01:42,840 perkara jenis. 30 00:01:42,840 --> 00:01:49,510 Jika anda mempunyai 1 dalam mana-mana tempat, anda kalikan dengan apa jua 31 00:01:49,510 --> 00:01:53,820 mendasarkan ia dalam, tambahkan ia, dan anda mendapat perpuluhan. 32 00:01:53,820 --> 00:01:57,930 Jadi, ini adalah bagaimana anda mengira 5 dalam perduaan. 33 00:01:57,930 --> 00:02:01,400 Sama seperti apa yang kami lakukan pada slaid lepas, ini adalah bagaimana anda akan 34 00:02:01,400 --> 00:02:02,650 mewakili 1 hingga 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Begitu juga, seperti anda boleh menambah dan tolak dalam perpuluhan atau asas 10, atau 37 00:02:09,660 --> 00:02:13,040 benar-benar apa-apa asas, di boleh menambah dan tolak dalam perduaan. 38 00:02:13,040 --> 00:02:18,400 Tepat sekali apa yang anda inginkan apabila anda menambah dua sehingga, jika ia bersamaan lebih besar 39 00:02:18,400 --> 00:02:24,220 daripada 1, anda membawa 1, menjadikannya sebagai 0, dan melakukan tambahan dengan cara itu, hanya 40 00:02:24,220 --> 00:02:29,910 seperti yang anda inginkan dengan tetap perpuluhan atau mana-mana asas lain. 41 00:02:29,910 --> 00:02:30,970 Sejuk. 42 00:02:30,970 --> 00:02:35,140 >> Jadi seperti yang saya katakan sebelum ini, semua yang berlaku di bawah hood daripada komputer kita 43 00:02:35,140 --> 00:02:37,560 dilakukan dalam 0 dan 1, atau binari. 44 00:02:37,560 --> 00:02:43,470 Jadi bagaimana kita menyatakan, sebagai contoh, huruf, atau nombor, atau aksara? 45 00:02:43,470 --> 00:02:45,560 Dan jawapan kepada yang ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII adalah pemetaan antara huruf yang biasanya kita lihat dalam 47 00:02:49,380 --> 00:02:53,360 Bahasa Inggeris seperti A, B, C, menekankan, sengkang, dan 48 00:02:53,360 --> 00:02:54,910 apa-apa seperti itu. 49 00:02:54,910 --> 00:02:57,260 Dan peta itu kepada nilai ASCII. 50 00:02:57,260 --> 00:03:03,080 Nilai ASCII hanyalah sebilangan yang boleh difahami oleh komputer anda. 51 00:03:03,080 --> 00:03:07,430 Dan seperti yang anda boleh lakukan penambahan dan tolak dengan nombor, anda boleh melakukannya 52 00:03:07,430 --> 00:03:10,890 mereka dengan nilai-nilai ASCII. 53 00:03:10,890 --> 00:03:14,050 >> Jadi dalam contoh ini, apa yang ini akan mencetak? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Yeah, jadi A ruang B ruang ruang C D. Di manakah tetikus saya pergi? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Perhatikan anda boleh menentukan int satu di 65. 58 00:03:43,380 --> 00:03:47,080 Dan apabila anda mencetak bahawa dengan menggunakan peratus C, ia akan mentafsir bahawa sebagai 59 00:03:47,080 --> 00:03:49,330 watak dan akan mencetak A. 60 00:03:49,330 --> 00:03:52,800 >> Begitu juga, anda boleh mengisytiharkan sebagai char a. 61 00:03:52,800 --> 00:03:56,860 Dan apabila anda mencetak dengan menggunakan peratus C, ia akan mentafsir bahawa sebagai 62 00:03:56,860 --> 00:04:05,240 peratus D. Dan seperti anda boleh menambah nombor, anda boleh menambah watak-watak yang 63 00:04:05,240 --> 00:04:06,878 Nilai ASCII, dalam kes ini. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Jadi penunjuk sedikit untuk semua orang. 66 00:04:16,130 --> 00:04:19,610 5, sebagai rentetan, tidak sebenarnya sama dengan 5. 67 00:04:19,610 --> 00:04:26,610 Jadi bagaimana kita boleh menukar rentetan 5 kepada integer 5? 68 00:04:26,610 --> 00:04:28,930 Apa-apa idea? 69 00:04:28,930 --> 00:04:31,630 Yeah. 70 00:04:31,630 --> 00:04:36,720 >> Jadi, jika kita ada 5 sebagai rentetan, kita boleh menolak 0. 71 00:04:36,720 --> 00:04:37,820 Dan yang akan memberi kita 5. 72 00:04:37,820 --> 00:04:41,670 Begitu juga, jika kita mempunyai 5 sebagai integer, menambah bahawa untuk tali 0. 73 00:04:41,670 --> 00:04:43,112 Dan yang memberikan kita tali 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Sejuk. 76 00:04:48,350 --> 00:04:52,940 >> Sekarang, ingat kembali untuk bersyarah di mana kita berbincang mengenai algoritma. 77 00:04:52,940 --> 00:04:57,260 Jadi bagaimana kita benar-benar mahu komputer untuk melakukan perkara-perkara yang menarik? 78 00:04:57,260 --> 00:05:00,460 Anda tahu, hanya menambah dan menolak nombor dan perkara-perkara percetakan keluar tidak 79 00:05:00,460 --> 00:05:01,730 yang menarik. 80 00:05:01,730 --> 00:05:04,620 Biasanya, kita mahu komputer kami untuk melaksanakan beberapa jenis algoritma. 81 00:05:04,620 --> 00:05:07,820 Sesuatu yang kompleks yang lebih kecil daripada hanya aritmetik mudah. 82 00:05:07,820 --> 00:05:11,930 >> Algoritma adalah hanya langkah demi langkah set arahan untuk bagaimana untuk melakukan 83 00:05:11,930 --> 00:05:14,640 yang task-- tertentu 84 00:05:14,640 --> 00:05:15,660 hanya suka resipi. 85 00:05:15,660 --> 00:05:19,990 Anda mungkin masih ingat hari pertama kelas di mana Daud telah kami mengira bilik 86 00:05:19,990 --> 00:05:22,550 orang dan berapa ramai orang yang berada di dalam bilik. 87 00:05:22,550 --> 00:05:24,480 Anda mungkin digunakan untuk pengiraan satu persatu. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 Dalam kes itu, algoritma masa linear. 90 00:05:28,010 --> 00:05:31,710 >> Tetapi Daud memperkenalkan algoritma untuk anda untuk mengira orang di dalam bilik 91 00:05:31,710 --> 00:05:37,340 di mana semua orang berdiri, anda mengatakan anda nombor untuk orang lain, menambah bahawa 92 00:05:37,340 --> 00:05:39,200 bilangan, dan satu orang duduk. 93 00:05:39,200 --> 00:05:40,410 Dan anda mengulangi itu. 94 00:05:40,410 --> 00:05:42,910 Itu satu jenis algoritma. 95 00:05:42,910 --> 00:05:47,520 Kita boleh menganalisis bagaimana cekap algoritma adalah berdasarkan kepada ia berjalan masa. 96 00:05:47,520 --> 00:05:49,680 Tetapi kita akan bercakap sedikit lebih lanjut mengenai yang kemudian. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Jadi semua algoritma juga boleh ditulis dalam kod pseudo. 99 00:05:57,090 --> 00:06:01,120 Pseudokod hanya bahasa Inggeris seperti sintaks yang digunakan untuk mewakili 100 00:06:01,120 --> 00:06:02,420 bahasa pengaturcaraan. 101 00:06:02,420 --> 00:06:06,070 Sebagai contoh, jika kita mahu bertanya pengguna meneka nombor kegemaran saya, kami 102 00:06:06,070 --> 00:06:08,390 mungkin mempunyai pseudokod seperti itu. 103 00:06:08,390 --> 00:06:09,850 >> Dapatkan pengguna meneka. 104 00:06:09,850 --> 00:06:13,570 Jika tekaan betul, beritahu mereka mereka betul, lagi memberitahu mereka 105 00:06:13,570 --> 00:06:15,560 mereka tidak betul. 106 00:06:15,560 --> 00:06:22,530 Dan pseudokod adalah satu cara mudah mewakili idea atau algoritma. 107 00:06:22,530 --> 00:06:26,910 Jadi sekarang kita mungkin mahu untuk benar-benar menulis ini dalam bahasa yang komputer 108 00:06:26,910 --> 00:06:27,980 mungkin pemahaman. 109 00:06:27,980 --> 00:06:35,660 Oleh itu, kita boleh menulis pseudokod dan mentafsir itu ke dalam kod sumber. 110 00:06:35,660 --> 00:06:41,320 >> Setakat ini, kod sumber mestilah mematuhi kepada sintaks tertentu 111 00:06:41,320 --> 00:06:42,490 bahasa pengaturcaraan. 112 00:06:42,490 --> 00:06:45,430 Dan setakat ini, dalam CS50, kita kena telah menggunakan kebanyakannya c. 113 00:06:45,430 --> 00:06:48,320 Jadi ini mungkin Kod sumber untuk c. 114 00:06:48,320 --> 00:06:51,440 Kemudian dalam perjalanan, anda malam datang terkena pengaturcaraan lain 115 00:06:51,440 --> 00:06:52,480 bahasa seperti PHP. 116 00:06:52,480 --> 00:06:57,540 Atau jika anda juga mengambil kelas-kelas lain, anda mungkin melakukan Java, Python, malah OCML. 117 00:06:57,540 --> 00:07:01,570 Tetapi dalam bahasa c program kami, ini adalah bagaimana kita boleh menulis kod sumber untuk 118 00:07:01,570 --> 00:07:04,760 algoritma pseudokod yang Saya hanya diterangkan sebelum ini. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Jadi bagaimana komputer anda sebenarnya faham itu? 121 00:07:11,430 --> 00:07:14,490 Seperti yang saya katakan sebelum ini, ia hanya benar-benar memahami sifar dan orang-orang. 122 00:07:14,490 --> 00:07:17,880 Jadi bagaimana ia dapat daripada sumber kod untuk sesuatu yang boleh 123 00:07:17,880 --> 00:07:18,960 difahami? 124 00:07:18,960 --> 00:07:22,920 Nah, kita mempunyai sesuatu dipanggil pengkompil. 125 00:07:22,920 --> 00:07:28,450 >> Jika anda ingat kembali di kebanyakan anda psets, anda mempunyai beberapa jenis program 126 00:07:28,450 --> 00:07:30,370 ditulis dalam dot c fail. 127 00:07:30,370 --> 00:07:32,550 Dan kemudian anda akan menaip make. 128 00:07:32,550 --> 00:07:35,970 Jadi apa yang membuat lakukan? 129 00:07:35,970 --> 00:07:39,970 >> Anda boleh menaip make untuk menyusun anda program kerana someone-- 130 00:07:39,970 --> 00:07:42,730 sesiapa yang menulis p set anda; mungkin David-- 131 00:07:42,730 --> 00:07:44,190 mencipta fail make. 132 00:07:44,190 --> 00:07:51,320 Dan yang memberitahu membuat tahu untuk menjalankan anda pengkompil, yang dipanggil dilafaz, wasiat yang 133 00:07:51,320 --> 00:07:55,560 kemudian menyusun kod sumber anda untuk membantah kod, yang sifar dan orang-orang 134 00:07:55,560 --> 00:07:57,720 bahawa komputer anda memahami. 135 00:07:57,720 --> 00:08:01,610 Tetapi lama kemudian, kita akan pergi lebih mendalam mengenai penyusun. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Jadi ingat Serangga 0, jika- ya, anda mempunyai soalan? 138 00:08:10,800 --> 00:08:11,620 >> PENONTON: [didengar]? 139 00:08:11,620 --> 00:08:12,490 >> SPEAKER 1: Ya. 140 00:08:12,490 --> 00:08:14,960 Saya fikir mereka benar-benar perlu berada dalam talian. 141 00:08:14,960 --> 00:08:15,120 Yeah. 142 00:08:15,120 --> 00:08:16,572 >> PENONTON: Adakah ia seperti [didengar]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> SPEAKER 1: Ia tidak. 145 00:08:20,830 --> 00:08:25,810 Yang berada di cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> PENONTON: Slash kuiz, slash 2013, mengurangkan 0, dan klik melalui 147 00:08:32,900 --> 00:08:35,956 kuiz 2013 dan kuiz 0, mengkaji semula seksyen slaid. 148 00:08:35,956 --> 00:08:40,380 >> SPEAKER 1: Yeah, jadi jika anda semua mahu tarik dan melihat ia pada anda 149 00:08:40,380 --> 00:08:42,740 komputer sendiri, itu denda juga. 150 00:08:42,740 --> 00:08:43,130 Mengatakan bahawa sekali lagi. 151 00:08:43,130 --> 00:08:44,546 >> PENONTON: [didengar]. 152 00:08:44,546 --> 00:08:48,780 >> SPEAKER 1: Yeah, [didengar] adalah pembolehubah dummy. 153 00:08:48,780 --> 00:08:49,644 Oh, ya? 154 00:08:49,644 --> 00:08:51,372 >> PENONTON: [didengar]? 155 00:08:51,372 --> 00:08:54,300 >> SPEAKER 1: Tidak, mogok tidak pada peperiksaan. 156 00:08:54,300 --> 00:08:55,950 Maaf, soalan beliau ialah, adalah mogok pada peperiksaan. 157 00:08:55,950 --> 00:08:59,530 Dan ia tidak. 158 00:08:59,530 --> 00:09:05,780 Jadi Serangga 0, anda semua harus mempunyai semua dilaksanakan dengan menggunakan sesuatu yang awal. 159 00:09:05,780 --> 00:09:13,100 Dan kita belajar beberapa asas pengaturcaraan blok bangunan menggunakan awal. 160 00:09:13,100 --> 00:09:15,590 >> Jadi mari kita lihat beberapa blok-blok bangunan 161 00:09:15,590 --> 00:09:18,170 yang membentuk program. 162 00:09:18,170 --> 00:09:20,570 Pertama adalah ungkapan Boolean. 163 00:09:20,570 --> 00:09:24,540 Ungkapan Boolean adalah orang-orang dan 0 atau apa-apa yang mempunyai 164 00:09:24,540 --> 00:09:25,700 dua nilai yang mungkin. 165 00:09:25,700 --> 00:09:30,320 Dalam kes ini, benar atau salah, hidup atau mati, dan ya atau tidak. 166 00:09:30,320 --> 00:09:35,390 Contoh yang mudah, sangat mudah, program yang menggunakan Boolean yang 167 00:09:35,390 --> 00:09:39,140 ungkapan di sini. 168 00:09:39,140 --> 00:09:43,220 >> Jadi dalam usaha untuk ungkapan Boolean untuk berguna, kita mempunyai operator Boolean. 169 00:09:43,220 --> 00:09:48,920 Ini adalah pengendali yang boleh digunakan untuk membandingkan nilai-nilai tertentu. 170 00:09:48,920 --> 00:09:52,820 Oleh itu, kita mempunyai dan atau tidak sama dengan kurang, daripada atau sama dengan, lebih besar daripada atau 171 00:09:52,820 --> 00:09:55,130 sama dengan, dan kurang daripada atau lebih daripada. 172 00:09:55,130 --> 00:09:59,060 Tetapi pengusaha ini tidak sangat berguna jika kita boleh menggabungkan mereka ke dalam 173 00:09:59,060 --> 00:10:00,320 syarat. 174 00:10:00,320 --> 00:10:04,370 >> Jadi anda semua mungkin ingat dari awal dan dari p anda menetapkan bahawa kita 175 00:10:04,370 --> 00:10:05,400 mempunyai syarat-syarat. 176 00:10:05,400 --> 00:10:09,710 Mereka adalah, pada dasarnya, seperti garpu dalam logik program anda yang 177 00:10:09,710 --> 00:10:12,670 melaksanakan bergantung kepada sama ada keadaan dipenuhi. 178 00:10:12,670 --> 00:10:18,150 Jadi salah satu syarat bahawa kita mempunyai digunakan banyak kali di dalam kursus ini adalah 179 00:10:18,150 --> 00:10:21,470 jika, lain, jika, dan syarat-syarat lain. 180 00:10:21,470 --> 00:10:24,060 >> Berikut adalah satu contoh bagaimana anda mungkin menggunakannya. 181 00:10:24,060 --> 00:10:28,430 Adakah sesiapa yang tahu perbezaan antara hanya menggunakan jika kenyataan semua 182 00:10:28,430 --> 00:10:32,530 jalan turun ayat jika, lain, jika, dan lain digabungkan? 183 00:10:32,530 --> 00:10:33,013 Ya? 184 00:10:33,013 --> 00:10:34,263 >> PENONTON: [didengar]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> SPEAKER 1: Tepat sekali. 187 00:10:42,160 --> 00:10:50,210 Jadi, jika saya terpaksa jika semua jalan ke bawah ini cara, walaupun keadaan ini pulangan 188 00:10:50,210 --> 00:10:52,800 benar, ia masih akan terus menguji dua akan datang. 189 00:10:52,800 --> 00:11:00,120 Manakala, dengan lain-jika, lagi satu pernyataan, jika seseorang kembali benar, 190 00:11:00,120 --> 00:11:02,640 yang lain tidak diuji. 191 00:11:02,640 --> 00:11:05,955 Apa-apa soalan tentang itu? 192 00:11:05,955 --> 00:11:06,890 Sejuk. 193 00:11:06,890 --> 00:11:12,240 >> Jadi anda menggunakan lain jika-of lagi satu penyata jika anda tahu bahawa ia hanya boleh 194 00:11:12,240 --> 00:11:14,470 menjadi salah satu daripada kes-kes ini. 195 00:11:14,470 --> 00:11:21,550 Oleh itu, kita tahu jika x ialah kurang daripada 0, ia pasti tidak akan menjadi 196 00:11:21,550 --> 00:11:22,890 lebih besar daripada 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Seterusnya, satu lagi blok bangunan yang kita belajar adalah gelung. 199 00:11:31,480 --> 00:11:33,310 Kami mempunyai tiga jenis gelung. 200 00:11:33,310 --> 00:11:35,830 Untuk gelung, gelung while, dan lakukan semasa gelung. 201 00:11:35,830 --> 00:11:38,730 Dan secara amnya, apabila anda duduk untuk menulis sesuatu, anda perlu membuat keputusan 202 00:11:38,730 --> 00:11:40,060 yang mana satu di tiga anda hendak gunakan. 203 00:11:40,060 --> 00:11:41,900 Jadi bagaimana kita membuat keputusan yang mana satu? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Kami biasanya menggunakan untuk gelung jika kita tahu berapa kali kita mahu iterate 206 00:11:48,790 --> 00:11:53,650 melalui sesuatu atau berapa kali kita mahu untuk melaksanakan tugas. 207 00:11:53,650 --> 00:11:58,830 Kami menggunakan gelung sementara jika kita memerlukan keadaan adalah benar untuk menjaga berjalan. 208 00:11:58,830 --> 00:12:03,730 Dan kita lakukan semasa menggunakan hampir sama dengan sementara, tetapi kami mahu kod untuk berjalan pada 209 00:12:03,730 --> 00:12:04,880 kurangnya satu masa. 210 00:12:04,880 --> 00:12:09,410 >> Begitu sementara, yang ada di tugasan yang akan sentiasa menjalankan sekurang-kurangnya satu masa. 211 00:12:09,410 --> 00:12:13,120 Manakala, dengan sementara, ia tidak boleh berjalan pada semua jika 212 00:12:13,120 --> 00:12:15,490 keadaan tidak berpuas hati. 213 00:12:15,490 --> 00:12:16,740 Sebarang pertanyaan dengan itu? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Jadi struktur untuk gelung. 216 00:12:22,860 --> 00:12:23,620 Kamu semua telah melihat ini. 217 00:12:23,620 --> 00:12:25,320 Anda memulakan ia. 218 00:12:25,320 --> 00:12:26,600 Anda mempunyai beberapa jenis keadaan. 219 00:12:26,600 --> 00:12:32,340 Jadi, sebagai contoh, kita mungkin memulakan sebagai i sama dengan 0. 220 00:12:32,340 --> 00:12:34,040 i adalah kurang daripada 10. 221 00:12:34,040 --> 00:12:35,442 Dan i ++. 222 00:12:35,442 --> 00:12:39,010 Salah satu yang sangat mudah yang kami lakukan. 223 00:12:39,010 --> 00:12:42,210 >> Untuk gelung sementara, juga, anda perlu untuk mempunyai beberapa jenis pengawalan, 224 00:12:42,210 --> 00:12:44,980 beberapa jenis keadaan, dan beberapa jenis kemas kini. 225 00:12:44,980 --> 00:12:51,990 Oleh itu, kita boleh melaksanakan kami untuk gelung juga sebagai gelung semasa menggunakan ini. 226 00:12:51,990 --> 00:12:56,000 Dan begitu juga dengan do manakala gelung, kita mungkin mempunyai beberapa pengawalan, 227 00:12:56,000 --> 00:12:58,640 melaksanakan sesuatu, mengemaskini, dan kemudian memeriksa keadaan. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Jadi sekarang fungsi. 230 00:13:05,140 --> 00:13:06,460 Kita meletakkan semua bersama-sama. 231 00:13:06,460 --> 00:13:10,140 Kita mungkin mahu menulis beberapa jenis fungsi. 232 00:13:10,140 --> 00:13:12,790 Fungsi biasa yang anda mungkin lihat sudah adalah utama. 233 00:13:12,790 --> 00:13:13,770 Utama adalah fungsi. 234 00:13:13,770 --> 00:13:16,160 Ia mempunyai jenis balasan, int. 235 00:13:16,160 --> 00:13:18,470 Ia mempunyai nama tugas, utama. 236 00:13:18,470 --> 00:13:20,810 Dan ia mempunyai hujah, dan argc argv. 237 00:13:20,810 --> 00:13:24,040 Jadi utama hanya fungsi. 238 00:13:24,040 --> 00:13:27,230 >> Fungsi-fungsi lain yang anda mungkin telah digunakan, printf printf-- adalah function-- yang 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 Tetapi ini berlaku kepada telah dilaksanakan untuk kami oleh 241 00:13:32,010 --> 00:13:33,270 beberapa jenis perpustakaan. 242 00:13:33,270 --> 00:13:37,400 Jika anda semua masih ingat termasuk perpustakaan CS50.h ini atau 243 00:13:37,400 --> 00:13:38,510 Saya standard / O perpustakaan. 244 00:13:38,510 --> 00:13:39,200 Ya, soalan? 245 00:13:39,200 --> 00:13:41,610 >> PENONTON: Apakah utama hanya wujud dalam c? 246 00:13:41,610 --> 00:13:44,740 Adakah ia hanya jenis [didengar]? 247 00:13:44,740 --> 00:13:47,370 >> SPEAKER 1: Soalan ini adalah jika utama wujud dalam c. 248 00:13:47,370 --> 00:13:51,460 Dan ya, semua fungsi mempunyai fungsi utama. 249 00:13:51,460 --> 00:13:55,290 Ia adalah jenis yang diperlukan untuk komputer tahu di mana untuk bermula 250 00:13:55,290 --> 00:13:55,993 berjalan kod. 251 00:13:55,993 --> 00:13:58,108 >> PENONTON: Oleh itu, anda tidak akan [didengar]? 252 00:13:58,108 --> 00:13:59,480 >> SPEAKER 1: Tidak 253 00:13:59,480 --> 00:14:00,760 Apa-apa soalan lain? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Sejuk. 256 00:14:04,770 --> 00:14:08,050 Jadi seperti yang anda boleh menggunakan fungsi yang ditulis untuk anda, anda juga boleh 257 00:14:08,050 --> 00:14:10,380 menulis fungsi anda sendiri. 258 00:14:10,380 --> 00:14:17,050 Ini adalah fungsi yang seseorang mungkin telah menulis untuk mengira jumlah 259 00:14:17,050 --> 00:14:18,395 sebuah q, sebagai contoh. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Ada jenis pulangan di sini, dalam kes ini int, kita q nama tugas dan kami 262 00:14:29,500 --> 00:14:31,360 senarai parameter. 263 00:14:31,360 --> 00:14:34,550 >> Dan ambil perhatian bahawa anda perlu menulis data jenis parameter yang anda mahu 264 00:14:34,550 --> 00:14:38,660 menggunakan atau lain fungsi yang tidak tahu apa jenis 265 00:14:38,660 --> 00:14:41,650 parameter yang perlu saya akan menerima. 266 00:14:41,650 --> 00:14:48,110 Jadi, dalam kes ini, kita mahu integer sebagai input kami. 267 00:14:48,110 --> 00:14:50,390 Jadi mengapa kita mungkin mahu menggunakan fungsi? 268 00:14:50,390 --> 00:14:52,800 >> Pertama sekali, besar untuk organisasi. 269 00:14:52,800 --> 00:14:56,350 Mereka membantu memecahkan kod anda ke lebih dianjurkan ketulan dan membuat 270 00:14:56,350 --> 00:14:57,960 lebih mudah untuk dibaca. 271 00:14:57,960 --> 00:14:59,760 Pemudahan. 272 00:14:59,760 --> 00:15:01,740 Ini adalah baik untuk reka bentuk. 273 00:15:01,740 --> 00:15:04,570 Apabila anda membaca sekeping kod dan fungsi utama adalah benar-benar, 274 00:15:04,570 --> 00:15:07,750 benar-benar panjang, ia mungkin lebih sukar untuk sebab kira-kira apa yang berlaku. 275 00:15:07,750 --> 00:15:11,710 Jadi jika anda memecahkan ia ke dalam fungsi, ia mungkin lebih mudah untuk dibaca. 276 00:15:11,710 --> 00:15:12,750 Dan menggunakan semula-keupayaan. 277 00:15:12,750 --> 00:15:16,940 Jika anda mempunyai sebahagian kod yang yang menjadi dipanggil atau menjalankan beberapa kali, 278 00:15:16,940 --> 00:15:20,690 bukannya menulis semula kod yang 10 kali dalam fungsi utama anda, anda mungkin 279 00:15:20,690 --> 00:15:21,440 mahu menggunakannya semula. 280 00:15:21,440 --> 00:15:25,740 Kemudian setiap kali anda perlu menggunakan yang sekeping kod, memanggil fungsi tersebut. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Jadi sekarang jika kita ingat kembali ke awal, kami juga bercakap tentang beberapa konsep, 283 00:15:35,380 --> 00:15:37,680 salah satu yang threading. 284 00:15:37,680 --> 00:15:41,120 Thread adalah konsep pelbagai urutan kod 285 00:15:41,120 --> 00:15:43,040 melaksanakan pada masa yang sama. 286 00:15:43,040 --> 00:15:47,490 Jadi berfikir kembali kepada satu hari di mana Daud kalian mengira off bilangan 287 00:15:47,490 --> 00:15:48,440 orang di dalam bilik. 288 00:15:48,440 --> 00:15:50,550 >> Pada asasnya, apa yang berlaku atas adalah semua kalian adalah 289 00:15:50,550 --> 00:15:52,370 berjalan benang berasingan. 290 00:15:52,370 --> 00:15:55,540 Dan orang-orang benang telah datang bersama-sama untuk mendapatkan beberapa jenis jawapan. 291 00:15:55,540 --> 00:15:58,890 Begitu juga, dalam Scratch, apabila anda mempunyai pelbagai sprites, anda mungkin 292 00:15:58,890 --> 00:16:01,070 mempunyai kucing dan anjing. 293 00:16:01,070 --> 00:16:08,770 Dan mereka akan pada masa yang sama berjalan skrip mereka sendiri. 294 00:16:08,770 --> 00:16:10,020 Itu adalah contoh threading. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> Dan konsep lain yang merupakan diperkenalkan pada awal adalah peristiwa-peristiwa. 297 00:16:18,000 --> 00:16:22,550 Dan peristiwa adalah apabila pelbagai bahagian kod anda berkomunikasi antara satu sama lain. 298 00:16:22,550 --> 00:16:26,840 Dalam Scratch, ini adalah apabila anda menggunakan siaran kawalan dan Apabila saya 299 00:16:26,840 --> 00:16:29,500 Terima blok. 300 00:16:29,500 --> 00:16:35,170 >> Dan juga, dalam Set Masalah 4, kita lihat sedikit peristiwa juga. 301 00:16:35,170 --> 00:16:38,250 Kalian mungkin telah menggunakan perpustakaan Gevent. 302 00:16:38,250 --> 00:16:42,450 Dan ada fungsi waitForClick di mana anda sedang menunggu 303 00:16:42,450 --> 00:16:44,300 bagi pengguna untuk klik. 304 00:16:44,300 --> 00:16:47,870 Dan klik, dalam kes ini, akan menjadi Sekiranya dan menunggu klik adalah anda 305 00:16:47,870 --> 00:16:49,120 acara pengendali. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> Dan juga, sepanjang berjalan psets anda dan bekerja di psets anda, anda 308 00:16:58,630 --> 00:17:01,920 mungkin bersentuhan dengan beberapa arahan ini. 309 00:17:01,920 --> 00:17:05,579 Ini adalah apa yang anda taip ke dalam anda tetingkap terminal atau apa sahaja tetingkap 310 00:17:05,579 --> 00:17:12,119 yang akan kelihatan pada g edit anda ke, dasarnya, navigasi komputer anda. 311 00:17:12,119 --> 00:17:19,440 >> Jadi, sebagai contoh, LS menyenaraikan kandungan direktori. 312 00:17:19,440 --> 00:17:22,510 Buat direktori mencipta folder baru. 313 00:17:22,510 --> 00:17:24,819 CD, direktori perubahan. 314 00:17:24,819 --> 00:17:28,400 RM, membuang, menghapuskan fail atau beberapa direktori. 315 00:17:28,400 --> 00:17:31,050 Dan kemudian keluarkan direktori membuang direktori. 316 00:17:31,050 --> 00:17:32,300 >> PENONTON: [didengar]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> SPEAKER 1: Ya, pasti. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Maaf, soalan itu jika anda akan mencadangkan meletakkan ini 321 00:17:46,040 --> 00:17:48,840 pada lembaran yang menipu. 322 00:17:48,840 --> 00:17:49,440 Ia boleh membantu. 323 00:17:49,440 --> 00:17:51,490 Jika anda mempunyai ruang, anda boleh meletakkan ia. 324 00:17:51,490 --> 00:17:56,170 Ia juga hanya umumnya cukup baik ingat kerana apabila anda menggunakannya 325 00:17:56,170 --> 00:17:59,060 anda mungkin mahu hanya mempunyai ia menghafal. 326 00:17:59,060 --> 00:18:02,750 Yang akan menjadikan kehidupan anda lebih mudah. 327 00:18:02,750 --> 00:18:04,000 Adakah saya menjawab soalan anda? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Jadi sekarang, kita bercakap sedikit secara ringkas mengenai perpustakaan. 330 00:18:14,290 --> 00:18:18,570 Tetapi dua yang utama yang kita telah menggunakan setakat ini dalam kursus ini adalah 331 00:18:18,570 --> 00:18:20,860 standard I / O dan cs50. 332 00:18:20,860 --> 00:18:25,410 Apakah jenis perkara-perkara yang termasuk dalam pustaka I / O piawai? 333 00:18:25,410 --> 00:18:28,410 >> Ya, setakat ini kami telah menggunakan printf. 334 00:18:28,410 --> 00:18:31,150 Dalam cs50, kami telah menggunakan GetInt dan GetString. 335 00:18:31,150 --> 00:18:37,200 Dan tali jenis data juga berlaku harus diisytiharkan di perpustakaan cs50 ini. 336 00:18:37,200 --> 00:18:40,250 Kami akan bercakap sedikit lebih mendalam mengenai bagaimana perpustakaan bekerja dan bagaimana mereka 337 00:18:40,250 --> 00:18:41,870 berinteraksi dengan seluruh kod anda. 338 00:18:41,870 --> 00:18:46,220 Tetapi mereka adalah dua yang utama yang kita telah datang dalam hubungan dengan setakat ini dalam 339 00:18:46,220 --> 00:18:48,430 kursus. 340 00:18:48,430 --> 00:18:50,050 >> Jenis. 341 00:18:50,050 --> 00:18:58,120 Ini adalah baik untuk ingat berapa banyak setiap jenis diwakili oleh atau bagaimana 342 00:18:58,120 --> 00:19:02,840 banyak bait setiap jenis menghendaki 343 00:19:02,840 --> 00:19:04,990 int, 4 bait; char, 1 bait. 344 00:19:04,990 --> 00:19:06,550 Float adalah 4 bait. 345 00:19:06,550 --> 00:19:07,782 Apakah dua? 346 00:19:07,782 --> 00:19:09,032 >> PENONTON: [didengar]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> SPEAKER 1: Yeah, jadi apungan tetapi dua kali ganda saiz. 349 00:19:16,240 --> 00:19:17,150 Bagaimana pula dengan yang lama? 350 00:19:17,150 --> 00:19:18,400 >> PENONTON: [didengar]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> SPEAKER 1: OK. 353 00:19:24,680 --> 00:19:25,410 Apa yang lama? 354 00:19:25,410 --> 00:19:26,660 >> PENONTON: [didengar]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> SPEAKER 1: Ya, dua kali ganda int satu. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Ya. 359 00:19:34,705 --> 00:19:36,100 >> PENONTON: [didengar]. 360 00:19:36,100 --> 00:19:38,030 >> SPEAKER 1: Long [didengar]. 361 00:19:38,030 --> 00:19:41,860 Dan kemudian yang panjang panjang adalah dua kali ganda. 362 00:19:41,860 --> 00:19:42,814 >> PENONTON: Tidak, tidak. 363 00:19:42,814 --> 00:19:47,107 A panjang hanya satu int. 364 00:19:47,107 --> 00:19:50,910 Ia bergantung kepada seni bina sebelum [didengar] 365 00:19:50,910 --> 00:19:52,922 dan int mempunyai saiz yang sama. 366 00:19:52,922 --> 00:19:54,172 [Didengar]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> SPEAKER 1: Jadi yang panjang dan int satu adalah sama. 369 00:20:00,920 --> 00:20:02,943 Dan kemudian yang panjang panjang dua kali ganda int itu. 370 00:20:02,943 --> 00:20:03,910 Sejuk. 371 00:20:03,910 --> 00:20:05,550 Kemudian, apakah jenis terakhir? 372 00:20:05,550 --> 00:20:06,510 >> PENONTON: pointer. 373 00:20:06,510 --> 00:20:10,350 >> SPEAKER 1: Yeah, jadi kami belajar sedikit tentang petunjuk. 374 00:20:10,350 --> 00:20:14,015 Dan tidak kira apa penunjuk adalah menunjuk supaya- ia boleh menjadi bintang char 375 00:20:14,015 --> 00:20:15,880 atau int star-- 376 00:20:15,880 --> 00:20:20,530 ia sentiasa 4 bait untuk penunjuk. 377 00:20:20,530 --> 00:20:21,633 Soalan-soalan tentang itu? 378 00:20:21,633 --> 00:20:22,116 Ya? 379 00:20:22,116 --> 00:20:24,531 >> PENONTON: [didengar]? 380 00:20:24,531 --> 00:20:29,530 >> SPEAKER 1: Jadi yang panjang dan int satu adalah yang sama dalam perkakas cs50 ini. 381 00:20:29,530 --> 00:20:32,302 >> PENONTON: Perkakas benar-benar ditukar ganti. 382 00:20:32,302 --> 00:20:33,510 >> SPEAKER 1: Yeah. 383 00:20:33,510 --> 00:20:36,610 Jadi kemudian lama lama dua int satu. 384 00:20:36,610 --> 00:20:39,250 >> PENONTON: Ini adalah sedikit 32? 385 00:20:39,250 --> 00:20:40,620 >> SPEAKER 1: 32 bit, yeah. 386 00:20:40,620 --> 00:20:43,572 >> PENONTON: Jadi [didengar]? 387 00:20:43,572 --> 00:20:46,790 >> SPEAKER 1: Ya, jika ia tidak tegas mengatakan, anda 388 00:20:46,790 --> 00:20:47,870 harus menganggap sedikit 32. 389 00:20:47,870 --> 00:20:50,040 >> PENONTON: Ia akan mengatakan sesuatu seperti menganggap satu 390 00:20:50,040 --> 00:20:51,498 seni bina seperti perkakas. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 64 bit, perkara itu sahaja perubahan adalah Roh meronta-ronta dan petunjuk. 393 00:21:01,710 --> 00:21:05,614 Mereka kedua-dua [didengar]. 394 00:21:05,614 --> 00:21:06,590 >> SPEAKER 1: Ya? 395 00:21:06,590 --> 00:21:07,566 >> PENONTON: Soalan. 396 00:21:07,566 --> 00:21:10,982 Maka pada salah satu kuiz amalan, ia meminta kira-kira int tidak bertanda. 397 00:21:10,982 --> 00:21:15,374 Jadi bagaimana yang akan ditentukan dari int [didengar]? 398 00:21:15,374 --> 00:21:18,140 >> SPEAKER 1: tidak ditandatangani dalam juga 4 bait. 399 00:21:18,140 --> 00:21:21,172 Tetapi apa yang berbeza tentang yang ditandatangani int dan int tidak bertanda? 400 00:21:21,172 --> 00:21:22,422 >> PENONTON: [didengar]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> SPEAKER 1: Betul. 403 00:21:25,630 --> 00:21:27,570 Satu boleh mewakili nilai-nilai negatif. 404 00:21:27,570 --> 00:21:28,580 Tetapi bagaimana ia berbuat demikian? 405 00:21:28,580 --> 00:21:30,536 >> PENONTON: [didengar]. 406 00:21:30,536 --> 00:21:36,370 >> SPEAKER 1: Ya, ia menjimatkan 1 bit untuk mewakili tanda. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Yang ditandatangani mempunyai satu bit yang mewakili tanda. 409 00:21:45,040 --> 00:21:48,886 Dan tidak ditandatangani hanya adalah semua positif. 410 00:21:48,886 --> 00:21:50,365 >> PENONTON: OK. 411 00:21:50,365 --> 00:21:54,230 Jadi, anda mengatakan bahawa dua adalah dua kali ganda saiz apungan? 412 00:21:54,230 --> 00:21:58,202 >> SPEAKER 1: Double adalah dua kali ganda saiz apungan, ya. 413 00:21:58,202 --> 00:22:01,639 >> PENONTON: Bagaimana penunjuk untuk yang panjang panjang [didengar]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> SPEAKER 1: Jadi persoalannya ialah bagaimana penunjuk untuk long-- yang panjang 416 00:22:10,870 --> 00:22:13,800 bagaimana adalah bahawa hanya empat bait apabila lama lama 8 bytes itu. 417 00:22:13,800 --> 00:22:17,310 Jadi ingat apa yang penunjuk, pada dasarnya, pada nilai yang sangat asas. 418 00:22:17,310 --> 00:22:19,046 >> PENONTON: [didengar]. 419 00:22:19,046 --> 00:22:22,670 >> SPEAKER 1: Yeah, jadi penunjuk hanya lokasi ingatan. 420 00:22:22,670 --> 00:22:28,040 Jadi tidak kira berapa banyak ruang pointer yang menunjuk ke. 421 00:22:28,040 --> 00:22:32,060 Ia hanya memerlukan 4 bytes untuk mengesan daripada lokasi ingatan. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Apa-apa soalan lain? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Sejuk. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Jadi perkara terakhir yang saya adalah output standard. 428 00:22:47,460 --> 00:22:51,020 Anda perlu menggunakan mereka kerap cukup yang anda boleh ingat. 429 00:22:51,020 --> 00:22:54,800 Tetapi ini adalah apabila kita menggunakan printf, sebagai contoh. 430 00:22:54,800 --> 00:22:59,260 Dan kita mempunyai ruang letak ini yang dipanggil Kod format. 431 00:22:59,260 --> 00:23:03,910 >> Jadi peratus c char, peratus untuk int i, dan kami juga boleh menggunakan peratus d. 432 00:23:03,910 --> 00:23:05,130 Ia adalah perkara yang sama. 433 00:23:05,130 --> 00:23:08,200 Tetapi, secara amnya, dalam CS50 kami cuba menggunakan peratus i. 434 00:23:08,200 --> 00:23:09,860 F peratus bagi apung. 435 00:23:09,860 --> 00:23:15,620 Ld peratus untuk tempoh yang lama dan panjang peratus kerana tali. 436 00:23:15,620 --> 00:23:18,550 >> Begitu juga, kami telah menggunakan beberapa ini urutan melarikan diri. 437 00:23:18,550 --> 00:23:22,431 Sebagai contoh, backslash n bagi talian baru. 438 00:23:22,431 --> 00:23:26,910 Ini hanya untuk apabila anda memformat kod anda untuk cetakan f. 439 00:23:26,910 --> 00:23:27,260 Ya? 440 00:23:27,260 --> 00:23:28,906 >> PENONTON: Apakah peratus untuk d? 441 00:23:28,906 --> 00:23:31,850 >> SPEAKER 1: Jadi soalan adalah apa yang peratus untuk d? 442 00:23:31,850 --> 00:23:33,270 Peratus d adalah untuk ints. 443 00:23:33,270 --> 00:23:37,392 Peratus dan peratus d i adalah sama. 444 00:23:37,392 --> 00:23:41,130 >> PENONTON: Apakah perbezaan di antara backslash n dan garis sendeng terbalik r? 445 00:23:41,130 --> 00:23:45,300 >> SPEAKER 1: Jadi persoalannya ialah apa yang Perbezaan di antara tindak balas n dan 446 00:23:45,300 --> 00:23:48,615 r tindak balas? 447 00:23:48,615 --> 00:23:50,906 Saya fikir garis sendeng terbalik r is-- 448 00:23:50,906 --> 00:23:54,340 >> PENONTON: Jadi garis sendeng terbalik r hanya membayangkan kembali ke permulaan baris 449 00:23:54,340 --> 00:23:56,670 tanpa benar-benar pergi ke baris baru. 450 00:23:56,670 --> 00:24:01,000 Jadi, jika anda mencetak r garis sendeng terbalik dan anda kembali ke permulaan baris 451 00:24:01,000 --> 00:24:04,005 maka anda mencetak barangan lanjut, anda menulis ganti yang barangan yang sudah di 452 00:24:04,005 --> 00:24:04,390 [Didengar]. 453 00:24:04,390 --> 00:24:06,725 Manakala, n sebenarnya pergi ke baru talian dan pergi ke [didengar]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> SPEAKER 1: Nah, apa-apa soalan lain? 456 00:24:13,915 --> 00:24:15,430 Baiklah. 457 00:24:15,430 --> 00:24:18,617 Saya akan serahkan luar untuk Dan yang akan berterusan. 458 00:24:18,617 --> 00:24:25,078 >> [Tepuk tangan] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: Semua righty. 461 00:25:09,720 --> 00:25:18,590 Jadi saya akan bercakap tentang satu lagi luas pelbagai idea daripada kelas yang 462 00:25:18,590 --> 00:25:23,220 secara kasar wakil minggu dua dan permulaan minggu bermula tiga off 463 00:25:23,220 --> 00:25:28,690 dengan pemutus, yang hanya satu cara merawat nilai jenis tertentu sebagai 464 00:25:28,690 --> 00:25:30,830 nilai dari jenis yang berbeza. 465 00:25:30,830 --> 00:25:34,110 Oleh itu, kita boleh melakukan ini dengan aksara untuk ints, terapung untuk ints, dan 466 00:25:34,110 --> 00:25:35,360 Roh meronta-ronta untuk menggandakan panjang. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Semua perkara-perkara ini boleh digunakan sebagai cara merawat beberapa nilai numerik 469 00:25:44,500 --> 00:25:48,370 tolak char kerana beberapa lain nilai nombor. 470 00:25:48,370 --> 00:25:54,480 Jadi terdapat beberapa isu dengan ini, daripada Sudah tentu, yang datang apabila anda membuang 471 00:25:54,480 --> 00:25:57,860 hal-hal seperti apungan untuk ints. 472 00:25:57,860 --> 00:26:00,500 Jadi ini adalah sedikit pelik. 473 00:26:00,500 --> 00:26:03,170 Kami mempunyai apungan iaitu 1.31. 474 00:26:03,170 --> 00:26:05,220 Kami kalikan dengan 10,000. 475 00:26:05,220 --> 00:26:08,380 Dan kemudian kita mencetak sebagai int satu. 476 00:26:08,380 --> 00:26:09,630 Apa output ini? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10,000 kali 1.31. 479 00:26:14,020 --> 00:26:18,761 Jadi 13,000, ialah meneka? 480 00:26:18,761 --> 00:26:20,685 >> PENONTON: Saya fikir ia adalah 10,000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Jadi saya mendarabkannya dengan 10,000 sebelum saya pemutus itu. 482 00:26:24,234 --> 00:26:25,202 >> PENONTON: Oh. 483 00:26:25,202 --> 00:26:27,622 Tidak akan ada satu 9 dan beberapa nombor 0? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Anda mungkin mempunyai beberapa digit pelik. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Jadi betul, ia 1.3 kali 10,000. 487 00:26:37,670 --> 00:26:40,040 Jadi itulah 13,000. 488 00:26:40,040 --> 00:26:41,313 Dan weird-- tambahan ini 489 00:26:41,313 --> 00:26:42,160 >> PENONTON: 13,100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13,100. 491 00:26:42,650 --> 00:26:44,910 Terima kasih, Rob. 492 00:26:44,910 --> 00:26:46,610 Dan weirdness-- tambahan ini 493 00:26:46,610 --> 00:26:48,060 ini 9,9-- 494 00:26:48,060 --> 00:26:53,860 adalah semata-mata kerana pemutus ini akhirnya pembulatan ke bawah di mana 495 00:26:53,860 --> 00:26:55,394 ia tidak sepatutnya. 496 00:26:55,394 --> 00:26:55,871 Yeah. 497 00:26:55,871 --> 00:26:58,256 >> PENONTON: pemutus ini berlaku selepas apa-apa lagi? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Jadi kerana saya mempunyai ini dalam media cetak, ia melakukan pendaraban ini sebelum ia 499 00:27:03,865 --> 00:27:05,230 tidak pemutus ini. 500 00:27:05,230 --> 00:27:06,140 >> PENONTON: [didengar]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Saya rasa ia akan membuang pertama, yeah, yang akan menjadi 10,000. 502 00:27:11,350 --> 00:27:12,610 Apa-apa lagi? 503 00:27:12,610 --> 00:27:13,330 Sejuk. 504 00:27:13,330 --> 00:27:16,344 Jadi ini adalah 13099. 505 00:27:16,344 --> 00:27:17,840 Mengapa ini berlaku? 506 00:27:17,840 --> 00:27:18,900 Ketakpersisan. 507 00:27:18,900 --> 00:27:21,020 >> Pelampung tidak sempurna. 508 00:27:21,020 --> 00:27:27,550 Mereka hanya boleh mewakili nombor kepada sebilangan angka bererti. 509 00:27:27,550 --> 00:27:35,120 Jadi, jika kita mencetak 8 buah ara sig pada apungan ini, kita akan mendapat sejenis 510 00:27:35,120 --> 00:27:36,800 bilangan mencari hodoh. 511 00:27:36,800 --> 00:27:45,580 Dan itu kerana 1.31 tidak boleh tepat diwakili oleh mudah 512 00:27:45,580 --> 00:27:49,000 kuasa dua dalam mesin. 513 00:27:49,000 --> 00:27:53,530 Jadi ia berakhir mengambil yang paling dekat meneka, yang berakhir 514 00:27:53,530 --> 00:27:55,710 yang sedikit rendah. 515 00:27:55,710 --> 00:27:57,730 Masuk akal? 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> Sekarang, dihidupkan adalah cara yang berbeza melakukan pernyataan bersyarat di mana semua 518 00:28:05,840 --> 00:28:09,900 kita mengambil berat tentang adalah pembolehubah tunggal. 519 00:28:09,900 --> 00:28:16,570 Jadi dalam contoh ini tertentu, kami mendapat integer dari pengguna. 520 00:28:16,570 --> 00:28:21,070 Dan kemudian kita melihat apa integer yang. 521 00:28:21,070 --> 00:28:23,500 Mungkin, ia adalah bilangan antara satu hingga empat. 522 00:28:23,500 --> 00:28:24,800 Itulah apa yang kita minta. 523 00:28:24,800 --> 00:28:28,450 >> Jadi, anda melakukan suis nama pembolehubah. 524 00:28:28,450 --> 00:28:34,290 Kemudian anda menetapkan kes mungkin menghargai ia boleh menjadi. 525 00:28:34,290 --> 00:28:37,730 Jadi huruf satu, berkata ia adalah rendah. 526 00:28:37,730 --> 00:28:41,080 Dan kemudian anda memecahkan untuk keluar keadaan suis jadi 527 00:28:41,080 --> 00:28:43,270 anda tidak menyimpan berterusan. 528 00:28:43,270 --> 00:28:44,830 >> Dalam case-- seterusnya 529 00:28:44,830 --> 00:28:46,940 jadi kes dua kes three-- 530 00:28:46,940 --> 00:28:51,920 jika ia kes dua ia hanya jatuh ke baris pertama kod yang ia lihat sebagai dengan 531 00:28:51,920 --> 00:28:55,400 huruf tiga sehingga ia melihat rehat. 532 00:28:55,400 --> 00:29:00,430 Jadi sebab anda mendapat kes satu hingga hanya cetak rendah kerana saya 533 00:29:00,430 --> 00:29:01,890 mempunyai rehat ini di sini. 534 00:29:01,890 --> 00:29:05,360 Jika saya, katakan, diabaikan break-- ini jika saya melemparkan breakaway-- ini 535 00:29:05,360 --> 00:29:09,740 ia akan mencetak yang rendah, dan kemudian ia akan mencetak pertengahan, dan kemudian ia akan pecah. 536 00:29:09,740 --> 00:29:12,200 >> Jadi rehat adalah satu bahagian penting bagi menukar syarat-syarat dan 537 00:29:12,200 --> 00:29:14,340 mereka perlu berada di sana. 538 00:29:14,340 --> 00:29:20,070 Mana-mana kes-kes yang tidak dinyatakan secara jelas dikendalikan oleh lalai 539 00:29:20,070 --> 00:29:26,645 kes dalam suis dan perlu dibuang. 540 00:29:26,645 --> 00:29:31,363 >> PENONTON: Jadi 1, 2, 3, dan 4 akan n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Nilai-nilai yang n boleh. 542 00:29:33,310 --> 00:29:34,654 Ya. 543 00:29:34,654 --> 00:29:35,146 Yeah? 544 00:29:35,146 --> 00:29:37,606 >> PENONTON: Oleh itu, apabila anda mempunyai bahawa [didengar]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Anda akan mencetak yang rendah, dan kemudian ia akan mencetak tengah dan 547 00:29:46,830 --> 00:29:47,400 maka ia akan pecah. 548 00:29:47,400 --> 00:29:50,244 >> PENONTON: Mengapa ia akan mencetak tengah jika [didengar]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Jadi segala-galanya di bawah kes sebelum rehat yang terletak di bawah. 551 00:30:00,550 --> 00:30:09,390 Jadi kes cetak satu kes di bawah satu sebagai adalah cetakan ini berikut. 552 00:30:09,390 --> 00:30:09,890 Yeah? 553 00:30:09,890 --> 00:30:11,140 >> PENONTON: [didengar]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Jadi nombor ini hanya tertentu nilai yang berubah-ubah ini 556 00:30:22,170 --> 00:30:23,420 boleh, bukan? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Adakah ini masuk akal? 559 00:30:28,490 --> 00:30:28,990 Yeah. 560 00:30:28,990 --> 00:30:31,490 >> PENONTON: [didengar]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Ya, dua kes akan mencetak pertengahan dan kemudian pecah. 562 00:30:34,130 --> 00:30:35,380 >> PENONTON: [didengar]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Saya rasa apa-apa? 565 00:30:40,050 --> 00:30:43,855 Apakah jenis data lain anda boleh menukar ke atas? 566 00:30:43,855 --> 00:30:46,320 >> PENONTON: Anda boleh menukar atas mana-mana jenis data. 567 00:30:46,320 --> 00:30:50,905 Tetapi ia bererti apa-apa yang lebih aksara dan ints dan barangan seperti itu, kerana 568 00:30:50,905 --> 00:30:55,600 jika anda beralih penunjuk yang tidak benar-benar masuk akal, 569 00:30:55,600 --> 00:30:59,555 beralih beban, jika ia walaupun mari anda lakukan itu, kerana mata terapung 570 00:30:59,555 --> 00:31:02,840 dalam ketepatan, anda tidak akan benar-benar mahu berbuat demikian juga. 571 00:31:02,840 --> 00:31:07,320 Jadi cukup banyak, hanya ints dan aksara dan barangan seperti itu. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Ya, ia adalah apabila anda mempunyai yang jelas nilai-nilai yang anda tahu, saya rasa, boleh 573 00:31:12,360 --> 00:31:14,250 bahawa suis sebenarnya berguna. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Baik? 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> Skop adalah pelbagai yang yang diisytiharkan ubah memanjangkan. 578 00:31:26,180 --> 00:31:32,190 Jadi dalam ini sebahagian kecil kod saya, ia akan penuh dengan kesilapan. 579 00:31:32,190 --> 00:31:41,450 Dan sebab itu saya mengisytiharkan int ini i dalam skop ini untuk gelung. 580 00:31:41,450 --> 00:31:46,390 Dan kemudian saya cuba untuk rujukan yang i di luar bahawa bagi skop gelung. 581 00:31:46,390 --> 00:31:50,330 >> Jadi, pada asasnya, anda boleh berfikir tentang skop sebagai apa-apa yang anda mengisytiharkan 582 00:31:50,330 --> 00:31:59,750 dengan di dalam satu set pendakap kerinting hanya wujud dalam orang-orang pendakap kerinting. 583 00:31:59,750 --> 00:32:04,990 Dan jika anda cuba dan menggunakan pembolehubah yang di luar dari orang-orang pendakap kerinting, anda akan 584 00:32:04,990 --> 00:32:08,356 mendapat ralat dari pengkompil. 585 00:32:08,356 --> 00:32:08,812 Yeah? 586 00:32:08,812 --> 00:32:09,724 >> PENONTON: Jadi yang satu ini tidak berfungsi? 587 00:32:09,724 --> 00:32:11,790 >> DAN: Ini tidak berfungsi, ya. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Tali. 590 00:32:18,660 --> 00:32:19,780 Rentetan char *. 591 00:32:19,780 --> 00:32:22,250 Mereka betul-betul sama. 592 00:32:22,250 --> 00:32:25,540 Mereka hanya petunjuk kepada watak-watak. 593 00:32:25,540 --> 00:32:33,000 Dan mana-mana tali bahawa anda mempunyai sepatutnya berakhir dengan garis sendeng terbalik sifar, yang hanya 594 00:32:33,000 --> 00:32:34,410 yang c konvensyen. 595 00:32:34,410 --> 00:32:36,680 >> Ia dipanggil terminator yang NULL. 596 00:32:36,680 --> 00:32:39,050 Dan NULL-- 597 00:32:39,050 --> 00:32:41,670 modal N, U modal, modal L, modal L-- 598 00:32:41,670 --> 00:32:44,290 tidak sama dengan Terminator NULL. 599 00:32:44,290 --> 00:32:46,640 Ini adalah penunjuk. 600 00:32:46,640 --> 00:32:48,280 Ini adalah watak. 601 00:32:48,280 --> 00:32:49,530 Mereka sangat berbeza. 602 00:32:49,530 --> 00:32:50,200 Ingat. 603 00:32:50,200 --> 00:32:52,320 Ia akan menjadi kuiz, mungkin. 604 00:32:52,320 --> 00:32:54,040 Saya tidak pernah melihat kuiz. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Yeah? 607 00:32:58,840 --> 00:33:01,232 >> PENONTON: Jadi adalah NULL, berkata, penunjuk? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Ya. 609 00:33:01,995 --> 00:33:05,170 >> PENONTON: Apa yang [didengar]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Jika, berkata, malloc dipanggil apabila anda tidak mempunyai memori yang cukup untuk mendapatkan 611 00:33:10,050 --> 00:33:14,400 apa saiz yang anda meminta, malloc akan kembali NULL. 612 00:33:14,400 --> 00:33:19,550 Ia, pada dasarnya, apabila fungsi adalah sepatutnya kembali penunjuk, anda 613 00:33:19,550 --> 00:33:22,600 perlu menyemak terhadap NULL kerana NULL adalah good-- cukup 614 00:33:22,600 --> 00:33:25,260 itu, jenis, nilai sampah. 615 00:33:25,260 --> 00:33:27,050 Ia sifar sejauh petunjuk pergi. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Setiap kali anda memanggil fungsi, yang mengembalikan penunjuk. 618 00:33:32,250 --> 00:33:35,960 Anda akan mahu untuk memeriksa menjadi memastikan bahawa penunjuk yang tidak NULL 619 00:33:35,960 --> 00:33:37,760 kerana NULL adalah sangat umum. 620 00:33:37,760 --> 00:33:40,160 Ia semacam pulangan sampah. 621 00:33:40,160 --> 00:33:44,902 Oleh itu, jika sesuatu yang tidak pergi ke kanan, hanya kembali NULL sebaliknya. 622 00:33:44,902 --> 00:33:45,898 >> PENONTON: [didengar]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Ya, dan itu ini. 624 00:33:48,922 --> 00:33:51,750 >> PENONTON: [didengar]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: Eja sebagai ini. 626 00:33:52,800 --> 00:33:54,150 Ia terminator NULL itu. 627 00:33:54,150 --> 00:33:56,560 Ia huruf kecil N-U-L-L jika anda mengeja ia. 628 00:33:56,560 --> 00:33:59,860 >> PENONTON: Dan saya hanya pergi belakang dan diuji. 629 00:33:59,860 --> 00:34:03,010 Dan jika anda cuba untuk meletakkan satu titik terapung nilai ke dalam suis, ia akan menjerit pada anda 630 00:34:03,010 --> 00:34:05,916 berkata, kenyataan memerlukan ungkapan jenis integer. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Terdapat anda pergi. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Tetapi yeah, apa soalan lagi? 634 00:34:12,246 --> 00:34:13,496 >> PENONTON: [didengar]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Jadi modal N, U modal, modal L, L modal adalah c perkara sebenar. 637 00:34:23,679 --> 00:34:29,719 Ia adalah penunjuk NULL dan akan hanya diperlakukan sedemikian. 638 00:34:29,719 --> 00:34:33,530 Anda tidak akan pernah cuba mengeja Watak NULL dan melihat apa-apa 639 00:34:33,530 --> 00:34:35,630 cara yang lain daripada ini. 640 00:34:35,630 --> 00:34:36,610 Yeah? 641 00:34:36,610 --> 00:34:42,490 >> PENONTON: Jadi kembali ke char max atau sesuatu dalam nota, akan ia 642 00:34:42,490 --> 00:34:43,960 merangkumi fungsi yang sama sebagai [didengar]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> PENONTON: Jadi yang anda merujuk kepada kembali max char dari getchar, atau 645 00:34:54,949 --> 00:34:55,444 apa sahaja? 646 00:34:55,444 --> 00:34:55,940 >> PENONTON: Yeah. 647 00:34:55,940 --> 00:34:58,620 >> PENONTON: Yeah, jadi umum istilah untuk semua perkara-perkara 648 00:34:58,620 --> 00:34:59,920 nilai-nilai sentinel. 649 00:34:59,920 --> 00:35:03,640 Jadi seperti kembali int max dari GetInt dan char max dari getchar, ia 650 00:35:03,640 --> 00:35:06,010 sepatutnya menjadi seperti, baiklah, jika perkara-perkara ini kembali kepada kami, 651 00:35:06,010 --> 00:35:07,210 sesuatu yang salah. 652 00:35:07,210 --> 00:35:09,950 >> Untuk petunjuk, kita hanya kebetulan mempunyai nilai sentinel ini bahawa setiap orang 653 00:35:09,950 --> 00:35:10,750 bersetuju atas. 654 00:35:10,750 --> 00:35:13,210 Dan ini adalah perkara yang anda kembali apabila berlaku kesilapan. 655 00:35:13,210 --> 00:35:15,910 Jadi max char adalah apa yang kita gunakan untuk mewakili sesuatu 656 00:35:15,910 --> 00:35:18,100 seperti NULL atau getchar. 657 00:35:18,100 --> 00:35:23,420 >> PENONTON: Jadi jika anda menguji getchar, boleh anda hanya meletakkan NULL? 658 00:35:23,420 --> 00:35:23,910 Yang akan membuat perbezaan? 659 00:35:23,910 --> 00:35:25,400 >> DAN: Anda tidak boleh hanya menyemak NULL. 660 00:35:25,400 --> 00:35:30,130 Anda harus memeriksa char max kerana nilai pulangan dari fungsi adalah 661 00:35:30,130 --> 00:35:35,416 yang bersifat tidak penunjuk. 662 00:35:35,416 --> 00:35:35,888 Yeah? 663 00:35:35,888 --> 00:35:38,248 >> PENONTON: Soalan ini meminta untuk panjang tali. 664 00:35:38,248 --> 00:35:40,136 Adakah ini termasuk watak NULL? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Tidak 666 00:35:41,000 --> 00:35:45,930 Dan itulah sebenarnya bagaimana panjang rentetan tahu untuk berhenti kerana ia akan melalui 667 00:35:45,930 --> 00:35:49,070 array anda sehingga aksara ia melihat watak NULL. 668 00:35:49,070 --> 00:35:51,030 Dan kemudian ia seperti, semua betul, saya dilakukan. 669 00:35:51,030 --> 00:35:52,130 >> PENONTON: [didengar] lima? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Hello berjumlah lima. 671 00:35:53,990 --> 00:35:55,240 Yep. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Jadi tatasusunan adalah berterusan blok ingatan. 674 00:36:02,880 --> 00:36:08,480 Mereka mempunyai akses segera dengan mengatakan yang nama array dan kemudian, dalam kerinting 675 00:36:08,480 --> 00:36:16,720 pendakap, apa sahaja indeks anda mahu pergi kepada, mereka diindeks dari sifar melalui 676 00:36:16,720 --> 00:36:20,100 panjang array tolak 1. 677 00:36:20,100 --> 00:36:23,070 >> Dan mereka yang diisytiharkan oleh jenis yang perkara yang anda menyimpan dalam 678 00:36:23,070 --> 00:36:29,750 array, nama array, dan kemudian apa saiz adalah array itu. 679 00:36:29,750 --> 00:36:36,660 Jadi ini adalah pelbagai char panjang enam yang mempunyai nilai-nilai ini. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Yeah? 682 00:36:42,700 --> 00:36:43,950 >> PENONTON: [didengar]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Yeah. 685 00:36:48,460 --> 00:36:51,340 >> PENONTON: [didengar]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Jika anda mempunyai apa yang sedang berlaku ke dalam array yang telah dibuat. 687 00:36:56,700 --> 00:37:02,260 Oleh itu, anda boleh menentukan ini dan bukannya sebagai, katakan, char, apa sahaja nama anda 688 00:37:02,260 --> 00:37:12,200 pelbagai adalah, kurungan kosong sama kerinting bersedia H koma koma E L L koma koma 689 00:37:12,200 --> 00:37:16,290 O koma NULL watak dan pendakap kerinting. 690 00:37:16,290 --> 00:37:18,180 Yang juga akan bekerja sebagai perisytiharan. 691 00:37:18,180 --> 00:37:20,886 >> PENONTON: [didengar]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Kemudian, anda perlu mempunyai saiz yang telah dibuat. 693 00:37:23,110 --> 00:37:23,896 >> PENONTON: [didengar]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Ya. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Semua righty. 697 00:37:32,420 --> 00:37:36,430 Hujah baris arahan adalah cara mendapatkan input daripada pengguna sebagai 698 00:37:36,430 --> 00:37:39,380 hujah untuk utama. 699 00:37:39,380 --> 00:37:40,600 Utama mengambil dua hujah. 700 00:37:40,600 --> 00:37:47,680 Bilangan hujah-hujah yang sedang diluluskan bersama-sama baris arahan dan 701 00:37:47,680 --> 00:37:55,340 vektor tali atau pelbagai rentetan semua hujah-hujah. 702 00:37:55,340 --> 00:38:07,840 >> Jadi, jika saya, katakan, yang dipanggil fungsi seperti titik keluar 1 ruang, 2 ruang, tiga, 703 00:38:07,840 --> 00:38:10,110 argc akan 4. 704 00:38:10,110 --> 00:38:17,370 Dan argv 0 akan menjadi titik keluar. 705 00:38:17,370 --> 00:38:19,130 Argv1 akan menjadi 1. 706 00:38:19,130 --> 00:38:23,030 argv2 akan 2. argv3 akan 3, dalam kes tertentu. 707 00:38:23,030 --> 00:38:23,310 Yeah? 708 00:38:23,310 --> 00:38:25,400 >> PENONTON: [didengar]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: Elemen terakhir dalam tatasusunan kerana array adalah panjang argc ditambah 710 00:38:34,010 --> 00:38:41,050 salah satu argb, elemen terakhir adalah penunjuk NULL itu. 711 00:38:41,050 --> 00:38:42,580 Ia adalah argc campur 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Jadi dalam kes yang saya hanya berkata, ia akan argv 0 adalah titik keluar. 714 00:38:52,150 --> 00:38:56,330 argv 1 adalah 1. argv2 adalah 2. argv 3 adalah 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, yang merupakan salah satu yang lebih besar daripada argc akan NULL. 716 00:39:03,490 --> 00:39:04,870 >> Dan itulah penunjuk NULL. 717 00:39:04,870 --> 00:39:06,590 Ya. 718 00:39:06,590 --> 00:39:11,250 Dan itu kerana rentetan adalah bintang char adalah penunjuk. 719 00:39:11,250 --> 00:39:14,102 Jadi ia perlu jenis yang sama. 720 00:39:14,102 --> 00:39:14,595 Yeah? 721 00:39:14,595 --> 00:39:16,074 >> PENONTON: Dua soalan. 722 00:39:16,074 --> 00:39:21,004 Jadi satu, apa perbezaan di antara GetString ini dan lain-lain daripada satu jenis 723 00:39:21,004 --> 00:39:22,483 dalam enjin pengguna? 724 00:39:22,483 --> 00:39:25,934 Dan dua, ia disimpan di dalam memori terbaru anda? 725 00:39:25,934 --> 00:39:28,399 Mahu, GetString akan menjadi [didengar]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Di mana ia disimpan? 728 00:39:33,650 --> 00:39:34,905 Saya tidak tahu di mana ia disimpan. 729 00:39:34,905 --> 00:39:40,000 >> PENONTON: Jadi, sebenarnya, anda tahu bagaimana apa-apa berfungsi anda memanggil ia hujah 730 00:39:40,000 --> 00:39:42,170 disimpan dalam tindanan? 731 00:39:42,170 --> 00:39:46,610 Jadi argc dan argv adalah hujah untuk utama dan mereka pada timbunan, atau benar-benar 732 00:39:46,610 --> 00:39:49,131 di atas apa yang anda fikirkan sebagai permulaan tindanan. 733 00:39:49,131 --> 00:39:53,490 Apakah yang lain daripada soalan? 734 00:39:53,490 --> 00:39:56,821 >> PENONTON: Jadi apa yang [didengar]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Ya, ia hanya cara yang berbeza mendapatkan input daripada pengguna. 736 00:40:00,990 --> 00:40:06,030 Sedikit lebih cekap dan ini seseorang ia handier skrip kerana anda 737 00:40:06,030 --> 00:40:10,070 hanya boleh lulus hujah untuk utama anda fungsi dan bukannya perlu menunggu 738 00:40:10,070 --> 00:40:13,400 bagi pengguna jika anda tidak mempunyai mana-mana pengguna. 739 00:40:13,400 --> 00:40:16,280 >> PENONTON: Dan yeah, dapatkan tali akan [didengar]. 740 00:40:16,280 --> 00:40:17,922 Ia akan menyimpan barangan yang anda perlukan. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Ya? 742 00:40:18,834 --> 00:40:21,114 >> PENONTON: [didengar]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Ya, argv 0 sentiasa termasuk dot mengurangkan panggilan fungsi. 744 00:40:27,545 --> 00:40:28,042 Yeah? 745 00:40:28,042 --> 00:40:29,292 >> PENONTON: [didengar]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Ya, setiap satu daripada hujah-hujah yang berakhir pada watak NULL kerana mereka 748 00:40:37,310 --> 00:40:38,310 adalah wayang. 749 00:40:38,310 --> 00:40:40,892 >> PENONTON: [didengar]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Ya, argv argc adalah penunjuk NULL. 751 00:40:44,116 --> 00:40:45,112 >> PENONTON: [didengar]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: Oh yeah. 753 00:40:47,104 --> 00:40:48,100 Yeah, maaf. 754 00:40:48,100 --> 00:40:49,594 >> PENONTON: Jadi [didengar]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: Jadi persoalannya ialah jika anda mempunyai baris arahan dot dot mengurangkan keluar 1, 2, 757 00:41:16,340 --> 00:41:20,410 akan bilangan baris arahan hujah-hujah dua atau ia akan menjadi tiga? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> PENONTON: Saya rasa ia tidak benar-benar perkara itu. 760 00:41:28,240 --> 00:41:31,370 Saya cenderung untuk mengatakan, oh, anda tidak lulus apa-apa hujah baris arahan apabila, 761 00:41:31,370 --> 00:41:32,730 jelas, anda dipanggil fungsi. 762 00:41:32,730 --> 00:41:37,950 Jadi saya cenderung untuk secara dinyanyikan mengecualikan fungsi dari baris arahan 763 00:41:37,950 --> 00:41:40,350 hujah-hujah yang walaupun ia termasuk dalam argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Tetapi jika ia adalah pada test-- yang 765 00:41:42,600 --> 00:41:46,550 yeah-- dan juga jika anda berkata sesuatu seperti argc bersamaan 3, 766 00:41:46,550 --> 00:41:48,512 anda berada dalam kedudukan selamat. 767 00:41:48,512 --> 00:41:49,416 Yeah? 768 00:41:49,416 --> 00:41:50,666 >> PENONTON: [didengar]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Saya rasa jika bukan memanggil ini dalam argc dan tali kurungan argv 771 00:42:09,510 --> 00:42:14,350 tetapi disimpan jenis yang sama dan hanya dipanggil mereka sesuatu yang berbeza seperti 772 00:42:14,350 --> 00:42:16,640 dan b, akan ia masih berfungsi? 773 00:42:16,640 --> 00:42:18,790 Dan ia masih bekerja, anda akan just-- 774 00:42:18,790 --> 00:42:21,520 bukannya menggunakan argc-- anda akan menggunakan dan b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Yeah? 777 00:42:25,408 --> 00:42:26,658 >> PENONTON: [didengar]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: Jadi persoalannya ialah GetString adalah hendak menyimpan memori dalam timbunan itu 780 00:42:38,850 --> 00:42:42,280 kerana GetString adalah char *. 781 00:42:42,280 --> 00:42:47,530 Ia menyimpan memori dalam timbunan itu kerana ia panggilan malloc kini dalam sebenar 782 00:42:47,530 --> 00:42:49,258 pelaksanaan GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 OK, beralih. 785 00:42:55,090 --> 00:42:55,950 >> Keselamatan. 786 00:42:55,950 --> 00:43:01,090 Jadi untuk menjadi benar-benar selamat, anda tidak bergantung kepada satu dan anda membenarkan tidak ada akses kepada mana-mana 787 00:43:01,090 --> 00:43:04,540 maklumat anda, itulah sebabnya semua orang membina mesin mereka sendiri, 788 00:43:04,540 --> 00:43:09,580 sistem operasi mereka sendiri, semua mereka program dari awal, dan jelas 789 00:43:09,580 --> 00:43:13,410 jangan sambung kepada mana-mana mesin lain melalui internet. 790 00:43:13,410 --> 00:43:17,350 Jadi komputer yang tidak selamat. 791 00:43:17,350 --> 00:43:19,200 Mereka benar-benar adalah. 792 00:43:19,200 --> 00:43:20,940 Kita perlu mempercayai orang lain. 793 00:43:20,940 --> 00:43:26,500 >> Dan idea keselamatan adalah bahawa anda cuba untuk menghadkan jumlah 794 00:43:26,500 --> 00:43:27,540 amanah yang anda perlukan. 795 00:43:27,540 --> 00:43:32,080 Dan salah satu cara yang anda lakukan itu adalah melalui kriptografi. 796 00:43:32,080 --> 00:43:34,950 Kriptografi adalah, pada dasarnya, kita mempunyai rahsia. 797 00:43:34,950 --> 00:43:38,880 >> Kadang-kadang kita perlu lulus rahsia kami bersama-sama melalui, katakan, internet atau 798 00:43:38,880 --> 00:43:39,980 perkara-perkara lain. 799 00:43:39,980 --> 00:43:43,180 Dan kita tidak mahu orang untuk mengetahui rahsia ini. 800 00:43:43,180 --> 00:43:50,100 Oleh itu, kita menyulitkan rahsia kami ke dalam cara yang yang kami berharap tidak ada yang dapat memikirkan. 801 00:43:50,100 --> 00:43:51,600 >> Oleh itu, kita used-- 802 00:43:51,600 --> 00:43:54,340 melalui perjalanan class-- ini 803 00:43:54,340 --> 00:44:00,750 hal-hal seperti Caesar cipher dan [Didengar], yang kedua-duanya adalah sangat, sangat 804 00:44:00,750 --> 00:44:03,200 cara tidak selamat dari perkara yang menyulitkan. 805 00:44:03,200 --> 00:44:07,930 Mereka mudah untuk memahami apa yang mereka dan apa rahsia anda. 806 00:44:07,930 --> 00:44:12,130 Dunia sebenar menggunakan lebih skim penyulitan rumit. 807 00:44:12,130 --> 00:44:13,880 Dan kami tidak akan masuk ke dalam lebih daripada itu. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Debugging. 810 00:44:19,430 --> 00:44:20,785 GDB adalah yang terbaik. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Saya akan menekankan ini lagi. 813 00:44:25,810 --> 00:44:30,920 Gunakan GDB sepanjang masa setiap masa anda mempunyai masalah. 814 00:44:30,920 --> 00:44:36,030 Arahan yang berguna dalam GDB adalah memecahkan, yang anda lulus sama ada garis 815 00:44:36,030 --> 00:44:41,330 nombor, nama fungsi, pada dasarnya di mana dalam kod anda, anda mahu berhenti, 816 00:44:41,330 --> 00:44:45,600 dan dapat mengambil kawalan. 817 00:44:45,600 --> 00:44:54,140 >> Cetak mengambil pembolehubah dan mencetak keluar apa sahaja yang berubah-ubah yang di yang 818 00:44:54,140 --> 00:44:55,990 titik dalam pelaksanaan anda. 819 00:44:55,990 --> 00:45:00,130 Seterusnya bergerak pelaksanaan anda sepanjang satu langkah. 820 00:45:00,130 --> 00:45:05,050 Dan langkah langkah-langkah di dalam satu majlis dalam pelaksanaan anda. 821 00:45:05,050 --> 00:45:10,480 >> Perkara lain dikendalikan, iaitu bagaimana anda sebenarnya menjalankan kod anda. 822 00:45:10,480 --> 00:45:16,630 Terus mengambil semua langkah-langkah yang diperlukan untuk sampai ke titik rehat seterusnya. 823 00:45:16,630 --> 00:45:18,300 Dan terdapat banyak, banyak lagi. 824 00:45:18,300 --> 00:45:19,040 Melihat mereka. 825 00:45:19,040 --> 00:45:19,901 Mereka yang besar. 826 00:45:19,901 --> 00:45:20,863 Yeah? 827 00:45:20,863 --> 00:45:22,113 >> PENONTON: [didengar]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Ya, yang penyahpepijat a. 830 00:45:28,200 --> 00:45:34,230 Jadi penyahpepijat adalah program yang membolehkan anda debug program anda. 831 00:45:34,230 --> 00:45:39,931 Ia bukan satu program yang mendapati pepijat untuk anda, walaupun yang akan menjadi besar. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> Dan terakhir bagi saya adalah carian. 834 00:45:46,040 --> 00:45:51,470 Jadi jenis carian yang kita bercakap kira-kira di dalam kelas ini adalah carian linear, 835 00:45:51,470 --> 00:45:55,960 yang hanya bahawa anda melihat melalui setiap elemen ruang carian, satu 836 00:45:55,960 --> 00:46:00,410 elemen pada satu masa, sehingga anda mencari apa yang anda sedang mencari atau sehingga anda mencapai 837 00:46:00,410 --> 00:46:03,350 akhir ruang carian anda di mana menunjukkan anda mengatakan bahawa anda tidak dapat mencari 838 00:46:03,350 --> 00:46:06,360 elemen yang anda cari. 839 00:46:06,360 --> 00:46:13,450 Dan ini mengambil masa yang terbaik tetap, yang adalah 0 dan 1 di linear paling teruk 840 00:46:13,450 --> 00:46:16,070 masa, yang adalah 0 n. 841 00:46:16,070 --> 00:46:19,250 >> Carian binari, yang memerlukan elemen-elemen kotor. 842 00:46:19,250 --> 00:46:24,230 Anda pergi ke tengah-tengah unsur-unsur anda, melihat jika elemen yang anda sedang mencari 843 00:46:24,230 --> 00:46:30,120 adalah lebih besar atau lebih kecil daripada elemen bahawa anda berada di tengah-tengah. 844 00:46:30,120 --> 00:46:36,510 Ia itu lebih besar, anda mengatakan bahawa bahagian bawah carian anda ruang yang anda 845 00:46:36,510 --> 00:46:41,550 lokasi semasa, tengah-tengah, dan anda memulakan semula proses. 846 00:46:41,550 --> 00:46:46,150 Jika ia lebih kecil, anda melihat mengatakan yang the-- yeah, apa khabar? 847 00:46:46,150 --> 00:46:47,400 >> PENONTON: [didengar]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Ya. 850 00:46:54,260 --> 00:46:58,360 Apa-apa jenis bentuk yang sudah diajar di kelas adalah permainan yang adil untuk ujian. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Ketawa] 853 00:47:04,920 --> 00:47:10,260 >> DAN: Dan hakikat bahawa anda tidak mempunyai untuk melakukannya untuk satu set masalah, itu adil 854 00:47:10,260 --> 00:47:12,420 permainan untuk ujian. 855 00:47:12,420 --> 00:47:15,186 >> PENONTON: Bolehkah kita pergi ke bagaimana ia supaya- 856 00:47:15,186 --> 00:47:17,052 >> DAN: Ia akan pergi ke atas. 857 00:47:17,052 --> 00:47:20,496 >> SPEAKER 2: kod sebenar untuk [Didengar] adalah pada study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Jadi, jika anda melihat masalah amalan dalam halaman jenis merge daripada 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, ada kod untuk melaksanakan bergabung jenis. 861 00:47:35,880 --> 00:47:38,550 Jadi, anda tidak perlu melaksanakan sendiri malam ini. 862 00:47:38,550 --> 00:47:42,090 Tetapi pastikan anda memahami ia bukan daripada hanya menghafalnya. 863 00:47:42,090 --> 00:47:45,035 >> PENONTON: [didengar]? 864 00:47:45,035 --> 00:47:49,720 >> SPEAKER 2: Laman jenis merge pada study.cs50.net, terdapat amalan yang 865 00:47:49,720 --> 00:47:53,570 masalah itu, jika anda klik melalui masalah, pada akhir sangat ada 866 00:47:53,570 --> 00:47:56,280 penyelesaian, yang merupakan cantuman pelaksanaan semacam. 867 00:47:56,280 --> 00:47:58,510 Tetapi pastikan anda memahaminya bukan hanya menghafal ia 868 00:47:58,510 --> 00:47:59,760 atau menyalin ke bawah. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> PENONTON: Dan yang sah dengan sempurna masalah untuk peperiksaan akan 871 00:48:06,340 --> 00:48:07,990 sesuatu seperti inilah senarai. 872 00:48:07,990 --> 00:48:12,100 Apakah senarai ini kelihatan seperti selepas satu langkah daripada pilihan jenis atau 873 00:48:12,100 --> 00:48:13,330 jenis sisipan atau apa sahaja. 874 00:48:13,330 --> 00:48:14,940 Satu lelaran penuh dengan senarai. 875 00:48:14,940 --> 00:48:18,530 Jadi, walaupun anda tidak berakhir sehingga perlu kod untuk itu, anda perlu memahami ia 876 00:48:18,530 --> 00:48:20,440 cukup untuk mengetahui bagaimana ia akan untuk mengubah suai pelbagai ini. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: Itu sahaja untuk saya. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Tepuk tangan] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hey semua orang. 883 00:49:07,410 --> 00:49:08,390 Nama saya Lucas. 884 00:49:08,390 --> 00:49:16,840 Saya akan bercakap tentang rekursi, semua yang macam yang kita telah belajar dan 885 00:49:16,840 --> 00:49:18,050 sedikit semua petunjuk. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 Jadi pertama sekali, rekursi. 888 00:49:20,340 --> 00:49:22,951 Apakah yang dimaksudkan untuk mengatakan bahawa fungsi adalah rekursif? 889 00:49:22,951 --> 00:49:24,675 >> PENONTON: Panggilan sendiri. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, panggilan itu sendiri, ya. 891 00:49:26,500 --> 00:49:27,700 Jadi seperti gambar ini, sebagai contoh. 892 00:49:27,700 --> 00:49:30,280 Ia seperti di dalam gambar gambar dan sebagainya. 893 00:49:30,280 --> 00:49:35,740 Sebagai contoh, anda boleh have-- sebagai Dan yang bercakap tentang carian binari. 894 00:49:35,740 --> 00:49:41,840 Salah satu cara di mana carian binari adalah rekursif adalah hakikat bahawa anda 895 00:49:41,840 --> 00:49:43,130 cuba untuk mencari nombor. 896 00:49:43,130 --> 00:49:44,250 Oleh itu, anda pergi ke tengah-tengah. 897 00:49:44,250 --> 00:49:47,130 Dan kemudian anda menyemak jika terdapat nombor di kiri dan di kanan. 898 00:49:47,130 --> 00:49:49,650 >> Dan kemudian jika anda mengetahui bilangan adalah akan berada di sebelah kiri, ia adalah sama 899 00:49:49,650 --> 00:49:53,340 perkara seperti melakukan pencarian semula tetapi hanya di sebelah kiri senarai. 900 00:49:53,340 --> 00:49:57,350 Jadi itulah bagaimana ia kedengaran seperti ia rekursif. 901 00:49:57,350 --> 00:50:01,870 Jadi itulah sebabnya kalian mempunyai rekursif penyelesaian untuk jenis merge. 902 00:50:01,870 --> 00:50:04,270 >> OK, jadi di sini adalah satu contoh. 903 00:50:04,270 --> 00:50:07,280 Jadi mari kita mengatakan bahawa saya mahu memilih semua nombor dari 1 hingga n. 904 00:50:07,280 --> 00:50:13,790 Saya boleh sedar bahawa jumlah n nombor adalah n plus n minus 1 hingga 1. 905 00:50:13,790 --> 00:50:17,810 Tetapi, jika saya melihat n tolak 1 campur n tolak 2 campur 1, itu yang sama 906 00:50:17,810 --> 00:50:20,680 Perkara nombor menjumlahkan sehingga n tolak 1. 907 00:50:20,680 --> 00:50:25,890 Jadi, saya boleh berkata jumlah sejumlah yang sama sama n dicampur dengan jumlah bagi n tolak 1. 908 00:50:25,890 --> 00:50:28,010 Adakah ini masuk akal? 909 00:50:28,010 --> 00:50:32,630 >> Dan saya juga akan mempunyai sesuatu yang lain dikenali sebagai kes asas, iaitu bahawa 910 00:50:32,630 --> 00:50:37,440 hasil tambah nombor sehingga kepada sifar akan menjadi sifar. 911 00:50:37,440 --> 00:50:42,770 Jadi sebaik sahaja saya mendapat jumlah sifar, saya berhenti mengira. 912 00:50:42,770 --> 00:50:45,330 Adakah ini masuk akal? 913 00:50:45,330 --> 00:50:48,120 >> Jadi di sini adalah satu contoh bagaimana Saya boleh melaksanakan itu. 914 00:50:48,120 --> 00:50:49,860 Jadi saya mempunyai fungsi ini dalam beberapa. 915 00:50:49,860 --> 00:50:51,700 Yang mengambil integer n. 916 00:50:51,700 --> 00:50:56,300 Jadi di sini saya periksa dahulu jika n adalah kurang atau sama dengan sifar. 917 00:50:56,300 --> 00:51:00,310 Jadi, jika ia kurang atau sama dengan sifar, saya kembali sifar, yang merupakan kes asas kami. 918 00:51:00,310 --> 00:51:05,690 Jika tidak, saya hanya boleh kembali n plus jumlah nombor 919 00:51:05,690 --> 00:51:07,190 satu hingga n tolak satu. 920 00:51:07,190 --> 00:51:09,360 Masuk akal? 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> Jadi di sini adalah apa yang ia kelihatan seperti. 923 00:51:11,610 --> 00:51:15,260 Anda mempunyai jumlah wang sebanyak 2 setaraf 2 dicampur dengan jumlah bagi 1. 924 00:51:15,260 --> 00:51:18,930 Dan beberapa daripada 1 adalah 1 campur jumlah 0, yang adalah 0. 925 00:51:18,930 --> 00:51:20,216 Masuk akal? 926 00:51:20,216 --> 00:51:25,342 Jadi, jika kita melihat timbunan anda program, ini adalah apa yang ia kelihatan seperti. 927 00:51:25,342 --> 00:51:26,820 >> Pertama, kita mempunyai fungsi utama. 928 00:51:26,820 --> 00:51:30,320 Kemudian fungsi utama dipanggil jumlah 2. 929 00:51:30,320 --> 00:51:36,690 Dan kemudian jumlah 2 akan berkata, oh, jumlah 2 sama 2 dicampur dengan jumlah bagi satu. 930 00:51:36,690 --> 00:51:39,460 Jadi saya menambah jumlah 1 hingga tindanan. 931 00:51:39,460 --> 00:51:43,860 Dan jumlah 1 akan memanggil jumlah 0, yang juga akan menambah 932 00:51:43,860 --> 00:51:44,630 untuk tindanan. 933 00:51:44,630 --> 00:51:49,240 Dan kemudian setiap orang-orang ini yang di atas yang lain perlu kembali 934 00:51:49,240 --> 00:51:52,020 sebelum orang-orang lain boleh menyimpan berterusan. 935 00:51:52,020 --> 00:51:56,240 >> Jadi, sebagai contoh, di sini, jumlah 0, pertama, akan kembali 0. 936 00:51:56,240 --> 00:51:58,320 Dan kemudian memilih jumlah 1. 937 00:51:58,320 --> 00:52:00,850 Kemudian sejumlah sebanyak 1 akan kembali 1 kepada jumlah 2. 938 00:52:00,850 --> 00:52:03,900 Dan akhirnya, jumlah bagi 2 akan untuk kembali 3 hingga utama. 939 00:52:03,900 --> 00:52:05,320 Adakah ini masuk akal? 940 00:52:05,320 --> 00:52:09,496 >> Ia benar-benar penting untuk memahami bagaimana tindanan sedang berusaha dan cuba untuk 941 00:52:09,496 --> 00:52:11,980 lihat jika ia masuk akal. 942 00:52:11,980 --> 00:52:13,260 OK, jadi sorting. 943 00:52:13,260 --> 00:52:16,170 Jadi mengapa sorting penting, pertama sekali? 944 00:52:16,170 --> 00:52:18,260 Mengapa kita perlu mengambil berat? 945 00:52:18,260 --> 00:52:20,310 Sesiapa sahaja? 946 00:52:20,310 --> 00:52:20,695 Beri saya contoh? 947 00:52:20,695 --> 00:52:21,040 Yeah? 948 00:52:21,040 --> 00:52:22,968 >> PENONTON: [didengar]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Yeah, OK. 950 00:52:24,700 --> 00:52:26,090 Oleh itu, anda boleh mencari dengan lebih cekap. 951 00:52:26,090 --> 00:52:28,580 Itulah cara yang baik. 952 00:52:28,580 --> 00:52:32,462 Jadi, sebagai contoh, kita mempunyai banyak perkara, sebenarnya, dalam kehidupan kita yang 953 00:52:32,462 --> 00:52:32,920 disusun. 954 00:52:32,920 --> 00:52:34,830 Sebagai contoh, kamus. 955 00:52:34,830 --> 00:52:39,210 >> Ia amat penting untuk mempunyai semua kata-kata dalam beberapa jenis supaya kita 956 00:52:39,210 --> 00:52:41,970 boleh mengakses dengan mudah. 957 00:52:41,970 --> 00:52:43,280 Jadi, apa yang dikatakannya. 958 00:52:43,280 --> 00:52:45,530 Anda boleh mencari dengan lebih cekap. 959 00:52:45,530 --> 00:52:48,740 Fikirkan bagaimana sukarnya adalah untuk mempunyai kamus di mana perkataan yang 960 00:52:48,740 --> 00:52:49,500 susunan rawak. 961 00:52:49,500 --> 00:52:53,120 Anda akan perlu untuk melihat, cukup banyak, setiap perkataan tunggal sehingga anda mencari 962 00:52:53,120 --> 00:52:54,720 kata yang anda cari. 963 00:52:54,720 --> 00:52:58,710 >> Jika anda menggunakan Facebook juga, apabila yang anda cari pada rakan-rakan anda, anda 964 00:52:58,710 --> 00:53:03,540 akan melihat bahawa Facebook meletakkan anda rakan lebih dekat adalah di atas orang-orang yang 965 00:53:03,540 --> 00:53:05,470 bahawa anda tidak bercakap dengan yang banyak. 966 00:53:05,470 --> 00:53:08,080 Jika anda pergi sepanjang jalan ke bahagian bawah senarai rakan anda, anda akan melihat 967 00:53:08,080 --> 00:53:11,250 orang-orang yang anda mungkin tidak walaupun ingat bahawa anda berkawan dengan. 968 00:53:11,250 --> 00:53:14,590 Dan itu kerana macam Facebook rakan-rakan anda berdasarkan bagaimana 969 00:53:14,590 --> 00:53:16,472 menutup anda kepada mereka. 970 00:53:16,472 --> 00:53:17,930 >> Jadi menganjurkan data. 971 00:53:17,930 --> 00:53:18,450 Juga Pokemon. 972 00:53:18,450 --> 00:53:21,400 Jadi anda lihat bahawa semua Pokemons mempunyai nombor. 973 00:53:21,400 --> 00:53:27,210 Dan itu seperti mudah cara mengakses data. 974 00:53:27,210 --> 00:53:29,050 >> PENONTON: Mengakses Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Yeah. 976 00:53:29,890 --> 00:53:32,395 >> PENONTON: [didengar]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Ya. 978 00:53:33,460 --> 00:53:35,140 OK, jadi pemilihan jenis. 979 00:53:35,140 --> 00:53:41,610 Pemilihan jenis akan memilih nilai terkecil terisih senarai yang setiap 980 00:53:41,610 --> 00:53:43,300 masa dalam setiap lelaran. 981 00:53:43,300 --> 00:53:46,800 Ia adalah jenis seperti jenis yang anda lakukan dalam kepala anda apabila anda cuba untuk 982 00:53:46,800 --> 00:53:48,430 menyusun senarai di tangan. 983 00:53:48,430 --> 00:53:51,990 >> Pada asasnya, semua yang anda lakukan adalah anda melihat untuk jumlah yang paling kecil. 984 00:53:51,990 --> 00:53:54,280 Memasukkannya ke dalam senarai itu disusun. 985 00:53:54,280 --> 00:53:56,230 Dan kemudian anda mencari seterusnya bilangan yang paling kecil. 986 00:53:56,230 --> 00:54:00,080 Dan kemudian anda terus melakukan itu dan sebagainya. 987 00:54:00,080 --> 00:54:04,600 >> Jadi jenis pemilihan pada dasarnya anda pilih setiap kali yang paling kecil 988 00:54:04,600 --> 00:54:05,750 nilai terisih. 989 00:54:05,750 --> 00:54:10,840 Letakkan di akhir disusun sebahagian daripada senarai. 990 00:54:10,840 --> 00:54:12,370 Dan terus melakukan itu. 991 00:54:12,370 --> 00:54:15,890 Jadi mari kita lihat apa yang cepat ini kelihatan seperti. 992 00:54:15,890 --> 00:54:19,340 Jadi di sini adalah yang disusun dan senarai terisih. 993 00:54:19,340 --> 00:54:23,350 >> Jadi untuk disusun dalam senarai, ia pada mulanya kosong. 994 00:54:23,350 --> 00:54:26,760 Dan kemudian saya akan pilih bilangan paling kecil di sini, 2. 995 00:54:26,760 --> 00:54:30,650 Jadi saya dapat nombor 2 dan saya meletakkan di depan senarai. 996 00:54:30,650 --> 00:54:34,910 Kemudian saya mencari yang paling kecil yang akan datang elemen, iaitu 3. 997 00:54:34,910 --> 00:54:37,050 Jadi saya meletakkan ia di hujung senarai itu disusun. 998 00:54:37,050 --> 00:54:38,140 Dan kemudian saya terus melakukan itu. 999 00:54:38,140 --> 00:54:40,040 Saya mencari 4 dan meletakkannya di akhir. 1000 00:54:40,040 --> 00:54:41,360 Cari 5 dan meletakkan ia pada akhir. 1001 00:54:41,360 --> 00:54:44,830 >> Dan melihat bagaimana semua masa-masa yang Saya berkata meletakkannya pada akhir adalah, 1002 00:54:44,830 --> 00:54:46,850 pada dasarnya, bertukar-tukar dua nilai. 1003 00:54:46,850 --> 00:54:48,100 OK? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 Dan kemudian yang terkini, anda hanya mempunyai satu unsur lagi. 1006 00:54:52,825 --> 00:54:55,870 Jadi ia sudah disusun. 1007 00:54:55,870 --> 00:54:57,800 >> OK, jadi sisipan jenis. 1008 00:54:57,800 --> 00:55:03,180 Semacam Insertion anda akan mempunyai juga bahawa perkara yang telah disusun dan 1009 00:55:03,180 --> 00:55:04,690 senarai terisih. 1010 00:55:04,690 --> 00:55:14,540 Satu-satunya perkara adalah bahawa setiap kali anda menambah elemen ke disusun 1011 00:55:14,540 --> 00:55:18,170 senarai, anda hanya memilih elemen yang adalah di hadapan senarai terisih. 1012 00:55:18,170 --> 00:55:20,880 Dan kemudian anda akan mencari apa yang kedudukan ia harus disusun dalam 1013 00:55:20,880 --> 00:55:22,300 sebahagian daripada senarai. 1014 00:55:22,300 --> 00:55:25,840 >> Mari kita lihat apa ini begitu ini lebih masuk akal. 1015 00:55:25,840 --> 00:55:29,360 Jadi pada mulanya, sebagai contoh, saya cuba untuk memasukkan nombor tiga dalam 1016 00:55:29,360 --> 00:55:30,680 sebahagian disusun senarai. 1017 00:55:30,680 --> 00:55:31,800 Jadi senarai ini tidak mempunyai apa-apa. 1018 00:55:31,800 --> 00:55:34,160 Jadi saya hanya boleh meletakkan bilangan 3. 1019 00:55:34,160 --> 00:55:37,480 >> Sekarang, saya mahu untuk menambah nombor 5 hingga bahagian yang disusun senarai. 1020 00:55:37,480 --> 00:55:38,900 Jadi saya melihat nombor 5. 1021 00:55:38,900 --> 00:55:40,450 Saya perhatikan bahawa itu lebih besar daripada 3. 1022 00:55:40,450 --> 00:55:41,980 Jadi saya tahu bahawa ia perlu selepas 3. 1023 00:55:41,980 --> 00:55:44,100 Jadi saya meletakkan 3 dan 5. 1024 00:55:44,100 --> 00:55:45,940 >> Kemudian saya ingin memasukkan nombor 2. 1025 00:55:45,940 --> 00:55:51,630 Saya perhatikan bahawa bilangan 2 adalah benar-benar bertahan maka kedua-dua 3 dan 5. 1026 00:55:51,630 --> 00:55:54,580 Jadi saya benar-benar perlu meletakkan ia semua Cara permulaan senarai. 1027 00:55:54,580 --> 00:55:59,030 Jadi saya perlu, jenis, beralih semua elemen dalam senarai disusun jadi saya boleh 1028 00:55:59,030 --> 00:56:01,970 membuat ruang untuk nombor 2. 1029 00:56:01,970 --> 00:56:03,160 >> Kemudian saya melihat jumlah 6. 1030 00:56:03,160 --> 00:56:05,450 Saya melihat bahawa ia harus selepas 5. 1031 00:56:05,450 --> 00:56:06,240 Jadi saya meletakkan di sana. 1032 00:56:06,240 --> 00:56:07,965 Dan akhirnya, saya melihat nombor 4. 1033 00:56:07,965 --> 00:56:11,030 Dan saya perasan yang sepatutnya di antara 3 dan 5. 1034 00:56:11,030 --> 00:56:14,870 Dan kemudian saya meletakkan di sana dan peralihan semua elemen-elemen lain. 1035 00:56:14,870 --> 00:56:16,120 Masuk akal? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Susun. 1038 00:56:19,150 --> 00:56:25,730 Jadi semacam gelembung pada asasnya apa yang anda akan do-- kita memanggilnya gelembung 1039 00:56:25,730 --> 00:56:30,113 jenis kerana anda pergi melalui list-- yang ia sebenarnya lebih baik jika saya hanya menunjukkan 1040 00:56:30,113 --> 00:56:32,300 anda suka this-- 1041 00:56:32,300 --> 00:56:35,030 dan anda akan membandingkan nombor bersebelahan. 1042 00:56:35,030 --> 00:56:38,410 Dan anda akan menukar mereka jawatan jika mereka tidak 1043 00:56:38,410 --> 00:56:39,190 dalam susunan yang betul. 1044 00:56:39,190 --> 00:56:42,570 >> Jadi, pada asasnya, apa yang akan berlaku di sini, sebagai contoh, 1045 00:56:42,570 --> 00:56:44,160 anda mempunyai 8 dan 6. 1046 00:56:44,160 --> 00:56:47,270 Anda tahu bahawa perintah itu akan disusun sebenarnya menjadi 6 dan 5, bukan? 1047 00:56:47,270 --> 00:56:49,540 Jadi anda akan menukar pesanan. 1048 00:56:49,540 --> 00:56:51,370 Kemudian saya lihat 8 dan 4 di sini. 1049 00:56:51,370 --> 00:56:52,250 Dan saya melakukan perkara yang sama. 1050 00:56:52,250 --> 00:56:53,400 Saya menukar semula. 1051 00:56:53,400 --> 00:56:55,070 Dan akhirnya, 2 dan 8. 1052 00:56:55,070 --> 00:56:56,670 Saya juga menukar mereka. 1053 00:56:56,670 --> 00:57:01,690 >> Ia dipanggil Bubble Susun kerana selepas setiap lelaran ini, sebenarnya, 1054 00:57:01,690 --> 00:57:05,910 bilangan terbesar dalam senarai mendapat semua jalan ke akhir senarai. 1055 00:57:05,910 --> 00:57:06,940 Adakah ini masuk akal? 1056 00:57:06,940 --> 00:57:11,880 Kerana ia memastikan pertukaran itu dan bergerak ke kanan. 1057 00:57:11,880 --> 00:57:14,440 >> OK, jadi ini adalah lelaran kedua. 1058 00:57:14,440 --> 00:57:17,200 Ia akan menjadi perkara yang sama. 1059 00:57:17,200 --> 00:57:20,190 Saya akan melakukan satu pertukaran dan kemudian yang terakhir. 1060 00:57:20,190 --> 00:57:23,290 Saya tidak ada tukar ganti dan senarai itu disusun. 1061 00:57:23,290 --> 00:57:27,460 Jadi dalam Bubble Susun, kita pada dasarnya menyimpan melalui senarai dan bertukar-tukar 1062 00:57:27,460 --> 00:57:32,310 perkara sehingga saya melihat bahawa saya tidak melakukan apa-apa pertukaran melakukan lelaran itu, yang 1063 00:57:32,310 --> 00:57:34,270 bermakna bahawa senarai sudah disusun. 1064 00:57:34,270 --> 00:57:35,520 Masuk akal? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Mari kita bercakap sedikit mengenai masa berjalan. 1067 00:57:40,870 --> 00:57:45,165 Jadi adakah anda semua masih ingat Big O, Omega, dan Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Yeah? 1070 00:57:50,990 --> 00:57:53,070 OK, apakah O Big, pertama sekali? 1071 00:57:53,070 --> 00:57:54,315 >> PENONTON: [didengar]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Ya, ia dipanggil kes paling teruk runtime, yang hanya bermakna bahawa itu 1073 00:57:59,070 --> 00:58:03,470 berapa banyak yang anda mengharapkan program ini untuk mengambil untuk menjalankan. 1074 00:58:03,470 --> 00:58:04,910 Seperti, dari segi daripada-- 1075 00:58:04,910 --> 00:58:06,660 dalam case-- ini n. 1076 00:58:06,660 --> 00:58:09,150 Bilangan elemen dalam senarai dalam kes yang paling teruk. 1077 00:58:09,150 --> 00:58:12,520 Seperti, dalam kes yang paling teruk mungkin. 1078 00:58:12,520 --> 00:58:17,100 >> Jadi untuk Bubble Susun, sebagai contoh, kita mempunyai O Big n persegi. 1079 00:58:17,100 --> 00:58:20,580 Mengapa kita mempunyai itu? 1080 00:58:20,580 --> 00:58:24,716 Mengapa Bubble Susun Big O n persegi? 1081 00:58:24,716 --> 00:58:27,614 >> PENONTON: [didengar]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Yeah, jadi mana-mana yang paling teruk akan bahawa saya akan perlu lakukan n lelaran. 1083 00:58:35,670 --> 00:58:39,260 Jadi setiap lelaran akan membawa unsur terbesar ke akhir 1084 00:58:39,260 --> 00:58:40,290 senarai. 1085 00:58:40,290 --> 00:58:44,230 Jadi mana-mana yang paling teruk ialah saya mempunyai untuk melakukan perkara yang n masa. 1086 00:58:44,230 --> 00:58:48,550 Dan untuk setiap masa-masa, saya perlu melakukan n swap kerana saya perlu membandingkan 1087 00:58:48,550 --> 00:58:49,870 setiap dua elemen. 1088 00:58:49,870 --> 00:58:53,730 Jadi itulah sebabnya ia n kuasa dua kerana ia n kali n. 1089 00:58:53,730 --> 00:59:00,120 >> Kemudian, jenis pemilihan juga n persegi kerana, untuk setiap lelaran, saya perlu 1090 00:59:00,120 --> 00:59:02,650 melihat setiap elemen tunggal dalam senarai. 1091 00:59:02,650 --> 00:59:04,980 Dan kemudian mencari yang paling kecil, yang bermaksud bahawa saya perlu 1092 00:59:04,980 --> 00:59:06,130 melihat melalui n elemen. 1093 00:59:06,130 --> 00:59:11,750 Dan saya perlu berbuat demikian n kali kerana Saya perlu memilih semua n elemen. 1094 00:59:11,750 --> 00:59:18,273 >> Satu jenis sisipan juga n persegi kerana senario kes paling teruk akan 1095 00:59:18,273 --> 00:59:20,950 berkenaan, satu, saya perlu memasukkan n nombor, bukan? 1096 00:59:20,950 --> 00:59:22,765 Jadi, saya sudah tahu bahawa saya akan mempunyai n lelaran. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Tetapi bagi setiap nombor-nombor, jika saya mempunyai untuk melihat semua nombor dalam 1099 00:59:29,840 --> 00:59:34,380 senarai disusun dan meletakkannya sepanjang jalan di hadapan, yang akan n persegi 1100 00:59:34,380 --> 00:59:36,230 kerana ia akan menjadi n kali n lagi. 1101 00:59:36,230 --> 00:59:38,280 Masuk akal? 1102 00:59:38,280 --> 00:59:41,512 Bagaimana Omega? 1103 00:59:41,512 --> 00:59:42,886 >> PENONTON: [didengar]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Ia senario yang terbaik. 1105 00:59:44,620 --> 00:59:48,810 Jadi ia seperti, dalam banyak kali untuk menyusun, senario kes terbaik ialah 1106 00:59:48,810 --> 00:59:50,660 apabila senarai itu sudah disusun. 1107 00:59:50,660 --> 00:59:52,670 Jadi anda tidak benar-benar mempunyai untuk melakukan apa-apa. 1108 00:59:52,670 --> 00:59:56,290 Bubble Susun mempunyai yang terbaik senario kes n. 1109 00:59:56,290 --> 00:59:58,820 Adakah anda semua tahu mengapa? 1110 00:59:58,820 --> 01:00:00,620 >> PENONTON: [didengar]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Ya, jika anda menjejaki sama ada catuan data mempunyai apa-apa pertukaran atau 1112 01:00:05,640 --> 01:00:10,533 tidak, jika anda mempunyai sesuatu seperti ditetapkan untuk benar jika ada lelaran, jika yang 1113 01:00:10,533 --> 01:00:15,140 senarai sudah disusun, pada dasarnya, apa yang akan berlaku adalah saya akan 1114 01:00:15,140 --> 01:00:17,890 cuba untuk menukar setiap dua unsur-unsur yang bersebelahan. 1115 01:00:17,890 --> 01:00:19,920 Saya akan melihat bahawa tiada swap. 1116 01:00:19,920 --> 01:00:21,230 Dan saya hanya kembali segera. 1117 01:00:21,230 --> 01:00:24,240 >> Jadi ia bermakna bahawa saya hanya terpaksa melalui senarai satu masa. 1118 01:00:24,240 --> 01:00:28,990 Jadi ia n kerana saya melihat di n elemen. 1119 01:00:28,990 --> 01:00:30,930 Kenapa pemilihan jenis n persegi? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Ya, walaupun senarai itu disusun, untuk setiap lelaran jenis pemilihan, saya 1122 01:00:45,520 --> 01:00:47,590 perlu memilih elemen yang minimum. 1123 01:00:47,590 --> 01:00:49,980 Ini bermakna bahawa saya keluar untuk melihat pada setiap unsur-unsur dalam terisih 1124 01:00:49,980 --> 01:00:53,350 menyenaraikan dan mencari minimum bagi setiap lelaran. 1125 01:00:53,350 --> 01:00:54,600 Adakah ini masuk akal? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> Dan pedang sisipan adalah n kerana dalam kes saya cuba untuk memasukkan 1128 01:01:04,690 --> 01:01:09,320 nombor dan semua nombor, apabila saya cuba untuk memasukkan mereka, saya melihat bahawa mereka 1129 01:01:09,320 --> 01:01:10,510 berada dalam kedudukan yang betul. 1130 01:01:10,510 --> 01:01:15,120 Saya tidak perlu pergi memeriksa semua lain nombor dalam senarai terisih. 1131 01:01:15,120 --> 01:01:17,170 Jadi itulah sebabnya ia akan menjadi n. 1132 01:01:17,170 --> 01:01:19,480 Masuk akal? 1133 01:01:19,480 --> 01:01:21,035 Dan apa yang theta? 1134 01:01:21,035 --> 01:01:23,410 >> PENONTON: [didengar]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Apa, maaf? 1136 01:01:24,380 --> 01:01:24,960 Katakanlah lagi. 1137 01:01:24,960 --> 01:01:25,666 >> PENONTON: [didengar]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Tepat sekali. 1139 01:01:26,490 --> 01:01:31,280 Jadi, anda boleh lihat bahawa hanya pilihan disimpan di Merge jenis mempunyai thetas. 1140 01:01:31,280 --> 01:01:39,920 Dan itu kerana anda hanya mempunyai theta jika kedua-dua Big O dan Omega adalah sama. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 Dan akhirnya, bergabung MENGASINGKAN dalam log n. 1143 01:01:44,210 --> 01:01:48,910 >> Dan kemudian, sebagai Dan telah berkata, Merge jenis jenis seperti cara yang sama 1144 01:01:48,910 --> 01:01:50,320 anda melakukan carian binari. 1145 01:01:50,320 --> 01:01:53,530 Oleh itu, anda mendapatkan senarai. 1146 01:01:53,530 --> 01:01:55,170 Dan anda akan dipotong dua. 1147 01:01:55,170 --> 01:02:00,580 Dan kemudian anda memotong mereka dalam bahagian yang lebih kecil. 1148 01:02:00,580 --> 01:02:01,730 Dan kemudian anda menggabungkan mereka. 1149 01:02:01,730 --> 01:02:02,960 Kalian ingat bahawa, bukan? 1150 01:02:02,960 --> 01:02:04,960 OK, kerana dia telah berkata. 1151 01:02:04,960 --> 01:02:08,330 >> OK, petunjuk. 1152 01:02:08,330 --> 01:02:11,078 Jadi apa penunjuk? 1153 01:02:11,078 --> 01:02:12,050 >> PENONTON: [didengar]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: Suatu alamat. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Saya tahu bahawa David menunjukkan sekumpulan video binky dan perkara menunjuk 1157 01:02:18,530 --> 01:02:19,080 satu sama lain. 1158 01:02:19,080 --> 01:02:22,960 Tetapi saya suka untuk memikirkan petunjuk semata-mata sebagai alamat. 1159 01:02:22,960 --> 01:02:26,110 Jadi ia adalah satu pembolehubah yang akan untuk menyimpan alamat. 1160 01:02:26,110 --> 01:02:31,940 >> Jadi ia hanya pembolehubah istimewa ini iaitu empat bait panjang. 1161 01:02:31,940 --> 01:02:36,550 Ingatlah, bahawa penunjuk apa-apa jua adalah sentiasa empat bait panjang untuk 32-bit kami 1162 01:02:36,550 --> 01:02:39,370 mesin supaya kes dengan perkakas. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 Dan ia hanya mempunyai lokasi yang pembolehubah di dalamnya. 1165 01:02:47,050 --> 01:02:50,240 >> OK, jadi memori ini, pada dasarnya. 1166 01:02:50,240 --> 01:02:57,420 Jadi setiap blok memori sebenarnya mempunyai label, yang merupakan alamat 1167 01:02:57,420 --> 01:02:58,890 memori slotty. 1168 01:02:58,890 --> 01:03:02,370 Ini bermakna bahawa saya boleh mempunyai yang menunjuk penunjuk kepada 1169 01:03:02,370 --> 01:03:03,380 mana-mana alamat-alamat ini. 1170 01:03:03,380 --> 01:03:09,930 Jadi sebab itulah kita akan menggunakan petunjuk adalah jika saya perlu ingat lokasi 1171 01:03:09,930 --> 01:03:12,300 bahawa pembolehubah tertentu adalah ingatan. 1172 01:03:12,300 --> 01:03:16,560 >> Dan kalian ingat bahawa salah seorang daripada mereka kes adalah jika saya mempunyai fungsi 1173 01:03:16,560 --> 01:03:20,820 jika saya benar-benar mahu anda swap untuk sahih, saya sebenarnya 1174 01:03:20,820 --> 01:03:22,110 perlu menghantar penunjuk. 1175 01:03:22,110 --> 01:03:23,460 Tidak berubah-ubah itu. 1176 01:03:23,460 --> 01:03:25,200 Adakah anda semua ingat bahawa? 1177 01:03:25,200 --> 01:03:26,450 Yang between-- perbezaan 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 apa nama? 1180 01:03:34,120 --> 01:03:36,010 Memanggil dengan nilai dan memanggil dengan merujuk, bukan? 1181 01:03:36,010 --> 01:03:36,840 >> OK, yeah. 1182 01:03:36,840 --> 01:03:38,330 Jadi panggilan oleh nilai. 1183 01:03:38,330 --> 01:03:43,570 Apabila anda hanya menghantar pembolehubah untuk berfungsi anda hanya menghantar nilai. 1184 01:03:43,570 --> 01:03:45,610 Jadi anda sebenarnya menghantar salinan pembolehubah. 1185 01:03:45,610 --> 01:03:49,720 Dan program anda tidak kisah kira-kira jika pembolehubah yang sama sebenarnya 1186 01:03:49,720 --> 01:03:51,650 membuat salinan. 1187 01:03:51,650 --> 01:03:56,330 >> Dan memanggil dengan merujuk bermakna Saya sebenarnya menghantar satu salinan 1188 01:03:56,330 --> 01:03:57,550 penunjuk kepada pembolehubah itu. 1189 01:03:57,550 --> 01:04:00,970 Jadi ia bermakna bahawa saya menghantar lokasi yang berubah-ubah. 1190 01:04:00,970 --> 01:04:04,440 Jadi rasa saya mempunyai lokasi berubah-ubah, apabila saya memanggil fungsi 1191 01:04:04,440 --> 01:04:09,700 dengan petunjuk, saya dapat benar-benar mengubah data yang berada di utama. 1192 01:04:09,700 --> 01:04:12,050 Masuk akal? 1193 01:04:12,050 --> 01:04:17,560 >> Walaupun, penunjuk adalah salinan, yang penunjuk masih mempunyai alamat sebenar 1194 01:04:17,560 --> 01:04:20,090 pembolehubah yang saya mahu kepada perubahan. 1195 01:04:20,090 --> 01:04:21,920 Masuk akal? 1196 01:04:21,920 --> 01:04:24,290 >> Jadi mewujudkan petunjuk. 1197 01:04:24,290 --> 01:04:28,410 Ingat, penunjuk sentiasa mempunyai jenis yang ia menunjuk 1198 01:04:28,410 --> 01:04:29,890 kepada dan kemudian bintang. 1199 01:04:29,890 --> 01:04:31,030 Dan kemudian anda meletakkan nama. 1200 01:04:31,030 --> 01:04:35,765 Jadi ingat bahawa bila-bila masa anda mempunyai apa sahaja bintang, ia seperti penunjuk kepada 1201 01:04:35,765 --> 01:04:38,990 bahawa apa sahaja yang boleh ubah menaip yang anda mempunyai. 1202 01:04:38,990 --> 01:04:42,850 >> Jadi di bintang, sebagai contoh, ia penunjuk dan integer. 1203 01:04:42,850 --> 01:04:47,680 Dan kemudian char bintang adalah penunjuk bintang char dan sebagainya. 1204 01:04:47,680 --> 01:04:47,960 Yeah? 1205 01:04:47,960 --> 01:04:52,710 >> PENONTON: Bagaimana jika kita mempunyai penunjuk kepada n untuk membintangi x. 1206 01:04:52,710 --> 01:04:55,255 Saya tahu bahawa mewujudkan penunjuk kepada x. 1207 01:04:55,255 --> 01:04:59,432 Adakah ia juga mengaku x integer? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, jadi apabila anda mengatakan n bintang x, anda tidak mewujudkan satu penuding kepada satu 1209 01:05:05,170 --> 01:05:06,000 x berubah-ubah. 1210 01:05:06,000 --> 01:05:08,170 Anda mewujudkan penunjuk dinamakan x. 1211 01:05:08,170 --> 01:05:09,396 >> PENONTON: [didengar]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Oleh itu, apabila saya katakan n bintang x, saya berkata, hey, dalam ingatan, saya akan 1213 01:05:14,250 --> 01:05:16,390 mendapatkan salah satu daripada tiga kotak. 1214 01:05:16,390 --> 01:05:20,750 Dan saya akan mengatakan bahawa yang akan menjadi x, yang 1215 01:05:20,750 --> 01:05:22,000 akan menjadi penunjuk. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 Dan sesuatu yang menarik tentang petunjuk ialah kita mengatakan bahawa mereka mempunyai 1218 01:05:30,640 --> 01:05:32,620 4 bytes untuk mesin 32-bit. 1219 01:05:32,620 --> 01:05:36,320 Dan sebab bagi yang kerana 4 bait adalah 32-bit. 1220 01:05:36,320 --> 01:05:40,490 >> Dan mesin yang 64 bit sebenarnya mempunyai alamat petunjuk 1221 01:05:40,490 --> 01:05:43,480 yang 64 bit panjang. 1222 01:05:43,480 --> 01:05:49,820 Jadi ia hanya bermaksud bahawa saiz alamat dalam mesin adalah berbeza. 1223 01:05:49,820 --> 01:05:52,270 >> Jadi rujukan dan penyahrujukan. 1224 01:05:52,270 --> 01:05:54,310 Terdapat dua syarikat yang kalian harus ingat. 1225 01:05:54,310 --> 01:05:55,450 Yang pertama adalah Ampersand. 1226 01:05:55,450 --> 01:05:56,810 Yang kedua adalah bintang. 1227 01:05:56,810 --> 01:06:05,060 Jangan keliru dengan bahawa bintang dan ini STAR kerana ingat bahawa, dalam 1228 01:06:05,060 --> 01:06:06,950 kes ini, anda perlu n bintang. 1229 01:06:06,950 --> 01:06:08,700 >> Ia seperti satu perkara yang keseluruhan bersama-sama. 1230 01:06:08,700 --> 01:06:10,720 Tidak ada ruang bintang n. 1231 01:06:10,720 --> 01:06:12,070 Jadi ia bermakna bahawa ia jenis. 1232 01:06:12,070 --> 01:06:14,870 Ingat, apabila anda mempunyai bintang yang berubah-ubah, anda 1233 01:06:14,870 --> 01:06:16,230 bercakap tentang jenis. 1234 01:06:16,230 --> 01:06:20,540 >> Apabila anda mempunyai hanya bintang dan kemudian nama pembolehubah, ia bermakna bahawa 1235 01:06:20,540 --> 01:06:24,100 anda penyahrujukan penunjuk, yang bermakna anda sedang mencari di 1236 01:06:24,100 --> 01:06:28,290 penunjuk, mencari alamat itu menunjuk ke, pergi ke alamat itu, 1237 01:06:28,290 --> 01:06:30,850 dan melihat bila-bila masa anda mempunyai di sana. 1238 01:06:30,850 --> 01:06:34,310 Jadi saya memberitahu pelajar saya bahawa apabila anda mempunyai bintang, anda harus berfikir bahawa itu 1239 01:06:34,310 --> 01:06:36,850 singkatan kandungan. 1240 01:06:36,850 --> 01:06:39,770 >> Jadi jika anda mempunyai penunjuk dan anda melakukan pointer bintang, ia adalah 1241 01:06:39,770 --> 01:06:41,720 kandungan penunjuk. 1242 01:06:41,720 --> 01:06:44,580 Oleh itu, anda pergi ke apa ia menunjuk ke dan melihat kandungan yang malar. 1243 01:06:44,580 --> 01:06:47,730 Dan Ampersand adalah sama perkara seperti alamat. 1244 01:06:47,730 --> 01:06:52,560 >> Jadi, jika saya mempunyai pembolehubah a-- seperti, mari mengatakan bahawa saya int yang sama 3-- 1245 01:06:52,560 --> 01:06:56,900 jika saya ingin mencari alamat yang pembolehubah ingatan, saya hanya boleh melakukan 1246 01:06:56,900 --> 01:06:58,240 Ampersand a. 1247 01:06:58,240 --> 01:07:00,280 Jadi ia satu alamat. 1248 01:07:00,280 --> 01:07:01,530 Masuk akal? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Jadi di sini adalah satu contoh. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Ini hilang b dan c int int. 1253 01:07:11,530 --> 01:07:16,520 Jadi int yang bersamaan 3 cara yang Saya akan pergi ke ingatan. 1254 01:07:16,520 --> 01:07:19,870 Dan saya akan untuk mencari slot yang dan meletakkan bilangan 3 di sini. 1255 01:07:19,870 --> 01:07:22,200 >> Dan kemudian int b bersamaan 4. 1256 01:07:22,200 --> 01:07:23,100 Saya akan melakukan perkara yang sama. 1257 01:07:23,100 --> 01:07:25,840 Pergi ke memori dan meletakkan sejumlah 4 dalam salah satu kotak. 1258 01:07:25,840 --> 01:07:27,100 Dan int sama 5. 1259 01:07:27,100 --> 01:07:29,740 Cari kotak yang lain dan meletakkan nombor 5. 1260 01:07:29,740 --> 01:07:36,160 >> Jadi apa baris ini melakukan keluar? n bintang setahun bersamaan Ampersand a. 1261 01:07:36,160 --> 01:07:37,800 Jadi pertama sekali, bintang n pa. 1262 01:07:37,800 --> 01:07:39,050 Apa yang ia lakukan? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> PENONTON: [didengar]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Yeah, jadi n bintang setahun, pertama, mengisytiharkan penunjuk yang dipanggil setahun. 1266 01:07:47,890 --> 01:07:53,720 Dan kemudian ia memberikan nilai penunjuk bahawa untuk menjadi alamat a. 1267 01:07:53,720 --> 01:07:55,790 Jadi Ampersand a. 1268 01:07:55,790 --> 01:07:58,510 Kemudian, jika saya lakukan pb bintang, apa itu pb bintang? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Oh, maaf. 1271 01:08:03,150 --> 01:08:06,330 Ini juga hilang. n pb bintang. 1272 01:08:06,330 --> 01:08:07,905 Maksud saya pc bintang. 1273 01:08:07,905 --> 01:08:11,200 Saya minta maaf. 1274 01:08:11,200 --> 01:08:11,940 Ia adalah perkara yang sama. 1275 01:08:11,940 --> 01:08:16,408 Tetapi sekarang saya baik ar mewujudkan penunjuk untuk b dan kemudian penunjuk kepada c. 1276 01:08:16,408 --> 01:08:16,886 Yeah? 1277 01:08:16,886 --> 01:08:18,136 >> PENONTON: [didengar]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Ya. 1280 01:08:26,670 --> 01:08:32,630 Jadi, jika anda pergi ke memori dan anda pergi ke kotak yang designator untuk setahun, 1281 01:08:32,630 --> 01:08:37,149 anda benar-benar pergi ke lihat alamat yang. 1282 01:08:37,149 --> 01:08:38,399 OK? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Yeah? 1285 01:08:43,300 --> 01:08:45,605 >> PENONTON: [didengar]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Yeah, penunjuk alamat. 1287 01:08:49,260 --> 01:08:50,120 Jangan sekali-kali lupa bahawa. 1288 01:08:50,120 --> 01:08:52,800 Ia seperti yang paling penting bahagian mengenai petunjuk. 1289 01:08:52,800 --> 01:08:56,180 Ada menyimpan dan alamat kepada beberapa pembolehubah. 1290 01:08:56,180 --> 01:08:56,890 Apa-apa lagi? 1291 01:08:56,890 --> 01:08:58,370 Apa-apa soalan lain? 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> Jadi Petunjuk dan Perlengkapan. 1294 01:09:00,399 --> 01:09:08,189 Ingatlah bahawa apabila saya melakukan int array 3, pada asasnya, apa yang saya lakukan adalah saya, jenis 1295 01:09:08,189 --> 01:09:12,779 daripada, mengisytiharkan dalam penunjuk. 1296 01:09:12,779 --> 01:09:18,960 Jadi pelbagai jenis seperti penunjuk kepada tempat tertentu dalam ingatan di mana saya 1297 01:09:18,960 --> 01:09:21,999 diperuntukkan tiga slot untuk integer. 1298 01:09:21,999 --> 01:09:23,430 Adakah ini masuk akal? 1299 01:09:23,430 --> 01:09:30,250 >> Oleh itu, apabila saya lakukan int array 3, apa yang saya lakukan, pada dasarnya, adalah mewujudkan tiga 1300 01:09:30,250 --> 01:09:31,479 slot dalam ingatan. 1301 01:09:31,479 --> 01:09:33,899 Jadi saya hanya mencari tiga slot dalam ingatan. 1302 01:09:33,899 --> 01:09:38,810 Jadi jika saya lakukan, maka, pelbagai bintang, ia pada asasnya bermakna kandungan array, 1303 01:09:38,810 --> 01:09:46,180 yang bermakna saya memadam penunjuk, saya pergi ke tempat itu bahawa ia menunjuk kepada, 1304 01:09:46,180 --> 01:09:47,939 dan saya meletakkan nombor satu. 1305 01:09:47,939 --> 01:09:53,729 >> Dan kemudian, jika saya melakukan pelbagai bintang tambahan 1, itulah perkara yang sama seperti melakukan pelbagai 1306 01:09:53,729 --> 01:09:59,690 kurungan satu, yang hanya bermakna saya pergi ke tempat yang ia menghala ke arah. 1307 01:09:59,690 --> 01:10:03,000 Kemudian ditambah 1 jenama saya beralih satu kedudukan. 1308 01:10:03,000 --> 01:10:06,510 Jadi saya pergi ke kedudukan ini, sebenarnya, dan meletakkan nombor dua. 1309 01:10:06,510 --> 01:10:10,900 >> Dan kemudian, akhirnya, apabila saya melakukan array ditambah 2, saya pergi ke mana 1310 01:10:10,900 --> 01:10:11,825 menunjuk array di. 1311 01:10:11,825 --> 01:10:14,690 Dan kemudian saya berpindah ke blok ingatan. 1312 01:10:14,690 --> 01:10:16,240 Kemudian saya meletakkan nombor tiga di sini. 1313 01:10:16,240 --> 01:10:16,600 Yeah? 1314 01:10:16,600 --> 01:10:21,400 >> PENONTON: array Jadi bintang semata-mata berkata mata yang pertama. 1315 01:10:21,400 --> 01:10:25,090 Dan anda boleh tambah 1, hanya kerana kami hanya benar-benar 1316 01:10:25,090 --> 01:10:27,295 rujukan bahawa alamat pertama. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Yeah. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Mengapa kita, sebagai contoh, berkata pelbagai 0, array 1, 2 dan lokasi? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Saya katakan, mengapa anda lakukan 0, 1, 2, 3 dan bukannya 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Salah satu sebab adalah, satu, komputer programmer memilih untuk memulakan 1323 01:10:46,550 --> 01:10:47,750 mengira dari 0. 1324 01:10:47,750 --> 01:10:52,370 Dua adalah kerana apabila anda melakukan pelbagai 0, ia adalah perkara yang sama seperti melakukan pelbagai 1325 01:10:52,370 --> 01:10:56,330 ditambah 0, yang bermaksud saya pergi ke kedudukan itu, dan saya tidak 1326 01:10:56,330 --> 01:10:59,320 melangkau mana-mana blok ingatan. 1327 01:10:59,320 --> 01:11:01,750 Jadi, saya tidak bergerak apa-apa blok ingatan. 1328 01:11:01,750 --> 01:11:02,015 Yeah? 1329 01:11:02,015 --> 01:11:03,265 >> PENONTON: [didengar]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Jadi dia bertanya apa yang perbezaan antara melakukan 1332 01:11:12,670 --> 01:11:14,000 ini atau melakukan malloc. 1333 01:11:14,000 --> 01:11:17,550 Salah satu perbezaan adalah bahawa int array 3 adalah mewujudkan 1334 01:11:17,550 --> 01:11:19,260 array dalam timbunan. 1335 01:11:19,260 --> 01:11:23,080 Dan apabila saya melakukan malloc, ia mewujudkan pada timbunan itu. 1336 01:11:23,080 --> 01:11:25,250 Adakah ini masuk akal? 1337 01:11:25,250 --> 01:11:28,870 >> Jadi bagaimana malloc benar-benar bekerja? 1338 01:11:28,870 --> 01:11:32,245 Jadi mengapa kita perlu untuk menggunakan malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Jenis pengkompil anda angka semua pembolehubah yang diisytiharkan. 1341 01:11:39,700 --> 01:11:44,040 Dan dia mencipta ruang untuk semua daripada mereka dalam tindanan. 1342 01:11:44,040 --> 01:11:47,180 Jadi semua pembolehubah anda akan menjadi suatu tempat di tindanan. 1343 01:11:47,180 --> 01:11:49,460 Jadi di sini adalah pembolehubah persekitaran. 1344 01:11:49,460 --> 01:11:53,850 >> Jadi, pada asasnya, ruang bagi mereka pembolehubah dalam ingatan diperuntukkan di 1345 01:11:53,850 --> 01:11:55,080 menyusun masa. 1346 01:11:55,080 --> 01:11:58,790 Jadi ia bermakna bahawa komputer anda mempunyai tahu semua orang-orang pembolehubah 1347 01:11:58,790 --> 01:11:59,790 terlebih dahulu. 1348 01:11:59,790 --> 01:12:02,500 Ia tidak perlu tahu apa yang nilai anda akan dimasukkan ke dalam mereka. 1349 01:12:02,500 --> 01:12:05,490 Tetapi ia perlu mengetahui bagaimana memori banyak yang anda perlukan. 1350 01:12:05,490 --> 01:12:09,380 >> Tetapi sekarang mari kita mengatakan bahawa, sebagai contoh, anda mencipta array atau mengambil 1351 01:12:09,380 --> 01:12:13,430 rentetan yang anda mengambil daripada pengguna. 1352 01:12:13,430 --> 01:12:17,300 Anda tidak tahu berapa lama tali akan menjadi, sebagai contoh. 1353 01:12:17,300 --> 01:12:20,600 Jadi anda tidak tahu berapa banyak blok memori anda memperuntukkan, bukan? 1354 01:12:20,600 --> 01:12:24,120 >> Oleh itu, ia tidak benar-benar masuk akal untuk anda untuk mengatakan meletakkan 100 aksara. 1355 01:12:24,120 --> 01:12:26,420 Kemudian apa jika pengguna menulis 150? 1356 01:12:26,420 --> 01:12:27,670 Anda akan diskru. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Jadi, pada asasnya, anda tidak boleh pastikan bagaimana memori banyak yang anda perlu memperuntukkan 1359 01:12:34,620 --> 01:12:35,960 apabila anda menyusun program ini. 1360 01:12:35,960 --> 01:12:38,240 Anda hanya tahu bahawa pada masa berjalan. 1361 01:12:38,240 --> 01:12:39,950 Jadi itulah sebabnya anda mempunyai timbunan itu. 1362 01:12:39,950 --> 01:12:47,610 Jadi timbunan itu akan mempunyai memori bahawa anda memperuntukkan semasa 1363 01:12:47,610 --> 01:12:50,810 tempoh program berjalan. 1364 01:12:50,810 --> 01:12:55,780 >> Jadi, pada asasnya, apabila anda melakukan malloc, apa yang anda lakukan memperuntukkan memori di 1365 01:12:55,780 --> 01:13:00,160 runtime, yang bermaksud bahawa anda memutuskan pada ketika itu bahawa anda 1366 01:13:00,160 --> 01:13:02,670 harus mempunyai memori itu. 1367 01:13:02,670 --> 01:13:04,210 Jadi, apabila anda memperuntukkan ia. 1368 01:13:04,210 --> 01:13:06,430 Adakah ini masuk akal? 1369 01:13:06,430 --> 01:13:11,690 >> Jadi ingat, tindanan mempunyai pembolehubah yang dicipta pada masa kompil. 1370 01:13:11,690 --> 01:13:14,560 Kemudian timbunan itu mempunyai pembolehubah yang dicipta seperti yang anda pergi 1371 01:13:14,560 --> 01:13:15,600 dengan malloc, sebagai contoh. 1372 01:13:15,600 --> 01:13:16,850 >> PENONTON: [didengar]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Jadi GetString adalah akan memanggil malloc. 1375 01:13:24,340 --> 01:13:26,710 Biar saya bercakap tentang malloc, dan Saya akan menjelaskan GetString. 1376 01:13:26,710 --> 01:13:32,000 Jadi malloc adalah perkara yang sama sebagai peruntukan ingatan. 1377 01:13:32,000 --> 01:13:34,600 Jadi ia akan memperuntukkan ingatan pada timbunan itu. 1378 01:13:34,600 --> 01:13:40,010 Dan ia akan kembali penunjuk kepada di mana memori yang telah diperuntukkan di. 1379 01:13:40,010 --> 01:13:43,090 >> Oleh itu, apabila anda do-- 1380 01:13:43,090 --> 01:13:44,910 di sini untuk example-- 1381 01:13:44,910 --> 01:13:45,830 n pointer bintang. 1382 01:13:45,830 --> 01:13:50,520 Kemudian penunjuk sama malloc Saiz kali inci 10. 1383 01:13:50,520 --> 01:13:52,110 Saya mewujudkan penunjuk. 1384 01:13:52,110 --> 01:13:59,020 Kemudian saya memberikan yang penunjuk kepada nilai penunjuk yang malloc 1385 01:13:59,020 --> 01:13:59,680 memberi saya. 1386 01:13:59,680 --> 01:14:04,150 >> Jadi saya meminta malloc boleh anda memperuntukkan ruang untuk 10 integer. 1387 01:14:04,150 --> 01:14:05,390 Itulah apa yang ia berkata. 1388 01:14:05,390 --> 01:14:09,020 Dan malloc memberikan saya kembali penunjuk ke tempat itu. 1389 01:14:09,020 --> 01:14:11,460 Masuk akal? 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 Saya Dan GetString adalah, pada dasarnya, melakukan panggilan untuk malloc supaya anda boleh memperuntukkan 1392 01:14:17,940 --> 01:14:21,680 memori semasa runtime. 1393 01:14:21,680 --> 01:14:26,460 >> Sentiasa ingat untuk memeriksa null kerana malloc akan kembali null 1394 01:14:26,460 --> 01:14:28,200 jika ia tidak dapat memperuntukkan ingatan. 1395 01:14:28,200 --> 01:14:31,660 Mari kita mengatakan bahawa anda meminta yang tidak masuk akal jumlah memori. 1396 01:14:31,660 --> 01:14:33,950 Komputer anda tidak akan menjadi mampu memperuntukkan sebanyak itu. 1397 01:14:33,950 --> 01:14:36,410 >> Jadi malloc hanya akan untuk kembali null. 1398 01:14:36,410 --> 01:14:42,210 Jadi sentiasa ingat untuk memeriksa jika penunjuk bahawa anda mendapat dari malloc adalah 1399 01:14:42,210 --> 01:14:45,640 batal atau tidak kerana, jika ia adalah, anda mungkin akan penyahrujukan penunjuk dan 1400 01:14:45,640 --> 01:14:48,340 menyebabkan kerosakan sampingan. 1401 01:14:48,340 --> 01:14:50,930 Dan akhirnya, jangan lupa memori anda. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc mewujudkan ingatan dalam timbunan itu. 1404 01:15:00,560 --> 01:15:03,436 Dan anda perlu untuk membebaskan memori sebelum program berakhir. 1405 01:15:03,436 --> 01:15:05,370 OK, itu sahaja bagi saya. 1406 01:15:05,370 --> 01:15:07,900 Maaf, Rob. 1407 01:15:07,900 --> 01:15:07,950 Terima kasih. 1408 01:15:07,950 --> 01:15:09,878 >> [Tepuk tangan] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Mana-mana soalan lepas sebelum Rob datang? 1410 01:15:12,679 --> 01:15:13,138 Tidak? 1411 01:15:13,138 --> 01:15:13,597 Yeah? 1412 01:15:13,597 --> 01:15:15,892 >> PENONTON: Saya tidak melihat ini satu talian. 1413 01:15:15,892 --> 01:15:17,269 Telah anda muat naik lagi? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Saya rasa Dave adalah memuat naik tidak lama lagi. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: Ia akan disiarkan. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Ia akan berada dalam talian. 1417 01:15:20,310 --> 01:15:21,175 >> PENONTON: Terpulang. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: Terpulang? 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 Yeah? 1421 01:15:23,644 --> 01:15:27,053 >> PENONTON: [didengar]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Ya, anda perlu membebaskan semua memori yang dimasukkan ke dalam timbunan itu. 1423 01:15:30,285 --> 01:15:31,535 >> PENONTON: [didengar]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Ya. 1426 01:15:36,160 --> 01:15:39,980 Bila-bila masa yang anda mempunyai malloc budaya, anda perlu mempunyai budaya yang bebas 1427 01:15:39,980 --> 01:15:42,640 selepas anda berhenti menggunakan pembolehubah itu. 1428 01:15:42,640 --> 01:15:44,800 Jadi malloc dan percuma sentiasa bersama-sama. 1429 01:15:44,800 --> 01:15:45,410 Rakan-rakan mereka yang terbaik. 1430 01:15:45,410 --> 01:15:46,720 Yeah. 1431 01:15:46,720 --> 01:15:47,970 Rob? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Saya akan pergi dengan cepat. 1434 01:15:56,850 --> 01:16:00,466 Dan juga video yang akan diletakkan. 1435 01:16:00,466 --> 01:16:01,716 Saya mempunyai mikrofon pada. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, jadi minggu lima barangan. 1438 01:16:26,230 --> 01:16:27,970 Perkara pertama yang kita perlu adalah tindanan. 1439 01:16:27,970 --> 01:16:33,390 Jadi ingat bahawa hanya ada satu stack bingkai setiap panggilan fungsi aktif. 1440 01:16:33,390 --> 01:16:34,710 Kita akan melihat bahawa dalam saat. 1441 01:16:34,710 --> 01:16:37,850 Dan juga ingat apa yang sebenarnya pergi dalam setiap bingkai tindanan akan menjadi 1442 01:16:37,850 --> 01:16:41,880 pembolehubah tempatan fungsi kami, hujah-hujah yang berlalu ke kami 1443 01:16:41,880 --> 01:16:43,880 fungsi, bersama-sama dengan pasangan perkara-perkara lain yang anda tidak benar-benar 1444 01:16:43,880 --> 01:16:45,260 perlu bimbang tentang. 1445 01:16:45,260 --> 01:16:50,950 >> Jadi di sini adalah satu contoh di mana program, notis, utama printfing pulangan 1446 01:16:50,950 --> 01:16:52,830 nilai foo 4. 1447 01:16:52,830 --> 01:16:57,930 foo hanya akan mengembalikan nilai bar 4 koma 6. 1448 01:16:57,930 --> 01:17:02,380 Dan bar akan menetapkan beberapa tempatan n pembolehubah sama dengan 4 kali 6. 1449 01:17:02,380 --> 01:17:03,920 Dan kemudian kembali n. 1450 01:17:03,920 --> 01:17:09,130 >> Jadi mari kita lihat timbunan sepanjang lelaran sebenar program ini. 1451 01:17:09,130 --> 01:17:10,500 Jadi ada bahagian bawah timbunan kita. 1452 01:17:10,500 --> 01:17:12,620 Ingatlah bahawa tindanan membesar. 1453 01:17:12,620 --> 01:17:15,370 Jadi di bahagian bawah timbunan kami, kami mempunyai bingkai tindanan untuk utama. 1454 01:17:15,370 --> 01:17:17,000 Apabila program ini bermula, utama sentiasa akan berada di 1455 01:17:17,000 --> 01:17:18,560 bawah timbunan kita. 1456 01:17:18,560 --> 01:17:20,880 >> Dan apa yang di dalam kita stack rangka untuk utama? 1457 01:17:20,880 --> 01:17:23,810 Jadi walaupun tiada tempatan pembolehubah utama, seperti yang saya katakan sebelum ini, 1458 01:17:23,810 --> 01:17:29,670 kami telah argc dan RGV mengambil ruang bahagian dalam bingkai tindanan utama. 1459 01:17:29,670 --> 01:17:33,260 Jadi utama kini akan memanggil fungsi foo itu. 1460 01:17:33,260 --> 01:17:35,125 Dan itu bererti foo akan dapatkan rangka timbunan sendiri. 1461 01:17:35,125 --> 01:17:36,970 >> Jadi sekarang kita di dalam yang foo fungsi. 1462 01:17:36,970 --> 01:17:38,610 Dan apa yang perlu ada dalam bingkai tindanan foo ini? 1463 01:17:38,610 --> 01:17:41,100 Nah, foo mempunyai hujah n. 1464 01:17:41,100 --> 01:17:45,440 Dan n adalah sama dengan 4 sejak itulah yang utama berlalu sebagai hujah foo ini. 1465 01:17:45,440 --> 01:17:48,490 >> Jadi sekarang foo akan memanggil bar. 1466 01:17:48,490 --> 01:17:52,070 Apa yang bar akan mempunyai di dalam bingkai tindanan sahamnya? 1467 01:17:52,070 --> 01:17:55,610 Ia mempunyai x sama dengan 4 y sama dengan enam. 1468 01:17:55,610 --> 01:17:58,540 Bukan itu yang kita akan mempunyai dalam bingkai tindanan kerana bar 1469 01:17:58,540 --> 01:18:00,580 juga mempunyai pembolehubah n tempatan. 1470 01:18:00,580 --> 01:18:03,370 Dan n kita akan ditetapkan sama dengan 24. 1471 01:18:03,370 --> 01:18:05,750 >> Jadi sekarang bar akan kembali n. 1472 01:18:05,750 --> 01:18:09,300 Jadi bar kembali 24 hingga yang foo bingkai tindanan. 1473 01:18:09,300 --> 01:18:12,560 Dan kerana bar kini kembali semula, yang bermakna kita muncul bingkai tindanan 1474 01:18:12,560 --> 01:18:14,250 untuk bar kira tindanan. 1475 01:18:14,250 --> 01:18:18,430 Jadi semua memori yang bar telah menggunakan kini off tindanan. 1476 01:18:18,430 --> 01:18:21,550 >> Sekarang, foo juga akan untuk kembali 24 hingga utama. 1477 01:18:21,550 --> 01:18:25,470 Jadi sekarang foo yang kembali, memori foo yang menggunakan dalam 'yang 1478 01:18:25,470 --> 01:18:27,550 bingkai tindanan juga hilang. 1479 01:18:27,550 --> 01:18:29,660 Dan sekarang, utama akan memanggil printf. 1480 01:18:29,660 --> 01:18:31,660 Jadi printf hanya fungsi yang lain. 1481 01:18:31,660 --> 01:18:35,320 Apabila kita panggil printf, ia akan menjadi lain bingkai tindanan untuk printf yang 1482 01:18:35,320 --> 01:18:36,470 panggilan fungsi. 1483 01:18:36,470 --> 01:18:37,990 >> Apa yang kita lulus printf? 1484 01:18:37,990 --> 01:18:40,090 Itulah apa yang akan pergi pada frame timbunan itu. 1485 01:18:40,090 --> 01:18:44,970 Sekurang-kurangnya, kami lulus peratus yang i backslash n dan 1486 01:18:44,970 --> 01:18:47,180 hujah 24. 1487 01:18:47,180 --> 01:18:50,370 Ia mungkin mempunyai lebih banyak ia bingkai tindanan printf jika berlaku akan menggunakan beberapa 1488 01:18:50,370 --> 01:18:51,200 pembolehubah tempatan. 1489 01:18:51,200 --> 01:18:51,920 Kita tidak tahu. 1490 01:18:51,920 --> 01:18:53,810 >> Tetapi apa yang masuk dalam printf ini stack bingkai. 1491 01:18:53,810 --> 01:18:55,740 Ia akan melaksanakan printf itu. 1492 01:18:55,740 --> 01:18:56,830 Kemudian printf dilakukan. 1493 01:18:56,830 --> 01:18:57,820 Ia akan kembali. 1494 01:18:57,820 --> 01:18:58,960 Akhir sekali, utama dilakukan. 1495 01:18:58,960 --> 01:18:59,860 Utama akan kembali. 1496 01:18:59,860 --> 01:19:02,020 Kemudian program kami dilakukan. 1497 01:19:02,020 --> 01:19:02,480 Yeah? 1498 01:19:02,480 --> 01:19:04,505 >> PENONTON: Adakah anda melihat [didengar] 1499 01:19:04,505 --> 01:19:05,900 hujah [didengar] 1500 01:19:05,900 --> 01:19:06,830 parameter? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Jadi terdapat perbezaan halus antara hujah dan parameter. 1502 01:19:09,970 --> 01:19:14,400 Dan benar-benar, dalam bercakap biasa, orang cenderung hanya campuran mereka sepanjang masa. 1503 01:19:14,400 --> 01:19:17,550 Tetapi parameter formal menamakan satu perkara. 1504 01:19:17,550 --> 01:19:20,180 >> Jadi argc dan argv adalah parameter utama. 1505 01:19:20,180 --> 01:19:23,440 Hujah adalah apa yang anda benar-benar lulus dalam seperti orang-orang parameter. 1506 01:19:23,440 --> 01:19:28,340 Jadi di sana apabila saya menyeru foo 4, 4 adalah hujah yang saya lulus dalam. 1507 01:19:28,340 --> 01:19:31,460 Dan parameter n, di dalam foo, mengambil pada nilai 4 1508 01:19:31,460 --> 01:19:32,880 sejak 4 adalah hujah. 1509 01:19:32,880 --> 01:19:35,826 >> PENONTON: [didengar]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n adalah pembolehubah tempatan bagi menghalang. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n masih tempatan untuk foo, tetapi ia adalah parameter kepada foo. 1513 01:19:44,960 --> 01:19:48,190 Ia bukan satu pembolehubah tempatan. 1514 01:19:48,190 --> 01:19:48,546 Yeah? 1515 01:19:48,546 --> 01:19:51,180 >> PENONTON: [didengar]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: bar foo hanya memanggil dan kembali apa bar pulangan. 1517 01:19:55,400 --> 01:19:56,786 >> PENONTON: [didengar]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Ya, hanya untuk melihat pelbagai stack bingkai. 1519 01:19:59,591 --> 01:20:00,082 Yeah? 1520 01:20:00,082 --> 01:20:03,519 >> PENONTON: Mengapa foo dipanggil sebelum printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Mengapa foo dipanggil sebelum printf? 1522 01:20:05,920 --> 01:20:10,740 Jadi saya boleh mempunyai, sebaliknya, melakukan sesuatu seperti int x sama foo 4 1523 01:20:10,740 --> 01:20:12,980 dan kemudian x dicetak. 1524 01:20:12,980 --> 01:20:17,900 Tetapi sebaliknya, saya menggabungkan fungsi panggilan ke hujah printf itu. 1525 01:20:17,900 --> 01:20:23,670 >> Tetapi melihat bahawa kita tidak boleh benar-benar melaksanakan panggilan untuk printf sehingga kita 1526 01:20:23,670 --> 01:20:25,610 memikirkan apa foo 4 adalah. 1527 01:20:25,610 --> 01:20:27,480 Jadi, kita akan menilai ini. 1528 01:20:27,480 --> 01:20:32,504 Dan hanya sekali yang dilakukan akan untuk kembali dan menilai ini. 1529 01:20:32,504 --> 01:20:32,990 Yeah? 1530 01:20:32,990 --> 01:20:37,364 >> PENONTON: Oleh kerana kedua-dua bar [didengar] 1531 01:20:37,364 --> 01:20:41,738 nilai, mengapa kita tidak mempunyai [didengar]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Mereka benar-benar harus int. 1533 01:20:44,400 --> 01:20:46,260 Yang tidak ditangkap lebih pelbagai laluan. 1534 01:20:46,260 --> 01:20:49,010 Jadi ia harus bar dan int int foo kerana kedua-dua orang-orang 1535 01:20:49,010 --> 01:20:50,460 kembali integer. 1536 01:20:50,460 --> 01:20:54,214 Tidak sah hanya jika mereka tidak akan untuk kembali nilai-nilai sebenar. 1537 01:20:54,214 --> 01:20:54,692 Yeah? 1538 01:20:54,692 --> 01:20:58,038 >> PENONTON: Jika anda mempunyai garis di atas penyata itu, [didengar]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: Satu barisan di atas pulangan? 1541 01:21:03,730 --> 01:21:04,410 >> PENONTON: Yeah. 1542 01:21:04,410 --> 01:21:10,780 Seperti jika anda lakukan printf dan [didengar], ia akan mencetak dua kali? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Jadi bahagian dalam foo? 1544 01:21:12,992 --> 01:21:15,945 Jika kita mempunyai printf hak di sini? 1545 01:21:15,945 --> 01:21:16,750 >> PENONTON: Yeah. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Jadi, jika kita mempunyai hak printf di sini, ia akan mencetak sekali. 1547 01:21:19,510 --> 01:21:23,400 Oleh kerana kita memanggil foo sekali hak sini, maka kita akan terkena printf itu. 1548 01:21:23,400 --> 01:21:24,620 Maka kita akan panggil bar. 1549 01:21:24,620 --> 01:21:25,710 Dan kemudian foo akan kembali. 1550 01:21:25,710 --> 01:21:26,275 Dan itu sahaja. 1551 01:21:26,275 --> 01:21:30,985 Kami hanya pernah menghadapi printf sekali. 1552 01:21:30,985 --> 01:21:31,482 Yeah? 1553 01:21:31,482 --> 01:21:32,973 >> PENONTON: [didengar] 1554 01:21:32,973 --> 01:21:37,950 printf memanggil foo kerana kami pertama memanggil printf dan kemudian kita lulus 1555 01:21:37,950 --> 01:21:38,580 hujah-hujah. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Jadi, dalam teori, tidak printf memanggil foo? 1557 01:21:40,960 --> 01:21:42,220 Jadi tidak. 1558 01:21:42,220 --> 01:21:47,360 Hanya perintah yang c akan melaksanakan perkara-perkara ini adalah, sebelum kita boleh 1559 01:21:47,360 --> 01:21:49,800 memanggil fungsi, semua hujah-hujah ke fungsi yang perlu 1560 01:21:49,800 --> 01:21:51,600 dinilai sepenuhnya. 1561 01:21:51,600 --> 01:21:53,540 Jadi ini adalah dinilai sepenuhnya? 1562 01:21:53,540 --> 01:21:54,610 Ya, ia hanya rentetan. 1563 01:21:54,610 --> 01:21:55,480 Ia hanya nilai. 1564 01:21:55,480 --> 01:21:57,200 >> Maka kita perlu benar-benar menilai ini. 1565 01:21:57,200 --> 01:21:59,720 Setelah ini dilakukan, kini semua hujah-hujah yang dinilai. 1566 01:21:59,720 --> 01:22:01,982 Dan sekarang kita boleh membuat panggilan untuk printf. 1567 01:22:01,982 --> 01:22:02,478 Yeah? 1568 01:22:02,478 --> 01:22:03,966 >> PENONTON: Satu soalan. 1569 01:22:03,966 --> 01:22:06,942 Jika anda mempunyai fungsi tidak sah, mesti anda mempunyai pulangan koma bernoktah? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Anda tidak koma bertitik pulangan jika anda mempunyai fungsi tidak sah. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 OK. 1573 01:22:14,780 --> 01:22:15,830 Jadi sekarang beberapa barangan timbunan. 1574 01:22:15,830 --> 01:22:19,640 Jadi tumpukan ialah bagaimana kita akan menangani dengan pengurusan ingatan dinamik. 1575 01:22:19,640 --> 01:22:23,100 Dan ini berbeza langsung dengan timbunan yang mana kita panggil automatik 1576 01:22:23,100 --> 01:22:24,100 pengurusan ingatan. 1577 01:22:24,100 --> 01:22:27,140 >> Jadi pada timbunan, anda tidak benar-benar mempunyai untuk menangani bagaimana pembolehubah tempatan 1578 01:22:27,140 --> 01:22:30,400 terpaksa masuk dan muncul diskaun semua ini bingkai tindanan dan semua barangan itu. 1579 01:22:30,400 --> 01:22:31,070 Anda tidak perlu bimbang mengenainya. 1580 01:22:31,070 --> 01:22:32,070 Ia secara automatik. 1581 01:22:32,070 --> 01:22:36,990 Jadi timbunan itu manual. 1582 01:22:36,990 --> 01:22:38,070 Dan [didengar] 1583 01:22:38,070 --> 01:22:41,260 datang daripada fungsi-fungsi ini malloc dan percuma. 1584 01:22:41,260 --> 01:22:43,550 >> Jadi di sini adalah satu lagi program. 1585 01:22:43,550 --> 01:22:47,145 Semua yang kami lakukan adalah mallocing integer. 1586 01:22:47,145 --> 01:22:49,360 Kami menyimpannya dalam bintang x. 1587 01:22:49,360 --> 01:22:52,520 Sudah tentu, kita perlu menyemak untuk melihat jika x adalah batal. 1588 01:22:52,520 --> 01:22:56,400 Kemudian kita akan hanya menetapkan apa x menunjuk ke 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Cetak apa x menunjuk ke, x cetak, dan kemudian bebas x. 1591 01:23:03,260 --> 01:23:08,920 >> Jadi bagaimana ini sebenarnya akan melihat jika kita melihat timbunan dan timbunan kita? 1592 01:23:08,920 --> 01:23:10,950 Jadi kita akan bermula sekali lagi. 1593 01:23:10,950 --> 01:23:12,580 Bahagian bawah timbunan kami seperti dahulu. 1594 01:23:12,580 --> 01:23:15,930 Ingatlah bahawa kamu lalu ditimbunkannya secara langsung menentang tindanan? 1595 01:23:15,930 --> 01:23:18,850 Jadi, kita akan mempunyai atas timbunan kami di sana. 1596 01:23:18,850 --> 01:23:22,590 >> Jadi bahagian bawah timbunan kami, kami mempunyai bingkai tindanan kami untuk utama. 1597 01:23:22,590 --> 01:23:28,000 Ia mempunyai ruang untuk argc, argv, dan kami kini mempunyai x pembolehubah tempatan, yang 1598 01:23:28,000 --> 01:23:30,030 adalah bintang int. 1599 01:23:30,030 --> 01:23:32,240 Jadi kita akan melelar melalui program ini. 1600 01:23:32,240 --> 01:23:34,420 Perkara pertama yang kita ada adalah panggilan kepada malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Jadi, kita membuat panggilan kepada malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc adalah fungsi. 1603 01:23:37,100 --> 01:23:38,770 Ia akan mendapatkan bingkai tindanan. 1604 01:23:38,770 --> 01:23:40,180 Apa yang kita berpindah kepada malloc? 1605 01:23:40,180 --> 01:23:41,610 Itu akan masuk ke dalam bingkai tindanan. 1606 01:23:41,610 --> 01:23:45,130 Kami lulus saiz n, iaitu 4. 1607 01:23:45,130 --> 01:23:49,700 Supaya diluluskan untuk malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Apakah malloc lakukan? 1609 01:23:50,910 --> 01:23:53,820 Ia menangkap kami sedikit ruang pada timbunan itu. 1610 01:23:53,820 --> 01:23:55,320 Jadi, kita akan pergi ke timbunan itu. 1611 01:23:55,320 --> 01:23:57,990 Dan kita akan merebut 4 bait dari timbunan itu. 1612 01:23:57,990 --> 01:24:01,500 Jadi mari kita hanya memberi yang alamat sewenang-wenangnya. 1613 01:24:01,500 --> 01:24:06,680 0x123 Hanya berpura-pura bahawa adalah alamat yang ada di timbunan itu. 1614 01:24:06,680 --> 01:24:12,300 >> Jadi apa yang sebenarnya di dalam itu rantau memori di alamat Ox123? 1615 01:24:12,300 --> 01:24:13,080 Sampah. 1616 01:24:13,080 --> 01:24:15,270 Oleh itu, kita telah tidak disimpan apa-apa di dalamnya. 1617 01:24:15,270 --> 01:24:18,830 Jadi sebagaimana yang kita tahu, ia boleh menjadi apa-apa. 1618 01:24:18,830 --> 01:24:20,560 Anda tidak harus menganggap ia sifar. 1619 01:24:20,560 --> 01:24:23,870 Ia paling tidak mungkin sifar. 1620 01:24:23,870 --> 01:24:26,260 >> Pulangan Jadi sekarang malloc. 1621 01:24:26,260 --> 01:24:28,020 Dan apa yang kita lakukan apabila malloc pulangan? 1622 01:24:28,020 --> 01:24:29,800 Kami menetapkan apa yang ia kembali. 1623 01:24:29,800 --> 01:24:32,290 Kami menetapkan x sama dengan apa yang ia kembali. 1624 01:24:32,290 --> 01:24:33,690 Jadi apa yang ia kembali? 1625 01:24:33,690 --> 01:24:38,150 Ia kembali 0x123 sejak iaitu alamat blok memori yang ia 1626 01:24:38,150 --> 01:24:40,850 hanya diperuntukkan dalam timbunan itu. 1627 01:24:40,850 --> 01:24:47,160 >> Jadi kembali 0x123 x kini akan ditetapkan sama dengan 0x123 yang, bergambar, 1628 01:24:47,160 --> 01:24:52,940 kita sering menarik kerana x mempunyai sebenar arrow menunjuk ke blok itu. 1629 01:24:52,940 --> 01:24:55,820 Tetapi x hanya menyimpan alamat itu. 1630 01:24:55,820 --> 01:24:58,670 Jadi sekarang kita perlu memeriksa jika x adalah batal. 1631 01:24:58,670 --> 01:24:59,120 Ia bukan null. 1632 01:24:59,120 --> 01:25:02,170 Kami berpura-pura bahawa malloc yang berjaya. 1633 01:25:02,170 --> 01:25:04,950 >> Jadi sekarang bintang x sama 50. 1634 01:25:04,950 --> 01:25:08,450 Jadi bintang ingat ia bermakna pergi ke alamat itu. 1635 01:25:08,450 --> 01:25:12,700 Jadi 0x123 Kami akan pergi ke alamat itu. 1636 01:25:12,700 --> 01:25:14,660 Justeru, berbalik di sana. 1637 01:25:14,660 --> 01:25:16,310 Apa yang kita lakukan di alamat itu? 1638 01:25:16,310 --> 01:25:19,020 Kami menyimpan 50. 1639 01:25:19,020 --> 01:25:22,500 >> Jadi selepas baris ini, itulah yang perkara-perkara yang akan kelihatan seperti. 1640 01:25:22,500 --> 01:25:24,640 Jadi sekarang ia tidak lagi sampah di sana. 1641 01:25:24,640 --> 01:25:28,910 Sekarang kita tahu bahawa 50 adalah kerana alamat tertentu kerana 1642 01:25:28,910 --> 01:25:32,410 kita menetapkannya untuk itu. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 Jadi sekarang kita akan mencetak f. 1645 01:25:34,370 --> 01:25:38,490 >> Oleh itu kita akan mencetak bintang x. 1646 01:25:38,490 --> 01:25:39,640 Jadi apa yang adalah bintang x? 1647 01:25:39,640 --> 01:25:44,300 Sekali lagi, bintang x bermakna pergi ke perkara yang x menunjuk ke. 1648 01:25:44,300 --> 01:25:47,140 Jadi x menyimpan 0x123 Pergi ke itu. 1649 01:25:47,140 --> 01:25:48,490 Kita mendapat 50. 1650 01:25:48,490 --> 01:25:50,540 Jadi mencetak f itu. 1651 01:25:50,540 --> 01:25:54,900 Dan itu bererti ia akan mencetak 50. 1652 01:25:54,900 --> 01:25:56,850 Dan kemudian yang mengembalikan. 1653 01:25:56,850 --> 01:25:58,340 >> Dan kemudian kita mempunyai printf kedua. 1654 01:25:58,340 --> 01:25:59,370 Kami kini peratus p. 1655 01:25:59,370 --> 01:26:01,680 Jika anda tidak melihat, itu bagaimana anda mencetak penunjuk. 1656 01:26:01,680 --> 01:26:04,960 Jadi kita mempunyai peratus i, peratus f, dan semua orang-orang sudah. 1657 01:26:04,960 --> 01:26:07,160 Jadi peratus p, mencetak penunjuk. 1658 01:26:07,160 --> 01:26:08,920 >> Jadi x adalah penunjuk. 1659 01:26:08,920 --> 01:26:13,440 Jadi jika kita akan mencetak x sendiri, kami mencetak apa yang sebenarnya di dalam 1660 01:26:13,440 --> 01:26:19,220 x, yang adalah 0x123 Jadi yang pertama cetak f akan mencetak 50. 1661 01:26:19,220 --> 01:26:23,620 Cetakan kedua f akan untuk mencetak 0x123 Yeah? 1662 01:26:23,620 --> 01:26:27,460 >> PENONTON: Adakah anda menggunakan peratus x mencetak penunjuk? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Jadi anda menggunakan peratus x mencetak penunjuk? 1664 01:26:31,200 --> 01:26:38,350 Jadi anda boleh tetapi peratus x adil, secara amnya, untuk seperti jika anda mempunyai beberapa 1665 01:26:38,350 --> 01:26:40,325 integer dan anda ingin cetak sebagai perenambelasan a. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 Itu hanya cara melakukannya. 1668 01:26:44,880 --> 01:26:47,160 >> Manakala peratus akan d mencetak sebagai perpuluhan. 1669 01:26:47,160 --> 01:26:50,310 Itu adalah Kami mendapatkan peratus d. i hanya integer. 1670 01:26:50,310 --> 01:26:52,690 p peratus adalah khusus untuk petunjuk. 1671 01:26:52,690 --> 01:26:54,060 >> Jadi x adalah penunjuk. 1672 01:26:54,060 --> 01:26:56,360 Kami mahu menggunakan peratus p. 1673 01:26:56,360 --> 01:26:57,937 Tetapi peratus x boleh bekerja. 1674 01:26:57,937 --> 01:26:58,414 Yeah? 1675 01:26:58,414 --> 01:26:59,664 >> PENONTON: [didengar]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Ya. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Sekurang-kurangnya untuk ini call-- jadi saya tidak memasukkannya di sini. 1680 01:27:13,440 --> 01:27:19,850 Tetapi kedua-dua hujah yang semestinya bahagian dalam bingkai tindanan ini 1681 01:27:19,850 --> 01:27:23,040 bersama-sama dengan apa-apa pembolehubah tempatan printf berlaku akan menggunakan. 1682 01:27:23,040 --> 01:27:27,020 Kemudian panggilan di sebelah printf kini bahagian dalam printf bingkai tindanan adalah 1683 01:27:27,020 --> 01:27:33,960 peratus p backslash n dan apa sahaja yang Nilai x ialah, yang 0x123. 1684 01:27:33,960 --> 01:27:34,425 Yeah? 1685 01:27:34,425 --> 01:27:35,675 >> PENONTON: [didengar]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Ia akan mencetak sesuatu yang kelihatan seperti ini. 1688 01:27:40,880 --> 01:27:41,846 >> PENONTON: [didengar]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Jadi yang akan dipaparkan dalam bentuk alamat. 1690 01:27:44,510 --> 01:27:47,003 Ia kelihatan seperti alamat. 1691 01:27:47,003 --> 01:27:47,494 Yeah? 1692 01:27:47,494 --> 01:27:49,458 >> PENONTON: [didengar]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Kenapa apa? 1694 01:27:51,075 --> 01:27:52,920 >> PENONTON: [didengar]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Mengapa pointer 4 bait? 1696 01:27:55,240 --> 01:27:58,500 Jadi, terdapat sejumlah besar 0 di depan ini. 1697 01:27:58,500 --> 01:28:03,740 Jadi ia benar-benar 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 Pada sistem 64-bit, akan terdapat sejumlah besar lagi sifar. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Yeah? 1701 01:28:11,900 --> 01:28:13,150 >> PENONTON: [didengar]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Jadi printf pertama akan print-- 1704 01:28:21,130 --> 01:28:21,980 >> PENONTON: [didengar]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Ya, ia akan mencetak apa x menunjuk ke. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Bintang berkata apa yang ini Perkara yang menunjuk ke. 1708 01:28:29,070 --> 01:28:30,300 Merebutnya. 1709 01:28:30,300 --> 01:28:31,455 Jadi apa yang ia menunjuk ke? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Merebutnya. 1712 01:28:32,410 --> 01:28:33,390 Itulah apa yang kita akan mencetak. 1713 01:28:33,390 --> 01:28:37,020 Manakala, yang seterusnya, kami hanya mencetak x sendiri. 1714 01:28:37,020 --> 01:28:38,850 Maksud yang terkandung dalam f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 OK. 1717 01:28:44,500 --> 01:28:46,620 >> Dan kemudian, akhirnya, kita mempunyai percuma. 1718 01:28:46,620 --> 01:28:48,040 Apa yang kita lulus untuk membebaskan? 1719 01:28:48,040 --> 01:28:49,470 Kami x lulus. 1720 01:28:49,470 --> 01:28:52,380 Itulah kali saya sebenarnya dipaparkan dalam bingkai tindanan. 1721 01:28:52,380 --> 01:28:56,370 >> Jadi, kita lulus nilai 0x123 untuk membebaskan. 1722 01:28:56,370 --> 01:28:59,070 Jadi sekarang percuma tahu, semua hak, Saya perlu pergi ke timbunan itu 1723 01:28:59,070 --> 01:29:00,050 dan percuma memori itu. 1724 01:29:00,050 --> 01:29:03,920 Ia tidak lagi menggunakan apa yang adalah di alamat 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Jadi percuma akan melepaskan bahawa dari timbunan itu. 1726 01:29:07,010 --> 01:29:09,490 Sekarang kita tumpukan kosong lagi. 1727 01:29:09,490 --> 01:29:11,120 Kami tidak mempunyai sebarang kebocoran memori. 1728 01:29:11,120 --> 01:29:12,940 Kini bebas akan kembali. 1729 01:29:12,940 --> 01:29:16,130 Perhatikan bahawa x masih 0x123. 1730 01:29:16,130 --> 01:29:18,240 Tetapi itu kini tidak memori sah. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Kita harus dereference tidak lagi x. 1733 01:29:23,986 --> 01:29:24,440 Yeah? 1734 01:29:24,440 --> 01:29:27,240 >> PENONTON: Apakah kembali 0 berlebihan? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Apakah returen 0 berlebihan? 1736 01:29:28,290 --> 01:29:31,110 Ya. 1737 01:29:31,110 --> 01:29:33,950 Kami hanya meletakkan bahawa di sana kerana kita mempunyai pulangan satu untuk udara. 1738 01:29:33,950 --> 01:29:36,830 Jadi rasanya, ya, membolehkan termasuk pulangan 0. 1739 01:29:36,830 --> 01:29:37,310 Yeah? 1740 01:29:37,310 --> 01:29:38,560 >> PENONTON: [didengar]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Jadi selepas x percuma, apa yang berlaku jika kita cuba untuk dereference penunjuk? 1743 01:29:45,580 --> 01:29:47,240 Ia mungkin bahawa apa-apa berlaku. 1744 01:29:47,240 --> 01:29:49,330 Ada kemungkinan bahawa kita masih akan mendapat 50. 1745 01:29:49,330 --> 01:29:53,590 >> Ia mungkin juga, bahawa memori yang kini digunakan untuk sesuatu yang lain. 1746 01:29:53,590 --> 01:29:57,140 Jadi ia tingkah laku undefined. 1747 01:29:57,140 --> 01:30:00,772 Dan undefined bermakna apa-apa boleh berlaku. 1748 01:30:00,772 --> 01:30:01,250 Yeah? 1749 01:30:01,250 --> 01:30:02,500 >> PENONTON: [didengar]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Tidak, jadi jika anda menetapkan x kepada sesuatu yang lain. 1752 01:30:10,830 --> 01:30:15,870 Jadi, jika di sini kita kata x sama sesuatu malloc else-- 1753 01:30:15,870 --> 01:30:17,100 saiz malloc event-- 1754 01:30:17,100 --> 01:30:20,180 maka blok asal memori tidak dibebaskan. 1755 01:30:20,180 --> 01:30:21,490 Dan kita telah secara rasmi hilang. 1756 01:30:21,490 --> 01:30:23,150 Itulah kebocoran memori. 1757 01:30:23,150 --> 01:30:25,090 Kami telah kehilangan semua rujukan dengan blok ingatan. 1758 01:30:25,090 --> 01:30:26,827 Jadi tidak ada cara kita yang dapat membebaskannya. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, jadi kemudian kembali 0 cara dilakukan. 1761 01:30:36,630 --> 01:30:37,900 >> Baiklah, jadi limpahan timbunan. 1762 01:30:37,900 --> 01:30:39,320 Apakah idea yang di sini? 1763 01:30:39,320 --> 01:30:41,210 Jadi ingat, longgokan akan turun. 1764 01:30:41,210 --> 01:30:43,480 Stack adalah naik. 1765 01:30:43,480 --> 01:30:48,000 Jadi ini adalah contoh dari kuliah, Saya fikir, di mana utama hanya akan 1766 01:30:48,000 --> 01:30:51,380 memanggil fungsi ini foo, yang akan untuk memanggil sendiri secara rekursif alih dan 1767 01:30:51,380 --> 01:30:52,320 lagi. 1768 01:30:52,320 --> 01:30:55,370 >> Jadi bingkai tindanan akan bekerja sama. 1769 01:30:55,370 --> 01:30:58,130 Jadi, kita akan bermula dengan utama sebagai bingkai tindanan bawah. 1770 01:30:58,130 --> 01:31:02,000 Kemudian utama akan memanggil foo, yang akan mendapatkan bingkai tindanan. 1771 01:31:02,000 --> 01:31:04,260 >> Kemudian foo akan memanggil foo sekali lagi, yang akan mendapat 1772 01:31:04,260 --> 01:31:05,500 lain bingkai tindanan. 1773 01:31:05,500 --> 01:31:08,270 Dan sekali lagi, dan sekali lagi, dan sekali lagi, dan lagi, sehingga akhirnya, kami menjalankan 1774 01:31:08,270 --> 01:31:09,190 ke dalam timbunan itu. 1775 01:31:09,190 --> 01:31:11,990 Jadi ini adalah bagaimana kita mendapatkan limpahan timbunan. 1776 01:31:11,990 --> 01:31:14,910 Dan pada ketika ini, anda SEG bersalah. 1777 01:31:14,910 --> 01:31:17,335 Atau anda akan benar-benar seg kesalahan sebelum ketika ini tetapi yeah. 1778 01:31:17,335 --> 01:31:19,660 >> PENONTON: Apakah teras membuang sama seperti seg bersalah? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Jadi, anda akan melihat segmentasi bersalah teras dibuang. 1780 01:31:26,140 --> 01:31:28,760 Anda mendapat tempat pembuangan teras apabila anda SEG bersalah. 1781 01:31:28,760 --> 01:31:32,580 Dan ia seperti tempat pembuangan daripada semua kandungan memori semasa anda supaya 1782 01:31:32,580 --> 01:31:36,670 yang anda boleh cuba dan mengenal pasti mengapa anda SEG disalahkan. 1783 01:31:36,670 --> 01:31:37,135 Yeah? 1784 01:31:37,135 --> 01:31:38,385 >> PENONTON: [didengar]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Jadi satu cara segmentasi bersalah ada limpahan timbunan. 1787 01:31:45,460 --> 01:31:47,060 Jadi tidak semestinya. 1788 01:31:47,060 --> 01:31:49,880 A kesalahan segmentasi bererti bahawa anda memori menyentuh dengan cara yang 1789 01:31:49,880 --> 01:31:50,880 anda tidak sepatutnya. 1790 01:31:50,880 --> 01:31:54,750 Jadi salah satu cara untuk berlaku iaitu, apabila anda tindanan limpahan, kita mula menyentuh 1791 01:31:54,750 --> 01:31:58,736 memori dengan cara yang kita tidak perlu. 1792 01:31:58,736 --> 01:31:59,208 Yeah? 1793 01:31:59,208 --> 01:32:00,458 >> PENONTON: [didengar]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Jadi bahagian dalam gelung tak terhingga. 1796 01:32:05,830 --> 01:32:08,770 Seperti, ini adalah seperti tidak terhingga rekursif gelung dan dengan itu kita mendapat satu lagi 1797 01:32:08,770 --> 01:32:09,770 stack bingkai setiap kali. 1798 01:32:09,770 --> 01:32:13,540 Tetapi di dalam tetap infinit one-- 1799 01:32:13,540 --> 01:32:16,390 baik, mari kita tidak mencetak f-- 1800 01:32:16,390 --> 01:32:17,040 melakukan sesuatu. 1801 01:32:17,040 --> 01:32:18,390 Apa sahaja. 1802 01:32:18,390 --> 01:32:20,610 >> Kami tidak akan mendapat lain bingkai tindanan. 1803 01:32:20,610 --> 01:32:22,530 Kami hanya akan menyimpan gegelung lebih arahan ini tunggal. 1804 01:32:22,530 --> 01:32:23,920 Tindanan tidak berkembang. 1805 01:32:23,920 --> 01:32:27,290 Ia adalah fakta bahawa setiap rekursif panggilan memberi kita bingkai tindanan. 1806 01:32:27,290 --> 01:32:31,231 Itulah sebabnya kita akan mendapat limpahan timbunan. 1807 01:32:31,231 --> 01:32:31,728 Yeah? 1808 01:32:31,728 --> 01:32:38,189 >> PENONTON: Jadi, jika anda berkata untuk mendapatkan manakala gelung dan kemudian [didengar]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Jadi, jika di dalam gelung sementara terdapat printf, anda masih akan 1810 01:32:42,000 --> 01:32:42,790 bersalah tidak seg. 1811 01:32:42,790 --> 01:32:46,090 Saya hanya tidak mahu untuk mengelirukan perkara. 1812 01:32:46,090 --> 01:32:46,610 Ia akan gelung. 1813 01:32:46,610 --> 01:32:48,225 Anda akan mendapat timbunan tunggal bingkai untuk printf itu. 1814 01:32:48,225 --> 01:32:49,580 >> Kemudian printf akan kembali. 1815 01:32:49,580 --> 01:32:50,280 Maka lebih gelung lagi. 1816 01:32:50,280 --> 01:32:51,460 Anda akan mendapat timbunan tunggal bingkai untuk printf itu. 1817 01:32:51,460 --> 01:32:52,850 Ia akan kembali. 1818 01:32:52,850 --> 01:32:54,060 Kerangka timbunan tunggal. 1819 01:32:54,060 --> 01:33:00,215 Jadi, anda tidak mendapat ini tak terhingga cerucuk bingkai tindanan. 1820 01:33:00,215 --> 01:33:03,185 >> PENONTON: [didengar]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Ya. 1822 01:33:04,040 --> 01:33:09,360 Jadi limpahan timbunan ini berlaku kerana semua ini 1823 01:33:09,360 --> 01:33:11,600 panggilan ke foo kembali. 1824 01:33:11,600 --> 01:33:15,250 Jadi, jika kita kembali, maka kita akan mula kehilangan bingkai tindanan. 1825 01:33:15,250 --> 01:33:17,870 Dan kemudian kita tidak akan tindanan limpahan. 1826 01:33:17,870 --> 01:33:20,070 Dan itulah sebabnya anda memerlukan kes asas untuk fungsi peribadi anda. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Yeah? 1829 01:33:23,479 --> 01:33:27,375 >> PENONTON: Apakah saiz dan potensi stack untuk timbunan itu yang sama untuk 1830 01:33:27,375 --> 01:33:29,880 semua program? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Kira-kira. 1832 01:33:31,910 --> 01:33:35,090 Adakah saiz potensi tindanan dan timbunan itu yang sama untuk semua program? 1833 01:33:35,090 --> 01:33:37,180 Secara kasar. 1834 01:33:37,180 --> 01:33:40,080 Terdapat beberapa rawak untuk di mana timbunan mula dibina dan 1835 01:33:40,080 --> 01:33:42,400 di mana timbunan itu bermula. 1836 01:33:42,400 --> 01:33:45,870 Jika anda kebetulan mempunyai banyak keseluruhan pembolehubah global dan perkara-perkara, anda mungkin 1837 01:33:45,870 --> 01:33:49,520 mengambil dari beberapa ruang untuk timbunan anda. 1838 01:33:49,520 --> 01:33:54,060 >> Pada sistem 64-bit, anda hampir mempunyai memori yang tak terhingga. 1839 01:33:54,060 --> 01:33:55,820 Terdapat hanya begitu banyak. 1840 01:33:55,820 --> 01:33:59,250 Di antara 32 bit dan 64 bit, yang perbezaan yang signifikan. 1841 01:33:59,250 --> 01:34:02,350 >> Anda akan mendapat banyak seluruh lebih stack dan ruang timbunan pada 64-bit 1842 01:34:02,350 --> 01:34:05,810 sistem kerana ada hanya lebih alamat yang boleh digunakan. 1843 01:34:05,810 --> 01:34:09,360 Tetapi pada sistem individu, ia akan secara kasarnya jumlah yang sama stack 1844 01:34:09,360 --> 01:34:10,785 dan ruang timbunan. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Baiklah. 1847 01:34:15,530 --> 01:34:18,220 >> Jadi perkara terakhir adalah kompilasi. 1848 01:34:18,220 --> 01:34:19,810 Jadi, anda perlu tahu proses ini. 1849 01:34:19,810 --> 01:34:22,240 Terdapat empat langkah-langkah yang besar. 1850 01:34:22,240 --> 01:34:24,400 Jadi yang pertama perlu mudah untuk diingati. 1851 01:34:24,400 --> 01:34:25,085 Pra-pemprosesan. 1852 01:34:25,085 --> 01:34:28,390 Ia mempunyai awalan pra di dalamnya. 1853 01:34:28,390 --> 01:34:32,080 Jadi ia datang sebelum segala-galanya. 1854 01:34:32,080 --> 01:34:34,000 >> Perkara yang perlu diingat ialah hash. 1855 01:34:34,000 --> 01:34:37,250 Jadi hash mentakrifkan dan hash termasuk dalam semua daripada mereka. 1856 01:34:37,250 --> 01:34:39,560 Mereka semua adalah pra-pemproses arahan. 1857 01:34:39,560 --> 01:34:42,030 Ini adalah perkara-perkara yang pra-pemproses menjaga. 1858 01:34:42,030 --> 01:34:43,680 >> Jadi apakah pra-pemproses lakukan? 1859 01:34:43,680 --> 01:34:44,850 Ia satu perkara yang benar-benar dalam keadaan sihat. 1860 01:34:44,850 --> 01:34:49,380 Semua itu mampu semua ini menyalin, dan dipotong, dan tampal operasi. 1861 01:34:49,380 --> 01:34:51,790 >> Jadi hash termasuk standard i0 dot h. 1862 01:34:51,790 --> 01:34:52,990 Apakah yang melakukan? 1863 01:34:52,990 --> 01:34:56,610 Ia menyambar standard i0 dot h memfailkan dan paste ia ke dalam bahagian atas 1864 01:34:56,610 --> 01:34:58,960 mana-mana jua kata hash termasuk standard dot h i0. 1865 01:34:58,960 --> 01:35:02,480 >> Dan mana-mana hash menentukan bahawa kita perlu lihat, apa yang yang melakukan? 1866 01:35:02,480 --> 01:35:06,730 Yang menyalin nilai yang hash ditakrifkan ditakrifkan sebagai dan menampal yang 1867 01:35:06,730 --> 01:35:08,500 di mana-mana anda menggunakan nilai. 1868 01:35:08,500 --> 01:35:13,400 Jadi prapemproses yang hanya tidak benar-benar operasi berasaskan teks yang mudah. 1869 01:35:13,400 --> 01:35:15,870 Ia tidak apa-apa pintar. 1870 01:35:15,870 --> 01:35:18,920 Jadi semua yang lain adalah lebih rumit. 1871 01:35:18,920 --> 01:35:22,970 >> Jadi sekarang prapemproses yang dilakukan, kita sebenarnya mengumpul. 1872 01:35:22,970 --> 01:35:24,320 Jadi apakah menyusun maksudkan? 1873 01:35:24,320 --> 01:35:27,310 Kami sedang pergi dari c kod kepada kod pemasangan. 1874 01:35:27,310 --> 01:35:27,570 Yeah? 1875 01:35:27,570 --> 01:35:28,820 >> PENONTON: [didengar]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Ya, kami ditangkap itu. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Jadi menyusun. 1880 01:35:38,660 --> 01:35:40,310 Kami pergi dari c untuk pemasangan. 1881 01:35:40,310 --> 01:35:42,470 Jadi ini adalah satu perubahan bahasa sebenar. 1882 01:35:42,470 --> 01:35:45,240 Menyusun sendiri bermakna pergi dari bahasa peringkat tinggi untuk 1883 01:35:45,240 --> 01:35:47,340 bahasa peringkat rendah. 1884 01:35:47,340 --> 01:35:50,720 >> Dan c adalah bahasa peringkat tinggi berbanding pemasangan. 1885 01:35:50,720 --> 01:35:52,320 Apakah perhimpunan? 1886 01:35:52,320 --> 01:35:56,440 Arahannya yang, cantik banyak, dibuat untuk CPU anda. 1887 01:35:56,440 --> 01:35:59,130 Tetapi komputer anda masih tidak tidak faham pemasangan. 1888 01:35:59,130 --> 01:36:01,570 Ia hanya memahami satu dan sifar. 1889 01:36:01,570 --> 01:36:06,160 Jadi langkah seterusnya adalah pemasangan yang membawa kita dari arahan ini yang 1890 01:36:06,160 --> 01:36:08,760 CPU anda memahami dan benar-benar diterjemahkan mereka, untuk 1891 01:36:08,760 --> 01:36:10,820 orang-orang dan sifar. 1892 01:36:10,820 --> 01:36:13,570 >> Jadi C untuk pemasangan kepada perduaan. 1893 01:36:13,570 --> 01:36:15,870 Tetapi saya tidak mempunyai laksana lagi. 1894 01:36:15,870 --> 01:36:19,550 Jadi berfikir perpustakaan cs50 itu. 1895 01:36:19,550 --> 01:36:23,070 Kami telah menyediakan anda dengan binari untuk ini perpustakaan cs50, yang mempunyai GetString 1896 01:36:23,070 --> 01:36:24,400 dan GetInt dan semua itu. 1897 01:36:24,400 --> 01:36:25,700 >> Tetapi cs50 library-- 1898 01:36:25,700 --> 01:36:27,650 di dalam dan dengan itself-- tidak laku. 1899 01:36:27,650 --> 01:36:29,570 Ia tidak mempunyai fungsi utama. 1900 01:36:29,570 --> 01:36:32,230 Ia hanya sekumpulan binari yang boleh anda gunakan. 1901 01:36:32,230 --> 01:36:41,730 Jadi menghubungkan ialah bagaimana kita membawa bersama-sama semua fail-fail binari yang berbeza 1902 01:36:41,730 --> 01:36:43,110 menjadi sebuah laku sebenar. 1903 01:36:43,110 --> 01:36:45,900 Salah satu yang anda boleh menaip dot dot mengurangkan keluar. 1904 01:36:45,900 --> 01:36:51,660 >> Jadi ini adalah seperti fail yang anda menulis, - apa sahaja program anda is-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser dot c. 1906 01:36:53,620 --> 01:36:55,100 Tetapi kini ia telah disusun turun ke binari. 1907 01:36:55,100 --> 01:36:56,480 Jadi Ceaser dot o. 1908 01:36:56,480 --> 01:36:59,620 Dan ini adalah cs50 kami pustaka binari. 1909 01:36:59,620 --> 01:37:02,284 Dan mereka yang digabungkan boleh laku ke dalam tunggal. 1910 01:37:02,284 --> 01:37:02,758 Yeah? 1911 01:37:02,758 --> 01:37:04,008 >> PENONTON: [didengar]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Jadi pertama termasuk, ingat, hash termasuk sebenarnya adalah 1914 01:37:12,710 --> 01:37:13,810 langkah pra-pemproses. 1915 01:37:13,810 --> 01:37:14,750 Tetapi itu berasingan. 1916 01:37:14,750 --> 01:37:20,730 Jika anda tidak menggunakan apa-apa fungsi yang berada di luar fail anda itu, 1917 01:37:20,730 --> 01:37:26,100 tidak, anda tidak perlu untuk menghubungkan apa-apa kerana anda mempunyai segala-galanya. 1918 01:37:26,100 --> 01:37:30,310 >> Yang berkata, printf adalah dikaitkan dalam. 1919 01:37:30,310 --> 01:37:32,820 Jika anda pernah menggunakan printf, itu sesuatu yang perlu dikaitkan dalam 1920 01:37:32,820 --> 01:37:35,740 kerana anda tidak menulis itu. 1921 01:37:35,740 --> 01:37:39,530 Dan, sebenarnya, printf secara automatik dikaitkan dalam. 1922 01:37:39,530 --> 01:37:42,760 Anda tahu bagaimana di baris arahan atau apabila anda menaip membuat, anda melihatnya mempunyai 1923 01:37:42,760 --> 01:37:46,690 dash l cs50, yang mempunyai link di perpustakaan cs50 ini? 1924 01:37:46,690 --> 01:37:49,070 Printf, dan barangan seperti itu, akan ada kaitan secara automatik. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Apa-apa soalan lain pada apa-apa? 1927 01:37:53,930 --> 01:37:56,280 >> PENONTON: [didengar]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Menghubungkan? 1929 01:37:58,300 --> 01:38:03,450 Kami mempunyai sejumlah besar fail binari yang berbeza. 1930 01:38:03,450 --> 01:38:06,410 Ini adalah contoh berkanun yang kita gunakan adalah perpustakaan cs50. 1931 01:38:06,410 --> 01:38:09,960 Kami telah disusun dan diberikan kepada anda binari untuk perpustakaan cs50 ini. 1932 01:38:09,960 --> 01:38:12,410 >> Anda mahu menggunakan GetString dalam program anda. 1933 01:38:12,410 --> 01:38:14,750 Oleh itu, anda pergi dan menggunakan GetString. 1934 01:38:14,750 --> 01:38:19,700 Tetapi tanpa kod binari saya untuk GetString, apabila anda menyusun kod anda 1935 01:38:19,700 --> 01:38:23,140 ke bawah, anda tidak boleh benar-benar berjalan anda program kerana GetString String adalah 1936 01:38:23,140 --> 01:38:25,080 belum sepenuhnya ditakrifkan. 1937 01:38:25,080 --> 01:38:29,220 >> Ia hanya apabila anda menghubungkan dalam binari saya yang mengandungi GetString yang sekarang, semua 1938 01:38:29,220 --> 01:38:31,130 betul, saya boleh sebenarnya melaksanakan GetString. 1939 01:38:31,130 --> 01:38:32,330 Fail saya selesai. 1940 01:38:32,330 --> 01:38:34,208 Dan saya boleh menjalankan ini. 1941 01:38:34,208 --> 01:38:34,697 Yeah? 1942 01:38:34,697 --> 01:38:37,631 >> PENONTON: Adakah menukar kanji sagu binari untuk laku? 1943 01:38:37,631 --> 01:38:42,032 Jadi, walaupun anda tidak mempunyai lain-lain perpustakaan, tidak akan ia masih 1944 01:38:42,032 --> 01:38:44,477 perlu untuk menterjemahkan yang [didengar]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Jadi laksana masih dalam perduaan. 1946 01:38:48,640 --> 01:38:51,750 Ia hanya menggabungkan keseluruhan sekumpulan binari. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> PENONTON: Terima kasih banyak. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Tiada masalah. 1950 01:38:58,560 --> 01:38:59,540 Apa-apa soalan lain? 1951 01:38:59,540 --> 01:39:02,001 Jika tidak, kita semua ditetapkan. 1952 01:39:02,001 --> 01:39:02,690 Baiklah. 1953 01:39:02,690 --> 01:39:02,990 Terima kasih. 1954 01:39:02,990 --> 01:39:03,590 >> [Tepuk tangan] 1955 01:39:03,590 --> 01:39:04,490 >> PENONTON: Terima kasih. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Ya. 1957 01:39:05,740 --> 01:39:06,582