1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> DAVID Malan: Allt í lagi, velkominn aftur. 3 00:00:12,580 --> 00:00:13,290 Þetta er CS50. 4 00:00:13,290 --> 00:00:15,130 Þetta er upphaf viku sjö. 5 00:00:15,130 --> 00:00:18,890 Svo það hefur verið smá stund, þannig að ég hélt að við myndum taka vindbylur skoðunarferð um hvar við 6 00:00:18,890 --> 00:00:20,760 horfið og þar sem við erum nú að fara. 7 00:00:20,760 --> 00:00:23,310 >> Svo þetta hér gæti hafa valdið nokkrum angst í fyrstu. 8 00:00:23,310 --> 00:00:27,680 En vonandi, þú ert að byrja að aðlagast hvað þetta táknar hér - 9 00:00:27,680 --> 00:00:32,670 stjörnu fulltrúi músina, sem er bara hvað, hvað meira leikmaður? 10 00:00:32,670 --> 00:00:33,400 Svo það netfang. 11 00:00:33,400 --> 00:00:35,490 >> Svo er það heimilisfang eitthvað í minni. 12 00:00:35,490 --> 00:00:38,260 Og við byrjuðum að afhýða aftur lag a par af vika fyrir, eins og það 13 00:00:38,260 --> 00:00:41,800 GetString og aðrar slíkar aðgerðir allan þennan tíma hafa verið aftur 14 00:00:41,800 --> 00:00:46,010 heimilisföng hlutum í minni, eins og heimilisfang á fyrsta staf í 15 00:00:46,010 --> 00:00:46,990 sumir röð. 16 00:00:46,990 --> 00:00:50,360 >> Þannig að við kynntum líka valgrind, sem þú munt byrja að nota fyrir þetta vandamál 17 00:00:50,360 --> 00:00:53,380 stilla, sérstaklega fyrir næsta Vandamálið sett sem vel. 18 00:00:53,380 --> 00:00:54,980 Og valgrind gerir hvað fyrir okkur? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 Það stöðva fyrir leka minni og það einnig stöðva fyrir misnotkun af minni. 21 00:01:01,020 --> 00:01:05,890 >> Það getur, með nokkrum líkindum, uppgötva ef númerið þitt er að fara að snerta minni 22 00:01:05,890 --> 00:01:07,100 að það ætti einfaldlega ekki. 23 00:01:07,100 --> 00:01:10,410 Svo ekki endilega leka, en ef þú fara út fyrir mörk sum 24 00:01:10,410 --> 00:01:14,730 array, og þú keyrir í raun valgrind og valdið því að hegðun á meðan 25 00:01:14,730 --> 00:01:17,870 valgrind er í gangi í forritinu er gangi innan þess, munt þú fá 26 00:01:17,870 --> 00:01:21,460 skilaboð eins og þetta - "ógilt skrifa um stærð 4, "sem muna nokkra 27 00:01:21,460 --> 00:01:25,880 vikur þýddi síðan að ég hafði óvart eins og á einum int of langt 28 00:01:25,880 --> 00:01:27,250 út fyrir mörk fylki. 29 00:01:27,250 --> 00:01:30,790 Og svo þýðir stærð 4 hér stærð af viðkomandi int. 30 00:01:30,790 --> 00:01:35,260 >> Svo taka fullvissu í þeirri staðreynd að valgrind er framleiðsla, the snið af henni, 31 00:01:35,260 --> 00:01:36,170 er bara grimmilegur. 32 00:01:36,170 --> 00:01:40,180 Það er mjög erfitt að sjá í gegnum óreiðu fyrir fróðleik. 33 00:01:40,180 --> 00:01:42,910 Svo það sem við höfum gert hér er bara útdráttur sumir af þeim meira 34 00:01:42,910 --> 00:01:43,850 áhugaverðar línur. 35 00:01:43,850 --> 00:01:46,760 En ljóst að 80% af er valgrind framleiðsla er að fara til vera a hluti af a 36 00:01:46,760 --> 00:01:47,650 truflun. 37 00:01:47,650 --> 00:01:52,820 >> Bara leita að mynstrum eins og þessir - öryrki rétt, öryrki lesa, 40 bæti 38 00:01:52,820 --> 00:01:56,690 og sumir tala af blokkum eru örugglega glatað, leitarorð eins og þessi. 39 00:01:56,690 --> 00:02:01,920 Og það sem þú munt vonandi sjá er einhver konar ummerki um hvað hlutverk 40 00:02:01,920 --> 00:02:03,340 mistök er í raun inn 41 00:02:03,340 --> 00:02:07,195 Í þessu tilfelli hér, í hvaða línu númerið mitt var villa virðist? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26 í skrá sem kallast memory.c, sem var dæmi sem við vorum að spila með 44 00:02:14,130 --> 00:02:14,890 á þeim tíma. 45 00:02:14,890 --> 00:02:16,460 Svo það er sennilega ekki í malloc. 46 00:02:16,460 --> 00:02:18,630 Það var líklega í númerið mitt í staðinn. 47 00:02:18,630 --> 00:02:20,910 Þannig að við munum sjá þetta aftur og aftur áður en langur. 48 00:02:20,910 --> 00:02:24,080 >> Svo Scanf, þetta kom upp í par af myndum svona langt. 49 00:02:24,080 --> 00:02:26,410 Við sáum sscanf stuttlega. 50 00:02:26,410 --> 00:02:28,330 Það var eitthvað að tala um þú kafa inn í þínum 51 00:02:28,330 --> 00:02:29,535 undirbúningur fyrir próf. 52 00:02:29,535 --> 00:02:33,130 Og scanf er í raun það sem CS50 Bókasafnið er verið að nota undir hlutanum 53 00:02:33,130 --> 00:02:36,560 hetta fyrir alveg einhvern tíma í röð til að fá inntak frá notandanum. 54 00:02:36,560 --> 00:02:40,420 >> Til dæmis, ef ég að færa yfir á CS50 tæki hér, láta mig opna upp 55 00:02:40,420 --> 00:02:45,315 dæmi í dag sem heitir scanf-0.c Og það er frábær einfalt. 56 00:02:45,315 --> 00:02:46,590 Það er bara nokkrar línur af kóða. 57 00:02:46,590 --> 00:02:50,880 En það sýnir í raun hvernig GetInt hefur verið að vinna allan tíma. 58 00:02:50,880 --> 00:02:54,710 >> Í þessari áætlun hér, í línu 16. , Eftir því að ég staðfesti við int. 59 00:02:54,710 --> 00:02:57,270 Þannig að ekki ábendingum, ekkert dularfullur það, bara int. 60 00:02:57,270 --> 00:03:00,330 Þá í línu 17, hvetja ég notandi fyrir a tala, vinsamlegast. 61 00:03:00,330 --> 00:03:02,930 Þá í lok 18., ég nota scanf hér. 62 00:03:02,930 --> 00:03:06,910 Og ég tilgreint, góður af eins og printf, að ég von vitna 63 00:03:06,910 --> 00:03:08,110 Unquote prósent i. 64 00:03:08,110 --> 00:03:10,920 >> Sem prósent i, að sjálfsögðu, táknar við int. 65 00:03:10,920 --> 00:03:14,580 En taka eftir hvað annað rök til Scanf er. 66 00:03:14,580 --> 00:03:17,350 Hvernig myndir þú lýsa seinni rök eftir kommu? 67 00:03:17,350 --> 00:03:19,450 Hvað er það? 68 00:03:19,450 --> 00:03:20,670 >> Það er heimilisfang x. 69 00:03:20,670 --> 00:03:25,490 Svo er þetta að gagni vegna með því að veita scanf með heimilisfang x, hvað gerir 70 00:03:25,490 --> 00:03:29,560 að styrkja að virka að gera? 71 00:03:29,560 --> 00:03:33,010 Ekki bara fara þangað, en einnig að gera hvað? 72 00:03:33,010 --> 00:03:34,060 >> Gera breytingu á henni. 73 00:03:34,060 --> 00:03:38,080 Þar sem þú getur farið þangað, er það svoleiðis eins korti til stað í minni. 74 00:03:38,080 --> 00:03:41,900 Og svo lengi sem þú gefur scanf eða allir virka með svona korti, sem 75 00:03:41,900 --> 00:03:45,840 aðgerð getur farið þarna, og ekki aðeins líta á verðmæti, en það getur einnig 76 00:03:45,840 --> 00:03:49,670 breyta því gildi, sem er gagnlegt ef tilgangur í lífi Scanf er að 77 00:03:49,670 --> 00:03:53,060 skanna inntak frá notanda, sérstaklega frá lyklaborðinu. 78 00:03:53,060 --> 00:03:57,830 Og F táknar sniðinn, rétt eins og printf, f táknar forsniğinn 79 00:03:57,830 --> 00:03:58,930 band sem þú vilt prenta. 80 00:03:58,930 --> 00:04:04,430 >> Svo í stuttu máli, þetta lína 18. einfaldlega segir, reyna að lesa int frá notanda er 81 00:04:04,430 --> 00:04:10,420 lyklaborð og geyma það inni í x, á hvað tölu x gerist að lifa á. 82 00:04:10,420 --> 00:04:14,860 Og svo loks, lína 19 bara segir, takk fyrir int, í þessu tilfelli. 83 00:04:14,860 --> 00:04:15,940 >> Svo láta mig fara á undan og gera þetta. 84 00:04:15,940 --> 00:04:18,570 Svo gera scanf 0. 85 00:04:18,570 --> 00:04:20,130 Leyfðu mér að fara á undan og zoom inn 86 00:04:20,130 --> 00:04:22,960 Ég fer og hlaupa þetta með punktar rista scanf 0. 87 00:04:22,960 --> 00:04:24,020 Fjöldi, vinsamlegast? 88 00:04:24,020 --> 00:04:24,720 50. 89 00:04:24,720 --> 00:04:25,730 Takk fyrir 50.. 90 00:04:25,730 --> 00:04:27,270 Svo það er alveg einfalt. 91 00:04:27,270 --> 00:04:28,160 >> Nú hvað er það að gera ekki? 92 00:04:28,160 --> 00:04:29,940 Það er ekki að gera í heild búnt af stöðva villa. 93 00:04:29,940 --> 00:04:33,000 Fyrir dæmi, ef ég vinna ekki, og ég ekki tegund í fjölda, en 94 00:04:33,000 --> 00:04:37,860 staðinn ég skrifa eitthvað eins og "halló" það er bara svo skrítið. 95 00:04:37,860 --> 00:04:41,130 Og svo einn af þeim hlutum sem CS50 Safnið hefur verið að gera fyrir okkur í sumar 96 00:04:41,130 --> 00:04:43,440 tími er að reprompting og reprompting. 97 00:04:43,440 --> 00:04:49,320 >> The retry setningu muna var í cs50.c, og það er ástæðan að GetInt í 98 00:04:49,320 --> 00:04:51,670 The CS50 bókasafn er í raun allt fullt af línum langur, vegna þess að við erum 99 00:04:51,670 --> 00:04:53,190 stöðva fyrir heimskur efni eins og this. 100 00:04:53,190 --> 00:04:55,730 Did the notandi að gefa ekki okkur, í raun er int? 101 00:04:55,730 --> 00:04:57,910 Gerði hann eða hún að gefa okkur eitthvað eins stafrófsröð bréf? 102 00:04:57,910 --> 00:05:01,410 Ef svo er, viljum við að uppgötva sem og æpa á hana. 103 00:05:01,410 --> 00:05:03,915 >> En það fá meira áhugavert í þessu næsta dæmi. 104 00:05:03,915 --> 00:05:09,840 Ef ég fer til Scanf-1.c, hvað er sá hlutur sem er í grundvallaratriðum breytt í 105 00:05:09,840 --> 00:05:11,135 Þessi næsta dæmi? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 Ég er að nota char *, auðvitað, í stað þess að heiltala. 108 00:05:16,010 --> 00:05:19,210 >> Svo er þetta áhugavert, því char *, muna, er í raun bara 109 00:05:19,210 --> 00:05:20,190 sama og band. 110 00:05:20,190 --> 00:05:23,840 Svo mér finnst eins og kannski er þetta frábær einföld framkvæmd GetString. 111 00:05:23,840 --> 00:05:26,010 En ég hef skrældar aftur lag af CS50 bókasafn, þannig að ég er 112 00:05:26,010 --> 00:05:27,550 kalla þetta char * núna. 113 00:05:27,550 --> 00:05:30,070 Svo skulum sjá hvar, ef einhvers staðar, við förum rangt. 114 00:05:30,070 --> 00:05:30,840 >> Line 17 - 115 00:05:30,840 --> 00:05:33,950 Ég segi aftur, vinsamlegast gefa mér eitthvað, í þessu tilfelli, a band. 116 00:05:33,950 --> 00:05:37,940 Og síðan í næstu línu, kalla ég scanf, aftur, gefur það snið númer, 117 00:05:37,940 --> 00:05:39,310 en í þetta prósent tíma s. 118 00:05:39,310 --> 00:05:41,900 Og þá í þetta sinn, ég gefur það biðminni. 119 00:05:41,900 --> 00:05:43,550 >> Nú taka, ég er ekki að nota The merkið. 120 00:05:43,550 --> 00:05:47,120 En hvers vegna er það líklega í lagi hér? 121 00:05:47,120 --> 00:05:49,760 Því það er biðminni þegar? 122 00:05:49,760 --> 00:05:50,770 Það er nú þegar bendillinn. 123 00:05:50,770 --> 00:05:51,650 Það er nú þegar tölu. 124 00:05:51,650 --> 00:05:54,510 >> Og við skulum þetta orð "rugla," láttu mig bara kalla það s, til dæmis, til að 125 00:05:54,510 --> 00:05:55,050 einfaldleiki. 126 00:05:55,050 --> 00:05:58,250 En ég hef kallað það biðminni því í almennt, í forritun, ef þú hafa a 127 00:05:58,250 --> 00:06:02,130 klumpur af minni, sem band í raun bara er, gætir þú kalla það biðminni. 128 00:06:02,130 --> 00:06:04,460 Það er staður til að geyma upplýsingar. 129 00:06:04,460 --> 00:06:07,400 >> Líkur á hlutum eins og YouTube, þegar þeir höggdeyfir, svo að segja, að 130 00:06:07,400 --> 00:06:10,270 þýðir bara að það er að sækja bita úr Netið og geyma þá í 131 00:06:10,270 --> 00:06:14,160 sveitarfélaga array, sveitarstjórn klumpur af minni svo að þú getur horft á það seinna án 132 00:06:14,160 --> 00:06:16,830 það skipstjóri eða hanga á þú meðan spila aftur. 133 00:06:16,830 --> 00:06:20,930 >> Þannig að það er vandamál hér þó, vegna þess að ég ætla að segja scanf, búast 134 00:06:20,930 --> 00:06:22,320 band frá notandanum. 135 00:06:22,320 --> 00:06:24,410 Hér er heimilisfang bútur af minni. 136 00:06:24,410 --> 00:06:26,180 Settu band þar. 137 00:06:26,180 --> 00:06:31,230 Hvers vegna er það bundið að gefa okkur vandræði, þó? 138 00:06:31,230 --> 00:06:33,490 >> Hvað er það? 139 00:06:33,490 --> 00:06:35,510 Er ég aðgang að að hluti af minni? 140 00:06:35,510 --> 00:06:36,250 Þú veist, ég veit það ekki. 141 00:06:36,250 --> 00:06:39,210 Vegna hefur biðminni verið forsniðin til nokkuð? 142 00:06:39,210 --> 00:06:39,820 Ekki raunverulega. 143 00:06:39,820 --> 00:06:43,090 Og svo er það það sem við höfum verið að hringja sorp gildi, sem 144 00:06:43,090 --> 00:06:44,040 er ekki formleg orð. 145 00:06:44,040 --> 00:06:49,200 Það þýðir bara að við höfum ekki hugmynd um hvað bits eru inni af þessum fjórum bytes sem 146 00:06:49,200 --> 00:06:51,240 Ég hef úthlutað sem biðminni. 147 00:06:51,240 --> 00:06:52,450 >> Ég hef ekki kallað malloc. 148 00:06:52,450 --> 00:06:53,940 Ég hef örugglega ekki kallað GetString. 149 00:06:53,940 --> 00:06:56,380 Svo hver veit hvað er í raun inni biðminni? 150 00:06:56,380 --> 00:07:00,550 Og enn segja scanf blindni, að fara þangað og setja hvað sem notandinn slegið. 151 00:07:00,550 --> 00:07:04,460 >> Svo er það líklegt til að valda í númerið okkar ef við keyra það? 152 00:07:04,460 --> 00:07:05,700 Líklega segfault. 153 00:07:05,700 --> 00:07:07,970 Kannski ekki, en sennilega segfault. 154 00:07:07,970 --> 00:07:10,620 Og ég segi kannski ekki vegna þess að stundum þú gerir, stundum 155 00:07:10,620 --> 00:07:11,380 þú færð ekki segfault. 156 00:07:11,380 --> 00:07:14,280 Stundum þú færð bara heppinn, en það er engu að síður að fara að vera 157 00:07:14,280 --> 00:07:15,340 padda í kerfi okkar. 158 00:07:15,340 --> 00:07:17,060 >> Svo láta mig fara á undan og taka saman þetta. 159 00:07:17,060 --> 00:07:18,280 Ég ætla að gera það gamla skólanum. 160 00:07:18,280 --> 00:07:23,825 Sem clang þjóta 0, scanf-1, scanf-1.c, Enter. 161 00:07:23,825 --> 00:07:24,720 Oops líka gamall skóli. 162 00:07:24,720 --> 00:07:26,550 Við skulum sjá. 163 00:07:26,550 --> 00:07:28,440 Hvar gerði ég farið? 164 00:07:28,440 --> 00:07:29,700 Ó, char * biðminni. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 Ó, þakka þér - 167 00:07:35,130 --> 00:07:36,930 Vista, OK - 168 00:07:36,930 --> 00:07:37,690 mjög gamall skóli. 169 00:07:37,690 --> 00:07:38,900 Allt í lagi, það er verið meðan. 170 00:07:38,900 --> 00:07:41,720 >> Svo ég hef bara vistað skrána eftir gera það tímabundið 171 00:07:41,720 --> 00:07:42,700 breyta smá stund síðan. 172 00:07:42,700 --> 00:07:46,090 Og nú hef ég tekið saman það handvirkt með Clang. 173 00:07:46,090 --> 00:07:49,500 Og nú ætla ég að fara á undan og hlaupa Scanf-1, Enter. 174 00:07:49,500 --> 00:07:50,290 String vinsamlegast. 175 00:07:50,290 --> 00:07:51,600 Ég tegund í "halló." 176 00:07:51,600 --> 00:07:54,070 >> Og nú, hér er þar, hreinskilnislega, printf getur er svolítið pirrandi. 177 00:07:54,070 --> 00:07:56,020 Það er í raun ekki að fara að segfault í þessu tilfelli. 178 00:07:56,020 --> 00:07:59,860 Printf er svolítið sérstakt því það er svo frábær algengt að 179 00:07:59,860 --> 00:08:03,570 meginatriðum printf er að gera okkur greiða og átta, 180 00:08:03,570 --> 00:08:04,830 það er ekki gild músina. 181 00:08:04,830 --> 00:08:09,080 Leyfðu mér að taka það á mig að bara prenta í sviga null, jafnvel 182 00:08:09,080 --> 00:08:13,340 þó það er ekki endilega það við sjálf ráð. 183 00:08:13,340 --> 00:08:16,940 >> Svo við getum í raun ekki auðveldlega valdið segfault við þetta, en greinilega þetta 184 00:08:16,940 --> 00:08:18,600 er ekki hegðun sem ég vildi. 185 00:08:18,600 --> 00:08:19,800 Svo er það einföld lausn? 186 00:08:19,800 --> 00:08:25,650 Jæja, í Scanf-2, láta mig leggja til að í stað þess að í raun bara að úthluta á 187 00:08:25,650 --> 00:08:30,100 char *, láttu mig vera a lítill betri um þetta og láta mig úthluta biðminni 188 00:08:30,100 --> 00:08:32,940 sem röð af 16 tákn. 189 00:08:32,940 --> 00:08:34,200 >> Svo ég get gert þetta á nokkra vegu. 190 00:08:34,200 --> 00:08:35,610 Ég gæti alveg notað malloc. 191 00:08:35,610 --> 00:08:38,980 En ég get farið aftur að viku tvö þegar Ég þurfti bara a heild búnt af 192 00:08:38,980 --> 00:08:39,620 stafir. 193 00:08:39,620 --> 00:08:40,860 Það er bara fylki. 194 00:08:40,860 --> 00:08:44,870 Svo láta mig endurskilgreina staðinn biðminni að vera fylki af 16 stöfum. 195 00:08:44,870 --> 00:08:47,340 >> Og nú, þegar ég fara biðminni í - 196 00:08:47,340 --> 00:08:49,940 og þetta er eitthvað sem við gerðum ekki tala um í viku tvö - 197 00:08:49,940 --> 00:08:53,730 en þú getur meðhöndla array sem þó það er heimilisfang. 198 00:08:53,730 --> 00:08:56,390 Tæknilega, eins og við höfum séð, þá eru þeir svolítið öðruvísi. 199 00:08:56,390 --> 00:09:01,290 En scanf mun ekki huga ef þú gefa það heiti fylki, vegna þess hvað 200 00:09:01,290 --> 00:09:05,030 Clang vilja gera fyrir okkur er fyrst og fremst meðhöndla nafn þess array sem er 201 00:09:05,030 --> 00:09:08,280 heimilisfang klumpur af 16 bæti. 202 00:09:08,280 --> 00:09:09,550 >> Svo er þetta betra. 203 00:09:09,550 --> 00:09:12,110 Þetta þýðir nú að ég get vonandi gera eftirfarandi. 204 00:09:12,110 --> 00:09:16,800 Leyfðu mér að súmma út í smá stund og gera það Scanf-2, unnin OK. 205 00:09:16,800 --> 00:09:19,390 Nú láta mig gera got skástrik scanf-2. 206 00:09:19,390 --> 00:09:22,430 String vinsamlegast. "Halló." Og það virtist virka í þetta sinn. 207 00:09:22,430 --> 00:09:26,020 >> En getur einhver leggja atburðarás þar sem það gæti ekki enn vinna? 208 00:09:26,020 --> 00:09:28,550 Já? 209 00:09:28,550 --> 00:09:30,640 Eitthvað lengri en 16 stafir. 210 00:09:30,640 --> 00:09:32,020 Og í raun, við getum verið svolítið nákvæmari. 211 00:09:32,020 --> 00:09:36,540 Eitthvað lengur þá 15 stafir, því virkilega að við þurfum að hafa í huga 212 00:09:36,540 --> 00:09:39,920 að við þurfum að sviga núll óbeint í lok band, 213 00:09:39,920 --> 00:09:42,950 sem er til hliðar scanf yfirleitt annast fyrir okkur. 214 00:09:42,950 --> 00:09:46,210 >> Svo láta mig gera eitthvað eins - 215 00:09:46,210 --> 00:09:48,040 Stundum getum við bara láta það svona. 216 00:09:48,040 --> 00:09:50,630 OK, þannig að við höfum nú völdum skiptingu kenna. 217 00:09:50,630 --> 00:09:51,000 Hvers vegna? 218 00:09:51,000 --> 00:09:54,940 Vegna þess að ég gafst meira en 15 stafir, og svo höfum við í raun 219 00:09:54,940 --> 00:09:58,280 snert minni sem ég reyndar ætti ekki að hafa. 220 00:09:58,280 --> 00:10:00,180 >> Svo er það virkilega lausnin hér? 221 00:10:00,180 --> 00:10:02,210 Jæja, hvað ef við þurfum lengri streng? 222 00:10:02,210 --> 00:10:03,960 Jæja, gerum við kannski 32 bæti. 223 00:10:03,960 --> 00:10:05,160 Jæja, hvað ef það er ekki nógu lengi? 224 00:10:05,160 --> 00:10:06,040 Hvað um 64 bæt? 225 00:10:06,040 --> 00:10:07,080 Hvað ef það er ekki nógu lengi? 226 00:10:07,080 --> 00:10:09,640 Hvað um 128 eða 200 bæt? 227 00:10:09,640 --> 00:10:12,660 Hvað er raunverulega lausnin hér í almenn mál, ef við vitum ekki í 228 00:10:12,660 --> 00:10:14,460 fram það sem notandinn er að fara að slá? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> Það er bara svona stór verk í rass, til að vera heiðarlegur, sem er ástæða þess að 231 00:10:23,050 --> 00:10:29,050 CS50 Safnið hefur nokkrar línur tugi af númer sem saman koma 232 00:10:29,050 --> 00:10:32,390 GetString streng á þann hátt sem við gerum ekki að vita fyrirfram hvað 233 00:10:32,390 --> 00:10:33,430 notandinn er að fara að slá. 234 00:10:33,430 --> 00:10:37,370 Einkum, ef þú lítur til baka á cs50.c frá tveimur vikum síðan, munt þú sjá 235 00:10:37,370 --> 00:10:40,480 að GetString þýðir í raun ekki nota scanf á þennan hátt. 236 00:10:40,480 --> 00:10:43,720 Frekar les það einn staf í einu. 237 00:10:43,720 --> 00:10:46,010 >> Vegna þess að einn ágætur hlutur óður lesa einn staf er við getum 238 00:10:46,010 --> 00:10:48,490 tryggja okkur alltaf hafa að minnsta kosti einn bleikju. 239 00:10:48,490 --> 00:10:51,740 Ég get bara lýst sem bleikju, og síðan taka þessir sannarlega barn skref til bara 240 00:10:51,740 --> 00:10:54,380 lesa einn staf í á á tími frá lyklaborðinu. 241 00:10:54,380 --> 00:10:58,240 Og þá, hvað þú munt sjá GetString gerir er í hvert skipti sem það rennur út af, 242 00:10:58,240 --> 00:11:02,280 segja, 16 bæti af minni, notar það malloc, eða bræðrungi þar af, til 243 00:11:02,280 --> 00:11:06,810 úthluta fleiri minni, afrita gamla minni í nýja, og þá skríða 244 00:11:06,810 --> 00:11:09,900 eftir, að fá einn staf í einu, og þegar það rennur út af því 245 00:11:09,900 --> 00:11:13,370 klumpur af minni, kastar það í burtu, grípur stærri klumpur af minni, afrit gamall 246 00:11:13,370 --> 00:11:14,750 í nýjum og endurtekur. 247 00:11:14,750 --> 00:11:18,480 Og það er sannarlega verk að raunverulega framkvæma eitthvað eins einfalt og 248 00:11:18,480 --> 00:11:19,710 fá inntak frá notanda. 249 00:11:19,710 --> 00:11:21,090 >> Svo þú getur notað scanf. 250 00:11:21,090 --> 00:11:22,430 Þú getur notað aðrar svipaðar aðgerðir. 251 00:11:22,430 --> 00:11:25,420 Og mikið af kennslubókum og á netinu dæmi gera, en þeir eru allir 252 00:11:25,420 --> 00:11:27,210 viðkvæm vandamál eins og þetta. 253 00:11:27,210 --> 00:11:29,550 Og að lokum, fá segfault er eins konar pirrandi. 254 00:11:29,550 --> 00:11:30,680 Það er ekki gott fyrir notandann. 255 00:11:30,680 --> 00:11:33,560 >> En í versta falli, hvað þýðir það setti grundvallaratriðum þinni 256 00:11:33,560 --> 00:11:37,160 kóða í hættu á að? 257 00:11:37,160 --> 00:11:39,250 Einhvers konar árás, hugsanlega. 258 00:11:39,250 --> 00:11:41,680 Við ræddum um eitt slíkt árás - barmafullur stafla. 259 00:11:41,680 --> 00:11:44,660 En almennt, ef þú hefur heimild til flæða biðminni, eins og við gerðum á 260 00:11:44,660 --> 00:11:48,070 Tveimur vikum síðan, með bara að skrifa meira en "halló" á mánudaginn, þú 261 00:11:48,070 --> 00:11:52,330 getur örugglega tekið yfir, hugsanlega, að tölva, eða að minnsta kosti að fá á gögnum sem 262 00:11:52,330 --> 00:11:53,510 ekki tilheyrir þér. 263 00:11:53,510 --> 00:11:55,970 >> Svo í stuttu máli, þetta er þess vegna sem við höfum þá þjálfun hjól. 264 00:11:55,970 --> 00:11:59,090 En nú, byrjum við að taka þá burt, eins og áætlanir okkar ekki lengur þörf, 265 00:11:59,090 --> 00:12:00,610 endilega, inntak frá notanda. 266 00:12:00,610 --> 00:12:03,960 En um er að ræða vandamál að stilla sex, inntak þitt mun koma frá a gríðarstór 267 00:12:03,960 --> 00:12:07,520 orðabók skrá með 150 sum stakur þúsund orð. 268 00:12:07,520 --> 00:12:10,330 >> Svo þú þarft ekki að hafa áhyggjur handahófskennt notandans inntak. 269 00:12:10,330 --> 00:12:13,720 Við munum gefa þér nokkrar ályktanir um að skrá. 270 00:12:13,720 --> 00:12:20,340 Einhverjar spurningar um ábendingum eða Scanf eða notandi inntak almennt? 271 00:12:20,340 --> 00:12:24,450 >> Allt í lagi, svo a fljótur líta svo á einn slóð efni frá tveimur vikum síðan. 272 00:12:24,450 --> 00:12:28,590 Og það var þetta hugmynd af strúktúr. 273 00:12:28,590 --> 00:12:34,180 Ekki það - þetta hugmyndinni um strúktúr sem var hvað? 274 00:12:34,180 --> 00:12:35,430 Hvað gerði strúktúr gert fyrir okkur? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> Skilgreina - 277 00:12:39,860 --> 00:12:41,710 leitt? 278 00:12:41,710 --> 00:12:42,820 Skilgreina breytu tegund. 279 00:12:42,820 --> 00:12:44,410 Svo raða á. 280 00:12:44,410 --> 00:12:46,180 Við erum í raun að sameina tvo hluti. 281 00:12:46,180 --> 00:12:49,510 Svo með typedef, muna að við getum lýsa tegund af okkar eigin, eins og 282 00:12:49,510 --> 00:12:51,500 samheiti, eins og band fyrir char *. 283 00:12:51,500 --> 00:12:56,200 En nota typedef og strúktúr, getum við búa sannarlega eigin gögn okkar mannvirki. 284 00:12:56,200 --> 00:12:59,600 >> Fyrir dæmi, ef ég fer aftur í gedit hér fyrir réttlátur a augnablik, og ég fara á undan 285 00:12:59,600 --> 00:13:08,230 og gera eitthvað eins og láta mig spara þetta sem, við skulum segja, structs.c 286 00:13:08,230 --> 00:13:10,840 tímabundið, ég er bara að fara að fara á undan og fela 287 00:13:10,840 --> 00:13:14,360 standardio.h, int helstu ógilt. 288 00:13:14,360 --> 00:13:18,960 Og svo hér, geri ráð fyrir að ég vil að skrifa forrit sem geymir 289 00:13:18,960 --> 00:13:21,840 margar nemendur frá mörgum hús, til dæmis. 290 00:13:21,840 --> 00:13:24,430 Svo það er eins registrarial Skráð af einhverju tagi. 291 00:13:24,430 --> 00:13:29,550 >> Þannig að ef ég þarf að nefna eina nemandi, ég gæti gert eitthvað eins char * nafn, 292 00:13:29,550 --> 00:13:31,570 og ég ætla að gera eitthvað eins og - 293 00:13:31,570 --> 00:13:34,410 reyndar, við skulum nota CS50 bókasafn fyrir aðeins augnablik til að gera þetta 294 00:13:34,410 --> 00:13:38,380 lítið einfaldari, þannig að við getum fengið lánað þá heilmikið af línum af kóða. 295 00:13:38,380 --> 00:13:39,340 Og við skulum bara halda það einfalt. 296 00:13:39,340 --> 00:13:42,610 Við munum halda það band, og nú GetString. 297 00:13:42,610 --> 00:13:47,420 >> Svo ég halda nú að ég hef geymt nafn einhvers nemanda, og hús 298 00:13:47,420 --> 00:13:50,240 sumir nemandi, einfaldlega með því að nota breytur eins og við gerðum og í viku eitt. 299 00:13:50,240 --> 00:13:52,370 En geri ráð fyrir Ég vil nú til að styðja margar nemendur. 300 00:13:52,370 --> 00:13:58,460 Allt í lagi, þannig að eðlishvöt mín eru að gera band viðfang2, fær GetString, band 301 00:13:58,460 --> 00:14:01,370 house2 fær GetString. 302 00:14:01,370 --> 00:14:05,850 Og þá þriðju nemandi okkar, skulum gera NAME3 GetString. 303 00:14:05,850 --> 00:14:09,170 >> Allt í lagi, þannig að þetta er vonandi sláandi þú sem konar heimskur, 304 00:14:09,170 --> 00:14:11,580 því þetta ferli er í raun aldrei að fara að enda, og það er bara að fara að 305 00:14:11,580 --> 00:14:13,130 gera númerið mitt líta verr og verri og verri. 306 00:14:13,130 --> 00:14:14,810 En við leyst þetta líka í viku tvö. 307 00:14:14,810 --> 00:14:19,450 Hvað var tiltölulega hreint lausn okkar þegar við höfðum margar breytur af 308 00:14:19,450 --> 00:14:23,580 sömu gögn gerð sem eru allar tengdar, en við vildum ekki þetta grimmilegur óreiðu 309 00:14:23,580 --> 00:14:26,870 af álíka heitir breytur? 310 00:14:26,870 --> 00:14:30,060 Hvað gerði við gerum í staðinn? 311 00:14:30,060 --> 00:14:31,260 >> Þannig að ég held að ég heyrði á nokkrum stöðum. 312 00:14:31,260 --> 00:14:32,590 Við höfðum fylki. 313 00:14:32,590 --> 00:14:37,110 Ef þú vilt mörg tilvik af eitthvað, hví ekki við að hreinsa þetta allt 314 00:14:37,110 --> 00:14:39,540 upp og bara segja, gefa mér array kallað nöfn? 315 00:14:39,540 --> 00:14:41,640 >> Og nú, við skulum harður kóða 3. 316 00:14:41,640 --> 00:14:44,450 Og þá gefa mér annað array kallað hús, og láta mig 317 00:14:44,450 --> 00:14:45,800 nú hart kóða 3.. 318 00:14:45,800 --> 00:14:49,220 Og ég hef gegnheill hreinsa upp óreiðu sem ég bjó bara. 319 00:14:49,220 --> 00:14:52,400 Nú hef ég enn harður á dulmáli 3, en jafnvel The 3 gæti virk koma frá 320 00:14:52,400 --> 00:14:54,350 notandi, eða argv, eða þess háttar. 321 00:14:54,350 --> 00:14:55,720 Svo er þetta nú þegar hreinni. 322 00:14:55,720 --> 00:15:00,100 >> En hvað er pirrandi um þetta er að nú, jafnvel þótt nafn er einhvern veginn 323 00:15:00,100 --> 00:15:02,280 grundvallaratriðum í tengslum við nemandans hús - 324 00:15:02,280 --> 00:15:04,720 það er nemandi sem ég virkilega langar til að tákna - 325 00:15:04,720 --> 00:15:08,080 Ég hef nú tvær fylki sem eru samsíða í þeim skilningi að þeir eru að 326 00:15:08,080 --> 00:15:13,930 sömu stærð og nöfn krappi 0 væntanlega kort í hús krappi 0, 327 00:15:13,930 --> 00:15:16,600 og nöfn krappi 1 kort til húsa krappi 1. 328 00:15:16,600 --> 00:15:19,280 Í öðrum orðum, að nemandi býr í að hús og hinn nemandi 329 00:15:19,280 --> 00:15:20,530 býr í hinu húsinu. 330 00:15:20,530 --> 00:15:23,720 En örugglega þetta gæti verið gert enn meira hreinlegur. 331 00:15:23,720 --> 00:15:24,990 >> Jæja, það er hægt, í raun. 332 00:15:24,990 --> 00:15:28,730 Og láta mig fara á undan og opna upp structs.h, og þú munt 333 00:15:28,730 --> 00:15:31,130 sjá þessa hugmynd hér. 334 00:15:31,130 --> 00:15:34,905 Takið eftir að ég hef notað typedef, eins og þú kennd við stund síðan að lýsa okkar 335 00:15:34,905 --> 00:15:35,570 eigin gögn tegund. 336 00:15:35,570 --> 00:15:39,660 En ég er líka að nota þetta annað leitarorð kallað strúktúr sem gefur mér nýja 337 00:15:39,660 --> 00:15:40,790 gögn uppbygging. 338 00:15:40,790 --> 00:15:43,980 >> Og þessi gögn uppbygging ég kröfu er að fara að hafa tvennt inni 339 00:15:43,980 --> 00:15:47,060 það - band nefndi, og a band heitir hús. 340 00:15:47,060 --> 00:15:49,820 Og nafn sem ég ætla að gefa til Þessi gögn uppbygging er að fara 341 00:15:49,820 --> 00:15:51,005 að vera kölluð nemandi. 342 00:15:51,005 --> 00:15:54,030 Ég gæti kalla það eitthvað sem ég vil, en þetta gera merkingu 343 00:15:54,030 --> 00:15:55,810 vit í mér í huga mínum. 344 00:15:55,810 --> 00:15:59,160 >> Svo nú, ef ég opna betri útgáfa af verkefninu sem ég byrjaði að skrifa 345 00:15:59,160 --> 00:16:00,390 þar, láta mig fletta að ofan. 346 00:16:00,390 --> 00:16:03,190 Og það er einhver fleiri línur af kóða hér, en láta mig leggja áherslu að 347 00:16:03,190 --> 00:16:04,160 stund á einn. 348 00:16:04,160 --> 00:16:07,790 Ég hef lýst fastann nemendur og harður dulmáli 3 fyrir nú. 349 00:16:07,790 --> 00:16:11,110 En nú, eftir því hvernig hreint númerið mitt byrjar að fá. 350 00:16:11,110 --> 00:16:15,030 >> Í samræmi 22, ég staðfesti array nemenda. 351 00:16:15,030 --> 00:16:18,760 Og eftir því að nemandinn er greinilega nú a gögn tegund. 352 00:16:18,760 --> 00:16:23,360 Vegna efst er af þessari skrá, taka Ég hef sett það haus skrá 353 00:16:23,360 --> 00:16:24,820 sem ég dró upp bara í smá stund síðan. 354 00:16:24,820 --> 00:16:28,820 Og það hausaskrár einfaldlega hafði Þessi skilgreining á nemanda. 355 00:16:28,820 --> 00:16:32,470 >> Svo nú hef ég búið til eigin sérsniðið mínum gögnum gerð sem höfundar C ár 356 00:16:32,470 --> 00:16:33,890 síðan ekki hugsa um fyrirfram. 357 00:16:33,890 --> 00:16:34,570 En ekkert vandamál. 358 00:16:34,570 --> 00:16:35,870 Ég get gert það sjálfur. 359 00:16:35,870 --> 00:16:39,050 Svo er þetta fylki heitir nemendur, hvert aðildarríki, sem 360 00:16:39,050 --> 00:16:41,100 er nemandi uppbyggingu. 361 00:16:41,100 --> 00:16:44,270 Og ég vil þrjár af þeim í fylkinu. 362 00:16:44,270 --> 00:16:46,030 >> Og nú, hvað þýðir restin af þessu forriti að gera? 363 00:16:46,030 --> 00:16:47,550 Ég þarf eitthvað svolítið handahófskennt. 364 00:16:47,550 --> 00:16:51,450 Svo frá netinu 24 og áfram, I iterate frá 0 til 3. 365 00:16:51,450 --> 00:16:54,000 Ég spyr þá notanda að nemandans nafn. 366 00:16:54,000 --> 00:16:56,110 Og þá er ég nota GetString eins og áður. 367 00:16:56,110 --> 00:16:59,410 Þá spyr ég um hús nemandans, og ég nota GetString eins og áður. 368 00:16:59,410 --> 00:17:01,780 >> En tilkynning - örlítið ný stykki af setningafræði - 369 00:17:01,780 --> 00:17:07,010 Ég get enn vísitölu til ég-th nemanda, en hvernig fæ ég á ákveðin gögn 370 00:17:07,010 --> 00:17:08,354 sviði inni í strúktúr? 371 00:17:08,354 --> 00:17:11,770 Jæja, hvað er greinilega ný stykki af setningafræði? 372 00:17:11,770 --> 00:17:13,339 Það er bara punktur rekstraraðila. 373 00:17:13,339 --> 00:17:14,510 >> Við höfum í raun ekki séð þetta áður. 374 00:17:14,510 --> 00:17:17,819 Þú hefur séð það í pset fimm ef þú hefur kafa í þegar við punktamynd skrá. 375 00:17:17,819 --> 00:17:22,372 En punktur þýðir bara inni þetta struct eða fleiri sviðum, gefa punkt 376 00:17:22,372 --> 00:17:24,510 nafn, eða gefa mér punktur hús. 377 00:17:24,510 --> 00:17:28,690 Það þýðir að fara inn að struct og fá þá einkum sviðum. 378 00:17:28,690 --> 00:17:30,200 >> Hvað þýðir restin af þessu forriti að gera? 379 00:17:30,200 --> 00:17:31,190 Það er ekki allt sem kynþokkafullur. 380 00:17:31,190 --> 00:17:34,640 Takið eftir að ég iterate frá 0 til 3 aftur, og ég skapa einfaldlega English 381 00:17:34,640 --> 00:17:40,500 setningu eins og svo og svo er í svo og svo hús, sem liggur í punktur nafni frá 382 00:17:40,500 --> 00:17:43,320 i-ta nemandi og þeirra hús eins vel. 383 00:17:43,320 --> 00:17:47,560 >> Og svo loks, nú munum við byrja að fá anal um þetta, nú þegar við erum 384 00:17:47,560 --> 00:17:49,580 þekkja hvað malloc og aðrar aðgerðir hafa verið 385 00:17:49,580 --> 00:17:50,570 gera allan þennan tíma. 386 00:17:50,570 --> 00:17:54,220 Hvers þarf ég að losa bæði nafn og hús, jafnvel þó að ég 387 00:17:54,220 --> 00:17:56,960 ekki kalla malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString gerði. 389 00:17:58,020 --> 00:18:00,930 Og það var óhrein lítið leyndarmál fyrir nokkrar vikur, en GetString hefur 390 00:18:00,930 --> 00:18:03,530 verið lekur minni allan setja öll önn svona langt. 391 00:18:03,530 --> 00:18:05,990 Og valgrand mun að lokum sýna okkur þetta. 392 00:18:05,990 --> 00:18:10,730 >> En það er ekki stór samningur, því að ég veit að ég get einfaldlega losa nafn 393 00:18:10,730 --> 00:18:15,750 og húsið, þótt tæknilega, til vera frábær, frábær öruggt, ætti ég að vera 394 00:18:15,750 --> 00:18:17,890 gera sumir villuprófun hér. 395 00:18:17,890 --> 00:18:19,040 Hvað eru eðlishvöt að segja þér? 396 00:18:19,040 --> 00:18:22,480 Hvað ætti ég að vera leita áður en ég losa hvað er 397 00:18:22,480 --> 00:18:25,470 band, aka sem char *? 398 00:18:25,470 --> 00:18:33,460 >> Ég ætti virkilega að skoða ef nemendur krappi ég punktur nafn ekki 399 00:18:33,460 --> 00:18:34,840 jafnt null. 400 00:18:34,840 --> 00:18:40,400 Þá verður allt í lagi að fara á undan og frjáls sem músina, og sama eða annan 401 00:18:40,400 --> 00:18:41,160 einn eins vel. 402 00:18:41,160 --> 00:18:46,860 Ef nemendur krappi ég punktur húsið er ekki jöfn null, þetta nú mun vernda 403 00:18:46,860 --> 00:18:52,520 gegn horninu ræða sem GetString skilar eitthvað eins null. 404 00:18:52,520 --> 00:18:57,310 Og við sáum í smá stund síðan, printf mun vernda okkur upp hér með bara að segja 405 00:18:57,310 --> 00:18:58,990 null, sem er að fara að líta undarlegt. 406 00:18:58,990 --> 00:19:02,340 En að minnsta kosti það mun ekki segfault, eins og við höfum séð. 407 00:19:02,340 --> 00:19:05,990 >> Jæja, láttu mig gera eitt annað hlutur hér. structs-0 er góður af a heimskur program 408 00:19:05,990 --> 00:19:09,700 því ég inn allar þessar upplýsingar, og þá það er glatað þegar forritið lýkur. 409 00:19:09,700 --> 00:19:10,940 En láta mig fara á undan og gera þetta. 410 00:19:10,940 --> 00:19:12,830 Leyfðu mér að gera í flugstöðinni gluggi svolítið stærri. 411 00:19:12,830 --> 00:19:17,000 Leyfðu mér að gera structs-1, sem er ný útgáfa af þessu. 412 00:19:17,000 --> 00:19:18,520 >> Ég zoom í smá. 413 00:19:18,520 --> 00:19:21,620 Og nú láta mig hlaupa punktur rista structs-1. 414 00:19:21,620 --> 00:19:22,590 Nemandans nafn - 415 00:19:22,590 --> 00:19:31,500 David Mather, við skulum gera Rob Kirkland, skulum gera Lauren Leverett. 416 00:19:31,500 --> 00:19:33,650 Hvað er áhugavert nú er tilkynning - 417 00:19:33,650 --> 00:19:35,540 og ég veit bara þetta vegna þess að Ég skrifaði forrit - 418 00:19:35,540 --> 00:19:38,930 það er skrá nú á núverandi minn skrá sem heitir students.csv. 419 00:19:38,930 --> 00:19:40,420 Sumir af þú might hafa séð þessir í hinum raunverulega heimi. 420 00:19:40,420 --> 00:19:42,980 >> Hvað er CSV skrá? 421 00:19:42,980 --> 00:19:44,170 Kommum gildi. 422 00:19:44,170 --> 00:19:46,670 Það er tegund af eins og fátækur maður er útgáfa af Excel skrá. 423 00:19:46,670 --> 00:19:50,580 Það er borð af línum og dálkum sem þú getur opnað í forriti eins og Excel, 424 00:19:50,580 --> 00:19:51,800 eða númer á Mac. 425 00:19:51,800 --> 00:19:55,180 >> Og ef ég opna þessa skrá hér á gedit, tilkynningu - og tölurnar eru ekki þarna. 426 00:19:55,180 --> 00:19:57,360 Það er bara gedit segja mér línu númer. 427 00:19:57,360 --> 00:19:59,740 Tilkynning á fyrstu línu í Skráin er Davíð og Mather. 428 00:19:59,740 --> 00:20:01,450 Næsta lína er Rob kommu Kirkland. 429 00:20:01,450 --> 00:20:04,170 Og þriðja línan er Lauren komma Leverett. 430 00:20:04,170 --> 00:20:05,480 >> Svo hvað hef ég búið til? 431 00:20:05,480 --> 00:20:09,580 Ég hef nú skrifað C forrit sem raun hægt að búa tafla 432 00:20:09,580 --> 00:20:11,840 sem hægt er að opna með program eins og Excel. 433 00:20:11,840 --> 00:20:15,520 Ekki allt sem neyða gögnum, en ef þú ert miklu stærri klumpur af 434 00:20:15,520 --> 00:20:18,440 gögn sem þú vilt í raun og veru að vinna og gera gröf og 435 00:20:18,440 --> 00:20:21,260 eins og, þetta er kannski ein leið til að búa þessi gögn. 436 00:20:21,260 --> 00:20:25,370 Þar að auki eru CSVs í raun frábær algengar bara til að geyma einfaldar gögn - 437 00:20:25,370 --> 00:20:28,940 Yahoo Finance, til dæmis, ef þú færð gengi hlutabréfa í gegnum þeirra svokallaða 438 00:20:28,940 --> 00:20:33,180 API er ókeypis þjónusta sem gerir þér kleift að fá núverandi upp-til-the-dagsetning lager 439 00:20:33,180 --> 00:20:35,650 vitna fyrir fyrirtæki, þeir gefa gögnin aftur í 440 00:20:35,650 --> 00:20:37,800 frábær einfalt CSV sniði. 441 00:20:37,800 --> 00:20:39,380 >> Svo hvernig did við gerum það? 442 00:20:39,380 --> 00:20:42,530 Jæja eftir, flest þessi forrit er nánast sú sama. 443 00:20:42,530 --> 00:20:46,870 En taka eftir niður hér, frekar en að prenta nemendur út, á línu 35 444 00:20:46,870 --> 00:20:51,040 Onward, halda ég að ég er að safna því nemendur á disk, svo að vista skrá. 445 00:20:51,040 --> 00:20:53,630 >> Svo eftir ég ætla að lýsa yfir skrá * - 446 00:20:53,630 --> 00:20:57,260 nú, þetta er eins konar frávik í C. Fyrir hvað sem ástæða, skrá er öllum húfur, 447 00:20:57,260 --> 00:21:00,690 sem er ekki eins og flestar aðrar tegundir gagna í C. En þetta er innbyggt í 448 00:21:00,690 --> 00:21:02,320 gögn gerð, SKRÁ *. 449 00:21:02,320 --> 00:21:05,900 Og ég er að lýsa bendi til a skrá, er hvernig hægt er að hugsa um það. 450 00:21:05,900 --> 00:21:08,070 >> fopen þýðir opinn skrá. 451 00:21:08,070 --> 00:21:09,470 Hvaða skrá þú vilt opna? 452 00:21:09,470 --> 00:21:12,620 Ég vil opna skrá sem ég mun geðþótta kalla students.csv. 453 00:21:12,620 --> 00:21:14,480 Ég gat hringt að allt sem ég vil. 454 00:21:14,480 --> 00:21:15,200 >> Og þá taka giska. 455 00:21:15,200 --> 00:21:18,960 Hvað þýðir annað rök til fopen meina sennilega? 456 00:21:18,960 --> 00:21:21,480 Hægri, W fyrir skrifa, gæti vera r fyrir lesa. 457 00:21:21,480 --> 00:21:24,120 Það er fyrir auka ef þú langar að bæta röðum og ekki 458 00:21:24,120 --> 00:21:25,200 skrifa allt hlutur. 459 00:21:25,200 --> 00:21:28,005 >> En ég vil bara að búa til þessa skrá einu sinni, þannig að ég ætla að nota vitna Unquote w. 460 00:21:28,005 --> 00:21:31,880 Og ég veit að aðeins frá hafa lesið skjölin eða maðurinn síðu. 461 00:21:31,880 --> 00:21:35,100 Ef skráin er ekki núll - með öðrum orðum, ef ekkert fór úrskeiðis þarna - 462 00:21:35,100 --> 00:21:37,820 láta mig iterate yfir nemendur frá 0 til 3. 463 00:21:37,820 --> 00:21:40,410 >> Og nú eftir því að það er eitthvað alltaf svo örlítið öðruvísi 464 00:21:40,410 --> 00:21:42,110 um línu 41 hér. 465 00:21:42,110 --> 00:21:42,960 Það er ekki printf. 466 00:21:42,960 --> 00:21:46,530 Það er fprintf að skrá printf. 467 00:21:46,530 --> 00:21:47,790 Svo það er að fara að skrifa í skrá. 468 00:21:47,790 --> 00:21:48,860 Hvaða skrá? 469 00:21:48,860 --> 00:21:53,630 Sá sem bendi þú tilgreinir sem fyrsta rök. 470 00:21:53,630 --> 00:21:55,940 >> Þá erum við að tilgreina snið band. 471 00:21:55,940 --> 00:21:59,660 Þá erum við að skilgreina hvað strengur við viljum stinga inn í fyrsta prósent s, og 472 00:21:59,660 --> 00:22:04,320 þá annar breytu eða seinni prósent s. 473 00:22:04,320 --> 00:22:06,760 Þá erum við að loka skrá með fclose. 474 00:22:06,760 --> 00:22:09,380 En ég losa minni eins og áður, þó Ég ætti að fara aftur inn og bæta 475 00:22:09,380 --> 00:22:10,540 nokkrar athuganir for null. 476 00:22:10,540 --> 00:22:12,090 >> Og það er það. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, fclose gefur mér hæfni til að búa til texta skrá. 478 00:22:16,960 --> 00:22:19,640 Nú munt þú sjá í mengi vandamál fimm, sem felur í sér myndir, munt þú vera með 479 00:22:19,640 --> 00:22:20,990 tvöfaldur skrá í staðinn. 480 00:22:20,990 --> 00:22:24,200 En í grundvallaratriðum er hugmyndin er sú sama, jafnvel þótt aðgerðir sem þú munt 481 00:22:24,200 --> 00:22:28,710 sjá eru svolítið öðruvísi. 482 00:22:28,710 --> 00:22:32,580 >> Svo vindbylur ferð, en þú munt fá allt of kunnuglegt við skrá I/O-- 483 00:22:32,580 --> 00:22:34,960 inntak og framleiðsla - með pset fimm. 484 00:22:34,960 --> 00:22:38,607 Og einhverjar spurningar um fyrstu grunnatriði hér? 485 00:22:38,607 --> 00:22:39,857 Já? 486 00:22:39,857 --> 00:22:41,880 487 00:22:41,880 --> 00:22:43,710 >> Hvað ef þú ert að reyna að losa núll gildi? 488 00:22:43,710 --> 00:22:48,880 Ég tel, nema frjáls hefur fengið lítið meira notandi-vingjarnlegur, getur þú 489 00:22:48,880 --> 00:22:49,890 hugsanlega segfault. 490 00:22:49,890 --> 00:22:54,160 Liggur það null er slæmt vegna þess að ég er ekki trúa frjáls þreytandi að athuga fyrir þig, 491 00:22:54,160 --> 00:22:57,330 vegna þess að það myndi hugsanlega vera sóun tíma til þess að gera sig til 492 00:22:57,330 --> 00:22:59,022 allir í heiminum. 493 00:22:59,022 --> 00:23:00,590 Góð spurning, þó. 494 00:23:00,590 --> 00:23:04,300 >> Allt í lagi, svo af þessu tagi fær okkur fyrir áhugaverð efni. 495 00:23:04,300 --> 00:23:07,010 Þema setja vandamál fimm er réttar. 496 00:23:07,010 --> 00:23:08,420 Að minnsta kosti það er hluti á vandamálinu setja. 497 00:23:08,420 --> 00:23:12,030 Réttar vísar almennt til endurheimt upplýsingar sem kunna eða 498 00:23:12,030 --> 00:23:14,110 má ekki hafa verið eytt vísvitandi. 499 00:23:14,110 --> 00:23:18,680 Og svo ég hélt ég myndi gefa þér fljótur bragð af því sem er raunverulega að gerast á öllum 500 00:23:18,680 --> 00:23:21,230 í þetta sinn undir því hetta á tölvunni þinni. 501 00:23:21,230 --> 00:23:23,960 >> Fyrir dæmi, ef þú ert inni á þínum laptop eða skrifborð tölva á 502 00:23:23,960 --> 00:23:28,040 harður ökuferð, það er annað hvort vélbúnaðar tæki sem raunverulega spænir - 503 00:23:28,040 --> 00:23:31,650 það er hringlaga hlutum sem kallast fat sem líta eins og alveg það sem ég 504 00:23:31,650 --> 00:23:34,540 bara hafði upp á skjánum hér, þó þetta er sífellt gamla skólanum. 505 00:23:34,540 --> 00:23:37,370 Þetta er þriggja-og-a-helmingur-tomma harður ökuferð. 506 00:23:37,370 --> 00:23:40,070 Og þrjú og hálft tommu vísar á með af hlutur þegar þú setur það 507 00:23:40,070 --> 00:23:40,890 í tölvu. 508 00:23:40,890 --> 00:23:44,890 >> Margir af þú krakkar á fartölvur þinn núna hafa solid-ástand ökuferð, eða SSDs, 509 00:23:44,890 --> 00:23:46,260 sem hafa enga hreyfanlega hluti. 510 00:23:46,260 --> 00:23:49,170 Þeir eru meira eins og RAM og minna eins þessi vélrænni tæki. 511 00:23:49,170 --> 00:23:51,450 En hugmyndir eru enn á sama, vissulega eins og þeir tengjast 512 00:23:51,450 --> 00:23:52,790 til Heimadæmi fimm. 513 00:23:52,790 --> 00:23:57,400 >> Og ef þú hugsar um nú harður ökuferð táknar að vera hring, sem 514 00:23:57,400 --> 00:23:58,930 Ég teikna svona hér. 515 00:23:58,930 --> 00:24:02,290 Þegar þú býrð til skrá á tölvunni þinni, hvort sem það er SSD, eða í 516 00:24:02,290 --> 00:24:06,610 þetta mál, eldri skóli disknum, þessi skrá nær marga bita. 517 00:24:06,610 --> 00:24:10,510 Skulum segja að það er þetta 0 og 1, a heild búnt af 0s og 1s. 518 00:24:10,510 --> 00:24:11,660 Svo er þetta allt disknum mínum. 519 00:24:11,660 --> 00:24:13,225 Þetta er greinilega mjög stór skrá. 520 00:24:13,225 --> 00:24:18,080 Og það er að nota upp 0s og 1s á að hluti af líkamlegu fati. 521 00:24:18,080 --> 00:24:19,750 >> Jæja, hvað er að líkamleg hluti? 522 00:24:19,750 --> 00:24:25,310 Jæja, það kemur í ljós að á disknum, amk af þessu tagi, það er 523 00:24:25,310 --> 00:24:27,340 þessi litla segulmagnaðir agnir. 524 00:24:27,340 --> 00:24:32,630 Og þeir hafa í raun norður og suðurskautið þeim, þannig að ef þú 525 00:24:32,630 --> 00:24:35,710 snúa einn af þeim segulmagnaðir agnir Þannig gætir þú sagt að það er 526 00:24:35,710 --> 00:24:36,720 fulltrúi 1. 527 00:24:36,720 --> 00:24:39,340 Og ef það er á hvolfi suður til norður, gætir þú sagt að það er 528 00:24:39,340 --> 00:24:40,390 fulltrúi 0. 529 00:24:40,390 --> 00:24:43,660 >> Svo í alvöru líkamlega heimi, það er hvernig þú getur táknað eitthvað í 530 00:24:43,660 --> 00:24:45,670 tvöfaldur ástand 0 og 1. 531 00:24:45,670 --> 00:24:46,720 Svo er það allt skrá er. 532 00:24:46,720 --> 00:24:49,300 There 'a heild búnt af segulmagnaðir agnir sem eru með þessum hætti þeirra eða 533 00:24:49,300 --> 00:24:51,920 þessum hætti, skapa mynstur af 0s og 1s. 534 00:24:51,920 --> 00:24:56,760 >> En það kemur í ljós þegar þú vista skrána, sumir upplýsingar eru vistaðar sérstaklega. 535 00:24:56,760 --> 00:25:00,000 Þannig að þetta er lítið borð, möppu, svo að segja. 536 00:25:00,000 --> 00:25:05,810 Og ég ætla að kalla þennan dálk nafn, og Ég kalla þetta dálk stað. 537 00:25:05,810 --> 00:25:08,850 >> Og ég ætla að segja, ætla þetta er ný minn. 538 00:25:08,850 --> 00:25:14,050 Resume.doc mitt er geymt í staðsetning, við skulum segja 123. 539 00:25:14,050 --> 00:25:15,390 Ég fer alltaf fyrir þeim fjölda. 540 00:25:15,390 --> 00:25:18,810 En nægja að segja að alveg eins í RAM, getur þú taka a harður ökuferð 541 00:25:18,810 --> 00:25:22,350 það er gígabæti eða 200 gígabæta eða Terabyte og þú getur 542 00:25:22,350 --> 00:25:23,750 fjöldi öll bæti. 543 00:25:23,750 --> 00:25:26,480 Þú getur Númer klumpur af 8 bita. 544 00:25:26,480 --> 00:25:29,030 >> Þannig að við munum segja að þetta er staðsetning 123. 545 00:25:29,030 --> 00:25:32,070 Svo þessari möppu inni starfa minn Kerfið man að minn 546 00:25:32,070 --> 00:25:34,250 byrja aftur er á stað 123. 547 00:25:34,250 --> 00:25:36,850 En það verður áhugavert þegar þú eyðir skrá. 548 00:25:36,850 --> 00:25:37,820 >> Svo til dæmis - 549 00:25:37,820 --> 00:25:40,790 og sem betur fer, af the veröld hefur veiddur á þessu - hvað gerist þegar 550 00:25:40,790 --> 00:25:45,040 þú dregur skrá til þinn Mac OS ruslinu eða þinn Gluggakista Recycle Bin? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 Hver er tilgangurinn að gera það? 553 00:25:50,510 --> 00:25:53,860 Það er augljóslega að losna af the skrá, en hvað gerir athöfn að draga og 554 00:25:53,860 --> 00:25:57,550 sleppa í ruslið eða þinn Recycle Bin gera á tölvunni? 555 00:25:57,550 --> 00:25:59,230 >> Nákvæmlega ekkert, í raun. 556 00:25:59,230 --> 00:26:00,320 Það er bara eins og möppu. 557 00:26:00,320 --> 00:26:01,800 Það er sérstakt möppu, til að vera viss. 558 00:26:01,800 --> 00:26:04,460 En þýðir það að eyða í raun skrá? 559 00:26:04,460 --> 00:26:06,780 >> Jæja, nei, vegna þess að sum af þú sennilega hafa verið eins, ó fjandinn, það hafið þér ekki 560 00:26:06,780 --> 00:26:07,420 meina að gera það. 561 00:26:07,420 --> 00:26:09,130 Svo þú tvöfaldur smellur á Rugl eða Recycle Bin. 562 00:26:09,130 --> 00:26:11,630 Þú hefur pota í kring og þú hefur náð skráin bara með því að draga það 563 00:26:11,630 --> 00:26:12,110 út þaðan. 564 00:26:12,110 --> 00:26:14,420 Svo greinilega er það ekki endilega eyða því. 565 00:26:14,420 --> 00:26:15,990 >> OK, þú ert betri en það. 566 00:26:15,990 --> 00:26:18,860 Þú veist að bara draga það inn í Rusl eða Recycle Bin þýðir ekki 567 00:26:18,860 --> 00:26:19,930 þú ert að tæma ruslið. 568 00:26:19,930 --> 00:26:24,110 Svo þú ferð upp í valmyndinni og þú segir Empty Trash eða Empty Recycle Bin. 569 00:26:24,110 --> 00:26:25,360 Þá gerist það? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> Já, svo það er eytt meira svo. 572 00:26:32,530 --> 00:26:37,660 En allt sem gerist er þetta. 573 00:26:37,660 --> 00:26:45,350 The tölva gleymir hvar resume.doc var. 574 00:26:45,350 --> 00:26:47,400 >> En hvað hefur ekki breyst greinilega í myndinni? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 Bita, eru 0s og 1s sem ég kröfu á staðnum sumir líkamlegur þáttur 577 00:26:55,570 --> 00:26:56,280 vélbúnaður. 578 00:26:56,280 --> 00:26:57,110 Þeir eru enn þarna. 579 00:26:57,110 --> 00:26:58,930 Það er bara hefur tölva gleymt hvað þeir eru. 580 00:26:58,930 --> 00:27:03,160 >> Svo það er í raun leystur skrá er bita svo að þeir geti verið endurnýtt. 581 00:27:03,160 --> 00:27:06,940 En ekki fyrr en þú býrð fleiri skrár, og fleiri skrár, og fleiri skrár verða 582 00:27:06,940 --> 00:27:12,150 probabilistically, þá 0s og 1s, þessir segulmagnaðir agnir, fá endurnýta, 583 00:27:12,150 --> 00:27:16,220 hvolfi eða hægri hlið upp, aðrar skrár, 0s og 1s. 584 00:27:16,220 --> 00:27:17,980 >> Svo þú hefur þetta glugga tíma. 585 00:27:17,980 --> 00:27:19,860 Og það er ekki fyrirsjáanleg lengd, virkilega. 586 00:27:19,860 --> 00:27:22,240 Það fer eftir stærð harður drif og hversu margar skrár sem þú þarft og 587 00:27:22,240 --> 00:27:23,490 hversu fljótt þú að gera nýja. 588 00:27:23,490 --> 00:27:27,050 En það er þetta gluggi af tíma á sem þessi skrá er enn fullkomlega 589 00:27:27,050 --> 00:27:27,770 málskostnað. 590 00:27:27,770 --> 00:27:31,050 >> Svo ef þú notar alltaf forrit eins McAfee eða Norton til að reyna að endurheimta 591 00:27:31,050 --> 00:27:35,680 gögn, allt sem þeir eru að gera er að reyna að batna þessa svokölluðu möppu til 592 00:27:35,680 --> 00:27:37,340 reikna út hvar skráin var. 593 00:27:37,340 --> 00:27:40,605 Og stundum Norton og mun segja, skrá er 93% málskostnað. 594 00:27:40,605 --> 00:27:42,020 Jæja, hvað þýðir það? 595 00:27:42,020 --> 00:27:45,690 Það þýðir bara að sumir annar skrá tilviljun endaði með, segja, 596 00:27:45,690 --> 00:27:48,920 þessir bitar út af upprunalegri stærð þinni. 597 00:27:48,920 --> 00:27:51,950 >> Svo hvað er raunverulega að ræða í batna gögn? 598 00:27:51,950 --> 00:27:55,720 Jæja, ef þú hefur ekki eitthvað eins og Norton fyrirfram uppsett á tölvunni þinni, 599 00:27:55,720 --> 00:27:59,510 besta sem þú getur stundum gert er að líta á allt disknum leita 600 00:27:59,510 --> 00:28:00,510 mynstur bita. 601 00:28:00,510 --> 00:28:05,350 Og eitt af þeim málefnum sem setja vandamál fimm er að þú verður að leita á 602 00:28:05,350 --> 00:28:09,570 jafngildir disknum, réttar mynd af samningur glampi kort frá 603 00:28:09,570 --> 00:28:13,660 stafræna myndavél, leita fyrir 0s og 1s sem oftast með hár 604 00:28:13,660 --> 00:28:16,720 líkur, tákna byrja á JPEG mynd. 605 00:28:16,720 --> 00:28:21,120 >> Og þú krakkar geta batna þá ímynd af hrokafullur, ef ég sé þetta mynstur 606 00:28:21,120 --> 00:28:24,380 bitar á réttar mynd, með miklar líkur, sem markar 607 00:28:24,380 --> 00:28:25,650 upphafið að JPEG. 608 00:28:25,650 --> 00:28:29,520 Og ef ég sé sama mynstur aftur, sem markar sennilega upphaf 609 00:28:29,520 --> 00:28:32,440 annar JPEG, og annar JPEG, og annar JPEG. 610 00:28:32,440 --> 00:28:34,970 Og þetta er oftast hvernig gögn bati mun vinna. 611 00:28:34,970 --> 00:28:37,870 Hvað er gott um JPEG er þó skráarsnið sjálft er nokkuð 612 00:28:37,870 --> 00:28:44,400 flókin, í upphafi hvert svo skrá er í raun nokkuð að bera kennsl 613 00:28:44,400 --> 00:28:47,370 og einfalt, eins og þú munt sjá, ef þú hefur ekki nú þegar. 614 00:28:47,370 --> 00:28:50,270 >> Þannig að við skulum taka a loka líta neðan hetta sem að nákvæmlega hvað er verið 615 00:28:50,270 --> 00:28:53,360 gerast, og hvað þessir 0s og 1s eru, að gefa þér svolítið meira af 616 00:28:53,360 --> 00:28:55,330 samhengi fyrir þetta tiltekna verkefni. 617 00:28:55,330 --> 00:28:55,510 >> [Vídeó spilun] 618 00:28:55,510 --> 00:28:58,700 >> -Hvar tölvan geymir mest fastra gögnum sínum. 619 00:28:58,700 --> 00:29:03,390 Til að gera það, gögn fer frá RAM ásamt merki hugbúnaður sem segja 620 00:29:03,390 --> 00:29:06,110 á disknum hvernig á að geyma þessi gögn. 621 00:29:06,110 --> 00:29:09,410 The harður rafrásirnar Drive Þýða þá merki í spennu 622 00:29:09,410 --> 00:29:10,870 sveiflur. 623 00:29:10,870 --> 00:29:14,970 Þetta aftur á móti, stjórna harður ökuferð er hreyfanlega hluti, sumir af fáum 624 00:29:14,970 --> 00:29:17,910 hreyfanlega hluti eftir í nútíma tölva. 625 00:29:17,910 --> 00:29:22,130 >> Sumir af the merki stjórna mótor sem spænir málm-húðuð fat. 626 00:29:22,130 --> 00:29:25,470 Gögnin þín eru í raun geymdar á þessum fat. 627 00:29:25,470 --> 00:29:28,610 Önnur merki færa lesa / skrifa höfuð að lesa eða 628 00:29:28,610 --> 00:29:30,710 skrifa gögn á fat. 629 00:29:30,710 --> 00:29:35,450 Þessi vélar svo nákvæmar að mönnum hárið gat ekki einu sinni fara á milli 630 00:29:35,450 --> 00:29:37,280 höfuð og snúast fat. 631 00:29:37,280 --> 00:29:40,316 Samt virkar það allt á frábær hraða. 632 00:29:40,316 --> 00:29:40,660 >> [END vídeó spilun] 633 00:29:40,660 --> 00:29:42,190 >> DAVID Malan: Zoom í smá dýpra nú á hvað er 634 00:29:42,190 --> 00:29:44,360 reyndar á þeim fat. 635 00:29:44,360 --> 00:29:44,720 >> [Vídeó spilun] 636 00:29:44,720 --> 00:29:47,660 >> -Við skulum líta á hvað við bara sá í hægur hreyfing. 637 00:29:47,660 --> 00:29:51,710 Þegar stutt púls raforku er send til lesa / skrifa höfuð, ef selbiti 638 00:29:51,710 --> 00:29:54,650 á pínulitlum raf fyrir brot úr sekúndu. 639 00:29:54,650 --> 00:29:58,970 The segull skapar sviði, sem breytingar pólun örlítið, örlítið 640 00:29:58,970 --> 00:30:02,850 hluta af málmi agnir sem frakki hverja fati yfirborð. 641 00:30:02,850 --> 00:30:05,940 >> A mynstur röð af þessum pínulítill, innheimt-upp svæði á diskinum 642 00:30:05,940 --> 00:30:08,470 táknar einn hluti af gögn í tvöfaldur fjöldi 643 00:30:08,470 --> 00:30:10,530 notað af tölvum. 644 00:30:10,530 --> 00:30:13,775 Nú, ef núverandi er send ein leið gegnum the lesa / skrifa höfuð, svæðið 645 00:30:13,775 --> 00:30:15,970 er skautað í eina átt. 646 00:30:15,970 --> 00:30:17,950 Ef núverandi er sent í gagnstæða átt, að 647 00:30:17,950 --> 00:30:19,930 pólun er snúið. 648 00:30:19,930 --> 00:30:22,370 >> Hvernig þú fá gögn burt harða diskinn? 649 00:30:22,370 --> 00:30:24,090 Bara snúa ferlinu. 650 00:30:24,090 --> 00:30:26,550 Svo er það sem agnir á disknum að fá straum í 651 00:30:26,550 --> 00:30:27,960 lesa / skrifa höfuð færa. 652 00:30:27,960 --> 00:30:30,700 Setja saman milljónir þessir magnetized hluti og 653 00:30:30,700 --> 00:30:32,160 þú hefur got a skrá. 654 00:30:32,160 --> 00:30:36,060 >> Nú, stykki af einni skrá getur tvístrast um allan akstur er 655 00:30:36,060 --> 00:30:39,970 fat, góður af eins og óreiðu af pappír á borðinu. 656 00:30:39,970 --> 00:30:43,500 Svo heldur sérstakt auka skrá lag af hvar allt er. 657 00:30:43,500 --> 00:30:45,985 Ekki þú vilt þú hefðir eitthvað svoleiðis? 658 00:30:45,985 --> 00:30:46,470 >> [END vídeó spilun] 659 00:30:46,470 --> 00:30:47,820 >> DAVID Malan: OK, sennilega ekki. 660 00:30:47,820 --> 00:30:52,070 Svo hvernig margir af þú krakkar ólst upp með þetta? 661 00:30:52,070 --> 00:30:53,970 OK, svo það er færri og færri hendur á hverju ári. 662 00:30:53,970 --> 00:30:56,550 En ég er feginn að þú ert að minnsta kosti þekki með þeim, því þetta og okkar eigin 663 00:30:56,550 --> 00:31:00,520 bók demo, því miður, er að deyja mjög hægur dauði hér af þekkingu. 664 00:31:00,520 --> 00:31:04,010 >> En þetta er það sem ég, að minnsta kosti, til baka í menntaskóla, notaður notkun fyrir afrit. 665 00:31:04,010 --> 00:31:08,110 Og það var ótrúlegt, vegna þess að þú getur geymt 1,4 megabæti á 666 00:31:08,110 --> 00:31:08,930 þetta tiltekna diskur. 667 00:31:08,930 --> 00:31:12,260 Og þetta var hár þéttleiki útgáfa, eins og sést á HD, sem hefur 668 00:31:12,260 --> 00:31:14,240 þýðir fyrir HD vídeó í dag. 669 00:31:14,240 --> 00:31:16,400 >> Standard þéttleiki var 800 kílóbæti. 670 00:31:16,400 --> 00:31:18,640 Og áður voru 400-kílóbæti diskur. 671 00:31:18,640 --> 00:31:23,120 Og áður voru 5 og 1/4 tommu diska, sem voru sannarlega disklingi, 672 00:31:23,120 --> 00:31:25,680 og smá breiðari og hærri en þetta hér. 673 00:31:25,680 --> 00:31:29,150 En þú getur raunverulega sjá svokölluð diskling þáttur þessara diska. 674 00:31:29,150 --> 00:31:32,630 >> Og virkni, þá eru þeir í raun nokkuð svipað harður ökuferð af á 675 00:31:32,630 --> 00:31:33,570 kosti þessa tegund. 676 00:31:33,570 --> 00:31:37,270 Aftur, SSDs í nýrri tölvum vinna svolítið öðruvísi. 677 00:31:37,270 --> 00:31:41,530 En ef þú færir þessi litla málm flipann, þú getur raunverulega sjá a lítill fótspor, 678 00:31:41,530 --> 00:31:42,560 eða fati. 679 00:31:42,560 --> 00:31:43,830 >> Það er ekki úr málmi eins og þessi. 680 00:31:43,830 --> 00:31:46,000 Þessi er í raun einhvers ódýrari plastefni. 681 00:31:46,000 --> 00:31:46,750 Og þú getur konar wiggle það. 682 00:31:46,750 --> 00:31:50,310 Og þú hefur trully bara þurrka burt sumir fjölda bita eða segulmagnaðir agnir 683 00:31:50,310 --> 00:31:51,220 frá þessum diski. 684 00:31:51,220 --> 00:31:52,710 >> Svo sem betur fer, það er ekkert á það. 685 00:31:52,710 --> 00:31:55,790 Ef þessi hlutur er í leiðinni - og taka augun og þeir af náunga þínum - 686 00:31:55,790 --> 00:31:58,865 þú getur bara svona rífa þetta heild Vagina burt svona. 687 00:31:58,865 --> 00:32:01,900 En það er smá vor, svo að meðvitaðir um það með augunum. 688 00:32:01,900 --> 00:32:03,620 Svo nú þú ert sannarlega disklingi. 689 00:32:03,620 --> 00:32:07,090 >> Og hvað er merkilegt um þetta er að í eins mikið og þetta er 690 00:32:07,090 --> 00:32:10,830 smærri framsetning stærri harður ökuferð, eru þessir hlutir frábær, 691 00:32:10,830 --> 00:32:11,590 frábær einfalt. 692 00:32:11,590 --> 00:32:15,170 Ef þú klípa neðst af því, nú sem sem málmur sem er burt, og hýði 693 00:32:15,170 --> 00:32:20,990 þá opna, allt sem er er tvö stykki af fannst og svokallaða disklingi 694 00:32:20,990 --> 00:32:22,930 með stykki af málmur á inni. 695 00:32:22,930 --> 00:32:25,990 >> Og það fer helmingur Innihald diskur míns. 696 00:32:25,990 --> 00:32:27,540 Það fer annar helmingur af þeim. 697 00:32:27,540 --> 00:32:31,375 En það er allt sem var spuna inni um tölvuna þína í fyrra. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> Og aftur, að setja þetta í samhengi, hversu stór er mest af þínum 700 00:32:38,310 --> 00:32:39,560 harða diska þessa dagana? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 500 gígabæta, a terabyte, kannski í A skrifborð tölva, 2 terabytes, 3 703 00:32:46,230 --> 00:32:47,630 terabytes, 4 terabytes, ekki satt? 704 00:32:47,630 --> 00:32:52,480 Þetta er eitt megabæti, gefa eða taka, sem getur ekki einu sinni passa dæmigerður MP3 705 00:32:52,480 --> 00:32:55,310 Aftur þessa dagana, eða sumir svipuð tónlist skrá. 706 00:32:55,310 --> 00:32:59,500 >> Svo smá minjagrip fyrir þig í dag, og einnig að hjálpa contextualize hvað 707 00:32:59,500 --> 00:33:03,570 við munum vera að taka sem sjálfsögðum hlut nú í vanda sett fimm. 708 00:33:03,570 --> 00:33:04,820 Svo þeir eru þínir til að halda. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 Svo láta mig umskipti þar verður eyða næsta pset eins vel. 711 00:33:13,370 --> 00:33:18,470 Þannig að við höfum nú sett þessa síðu til - ó, a par af tilkynningum fljótt. 712 00:33:18,470 --> 00:33:21,730 >> Á föstudaginn, ef þú vilt taka þátt CS50 í hádeginu, fara í venjulegum stað, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 Og lokaverkefni - 715 00:33:25,100 --> 00:33:28,520 svo á kennsluáætlun, höfum við staða Lokaverkefni forskrift þegar. 716 00:33:28,520 --> 00:33:31,410 Átta sig á að það þýðir ekki að það er vegna sérstaklega fljótlega. 717 00:33:31,410 --> 00:33:33,990 Það er staða, virkilega, bara til að fá þú krakkar hugsa um það. 718 00:33:33,990 --> 00:33:37,620 Og reyndar, frábær veruleg hlutfall af þú verður að takast á við 719 00:33:37,620 --> 00:33:40,780 lokaverkefni á efni sem við hafa ekki einu sinni fengið í bekknum, 720 00:33:40,780 --> 00:33:42,730 en mun eins snemma og í næstu viku. 721 00:33:42,730 --> 00:33:45,530 >> Fyrirvara, þó að sérstakur kallar nokkrar mismunandi þættir sem 722 00:33:45,530 --> 00:33:46,190 lokaverkefni. 723 00:33:46,190 --> 00:33:49,590 Fyrsta, í nokkrar vikur, er Pre-proposal, ansi frjálslegur tölvupóst til 724 00:33:49,590 --> 00:33:52,760 TF þinn að segja honum eða hvað þú ert hugsa um fyrir verkefnið þitt, með 725 00:33:52,760 --> 00:33:53,650 engin skuldbinding. 726 00:33:53,650 --> 00:33:56,710 Tillagan verður einkum þín skuldbinding og sagði hér, þetta er það 727 00:33:56,710 --> 00:33:57,770 Mig langar til að gera fyrir verkefnið mitt. 728 00:33:57,770 --> 00:33:58,250 Hvað finnst þér? 729 00:33:58,250 --> 00:33:58,650 Of stór? 730 00:33:58,650 --> 00:33:59,145 Of lítið? 731 00:33:59,145 --> 00:34:00,330 Er það viðráðanleg? 732 00:34:00,330 --> 00:34:02,230 Og þú sérð sérstakur fyrir frekari upplýsingar. 733 00:34:02,230 --> 00:34:05,060 >> Tveimur vikum eftir að það er staða skýrslu, sem er á sama hátt 734 00:34:05,060 --> 00:34:08,260 frjálslegur email til TF þinn að segja hversu langt að baki þú ert í endanlegri þínum 735 00:34:08,260 --> 00:34:12,360 báru framkvæmd, fylgt eftir með The CS50 Hackathon sem allir 736 00:34:12,360 --> 00:34:17,520 er boðið, sem verður atburður frá 20:00 á einu kvöldi fyrr 7:00 737 00:34:17,520 --> 00:34:19,150 AM næsta morgun. 738 00:34:19,150 --> 00:34:22,560 Pizza, sem ég kann að hafa getið í viku núll, að wil framreiddur á 09:00, 739 00:34:22,560 --> 00:34:24,120 Kínverska mat á 01:00. 740 00:34:24,120 --> 00:34:27,929 Og ef þú ert enn vakandi á 5:00, við munum taka þig á IHOP í morgunmat. 741 00:34:27,929 --> 00:34:31,310 >> Svo er Hackathon einn af the fleiri eftirminnilega reynslu í bekknum. 742 00:34:31,310 --> 00:34:35,290 Þá er framkvæmd vegna, og þá climactic CS50 Fair. 743 00:34:35,290 --> 00:34:38,070 Nánari upplýsingar um allar þessar í næstu vikur. 744 00:34:38,070 --> 00:34:40,739 >> En við skulum fara aftur til eitthvað gamla skólanum - 745 00:34:40,739 --> 00:34:41,920 aftur, fylki. 746 00:34:41,920 --> 00:34:45,040 Svo fylki var ágætur, vegna þess að það leysir vandamál eins og við sáum bara 747 00:34:45,040 --> 00:34:49,290 stund síðan við mannvirki nemenda fá smá úr böndunum ef við 748 00:34:49,290 --> 00:34:52,405 langar að hafa nemanda einn, nemandi tveir, nemandi þrír, nemandi punktur punktur punktur, 749 00:34:52,405 --> 00:34:54,400 sumir handahófi fjölda nemenda. 750 00:34:54,400 --> 00:34:58,850 >> Svo fylki, fyrir nokkrum vikum síðan, swooped í og leysa öll vandamál okkar á ekki 751 00:34:58,850 --> 00:35:03,340 vita fyrirfram hversu margir hlutir af einhvers konar við gætum vilt. 752 00:35:03,340 --> 00:35:07,390 Og við höfum séð að structs getur hjálpað okkur frekar skipuleggja kóðann okkar og halda 753 00:35:07,390 --> 00:35:11,660 eðli svipað breytur, eins og heiti og hús, saman, þannig að við 754 00:35:11,660 --> 00:35:15,570 hægt að meðhöndla þá eins og eina heild, inni þar af eru smærri verk. 755 00:35:15,570 --> 00:35:17,810 >> En fylki hafa ókosti. 756 00:35:17,810 --> 00:35:19,780 Hvað eru nokkrar af göllum við höfum komið upp 757 00:35:19,780 --> 00:35:22,320 með fylki svona langt? 758 00:35:22,320 --> 00:35:23,450 Hvað er það? 759 00:35:23,450 --> 00:35:28,130 Fast stærð - svo jafnvel þótt þú might að vera fær um að úthluta minni fyrir 760 00:35:28,130 --> 00:35:32,310 array, þegar þú veist hversu margir nemendur þú hefur, hversu margir stafir sem þú hefur 761 00:35:32,310 --> 00:35:35,460 frá notandanum, þegar þú hefur úthlutað array, hefur þú svona máluð 762 00:35:35,460 --> 00:35:36,740 sjálfur út í horn. 763 00:35:36,740 --> 00:35:40,600 >> Þar sem þú getur ekki setja nýja þætti í the miðja af óákveðinn greinir í ensku fylking. 764 00:35:40,600 --> 00:35:43,660 Þú getur ekki sett inn fleiri þætti í lok fylki. 765 00:35:43,660 --> 00:35:47,750 Really, þú þarft að grípa til að búa til heild nýr array, eins og við höfum rætt, 766 00:35:47,750 --> 00:35:49,320 afrita gamla í nýja. 767 00:35:49,320 --> 00:35:52,610 Og aftur, það er höfuðverk sem GetString fjallar fyrir þig. 768 00:35:52,610 --> 00:35:56,170 >> En aftur, getur þú ekki einu sinni setja eitthvað í the miðja af the array 769 00:35:56,170 --> 00:35:58,200 Ef hlutfall er ekki alveg fyllt. 770 00:35:58,200 --> 00:36:03,010 Til dæmis, ef þetta array hér til stærðar sex hefur aðeins fimm hluti í það, 771 00:36:03,010 --> 00:36:06,080 Jæja, þú bara tittur eitthvað á endanum. 772 00:36:06,080 --> 00:36:08,200 En hvað ef þú vilt setja eitthvað í miðjum 773 00:36:08,200 --> 00:36:11,280 array, jafnvel þó það gæti hafa Fimm af sex hlutum í það? 774 00:36:11,280 --> 00:36:14,250 >> Jæja, hvað gerði við gera þegar við höfðum öll af sjálfboðaliðum okkar onstage í 775 00:36:14,250 --> 00:36:15,110 vikur áður? 776 00:36:15,110 --> 00:36:18,710 Ef við vildum að setja einhvern hér, annaðhvort þetta fólk hvernig á að færa þetta 777 00:36:18,710 --> 00:36:22,540 hátt, eða þetta fólk hvernig á að færa þetta hátt, og það varð dýr. 778 00:36:22,540 --> 00:36:26,950 Að breytast fólks inni er array endaði bæta upp og kosta 779 00:36:26,950 --> 00:36:31,240 okkur tíma, þess vegna mikið af n veldi okkar gangi sinnum eins og Innsetningarröðun, fyrir 780 00:36:31,240 --> 00:36:32,550 dæmi, í versta tilfelli. 781 00:36:32,550 --> 00:36:36,520 Svo fylki eru frábær, en þú verður að vita fyrirfram hversu stór þú vilt þá. 782 00:36:36,520 --> 00:36:38,030 >> Svo allt í lagi, hér er lausn. 783 00:36:38,030 --> 00:36:43,860 Ef ég veit ekki fyrirfram hversu margir nemendur gæti ég hef, og ég veit einu sinni 784 00:36:43,860 --> 00:36:47,870 Ég ákveð, þó, ég er fastur við það margir nemendur, hví ekki ég bara alltaf 785 00:36:47,870 --> 00:36:51,740 úthluta tvisvar eins mikið pláss eins og ég gæti held ég þarf? 786 00:36:51,740 --> 00:36:54,450 Er það ekki sanngjarnt lausn? 787 00:36:54,450 --> 00:36:58,240 >> Raunhæft, ég held ekki að við erum að fara að þurfa meira en 50 rifa 788 00:36:58,240 --> 00:37:02,190 í fylki fyrir miðlungs stærð bekknum, þannig að við skulum bara umferð upp. 789 00:37:02,190 --> 00:37:07,040 Ég ætla að gera 100 rifa í fylking minn, bara svo að við getum ákveðið að fá 790 00:37:07,040 --> 00:37:10,330 fjöldi nemenda sem ég búist við að vera í einhverjum miðlungs stærð flokki. 791 00:37:10,330 --> 00:37:14,320 Svo hvers vegna ekki bara umferð upp og úthluta meira minni, yfirleitt, að fylki 792 00:37:14,320 --> 00:37:16,290 en þú heldur að þú gætir jafnvel þurft? 793 00:37:16,290 --> 00:37:20,190 Hvað er þetta einfalt ýtt úr stæði að þessi hugmynd? 794 00:37:20,190 --> 00:37:21,440 >> Þú ert bara að sóa minni. 795 00:37:21,440 --> 00:37:25,350 Bókstaflega hvert forrit sem þú skrifar þá er kannski að nota tvisvar sinnum eins mikið minni og 796 00:37:25,350 --> 00:37:26,680 þú þarft í raun og veru. 797 00:37:26,680 --> 00:37:28,990 Og það bara virkar ekki finnst eins og sérstaklega glæsilegur lausn. 798 00:37:28,990 --> 00:37:31,990 Ennfremur dregur það bara líkur á vandamálinu. 799 00:37:31,990 --> 00:37:35,300 Ef þú skyldir hafa vinsæll námskeið ein önn og þú ert 101 800 00:37:35,300 --> 00:37:39,610 nemendur, program er enn grundvallaratriðum frammi fyrir sama mál. 801 00:37:39,610 --> 00:37:44,280 >> Svo sem betur fer, það er til lausn við Þessi auglýsing öll vandamál okkar í formi 802 00:37:44,280 --> 00:37:46,790 mannvirkja gögn sem eru flóknari en þær 803 00:37:46,790 --> 00:37:47,970 við höfum séð hingað til. 804 00:37:47,970 --> 00:37:50,530 Þetta, ég kröfu, er tengda listanum. 805 00:37:50,530 --> 00:37:51,920 Þetta er listi af tölum - 806 00:37:51,920 --> 00:37:54,970 9, 17, 22, 26, og 34 - 807 00:37:54,970 --> 00:38:00,120 sem hafa verið tengd saman með því af því sem ég hef dregið eins örvum. 808 00:38:00,120 --> 00:38:03,580 >> Með öðrum orðum, ef ég vildi til að tákna fylki, ég gæti gert 809 00:38:03,580 --> 00:38:04,910 eitthvað eins og this. 810 00:38:04,910 --> 00:38:07,310 Og ég ætla að setja þetta á the kostnaður á aðeins augnablik. 811 00:38:07,310 --> 00:38:09,970 Ég gæti gert - 812 00:38:09,970 --> 00:38:12,520 halló, allt í lagi. 813 00:38:12,520 --> 00:38:14,470 Standa við. 814 00:38:14,470 --> 00:38:17,360 Ný tölva hér, skýr - 815 00:38:17,360 --> 00:38:18,090 allt í lagi. 816 00:38:18,090 --> 00:38:21,730 >> Svo ef ég hef þessar tölur í array - 817 00:38:21,730 --> 00:38:28,880 9, 17, 22, 26, 24 - 818 00:38:28,880 --> 00:38:30,530 ekki endilega að skala. 819 00:38:30,530 --> 00:38:33,730 Allt í lagi, svo hér er array minn - 820 00:38:33,730 --> 00:38:34,980 oh my god. 821 00:38:34,980 --> 00:38:38,700 822 00:38:38,700 --> 00:38:40,395 Allt í lagi, svo hér er array mitt. 823 00:38:40,395 --> 00:38:44,110 824 00:38:44,110 --> 00:38:45,050 Oh my god. 825 00:38:45,050 --> 00:38:48,820 >> [Hlátur] 826 00:38:48,820 --> 00:38:49,440 >> DAVID Malan: þykjast. 827 00:38:49,440 --> 00:38:52,330 Það er of mikil vinna til að fara aftur og festa það, þannig að það - 828 00:38:52,330 --> 00:38:54,290 26. 829 00:38:54,290 --> 00:38:57,650 Svo við höfum þetta fjölbreytta 9, 17, 22, 26, og 34. 830 00:38:57,650 --> 00:39:00,260 Fyrir þessir af þú getur séð vandræðaleg mistök sem ég gerði bara, 831 00:39:00,260 --> 00:39:00,830 þarna er hún. 832 00:39:00,830 --> 00:39:04,490 >> Svo ég halda því fram að þetta er mjög duglegur lausn. 833 00:39:04,490 --> 00:39:07,310 Ég hef úthlutað eins mörgum ints sem Ég þarf - Einn, tveir, þrír, 834 00:39:07,310 --> 00:39:09,100 fjórir, fimm, eða sex - 835 00:39:09,100 --> 00:39:11,660 og ég hef þá geymd Tölurnar inni þessu fylki. 836 00:39:11,660 --> 00:39:15,220 En geri ráð fyrir, þá vil ég að setja gildi eins og númer 8? 837 00:39:15,220 --> 00:39:16,100 Jæja, hvar er það að fara? 838 00:39:16,100 --> 00:39:18,530 Segjum Ég vil setja tala eins 20. 839 00:39:18,530 --> 00:39:19,790 Jæja, hvar er það að fara? 840 00:39:19,790 --> 00:39:23,160 Einhvers staðar í miðju, eða fjöldi 35 þarf að fara 841 00:39:23,160 --> 00:39:24,010 einhvers staðar á endanum. 842 00:39:24,010 --> 00:39:25,320 En ég er öll út af plássi. 843 00:39:25,320 --> 00:39:29,120 >> Og svo er þetta grundvallaratriði áskorun af fylki sem er eru lausnin. 844 00:39:29,120 --> 00:39:32,280 Ég hélt í smá stund síðan, GetString leysa þetta vandamál. 845 00:39:32,280 --> 00:39:37,380 Ef þú vilt setja inn sjöttu tölu í þessu fylki, það sem er að minnsta kosti einn 846 00:39:37,380 --> 00:39:40,090 lausn sem þú getur fallið aftur á fyrir viss, bara eins og við gerum með GetString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 Hvað er það? 849 00:39:46,030 --> 00:39:48,190 >> Jæja, gera það stærra er auðveldara sagt en gert. 850 00:39:48,190 --> 00:39:52,810 Við getum ekki endilega að gera array stærri, en hvað getum við gert? 851 00:39:52,810 --> 00:39:56,570 Gera nýja array sem er stærri, af stærð 6, eða kannski stærð 10, ef við viljum 852 00:39:56,570 --> 00:40:00,490 til að fá undan hlutum, og þá afrita gamla array inn í nýja, og síðan 853 00:40:00,490 --> 00:40:01,680 losa gamla array. 854 00:40:01,680 --> 00:40:05,770 >> En hvað er í gangi tími nú af því ferli? 855 00:40:05,770 --> 00:40:09,870 Það er stór O n, vegna þess að afritun er að fara að kosta þig nokkrar einingar af 856 00:40:09,870 --> 00:40:13,480 tími, svo ekki svo tilvalið ef við þurfum að úthluta nýtt array, sem er að fara 857 00:40:13,480 --> 00:40:15,610 að neyta tvisvar eins mikið minni tímabundið. 858 00:40:15,610 --> 00:40:16,660 Afrita gamla í nýja - 859 00:40:16,660 --> 00:40:18,800 Ég meina, það er bara höfuðverkur, sem er, aftur, hvers vegna við skrifaði 860 00:40:18,800 --> 00:40:19,920 GetString fyrir þig. 861 00:40:19,920 --> 00:40:21,380 >> Svo hvað gætum við gert í staðinn? 862 00:40:21,380 --> 00:40:25,000 Jæja, hvað ef gögn uppbygging okkar reyndar hefur skort í það? 863 00:40:25,000 --> 00:40:30,790 Segjum að ég slaka markmiði mínu um að hafa samliggjandi klumpur af minni, þar 9 864 00:40:30,790 --> 00:40:34,500 er við hliðina á 17, sem er við hliðina á 22, og svo framvegis. 865 00:40:34,500 --> 00:40:39,570 >> Og gera ráð fyrir að 9 geta verið yfir hér í RAM, og 17 má hérna í RAM, 866 00:40:39,570 --> 00:40:40,990 og 22 má hérna í vinnsluminni. 867 00:40:40,990 --> 00:40:43,610 Með öðrum orðum, þarf ég ekki að þeim jafnvel aftur til baka aftur. 868 00:40:43,610 --> 00:40:47,850 Ég hef bara einhvern veginn þræði nál í gegnum hvert af þessum tölum, eða hvert 869 00:40:47,850 --> 00:40:51,010 þessara hnúður, eins og við munum kalla ferhyrninga sem ég hef dregið þá, til 870 00:40:51,010 --> 00:40:55,670 muna hvernig til fá til the síðastur svo hnút frá fyrsta. 871 00:40:55,670 --> 00:40:59,940 >> Svo er það forritun reisa við höfum séð alveg nýlega, sem ég 872 00:40:59,940 --> 00:41:03,030 geta framkvæma þessi þráður, eða dregin hér, sem ég get 873 00:41:03,030 --> 00:41:05,430 hrinda í framkvæmd þeim örvarnar? 874 00:41:05,430 --> 00:41:06,500 Svo ábendingum, ekki satt? 875 00:41:06,500 --> 00:41:09,560 Ef ég úthluta ekki bara int, en þá er tengipunktur - og með því að 876 00:41:09,560 --> 00:41:10,810 hnút, ég meina bara ílát. 877 00:41:10,810 --> 00:41:12,900 Og sjónrænt, meina ég rétthyrningur. 878 00:41:12,900 --> 00:41:16,420 Svo hnút þarf greinilega að innihalda tvö gildi - 879 00:41:16,420 --> 00:41:21,490 The int sig, og þá gefið í skyn sem með the botn helmingur af the rétthyrningur, 880 00:41:21,490 --> 00:41:23,010 nóg pláss fyrir int. 881 00:41:23,010 --> 00:41:26,130 >> Svo bara að hugsa fram í tímann hér, hversu stór er þessi hnútur, þetta 882 00:41:26,130 --> 00:41:27,170 gámur ræðir? 883 00:41:27,170 --> 00:41:29,250 Hversu margir bæti fyrir int? 884 00:41:29,250 --> 00:41:31,310 Væntanlega 4, ef það er það sama og venjulega. 885 00:41:31,310 --> 00:41:33,270 Og þá hversu margir bæti fyrir músina? 886 00:41:33,270 --> 00:41:33,650 4.. 887 00:41:33,650 --> 00:41:37,940 Svo er þetta gámur, eða þetta hnút, að fara að vera 8-bæti uppbyggingu. 888 00:41:37,940 --> 00:41:41,760 Ó, og það er skemmtileg tilviljun að við kynntum bara þessa hugmynd um 889 00:41:41,760 --> 00:41:44,400 A struct, eða C byggingu. 890 00:41:44,400 --> 00:41:48,890 >> Svo ég halda því fram að ég vil taka skref átt þetta flóknari 891 00:41:48,890 --> 00:41:52,560 framkvæmd lista af tölum, a tengd lista af tölum, þarf ég að gera 892 00:41:52,560 --> 00:41:56,920 lítið meira að hugsa upp að framan og lýsa ekki bara int, heldur strúktúr 893 00:41:56,920 --> 00:41:58,620 sem ég kalla, venjulega hér, hnút. 894 00:41:58,620 --> 00:42:01,630 Við gætum kallað það hvað sem við viljum, en tengipunktur er að fara að vera þema í fullt 895 00:42:01,630 --> 00:42:03,560 af því sem við byrjum að horfa á núna. 896 00:42:03,560 --> 00:42:06,480 >> Inni þess hnút er int n. 897 00:42:06,480 --> 00:42:09,350 Og þá er þetta setningafræði, lítið undarlegt við fyrstu sýn - 898 00:42:09,350 --> 00:42:12,960 struct hnút * næst. 899 00:42:12,960 --> 00:42:16,900 Jæja pictorially, hvað er það? 900 00:42:16,900 --> 00:42:21,000 Það er botn helmingur af rétthyrningur sem við sáum 901 00:42:21,000 --> 00:42:22,730 bara í smá stund síðan. 902 00:42:22,730 --> 00:42:27,600 >> En hvers vegna er ég að segja strúktúr hnút * öfugt við bara hnút *? 903 00:42:27,600 --> 00:42:31,370 Vegna þess að ef það bendi snúi á annan hnút, það er bara 904 00:42:31,370 --> 00:42:32,760 heimilisfang hnút. 905 00:42:32,760 --> 00:42:35,630 Það er í samræmi við það sem við höfum rætt um ábendingum svona langt. 906 00:42:35,630 --> 00:42:39,690 En hvers vegna, ef ég segist þessi uppbygging er kallaði hnút, þarf ég að segja strúktúr 907 00:42:39,690 --> 00:42:42,660 hnút inni hér? 908 00:42:42,660 --> 00:42:43,190 >> Einmitt. 909 00:42:43,190 --> 00:42:46,490 Það er tegund af heimskulegt raunveruleika C. The typedef, svo að segja, hefur ekki 910 00:42:46,490 --> 00:42:47,220 gerst enn. 911 00:42:47,220 --> 00:42:48,510 C er frábær bókstaflega. 912 00:42:48,510 --> 00:42:51,050 Það les kóðann þinn Top til botn, vinstri til hægri. 913 00:42:51,050 --> 00:42:54,930 Og þar til hann lendir að semíkommu á botn lína, ætli það ekki 914 00:42:54,930 --> 00:42:57,590 til sem gögn tegund? 915 00:42:57,590 --> 00:42:59,060 Hnút, vitna Unquote hnút. 916 00:42:59,060 --> 00:43:03,050 >> En vegna þess að fleiri fjölorður yfirlýsing ég gerði á fyrstu línu - 917 00:43:03,050 --> 00:43:05,340 typedef strúktúr hnút - 918 00:43:05,340 --> 00:43:08,790 því það kom fyrst, áður en hrokkið axlabönd, sem er tegund af eins og 919 00:43:08,790 --> 00:43:11,800 Pre-mennta Clang að þú vita hvað, gefa mér strúktúr 920 00:43:11,800 --> 00:43:13,570 kallað strúktúr hnút. 921 00:43:13,570 --> 00:43:16,270 Frankly, ég er ekki eins kalla það struct hnút, strúktúr hnút allt 922 00:43:16,270 --> 00:43:17,090 um númerið mitt. 923 00:43:17,090 --> 00:43:20,660 En ég ætla bara að nota það einu sinni, bara inni, þannig að ég get í raun 924 00:43:20,660 --> 00:43:25,010 búið til eins konar hringlaga tilvísun, ekki bendi til mín í sjálfu sér, en 925 00:43:25,010 --> 00:43:29,400 músina til annar Samsvarandi tegund. 926 00:43:29,400 --> 00:43:32,330 >> Svo kemur í ljós að á gögn uppbygging eins og þetta, það er nokkur 927 00:43:32,330 --> 00:43:34,470 starfsemi sem gæti áhugaverð fyrir okkur. 928 00:43:34,470 --> 00:43:37,460 Við gætum vilja til að setja í lista eins og þetta. 929 00:43:37,460 --> 00:43:39,850 Við gætum vilja til að eyða af lista eins og þetta. 930 00:43:39,850 --> 00:43:43,490 Við gætum vilja til að leita á lista fyrir a gildi, eða fleiri almennt, fara yfir. 931 00:43:43,490 --> 00:43:46,410 Og fara er bara fínt leið segja byrja á vinstri og færa alla 932 00:43:46,410 --> 00:43:47,650 leiðin til hægri. 933 00:43:47,650 --> 00:43:52,640 >> Og tilkynningu, jafnvel með þetta örlítið meira háþróuð gögn uppbygging, láta 934 00:43:52,640 --> 00:43:56,510 mig leggja til að við getum lánað sum hugmyndir síðustu tvær vikur og 935 00:43:56,510 --> 00:43:58,410 framkvæma aðgerð sem kallast leita svona. 936 00:43:58,410 --> 00:44:01,360 Það er að fara að skila satt eða rangar, sem gefur til kynna, já eða 937 00:44:01,360 --> 00:44:03,390 ekkert, n er á listanum. 938 00:44:03,390 --> 00:44:05,960 Seinni rök hennar er bendillinn á listann sjálft, þannig að 939 00:44:05,960 --> 00:44:07,920 bendi á hnút. 940 00:44:07,920 --> 00:44:10,350 >> Það eina sem ég ætla að gera þá er lýsa tímabundið breytu. 941 00:44:10,350 --> 00:44:12,730 Við munum kalla það PTR eftir venju, fyrir músina. 942 00:44:12,730 --> 00:44:15,220 Og ég tengt það jafn upphafið af listanum. 943 00:44:15,220 --> 00:44:16,680 >> Og nú eftir while lykkju. 944 00:44:16,680 --> 00:44:20,640 Svo lengi sem bendillinn er ekki jafn að núll, ég ætla að athuga. 945 00:44:20,640 --> 00:44:24,520 Er bendillinn arrow n jöfn N sem var samþykkt í? 946 00:44:24,520 --> 00:44:26,410 Og bíddu í eina mínútu - ný stykki af setningafræði. 947 00:44:26,410 --> 00:44:29,324 Hvað er ör allt í einu? 948 00:44:29,324 --> 00:44:30,574 Já? 949 00:44:30,574 --> 00:44:34,200 950 00:44:34,200 --> 00:44:34,810 >> Einmitt. 951 00:44:34,810 --> 00:44:38,860 Svo þar fyrir nokkrum mínútum síðan, er notað við punktur merki að opna eitthvað 952 00:44:38,860 --> 00:44:43,080 inni í um struct, ef breytan þú hefur er ekki struct 953 00:44:43,080 --> 00:44:47,420 sjálft, en bendi á strúktúr, sem betur fer, a stykki af setningafræði sem 954 00:44:47,420 --> 00:44:48,620 lokum gerir innsæi skilningi. 955 00:44:48,620 --> 00:44:52,360 Örin þýðir að fylgja músina, eins örvar okkar meina venjulega 956 00:44:52,360 --> 00:44:56,570 pictorially, og fara á gagnasvæði inni. 957 00:44:56,570 --> 00:44:59,700 Svo er ör sama og punktur, en þú notar það þegar þú ert með músina. 958 00:44:59,700 --> 00:45:05,270 >> Svo bara til ágrip þá, ef n sviði inni í strúktúr sem heitir músina 959 00:45:05,270 --> 00:45:07,760 jafngildir jafngildir n, aftur satt. 960 00:45:07,760 --> 00:45:11,970 Annars, þessi lína hér - bendi jafngildir músina næst. 961 00:45:11,970 --> 00:45:17,540 Svo er það þetta að gera, tilkynning, er ef ég er núna að benda á strúktúr 962 00:45:17,540 --> 00:45:21,430 sem inniheldur 9, og 9 er ekki fjölda Ég er að leita að - ráð ég er að leita 963 00:45:21,430 --> 00:45:22,830 fyrir n jafngildir 50 - 964 00:45:22,830 --> 00:45:25,930 Ég ætla að uppfæra tímabundið músina mína að ekki benda á þennan hnút 965 00:45:25,930 --> 00:45:31,190 lengur, en bendillinn arrow næsta, sem er að fara að setja mig upp hér. 966 00:45:31,190 --> 00:45:34,270 >> Nú, áttaði ég er vindbylur kynning. 967 00:45:34,270 --> 00:45:37,380 Á miðvikudaginn munum við í raun að gera þetta með nokkrum mönnum og með sumir fleiri 968 00:45:37,380 --> 00:45:38,900 númer á hægari hraða. 969 00:45:38,900 --> 00:45:42,990 En átta sig, erum við nú að gera gögn okkar mannvirki flóknari þannig að okkar 970 00:45:42,990 --> 00:45:45,780 reiknirit getur fengið skilvirkari, sem er að fara að vera nauðsynlegur fyrir 971 00:45:45,780 --> 00:45:50,500 pset sex, þegar við hlöðum inn, aftur, þeir 150.000 orð, þarf heldur að gera það 972 00:45:50,500 --> 00:45:55,650 duglegur, og helst, búa til forrit sem keyrir fyrir notendur okkar ekki í 973 00:45:55,650 --> 00:46:00,460 línuleg, ekki í n veldi, en í föstu tíma, í hugsjón. 974 00:46:00,460 --> 00:46:02,300 >> Við munum sjá þig á miðvikudag. 975 00:46:02,300 --> 00:46:07,240 >> Ræðumaður: Á næstu CS50, David gleymir stöð mál sitt. 976 00:46:07,240 --> 00:46:12,770 >> DAVID Malan: Og það er hvernig þú sendir textaskilaboð með C. Hvað - 977 00:46:12,770 --> 00:46:14,020 >> [ÝMSIR textaskilaboð TILKYNNING Hljómar] 978 00:46:14,020 --> 00:46:19,734