1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> ZVOČNIK 1: Hi everyone. 3 00:00:05,680 --> 00:00:07,530 Mi se bomo, da bi začeli. 4 00:00:07,530 --> 00:00:09,330 Mislim, da ljudje še vedno potekajo biti filtriranja. 5 00:00:09,330 --> 00:00:12,840 Ampak v interesu časa, tako da bomo lahko dobili vidva ven na čas, 6 00:00:12,840 --> 00:00:14,110 bomo začeli. 7 00:00:14,110 --> 00:00:18,780 Torej, dobrodošli na CS50 Kviz 0 pregledu. 8 00:00:18,780 --> 00:00:23,020 Za tiste, ki še niso realizirani vendar, imate vprašanje, na sredo. 9 00:00:23,020 --> 00:00:25,700 Woo-hoo. 10 00:00:25,700 --> 00:00:29,780 >> Če še niste začeli študira ali še niso ugotovili, da le-ta obstaja še 11 00:00:29,780 --> 00:00:34,070 preteklih kvizi in vse informacije o tvoj kviz so na cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Obstaja nekaj zelo dobrih stvari tam, preteklih kvizi od zadnjih 10 13 00:00:38,090 --> 00:00:43,760 let, kot tudi informacije O tem kvizu in teme 14 00:00:43,760 --> 00:00:46,250 da bodo pokriti. 15 00:00:46,250 --> 00:00:48,980 Torej, začnimo. 16 00:00:48,980 --> 00:00:54,240 >> Torej bi vi spomnite, prvi dan v razredu Davida imel te svetilke na. 17 00:00:54,240 --> 00:00:59,650 Torej v bistvu, vse, kar gre pod pokrovom računalnika je 18 00:00:59,650 --> 00:01:00,860 narejeno v binarno. 19 00:01:00,860 --> 00:01:04,080 Binary pomeni to, kar zveni podobno, je 0 in 1 je. 20 00:01:04,080 --> 00:01:09,290 Ima dve vrednosti, ki lahko predstavljal. 21 00:01:09,290 --> 00:01:14,675 >> Torej, tako kot pri prvi dan oddelka ko je David prižgal luč 22 00:01:14,675 --> 00:01:21,990 Žarnica za zastopanje na ali 1, naš računalnik razume binarni kot 0 in 23 00:01:21,990 --> 00:01:24,110 1 je, vklopite ali izklopite. 24 00:01:24,110 --> 00:01:25,360 Osnove Binary. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Vsak kraj je predstavljen v osnovi dva. 27 00:01:32,470 --> 00:01:36,260 Tako da boste dodali 2 do 0 do 1 do 2 vso pot navzgor. 28 00:01:36,260 --> 00:01:41,970 >> Za izračun, kaj je tvoj binarni je decimalno, samo sledite tej enačbi 29 00:01:41,970 --> 00:01:42,840 Vrsta stvar. 30 00:01:42,840 --> 00:01:49,510 Če imate 1 v katerem koli od teh krajev, jo pomnožimo s koli 31 00:01:49,510 --> 00:01:53,820 utemeljiti, da je v, to sešteti, in dobiš decimalko. 32 00:01:53,820 --> 00:01:57,930 Torej, to je, kako šteješ do 5 v binarno. 33 00:01:57,930 --> 00:02:01,400 Tako kot tisto, kar smo počeli na zadnji slide, to je, kako bi jo 34 00:02:01,400 --> 00:02:02,650 predstavljata 1 do 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Podobno, kot ste vi lahko dodate in odštevanje v decimalni ali osnovo 10, ali 37 00:02:09,660 --> 00:02:13,040 Res vsaka baza, na dodati in odštevanje v dvojiškem. 38 00:02:13,040 --> 00:02:18,400 Točno to, kar bi pričakovali, ko ste dodamo dve up, če je to enako, večjo 39 00:02:18,400 --> 00:02:24,220 od 1, nosiš 1, da bo 0, in to je dodatek na ta način, samo 40 00:02:24,220 --> 00:02:29,910 kot bi lahko pričakovali z rednim decimalno ali kateri koli drugi lokaciji. 41 00:02:29,910 --> 00:02:30,970 Cool. 42 00:02:30,970 --> 00:02:35,140 >> Torej, kot sem že rekel, vse, kar dogaja pod pokrovom našega računalnika 43 00:02:35,140 --> 00:02:37,560 poteka v 0 in 1 je, ali binarno. 44 00:02:37,560 --> 00:02:43,470 Torej, kako izraziti, na primer, črk ali številk ali znakov? 45 00:02:43,470 --> 00:02:45,560 In odgovor na to je ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII je preslikava med znaki ki bi ga običajno vidimo v 47 00:02:49,380 --> 00:02:53,360 Angleški jezik, tako kot je, je B, C je, podčrtaj, črtice in 48 00:02:53,360 --> 00:02:54,910 kaj takega. 49 00:02:54,910 --> 00:02:57,260 In zemljevidi, ki k vrednosti ASCII. 50 00:02:57,260 --> 00:03:03,080 ASCII vrednost je le številka, ki lahko razumemo z računalnikom. 51 00:03:03,080 --> 00:03:07,430 In ravno tako kot lahko to storite dodajanje in odštevanje s številkami, lahko to storite 52 00:03:07,430 --> 00:03:10,890 jih z vrednostmi ASCII. 53 00:03:10,890 --> 00:03:14,050 >> Torej, v tem primeru, kaj bo to izpisal? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Ja, samo prostor C space B D. Kje je moja miška iti? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Obvestilo lahko določite int na 65 let. 58 00:03:43,380 --> 00:03:47,080 In ko tiskate, da z uporabo odstotkov C, bo to razlagamo kot 59 00:03:47,080 --> 00:03:49,330 značaj in se bo izpisal A. 60 00:03:49,330 --> 00:03:52,800 >> Podobno lahko razglasi je kot char. 61 00:03:52,800 --> 00:03:56,860 In ko ga natisnete z uporabo odstotkov C, bo to razlagamo kot 62 00:03:56,860 --> 00:04:05,240 odstotkov D. In tako kot lahko dodate številko, lahko dodate znaki so 63 00:04:05,240 --> 00:04:06,878 Vrednosti ASCII, v tem primeru. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Torej, malo kazalec za vsakogar. 66 00:04:16,130 --> 00:04:19,610 5, kot niz, ne pravzaprav enaka 5. 67 00:04:19,610 --> 00:04:26,610 Torej, kako lahko pretvorite niz 5 na celo število 5? 68 00:04:26,610 --> 00:04:28,930 Vse ideje? 69 00:04:28,930 --> 00:04:31,630 Ja. 70 00:04:31,630 --> 00:04:36,720 >> Torej, če imamo 5 kot niz, lahko odštejemo 0. 71 00:04:36,720 --> 00:04:37,820 In da bomo, da nam 5. 72 00:04:37,820 --> 00:04:41,670 In podobno, če imamo 5, celo, dodajajo, da na vrvico 0. 73 00:04:41,670 --> 00:04:43,112 In to nam daje niz 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Cool. 76 00:04:48,350 --> 00:04:52,940 >> Zdaj pa se spomni nazaj na predavanje tista, kjer smo se pogovarjali o algoritmih. 77 00:04:52,940 --> 00:04:57,260 Torej, kako dejansko želimo računalnik narediti zanimive stvari? 78 00:04:57,260 --> 00:05:00,460 Saj veš, samo dodajanje in odštevanjem številke in tiskanje stvari ni 79 00:05:00,460 --> 00:05:01,730 da je razburljivo. 80 00:05:01,730 --> 00:05:04,620 Ponavadi želimo naš računalnik v opravljanje neke vrste algoritem. 81 00:05:04,620 --> 00:05:07,820 Nekaj ​​malo bolj zapletena kot le navadno aritmetično. 82 00:05:07,820 --> 00:05:11,930 >> Algoritem je samo korak za korakom niz navodil za kako izvesti 83 00:05:11,930 --> 00:05:14,640 nekatere task-- 84 00:05:14,640 --> 00:05:15,660 tako kot recept. 85 00:05:15,660 --> 00:05:19,990 Morda se spomnite, prvi dan razred, kjer je David nam štetje sobo 86 00:05:19,990 --> 00:05:22,550 ljudi in koliko ljudi so bili v prostoru. 87 00:05:22,550 --> 00:05:24,480 Vi bi se lahko uporabila za štetje enega po enega. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 V tem primeru, linearni čas algoritem. 90 00:05:28,010 --> 00:05:31,710 >> Vendar je David predstavil algoritem za ste za štetje ljudi v sobi 91 00:05:31,710 --> 00:05:37,340 kjer vsakdo vstane, si rekel, da ti Številka na drugo osebo, dodati, da 92 00:05:37,340 --> 00:05:39,200 število navzgor, in ena oseba usede. 93 00:05:39,200 --> 00:05:40,410 In to ponovite. 94 00:05:40,410 --> 00:05:42,910 To je ena vrsta algoritma. 95 00:05:42,910 --> 00:05:47,520 Moremo analizirati, kako učinkovito an Algoritem temelji na to je čas delovanja. 96 00:05:47,520 --> 00:05:49,680 Ampak bomo govorili malo več o tem kasneje. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Torej vsi algoritmi lahko tudi biti napisana v psevdokoda. 99 00:05:57,090 --> 00:06:01,120 Psevdokoda je samo angleško kot zapisa za zastopanje 100 00:06:01,120 --> 00:06:02,420 programski jezik. 101 00:06:02,420 --> 00:06:06,070 Na primer, če smo želeli vprašati uporabnika uganiti mojo najljubšo številko, smo 102 00:06:06,070 --> 00:06:08,390 morda psevdokoda kot take. 103 00:06:08,390 --> 00:06:09,850 >> Get a uporabniki uganiti. 104 00:06:09,850 --> 00:06:13,570 Če ugibanje pravilno, povej jim oni pravilna, sicer jim povej 105 00:06:13,570 --> 00:06:15,560 oni niso pravilne. 106 00:06:15,560 --> 00:06:22,530 In psevdokoda je tako zlahka predstavlja idejo ali algoritem. 107 00:06:22,530 --> 00:06:26,910 Torej, zdaj bomo morda želeli, da dejansko napisati to v jeziku, ki ga računalnik 108 00:06:26,910 --> 00:06:27,980 Morda razumevanje. 109 00:06:27,980 --> 00:06:35,660 Torej lahko pišemo našo psevdokoda in razlagajo, da je v izvorni kodi. 110 00:06:35,660 --> 00:06:41,320 >> Do sedaj, je izvorna koda držati do neke sintakse 111 00:06:41,320 --> 00:06:42,490 programski jezik. 112 00:06:42,490 --> 00:06:45,430 In sedaj, v CS50, ki smo jih uporabljam večinoma c. 113 00:06:45,430 --> 00:06:48,320 Torej, to je lahko vir koda za c. 114 00:06:48,320 --> 00:06:51,440 Kasneje v letu, boste ponoči prišli v stik z drugimi programskimi 115 00:06:51,440 --> 00:06:52,480 jezike, kot so PHP. 116 00:06:52,480 --> 00:06:57,540 Ali če se celo druge razrede, vas lahko storite Java, Python ali celo OCML. 117 00:06:57,540 --> 00:07:01,570 Toda v našem C programskem jeziku, to je kako bi lahko pišemo izvorno kodo 118 00:07:01,570 --> 00:07:04,760 psevdokoda algoritem, ki Pravkar sem opisal prej. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Torej, kako je računalnik dejansko razumeti, da je? 121 00:07:11,430 --> 00:07:14,490 Kot sem že rekel, je le res razume ničel in enic. 122 00:07:14,490 --> 00:07:17,880 Torej, kako to dobiti od vira koda za nekaj, kar je lahko 123 00:07:17,880 --> 00:07:18,960 razumel? 124 00:07:18,960 --> 00:07:22,920 No, imamo nekaj imenovan prevajalnik. 125 00:07:22,920 --> 00:07:28,450 >> Če se spomnite nazaj v večini vaših psets, ste imeli neke vrste programa 126 00:07:28,450 --> 00:07:30,370 napisan v dot c datoteki. 127 00:07:30,370 --> 00:07:32,550 In potem bi tip make. 128 00:07:32,550 --> 00:07:35,970 Torej, kaj naj počne? 129 00:07:35,970 --> 00:07:39,970 >> Lahko napišete make, ki bo prevedel Program ker someone-- 130 00:07:39,970 --> 00:07:42,730 pisali svoj p niz; Verjetno David-- 131 00:07:42,730 --> 00:07:44,190 ustvarila make datoteke. 132 00:07:44,190 --> 00:07:51,320 In to pove, da bi vedeli, da se vaši prevajalnik, ki se imenuje Jek, da bo 133 00:07:51,320 --> 00:07:55,560 nato prevesti svoje izvorne kode, da nasprotuje koda, ki je ničel in enic 134 00:07:55,560 --> 00:07:57,720 da računalnik razume. 135 00:07:57,720 --> 00:08:01,610 Ampak malo kasneje, bomo šli bolj v globino okoli prevajalniki. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Torej spomniti pset 0, where-- ja, Imate vprašanje? 138 00:08:10,800 --> 00:08:11,620 >> OBČINSTVO: [neslišno]? 139 00:08:11,620 --> 00:08:12,490 >> ZVOČNIK 1: Da. 140 00:08:12,490 --> 00:08:14,960 Mislim, da so dejansko mora biti na spletu. 141 00:08:14,960 --> 00:08:15,120 Ja. 142 00:08:15,120 --> 00:08:16,572 >> OBČINSTVO: Ali je kot [neslišno]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> ZVOČNIK 1: Ne. 145 00:08:20,830 --> 00:08:25,810 So na cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> OBČINSTVO: Slash kvizi, poševnica 2013, poševnica 0 in kliknite skozi 147 00:08:32,900 --> 00:08:35,956 kvizi 2013 in kviz 0, pregledajo poglavje diapozitive. 148 00:08:35,956 --> 00:08:40,380 >> ZVOČNIK 1: Ja, tako da, če hočete, da ga potegnite navzgor in poiščemo na vaš 149 00:08:40,380 --> 00:08:42,740 lasten računalnik, da je v redu preveč. 150 00:08:42,740 --> 00:08:43,130 Ponoviš. 151 00:08:43,130 --> 00:08:44,546 >> OBČINSTVO: [neslišno]. 152 00:08:44,546 --> 00:08:48,780 >> ZVOČNIK 1: Ja, [neslišno] je slamnata spremenljivka. 153 00:08:48,780 --> 00:08:49,644 Oh, ja? 154 00:08:49,644 --> 00:08:51,372 >> OBČINSTVO: [neslišno]? 155 00:08:51,372 --> 00:08:54,300 >> SPEAKER 1: No, stavke niso na izpit. 156 00:08:54,300 --> 00:08:55,950 Žal mi je, njeno vprašanje je bilo, je bilo stavke na izpitu. 157 00:08:55,950 --> 00:08:59,530 In to ni. 158 00:08:59,530 --> 00:09:05,780 Torej pset 0, naj bi fantje so vse izvajali nekaj uporabo nič. 159 00:09:05,780 --> 00:09:13,100 In smo se naučili nekaj osnovnih programov gradniki uporabljajo praske. 160 00:09:13,100 --> 00:09:15,590 >> Tako da je lahko pogled na nekatere teh gradnikov 161 00:09:15,590 --> 00:09:18,170 ki sestavljajo program. 162 00:09:18,170 --> 00:09:20,570 Prvi je Boolean izraz. 163 00:09:20,570 --> 00:09:24,540 Logične izrazi so tisti, in 0 ali karkoli, kar ima 164 00:09:24,540 --> 00:09:25,700 dve možni vrednosti. 165 00:09:25,700 --> 00:09:30,320 V tem primeru, resnična ali neresnična, vklopiti ali izklopiti, in ja ali ne. 166 00:09:30,320 --> 00:09:35,390 Primer preprosta, zelo preprosta, Program, ki uporablja Boolean 167 00:09:35,390 --> 00:09:39,140 izraz tukaj. 168 00:09:39,140 --> 00:09:43,220 >> Torej, da bi za logičnih izrazov za bilo koristno, imamo logičnih operaterjev. 169 00:09:43,220 --> 00:09:48,920 To so subjekti, ki se lahko uporabljajo primerjati nekatere vrednote. 170 00:09:48,920 --> 00:09:52,820 Torej imamo in ali ni enako, manj od ali enaka, večja ali 171 00:09:52,820 --> 00:09:55,130 enako, in manj kot ali večja od. 172 00:09:55,130 --> 00:09:59,060 Ampak ti izvajalci niso zelo koristni če smo jih lahko združite v 173 00:09:59,060 --> 00:10:00,320 pogoji. 174 00:10:00,320 --> 00:10:04,370 >> Torej bi vi spomnite iz nič in iz vašega str določa, da smo 175 00:10:04,370 --> 00:10:05,400 imel pogoje. 176 00:10:05,400 --> 00:10:09,710 So v bistvu, kot vilice v logika vašega programa, ki 177 00:10:09,710 --> 00:10:12,670 izvaja odvisno ali pogoj je izpolnjen. 178 00:10:12,670 --> 00:10:18,150 Tako je eden od pogojev, ki smo jih imeli uporablja večkrat v tem tečaju je 179 00:10:18,150 --> 00:10:21,470 če drugega, če je, in drugega ni pogojev. 180 00:10:21,470 --> 00:10:24,060 >> Tukaj je primer, kako lahko uporabite to. 181 00:10:24,060 --> 00:10:28,430 Ali kdo ve razliko med samo z izjavami, če vse 182 00:10:28,430 --> 00:10:32,530 pot navzdol verzov, če drugega, če, in sicer v kombinaciji? 183 00:10:32,530 --> 00:10:33,013 Ja? 184 00:10:33,013 --> 00:10:34,263 >> OBČINSTVO: [neslišno]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> ZVOČNIK 1: Točno tako. 187 00:10:42,160 --> 00:10:50,210 Torej, če bi imel, če do konca tega Tako, tudi če ta pogoj vrne 188 00:10:50,210 --> 00:10:52,800 true, bo še vedno nadaljuje testiranje naslednji dve. 189 00:10:52,800 --> 00:11:00,120 Ker je z ostalimi, če je, na drug izjava, če ena vrne true, 190 00:11:00,120 --> 00:11:02,640 drugi niso testirali. 191 00:11:02,640 --> 00:11:05,955 Vsa vprašanja glede tega? 192 00:11:05,955 --> 00:11:06,890 Cool. 193 00:11:06,890 --> 00:11:12,240 >> Torej boste uporabili, če-ostalo od na drug Izjava, če veš, da lahko le 194 00:11:12,240 --> 00:11:14,470 eden od teh primerov. 195 00:11:14,470 --> 00:11:21,550 Tako bomo vedeli, če je x manjši od 0, je zagotovo ne bo 196 00:11:21,550 --> 00:11:22,890 večji od 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Naslednja, druga gradnik da smo se naučili, so zanke. 199 00:11:31,480 --> 00:11:33,310 Imamo tri vrste zank. 200 00:11:33,310 --> 00:11:35,830 Za zank, medtem zank, in ne, medtem ko zanke. 201 00:11:35,830 --> 00:11:38,730 In na splošno, ko sedite na napisati nekaj, boste morali odločiti, 202 00:11:38,730 --> 00:11:40,060 kateri od treh, ki jo želite uporabiti. 203 00:11:40,060 --> 00:11:41,900 Torej, kako bomo odločiti, katera? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Smo na splošno uporabljajo za zanko, če vemo, kolikokrat želimo Ponovil 206 00:11:48,790 --> 00:11:53,650 skozi nekaj ali kolikokrat želimo opraviti nalogo. 207 00:11:53,650 --> 00:11:58,830 Mi uporabljamo medtem ko zanke, če bomo potrebovali nekaj pogoj, da bi bilo res, da teče. 208 00:11:58,830 --> 00:12:03,730 In jih uporabljamo storiti, medtem ko zelo podoben medtem, vendar želimo naše kode na 209 00:12:03,730 --> 00:12:04,880 vsaj enkrat. 210 00:12:04,880 --> 00:12:09,410 >> To storijo, ko, kar je v Opravilo bo Vedno se vsaj en čas. 211 00:12:09,410 --> 00:12:13,120 Ker je, z nekaj časa, ga ne morda sploh če 212 00:12:13,120 --> 00:12:15,490 pogoj ni izpolnjen. 213 00:12:15,490 --> 00:12:16,740 Vsa vprašanja s tem? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Torej struktura zanke. 216 00:12:22,860 --> 00:12:23,620 Fantje so vse to videli. 217 00:12:23,620 --> 00:12:25,320 Ponastaviti ga. 218 00:12:25,320 --> 00:12:26,600 Imate nekakšno stanje. 219 00:12:26,600 --> 00:12:32,340 Tako, na primer, smo lahko inicializacijo kot na i je enak 0. 220 00:12:32,340 --> 00:12:34,040 i je manj kot 10. 221 00:12:34,040 --> 00:12:35,442 In i ++. 222 00:12:35,442 --> 00:12:39,010 Zelo enostavna, da smo storili. 223 00:12:39,010 --> 00:12:42,210 >> Za while, podobno, imate da imajo neko inicializacijo 224 00:12:42,210 --> 00:12:44,980 nekakšen pogoj, in nekakšen posodobitve. 225 00:12:44,980 --> 00:12:51,990 Tako bomo lahko izvajajo naše zanko tudi kot while uporabo tega. 226 00:12:51,990 --> 00:12:56,000 In podobno z opravkov, medtem ko zanke, morda imamo nekaj inicializacijo, 227 00:12:56,000 --> 00:12:58,640 izvršiti nekaj, posodobiti in Nato preverite stanje. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Torej, zdaj deluje. 230 00:13:05,140 --> 00:13:06,460 Smo dal vse skupaj. 231 00:13:06,460 --> 00:13:10,140 Smo morda želeli napisati nekaj vrsta funkcije. 232 00:13:10,140 --> 00:13:12,790 Skupna funkcija, ki jo morda so že videli, je glavni. 233 00:13:12,790 --> 00:13:13,770 Glavno je funkcija. 234 00:13:13,770 --> 00:13:16,160 Ima vrsto donos, int. 235 00:13:16,160 --> 00:13:18,470 To je ime funkcije, glavni. 236 00:13:18,470 --> 00:13:20,810 In to je argument, argc in argv. 237 00:13:20,810 --> 00:13:24,040 Torej, glavno je samo funkcija. 238 00:13:24,040 --> 00:13:27,230 >> Druge funkcije, ki ste jih morda uporabljali, printf-- printf je function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 Ampak to se zgodi, da so bili izvajajo za nas 241 00:13:32,010 --> 00:13:33,270 nekakšna knjižnica. 242 00:13:33,270 --> 00:13:37,400 Če vidva ne pozabite tudi Ta knjižnica CS50.h ali 243 00:13:37,400 --> 00:13:38,510 Standard I / O knjižnici. 244 00:13:38,510 --> 00:13:39,200 Ja, vprašanje? 245 00:13:39,200 --> 00:13:41,610 >> OBČINSTVO: Je glavni samo neločljivo vc? 246 00:13:41,610 --> 00:13:44,740 To počne nekako [neslišno]? 247 00:13:44,740 --> 00:13:47,370 >> ZVOČNIK 1: Vprašanje je, če glavni je neločljivo povezana c. 248 00:13:47,370 --> 00:13:51,460 In ja, vse funkcije imajo glavno funkcijo. 249 00:13:51,460 --> 00:13:55,290 To je nekako potrebno za računalnik vedeti, kje začeti 250 00:13:55,290 --> 00:13:55,993 teče kodo. 251 00:13:55,993 --> 00:13:58,108 >> OBČINSTVO: Torej ti ne bi [neslišno]? 252 00:13:58,108 --> 00:13:59,480 >> ZVOČNIK 1: Ne 253 00:13:59,480 --> 00:14:00,760 Še kakšno vprašanje? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Cool. 256 00:14:04,770 --> 00:14:08,050 Torej, tako kot jo lahko uporabite funkcijo , ki je napisana za vas, lahko tudi vi 257 00:14:08,050 --> 00:14:10,380 napišete svoje funkcije. 258 00:14:10,380 --> 00:14:17,050 To je funkcija, da bi lahko nekdo Pisal izračunati količino 259 00:14:17,050 --> 00:14:18,395 iz q, npr. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Obstaja vrsta donos tukaj, v tem primeru int, naše ime funkcije q in naše 262 00:14:29,500 --> 00:14:31,360 Seznam parametrov. 263 00:14:31,360 --> 00:14:34,550 >> In ne pozabite, da morate pisati podatke tip parametra, ki ga želite 264 00:14:34,550 --> 00:14:38,660 uporabite ali pa funkcija ne vedeti, kakšne vrste 265 00:14:38,660 --> 00:14:41,650 parameter naj se sprejemajo. 266 00:14:41,650 --> 00:14:48,110 Torej, v tem primeru želimo celo kot naš vložek. 267 00:14:48,110 --> 00:14:50,390 Torej, zakaj bi mi želeli uporabiti funkcije? 268 00:14:50,390 --> 00:14:52,800 >> First of all, super za organizacijo. 269 00:14:52,800 --> 00:14:56,350 Pomagajo razbiti kodo v bolj organizirano kose in da 270 00:14:56,350 --> 00:14:57,960 lažje branje. 271 00:14:57,960 --> 00:14:59,760 Poenostavitev. 272 00:14:59,760 --> 00:15:01,740 To je dobro za oblikovanje. 273 00:15:01,740 --> 00:15:04,570 Ko berete košček kode in glavna funkcija je res, 274 00:15:04,570 --> 00:15:07,750 res dolga, bi bilo težje razlog o tem, kaj se dogaja. 275 00:15:07,750 --> 00:15:11,710 Torej, če si razdeliti naloge, da bi bilo lažje brati. 276 00:15:11,710 --> 00:15:12,750 In ponovno-sposobnosti. 277 00:15:12,750 --> 00:15:16,940 Če imate kos kode, ki je pa imenuje ali teči večkrat, 278 00:15:16,940 --> 00:15:20,690 Namesto reportaža tega zakonika 10 krat v glavno funkcijo, boste morda 279 00:15:20,690 --> 00:15:21,440 želite znova uporabiti. 280 00:15:21,440 --> 00:15:25,740 In potem vsakič, ko boste morali uporabiti, da del kode, pokličite funkcijo. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Torej, zdaj, če se spomnimo nazaj na nič, smo se pogovarjali tudi o nekaj konceptov, 283 00:15:35,380 --> 00:15:37,680 od katerih je ena navojev. 284 00:15:37,680 --> 00:15:41,120 Nit je koncept večkratnik zaporedja kodo 285 00:15:41,120 --> 00:15:43,040 izvršitve hkrati. 286 00:15:43,040 --> 00:15:47,490 Tako da mislim nazaj na prvi dan, ko je imel David vi računate off števila 287 00:15:47,490 --> 00:15:48,440 ljudje v prostoru. 288 00:15:48,440 --> 00:15:50,550 >> V bistvu, kaj se je dogajalo o je vsa vas je bila 289 00:15:50,550 --> 00:15:52,370 teče ločene teme. 290 00:15:52,370 --> 00:15:55,540 In te teme so prihajali skupaj da bi dobili neke vrste odgovor. 291 00:15:55,540 --> 00:15:58,890 Podobno je v nič, ko imate več sprites, boste morda 292 00:15:58,890 --> 00:16:01,070 imeti mačko in psa. 293 00:16:01,070 --> 00:16:08,770 In bi bilo istočasno upravljanjem lastnih scenarijev. 294 00:16:08,770 --> 00:16:10,020 To je primer navojev. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> In drugi koncept, ki je uvedena je bila nič dogodkov. 297 00:16:18,000 --> 00:16:22,550 In dogodki, ko več deli kodo komunicirajo med seboj. 298 00:16:22,550 --> 00:16:26,840 V Scratch, to je bilo, ko ste uporabili Nadzor oddaja in ko sem 299 00:16:26,840 --> 00:16:29,500 Prejemanje blokov. 300 00:16:29,500 --> 00:16:35,170 >> In tudi v Problem Set 4, bomo videli malo dogodkov, kot dobro. 301 00:16:35,170 --> 00:16:38,250 Vidva bi se lahko uporabili knjižnica Gevent. 302 00:16:38,250 --> 00:16:42,450 In tam je bila funkcija waitForClick v kateri ste čakali 303 00:16:42,450 --> 00:16:44,300 za uporabnika, da kliknete. 304 00:16:44,300 --> 00:16:47,870 In tvoj klik, v tem primeru bi bilo dogodek in čakati na klik je vaša 305 00:16:47,870 --> 00:16:49,120 obravnavo dogodkov. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> In tudi v celotnem prikazovati psets in delajo na vaših psets, si 308 00:16:58,630 --> 00:17:01,920 bi lahko prišli v stik z nekatere od teh ukazov. 309 00:17:01,920 --> 00:17:05,579 To je tisto, kar boste vnesli v svoj terminal okno ali karkoli okno 310 00:17:05,579 --> 00:17:12,119 , ki se prikaže na vašem g uredi s, v bistvu, smer računalnik. 311 00:17:12,119 --> 00:17:19,440 >> Tako na primer navaja LS Vsebina imenik. 312 00:17:19,440 --> 00:17:22,510 Naredite imenik ustvari novo mapo. 313 00:17:22,510 --> 00:17:24,819 CD, sprememba imenika. 314 00:17:24,819 --> 00:17:28,400 RM, odstrani, izbriše datoteko ali nekatere imenik. 315 00:17:28,400 --> 00:17:31,050 In nato odstranite imenik odstrani imenik. 316 00:17:31,050 --> 00:17:32,300 >> OBČINSTVO: [neslišno]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> ZVOČNIK 1: Ja, seveda. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Žal, je bilo vprašanje, če vas Predlagam, dajanje to 321 00:17:46,040 --> 00:17:48,840 na goljufija stanja. 322 00:17:48,840 --> 00:17:49,440 To bi lahko pomagalo. 323 00:17:49,440 --> 00:17:51,490 Če imate prostor, ga lahko dal na. 324 00:17:51,490 --> 00:17:56,170 Prav tako je dovolj le na splošno dobro zapomniti, ker če ga uporabljate 325 00:17:56,170 --> 00:17:59,060 boste morda želeli, da samo so ga zapomnil. 326 00:17:59,060 --> 00:18:02,750 To bo vaše življenje veliko lažje. 327 00:18:02,750 --> 00:18:04,000 Poskusil sem odgovoriti na vaše vprašanje? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Torej sedaj, smo se pogovarjali malo Na kratko o knjižnicah. 330 00:18:14,290 --> 00:18:18,570 Toda dve glavni tisti, ki smo bili uporabi do sedaj v teku so 331 00:18:18,570 --> 00:18:20,860 Standard I / O in CS50. 332 00:18:20,860 --> 00:18:25,410 Kakšne stvari, ki so vključeni v standardni I / O knjižnici? 333 00:18:25,410 --> 00:18:28,410 >> Ja, tako daleč smo uporabili printf. 334 00:18:28,410 --> 00:18:31,150 V CS50, smo uporabili GetInt in GetString. 335 00:18:31,150 --> 00:18:37,200 In podatkovni tip Niz tudi zgodi je treba navesti v tem CS50 knjižnici. 336 00:18:37,200 --> 00:18:40,250 Pogovorila se bova malo bolj podrobno o tem kako knjižnice delujejo in kako jih 337 00:18:40,250 --> 00:18:41,870 interakcijo z ostalo kodo. 338 00:18:41,870 --> 00:18:46,220 Ampak to so dve glavni tisti, ki smo so prišli v stik z doslej 339 00:18:46,220 --> 00:18:48,430 Seveda. 340 00:18:48,430 --> 00:18:50,050 >> Tipi. 341 00:18:50,050 --> 00:18:58,120 Ti so dobri, da se spomnimo, koliko vsaka vrsta predstavlja ali kako 342 00:18:58,120 --> 00:19:02,840 veliko bajtov vsak tipa requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 bajte; char, 1 bajt. 344 00:19:04,990 --> 00:19:06,550 Float je 4 bajte. 345 00:19:06,550 --> 00:19:07,782 Kaj je dvojna? 346 00:19:07,782 --> 00:19:09,032 >> OBČINSTVO: [neslišno]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> ZVOČNIK 1: Ja, tako float vendar dvojno velikost. 349 00:19:16,240 --> 00:19:17,150 Kaj pa dolgoročno? 350 00:19:17,150 --> 00:19:18,400 >> OBČINSTVO: [neslišno]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> ZVOČNIK 1: OK. 353 00:19:24,680 --> 00:19:25,410 Kaj je dolgo? 354 00:19:25,410 --> 00:19:26,660 >> OBČINSTVO: [neslišno]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> ZVOČNIK 1: Ja, dvojno int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Da. 359 00:19:34,705 --> 00:19:36,100 >> OBČINSTVO: [neslišno]. 360 00:19:36,100 --> 00:19:38,030 >> ZVOČNIK 1: Long [neslišno]. 361 00:19:38,030 --> 00:19:41,860 In potem dolgo dolgo je dvakrat da. 362 00:19:41,860 --> 00:19:42,814 >> OBČINSTVO: Ne, ne. 363 00:19:42,814 --> 00:19:47,107 Dokler je samo int. 364 00:19:47,107 --> 00:19:50,910 To je odvisno od arhitekture pred [neslišno] 365 00:19:50,910 --> 00:19:52,922 INT in imajo enako velikost. 366 00:19:52,922 --> 00:19:54,172 [Neslišno]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> ZVOČNIK 1: Tako dolgo in int so enaki. 369 00:20:00,920 --> 00:20:02,943 In potem dolgo dolgo je dvojni int. 370 00:20:02,943 --> 00:20:03,910 Cool. 371 00:20:03,910 --> 00:20:05,550 In potem, kaj je zadnja vrsta? 372 00:20:05,550 --> 00:20:06,510 >> OBČINSTVO: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> ZVOČNIK 1: Ja, zato smo se naučili malo o kazalci. 374 00:20:10,350 --> 00:20:14,015 In glede na to, kaj se kazalec kaže da-- njo bi lahko char zvezda 375 00:20:14,015 --> 00:20:15,880 ali int star-- 376 00:20:15,880 --> 00:20:20,530 to je vedno 4 bajte za kazalec. 377 00:20:20,530 --> 00:20:21,633 Vprašanja o tem? 378 00:20:21,633 --> 00:20:22,116 Ja? 379 00:20:22,116 --> 00:20:24,531 >> OBČINSTVO: [neslišno]? 380 00:20:24,531 --> 00:20:29,530 >> ZVOČNIK 1: Tako dolgo in int so tudi v tem CS50 napravo. 381 00:20:29,530 --> 00:20:32,302 >> OBČINSTVO: naprava popolnoma zamenljivi. 382 00:20:32,302 --> 00:20:33,510 >> ZVOČNIK 1: Ja. 383 00:20:33,510 --> 00:20:36,610 In potem dolgo dolgo je dvojni int. 384 00:20:36,610 --> 00:20:39,250 >> OBČINSTVO: To je 32 bit? 385 00:20:39,250 --> 00:20:40,620 >> ZVOČNIK 1: 32 bit, ja. 386 00:20:40,620 --> 00:20:43,572 >> OBČINSTVO: Torej [neslišno]? 387 00:20:43,572 --> 00:20:46,790 >> ZVOČNIK 1: Ja, če ne bo Izrecno navajamo, vas 388 00:20:46,790 --> 00:20:47,870 morala prevzeti 32 bit. 389 00:20:47,870 --> 00:20:50,040 >> OBČINSTVO: To bi bilo nekaj reči kot ob predpostavki, 390 00:20:50,040 --> 00:20:51,498 arhitektura kot aparata. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 64 bit, samo stvari, ki spremembe so podolgovati in kazalci. 393 00:21:01,710 --> 00:21:05,614 Oba [neslišno]. 394 00:21:05,614 --> 00:21:06,590 >> ZVOČNIK 1: Da? 395 00:21:06,590 --> 00:21:07,566 >> OBČINSTVO: Vprašanje. 396 00:21:07,566 --> 00:21:10,982 Torej, na eni od praks kvizov, se sprašuje o nepodpisano notr. 397 00:21:10,982 --> 00:21:15,374 Torej, kako bi bilo, da se določi od notr [neslišno]? 398 00:21:15,374 --> 00:21:18,140 >> ZVOČNIK 1: unsigned v je tudi 4 bajtov. 399 00:21:18,140 --> 00:21:21,172 Toda kaj je drugačnega podpisana int in nepodpisani int? 400 00:21:21,172 --> 00:21:22,422 >> OBČINSTVO: [neslišno]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> ZVOČNIK 1: Right. 403 00:21:25,630 --> 00:21:27,570 Eden lahko predstavljajo negativne vrednosti. 404 00:21:27,570 --> 00:21:28,580 Toda, kako to storiti? 405 00:21:28,580 --> 00:21:30,536 >> OBČINSTVO: [neslišno]. 406 00:21:30,536 --> 00:21:36,370 >> ZVOČNIK 1: Ja, to prihrani 1 bit, da predstavlja znak. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Podpisana ima en bit, ki predstavlja znak. 409 00:21:45,040 --> 00:21:48,886 In nepodpisani preprosto vseh pozitivnih rezultatov. 410 00:21:48,886 --> 00:21:50,365 >> OBČINSTVO: OK. 411 00:21:50,365 --> 00:21:54,230 Torej pravite, da je dvojna dvakrat velikost plovca? 412 00:21:54,230 --> 00:21:58,202 >> ZVOČNIK 1: Double je dvakrat velikost plovca, ja. 413 00:21:58,202 --> 00:22:01,639 >> OBČINSTVO: Kako kazalec za dolgo dolgo [neslišno]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> ZVOČNIK 1: Torej, vprašanje je, kako se kazalec na dolgi long-- 416 00:22:10,870 --> 00:22:13,800 Kako je to le štiri bajte kadar dolgo dolgo njegove 8 bajtov. 417 00:22:13,800 --> 00:22:17,310 Torej, ne pozabite, kaj je kazalec, bistvu na zelo osnovne vrednosti. 418 00:22:17,310 --> 00:22:19,046 >> OBČINSTVO: [neslišno]. 419 00:22:19,046 --> 00:22:22,670 >> ZVOČNIK 1: Ja, tako da kazalec je le pomnilnik. 420 00:22:22,670 --> 00:22:28,040 Torej ni pomembno, koliko prostora da kazalec kaže na. 421 00:22:28,040 --> 00:22:32,060 Potrebuje le 4 bajte slediti navedene pomnilniškem mestu. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Še kakšno vprašanje? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Cool. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Torej, zadnja stvar, ki sem je standardni izhod. 428 00:22:47,460 --> 00:22:51,020 Moral bi jih pogosto uporabljate dovolj, da se lahko spomnite. 429 00:22:51,020 --> 00:22:54,800 Ampak to je, ko smo uporabili printf, npr. 430 00:22:54,800 --> 00:22:59,260 In imamo te ograde, ki so bili imenovani kode format. 431 00:22:59,260 --> 00:23:03,910 >> Torej odstotkov c char, odstotek i za int, in smo lahko uporabite tudi odstotni d. 432 00:23:03,910 --> 00:23:05,130 To je ista stvar. 433 00:23:05,130 --> 00:23:08,200 Toda, na splošno, v CS50 smo poskusite uporabiti odstotno i. 434 00:23:08,200 --> 00:23:09,860 Odstotkov f za likvidna sredstva. 435 00:23:09,860 --> 00:23:15,620 Odstotkov ld za dolgo dolgo in odstotkov je za niz. 436 00:23:15,620 --> 00:23:18,550 >> Podobno smo se s pomočjo nekaj od teh zaporedij pobega. 437 00:23:18,550 --> 00:23:22,431 Na primer, backslashem n za novo linijo. 438 00:23:22,431 --> 00:23:26,910 To je samo za takrat, ko ste formatiranje kodo za tisk f. 439 00:23:26,910 --> 00:23:27,260 Ja? 440 00:23:27,260 --> 00:23:28,906 >> OBČINSTVO: Kaj je odstotek d za? 441 00:23:28,906 --> 00:23:31,850 >> ZVOČNIK 1: Torej, vprašanje je tisto, kar je za odstotno d? 442 00:23:31,850 --> 00:23:33,270 Odstotkov d je za ints. 443 00:23:33,270 --> 00:23:37,392 Odstotek d in odstotka i sta enaka. 444 00:23:37,392 --> 00:23:41,130 >> OBČINSTVO: Kakšna je razlika med n poševnica nazaj in poševnica nazaj r? 445 00:23:41,130 --> 00:23:45,300 >> ZVOČNIK 1: Torej, vprašanje je, kaj je Razlika med zračnosti n in 446 00:23:45,300 --> 00:23:48,615 backlash r? 447 00:23:48,615 --> 00:23:50,906 Mislim ubežnimi r je-- 448 00:23:50,906 --> 00:23:54,340 >> OBČINSTVO: Torej Nagibnica r samo pomeni, vrne na začetek vrstice 449 00:23:54,340 --> 00:23:56,670 ne da bi se dejansko dogaja, da v novo vrstico. 450 00:23:56,670 --> 00:24:01,000 Torej, če tiskate backslashem r in si nazaj na začetek vrstice 451 00:24:01,000 --> 00:24:04,005 potem si natisnete več stvari, si prepisati stvari, ki je že na 452 00:24:04,005 --> 00:24:04,390 [Neslišno]. 453 00:24:04,390 --> 00:24:06,725 Ker n dejansko gre za novo linijo in gre na [neslišno]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> ZVOČNIK 1: No, katera koli druga vprašanja? 456 00:24:13,915 --> 00:24:15,430 V redu. 457 00:24:15,430 --> 00:24:18,617 Jaz grem, da ga izroči off Dan, ki se bo nadaljevalo. 458 00:24:18,617 --> 00:24:25,078 >> [APLAVZ] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: Vse Prav. 461 00:25:09,720 --> 00:25:18,590 Torej bom govoril o drugi širok paleta idej iz razreda, ki so 462 00:25:18,590 --> 00:25:23,220 približno predstavnik dva tedna in začetek tritedenskega speljevanju 463 00:25:23,220 --> 00:25:28,690 z litjem, ki je le način zdravljenje vrednosti določene vrste, kot 464 00:25:28,690 --> 00:25:30,830 vrednost drugačne vrste. 465 00:25:30,830 --> 00:25:34,110 Tako da bomo lahko to storite s znakov za ints, plava na ints, in 466 00:25:34,110 --> 00:25:35,360 dolge hrepeni podvojilo. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Vse te stvari se lahko uporablja kot načine zdravljenja nekaj številsko vrednost 469 00:25:44,500 --> 00:25:48,370 minus char kot nekatere druge številska vrednost. 470 00:25:48,370 --> 00:25:54,480 Torej obstaja nekaj vprašanj, s tem, od Seveda, ki pride, ko odda 471 00:25:54,480 --> 00:25:57,860 stvari, kot likvidna sredstva do ints. 472 00:25:57,860 --> 00:26:00,500 Tako da je to malo čudno. 473 00:26:00,500 --> 00:26:03,170 Imamo plovec, ki je 1,31. 474 00:26:03,170 --> 00:26:05,220 Mi ga pomnožite z 10.000. 475 00:26:05,220 --> 00:26:08,380 In potem smo ga natisnete kot notr. 476 00:26:08,380 --> 00:26:09,630 Kaj ta izhod? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10.000-krat 1.31. 479 00:26:14,020 --> 00:26:18,761 Torej, 13.000, je, da ugibati? 480 00:26:18,761 --> 00:26:20,685 >> OBČINSTVO: Mislim, da je 10.000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Torej sem jo pomnožimo s 10.000 preden sem jo litje. 482 00:26:24,234 --> 00:26:25,202 >> OBČINSTVO: Oh. 483 00:26:25,202 --> 00:26:27,622 Ne bi bilo eno 9 in nekateri 0 številke? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Morda imate čudne cifre. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Tako da, to je 1,3-krat 10.000. 487 00:26:37,670 --> 00:26:40,040 Torej, to je 13.000. 488 00:26:40,040 --> 00:26:41,313 In to extra weird-- 489 00:26:41,313 --> 00:26:42,160 >> OBČINSTVO: 13.100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13.100. 491 00:26:42,650 --> 00:26:44,910 Hvala, Rob. 492 00:26:44,910 --> 00:26:46,610 In to extra weirdness-- 493 00:26:46,610 --> 00:26:48,060 to 9,9-- 494 00:26:48,060 --> 00:26:53,860 preprosto zato, ker ta litje končal zaokroževanja navzdol, kjer 495 00:26:53,860 --> 00:26:55,394 ne bi smel imeti. 496 00:26:55,394 --> 00:26:55,871 Ja. 497 00:26:55,871 --> 00:26:58,256 >> OBČINSTVO: casting zgodi Po kaj drugega? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Torej, ker imam to v tisku, je Ali to množenje pred njim 499 00:27:03,865 --> 00:27:05,230 Ali to litje. 500 00:27:05,230 --> 00:27:06,140 >> OBČINSTVO: [neslišno]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Mislim, da bi vzbujalo prvič, ja, kar bi bilo 10.000. 502 00:27:11,350 --> 00:27:12,610 Kaj drugega? 503 00:27:12,610 --> 00:27:13,330 Cool. 504 00:27:13,330 --> 00:27:16,344 Torej, to je 13.099. 505 00:27:16,344 --> 00:27:17,840 Zakaj se to dogaja? 506 00:27:17,840 --> 00:27:18,900 Nenatančnost. 507 00:27:18,900 --> 00:27:21,020 >> Boje niso popolni. 508 00:27:21,020 --> 00:27:27,550 Ti lahko predstavljajo le številke, na določeno število pomembnih osebnosti. 509 00:27:27,550 --> 00:27:35,120 Torej, če želimo natisniti 8 SIG fige na to float, smo dobili neke vrste 510 00:27:35,120 --> 00:27:36,800 grdo videti številko. 511 00:27:36,800 --> 00:27:45,580 In to zato, ker 1.31 ne more natančno jih preprosto zastopa 512 00:27:45,580 --> 00:27:49,000 pristojnosti dveh v napravi. 513 00:27:49,000 --> 00:27:53,530 Tako se konča ob katerem uganiti, ki konča 514 00:27:53,530 --> 00:27:55,710 pri čemer je malo nizka. 515 00:27:55,710 --> 00:27:57,730 Smisla? 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> Zdaj, preklopi so drugačen način početje pogojni stavki, kjer vse 518 00:28:05,840 --> 00:28:09,900 skrbimo je ena spremenljivka. 519 00:28:09,900 --> 00:28:16,570 Torej, v tem konkretnem primeru, da smo dobili celo število od uporabnika. 520 00:28:16,570 --> 00:28:21,070 In potem gledava kaj to celo je. 521 00:28:21,070 --> 00:28:23,500 Domnevam, da je število od enega do štirih. 522 00:28:23,500 --> 00:28:24,800 To je tisto, kar iščeš. 523 00:28:24,800 --> 00:28:28,450 >> Torej vam preusmeritve ime spremenljivke. 524 00:28:28,450 --> 00:28:34,290 Potem ko nastavite primerov mogoče vrednosti bi lahko bila. 525 00:28:34,290 --> 00:28:37,730 Torej neki primer, pravijo, da je nizka. 526 00:28:37,730 --> 00:28:41,080 In potem si zlomil ven stanja stikala tako 527 00:28:41,080 --> 00:28:43,270 da ne nadaljujem. 528 00:28:43,270 --> 00:28:44,830 >> V naslednjem case-- 529 00:28:44,830 --> 00:28:46,940 tako velja dve leti in velja three-- 530 00:28:46,940 --> 00:28:51,920 če je zadeva dve pa le pade na Prva vrstica kode se vidi kot pri 531 00:28:51,920 --> 00:28:55,400 malimi tri, dokler ne vidi odmor. 532 00:28:55,400 --> 00:29:00,430 Torej razlog, da si dobil zadevo eno do Samo print nizka zato, ker I 533 00:29:00,430 --> 00:29:01,890 ima ta odmor tukaj. 534 00:29:01,890 --> 00:29:05,360 Če bi, recimo, prezreti to break-- če sem vrgel breakaway-- 535 00:29:05,360 --> 00:29:09,740 bi tiskanje nizek, nato pa bi natisniti na sredini, nato pa bi prekinil. 536 00:29:09,740 --> 00:29:12,200 >> Torej počitnice so pomemben del za preklop pogoje in 537 00:29:12,200 --> 00:29:14,340 morali bi biti tam. 538 00:29:14,340 --> 00:29:20,070 Vse primere, ki so izrecno navedene se shranijo na privzeto 539 00:29:20,070 --> 00:29:26,645 velja za stikala in jih je treba odda. 540 00:29:26,645 --> 00:29:31,363 >> PUBLIKA: Torej 1, 2, 3, in 4 bi n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Vrednosti, ki lahko n. 542 00:29:33,310 --> 00:29:34,654 Da. 543 00:29:34,654 --> 00:29:35,146 Ja? 544 00:29:35,146 --> 00:29:37,606 >> OBČINSTVO: Torej, če imate da [neslišno]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Ti bi natisniti nizka, in nato bi natisniti na sredini, in 547 00:29:46,830 --> 00:29:47,400 potem bi prekinil. 548 00:29:47,400 --> 00:29:50,244 >> OBČINSTVO: Zakaj bi ga natisnete middle if [neslišno]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Torej, vse, kar je v okviru postopka pred odmor spada. 551 00:30:00,550 --> 00:30:09,390 Torej velja eno print je pod primera ena, saj je to po tisk. 552 00:30:09,390 --> 00:30:09,890 Ja? 553 00:30:09,890 --> 00:30:11,140 >> OBČINSTVO: [neslišno]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Torej je ta številka le posebej vrednost, ki jo ta spremenljivka 556 00:30:22,170 --> 00:30:23,420 lahko, kajne? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Ali to smiselno? 559 00:30:28,490 --> 00:30:28,990 Ja. 560 00:30:28,990 --> 00:30:31,490 >> OBČINSTVO: [neslišno]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Da bi primer dva natisnete srednja in nato prekinil. 562 00:30:34,130 --> 00:30:35,380 >> OBČINSTVO: [neslišno]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Mislim, da vsaka? 565 00:30:40,050 --> 00:30:43,855 Katere druge vrste podatkov lahko preklopite? 566 00:30:43,855 --> 00:30:46,320 >> OBČINSTVO: lahko preklapljate nad vsemi podatkovnimi tipi. 567 00:30:46,320 --> 00:30:50,905 Ampak to samo pomeni nič več kot znakov in ints in podobne stvari, ker 568 00:30:50,905 --> 00:30:55,600 če ste preklopu kazalec da ne res ni smiselno, 569 00:30:55,600 --> 00:30:59,555 preklopu obremenitvami, če je celo dajva vam, da se zaradi plavajočo vejico 570 00:30:59,555 --> 00:31:02,840 natančnosti, da ne bi res želite storiti, da vseeno. 571 00:31:02,840 --> 00:31:07,320 Torej precej, le ints in znakov in stvari, kot je ta. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Ja, to je, če imate izrecna vrednote, da veste, mislim, da se lahko 573 00:31:12,360 --> 00:31:14,250 da je dejansko uporaben stikalo. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Dobro? 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> Področje je območje, ki razglasi spremenljivka razširi. 578 00:31:26,180 --> 00:31:32,190 Torej, v tej mali kos kode imam, da bi bilo polno napak. 579 00:31:32,190 --> 00:31:41,450 In razlog je razglasila sem to int i v okviru področja uporabe tega za zanke. 580 00:31:41,450 --> 00:31:46,390 In potem skušam reference, ki i zunaj, da je za zanke področja. 581 00:31:46,390 --> 00:31:50,330 >> Torej v bistvu, lahko si misliš o obsegu kot vse, kar ste razglasi 582 00:31:50,330 --> 00:31:59,750 s znotraj sklopa zavitimi oklepaji le obstaja znotraj teh zavitimi oklepaji. 583 00:31:59,750 --> 00:32:04,990 In če ste poskusili uporabiti to spremenljivko zunaj teh zavitimi oklepaji, boste 584 00:32:04,990 --> 00:32:08,356 dobili napako od prevajalnika. 585 00:32:08,356 --> 00:32:08,812 Ja? 586 00:32:08,812 --> 00:32:09,724 >> OBČINSTVO: Torej, ta ne deluje? 587 00:32:09,724 --> 00:32:11,790 >> DAN: To ne deluje, ja. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Strings. 590 00:32:18,660 --> 00:32:19,780 String char *. 591 00:32:19,780 --> 00:32:22,250 Oni so popolnoma enaki. 592 00:32:22,250 --> 00:32:25,540 So le kazalci na znake. 593 00:32:25,540 --> 00:32:33,000 In vse strune, ki jih imate se mora končati z backslashem nič, ki je pravkar 594 00:32:33,000 --> 00:32:34,410 c konvencija. 595 00:32:34,410 --> 00:32:36,680 >> To se imenuje NULL terminator. 596 00:32:36,680 --> 00:32:39,050 In NULL-- 597 00:32:39,050 --> 00:32:41,670 Kapital N, U kapital, kapital L, kapital jaz-- 598 00:32:41,670 --> 00:32:44,290 ni ista kot NULL terminator. 599 00:32:44,290 --> 00:32:46,640 To je kazalec. 600 00:32:46,640 --> 00:32:48,280 To je znak. 601 00:32:48,280 --> 00:32:49,530 So zelo različni. 602 00:32:49,530 --> 00:32:50,200 Se spomnite. 603 00:32:50,200 --> 00:32:52,320 To bo na kvizu, verjetno. 604 00:32:52,320 --> 00:32:54,040 Nisem še videl kviz. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Ja? 607 00:32:58,840 --> 00:33:01,232 >> OBČINSTVO: Torej NULL je, recimo, kazalec? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Da. 609 00:33:01,995 --> 00:33:05,170 >> OBČINSTVO: Kaj [neslišno]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Če, recimo, je malloc poklical, ko vas nimajo dovolj spomina, da bi dobili 611 00:33:10,050 --> 00:33:14,400 ne glede na velikost prosiš za, malloc bo vrnila NULL. 612 00:33:14,400 --> 00:33:19,550 To je, v bistvu, kadarkoli funkcija naj vrne kazalec, si 613 00:33:19,550 --> 00:33:22,600 morali preveriti pred NULL zato, ker NULL je precej good-- 614 00:33:22,600 --> 00:33:25,260 to je, nekako, smeti vrednost. 615 00:33:25,260 --> 00:33:27,050 To je nič, kolikor kazalci iti. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Vsakič, ko pokličete funkcijo, ki vrne kazalec. 618 00:33:32,250 --> 00:33:35,960 Boste želeli preveriti, da se Prepričajte se, da je ta kazalec ni NULL 619 00:33:35,960 --> 00:33:37,760 ker NULL je zelo pogosta. 620 00:33:37,760 --> 00:33:40,160 To je neke vrste smeti zameno. 621 00:33:40,160 --> 00:33:44,902 Torej, če nekaj ni šlo v redu, samo vrnitev NULL namesto. 622 00:33:44,902 --> 00:33:45,898 >> OBČINSTVO: [neslišno]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Ja, in to je to. 624 00:33:48,922 --> 00:33:51,750 >> OBČINSTVO: [neslišno]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: črkovati kot je ta. 626 00:33:52,800 --> 00:33:54,150 To je NULL terminator. 627 00:33:54,150 --> 00:33:56,560 To je majhna črka N-U-L-L, če ste ga črkovanje. 628 00:33:56,560 --> 00:33:59,860 >> OBČINSTVO: In sem šla nazaj in ga testirali. 629 00:33:59,860 --> 00:34:03,010 In če boste poskušali postaviti plavajočo vejico vrednost v stikalo, bo kričal na vas 630 00:34:03,010 --> 00:34:05,916 rekoč izjavo zahteva izraz od celega števila tipa. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Takole. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Ampak ja, kaj je bilo vprašanje znova? 634 00:34:12,246 --> 00:34:13,496 >> OBČINSTVO: [neslišno]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Torej kapital N, U kapital, kapital L, kapital L je dejanska c stvar. 637 00:34:23,679 --> 00:34:29,719 To je NULL kazalec in bo obravnavati le kot primer. 638 00:34:29,719 --> 00:34:33,530 Vam ne bo nikoli poskusil in črkovanja NULL značaj in videli, kateri koli 639 00:34:33,530 --> 00:34:35,630 drug način, kot to. 640 00:34:35,630 --> 00:34:36,610 Ja? 641 00:34:36,610 --> 00:34:42,490 >> OBČINSTVO: Torej se vračajo v char max ali nekaj v pojasnilih, kajne 642 00:34:42,490 --> 00:34:43,960 utelešajo isto funkcijo kot [neslišno]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> OBČINSTVO: Torej se to nanaša vrnitvi zoglenel max iz getchar, ali 645 00:34:54,949 --> 00:34:55,444 karkoli že je? 646 00:34:55,444 --> 00:34:55,940 >> OBČINSTVO: Ja. 647 00:34:55,940 --> 00:34:58,620 >> OBČINSTVO: Ja, tako splošni izraz za vse tiste stvari, 648 00:34:58,620 --> 00:34:59,920 so kontrolne vrednosti. 649 00:34:59,920 --> 00:35:03,640 Tako kot se vračajo int max iz GetInt in char max iz getchar, je 650 00:35:03,640 --> 00:35:06,010 naj bi bila v redu, če te stvari se vračajo k nam, 651 00:35:06,010 --> 00:35:07,210 Nekaj ​​je šlo narobe. 652 00:35:07,210 --> 00:35:09,950 >> Kazalce, samo zgodi, da imajo to sentinel vrednost, da se vsi 653 00:35:09,950 --> 00:35:10,750 se dogovori. 654 00:35:10,750 --> 00:35:13,210 In to je stvar, ki jo vrne ko gredo stvari narobe. 655 00:35:13,210 --> 00:35:15,910 Torej char max je tisto, kar smo s pomočjo da predstavlja nekaj 656 00:35:15,910 --> 00:35:18,100 kot NULL ali getchar. 657 00:35:18,100 --> 00:35:23,420 >> OBČINSTVO: Torej, če ste testiranje getchar, lahko daš NULL? 658 00:35:23,420 --> 00:35:23,910 Bi bilo to pomembno? 659 00:35:23,910 --> 00:35:25,400 >> DAN: Nisi mogel preveriti NULL. 660 00:35:25,400 --> 00:35:30,130 Vi bi morali preveriti zoglenel max, ker vrne vrednost iz funkcije je 661 00:35:30,130 --> 00:35:35,416 značaj ni kazalec. 662 00:35:35,416 --> 00:35:35,888 Ja? 663 00:35:35,888 --> 00:35:38,248 >> OBČINSTVO: To vprašanje je za dolžino niza. 664 00:35:38,248 --> 00:35:40,136 Ali to vključuje NULL znak? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Ne 666 00:35:41,000 --> 00:35:45,930 In to je pravzaprav, kako dolžina niza ve, da se ustavi, ker gre skozi 667 00:35:45,930 --> 00:35:49,070 vaš nabor znakov, dokler vidi NULL značaja. 668 00:35:49,070 --> 00:35:51,030 In potem je tako kot vse V redu, bom naredil. 669 00:35:51,030 --> 00:35:52,130 >> OBČINSTVO: [neslišno] pet? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Pozdravljeni bi bilo pet. 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 Torej, nizi so neprekinjeno bloki pomnilnika. 674 00:36:02,880 --> 00:36:08,480 Imajo takojšen dostop z besedami ime za niz in nato v Curly 675 00:36:08,480 --> 00:36:16,720 oporniki, ne glede na indeks želite iti da, oni so indeksirane od nič preko 676 00:36:16,720 --> 00:36:20,100 dolžina array minus 1. 677 00:36:20,100 --> 00:36:23,070 >> In oni, ki jih je vrsto razglasi stvar, ki ste shranjevanje v 678 00:36:23,070 --> 00:36:29,750 matrika, ime niza, in nato ne glede na velikost je ta niz. 679 00:36:29,750 --> 00:36:36,660 Torej je to char array dolžine šest da ima te vrednosti. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Ja? 682 00:36:42,700 --> 00:36:43,950 >> OBČINSTVO: [neslišno]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Ja. 685 00:36:48,460 --> 00:36:51,340 >> OBČINSTVO: [neslišno]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Če imate, kaj se dogaja v matriki že. 687 00:36:56,700 --> 00:37:02,260 Torej, lahko bi to namesto določite kot, recimo, znak, ne glede na ime vašega 688 00:37:02,260 --> 00:37:12,200 Niz je prazna oklepaja enaka curly naramnicami H comma E comma L vejico L vejico 689 00:37:12,200 --> 00:37:16,290 O comma NULL znak in kodrasti brace. 690 00:37:16,290 --> 00:37:18,180 Da bi deloval tudi kot izjava. 691 00:37:18,180 --> 00:37:20,886 >> OBČINSTVO: [neslišno]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Potem morate imeti velikost že. 693 00:37:23,110 --> 00:37:23,896 >> OBČINSTVO: [neslišno]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Da. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Vse Prav. 697 00:37:32,420 --> 00:37:36,430 Argumenti ukazne vrstice so način pridobivanje prispevek od uporabnika kot 698 00:37:36,430 --> 00:37:39,380 Glavni argumenti. 699 00:37:39,380 --> 00:37:40,600 Glavni traja dva argumenta. 700 00:37:40,600 --> 00:37:47,680 Število argumentov, da bi opravil po ukazni vrstici in a 701 00:37:47,680 --> 00:37:55,340 niz vektor ali nizov vseh argumentov. 702 00:37:55,340 --> 00:38:07,840 >> Torej, če, recimo, imenovano funkcijo kot dot od 1 prostor, 2 vesolja, tri, 703 00:38:07,840 --> 00:38:10,110 argc bi 4. 704 00:38:10,110 --> 00:38:17,370 In argv 0 bi pika ven. 705 00:38:17,370 --> 00:38:19,130 Argv1 bi 1. 706 00:38:19,130 --> 00:38:23,030 argv2 bi 2. argv3 bi 3, v tem konkretnem primeru. 707 00:38:23,030 --> 00:38:23,310 Ja? 708 00:38:23,310 --> 00:38:25,400 >> OBČINSTVO: [neslišno]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: zadnji element v matriki ker matrika je dolžina argc plus 710 00:38:34,010 --> 00:38:41,050 eden argb, zadnji element je NULL kazalec. 711 00:38:41,050 --> 00:38:42,580 To je argc plus 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Torej, v primeru, da sem rekel, bi argv 0 je pika ven. 714 00:38:52,150 --> 00:38:56,330 argv 1 je 1. argv2 je na 2. argv 3 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, ki je ena večja kot argc bi NULL. 716 00:39:03,490 --> 00:39:04,870 >> In to je NULL kazalec. 717 00:39:04,870 --> 00:39:06,590 Da. 718 00:39:06,590 --> 00:39:11,250 In to zato, ker niz char zvezda je kazalec. 719 00:39:11,250 --> 00:39:14,102 Torej mora biti enakega tipa. 720 00:39:14,102 --> 00:39:14,595 Ja? 721 00:39:14,595 --> 00:39:16,074 >> OBČINSTVO: Dve vprašanji. 722 00:39:16,074 --> 00:39:21,004 Torej eno, kaj je razlika med Ta in drugi kot eno vrsto GetString 723 00:39:21,004 --> 00:39:22,483 v uporabniškem motorju? 724 00:39:22,483 --> 00:39:25,934 In drugič, je shranjena v vaš nedavni spomin? 725 00:39:25,934 --> 00:39:28,399 Torej podobno, bi GetString biti [neslišno]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Kje je shranjena? 728 00:39:33,650 --> 00:39:34,905 Ne vem, kje je shranjena. 729 00:39:34,905 --> 00:39:40,000 >> OBČINSTVO: Torej, pravzaprav, saj veš, kako vsaka funkcijo, ki jo imenujemo to argumenti 730 00:39:40,000 --> 00:39:42,170 so shranjeni v skladovnici? 731 00:39:42,170 --> 00:39:46,610 Torej argc in argv so argumenti za glavno in so na kupu, ali res 732 00:39:46,610 --> 00:39:49,131 tik nad tisto, kar misliš, da kot začetek dimnika. 733 00:39:49,131 --> 00:39:53,490 Kaj je bil drugi del na vprašanje? 734 00:39:53,490 --> 00:39:56,821 >> OBČINSTVO: Torej, kaj je [neslišno]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Ja, to je samo drugačen način pridobivanje vnos od uporabnika. 736 00:40:00,990 --> 00:40:06,030 Ta je nekoliko bolj učinkovit in je bolj priročen za skripte, ker vas 737 00:40:06,030 --> 00:40:10,070 komaj gredo argumente za svoj glavni funkcija, namesto da bi morali čakati 738 00:40:10,070 --> 00:40:13,400 za uporabnike, če nimate nobenih uporabnikom. 739 00:40:13,400 --> 00:40:16,280 >> OBČINSTVO: In ja, dobil strune bo [neslišno]. 740 00:40:16,280 --> 00:40:17,922 To bi shranite stvari, ki jih potrebujete. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Ja? 742 00:40:18,834 --> 00:40:21,114 >> OBČINSTVO: [neslišno]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Da, argv 0 vedno vključuje dot poševnica funkcijskega klica. 744 00:40:27,545 --> 00:40:28,042 Ja? 745 00:40:28,042 --> 00:40:29,292 >> OBČINSTVO: [neslišno]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Ja, vsak od argumentov, ki so končalo znakom NULL, ker so 748 00:40:37,310 --> 00:40:38,310 so strune. 749 00:40:38,310 --> 00:40:40,892 >> OBČINSTVO: [neslišno]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Da, argv argc je NULL kazalec. 751 00:40:44,116 --> 00:40:45,112 >> OBČINSTVO: [neslišno]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: Oh ja. 753 00:40:47,104 --> 00:40:48,100 Ja, oprosti. 754 00:40:48,100 --> 00:40:49,594 >> OBČINSTVO: Torej [neslišno]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: Torej, vprašanje je, če bi imeli ukazni vrstici dot poševnica piko iz 1, 2, 757 00:41:16,340 --> 00:41:20,410 bi število ukazno vrstico argumenti dveh ali bi bilo tri? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> OBČINSTVO: Mislim, da ne važno. 760 00:41:28,240 --> 00:41:31,370 Jaz ponavadi rečem, oh, saj ni prenesel vsi argumenti v ukazni vrstici, kadar 761 00:41:31,370 --> 00:41:32,730 Očitno si poklical funkcijo. 762 00:41:32,730 --> 00:41:37,950 Torej, sem se nagibajo k glasno izključiti Funkcija v ukazni vrstici 763 00:41:37,950 --> 00:41:40,350 Argumenti čeprav je vključene v argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Ampak, če je bilo na test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- in tudi če rečeš kot argc enak 3, 766 00:41:46,550 --> 00:41:48,512 ste v varnem stanju. 767 00:41:48,512 --> 00:41:49,416 Ja? 768 00:41:49,416 --> 00:41:50,666 >> OBČINSTVO: [neslišno]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Mislim, da če bi namesto kliče to v argc in godalnih ARGV oklepajih 771 00:42:09,510 --> 00:42:14,350 vendar je ohranil iste vrste in je pravkar klicala jim nekaj drugega kot 772 00:42:14,350 --> 00:42:16,640 in b, bi to še vedno deluje? 773 00:42:16,640 --> 00:42:18,790 In da bi bilo še vedno dela, bi samo-- 774 00:42:18,790 --> 00:42:21,520 namesto uporabe argc-- ste jo uporabili, in b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Ja? 777 00:42:25,408 --> 00:42:26,658 >> OBČINSTVO: [neslišno]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: Torej, vprašanje je GetString je dogaja, da shranite spomin na kupu 780 00:42:38,850 --> 00:42:42,280 ker GetString je char *. 781 00:42:42,280 --> 00:42:47,530 V njej so zbrani spomin na kup, saj poziva zdaj malloc v dejanski 782 00:42:47,530 --> 00:42:49,258 Izvajanje GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 OK, se gibljejo na. 785 00:42:55,090 --> 00:42:55,950 >> Varnost. 786 00:42:55,950 --> 00:43:01,090 Tako, da je resnično varen, vam zanesti na noben ena in si dovolite nihče dostopa do katere koli 787 00:43:01,090 --> 00:43:04,540 vaših podatkov, ki je, zakaj vsakdo gradi svoje stroje, 788 00:43:04,540 --> 00:43:09,580 svoje operacijske sisteme, vse svoje Programi iz nič, in očitno 789 00:43:09,580 --> 00:43:13,410 ne priključite na vse druge stroje preko interneta. 790 00:43:13,410 --> 00:43:17,350 Torej računalniki so nezanesljivi. 791 00:43:17,350 --> 00:43:19,200 So v resnici. 792 00:43:19,200 --> 00:43:20,940 Moramo zaupati drugim ljudem. 793 00:43:20,940 --> 00:43:26,500 >> In ideja varnosti je, da si poskušajo omejiti količino 794 00:43:26,500 --> 00:43:27,540 zaupanje, ki ga potrebujejo. 795 00:43:27,540 --> 00:43:32,080 In eno od sredstev, to storite je s pomočjo kriptografije. 796 00:43:32,080 --> 00:43:34,950 Kriptografija se v bistvu imamo skrivnosti. 797 00:43:34,950 --> 00:43:38,880 >> Včasih moramo opraviti svoje skrivnosti skupaj z, recimo, internet ali 798 00:43:38,880 --> 00:43:39,980 druge stvari. 799 00:43:39,980 --> 00:43:43,180 In ne želimo ljudi poznati te skrivnosti. 800 00:43:43,180 --> 00:43:50,100 Tako smo šifriranje naše skrivnosti v način da upamo, da nihče ne more ugotoviti. 801 00:43:50,100 --> 00:43:51,600 >> Tako smo used-- 802 00:43:51,600 --> 00:43:54,340 po poteku tega class-- 803 00:43:54,340 --> 00:44:00,750 stvari, kot Cezarjeva šifra in [Neslišno], ki sta oba zelo, zelo 804 00:44:00,750 --> 00:44:03,200 negotove načini šifriranje stvari. 805 00:44:03,200 --> 00:44:07,930 Oni so enostavno, da ugotovimo, kaj in kakšne so vaše skrivnosti. 806 00:44:07,930 --> 00:44:12,130 Realnem svetu uporablja veliko več zapletenih shem šifriranja. 807 00:44:12,130 --> 00:44:13,880 In ne bomo dobili v veliko več kot to. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Razhroščevanje. 810 00:44:19,430 --> 00:44:20,785 GDB je najboljši. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Grem še enkrat poudariti to. 813 00:44:25,810 --> 00:44:30,920 Gdb ves čas vse Čas imate težave. 814 00:44:30,920 --> 00:44:36,030 Ukazi, ki so uporabni v GDB so odmor, ki se boste peljali bodisi linijo 815 00:44:36,030 --> 00:44:41,330 številko, ime funkcije, v bistvu kje v kodi želite ustaviti, 816 00:44:41,330 --> 00:44:45,600 in biti sposoben, da prevzame nadzor. 817 00:44:45,600 --> 00:44:54,140 >> Print traja spremenljivko in natisne karkoli, da spremenljivka je tole 818 00:44:54,140 --> 00:44:55,990 točka v izvedbi. 819 00:44:55,990 --> 00:45:00,130 Naslednja premakne izvedbo po enem koraku. 820 00:45:00,130 --> 00:45:05,050 In okrepiti ukrepe znotraj funkcije v izvedbi. 821 00:45:05,050 --> 00:45:10,480 >> Druge stvari vodijo, ki je, kako ste dejansko vodijo svojo kodo. 822 00:45:10,480 --> 00:45:16,630 Nadaljujte sprejme vse ukrepe, potrebne , da bi dobili na naslednjo točko lomljenja. 823 00:45:16,630 --> 00:45:18,300 In obstaja veliko, mnogi drugi. 824 00:45:18,300 --> 00:45:19,040 Jih poglej gor. 825 00:45:19,040 --> 00:45:19,901 Oni so super. 826 00:45:19,901 --> 00:45:20,863 Ja? 827 00:45:20,863 --> 00:45:22,113 >> OBČINSTVO: [neslišno]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Yes, ki je debugger. 830 00:45:28,200 --> 00:45:34,230 Torej debugger je program, ki vam omogoča, da debug vaš program. 831 00:45:34,230 --> 00:45:39,931 To ni program, ki najde hroščev za ti, čeprav to bi bilo super. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> In nazadnje je zame iskanje. 834 00:45:46,040 --> 00:45:51,470 Torej vrste iskanja, ki smo govorili pa v tem razredu so linearne iskanje, 835 00:45:51,470 --> 00:45:55,960 ki je samo, da pogledaš skozi vsako element iskalni prostor, ena 836 00:45:55,960 --> 00:46:00,410 element v času, dokler ne boste našli kaj iščete ali dokler ne pridete 837 00:46:00,410 --> 00:46:03,350 konec iskalni prostor, na katerem točka pravite, da ni bilo mogoče najti 838 00:46:03,350 --> 00:46:06,360 element, ki ste jih iskali. 839 00:46:06,360 --> 00:46:13,450 In to traja kvečjemu konstantno časa, ki je 0 1 in v najslabšem ravnega 840 00:46:13,450 --> 00:46:16,070 Čas, ki je 0 n. 841 00:46:16,070 --> 00:46:19,250 >> Binarno iskanje, kar potrebuje Umazan elementi. 842 00:46:19,250 --> 00:46:24,230 Greš do sredine vaših elementov, vidim, če element iščete 843 00:46:24,230 --> 00:46:30,120 je večja ali manjša od elementa da ste na sredini. 844 00:46:30,120 --> 00:46:36,510 To je večje, ste rekli, da je dno vaše iskanje je prostora Vaše 845 00:46:36,510 --> 00:46:41,550 Trenutna lokacija, srednji, in vnovičnem zagonu procesa. 846 00:46:41,550 --> 00:46:46,150 Če je manjša, videti si rekel, da za-- ja, kaj se dogaja? 847 00:46:46,150 --> 00:46:47,400 >> OBČINSTVO: [neslišno]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Da. 850 00:46:54,260 --> 00:46:58,360 Kakršnih koli vrste, ki se je učil pri razred je poštena igra za test. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Smeh] 853 00:47:04,920 --> 00:47:10,260 >> DAN: In dejstvo, da niste imeli to storiti za problem niz, je pošteno 854 00:47:10,260 --> 00:47:12,420 igra za preskus. 855 00:47:12,420 --> 00:47:15,186 >> OBČINSTVO: Lahko gremo nad njim, kako da-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: bo, bo šla skozi. 857 00:47:17,052 --> 00:47:20,496 >> SPEAKER 2: dejanska koda [Neslišno] je na study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Torej, če pogledaš na problem prakse na strani z zlivanjem v 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, da je koda za izvajanje zlivanjem. 861 00:47:35,880 --> 00:47:38,550 Torej vam ni treba izvajati nocoj sami. 862 00:47:38,550 --> 00:47:42,090 Ampak poskrbite, da boste razumeli, ne kot samo pamet. 863 00:47:42,090 --> 00:47:45,035 >> OBČINSTVO: [neslišno]? 864 00:47:45,035 --> 00:47:49,720 >> SPEAKER 2: stran merge sort na study.cs50.net, je praksa 865 00:47:49,720 --> 00:47:53,570 problem, da bom, če boste s klikom Problem, na koncu pa je 866 00:47:53,570 --> 00:47:56,280 rešitev, ki je za spajanje izvajanje vrste. 867 00:47:56,280 --> 00:47:58,510 Ampak poskrbite, da boste razumeli in ne samo to zapomniti 868 00:47:58,510 --> 00:47:59,760 ali kopirate navzdol. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> OBČINSTVO: In popolnoma veljaven problem za izpit bi bilo 871 00:48:06,340 --> 00:48:07,990 nekaj podobnega tukaj seznam. 872 00:48:07,990 --> 00:48:12,100 Kaj pomeni ta seznam izgledal po en korak izbore vrste ali 873 00:48:12,100 --> 00:48:13,330 vstavljanje sort ali karkoli. 874 00:48:13,330 --> 00:48:14,940 Ena polna ponovitev seznama. 875 00:48:14,940 --> 00:48:18,530 Torej, tudi če ne boste na koncu morali koda za njo, jo morate razumeti 876 00:48:18,530 --> 00:48:20,440 dovolj, da vem, kako to gre da se spreminja ta niz. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: To je to za mene. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [APLAVZ] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hej vsem. 883 00:49:07,410 --> 00:49:08,390 Moje ime je Lucas. 884 00:49:08,390 --> 00:49:16,840 Bom govoril o rekurzije, vse so vrste, ki smo jih naučili, in 885 00:49:16,840 --> 00:49:18,050 Malo vseh kazalcev. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 Torej, najprej, rekurzija. 888 00:49:20,340 --> 00:49:22,951 Kaj pomeni reči, da funkcija rekurzivno? 889 00:49:22,951 --> 00:49:24,675 >> OBČINSTVO: se klici. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, se poziva, ja. 891 00:49:26,500 --> 00:49:27,700 Tako kot te slike, na primer. 892 00:49:27,700 --> 00:49:30,280 To je kot na sliki v notranjosti iz slike in tako naprej. 893 00:49:30,280 --> 00:49:35,740 Tako, na primer, lahko have-- kot Dan ki je govoril o binarnem iskanju. 894 00:49:35,740 --> 00:49:41,840 Eden od načinov, ki binarno iskanje je rekurzivna je dejstvo, da si 895 00:49:41,840 --> 00:49:43,130 poskuša najti številko. 896 00:49:43,130 --> 00:49:44,250 Torej greš na sredini. 897 00:49:44,250 --> 00:49:47,130 In potem se preveri, če so številke tam v levo in v desno. 898 00:49:47,130 --> 00:49:49,650 >> In potem, če ste izvedeli številka bo na levi strani, je enako 899 00:49:49,650 --> 00:49:53,340 stvar kot enkrat delaš iskanje vendar Samo na levi seznama. 900 00:49:53,340 --> 00:49:57,350 Torej, to je, kako se sliši kot da je rekurzivna. 901 00:49:57,350 --> 00:50:01,870 Torej, to je, zakaj imajo fantje rekurzivna rešitev za urejanje z zlivanjem. 902 00:50:01,870 --> 00:50:04,270 >> OK, tako da tukaj je primer. 903 00:50:04,270 --> 00:50:07,280 Torej, recimo, da želim, da izberejo vse številke od 1 do n. 904 00:50:07,280 --> 00:50:13,790 Lahko zavedaš, da je vsota n število n plus n minus 1 do 1. 905 00:50:13,790 --> 00:50:17,810 Ampak potem, če gledam n minus 1 plus n minus 2 plus 1, ki je enaka 906 00:50:17,810 --> 00:50:20,680 stvar se vztrajanju številke do n minus 1. 907 00:50:20,680 --> 00:50:25,890 Torej lahko rečem vsoto enako vsoti enak n plus vsoti n minus 1. 908 00:50:25,890 --> 00:50:28,010 Ali to smiselno? 909 00:50:28,010 --> 00:50:32,630 >> In jaz bi tudi nekaj drugega imenovana baza primer, ki je, da 910 00:50:32,630 --> 00:50:37,440 vsota števil do na nič, bi bilo nič. 911 00:50:37,440 --> 00:50:42,770 Torej takoj, ko pridem na številko nič, se ustavim štetje. 912 00:50:42,770 --> 00:50:45,330 Ali to smiselno? 913 00:50:45,330 --> 00:50:48,120 >> Torej, tukaj je primer, kako Ne morem izvajati to. 914 00:50:48,120 --> 00:50:49,860 Torej imam to funkcijo v nekaj. 915 00:50:49,860 --> 00:50:51,700 To traja celo število n. 916 00:50:51,700 --> 00:50:56,300 Torej, tukaj sem najprej preverite, če je n manjša ali enaka nič. 917 00:50:56,300 --> 00:51:00,310 Torej, če je manjša ali enaka nič, sem vrne nič, kar je naša osnovna. 918 00:51:00,310 --> 00:51:05,690 V nasprotnem primeru lahko samo vrne n plus vsota številk 919 00:51:05,690 --> 00:51:07,190 ena za n minus ena. 920 00:51:07,190 --> 00:51:09,360 Smisla? 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> Torej, tukaj je, kako izgleda. 923 00:51:11,610 --> 00:51:15,260 Imate vsoto 2 enakih 2 plus vsota 1. 924 00:51:15,260 --> 00:51:18,930 In nekateri od 1 je 1 plus vsota 0, ki je 0. 925 00:51:18,930 --> 00:51:20,216 Smisla? 926 00:51:20,216 --> 00:51:25,342 Torej, če pogledamo na kup vaše programa, to je tako, kot izgleda. 927 00:51:25,342 --> 00:51:26,820 >> Prvič, smo glavno funkcijo. 928 00:51:26,820 --> 00:51:30,320 In potem je glavna funkcija imenovana vsota 2. 929 00:51:30,320 --> 00:51:36,690 In potem vsota 2 reči, oh, vsota 2 enaka 2 plus vsoti enega. 930 00:51:36,690 --> 00:51:39,460 Torej dodam vsoto 1 do dimnika. 931 00:51:39,460 --> 00:51:43,860 In vsota 1 bo poklical vsoto 0, ki je prav tako dogaja, da se doda 932 00:51:43,860 --> 00:51:44,630 odvodnika. 933 00:51:44,630 --> 00:51:49,240 In nato vsako od teh tiste, ki so na vrhu drugega morali vrniti 934 00:51:49,240 --> 00:51:52,020 preden lahko ostale pa nadaljuj. 935 00:51:52,020 --> 00:51:56,240 >> Tako, na primer, tukaj, vsota 0, Najprej se bo vrnil 0. 936 00:51:56,240 --> 00:51:58,320 In nato izberite vsoto 1. 937 00:51:58,320 --> 00:52:00,850 Potem vsota 1 bo vrne 1 vsoti 2. 938 00:52:00,850 --> 00:52:03,900 In končno, vsota 2 se dogaja , da se vrnete na glavno 3. 939 00:52:03,900 --> 00:52:05,320 Ali to smiselno? 940 00:52:05,320 --> 00:52:09,496 >> To je zelo pomembno, da razumemo, kako Sveženj deluje in poskusite 941 00:52:09,496 --> 00:52:11,980 vidim, če je smiselno. 942 00:52:11,980 --> 00:52:13,260 OK, tako razvrščanje. 943 00:52:13,260 --> 00:52:16,170 Torej, zakaj je pomembno, sortiranje, Najprej? 944 00:52:16,170 --> 00:52:18,260 Zakaj bi morali skrbeti? 945 00:52:18,260 --> 00:52:20,310 Kdorkoli? 946 00:52:20,310 --> 00:52:20,695 Daj mi primer? 947 00:52:20,695 --> 00:52:21,040 Ja? 948 00:52:21,040 --> 00:52:22,968 >> OBČINSTVO: [neslišno]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Ja, v redu. 950 00:52:24,700 --> 00:52:26,090 Tako da lahko poiščete bolj učinkovito. 951 00:52:26,090 --> 00:52:28,580 To je dober način. 952 00:52:28,580 --> 00:52:32,462 Tako, na primer, imamo veliko stvari, pravzaprav, v naše življenje, da 953 00:52:32,462 --> 00:52:32,920 so razporejene. 954 00:52:32,920 --> 00:52:34,830 Na primer, slovarji. 955 00:52:34,830 --> 00:52:39,210 >> To je zelo pomembno, da imajo vse besede v nekakšnem da bomo 956 00:52:39,210 --> 00:52:41,970 lahko enostavno dostopate. 957 00:52:41,970 --> 00:52:43,280 Torej, to je, kaj je rekel. 958 00:52:43,280 --> 00:52:45,530 Iščete lahko bolj učinkovito. 959 00:52:45,530 --> 00:52:48,740 Pomislite, kako težko bi bilo, da imajo slovar, v katerem so besede v 960 00:52:48,740 --> 00:52:49,500 naključnem vrstnem redu. 961 00:52:49,500 --> 00:52:53,120 Boste morali pogledati, precej, vsak beseda, dokler ne najdete 962 00:52:53,120 --> 00:52:54,720 beseda, ki jo iščete. 963 00:52:54,720 --> 00:52:58,710 >> Če uporabljate Facebook, tudi, ko je gledate svojim prijateljem, da si 964 00:52:58,710 --> 00:53:03,540 boste videli, da Facebook dal vaš bližje prijatelj je na vrhu tistih, 965 00:53:03,540 --> 00:53:05,470 da vam ne govorim, da je veliko. 966 00:53:05,470 --> 00:53:08,080 Če greste vse do dna tvoj prijatelj seznam, boste videli 967 00:53:08,080 --> 00:53:11,250 ljudje, ki jih verjetno sploh ne ne pozabite, da ste s prijatelji. 968 00:53:11,250 --> 00:53:14,590 In to zato, ker Facebook vrst vaši prijatelji, ki temeljijo na tem, kako 969 00:53:14,590 --> 00:53:16,472 zapri ste z njimi. 970 00:53:16,472 --> 00:53:17,930 >> Tako organizacijo podatkov. 971 00:53:17,930 --> 00:53:18,450 Tudi Pokemon. 972 00:53:18,450 --> 00:53:21,400 Torej vidite, da je vse Pokemons imajo številke. 973 00:53:21,400 --> 00:53:27,210 In da je kot lahka način dostopanja do podatkov. 974 00:53:27,210 --> 00:53:29,050 >> OBČINSTVO: Dostop Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Ja. 976 00:53:29,890 --> 00:53:32,395 >> OBČINSTVO: [neslišno]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Yep. 978 00:53:33,460 --> 00:53:35,140 OK, tako da izbor sort. 979 00:53:35,140 --> 00:53:41,610 Izbira sort se dogaja, da izberete Najmanjši neprebrani vrednost seznama vsak 980 00:53:41,610 --> 00:53:43,300 Čas, v vsaki ponovitvi. 981 00:53:43,300 --> 00:53:46,800 To je nekako tako kot vrste, ki ga opravljate v tvoji glavi, ko ste poskušali 982 00:53:46,800 --> 00:53:48,430 razvrstiti seznam v roki. 983 00:53:48,430 --> 00:53:51,990 >> V bistvu, vse, kar morate storiti je, da si ogledate za najmanjše število. 984 00:53:51,990 --> 00:53:54,280 Ste jo dali v urejenem seznamu. 985 00:53:54,280 --> 00:53:56,230 In potem poglej za naslednjo manjšo številko. 986 00:53:56,230 --> 00:54:00,080 In potem vztrajati početje da in tako naprej. 987 00:54:00,080 --> 00:54:04,600 >> Torej, izbira sort je v bistvu si izberite vsakič najmanjši 988 00:54:04,600 --> 00:54:05,750 neprebrani vrednost. 989 00:54:05,750 --> 00:54:10,840 Put konec razporejene del seznama. 990 00:54:10,840 --> 00:54:12,370 In vztrajati početje to. 991 00:54:12,370 --> 00:54:15,890 Torej, kaj je hitro videli, kaj to izgleda. 992 00:54:15,890 --> 00:54:19,340 Torej, tukaj je urejeno in neprebrani seznam. 993 00:54:19,340 --> 00:54:23,350 >> Torej za razporejene po seznamu, je na začetku prazna. 994 00:54:23,350 --> 00:54:26,760 In potem se bom, da izberete Najmanjše število tukaj, ki je 2. 995 00:54:26,760 --> 00:54:30,650 Tako da sem dobil številko 2 in sem dal v sprednji seznama. 996 00:54:30,650 --> 00:54:34,910 In potem sem si za naslednjo manjšo Element, ki je 3. 997 00:54:34,910 --> 00:54:37,050 Zato sem ga dal na koncu od razvrščena seznama. 998 00:54:37,050 --> 00:54:38,140 In potem sem vztrajati početje to. 999 00:54:38,140 --> 00:54:40,040 Se mi zdi, 4 in ga dal na koncu. 1000 00:54:40,040 --> 00:54:41,360 Najdi 5 in ga dal na koncu. 1001 00:54:41,360 --> 00:54:44,830 >> In poglej, kako vse te čase, ki Pravim, da ga na koncu je, 1002 00:54:44,830 --> 00:54:46,850 v bistvu, zamenjavo dveh vrednosti. 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 In potem zadnji, ki ste jo pravkar še eno komponento. 1006 00:54:52,825 --> 00:54:55,870 Torej, to je že urejeno. 1007 00:54:55,870 --> 00:54:57,800 >> OK, tako da vstavljanje sort. 1008 00:54:57,800 --> 00:55:03,180 Insertion sort boš tudi da je stvar, ki je urejeno in 1009 00:55:03,180 --> 00:55:04,690 neprebrani seznam. 1010 00:55:04,690 --> 00:55:14,540 Edina stvar je, da vsakič, ko ste dodaja element razporejene 1011 00:55:14,540 --> 00:55:18,170 Seznam, ki ste jo pravkar izbrali element, ki je pred nesortiranih seznama. 1012 00:55:18,170 --> 00:55:20,880 In potem boste našli kaj Položaj je treba v sortiranega 1013 00:55:20,880 --> 00:55:22,300 del seznama. 1014 00:55:22,300 --> 00:55:25,840 >> Poglejmo, kaj je to tako To je bolj smiselno. 1015 00:55:25,840 --> 00:55:29,360 Torej, najprej, na primer, sem poskušal vstaviti številko tri leta 1016 00:55:29,360 --> 00:55:30,680 sortiranega del seznama. 1017 00:55:30,680 --> 00:55:31,800 Torej seznam nima ničesar. 1018 00:55:31,800 --> 00:55:34,160 Tako da sem lahko samo dal številko 3. 1019 00:55:34,160 --> 00:55:37,480 >> Zdaj pa želim dodati številko 5 za sortiranega del seznama. 1020 00:55:37,480 --> 00:55:38,900 Torej gledam na številko 5. 1021 00:55:38,900 --> 00:55:40,450 Opazil sem, da je večja od 3. 1022 00:55:40,450 --> 00:55:41,980 Zato vem, da mora biti po 3. 1023 00:55:41,980 --> 00:55:44,100 Zato sem dal 3 in 5. 1024 00:55:44,100 --> 00:55:45,940 >> Potem hočem vstaviti številko 2. 1025 00:55:45,940 --> 00:55:51,630 Opažam, da je številka 2 dejansko trajala nato tako 3 in 5. 1026 00:55:51,630 --> 00:55:54,580 Torej, sem dejansko moral dati vse Tako v začetku seznama. 1027 00:55:54,580 --> 00:55:59,030 Torej moram, vrsta, prestavite vse elementi razvrščeni seznamu, tako da lahko 1028 00:55:59,030 --> 00:56:01,970 da bi naredili prostor za številko 2. 1029 00:56:01,970 --> 00:56:03,160 >> Potem sem videl številko 6. 1030 00:56:03,160 --> 00:56:05,450 Vidim, da bi morala biti po 5. 1031 00:56:05,450 --> 00:56:06,240 Zato sem ga dal tja. 1032 00:56:06,240 --> 00:56:07,965 In končno, gledam na številko 4. 1033 00:56:07,965 --> 00:56:11,030 In opazil sem, da bi morala biti med 3 in 5. 1034 00:56:11,030 --> 00:56:14,870 In potem sem ga tam in premik vsi drugi elementi. 1035 00:56:14,870 --> 00:56:16,120 Smisla? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Sort. 1038 00:56:19,150 --> 00:56:25,730 Torej bubble sort je v bistvu tisto, kar ste bo do-- ga imenujemo bubble 1039 00:56:25,730 --> 00:56:30,113 sort, ker greš skozi list-- je dejansko bolje, če sem samo pokazati 1040 00:56:30,113 --> 00:56:32,300 Želite to-- 1041 00:56:32,300 --> 00:56:35,030 in ti boš za primerjavo sosednjih številk. 1042 00:56:35,030 --> 00:56:38,410 In boste zamenjali svoj pozicije, če oni ne 1043 00:56:38,410 --> 00:56:39,190 v pravem zaporedju. 1044 00:56:39,190 --> 00:56:42,570 >> Torej v bistvu, kaj se dogaja, da zgodi, je tukaj, na primer, 1045 00:56:42,570 --> 00:56:44,160 imate 8 in 6. 1046 00:56:44,160 --> 00:56:47,270 Veste, da bo razvrščenega.Vse red dejansko 6 in 5, kajne? 1047 00:56:47,270 --> 00:56:49,540 Torej boste zamenjali naročila. 1048 00:56:49,540 --> 00:56:51,370 Potem sem videl 8 in 4 tukaj. 1049 00:56:51,370 --> 00:56:52,250 In sem naredil isto. 1050 00:56:52,250 --> 00:56:53,400 Spet zamenjali. 1051 00:56:53,400 --> 00:56:55,070 In končno, 2 in 8. 1052 00:56:55,070 --> 00:56:56,670 Jaz jih tudi zamenjali. 1053 00:56:56,670 --> 00:57:01,690 >> To se imenuje Bubble Sort saj po vsaka od teh iteracij, pravzaprav, 1054 00:57:01,690 --> 00:57:05,910 največje število na seznamu dobi vse Tako na koncu seznama. 1055 00:57:05,910 --> 00:57:06,940 Ali to smiselno? 1056 00:57:06,940 --> 00:57:11,880 Ker ohranja jo zamenjala in ga prestaviti na desno. 1057 00:57:11,880 --> 00:57:14,440 >> OK, tako da je to druga ponovitev. 1058 00:57:14,440 --> 00:57:17,200 To bi bilo isto. 1059 00:57:17,200 --> 00:57:20,190 Jaz bom eno zamenjavo in nato zadnja. 1060 00:57:20,190 --> 00:57:23,290 Sem, da ni zamenjave in Seznam je razvrščen. 1061 00:57:23,290 --> 00:57:27,460 Torej, v Bubble Razvrsti, smo v bistvu vodi gre skozi seznam in zamenjavo 1062 00:57:27,460 --> 00:57:32,310 stvari, dokler nisem opazil, da nisem naredil morebitne zamenjave početje to ponovitev, ki 1063 00:57:32,310 --> 00:57:34,270 pomeni, da je seznam že razporejene. 1064 00:57:34,270 --> 00:57:35,520 Smisla? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Pogovorimo se malo o čas teče. 1067 00:57:40,870 --> 00:57:45,165 Torej vi spomnite Big O, Omega in Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Ja? 1070 00:57:50,990 --> 00:57:53,070 OK, kaj je Big O, najprej? 1071 00:57:53,070 --> 00:57:54,315 >> OBČINSTVO: [neslišno]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Ja, se imenuje najslabša runtime, kar samo pomeni, da je 1073 00:57:59,070 --> 00:58:03,470 koliko ste pričakovali program vzeti teči. 1074 00:58:03,470 --> 00:58:04,910 Tako kot v smislu o-- 1075 00:58:04,910 --> 00:58:06,660 V tem case-- n. 1076 00:58:06,660 --> 00:58:09,150 Število elementov v Seznam v najslabšem primeru. 1077 00:58:09,150 --> 00:58:12,520 Podobno, v najslabšem možnem primeru. 1078 00:58:12,520 --> 00:58:17,100 >> Torej za Bubble Razvrsti, na primer, Imamo velik O iz n kvadrat. 1079 00:58:17,100 --> 00:58:20,580 Zakaj imamo to? 1080 00:58:20,580 --> 00:58:24,716 Zakaj je Bubble Sort Big O n kvadrat? 1081 00:58:24,716 --> 00:58:27,614 >> OBČINSTVO: [neslišno]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Ja, tako da bo v najslabšem primeru bo da bom moral narediti n iteracij. 1083 00:58:35,670 --> 00:58:39,260 Tako vsako ponovitev, se bo prinašajo največji element na koncu 1084 00:58:39,260 --> 00:58:40,290 seznama. 1085 00:58:40,290 --> 00:58:44,230 Torej v najslabšem primeru je, da imam narediti to stvar n krat. 1086 00:58:44,230 --> 00:58:48,550 In za vsako od teh časih, moram narediti n zamenjav, ker imam za primerjavo 1087 00:58:48,550 --> 00:58:49,870 vsaka dva elementa. 1088 00:58:49,870 --> 00:58:53,730 Torej, to je, zakaj je n kvadrat ker je n krat n. 1089 00:58:53,730 --> 00:59:00,120 >> Potem, izbira vrste je tudi n kvadratni ker je za vsako ponovitev, moram 1090 00:59:00,120 --> 00:59:02,650 poglej vsakega posameznega elementa v seznamu. 1091 00:59:02,650 --> 00:59:04,980 In potem najti najmanjši, kar pomeni, da moram 1092 00:59:04,980 --> 00:59:06,130 odmisliti n elementov. 1093 00:59:06,130 --> 00:59:11,750 In moram storiti, da N-krat, ker Moram izbrati vse n elementov. 1094 00:59:11,750 --> 00:59:18,273 >> Vstavljanje sortiranje tudi n kvadratni ker najslabšem primeru bo 1095 00:59:18,273 --> 00:59:20,950 biti, enega, moram vstaviti n številke, kajne? 1096 00:59:20,950 --> 00:59:22,765 Torej, jaz že vem, da bom da imajo n iteracij. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Toda za vsako od teh številk, če bi imel pogled na vse številke v 1099 00:59:29,840 --> 00:59:34,380 razporejene seznam in mu dal vso pot v spredaj, bo to n kvadratni 1100 00:59:34,380 --> 00:59:36,230 ker bo n krat n znova. 1101 00:59:36,230 --> 00:59:38,280 Smisla? 1102 00:59:38,280 --> 00:59:41,512 Kaj pa omega? 1103 00:59:41,512 --> 00:59:42,886 >> OBČINSTVO: [neslišno]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: To je najboljši možni scenarij. 1105 00:59:44,620 --> 00:59:48,810 Torej, to je kot, v veliko krat za sortiranje, najboljši scenarij je 1106 00:59:48,810 --> 00:59:50,660 ko je seznam že razvrščeni. 1107 00:59:50,660 --> 00:59:52,670 Tako da ne boste res storiti ničesar. 1108 00:59:52,670 --> 00:59:56,290 Bubble Sort ima najboljše scenarij n. 1109 00:59:56,290 --> 00:59:58,820 Ali vi veste, zakaj? 1110 00:59:58,820 --> 01:00:00,620 >> OBČINSTVO: [neslišno]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Ja, če si beležite ali je imel podatki obrok nobene zamenjave ali 1112 01:00:05,640 --> 01:00:10,533 Ne, če imate kaj takega nastavljena na velja, če je bila ponovitev, če 1113 01:00:10,533 --> 01:00:15,140 Seznam je že urejeno, v bistvu, kaj se bo zgodilo, se bom 1114 01:00:15,140 --> 01:00:17,890 poskusite zamenjati vsake dve sosednji elementi. 1115 01:00:17,890 --> 01:00:19,920 Bom videl, da ni zamenjave. 1116 01:00:19,920 --> 01:00:21,230 In sem vrnil takoj. 1117 01:00:21,230 --> 01:00:24,240 >> Torej to pomeni, da sem moral iti skozi seznam naenkrat. 1118 01:00:24,240 --> 01:00:28,990 Torej je n, ker sem videti v n elementov. 1119 01:00:28,990 --> 01:00:30,930 Zakaj izbor sort n kvadrat? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Ja, tudi če je seznam urejen, za vsaka ponovitev izbora vrste, I 1122 01:00:45,520 --> 01:00:47,590 izbrati najmanjši element. 1123 01:00:47,590 --> 01:00:49,980 To pomeni, da moram ven pogledati na vseh elementov razvrščeni 1124 01:00:49,980 --> 01:00:53,350 seznam in našli minimalno za vsako ponovitev. 1125 01:00:53,350 --> 01:00:54,600 Ali to smiselno? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> In vstavljanje Meč je N, ker v Primer, ki sem poskušal vstaviti 1128 01:01:04,690 --> 01:01:09,320 številke in vse številke, ko sem poskusite, da jih vstavite, vidim, da so 1129 01:01:09,320 --> 01:01:10,510 so v pravilnem položaju. 1130 01:01:10,510 --> 01:01:15,120 Nimam iti preveriti vse druge številke v nesortiranih seznamu. 1131 01:01:15,120 --> 01:01:17,170 In zato bo n. 1132 01:01:17,170 --> 01:01:19,480 Smisla? 1133 01:01:19,480 --> 01:01:21,035 In kaj je teta? 1134 01:01:21,035 --> 01:01:23,410 >> OBČINSTVO: [neslišno]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Kaj mi je? 1136 01:01:24,380 --> 01:01:24,960 Reci še enkrat. 1137 01:01:24,960 --> 01:01:25,666 >> OBČINSTVO: [neslišno]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Točno tako. 1139 01:01:26,490 --> 01:01:31,280 Tako lahko vidite, da je le izbor shranjeni v zlivanjem imajo thetas. 1140 01:01:31,280 --> 01:01:39,920 In to zato, ker imate samo theta če sta enaka, tako velik O in omega. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 In končno, z zlivanjem nahaja v log n. 1143 01:01:44,210 --> 01:01:48,910 >> In potem, kot je Dan je rekel, zlivanjem je podobno na enak način, da 1144 01:01:48,910 --> 01:01:50,320 vam binarno iskanje. 1145 01:01:50,320 --> 01:01:53,530 Tako boste dobili seznam. 1146 01:01:53,530 --> 01:01:55,170 In boš prepolovil. 1147 01:01:55,170 --> 01:02:00,580 In potem jih prerežemo v manjših polovici. 1148 01:02:00,580 --> 01:02:01,730 In potem jih združiti. 1149 01:02:01,730 --> 01:02:02,960 Vi se spomnite, kajne? 1150 01:02:02,960 --> 01:02:04,960 OK, kot je govoril. 1151 01:02:04,960 --> 01:02:08,330 >> OK, kazalci. 1152 01:02:08,330 --> 01:02:11,078 Torej, kaj je kazalec? 1153 01:02:11,078 --> 01:02:12,050 >> OBČINSTVO: [neslišno]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: naslov. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Vem, da je David kaže kup videi Binky in stvari, ki kažejo 1157 01:02:18,530 --> 01:02:19,080 seboj. 1158 01:02:19,080 --> 01:02:22,960 Ampak mi je všeč, da razmišljajo kazalcev kot zgolj naslov. 1159 01:02:22,960 --> 01:02:26,110 Torej je spremenljivka, ki se dogaja za shranjevanje naslov. 1160 01:02:26,110 --> 01:02:31,940 >> Torej, to je samo ta posebna spremenljivka da je štiri bajte. 1161 01:02:31,940 --> 01:02:36,550 Ne pozabite, da je kazalec na karkoli je vedno štiri bajte za našo 32-bitni 1162 01:02:36,550 --> 01:02:39,370 stroj tako velja aparat. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 In to je le mesto spremenljivke znotraj nje. 1165 01:02:47,050 --> 01:02:50,240 >> OK, tako da je ta spomin, v bistvu. 1166 01:02:50,240 --> 01:02:57,420 Torej vsak blok pomnilnika dejansko ima nalepka, ki je naslov 1167 01:02:57,420 --> 01:02:58,890 slotty spomin. 1168 01:02:58,890 --> 01:03:02,370 To pomeni, da lahko imam kazalec kaže na 1169 01:03:02,370 --> 01:03:03,380 koli od teh naslovov. 1170 01:03:03,380 --> 01:03:09,930 Torej razlog, zakaj bomo uporabili kazalce je če moram zapomniti lokacijo 1171 01:03:09,930 --> 01:03:12,300 da je posebna spremenljivka pomnilnika. 1172 01:03:12,300 --> 01:03:16,560 >> In vi se spomnite, da je eden od tistih, ki primerov je bilo, če sem imel funkcijo 1173 01:03:16,560 --> 01:03:20,820 če imam dejansko vam želim swap za reals, sem dejansko 1174 01:03:20,820 --> 01:03:22,110 poslati kazalec. 1175 01:03:22,110 --> 01:03:23,460 Ni spremenljivka. 1176 01:03:23,460 --> 01:03:25,200 Se vi spomnite tega? 1177 01:03:25,200 --> 01:03:26,450 Razlika between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 kaj je ime? 1180 01:03:34,120 --> 01:03:36,010 Kliče po vrednosti in kliče s sklicevanjem, kajne? 1181 01:03:36,010 --> 01:03:36,840 >> OK, ja. 1182 01:03:36,840 --> 01:03:38,330 Torej klic po vrednosti. 1183 01:03:38,330 --> 01:03:43,570 Ko preprosto pošljete spremenljivko delovali ste samo pošiljanje vrednost. 1184 01:03:43,570 --> 01:03:45,610 Torej ste dejansko pošiljanje kopija spremenljivke. 1185 01:03:45,610 --> 01:03:49,720 In tvoj program ne briga pa če ista spremenljivka dejansko 1186 01:03:49,720 --> 01:03:51,650 naredi kopijo. 1187 01:03:51,650 --> 01:03:56,330 >> In poklical po referenčni pomeni, da Jaz sem pravzaprav pošlje kopijo 1188 01:03:56,330 --> 01:03:57,550 Kazalec na spremenljivko. 1189 01:03:57,550 --> 01:04:00,970 Torej to pomeni, da bom poslala položaj te spremenljivke. 1190 01:04:00,970 --> 01:04:04,440 Torej, občutek imam lokacijo spremenljivka, ko kličem funkcijo 1191 01:04:04,440 --> 01:04:09,700 s kazalci, sem lahko dejansko spreminjanje podatkov, ki je bil v glavni. 1192 01:04:09,700 --> 01:04:12,050 Smisla? 1193 01:04:12,050 --> 01:04:17,560 >> Kljub temu, da je kazalec kopija, kazalec ima še vedno pravi naslov za 1194 01:04:17,560 --> 01:04:20,090 spremenljivka, ki želim spremeniti. 1195 01:04:20,090 --> 01:04:21,920 Smisla? 1196 01:04:21,920 --> 01:04:24,290 >> Torej ustvarjanje kazalcev. 1197 01:04:24,290 --> 01:04:28,410 Ne pozabite, da kazalec še vedno tip, ki je kazala 1198 01:04:28,410 --> 01:04:29,890 na in zvezdo. 1199 01:04:29,890 --> 01:04:31,030 In potem si dal ime. 1200 01:04:31,030 --> 01:04:35,765 Torej, ne pozabite, da ko imate karkoli zvezda, je kot kazalec na 1201 01:04:35,765 --> 01:04:38,990 da ne glede na variable tip, ki ga je imela. 1202 01:04:38,990 --> 01:04:42,850 >> Torej, tukaj v zvezdo, na primer, je kazalec in število. 1203 01:04:42,850 --> 01:04:47,680 In potem char zvezda je kazalec char zvezda in tako naprej. 1204 01:04:47,680 --> 01:04:47,960 Ja? 1205 01:04:47,960 --> 01:04:52,710 >> OBČINSTVO: Kaj pa, če imamo kazalec n zvezda x. 1206 01:04:52,710 --> 01:04:55,255 Vem, da ustvari kazalec na x. 1207 01:04:55,255 --> 01:04:59,432 Ali tudi razglasi x celo število? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, tako da, ko ste rekli n zvezda x, niste ustvarili kazalec 1209 01:05:05,170 --> 01:05:06,000 spremenljivka x. 1210 01:05:06,000 --> 01:05:08,170 Ste ustvarili kazalec imenovan x. 1211 01:05:08,170 --> 01:05:09,396 >> OBČINSTVO: [neslišno]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Torej, ko rečem n zvezdicami x, sem rekel, hej, v spomin, da bom 1213 01:05:14,250 --> 01:05:16,390 dobili eno od teh treh poljih. 1214 01:05:16,390 --> 01:05:20,750 In jaz bom rekel, da je ta se bo x, ki je 1215 01:05:20,750 --> 01:05:22,000 bo kazalec. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 In kaj zanimivega o kazalci je, da rečemo, da imajo 1218 01:05:30,640 --> 01:05:32,620 4 bajte za 32-bitni stroj. 1219 01:05:32,620 --> 01:05:36,320 In razlog za to je, ker 4 bajti 32-bitov. 1220 01:05:36,320 --> 01:05:40,490 >> In stroji, ki so 64 bitov dejansko imajo ptičarji naslove 1221 01:05:40,490 --> 01:05:43,480 da so 64 bitov dolga. 1222 01:05:43,480 --> 01:05:49,820 Torej samo pomeni, da je velikost naslovi v stroju je drugačna. 1223 01:05:49,820 --> 01:05:52,270 >> Torej sklicev in Dereferenciranje. 1224 01:05:52,270 --> 01:05:54,310 Obstajata dva operaterja, ki vi bi morali zapomniti. 1225 01:05:54,310 --> 01:05:55,450 Prvi je ampersand. 1226 01:05:55,450 --> 01:05:56,810 Drugi je zvezda. 1227 01:05:56,810 --> 01:06:05,060 Ne zbunjeni z zvezdo in to STAR, saj se spomnite, da je v 1228 01:06:05,060 --> 01:06:06,950 V tem primeru imate n zvezdo. 1229 01:06:06,950 --> 01:06:08,700 >> To je kot celotno stvar skupaj. 1230 01:06:08,700 --> 01:06:10,720 Ni n prostora zvezda. 1231 01:06:10,720 --> 01:06:12,070 Torej to pomeni, da je to tip. 1232 01:06:12,070 --> 01:06:14,870 Ne pozabite, da če imate spremenljiva zvezda, si 1233 01:06:14,870 --> 01:06:16,230 govorimo o tipu. 1234 01:06:16,230 --> 01:06:20,540 >> Ko imate samo zvezdo in nato ime spremenljivke, to pomeni, da 1235 01:06:20,540 --> 01:06:24,100 ste Dereferenciranje kazalec, ki pomeni, da gledate 1236 01:06:24,100 --> 01:06:28,290 kazalec, iskanju naslova je kaže, da, grem na ta naslov, 1237 01:06:28,290 --> 01:06:30,850 in gledaš kadarkoli imaš tam. 1238 01:06:30,850 --> 01:06:34,310 Povedal sem svoje študente, da ko imate zvezda, bi morali razmišljati, da je 1239 01:06:34,310 --> 01:06:36,850 kratica vsebine. 1240 01:06:36,850 --> 01:06:39,770 >> Torej, če imate kazalec in ga storiti zvezdicami kazalec, je 1241 01:06:39,770 --> 01:06:41,720 vsebina kazalca. 1242 01:06:41,720 --> 01:06:44,580 Torej, greš na vse, kar je na srečo kaže na in pogled na konstantni vsebnosti. 1243 01:06:44,580 --> 01:06:47,730 In ampersand je enaka stvar kot naslov. 1244 01:06:47,730 --> 01:06:52,560 >> Torej, če imam spremenljivko je-- všeč, dajva pravijo, da sem int enaka 3-- 1245 01:06:52,560 --> 01:06:56,900 če želim, da bi našli naslov, ki spremenljivka pomnilnika, lahko sem samo narediti 1246 01:06:56,900 --> 01:06:58,240 ampersand. 1247 01:06:58,240 --> 01:07:00,280 Torej, to je naslov. 1248 01:07:00,280 --> 01:07:01,530 Smisla? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Torej, tukaj je primer. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 To manjka int b in c int. 1253 01:07:11,530 --> 01:07:16,520 Torej int enaka 3, pomeni, da Jaz grem v spomin. 1254 01:07:16,520 --> 01:07:19,870 In bom najti režo in dal številko 3 tukaj. 1255 01:07:19,870 --> 01:07:22,200 >> In potem int b enaka 4. 1256 01:07:22,200 --> 01:07:23,100 Bom naredil enako. 1257 01:07:23,100 --> 01:07:25,840 Pojdi na spomin in dal številko 4 v enem od polj. 1258 01:07:25,840 --> 01:07:27,100 In int enaka 5. 1259 01:07:27,100 --> 01:07:29,740 Najti drugo škatlo in dal številko 5. 1260 01:07:29,740 --> 01:07:36,160 >> Torej, kaj je ta vrstica počel? n zvezda pa je enak znak pove a. 1261 01:07:36,160 --> 01:07:37,800 Torej, najprej, n zvezda letno. 1262 01:07:37,800 --> 01:07:39,050 Kaj počne? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> OBČINSTVO: [neslišno]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Ja, tako n zvezda pa, prvič, izjavlja, kazalec pa se imenuje. 1266 01:07:47,890 --> 01:07:53,720 In potem je dodelitev vrednosti da kazalec biti naslov. 1267 01:07:53,720 --> 01:07:55,790 Torej ampersand. 1268 01:07:55,790 --> 01:07:58,510 Potem, če naredim zvezda Pb, kaj je zvezda pb? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Oh, žal mi je. 1271 01:08:03,150 --> 01:08:06,330 To je prav tako manjka. n zvezda pb. 1272 01:08:06,330 --> 01:08:07,905 Mislim zvezda pc. 1273 01:08:07,905 --> 01:08:11,200 Tako mi je žal. 1274 01:08:11,200 --> 01:08:11,940 To je ista stvar. 1275 01:08:11,940 --> 01:08:16,408 Ampak zdaj sem dobra ar ustvarja kazalec da b in nato kazalec na c. 1276 01:08:16,408 --> 01:08:16,886 Ja? 1277 01:08:16,886 --> 01:08:18,136 >> OBČINSTVO: [neslišno]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Da. 1280 01:08:26,670 --> 01:08:32,630 Torej, če greš v spominu in greš polje, ki je označevalec za letno, 1281 01:08:32,630 --> 01:08:37,149 ste dejansko dogaja, da glej tudi naslov. 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 Ja? 1285 01:08:43,300 --> 01:08:45,605 >> OBČINSTVO: [neslišno]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Ja, kazalec naslov. 1287 01:08:49,260 --> 01:08:50,120 Nikoli ne pozabite, da je. 1288 01:08:50,120 --> 01:08:52,800 To je kot najpomembnejši del o kazalca. 1289 01:08:52,800 --> 01:08:56,180 Tam je shranjevanje in naslov do neke spremenljivke. 1290 01:08:56,180 --> 01:08:56,890 Kaj drugega? 1291 01:08:56,890 --> 01:08:58,370 Še kakšno vprašanje? 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> Torej ptičarji in Arrays. 1294 01:09:00,399 --> 01:09:08,189 Ne pozabite, da ko sem naredil int matriko 3, v bistvu, kaj počnem, je, da sem, vrsta 1295 01:09:08,189 --> 01:09:12,779 o razglasitvi na kazalec. 1296 01:09:12,779 --> 01:09:18,960 Torej matrika je nekako kot kazalce na poseben prostor v pomnilniku, v kateri sem 1297 01:09:18,960 --> 01:09:21,999 namenila tri reže za cela števila. 1298 01:09:21,999 --> 01:09:23,430 Ali to smiselno? 1299 01:09:23,430 --> 01:09:30,250 >> Torej, ko sem naredil int matriko 3, kar sem delaš, v bistvu, ustvarja tri 1300 01:09:30,250 --> 01:09:31,479 reže v spomin. 1301 01:09:31,479 --> 01:09:33,899 Tako da sem samo najti tri reže v spomin. 1302 01:09:33,899 --> 01:09:38,810 Torej, če naredim, potem zvezda niza, jo bistvu pomeni vsebino matrike, 1303 01:09:38,810 --> 01:09:46,180 kar pomeni, da izbrišete kazalec, grem v tem mestu, ki je kazala, da, 1304 01:09:46,180 --> 01:09:47,939 in sem dal številko ena. 1305 01:09:47,939 --> 01:09:53,729 >> In potem, če bom zvezda niz plus 1, to je isto, kot počne niz 1306 01:09:53,729 --> 01:09:59,690 nosilce eden, ki samo pomeni, grem mesto, ki ga je gledala. 1307 01:09:59,690 --> 01:10:03,000 In potem naredi plus 1 me premakne za eno mesto. 1308 01:10:03,000 --> 01:10:06,510 Zato sem šel na ta položaj, pravzaprav, in dal številko dve. 1309 01:10:06,510 --> 01:10:10,900 >> In potem, na koncu, ko sem naredil matrika plus 2, grem tja, kjer 1310 01:10:10,900 --> 01:10:11,825 kazalno Array je na. 1311 01:10:11,825 --> 01:10:14,690 In potem sem se premaknete na pomnilniških blokov. 1312 01:10:14,690 --> 01:10:16,240 In potem sem dal številko tri tukaj. 1313 01:10:16,240 --> 01:10:16,600 Ja? 1314 01:10:16,600 --> 01:10:21,400 >> OBČINSTVO: Torej zvezda matrika je preprosto izgovorite zelo prvo točko. 1315 01:10:21,400 --> 01:10:25,090 In lahko dodate 1, samo zato, ker smo šele zares 1316 01:10:25,090 --> 01:10:27,295 na to, da je prvi naslov. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Ja. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Zakaj, na primer, pravijo niz 0, matrika 1 in matrika 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Pravim, zakaj počneš 0, 1, 2, 3 namesto 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Eden od razlogov za to je, one, računalnik programerji raje začel 1323 01:10:46,550 --> 01:10:47,750 šteto od 0. 1324 01:10:47,750 --> 01:10:52,370 Dva je zato, ker ko boste to storili niz 0, to je isto, kot počne niz 1325 01:10:52,370 --> 01:10:56,330 plus 0, kar pomeni, da gre za to stališče, in jaz ne 1326 01:10:56,330 --> 01:10:59,320 preskočite vse pomnilniške bloke. 1327 01:10:59,320 --> 01:11:01,750 Torej se ne premaknem vse pomnilniške bloke. 1328 01:11:01,750 --> 01:11:02,015 Ja? 1329 01:11:02,015 --> 01:11:03,265 >> OBČINSTVO: [neslišno]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Torej ona sprašuje, kaj je Razlika med tem 1332 01:11:12,670 --> 01:11:14,000 to, ali gre malloc. 1333 01:11:14,000 --> 01:11:17,550 Ena od razlik je, da int matrika 3 je ustvarjanje 1334 01:11:17,550 --> 01:11:19,260 niz na kupu. 1335 01:11:19,260 --> 01:11:23,080 In ko sem naredil malloc ga, ustvarja na kup. 1336 01:11:23,080 --> 01:11:25,250 Ali to smiselno? 1337 01:11:25,250 --> 01:11:28,870 >> Torej, kako malloc dejansko deluje? 1338 01:11:28,870 --> 01:11:32,245 Torej, zakaj sploh potrebujemo uporabljati malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Vaš prevajalnik vrsta osebnosti iz vse spremenljivke, ki jih je deklarirano. 1341 01:11:39,700 --> 01:11:44,040 In ustvarja prostor za vse da bi jih v sklad. 1342 01:11:44,040 --> 01:11:47,180 Torej vse vaše spremenljivke gredo da je nekje v kupu. 1343 01:11:47,180 --> 01:11:49,460 Torej, tukaj je okoljske spremenljivke. 1344 01:11:49,460 --> 01:11:53,850 >> Torej v bistvu, prostor za tiste spremenljivke, v pomnilniku, se razporedi na 1345 01:11:53,850 --> 01:11:55,080 zbere čas. 1346 01:11:55,080 --> 01:11:58,790 Torej to pomeni, da je vaš računalnik poznati vseh teh spremenljivk 1347 01:11:58,790 --> 01:11:59,790 vnaprej. 1348 01:11:59,790 --> 01:12:02,500 Ne vedeti, kaj je vrednost boš dal v njih. 1349 01:12:02,500 --> 01:12:05,490 Vendar je treba vedeti, kako pomnilnika, kar potrebujete. 1350 01:12:05,490 --> 01:12:09,380 >> Ampak zdaj recimo, da, na primer, ste ustvarili vrsto ali ob 1351 01:12:09,380 --> 01:12:13,430 niz, ki ste ob od uporabnika. 1352 01:12:13,430 --> 01:12:17,300 Ti ne veš, kako dolgo niz se bo, na primer. 1353 01:12:17,300 --> 01:12:20,600 Tako da ne vem točno, koliko pomnilniških blokov vam dodeliti, kajne? 1354 01:12:20,600 --> 01:12:24,120 >> Tako da ne res smiselno vam povedati, dal 100 znakov. 1355 01:12:24,120 --> 01:12:26,420 In kaj potem, če uporabnik piše 150? 1356 01:12:26,420 --> 01:12:27,670 Boš se zajebali. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Torej v bistvu, ne morete biti prepričani o tem, kako pomnilnika morate dodeliti 1359 01:12:34,620 --> 01:12:35,960 ko prevede program. 1360 01:12:35,960 --> 01:12:38,240 Pravkar ste vedeli, da na čas delovanja. 1361 01:12:38,240 --> 01:12:39,950 Torej, to je, zakaj imate kup. 1362 01:12:39,950 --> 01:12:47,610 Torej kup se dogaja, da imajo spomin da ste razporejanje med 1363 01:12:47,610 --> 01:12:50,810 trajanje programskega teka. 1364 01:12:50,810 --> 01:12:55,780 >> Torej v bistvu, ko boste to storili malloc, kaj delaš se pri dodeljevanju pomnilnika 1365 01:12:55,780 --> 01:13:00,160 runtime, kar pomeni, da ste odločanju pravico v tistem trenutku, ki vas 1366 01:13:00,160 --> 01:13:02,670 bi moral imeti ta spomin. 1367 01:13:02,670 --> 01:13:04,210 Torej, to je, ko ste ga dodeljevanja. 1368 01:13:04,210 --> 01:13:06,430 Ali to smiselno? 1369 01:13:06,430 --> 01:13:11,690 >> Torej, ne pozabite, kup ima spremenljivk ki so proizvedena prevajanju. 1370 01:13:11,690 --> 01:13:14,560 In potem heap ima spremenljivk ki so nastala kot greš 1371 01:13:14,560 --> 01:13:15,600 s funkcije malloc, npr. 1372 01:13:15,600 --> 01:13:16,850 >> OBČINSTVO: [neslišno]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Torej GetString je Poklicala bom malloc. 1375 01:13:24,340 --> 01:13:26,710 Mi govorimo o funkcije malloc in Pojasnil bom GetString. 1376 01:13:26,710 --> 01:13:32,000 Torej malloc je ista stvar kot dodeljevanje pomnilnika. 1377 01:13:32,000 --> 01:13:34,600 Tako se dogaja, da dodeli spomin na kup. 1378 01:13:34,600 --> 01:13:40,010 In to se dogaja, da se vrnete kazalec če je bila ta spomin je bila dodeljena na. 1379 01:13:40,010 --> 01:13:43,090 >> Torej, ko do-- 1380 01:13:43,090 --> 01:13:44,910 Tukaj Primer-- 1381 01:13:44,910 --> 01:13:45,830 n zvezda kazalec. 1382 01:13:45,830 --> 01:13:50,520 In potem kazalec enak malloc velikost palčne prenosov 10. 1383 01:13:50,520 --> 01:13:52,110 Jaz ustvarjanje kazalec. 1384 01:13:52,110 --> 01:13:59,020 In potem sem dodeljevanje da kazalec vrednost kazalca, da malloc 1385 01:13:59,020 --> 01:13:59,680 me daje. 1386 01:13:59,680 --> 01:14:04,150 >> Torej jaz vprašam malloc lahko dodeli prostor za 10 števil. 1387 01:14:04,150 --> 01:14:05,390 To je to, kar govori. 1388 01:14:05,390 --> 01:14:09,020 In malloc mi vrača kazalec na to mesto. 1389 01:14:09,020 --> 01:14:11,460 Smisla? 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 I In GetString je, v bistvu, gre pokličete funkcije malloc, tako da lahko dodeli 1392 01:14:17,940 --> 01:14:21,680 pomnilnika med delovanjem. 1393 01:14:21,680 --> 01:14:26,460 >> Vedno se spomnite, da preverite null ker malloc se dogaja, da se vrnete null 1394 01:14:26,460 --> 01:14:28,200 če to ni mogoče dodeliti pomnilnika. 1395 01:14:28,200 --> 01:14:31,660 Recimo, da vas za smešno količino pomnilnika. 1396 01:14:31,660 --> 01:14:33,950 Računalnik se ne bo lahko veliko dodeliti to. 1397 01:14:33,950 --> 01:14:36,410 >> Torej malloc je le, da bo , da se vrnete null. 1398 01:14:36,410 --> 01:14:42,210 Torej vedno ne pozabite preveriti, če Kazalec, ki ga je dobil od funkcije malloc 1399 01:14:42,210 --> 01:14:45,640 nična ali ne, ker če je, boste morda se Dereferenciranje kazalec in 1400 01:14:45,640 --> 01:14:48,340 povzroči neželene napak. 1401 01:14:48,340 --> 01:14:50,930 In končno, ne pozabite vašega prostega pomnilnika. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc ustvarja spomin na kup. 1404 01:15:00,560 --> 01:15:03,436 In boste morali sprostiti pomnilnik pred zaključkom programa. 1405 01:15:03,436 --> 01:15:05,370 OK, to je vse za mano. 1406 01:15:05,370 --> 01:15:07,900 Žal mi je, Rob. 1407 01:15:07,900 --> 01:15:07,950 Hvala. 1408 01:15:07,950 --> 01:15:09,878 >> [APLAVZ] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Vsa zadnja vprašanja Pred Rob prihaja? 1410 01:15:12,679 --> 01:15:13,138 Ne? 1411 01:15:13,138 --> 01:15:13,597 Ja? 1412 01:15:13,597 --> 01:15:15,892 >> OBČINSTVO: nisem videl tale online. 1413 01:15:15,892 --> 01:15:17,269 Si ga še dodal? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Mislim, da je Dave nalaganjem kmalu. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: To bomo objavili. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: To bo online. 1417 01:15:20,310 --> 01:15:21,175 >> OBČINSTVO: To je odvisno. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: To se dogaja? 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 Ja? 1421 01:15:23,644 --> 01:15:27,053 >> OBČINSTVO: [neslišno]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Yes, morate osvoboditi vse pomnilnika, ki je dal v kup. 1423 01:15:30,285 --> 01:15:31,535 >> OBČINSTVO: [neslišno]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Da. 1426 01:15:36,160 --> 01:15:39,980 Vsak čas, da imate malloc kulture, morate imeti kulturo brezplačno 1427 01:15:39,980 --> 01:15:42,640 ko prenehate uporabljati to spremenljivko. 1428 01:15:42,640 --> 01:15:44,800 Torej malloc in brezplačno, so vedno skupaj. 1429 01:15:44,800 --> 01:15:45,410 Njihovi najboljši prijatelji. 1430 01:15:45,410 --> 01:15:46,720 Ja. 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: Grem hitro. 1434 01:15:56,850 --> 01:16:00,466 In bo tudi video postavi. 1435 01:16:00,466 --> 01:16:01,716 Imam mic naprej. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, tako da teden pet stvari. 1438 01:16:26,230 --> 01:16:27,970 Prva stvar, ki jo imamo, je kup. 1439 01:16:27,970 --> 01:16:33,390 Torej, ne pozabite, da obstaja samo en kup Okvir po aktivnem klicu funkcije. 1440 01:16:33,390 --> 01:16:34,710 Bomo videli, da je v sekundi. 1441 01:16:34,710 --> 01:16:37,850 In prav spomnim, kaj pravzaprav gre v vsakem dimnik okvirju se bodo 1442 01:16:37,850 --> 01:16:41,880 lokalne spremenljivke naših funkcij, argumenti, ki so opravili v naši 1443 01:16:41,880 --> 01:16:43,880 funkcije, skupaj z nekaj druge stvari, ki jih v resnici ne 1444 01:16:43,880 --> 01:16:45,260 treba skrbeti. 1445 01:16:45,260 --> 01:16:50,950 >> Torej, tukaj je primer programa, kjer obvestilo, glavno je printfing vrnitev 1446 01:16:50,950 --> 01:16:52,830 Vrednost foo 4. 1447 01:16:52,830 --> 01:16:57,930 foo je le, da bo vrnil Vrednost bar 4 vejico 6. 1448 01:16:57,930 --> 01:17:02,380 In bar se dogaja, da določi nekatere lokalne spremenljivka n enak 4 krat 6. 1449 01:17:02,380 --> 01:17:03,920 In se nato vrne n. 1450 01:17:03,920 --> 01:17:09,130 >> Tako da je pogled na kup ves dejanska ponovitev tega programa. 1451 01:17:09,130 --> 01:17:10,500 Tako da je dno naše dimnika. 1452 01:17:10,500 --> 01:17:12,620 Ne pozabite, da je sklad odrašča. 1453 01:17:12,620 --> 01:17:15,370 Tako na dnu naše skladovnice, smo imajo sveženj okvir za glavno. 1454 01:17:15,370 --> 01:17:17,000 Ko se program zažene, glavna se vedno dogaja, da je na 1455 01:17:17,000 --> 01:17:18,560 Spodnji del našega dimnika. 1456 01:17:18,560 --> 01:17:20,880 >> In kaj je v naših kup okvir za glavno? 1457 01:17:20,880 --> 01:17:23,810 Torej, čeprav ne obstajajo lokalna spremenljivke na glavno, kot sem rekel prej, 1458 01:17:23,810 --> 01:17:29,670 smo argc in RGV ob nastopu prostora znotraj glavnega dimnika okvirja. 1459 01:17:29,670 --> 01:17:33,260 Torej, glavna bo zdaj klic funkcije foo. 1460 01:17:33,260 --> 01:17:35,125 In to pomeni, da foo bo dobili svoj sveženj okvir. 1461 01:17:35,125 --> 01:17:36,970 >> Torej, zdaj smo znotraj Funkcija foo. 1462 01:17:36,970 --> 01:17:38,610 In kaj je potrebno, da gredo v Foo je kup frame? 1463 01:17:38,610 --> 01:17:41,100 No, foo je argumenta n. 1464 01:17:41,100 --> 01:17:45,440 In je n enak 4, ker to je tisto Glavno je mimo kot argument foo je. 1465 01:17:45,440 --> 01:17:48,490 >> Torej, zdaj foo bo poklical bar. 1466 01:17:48,490 --> 01:17:52,070 Kaj je bar dogaja, da imajo v notranjosti svoje "dimnik okvirja? 1467 01:17:52,070 --> 01:17:55,610 To je x enak 4 y enaka šest. 1468 01:17:55,610 --> 01:17:58,540 To še ni vse, da bomo imeli v dimnik okvir zato, ker bar 1469 01:17:58,540 --> 01:18:00,580 ima tudi lokalno spremenljivo n. 1470 01:18:00,580 --> 01:18:03,370 In n bomo nastavljena enaka 24. 1471 01:18:03,370 --> 01:18:05,750 >> Torej, zdaj bar se vrača n. 1472 01:18:05,750 --> 01:18:09,300 Torej je bar vrača 24 do foo kup okvir. 1473 01:18:09,300 --> 01:18:12,560 In ker bar je zdaj vrača, da pomeni, da smo živahen stack frame 1474 01:18:12,560 --> 01:18:14,250 za bar off dimnika. 1475 01:18:14,250 --> 01:18:18,430 Tako da vse spomin, da je bil bar uporabljate, je zdaj off dimnika. 1476 01:18:18,430 --> 01:18:21,550 >> Zdaj, foo se tudi dogaja, vrniti 24 na glavno. 1477 01:18:21,550 --> 01:18:25,470 Torej sedaj, da foo se vrača, spomin da foo je uporabljal v svojem ' 1478 01:18:25,470 --> 01:18:27,550 Sveženj Okvir je tudi odšel. 1479 01:18:27,550 --> 01:18:29,660 In zdaj, glavna bo klic printf. 1480 01:18:29,660 --> 01:18:31,660 Torej printf je samo še ena funkcija. 1481 01:18:31,660 --> 01:18:35,320 Ko smo klic printf, da se dogaja, da je en kup okvir za printf 1482 01:18:35,320 --> 01:18:36,470 klic funkcije. 1483 01:18:36,470 --> 01:18:37,990 >> Kaj se peljemo printf? 1484 01:18:37,990 --> 01:18:40,090 To je tisto, kar se dogaja, da gredo na dimnik okvir. 1485 01:18:40,090 --> 01:18:44,970 Vsaj, da smo mimo da odstotkov i n poševnica nazaj in 1486 01:18:44,970 --> 01:18:47,180 argument 24. 1487 01:18:47,180 --> 01:18:50,370 Morda bi morali bolj je kup frame printf če se zgodi, da se z uporabo nekaterih 1488 01:18:50,370 --> 01:18:51,200 lokalne spremenljivke. 1489 01:18:51,200 --> 01:18:51,920 Ne vemo. 1490 01:18:51,920 --> 01:18:53,810 >> Ampak vse to gre v printf-ih kup okvir. 1491 01:18:53,810 --> 01:18:55,740 To se dogaja, da se izvršitev printf. 1492 01:18:55,740 --> 01:18:56,830 Potem printf je naredil. 1493 01:18:56,830 --> 01:18:57,820 To se bo vrnil. 1494 01:18:57,820 --> 01:18:58,960 Končno, glavni je. 1495 01:18:58,960 --> 01:18:59,860 Glavni bo vrnil. 1496 01:18:59,860 --> 01:19:02,020 In potem je naš program dela. 1497 01:19:02,020 --> 01:19:02,480 Ja? 1498 01:19:02,480 --> 01:19:04,505 >> OBČINSTVO: Ali ste videli [neslišno] 1499 01:19:04,505 --> 01:19:05,900 Argumenti [neslišno] 1500 01:19:05,900 --> 01:19:06,830 parametri? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Torej je subtilna razlika Med argumenti in parametrov. 1502 01:19:09,970 --> 01:19:14,400 In res, v skupnem govorijo, ljudje samo jih pomešajo ves čas. 1503 01:19:14,400 --> 01:19:17,550 Vendar parametri so formalnega poimenovati stvari. 1504 01:19:17,550 --> 01:19:20,180 >> Torej argc in argv so parametri za glavno. 1505 01:19:20,180 --> 01:19:23,440 Argumenti so tisto, kar dejansko prehaja v tiste parametre. 1506 01:19:23,440 --> 01:19:28,340 Tako da, ko sem poklical foo od 4, 4 je argument sem mimo v. 1507 01:19:28,340 --> 01:19:31,460 In n parametrov, znotraj foo, bo na vrednost 4. 1508 01:19:31,460 --> 01:19:32,880 od 4 je bil argument. 1509 01:19:32,880 --> 01:19:35,826 >> OBČINSTVO: [neslišno]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n je lokalna spremenljivka v bar. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n je še vedno lokalna, da foo, vendar je parameter za foo. 1513 01:19:44,960 --> 01:19:48,190 To ni lokalna spremenljivka. 1514 01:19:48,190 --> 01:19:48,546 Ja? 1515 01:19:48,546 --> 01:19:51,180 >> OBČINSTVO: [neslišno]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: foo je samo kliče bar in vrača ne glede bar donose. 1517 01:19:55,400 --> 01:19:56,786 >> OBČINSTVO: [neslišno]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Ja, samo da vidim, multiple kup okvirjev. 1519 01:19:59,591 --> 01:20:00,082 Ja? 1520 01:20:00,082 --> 01:20:03,519 >> OBČINSTVO: Zakaj je bila imenovana foo Pred printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Zakaj je bila imenovana foo pred printf? 1522 01:20:05,920 --> 01:20:10,740 Tako da bi lahko imel namesto tega narediti nekaj kot int x enak foo od 4 1523 01:20:10,740 --> 01:20:12,980 in nato natisnjena x. 1524 01:20:12,980 --> 01:20:17,900 Toda namesto, da kombinirajo funkcijo zbuja argument printf. 1525 01:20:17,900 --> 01:20:23,670 >> Ampak obvestilo, da ne moremo dejansko izvedete klic printf, dokler ne bomo 1526 01:20:23,670 --> 01:20:25,610 ugotovimo, kaj foo dne 4. je. 1527 01:20:25,610 --> 01:20:27,480 Torej bomo oceniti to. 1528 01:20:27,480 --> 01:20:32,504 In šele, ko je to storjeno bodo da pridejo nazaj in oceniti to. 1529 01:20:32,504 --> 01:20:32,990 Ja? 1530 01:20:32,990 --> 01:20:37,364 >> OBČINSTVO: Ker tako bar [neslišno] 1531 01:20:37,364 --> 01:20:41,738 vrednost, zakaj nimamo [neslišno]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: So popolnoma morala biti int. 1533 01:20:44,400 --> 01:20:46,260 Da ni bil ujet več več prelazov. 1534 01:20:46,260 --> 01:20:49,010 Torej mora biti int bar in INT foo saj tako tistih 1535 01:20:49,010 --> 01:20:50,460 se vračajo cela. 1536 01:20:50,460 --> 01:20:54,214 Nična le, če jih ne bo Za vrnitev dejanske vrednosti. 1537 01:20:54,214 --> 01:20:54,692 Ja? 1538 01:20:54,692 --> 01:20:58,038 >> OBČINSTVO: Če ste imeli vrstico zgoraj donos, [neslišno]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: linija nad zameno? 1541 01:21:03,730 --> 01:21:04,410 >> OBČINSTVO: Ja. 1542 01:21:04,410 --> 01:21:10,780 Všeč mi je, če si printf in [neslišno] je dvakrat bi natisniti? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Torej znotraj foo? 1544 01:21:12,992 --> 01:21:15,945 Če bi imeli printf tukaj? 1545 01:21:15,945 --> 01:21:16,750 >> OBČINSTVO: Ja. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Torej, če bi imeli pravico printf tu bi natisniti enkrat. 1547 01:21:19,510 --> 01:21:23,400 Ker smo se kliče foo enkrat desno tu, potem bomo zadeli printf. 1548 01:21:23,400 --> 01:21:24,620 Potem bomo poklical bar. 1549 01:21:24,620 --> 01:21:25,710 In potem bo foo vrniti. 1550 01:21:25,710 --> 01:21:26,275 In to je to. 1551 01:21:26,275 --> 01:21:30,985 Mi samo kdaj naleteli printf enkrat. 1552 01:21:30,985 --> 01:21:31,482 Ja? 1553 01:21:31,482 --> 01:21:32,973 >> OBČINSTVO: [neslišno] 1554 01:21:32,973 --> 01:21:37,950 printf kliče foo, ker smo prvi kliče printf in potem vrtaš 1555 01:21:37,950 --> 01:21:38,580 argumenti. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Torej, v teoriji, ni printf kliče foo? 1557 01:21:40,960 --> 01:21:42,220 Torej ni. 1558 01:21:42,220 --> 01:21:47,360 Samo da da c se bo izvršitev te stvari je, preden smo lahko 1559 01:21:47,360 --> 01:21:49,800 pokličete funkcijo, vse argumente funkciji morali 1560 01:21:49,800 --> 01:21:51,600 v celoti oceniti. 1561 01:21:51,600 --> 01:21:53,540 Torej je to popolnoma ocenili? 1562 01:21:53,540 --> 01:21:54,610 Ja, to je le niz. 1563 01:21:54,610 --> 01:21:55,480 To je samo vrednost. 1564 01:21:55,480 --> 01:21:57,200 >> Potem smo popolnoma oceniti to. 1565 01:21:57,200 --> 01:21:59,720 Ko je to storjeno, sedaj vse njegove trditve so ocenjevali. 1566 01:21:59,720 --> 01:22:01,982 In zdaj lahko naredimo pokličete printf. 1567 01:22:01,982 --> 01:22:02,478 Ja? 1568 01:22:02,478 --> 01:22:03,966 >> OBČINSTVO: Eno vprašanje. 1569 01:22:03,966 --> 01:22:06,942 Če imate funkcijo void, mora imate povratni podpičje? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Saj ne povratni podpičje če imate funkcijo nična. 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 Torej, zdaj nekateri kup stvari. 1574 01:22:15,830 --> 01:22:19,640 Torej kup je, kako bomo obravnavali z dinamično upravljanje pomnilnika. 1575 01:22:19,640 --> 01:22:23,100 In to neposredno v nasprotju z Sveženj, ki bi imenovali samodejna 1576 01:22:23,100 --> 01:22:24,100 upravljanje pomnilnika. 1577 01:22:24,100 --> 01:22:27,140 >> Tako na kupu, nikoli res da se ukvarjajo s tem, kako lokalne spremenljivke 1578 01:22:27,140 --> 01:22:30,400 se potiska in izstrelil off vse ti konzoli okvirji in vse te stvari. 1579 01:22:30,400 --> 01:22:31,070 Vam ni treba skrbeti za to. 1580 01:22:31,070 --> 01:22:32,070 To je avtomatski. 1581 01:22:32,070 --> 01:22:36,990 Torej kup je ročna. 1582 01:22:36,990 --> 01:22:38,070 In [neslišno] 1583 01:22:38,070 --> 01:22:41,260 prihaja iz teh funkcij malloc in brezplačno. 1584 01:22:41,260 --> 01:22:43,550 >> Torej, tukaj je drug program. 1585 01:22:43,550 --> 01:22:47,145 Vse, kar delamo, je mallocing število. 1586 01:22:47,145 --> 01:22:49,360 Mi smo jo shranite v zvezdicami x. 1587 01:22:49,360 --> 01:22:52,520 Seveda, moramo preveriti da vidim, če je x null. 1588 01:22:52,520 --> 01:22:56,400 Potem bomo šele določiti, kaj x se kaže, da bi 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Tiskanje, kaj x kaľe, print x in nato brezplačno x. 1591 01:23:03,260 --> 01:23:08,920 >> Torej, kako se to dejansko dogaja, da poiščete če se ozremo na naš dimnika in kup? 1592 01:23:08,920 --> 01:23:10,950 Torej bomo spet začeli. 1593 01:23:10,950 --> 01:23:12,580 Dno našega dimnika kot prej. 1594 01:23:12,580 --> 01:23:15,930 Ne pozabite, da tebi kup neposredno nasprotuje stack? 1595 01:23:15,930 --> 01:23:18,850 Torej bomo imeli top našega kup tam. 1596 01:23:18,850 --> 01:23:22,590 >> Torej dnu naše skladovnice, imamo naš kup okvir za glavno. 1597 01:23:22,590 --> 01:23:28,000 Ima prostor za argc, argv, in smo Zdaj imajo lokalne spremenljivke x, ki 1598 01:23:28,000 --> 01:23:30,030 je int zvezda. 1599 01:23:30,030 --> 01:23:32,240 Torej bomo Ponovil preko tega programa. 1600 01:23:32,240 --> 01:23:34,420 Prva stvar, ki jo imamo, je klic funkcije malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Torej delamo poklicati funkcije malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc je funkcija. 1603 01:23:37,100 --> 01:23:38,770 To se dogaja, da bi dobili sveženj okvir. 1604 01:23:38,770 --> 01:23:40,180 Kaj se peljemo do malloc? 1605 01:23:40,180 --> 01:23:41,610 To se dogaja, da gredo notri dimnika okvirja. 1606 01:23:41,610 --> 01:23:45,130 Smo mimo velikosti n, ki je 4. 1607 01:23:45,130 --> 01:23:49,700 Tako, da se prenese funkcije malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Kaj malloc storiti? 1609 01:23:50,910 --> 01:23:53,820 To nam zagrabi nekaj prostora na kup. 1610 01:23:53,820 --> 01:23:55,320 Tako smo šli na kup. 1611 01:23:55,320 --> 01:23:57,990 In bomo, da zgrabite 4 bajte iz kopice. 1612 01:23:57,990 --> 01:24:01,500 Torej daj, da samovoljno naslov. 1613 01:24:01,500 --> 01:24:06,680 0x123 Pretvarjaj se, da je naslov, ki je na kupu. 1614 01:24:06,680 --> 01:24:12,300 >> Torej, kaj je dejansko v notranjosti, ki regija spomina na naslov Ox123? 1615 01:24:12,300 --> 01:24:13,080 Garbage. 1616 01:24:13,080 --> 01:24:15,270 Zato nismo ničesar shranjeni v njem. 1617 01:24:15,270 --> 01:24:18,830 Torej, kolikor vemo, je je lahko karkoli. 1618 01:24:18,830 --> 01:24:20,560 Ne bi smeli domnevati, da je nič. 1619 01:24:20,560 --> 01:24:23,870 To je najbolj verjetno ni nič. 1620 01:24:23,870 --> 01:24:26,260 >> Torej, zdaj malloc vrne. 1621 01:24:26,260 --> 01:24:28,020 In kaj storiti, ko malloc vrne? 1622 01:24:28,020 --> 01:24:29,800 Postavili smo, kaj se vrne. 1623 01:24:29,800 --> 01:24:32,290 Smo postavili x enake, kar da se vrača. 1624 01:24:32,290 --> 01:24:33,690 Torej, kaj se vrača? 1625 01:24:33,690 --> 01:24:38,150 To se vrača 0x123 ker je to naslov bloka pomnilnika, ki ji 1626 01:24:38,150 --> 01:24:40,850 Pravkar dodeljena v kup. 1627 01:24:40,850 --> 01:24:47,160 >> Torej vrniti 0x123 x se zdaj dogaja, da se določi enako 0x123, ki slikovno, 1628 01:24:47,160 --> 01:24:52,940 smo pogosto pripravijo kot x, ki ima dejanski puščica kaže na tem bloku. 1629 01:24:52,940 --> 01:24:55,820 Vendar je x le shranjevanju ta naslov. 1630 01:24:55,820 --> 01:24:58,670 Sedaj moramo preveriti, če je x null. 1631 01:24:58,670 --> 01:24:59,120 To ni nič. 1632 01:24:59,120 --> 01:25:02,170 Se pretvarjamo, da to malloc uspelo. 1633 01:25:02,170 --> 01:25:04,950 >> Torej, zdaj zvezda x enak 50. 1634 01:25:04,950 --> 01:25:08,450 Torej zvezda spominja, to pomeni, pojdi na ta naslov. 1635 01:25:08,450 --> 01:25:12,700 Torej 0x123 bomo pojdi na ta naslov. 1636 01:25:12,700 --> 01:25:14,660 Tako, da nas pripelje do tja. 1637 01:25:14,660 --> 01:25:16,310 Kaj delamo na tem naslovu? 1638 01:25:16,310 --> 01:25:19,020 Mi shranjevanje 50. 1639 01:25:19,020 --> 01:25:22,500 >> Torej, po tej progi, da je kaj Stvari se bodo izgledal. 1640 01:25:22,500 --> 01:25:24,640 Torej, zdaj je ni več smeti tam gor. 1641 01:25:24,640 --> 01:25:28,910 Zdaj vemo, da je 50, da Zlasti zato, ker naslov 1642 01:25:28,910 --> 01:25:32,410 smo jo nastavite na to. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 Torej, zdaj bomo natisniti f. 1645 01:25:34,370 --> 01:25:38,490 >> Torej, najprej bomo natisniti zvezda x. 1646 01:25:38,490 --> 01:25:39,640 Torej, kaj je zvezda x? 1647 01:25:39,640 --> 01:25:44,300 Again, zvezda x pomeni, pojdite na stvar, ki se kaže na x. 1648 01:25:44,300 --> 01:25:47,140 Torej x je shranjevanje 0x123 Pojdi na tem. 1649 01:25:47,140 --> 01:25:48,490 Smo dobili 50. 1650 01:25:48,490 --> 01:25:50,540 Tako, da natisnete f. 1651 01:25:50,540 --> 01:25:54,900 In to pomeni, da se bo tiskanje 50. 1652 01:25:54,900 --> 01:25:56,850 In potem, da se vrne. 1653 01:25:56,850 --> 01:25:58,340 >> In potem imamo drugo printf. 1654 01:25:58,340 --> 01:25:59,370 Zdaj smo odstotkov p. 1655 01:25:59,370 --> 01:26:01,680 Če še niste opazili, da je kako tiskate kazalec. 1656 01:26:01,680 --> 01:26:04,960 Torej imamo odstotno i, odstotek f, in vse tiste že. 1657 01:26:04,960 --> 01:26:07,160 Torej odstotkov p, natisnite kazalec. 1658 01:26:07,160 --> 01:26:08,920 >> Torej x kazalec. 1659 01:26:08,920 --> 01:26:13,440 Torej, če bomo za tiskanje x sebi, smo tiskanje, kar je dejansko v notranjosti 1660 01:26:13,440 --> 01:26:19,220 x, ki je 0x123 Torej prva print f se bo tiskanje 50. 1661 01:26:19,220 --> 01:26:23,620 Drugi tiskanja f se dogaja natisniti 0x123 Ja? 1662 01:26:23,620 --> 01:26:27,460 >> OBČINSTVO: Ali uporabljate odstotkov x natisniti kazalec? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Torej ne uporabljate odstotkov x natisniti kazalec? 1664 01:26:31,200 --> 01:26:38,350 Torej si lahko, vendar odstotka x je le, na splošno, za podobno, če imate nekaj 1665 01:26:38,350 --> 01:26:40,325 število in želite natisniti je kot šestnajstiško. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 To je samo, kako to narediš. 1668 01:26:44,880 --> 01:26:47,160 >> Ker bi odstotka d natisniti kot decimalko. 1669 01:26:47,160 --> 01:26:50,310 To je, smo dobili odstotkov d. i samo število. 1670 01:26:50,310 --> 01:26:52,690 odstotkov p je posebej kazalce. 1671 01:26:52,690 --> 01:26:54,060 >> Torej x kazalec. 1672 01:26:54,060 --> 01:26:56,360 Želimo uporabiti odstotkov str. 1673 01:26:56,360 --> 01:26:57,937 Ampak odstotkov x mogel delati. 1674 01:26:57,937 --> 01:26:58,414 Ja? 1675 01:26:58,414 --> 01:26:59,664 >> OBČINSTVO: [neslišno]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Ja. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Vsaj za to, da sem call-- pa se ga ne vključi v igro. 1680 01:27:13,440 --> 01:27:19,850 Vendar ta dva argumenti so nujno znotraj tega dimnik okvirja 1681 01:27:19,850 --> 01:27:23,040 skupaj z vsemi lokalnimi spremenljivkami printf se zgodi, da se z uporabo. 1682 01:27:23,040 --> 01:27:27,020 In potem naslednji klic printf zdaj Notranjost printf kup okvirja 1683 01:27:27,020 --> 01:27:33,960 odstotkov p n poševnica nazaj in karkoli vrednost x je, ki je 0x123. 1684 01:27:33,960 --> 01:27:34,425 Ja? 1685 01:27:34,425 --> 01:27:35,675 >> OBČINSTVO: [neslišno]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Vse bo natisniti nekaj da je videti takole. 1688 01:27:40,880 --> 01:27:41,846 >> OBČINSTVO: [neslišno]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Torej, jo natisne v naslovni obliki. 1690 01:27:44,510 --> 01:27:47,003 Izgleda, da je naslov. 1691 01:27:47,003 --> 01:27:47,494 Ja? 1692 01:27:47,494 --> 01:27:49,458 >> OBČINSTVO: [neslišno]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Zakaj je kaj? 1694 01:27:51,075 --> 01:27:52,920 >> OBČINSTVO: [neslišno]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Zakaj je ta kazalec 4 bajte? 1696 01:27:55,240 --> 01:27:58,500 Torej obstaja cel kup od 0 let pred to. 1697 01:27:58,500 --> 01:28:03,740 Tako da je res 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 64-bitni sistem, bi bilo cel kup več ničel. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Ja? 1701 01:28:11,900 --> 01:28:13,150 >> OBČINSTVO: [neslišno]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Torej, najprej printf bo print-- 1704 01:28:21,130 --> 01:28:21,980 >> OBČINSTVO: [neslišno]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Ja, to se dogaja, da natisnete kaj x kaľe. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Star pravi, kaj je to , kar kaže, da. 1708 01:28:29,070 --> 01:28:30,300 Zgrabi. 1709 01:28:30,300 --> 01:28:31,455 Torej, kaj je to kaže na? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Zgrabi. 1712 01:28:32,410 --> 01:28:33,390 To je tisto, kar bomo natisniti. 1713 01:28:33,390 --> 01:28:37,020 Ker naslednjič, smo samo tiskanje x sebi. 1714 01:28:37,020 --> 01:28:38,850 Kaj je notri 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 >> In potem, končno, imamo brezplačno. 1718 01:28:46,620 --> 01:28:48,040 Kaj se peljemo do brezplačnega? 1719 01:28:48,040 --> 01:28:49,470 Smo mimo x. 1720 01:28:49,470 --> 01:28:52,380 Ta čas sem dejansko prikaže je v dimnik okvirju. 1721 01:28:52,380 --> 01:28:56,370 >> Tako da smo mimo vrednosti 0x123 osvoboditi. 1722 01:28:56,370 --> 01:28:59,070 Torej, zdaj prost ve, vse v redu, Moram iti do kopice 1723 01:28:59,070 --> 01:29:00,050 in brez, da spomin. 1724 01:29:00,050 --> 01:29:03,920 To je ne uporabljate več, kaj je na naslovu 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Torej prost bo javnost da iz kup. 1726 01:29:07,010 --> 01:29:09,490 Sedaj naš kup je spet prazna. 1727 01:29:09,490 --> 01:29:11,120 Nimamo spomin razpoka. 1728 01:29:11,120 --> 01:29:12,940 Zdaj bo brezplačno vrne. 1729 01:29:12,940 --> 01:29:16,130 Obvestilo, da x je še 0x123. 1730 01:29:16,130 --> 01:29:18,240 Ampak to zdaj ni veljavna spomin. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Ne smemo več razrešimo x. 1733 01:29:23,986 --> 01:29:24,440 Ja? 1734 01:29:24,440 --> 01:29:27,240 >> OBČINSTVO: Je vrnitev 0 odveč? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Je returen 0 odveč? 1736 01:29:28,290 --> 01:29:31,110 Da. 1737 01:29:31,110 --> 01:29:33,950 Pravkar smo se, da zato, ker imamo vrnitev eno za zrak. 1738 01:29:33,950 --> 01:29:36,830 Torej, to je kot, ja, omogoča vključujejo vrnitev 0. 1739 01:29:36,830 --> 01:29:37,310 Ja? 1740 01:29:37,310 --> 01:29:38,560 >> OBČINSTVO: [neslišno]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Torej, po prostih x, kaj se zgodi, če skušamo dereference kazalca? 1743 01:29:45,580 --> 01:29:47,240 Možno je, da gre nič narobe. 1744 01:29:47,240 --> 01:29:49,330 Možno je, da bomo še vedno dobili 50. 1745 01:29:49,330 --> 01:29:53,590 >> Možno je tudi, da je ta spomin Zdaj se uporablja za nekaj drugega. 1746 01:29:53,590 --> 01:29:57,140 Torej je nedefinirana vedenje. 1747 01:29:57,140 --> 01:30:00,772 In ohlapno pomeni ničesar se lahko zgodi. 1748 01:30:00,772 --> 01:30:01,250 Ja? 1749 01:30:01,250 --> 01:30:02,500 >> OBČINSTVO: [neslišno]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: No, torej, če ga dodelite x na nekaj drugega. 1752 01:30:10,830 --> 01:30:15,870 Torej, če prav tu smo rekli x enaka malloc nekaj else-- 1753 01:30:15,870 --> 01:30:17,100 velikost malloc event-- 1754 01:30:17,100 --> 01:30:20,180 potem, da je prvotna blok spomina ni osvobodil. 1755 01:30:20,180 --> 01:30:21,490 In smo uradno jo izgubila. 1756 01:30:21,490 --> 01:30:23,150 Da je pomnilnika. 1757 01:30:23,150 --> 01:30:25,090 Izgubili smo vse reference na ta blok pomnilnika. 1758 01:30:25,090 --> 01:30:26,827 Tako da ni tako lahko kdaj osvobodi. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, tako da potem vrne 0 sredstvo storiti. 1761 01:30:36,630 --> 01:30:37,900 >> V redu, torej kup overflow. 1762 01:30:37,900 --> 01:30:39,320 Kaj je ideja tukaj? 1763 01:30:39,320 --> 01:30:41,210 Torej, ne pozabite, heap gre dol. 1764 01:30:41,210 --> 01:30:43,480 Stack gre gor. 1765 01:30:43,480 --> 01:30:48,000 Torej, to je bil primer iz predavanj, Mislim, da, kjer je glavno le, da bo 1766 01:30:48,000 --> 01:30:51,380 klic te funkcije foo, kar se dogaja sam poklical rekurzivno več in 1767 01:30:51,380 --> 01:30:52,320 znova. 1768 01:30:52,320 --> 01:30:55,370 >> Torej kup okvirji bodo delujejo povsem enako. 1769 01:30:55,370 --> 01:30:58,130 Torej, bomo začeli z glavno kot spodnji dimnik okvirja. 1770 01:30:58,130 --> 01:31:02,000 Potem glavna bo poklical foo, ki se dogaja, da bi dobili sveženj okvir. 1771 01:31:02,000 --> 01:31:04,260 >> Potem foo bo poklical foo Ponovno, ki bo dobil 1772 01:31:04,260 --> 01:31:05,500 en sveženj okvir. 1773 01:31:05,500 --> 01:31:08,270 In potem še enkrat in še enkrat in še enkrat, in spet, dokler na koncu, tečemo 1774 01:31:08,270 --> 01:31:09,190 v kup. 1775 01:31:09,190 --> 01:31:11,990 Torej, to je, kako bomo dobili kup overflow. 1776 01:31:11,990 --> 01:31:14,910 In na tej točki, boste SEG napako. 1777 01:31:14,910 --> 01:31:17,335 Ali boš res seg napake pred ta točka, ampak ja. 1778 01:31:17,335 --> 01:31:19,660 >> OBČINSTVO: Je jedro smetišče Enako kot uvodnih napake? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Torej boste videli segmentacije Jedro kriv dampinški. 1780 01:31:26,140 --> 01:31:28,760 Dobiš posmrtne ostanke, kadar si SEG napako. 1781 01:31:28,760 --> 01:31:32,580 In je kot smetišče vseh Vsebina vašega trenutnega pomnilniku 1782 01:31:32,580 --> 01:31:36,670 , ki jih lahko poskusite in prepoznajo zakaj SEG očitati. 1783 01:31:36,670 --> 01:31:37,135 Ja? 1784 01:31:37,135 --> 01:31:38,385 >> OBČINSTVO: [neslišno]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Torej segmentacija napak sredstvo tam je kup overflow. 1787 01:31:45,460 --> 01:31:47,060 Torej ni nujno. 1788 01:31:47,060 --> 01:31:49,880 Napaka segmentacija pomeni, da ste ganljiv spomin na nek način 1789 01:31:49,880 --> 01:31:50,880 ne bi smeli biti. 1790 01:31:50,880 --> 01:31:54,750 Torej, eden od načinov, da se dogaja, je, ko je ti kup overflow, začnemo ganljivo 1791 01:31:54,750 --> 01:31:58,736 spomin na način, ki ne bi smeli biti. 1792 01:31:58,736 --> 01:31:59,208 Ja? 1793 01:31:59,208 --> 01:32:00,458 >> OBČINSTVO: [neslišno]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Torej znotraj neskončno zanko. 1796 01:32:05,830 --> 01:32:08,770 Všeč mi je, da je to kot rekurzivni neskončno zanke in tako smo dobili še en 1797 01:32:08,770 --> 01:32:09,770 Sveženj okvir vsakič. 1798 01:32:09,770 --> 01:32:13,540 Vendar le znotraj rednega infinite medtem one-- 1799 01:32:13,540 --> 01:32:16,390 dobro, kaj sploh je ne natisne F-- 1800 01:32:16,390 --> 01:32:17,040 nekaj storiti. 1801 01:32:17,040 --> 01:32:18,390 Karkoli. 1802 01:32:18,390 --> 01:32:20,610 >> Mi ne bomo dobili en sveženj okvir. 1803 01:32:20,610 --> 01:32:22,530 Mi smo šele tekoč, da loopinga preko tega enotnega pouka. 1804 01:32:22,530 --> 01:32:23,920 Sveženj ne narašča. 1805 01:32:23,920 --> 01:32:27,290 To je dejstvo, da je vsak rekurzivno Klic se nam daje sveženj okvir. 1806 01:32:27,290 --> 01:32:31,231 Zato smo dobili prekoračitev. 1807 01:32:31,231 --> 01:32:31,728 Ja? 1808 01:32:31,728 --> 01:32:38,189 >> OBČINSTVO: Torej, če si rekel, da bi dobili while zanko in nato [neslišno]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Torej, če znotraj while je bil printf, še vedno bi 1810 01:32:42,000 --> 01:32:42,790 ne seg krivda. 1811 01:32:42,790 --> 01:32:46,090 Nisem želite zamenjati stvari. 1812 01:32:46,090 --> 01:32:46,610 To bi zanka. 1813 01:32:46,610 --> 01:32:48,225 Ti bi dobili en sam kup okvir za printf. 1814 01:32:48,225 --> 01:32:49,580 >> Potem bi printf vrniti. 1815 01:32:49,580 --> 01:32:50,280 Potem pa spet bi zanko. 1816 01:32:50,280 --> 01:32:51,460 Ti bi dobili en sam kup okvir za printf. 1817 01:32:51,460 --> 01:32:52,850 To bi vrnil. 1818 01:32:52,850 --> 01:32:54,060 Enotni kup okvir. 1819 01:32:54,060 --> 01:33:00,215 Tako da ne boste dobili to neskončno kopičijo žetonov okvirje. 1820 01:33:00,215 --> 01:33:03,185 >> OBČINSTVO: [neslišno]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Da. 1822 01:33:04,040 --> 01:33:09,360 Tako da je ta kup overflow zgodi ker nobeden od teh 1823 01:33:09,360 --> 01:33:11,600 klici na foo se vračajo. 1824 01:33:11,600 --> 01:33:15,250 Torej, če se bomo vrnili, potem bi zgubil žetonov okvirje. 1825 01:33:15,250 --> 01:33:17,870 In potem ne bi kup overflow. 1826 01:33:17,870 --> 01:33:20,070 In to je razlog, zakaj morate osnovni primer za vaše osebne funkcije. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Ja? 1829 01:33:23,479 --> 01:33:27,375 >> OBČINSTVO: Ali je možna velikost in kup za kup isti za 1830 01:33:27,375 --> 01:33:29,880 vsi programi? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Približno. 1832 01:33:31,910 --> 01:33:35,090 Je možna velikost dimnika in kup enaka za vse programe? 1833 01:33:35,090 --> 01:33:37,180 Grobo. 1834 01:33:37,180 --> 01:33:40,080 Obstaja nekaj naključnost za kjer se začne konzoli in 1835 01:33:40,080 --> 01:33:42,400 kjer je kup začne. 1836 01:33:42,400 --> 01:33:45,870 Če se zgodi, da imajo cel kup globalne spremenljivke in stvari, boste morda 1837 01:33:45,870 --> 01:33:49,520 vzeti nekaj prostora za vaš kup. 1838 01:33:49,520 --> 01:33:54,060 >> 64-bitni sistem, boste skoraj imajo neskončno spomin. 1839 01:33:54,060 --> 01:33:55,820 Obstaja samo toliko. 1840 01:33:55,820 --> 01:33:59,250 Med 32-bitno in 64-bitno, da je pomembna razlika. 1841 01:33:59,250 --> 01:34:02,350 >> Boš dobil celo veliko več kup in kup prostora na 64-bitni 1842 01:34:02,350 --> 01:34:05,810 sistem, ker je le več naslovov, ki jih lahko uporabite. 1843 01:34:05,810 --> 01:34:09,360 Ampak na individualni sistem, se bo je približno enaka količina dimnika 1844 01:34:09,360 --> 01:34:10,785 in kup prostora. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 V redu. 1847 01:34:15,530 --> 01:34:18,220 >> Torej, zadnja stvar, ki je kompilacija. 1848 01:34:18,220 --> 01:34:19,810 Torej bi morali vedeti, ta proces. 1849 01:34:19,810 --> 01:34:22,240 Obstajajo štiri velike korake. 1850 01:34:22,240 --> 01:34:24,400 Torej, prvi naj bi enostavno zapomniti. 1851 01:34:24,400 --> 01:34:25,085 Predobdelava. 1852 01:34:25,085 --> 01:34:28,390 To ima predpono pre v njej. 1853 01:34:28,390 --> 01:34:32,080 Torej, gre pred vsem ostalim. 1854 01:34:32,080 --> 01:34:34,000 >> Stvar za zapomniti je hash. 1855 01:34:34,000 --> 01:34:37,250 Tako definira hash hash in vključuje v vseh tistih. 1856 01:34:37,250 --> 01:34:39,560 Tisti, ki so vse pre-procesor direktive. 1857 01:34:39,560 --> 01:34:42,030 To so stvari, ki so pre-procesor skrbi. 1858 01:34:42,030 --> 01:34:43,680 >> Torej, kaj pre-procesor storiti? 1859 01:34:43,680 --> 01:34:44,850 To je res neumno stvar. 1860 01:34:44,850 --> 01:34:49,380 Vse to je mogoče, so vse te kopiranje in cut in paste operacije. 1861 01:34:49,380 --> 01:34:51,790 >> Torej hash vključuje standardni i0 dot h. 1862 01:34:51,790 --> 01:34:52,990 Kaj je to početje? 1863 01:34:52,990 --> 01:34:56,610 To je oprijemalne standardni I0 dot h datoteko in jo prilepite v zgornji 1864 01:34:56,610 --> 01:34:58,960 kjerkoli se pravi hash vključuje standardna i0 dot h. 1865 01:34:58,960 --> 01:35:02,480 >> In vsak hash opredeliti, da smo jih videli, kaj se da delaš? 1866 01:35:02,480 --> 01:35:06,730 Njena kopiranje vrednost tega hash definirano je opredeljena kot in lepljenje, da 1867 01:35:06,730 --> 01:35:08,500 kjerkoli ste s pomočjo vrednosti. 1868 01:35:08,500 --> 01:35:13,400 Torej Predprocesor samo ne zares Operacije, ki temeljijo preprosta besedila. 1869 01:35:13,400 --> 01:35:15,870 To počne nič pametnega. 1870 01:35:15,870 --> 01:35:18,920 Torej, vse ostalo je bolj zapletena. 1871 01:35:18,920 --> 01:35:22,970 >> Torej sedaj, da je Predprocesor done, smo dejansko zbere. 1872 01:35:22,970 --> 01:35:24,320 Torej, kaj zbiranju pomeni? 1873 01:35:24,320 --> 01:35:27,310 Sedaj gremo z oznako C na zbirniku. 1874 01:35:27,310 --> 01:35:27,570 Ja? 1875 01:35:27,570 --> 01:35:28,820 >> OBČINSTVO: [neslišno]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Ja, smo jo ujeli, da je. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Torej sestavljanje. 1880 01:35:38,660 --> 01:35:40,310 Gremo od c do montaže. 1881 01:35:40,310 --> 01:35:42,470 Torej je to dejansko spremeni jezik. 1882 01:35:42,470 --> 01:35:45,240 Se zbiranje pomeni da se iz višji ravni jezika, da 1883 01:35:45,240 --> 01:35:47,340 jezika na nižji ravni. 1884 01:35:47,340 --> 01:35:50,720 >> In c je jezik visoke ravni v primerjavi z montažo. 1885 01:35:50,720 --> 01:35:52,320 Kakšna je montaža? 1886 01:35:52,320 --> 01:35:56,440 Njeni navodila, ki so precej veliko, je za vaš CPU. 1887 01:35:56,440 --> 01:35:59,130 Ampak računalnik še vedno ne Ne razumem montažo. 1888 01:35:59,130 --> 01:36:01,570 To samo razume tiste ničle. 1889 01:36:01,570 --> 01:36:06,160 Torej je naslednji korak, montaža, ki nas pripelje iz teh navodil, ki 1890 01:36:06,160 --> 01:36:08,760 vaš CPU razume in dejansko jih prevaja, da 1891 01:36:08,760 --> 01:36:10,820 tisti in ničel. 1892 01:36:10,820 --> 01:36:13,570 >> Torej C za montažo v binarno. 1893 01:36:13,570 --> 01:36:15,870 Vendar nimam še izvršljiv. 1894 01:36:15,870 --> 01:36:19,550 Tako da mislim knjižnice CS50. 1895 01:36:19,550 --> 01:36:23,070 Smo vam z binarno to CS50 knjižnica, ki ima GetString 1896 01:36:23,070 --> 01:36:24,400 in GetInt in vse to. 1897 01:36:24,400 --> 01:36:25,700 >> Vendar CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 v in itself-- ni izvedljiva. 1899 01:36:27,650 --> 01:36:29,570 To nima glavno funkcijo. 1900 01:36:29,570 --> 01:36:32,230 To je samo kup binarno ki jih lahko uporabite. 1901 01:36:32,230 --> 01:36:41,730 Tako povezovanje je, kako združiti vse teh različnih binarnih datotek 1902 01:36:41,730 --> 01:36:43,110 v dejansko izvedljivo. 1903 01:36:43,110 --> 01:36:45,900 One, ki jih lahko vnesete dot poševnica piko ven. 1904 01:36:45,900 --> 01:36:51,660 >> Torej, to je, da datoteka, ki vas zapisal, - ne glede na vaš program je-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser dot c. 1906 01:36:53,620 --> 01:36:55,100 Toda zdaj se je zbrala navzdol, da binarno. 1907 01:36:55,100 --> 01:36:56,480 Torej Ceaser dot o. 1908 01:36:56,480 --> 01:36:59,620 In to je naš CS50 knjižnice binarno. 1909 01:36:59,620 --> 01:37:02,284 In oni so se združili v enotno izvršljiv. 1910 01:37:02,284 --> 01:37:02,758 Ja? 1911 01:37:02,758 --> 01:37:04,008 >> OBČINSTVO: [neslišno]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Torej, najprej vključuje, ne pozabite, hash vključuje dejansko 1914 01:37:12,710 --> 01:37:13,810 pre-procesor korak. 1915 01:37:13,810 --> 01:37:14,750 Ampak to je ločeno. 1916 01:37:14,750 --> 01:37:20,730 Če ne uporabljate nobene funkcije, ki so izven vašega eno datoteko potem, 1917 01:37:20,730 --> 01:37:26,100 no, da vam ni treba povezati vse saj imaš vse. 1918 01:37:26,100 --> 01:37:30,310 >> To je dejal, printf, ki naj bi bil povezan. 1919 01:37:30,310 --> 01:37:32,820 Če boste kdaj uporabiti printf, da je nekaj da je treba povezati v 1920 01:37:32,820 --> 01:37:35,740 ker niste napisali, da je. 1921 01:37:35,740 --> 01:37:39,530 In, v resnici, printf je samodejno povezani. 1922 01:37:39,530 --> 01:37:42,760 Saj veste, kako v ukazni vrstici ali ko tipkanjem, da boste videli, da imajo 1923 01:37:42,760 --> 01:37:46,690 dash l CS50, ki ima povezavo v knjižnici CS50? 1924 01:37:46,690 --> 01:37:49,070 Printf, in podobne stvari, ki se dogaja da se povežejo samodejno. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Katera koli druga vprašanja o ničemer? 1927 01:37:53,930 --> 01:37:56,280 >> OBČINSTVO: [neslišno]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Povezovanje? 1929 01:37:58,300 --> 01:38:03,450 Imamo cel kup različnih binarnih datotek. 1930 01:38:03,450 --> 01:38:06,410 To je kanonično primer ki jih uporabljamo, je CS50 knjižnico. 1931 01:38:06,410 --> 01:38:09,960 Smo zbrani in vam na binarni za to CS50 knjižnico. 1932 01:38:09,960 --> 01:38:12,410 >> Želite uporabljati GetString v vašem programu. 1933 01:38:12,410 --> 01:38:14,750 Torej greš in uporabite GetString. 1934 01:38:14,750 --> 01:38:19,700 Vendar brez mojega binarno kodo za GetString, ko zbere kodo 1935 01:38:19,700 --> 01:38:23,140 navzdol, ne moreš dejansko zagnati vaš Program ker GetString String je 1936 01:38:23,140 --> 01:38:25,080 še ni bila popolnoma določena. 1937 01:38:25,080 --> 01:38:29,220 >> To je samo takrat, ko boste povezali v moji binarno ki vsebuje GetString, da je zdaj vse 1938 01:38:29,220 --> 01:38:31,130 Dobro, sem lahko dejansko izvršiti GetString. 1939 01:38:31,130 --> 01:38:32,330 Moja vloga popolna. 1940 01:38:32,330 --> 01:38:34,208 In ne morem teči to. 1941 01:38:34,208 --> 01:38:34,697 Ja? 1942 01:38:34,697 --> 01:38:37,631 >> OBČINSTVO: Ali vezno pretvorbo binarni izvršljiv? 1943 01:38:37,631 --> 01:38:42,032 Torej, tudi če nimate drugega knjižnice, ne bi bilo še vedno 1944 01:38:42,032 --> 01:38:44,477 potrebno prevesti [neslišno]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Torej izvedljiva je še vedno v binarno. 1946 01:38:48,640 --> 01:38:51,750 To je samo združuje v celoto kup binarnih datotek. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> OBČINSTVO: Najlepša hvala. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Ni problema. 1950 01:38:58,560 --> 01:38:59,540 Še kakšno vprašanje? 1951 01:38:59,540 --> 01:39:02,001 Drugače, smo vse pripravili. 1952 01:39:02,001 --> 01:39:02,690 V redu. 1953 01:39:02,690 --> 01:39:02,990 Hvala. 1954 01:39:02,990 --> 01:39:03,590 >> [APLAVZ] 1955 01:39:03,590 --> 01:39:04,490 >> OBČINSTVO: Hvala. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Ja. 1957 01:39:05,740 --> 01:39:06,582