1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> DAVID Malan: haki wote, kuwakaribisha nyuma. 3 00:00:12,580 --> 00:00:13,290 Hii ni CS50. 4 00:00:13,290 --> 00:00:15,130 Huu ni mwanzo wa wiki saba. 5 00:00:15,130 --> 00:00:18,890 Hivyo imekuwa ni ya muda, hivyo nimeona tunatarajia kuchukua ziara ya kimbunga ambapo sisi 6 00:00:18,890 --> 00:00:20,760 kushoto mbali na ambapo sisi ni sasa kwenda. 7 00:00:20,760 --> 00:00:23,310 >> Hivyo jambo hili hapa ili kuwa imesababisha baadhi ya Angst saa ya kwanza. 8 00:00:23,310 --> 00:00:27,680 Lakini pengine, wewe ni mwanzo acclimate kwa nini hii inaashiria hapa - 9 00:00:27,680 --> 00:00:32,670 nyota anayewakilisha pointer, ambayo ni kile tu, katika suala layman zaidi? 10 00:00:32,670 --> 00:00:33,400 Hivyo ni anwani. 11 00:00:33,400 --> 00:00:35,490 >> Hivyo ni anwani ya kitu katika kumbukumbu. 12 00:00:35,490 --> 00:00:38,260 Na sisi kuanza peel nyuma tabaka michache ya wiki iliyopita, mambo kama 13 00:00:38,260 --> 00:00:41,800 GetString na wengine vile kazi muda wote huu wamekuwa kurudi 14 00:00:41,800 --> 00:00:46,010 anwani ya mambo katika kumbukumbu, kama anuani ya tabia ya kwanza katika 15 00:00:46,010 --> 00:00:46,990 baadhi ya mlolongo. 16 00:00:46,990 --> 00:00:50,360 >> Hivyo sisi pia ilianzisha Valgrind, ambayo itabidi kuanza kutumia kwa ajili ya tatizo hili 17 00:00:50,360 --> 00:00:53,380 kuweka, hasa kwa ajili ya pili tatizo kuweka pia. 18 00:00:53,380 --> 00:00:54,980 Na Valgrind anafanya nini kwa ajili yetu? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 Ni hundi kwa uvujaji kumbukumbu, na pia hundi kwa ajili ya matumizi mabaya ya kumbukumbu. 21 00:01:01,020 --> 00:01:05,890 >> Inaweza, pamoja na uwezekano baadhi, kuchunguza kama kanuni yako ni kwenda kwa kugusa kumbukumbu 22 00:01:05,890 --> 00:01:07,100 kwamba tu hawapaswi. 23 00:01:07,100 --> 00:01:10,410 Hivyo si lazima leak, lakini kama wewe kwenda zaidi ya mipaka ya baadhi ya 24 00:01:10,410 --> 00:01:14,730 safu, na wewe kweli kuendesha Valgrind na kushawishi kwamba tabia wakati 25 00:01:14,730 --> 00:01:17,870 Valgrind ni mbio katika mpango wako ni mbio ndani yake, utapata 26 00:01:17,870 --> 00:01:21,460 ujumbe kama hii - "batili kuandika ya ukubwa 4, "ambayo, kukumbuka michache ya 27 00:01:21,460 --> 00:01:25,880 wiki iliyopita na maana kwamba mimi alikuwa na ajali kama kwenye int moja mbali mno 28 00:01:25,880 --> 00:01:27,250 zaidi ya mipaka ya safu. 29 00:01:27,250 --> 00:01:30,790 Na hivyo ukubwa 4 maana hapa ukubwa ya kwamba int fulani. 30 00:01:30,790 --> 00:01:35,260 >> Hivyo kuchukua uhakika katika ukweli kwamba pato Valgrind ya, muundo wa hayo, 31 00:01:35,260 --> 00:01:36,170 ni mauaji. 32 00:01:36,170 --> 00:01:40,180 Ni kweli ni vigumu kuona kwa kupitia fujo kwa habari ya kuvutia. 33 00:01:40,180 --> 00:01:42,910 Hivyo kile ambacho tumefanya hapa ni Excerpt baadhi ya wanandoa wa zaidi 34 00:01:42,910 --> 00:01:43,850 kuvutia mistari. 35 00:01:43,850 --> 00:01:46,760 Lakini kutambua kwamba 80% ya wa Valgrind pato ni kwenda kuwa kidogo ya 36 00:01:46,760 --> 00:01:47,650 ovyo. 37 00:01:47,650 --> 00:01:52,820 >> Kuangalia tu kwa chati kama haya - batili kulia, batili kusoma, ka 40 38 00:01:52,820 --> 00:01:56,690 na baadhi ya idadi ya vitalu ni dhahiri waliopotea, maneno kama hayo. 39 00:01:56,690 --> 00:02:01,920 Na nini wewe utakuwa hopefully kuona ni baadhi aina ya kuwaeleza ya nini kazi 40 00:02:01,920 --> 00:02:03,340 kosa ni kweli in 41 00:02:03,340 --> 00:02:07,195 Katika kesi hii hapa, katika kile mstari wa kanuni yangu ilikuwa inaonekana makosa? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26 katika faili inayoitwa memory.c, ambayo ilikuwa mfano sisi walikuwa kucheza na 44 00:02:14,130 --> 00:02:14,890 kwa wakati. 45 00:02:14,890 --> 00:02:16,460 Hivyo pengine si katika malloc. 46 00:02:16,460 --> 00:02:18,630 Ilikuwa pengine katika kanuni yangu badala yake. 47 00:02:18,630 --> 00:02:20,910 Hivyo tutaweza kuona hili tena na tena kabla ya muda mrefu. 48 00:02:20,910 --> 00:02:24,080 >> Hivyo scanf, hii walifika katika michache ya aina hivi sasa. 49 00:02:24,080 --> 00:02:26,410 Tuliona sscanf ufupi. 50 00:02:26,410 --> 00:02:28,330 Ni kitu ya simu ya wewe dived katika katika yako 51 00:02:28,330 --> 00:02:29,535 maandalizi ya chemsha bongo. 52 00:02:29,535 --> 00:02:33,130 Na scanf ni kweli nini CS50 maktaba imekuwa kutumia chini ya 53 00:02:33,130 --> 00:02:36,560 Hood kwa muda ili baadhi kabisa kupata mawazo kutoka kwa mtumiaji. 54 00:02:36,560 --> 00:02:40,420 >> Kwa mfano, kama mimi hoja juu ya CS50 appliance hapa, napenda kufungua 55 00:02:40,420 --> 00:02:45,315 mfano leo kwamba wito scanf-0.c Na ni super rahisi. 56 00:02:45,315 --> 00:02:46,590 Ni tu mistari michache ya kificho. 57 00:02:46,590 --> 00:02:50,880 Lakini inaonyesha kweli jinsi GetInt imekuwa ikifanya kazi yote ya wakati huu. 58 00:02:50,880 --> 00:02:54,710 >> Katika mpango huu hapa, katika mstari wa 16 , Taarifa kwamba mimi kutangaza int. 59 00:02:54,710 --> 00:02:57,270 Hivyo hakuna kuyatumia, kitu kichawi huko, tu int. 60 00:02:57,270 --> 00:03:00,330 Kisha katika mstari 17, mimi haraka mtumiaji kwa ajili ya simu, tafadhali. 61 00:03:00,330 --> 00:03:02,930 Kisha katika 18 marehemu, mimi kutumia scanf hapa. 62 00:03:02,930 --> 00:03:06,910 Na mimi maalum, aina ya kama printf, kwamba mimi nina wanatarajia quote 63 00:03:06,910 --> 00:03:08,110 unquote asilimia i. 64 00:03:08,110 --> 00:03:10,920 >> Hivyo asilimia i, bila shaka, inaashiria int. 65 00:03:10,920 --> 00:03:14,580 Lakini taarifa ya nini pili hoja ya scanf ni. 66 00:03:14,580 --> 00:03:17,350 Jinsi gani unaweza kuelezea pili Hoja baada ya koma? 67 00:03:17,350 --> 00:03:19,450 Hiyo ni nini? 68 00:03:19,450 --> 00:03:20,670 >> Ni anuani ya x. 69 00:03:20,670 --> 00:03:25,490 Hivyo hii ni muhimu kwa sababu kwa kutoa scanf na anuani ya x, ni nini 70 00:03:25,490 --> 00:03:29,560 kwamba kuwawezesha kuwa kazi ya kufanya? 71 00:03:29,560 --> 00:03:33,010 Si tu kwenda huko, lakini pia kufanya nini? 72 00:03:33,010 --> 00:03:34,060 >> Kufanya mabadiliko hayo. 73 00:03:34,060 --> 00:03:38,080 Kwa sababu unaweza kwenda huko, ni aina ya kama ramani ya eneo katika kumbukumbu. 74 00:03:38,080 --> 00:03:41,900 Na hivyo muda mrefu kama wewe kutoa scanf, au kazi yoyote na ramani, vile kwamba 75 00:03:41,900 --> 00:03:45,840 kazi inaweza kwenda huko, na si tu kuangalia thamani, lakini unaweza pia 76 00:03:45,840 --> 00:03:49,670 mabadiliko ya kwamba thamani, ambayo ni muhimu kama kusudi katika maisha ya scanf ni 77 00:03:49,670 --> 00:03:53,060 Scan pembejeo kutoka kwa mtumiaji, hasa kutoka keyboard. 78 00:03:53,060 --> 00:03:57,830 Na f inaashiria mpangilio tu kama printf, f inaashiria mpangilio 79 00:03:57,830 --> 00:03:58,930 kamba kwamba unataka magazeti. 80 00:03:58,930 --> 00:04:04,430 >> Hivyo katika muda mfupi, hii 18 mstari tu anasema, kujaribu kusoma int kutoka user 81 00:04:04,430 --> 00:04:10,420 keyboard na kuhifadhi ndani ya x, saa chochote anuani x hutokea kuishi katika. 82 00:04:10,420 --> 00:04:14,860 Na kisha mwishowe, mstari 19 tu anasema, shukrani kwa ajili ya int, katika kesi hii. 83 00:04:14,860 --> 00:04:15,940 >> Hivyo basi mimi kwenda mbele na kufanya hii. 84 00:04:15,940 --> 00:04:18,570 Hivyo kufanya scanf 0. 85 00:04:18,570 --> 00:04:20,130 Hebu kwenda mbele na zoom in 86 00:04:20,130 --> 00:04:22,960 Nitakwenda na kukimbia hii na dots kufyeka scanf 0. 87 00:04:22,960 --> 00:04:24,020 Simu, tafadhali? 88 00:04:24,020 --> 00:04:24,720 50. 89 00:04:24,720 --> 00:04:25,730 Shukrani kwa ajili ya 50. 90 00:04:25,730 --> 00:04:27,270 Hivyo ni rahisi sana. 91 00:04:27,270 --> 00:04:28,160 >> Sasa ni nini si kufanya? 92 00:04:28,160 --> 00:04:29,940 Siyo kufanya rundo zima ya kuangalia makosa. 93 00:04:29,940 --> 00:04:33,000 Kwa mfano, kama mimi si kushirikiana, na mimi si aina katika idadi, lakini 94 00:04:33,000 --> 00:04:37,860 badala mimi kuandika kitu kama "hello," hiyo ni aina tu ya ajabu. 95 00:04:37,860 --> 00:04:41,130 Na hivyo moja ya mambo CS50 maktaba amekuwa akifanya kwa ajili yetu kwa baadhi ya 96 00:04:41,130 --> 00:04:43,440 muda ni kwamba reprompting na reprompting. 97 00:04:43,440 --> 00:04:49,320 >> Jaribu tena maneno kukumbuka ilikuwa katika cs50.c, na kwamba ni sababu ya kwamba GetInt katika 98 00:04:49,320 --> 00:04:51,670 Maktaba CS50 ni kweli nzima rundo la mistari ya muda mrefu, kwa sababu tuko 99 00:04:51,670 --> 00:04:53,190 kuangalia kwa mambo ya kijinga kama hii. 100 00:04:53,190 --> 00:04:55,730 Je, si kutoa mtumiaji yetu, kwa kweli, int? 101 00:04:55,730 --> 00:04:57,910 Je, yeye au kutupa kitu kama barua ya herufi? 102 00:04:57,910 --> 00:05:01,410 Kama ni hivyo, tunataka kuchunguza kwamba na yell katika wao. 103 00:05:01,410 --> 00:05:03,915 >> Lakini mambo kupata zaidi ya kuvutia katika mfano huu unaofuata. 104 00:05:03,915 --> 00:05:09,840 Kama mimi kwenda scanf-1.c, kile ni moja kitu kwamba ni kimsingi iliyopita katika 105 00:05:09,840 --> 00:05:11,135 mfano huu ijayo? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 Mimi nina kutumia * Char, bila shaka, badala ya int. 108 00:05:16,010 --> 00:05:19,210 >> Hivyo hii ni ya kuvutia, kwa sababu Char *, kukumbuka, ni kweli tu 109 00:05:19,210 --> 00:05:20,190 kitu kimoja kama kamba. 110 00:05:20,190 --> 00:05:23,840 Hivyo anahisi kama labda hii ni super rahisi ya utekelezaji wa GetString. 111 00:05:23,840 --> 00:05:26,010 Lakini nimepata peeled nyuma ya safu ya maktaba CS50, hivyo mimi nina 112 00:05:26,010 --> 00:05:27,550 wito huu * Char sasa. 113 00:05:27,550 --> 00:05:30,070 Basi hebu angalia ambapo, kama mahali popote, sisi kwenda vibaya. 114 00:05:30,070 --> 00:05:30,840 >> Mstari 17 - 115 00:05:30,840 --> 00:05:33,950 Mimi tena kusema, tafadhali nipe kitu, katika kesi hii, kamba. 116 00:05:33,950 --> 00:05:37,940 Na kisha katika mstari wa pili, mimi wito scanf, tena, kutoa ni kanuni ya muundo, 117 00:05:37,940 --> 00:05:39,310 lakini hii asilimia muda s. 118 00:05:39,310 --> 00:05:41,900 Na kisha wakati huu, mimi nina kutoa ni buffer. 119 00:05:41,900 --> 00:05:43,550 >> Sasa taarifa, mimi si kutumia Ampersand. 120 00:05:43,550 --> 00:05:47,120 Lakini kwa nini ni kwamba pengine OK hapa? 121 00:05:47,120 --> 00:05:49,760 Sababu kile ni buffer tayari? 122 00:05:49,760 --> 00:05:50,770 Ni tayari pointer. 123 00:05:50,770 --> 00:05:51,650 Ni tayari anwani. 124 00:05:51,650 --> 00:05:54,510 >> Na hebu neno hili "kuwachanganya," basi mimi tu kuiita s, kwa mfano, kwa 125 00:05:54,510 --> 00:05:55,050 unyenyekevu. 126 00:05:55,050 --> 00:05:58,250 Lakini nimepata kuitwa ni buffer kwa sababu katika ujumla, katika programu, kama una 127 00:05:58,250 --> 00:06:02,130 chunk ya kumbukumbu, ambayo string kweli tu ni, unaweza kuiita buffer. 128 00:06:02,130 --> 00:06:04,460 Ni mahali pa kuhifadhi habari. 129 00:06:04,460 --> 00:06:07,400 >> Sawa na mambo kama YouTube, wakati wao ni buffering, hivyo kusema, kwamba 130 00:06:07,400 --> 00:06:10,270 tu ina maana ni kushusha bits kutoka internet na kuzihifadhi katika 131 00:06:10,270 --> 00:06:14,160 mitaa safu, chunk mitaa ya kumbukumbu ili kwamba unaweza kuangalia ni baadaye bila 132 00:06:14,160 --> 00:06:16,830 ni kuruka au kunyongwa wewe wakati kucheza nyuma. 133 00:06:16,830 --> 00:06:20,930 >> Hivyo kuna tatizo hapa ingawa, kwa sababu mimi nina kuwaambia scanf, wanatarajia 134 00:06:20,930 --> 00:06:22,320 kamba kutoka mtumiaji. 135 00:06:22,320 --> 00:06:24,410 Hapa ni anwani ya chunk ya kumbukumbu. 136 00:06:24,410 --> 00:06:26,180 Kuweka kwamba kamba huko. 137 00:06:26,180 --> 00:06:31,230 Kwa nini ni kwamba amefungwa kutoa sisi shida, ingawa? 138 00:06:31,230 --> 00:06:33,490 >> Nini hiyo? 139 00:06:33,490 --> 00:06:35,510 Naruhusiwa kupata kuwa sehemu ya kumbukumbu? 140 00:06:35,510 --> 00:06:36,250 Unajua, mimi sijui. 141 00:06:36,250 --> 00:06:39,210 Kwa sababu ina buffer wamekuwa initialized na kitu chochote? 142 00:06:39,210 --> 00:06:39,820 Si kweli. 143 00:06:39,820 --> 00:06:43,090 Na hivyo ni nini tumekuwa wito thamani taka, ambayo 144 00:06:43,090 --> 00:06:44,040 si neno rasmi. 145 00:06:44,040 --> 00:06:49,200 Ni tu ina maana hatuna wazo nini bits ni ndani ya ka nne ambazo 146 00:06:49,200 --> 00:06:51,240 Mimi zilizotengwa kama kinga. 147 00:06:51,240 --> 00:06:52,450 >> Mimi si kuitwa malloc. 148 00:06:52,450 --> 00:06:53,940 Nimekuwa dhahiri si kuitwa GetString. 149 00:06:53,940 --> 00:06:56,380 Hivyo ambaye anajua nini ni kweli ndani ya buffer? 150 00:06:56,380 --> 00:07:00,550 Na bado kuwaambia scanf upofu, kwenda huko na kuweka chochote mtumiaji typed. 151 00:07:00,550 --> 00:07:04,460 >> Kwa hiyo kile ni uwezekano wa kusababisha katika kanuni zetu kama sisi kukimbia? 152 00:07:04,460 --> 00:07:05,700 Pengine segfault. 153 00:07:05,700 --> 00:07:07,970 Labda si, lakini pengine segfault. 154 00:07:07,970 --> 00:07:10,620 Na mimi kusema labda si kwa sababu wakati mwingine kufanya, wakati mwingine 155 00:07:10,620 --> 00:07:11,380 huwezi kupata segfault. 156 00:07:11,380 --> 00:07:14,280 Wakati mwingine wewe tu kupata bahati, lakini hata hivyo ni kwenda kuwa 157 00:07:14,280 --> 00:07:15,340 mdudu katika programu yetu. 158 00:07:15,340 --> 00:07:17,060 >> Hivyo basi mimi kwenda mbele na kukusanya hii. 159 00:07:17,060 --> 00:07:18,280 Mimi naenda kufanya hivyo umri wa shule ya njia. 160 00:07:18,280 --> 00:07:23,825 Hivyo Clang dash 0, scanf-1, scanf-1.c, kuingia. 161 00:07:23,825 --> 00:07:24,720 Lo, mzee sana shule. 162 00:07:24,720 --> 00:07:26,550 Hebu angalia. 163 00:07:26,550 --> 00:07:28,440 Wapi mimi kwenda? 164 00:07:28,440 --> 00:07:29,700 Oh, char * buffer. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 Oh, asante - 167 00:07:35,130 --> 00:07:36,930 Ila, OK - 168 00:07:36,930 --> 00:07:37,690 zamani sana shule. 169 00:07:37,690 --> 00:07:38,900 Haki ya wote, imekuwa ni muda. 170 00:07:38,900 --> 00:07:41,720 >> Hivyo nimekuwa tu baada ya kuokolewa faili maamuzi kwamba muda 171 00:07:41,720 --> 00:07:42,700 mabadiliko ya wakati iliyopita. 172 00:07:42,700 --> 00:07:46,090 Na sasa mimi ni compiled manually na Clang. 173 00:07:46,090 --> 00:07:49,500 Na sasa mimi nina kwenda mbele na kukimbia scanf-1, kuingia. 174 00:07:49,500 --> 00:07:50,290 Kamba tafadhali. 175 00:07:50,290 --> 00:07:51,600 Mimi itabidi aina katika "hello." 176 00:07:51,600 --> 00:07:54,070 >> Na sasa, hapa ambapo, kusema ukweli, printf unaweza ni kidogo annoying. 177 00:07:54,070 --> 00:07:56,020 Siyo kweli kwenda segfault katika kesi hii. 178 00:07:56,020 --> 00:07:59,860 Printf ni kidogo maalum kwa sababu hivyo ni super kawaida kutumika kwamba 179 00:07:59,860 --> 00:08:03,570 kimsingi printf ni kufanya sisi neema na kutambua, 180 00:08:03,570 --> 00:08:04,830 si kwamba pointer halali. 181 00:08:04,830 --> 00:08:09,080 Napenda kuchukua juu ya mwenyewe tu magazeti nje katika null mabano, hata 182 00:08:09,080 --> 00:08:13,340 ingawa ni lazima si kile sisi wenyewe ilivyotarajiwa. 183 00:08:13,340 --> 00:08:16,940 >> Hivyo hatuwezi kweli urahisi kushawishi segfault na hili, lakini ni wazi hii 184 00:08:16,940 --> 00:08:18,600 si tabia nilitaka. 185 00:08:18,600 --> 00:08:19,800 Basi nini ufumbuzi rahisi? 186 00:08:19,800 --> 00:08:25,650 Naam, katika scanf-2, napenda kupendekeza kwamba badala ya kweli tu kugawa 187 00:08:25,650 --> 00:08:30,100 * Char, basi mimi kuwa ni kidogo nadhifu kuhusu hii, na napenda kutenga buffer 188 00:08:30,100 --> 00:08:32,940 kama mlolongo wa chars 16. 189 00:08:32,940 --> 00:08:34,200 >> Hivyo naweza kufanya hivyo katika michache ya njia. 190 00:08:34,200 --> 00:08:35,610 Mimi naweza kabisa kutumia malloc. 191 00:08:35,610 --> 00:08:38,980 Lakini siwezi kwenda nyuma ya wiki mbili wakati Mimi tu inahitajika rundo zima la 192 00:08:38,980 --> 00:08:39,620 wahusika. 193 00:08:39,620 --> 00:08:40,860 Hiyo tu safu. 194 00:08:40,860 --> 00:08:44,870 Hivyo basi mimi badala redefine buffer kuwa safu ya wahusika 16. 195 00:08:44,870 --> 00:08:47,340 >> Na sasa, wakati mimi kupita buffer katika - 196 00:08:47,340 --> 00:08:49,940 na hii ni kitu hatukuwa majadiliano juu katika wiki mbili - 197 00:08:49,940 --> 00:08:53,730 lakini unaweza kutibu safu kama ingawa ni anwani. 198 00:08:53,730 --> 00:08:56,390 Kitaalam, kama tumeona, wao ni tofauti kidogo. 199 00:08:56,390 --> 00:09:01,290 Lakini scanf si akili kama wewe kupita jina la safu, kwa sababu kile 200 00:09:01,290 --> 00:09:05,030 Clang kufanya kwa sisi kimsingi ni kutibu jina la safu kwamba kama 201 00:09:05,030 --> 00:09:08,280 anuani ya chunk ya ka 16. 202 00:09:08,280 --> 00:09:09,550 >> Hivyo hii ni bora. 203 00:09:09,550 --> 00:09:12,110 Hii ina maana kwamba sasa naweza hopefully kufanya yafuatayo. 204 00:09:12,110 --> 00:09:16,800 Hebu zoom nje kwa muda na kufanya kufanya scanf-2, ulioandaliwa OK. 205 00:09:16,800 --> 00:09:19,390 Sasa basi mimi wala got kufyeka scanf-2. 206 00:09:19,390 --> 00:09:22,430 Kamba tafadhali. "Hello." Na ni walionekana kazi wakati huu. 207 00:09:22,430 --> 00:09:26,020 >> Lakini mtu anaweza kupendekeza mazingira ambayo wanaweza bado kazi? 208 00:09:26,020 --> 00:09:28,550 Yeah? 209 00:09:28,550 --> 00:09:30,640 Kitu zaidi ya wahusika 16. 210 00:09:30,640 --> 00:09:32,020 Na kwa kweli, tunaweza kuwa na kidogo sahihi zaidi. 211 00:09:32,020 --> 00:09:36,540 Kitu tena basi 15 wahusika, kwa sababu kwa kweli tunahitaji kukumbuka 212 00:09:36,540 --> 00:09:39,920 kwamba tunahitaji kuwa backslash sifuri inamuunga mwisho wa kamba, 213 00:09:39,920 --> 00:09:42,950 ambayo ni scanf kando mapenzi kawaida utunzaji wa kwetu. 214 00:09:42,950 --> 00:09:46,210 >> Hivyo basi mimi kufanya kitu kama - 215 00:09:46,210 --> 00:09:48,040 wakati mwingine tunaweza tu kuondoka ni kama hiyo. 216 00:09:48,040 --> 00:09:50,630 OK, hivyo tumekuwa sasa ikiwa segmentation wetu kosa. 217 00:09:50,630 --> 00:09:51,000 Kwa nini? 218 00:09:51,000 --> 00:09:54,940 Kwa sababu mimi niliandika kwa zaidi ya 15 wahusika, na hivyo tumekuwa kweli 219 00:09:54,940 --> 00:09:58,280 kuguswa kumbukumbu kwamba mimi kwa kweli unapaswa kuwa. 220 00:09:58,280 --> 00:10:00,180 >> Basi nini ufumbuzi kweli hapa? 221 00:10:00,180 --> 00:10:02,210 Naam, nini kama tunahitaji kamba tena? 222 00:10:02,210 --> 00:10:03,960 Naam, sisi kufanya hivyo labda 32 ka. 223 00:10:03,960 --> 00:10:05,160 Naam, ni nini kama si kwamba muda wa kutosha? 224 00:10:05,160 --> 00:10:06,040 Vipi kuhusu 64 ka? 225 00:10:06,040 --> 00:10:07,080 Nini kama si kwamba muda wa kutosha? 226 00:10:07,080 --> 00:10:09,640 Vipi kuhusu 128 au 200 ka? 227 00:10:09,640 --> 00:10:12,660 Kile kwa kweli ni ufumbuzi hapa katika kesi ujumla, kama hatujui katika 228 00:10:12,660 --> 00:10:14,460 kuendeleza kile user kinaendelea na aina? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> Ni tu aina ya maumivu kubwa katika punda, kuwa waaminifu, ambayo ni kwa nini 231 00:10:23,050 --> 00:10:29,050 CS50 maktaba ina mistari kadhaa chache ya kificho kwamba pamoja kutekeleza 232 00:10:29,050 --> 00:10:32,390 GetString kamba katika njia kwamba hatuna kujua mapema kile 233 00:10:32,390 --> 00:10:33,430 user ni kwenda aina. 234 00:10:33,430 --> 00:10:37,370 Hasa, kama wewe kuangalia nyuma katika cs50.c kutoka wiki mbili zilizopita, utaona 235 00:10:37,370 --> 00:10:40,480 GetString kwamba kweli haina si kutumia scanf kwa njia hii. 236 00:10:40,480 --> 00:10:43,720 Badala yake, anasoma moja tabia kwa wakati. 237 00:10:43,720 --> 00:10:46,010 >> Sababu moja nzuri kitu kuhusu kusoma tabia moja ni tunaweza 238 00:10:46,010 --> 00:10:48,490 kuhakikisha wenyewe daima angalau moja Char. 239 00:10:48,490 --> 00:10:51,740 Naweza tu kutangaza Char, na kisha kuchukua hatua hizi kweli mtoto tu 240 00:10:51,740 --> 00:10:54,380 kusoma tabia moja katika saa wakati kutoka keyboard. 241 00:10:54,380 --> 00:10:58,240 Na kisha, nini utaona GetString gani ni kila wakati anaendesha nje ya, 242 00:10:58,240 --> 00:11:02,280 kusema, ka 16 ya kumbukumbu, inatumia malloc, au binamu yake, kwa 243 00:11:02,280 --> 00:11:06,810 kutenga zaidi ya kumbukumbu, kuiga kale kumbukumbu katika kutambaa mpya, na kisha 244 00:11:06,810 --> 00:11:09,900 pamoja, kupata tabia moja kwa wakati, na wakati anaendesha nje ya kwamba 245 00:11:09,900 --> 00:11:13,370 chunk ya kumbukumbu, kumtupia mbali, grabs chunk kubwa ya kumbukumbu, nakala ya zamani 246 00:11:13,370 --> 00:11:14,750 katika mpya, na kurudia. 247 00:11:14,750 --> 00:11:18,480 Na ni kweli maumivu ya kweli kutekeleza kitu rahisi kama 248 00:11:18,480 --> 00:11:19,710 kupata pembejeo kutoka kwa mtumiaji. 249 00:11:19,710 --> 00:11:21,090 >> Hivyo unaweza kutumia scanf. 250 00:11:21,090 --> 00:11:22,430 Unaweza kutumia kazi nyingine kama hiyo. 251 00:11:22,430 --> 00:11:25,420 Na mengi ya vitabu vya kiada na online mifano kufanya, lakini wao ni wote 252 00:11:25,420 --> 00:11:27,210 mazingira magumu na matatizo kama hii. 253 00:11:27,210 --> 00:11:29,550 Na hatimaye, kupata segfault ni aina ya annoying. 254 00:11:29,550 --> 00:11:30,680 Ni si nzuri kwa ajili ya mtumiaji. 255 00:11:30,680 --> 00:11:33,560 >> Lakini katika hali mbaya zaidi, ni nini kimsingi ni kuweka yako 256 00:11:33,560 --> 00:11:37,160 kanuni katika hatari ya? 257 00:11:37,160 --> 00:11:39,250 Baadhi ya aina ya mashambulizi, uwezekano. 258 00:11:39,250 --> 00:11:41,680 Kuongelea mashambulizi moja vile - wingi stack. 259 00:11:41,680 --> 00:11:44,660 Lakini kwa ujumla, kama wewe ni kuruhusiwa kufurika buffer, kama tulivyofanya 260 00:11:44,660 --> 00:11:48,070 michache ya wiki iliyopita, na kuandika tu zaidi ya "hello" juu ya stack, unaweza 261 00:11:48,070 --> 00:11:52,330 unaweza kweli kuchukua, uwezekano, kompyuta, au angalau kupata saa data kwamba 262 00:11:52,330 --> 00:11:53,510 siyo wewe. 263 00:11:53,510 --> 00:11:55,970 >> Hivyo katika muda mfupi, hii ni kwa nini tuna magurudumu mafunzo hayo. 264 00:11:55,970 --> 00:11:59,090 Lakini sasa, sisi kuanza kuchukua mbali, kama mipango yetu hakuna haja tena, 265 00:11:59,090 --> 00:12:00,610 lazima, pembejeo kutoka kwa mtumiaji. 266 00:12:00,610 --> 00:12:03,960 Lakini katika kesi ya tatizo kuweka sita, mchango wako watakuja kutoka kubwa 267 00:12:03,960 --> 00:12:07,520 kamusi faili na baadhi ya 150 isiyo ya kawaida maneno elfu. 268 00:12:07,520 --> 00:12:10,330 >> Hivyo huwezi kuwa na wasiwasi kuhusu mtumiaji holela pembejeo. 269 00:12:10,330 --> 00:12:13,720 Sisi nitakupa baadhi ya mawazo kuhusu faili hilo. 270 00:12:13,720 --> 00:12:20,340 Maswali yoyote juu ya kuyatumia au scanf au mtumiaji pembejeo kwa ujumla? 271 00:12:20,340 --> 00:12:24,450 >> Haki ya wote, hivyo kuangalia haraka kisha saa moja trailing mada kutoka wiki mbili zilizopita. 272 00:12:24,450 --> 00:12:28,590 Na kwamba alikuwa wazo hili la struct. 273 00:12:28,590 --> 00:12:34,180 Si kwamba - wazo hili la Struct, ambayo ilikuwa nini? 274 00:12:34,180 --> 00:12:35,430 Nini struct kufanya kwa ajili yetu? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> Kufafanua - 277 00:12:39,860 --> 00:12:41,710 pole? 278 00:12:41,710 --> 00:12:42,820 Kufafanua aina ya kutofautiana. 279 00:12:42,820 --> 00:12:44,410 Hivyo aina ya. 280 00:12:44,410 --> 00:12:46,180 Sisi ni kweli kuchanganya mada mbili. 281 00:12:46,180 --> 00:12:49,510 Hivyo, pamoja na typedef, kukumbuka kwamba tunaweza kutangaza aina ya yetu wenyewe, kama 282 00:12:49,510 --> 00:12:51,500 kisawe, kama kamba kwa ajili ya * Char. 283 00:12:51,500 --> 00:12:56,200 Lakini kwa kutumia typedef na struct, tunaweza kujenga kweli wetu data mwenyewe miundo. 284 00:12:56,200 --> 00:12:59,600 >> Kwa mfano, kama mimi kurejea katika gedit hapa kwa muda tu, na mimi kwenda mbele 285 00:12:59,600 --> 00:13:08,230 na kufanya kitu kama, napenda kuokoa hii kama, hebu sema, structs.c 286 00:13:08,230 --> 00:13:10,840 muda, Mimi tu kwenda kwa kwenda mbele na ni pamoja na 287 00:13:10,840 --> 00:13:14,360 standardio.h, int kuu utupu. 288 00:13:14,360 --> 00:13:18,960 Na kisha katika hapa, tuseme kwamba mimi nataka kuandika mpango kwamba maduka 289 00:13:18,960 --> 00:13:21,840 nyingi wanafunzi kutoka nyingi nyumba, kwa mfano. 290 00:13:21,840 --> 00:13:24,430 Hivyo ni kama registrarial database ya aina fulani. 291 00:13:24,430 --> 00:13:29,550 >> Hivyo kama nahitaji jina mwanafunzi mmoja, mimi anaweza kufanya kitu kama jina Char *, 292 00:13:29,550 --> 00:13:31,570 na mimi itabidi kufanya kitu kama - 293 00:13:31,570 --> 00:13:34,410 kweli, hebu kutumia maktaba CS50 kwa muda tu kufanya hii 294 00:13:34,410 --> 00:13:38,380 kidogo rahisi, ili tuweze kukopa wale kadhaa ya mistari ya kificho. 295 00:13:38,380 --> 00:13:39,340 Na wacha tu kuitunza rahisi. 296 00:13:39,340 --> 00:13:42,610 Tutaweza kushika ni kamba, na sasa GetString. 297 00:13:42,610 --> 00:13:47,420 >> Hivyo mimi sasa wanadai kwamba nimepata kuhifadhiwa jina baadhi ya mwanafunzi, na nyumba ya 298 00:13:47,420 --> 00:13:50,240 baadhi ya mwanafunzi, kifupi kwa kutumia vigezo kama tulivyofanya na katika wiki moja. 299 00:13:50,240 --> 00:13:52,370 Lakini nadhani sasa wanataka kusaidia mbalimbali ya wanafunzi. 300 00:13:52,370 --> 00:13:58,460 Haki ya wote, hivyo silika yangu ni kufanya kamba NAME2, anapata GetString, kamba 301 00:13:58,460 --> 00:14:01,370 house2 anapata GetString. 302 00:14:01,370 --> 00:14:05,850 Na kisha mwanafunzi wetu wa tatu, hebu kufanya name3 GetString. 303 00:14:05,850 --> 00:14:09,170 >> Haki wote, hivyo hii ni hopefully fora wewe kama aina ya kijinga, 304 00:14:09,170 --> 00:14:11,580 kwa sababu mchakato huu ni kweli kamwe kwenda mwisho, na ni kwenda tu 305 00:14:11,580 --> 00:14:13,130 kufanya code yangu kuangalia mbaya na mbaya zaidi na zaidi. 306 00:14:13,130 --> 00:14:14,810 Lakini sisi kutatuliwa hilo pia katika wiki mbili. 307 00:14:14,810 --> 00:14:19,450 Ni ufumbuzi gani wetu kiasi safi wakati tulikuwa na vigezo mbalimbali ya 308 00:14:19,450 --> 00:14:23,580 huo data aina kuwa ni wote kuhusiana, lakini sisi hakutaka hii fujo mauaji 309 00:14:23,580 --> 00:14:26,870 ya vigezo vile vile jina lake? 310 00:14:26,870 --> 00:14:30,060 Nini sisi nini badala yake? 311 00:14:30,060 --> 00:14:31,260 >> Hivyo nadhani nikasikia maeneo machache. 312 00:14:31,260 --> 00:14:32,590 Tulikuwa safu. 313 00:14:32,590 --> 00:14:37,110 Kama unataka matukio mbalimbali ya kitu, kwa nini sio sisi safi hii kila 314 00:14:37,110 --> 00:14:39,540 juu na kusema tu, nipe safu kuitwa majina? 315 00:14:39,540 --> 00:14:41,640 >> Na kwa sasa, hebu ngumu kanuni 3. 316 00:14:41,640 --> 00:14:44,450 Na kisha nipe mwingine safu kuitwa nyumba, na napenda kwa 317 00:14:44,450 --> 00:14:45,800 sasa kwa bidii kanuni 3. 318 00:14:45,800 --> 00:14:49,220 Na nimekuwa massively alisafisha fujo kwamba mimi tu kuundwa. 319 00:14:49,220 --> 00:14:52,400 Sasa, nimekuwa bado ngumu coded 3, lakini hata 3 inaweza dynamically kuja kutoka 320 00:14:52,400 --> 00:14:54,350 mtumiaji, au argv, au kama. 321 00:14:54,350 --> 00:14:55,720 Hivyo hii ni tayari safi. 322 00:14:55,720 --> 00:15:00,100 >> Lakini nini annoying kuhusu hili ni kwamba sasa, hata kama jina ni namna fulani 323 00:15:00,100 --> 00:15:02,280 Kimsingi wanaohusishwa na mwanafunzi nyumba - 324 00:15:02,280 --> 00:15:04,720 ni mwanafunzi wa kwamba mimi kwa kweli wanataka kuwakilisha - 325 00:15:04,720 --> 00:15:08,080 Mimi sasa na arrays mbili ambazo ni sambamba kwa maana ya kwamba wao ni 326 00:15:08,080 --> 00:15:13,930 ukubwa huo, na majina ya mabano 0 labda ramani ya nyumba mabano 0, 327 00:15:13,930 --> 00:15:16,600 na majina mabano 1 ramani na nyumba mabano 1. 328 00:15:16,600 --> 00:15:19,280 Kwa maneno mengine, mwanafunzi kwamba maisha katika kwamba nyumba, na kwamba mwanafunzi mwingine 329 00:15:19,280 --> 00:15:20,530 maisha katika nyumba nyingine. 330 00:15:20,530 --> 00:15:23,720 Lakini hakika hii inaweza kuwa kufanyika hata zaidi cleanly. 331 00:15:23,720 --> 00:15:24,990 >> Vizuri, inaweza, kwa kweli. 332 00:15:24,990 --> 00:15:28,730 Na napenda kwenda mbele na kufungua hadi structs.h, na utasikia 333 00:15:28,730 --> 00:15:31,130 kuona wazo hili hapa. 334 00:15:31,130 --> 00:15:34,905 Taarifa kwamba nimekuwa kutumika typedef, kama wewe alluded wakati iliyopita kutangaza wetu 335 00:15:34,905 --> 00:15:35,570 mwenyewe data aina. 336 00:15:35,570 --> 00:15:39,660 Lakini nina pia kutumia Keyword nyingine kuitwa struct ambayo inatoa mimi mpya 337 00:15:39,660 --> 00:15:40,790 data muundo. 338 00:15:40,790 --> 00:15:43,980 >> Na muundo huu data mimi kudai ni kwenda kuwa na mambo mawili ndani ya 339 00:15:43,980 --> 00:15:47,060 yake - string kuitwa jina, na string kuitwa nyumba. 340 00:15:47,060 --> 00:15:49,820 Na jina Mimi naenda kuwapa muundo huu data ni kwenda 341 00:15:49,820 --> 00:15:51,005 kuitwa mwanafunzi. 342 00:15:51,005 --> 00:15:54,030 Mimi naweza kuiita kitu nataka, lakini hii semantically kufanya 343 00:15:54,030 --> 00:15:55,810 kuhisi na mimi katika mawazo yangu. 344 00:15:55,810 --> 00:15:59,160 >> Hivyo sasa, kama mimi kufungua toleo bora ya mpango Nilianza kuandika 345 00:15:59,160 --> 00:16:00,390 huko, basi mimi kitabu juu. 346 00:16:00,390 --> 00:16:03,190 Na kuna baadhi ya zaidi ya mistari ya kanuni hapa, lakini napenda kuzingatia kwa 347 00:16:03,190 --> 00:16:04,160 sasa juu ya mmoja. 348 00:16:04,160 --> 00:16:07,790 Nimekuwa alitangaza mara kwa mara wanafunzi kinachoitwa na ngumu coded 3 kwa sasa. 349 00:16:07,790 --> 00:16:11,110 Lakini sasa, taarifa jinsi safi kanuni yangu huanza kupata. 350 00:16:11,110 --> 00:16:15,030 >> Katika mstari wa 22, mimi kutangaza safu ya wanafunzi. 351 00:16:15,030 --> 00:16:18,760 Na taarifa kwamba mwanafunzi ni inaonekana sasa aina data. 352 00:16:18,760 --> 00:16:23,360 Kwa sababu saa ya juu ya faili hili, taarifa Nimekuwa pamoja na kwamba faili header 353 00:16:23,360 --> 00:16:24,820 kwamba mimi vunjwa juu tu wakati iliyopita. 354 00:16:24,820 --> 00:16:28,820 Na kwamba faili header kabisa tu alikuwa ufafanuzi huu wa mwanafunzi. 355 00:16:28,820 --> 00:16:32,470 >> Hivyo sasa, nimekuwa kuundwa data yangu mwenyewe desturi aina ya kwamba waandishi wa miaka C 356 00:16:32,470 --> 00:16:33,890 iliyopita hakufikiri wa mapema. 357 00:16:33,890 --> 00:16:34,570 Lakini hakuna tatizo. 358 00:16:34,570 --> 00:16:35,870 Siwezi kufanya hivyo mwenyewe. 359 00:16:35,870 --> 00:16:39,050 Hivyo hii ni safu kuitwa wanafunzi, kila mmoja wa wanachama ambao 360 00:16:39,050 --> 00:16:41,100 ni muundo wa mwanafunzi. 361 00:16:41,100 --> 00:16:44,270 Na mimi nataka tatu ya wale katika safu. 362 00:16:44,270 --> 00:16:46,030 >> Na sasa, je, wengine ya mpango huu kufanya? 363 00:16:46,030 --> 00:16:47,550 Mimi zinahitajika kitu kidogo holela. 364 00:16:47,550 --> 00:16:51,450 Hivyo kutokana na kuendelea online 24, Mimi iterate 0-3. 365 00:16:51,450 --> 00:16:54,000 Mimi kisha kuuliza mtumiaji kwa ajili ya mwanafunzi jina. 366 00:16:54,000 --> 00:16:56,110 Na kisha mimi kutumia GetString kama kabla. 367 00:16:56,110 --> 00:16:59,410 Basi mimi kuuliza kwa ajili ya nyumba ya mwanafunzi, na mimi kutumia GetString kama kabla. 368 00:16:59,410 --> 00:17:01,780 >> Lakini ilani - kidogo mpya kipande cha syntax - 369 00:17:01,780 --> 00:17:07,010 Mimi bado unaweza index kwa mwanafunzi i-th, lakini jinsi gani mimi kupata saa data maalum 370 00:17:07,010 --> 00:17:08,354 shamba ndani ya struct? 371 00:17:08,354 --> 00:17:11,770 Vizuri, nini inaonekana mpya kipande cha syntax? 372 00:17:11,770 --> 00:17:13,339 Ni tu operator dot. 373 00:17:13,339 --> 00:17:14,510 >> Tumekuwa si kweli kuona hii kabla. 374 00:17:14,510 --> 00:17:17,819 Ve kuonekana katika pset tano kama wameweza dived katika tayari kwa files bitmap. 375 00:17:17,819 --> 00:17:22,372 Lakini dot tu ina maana ndani ya hii struct au mashamba mbalimbali, kutoa dot 376 00:17:22,372 --> 00:17:24,510 jina, au nipe dot nyumba. 377 00:17:24,510 --> 00:17:28,690 Hiyo ina maana kwenda ndani ya struct na kupata mashamba hayo hasa. 378 00:17:28,690 --> 00:17:30,200 >> Nini wengine wa mpango hii nini? 379 00:17:30,200 --> 00:17:31,190 Siyo sexy kwamba wote. 380 00:17:31,190 --> 00:17:34,640 Taarifa kwamba mimi iterate 0-3 tena, na mimi tu kujenga Kiingereza 381 00:17:34,640 --> 00:17:40,500 maneno kama hivyo na hivyo ni katika vile na nyumba hiyo, kupita katika jina dot kutoka 382 00:17:40,500 --> 00:17:43,320 mwanafunzi i-th na wao nyumba pia. 383 00:17:43,320 --> 00:17:47,560 >> Na kisha mwisho, sasa tutaweza kuanza kupata anal kuhusu hili, sasa kwamba sisi ni 384 00:17:47,560 --> 00:17:49,580 ukoo na nini malloc na kazi nyingine wamekuwa 385 00:17:49,580 --> 00:17:50,570 kufanya wakati huu wote. 386 00:17:50,570 --> 00:17:54,220 Kwa nini nina huru wawili jina na nyumba, hata mimi 387 00:17:54,220 --> 00:17:56,960 hakuwa na wito malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString alivyofanya. 389 00:17:58,020 --> 00:18:00,930 Na kwamba ilikuwa chafu kidogo siri kwa wiki kadhaa, lakini ana GetString 390 00:18:00,930 --> 00:18:03,530 imekuwa kinachovuja kumbukumbu yote juu ya mahali yote ya muhula wa hivi sasa. 391 00:18:03,530 --> 00:18:05,990 Na valgrand mapenzi hatimaye yatangaza hii kwetu. 392 00:18:05,990 --> 00:18:10,730 >> Lakini si kubwa mpango huo, kwa sababu ninajua kwamba naweza tu huru jina 393 00:18:10,730 --> 00:18:15,750 na nyumba, ingawa kitaalam, kwa kuwa super, super salama, nitakuwa 394 00:18:15,750 --> 00:18:17,890 kufanya baadhi ya makosa ya kuangalia hapa. 395 00:18:17,890 --> 00:18:19,040 Je, ni silika yako nakuambia? 396 00:18:19,040 --> 00:18:22,480 Nini anatakiwa kuwa na kuangalia kwa kabla mimi huru ni nini 397 00:18:22,480 --> 00:18:25,470 kamba, aka ambayo * Char? 398 00:18:25,470 --> 00:18:33,460 >> Mimi lazima kweli kuwa na kuangalia kama wanafunzi bracket i dot jina haina 399 00:18:33,460 --> 00:18:34,840 sawa null. 400 00:18:34,840 --> 00:18:40,400 Basi utakuwa ni sawa na kwenda mbele na bure kwamba pointer, na moja au nyingine 401 00:18:40,400 --> 00:18:41,160 moja pia. 402 00:18:41,160 --> 00:18:46,860 Kama wanafunzi mabano i dot nyumba si sawa na null, hii sasa kulinda 403 00:18:46,860 --> 00:18:52,520 dhidi ya kesi ya kona ambayo GetString anarudi kitu kama null. 404 00:18:52,520 --> 00:18:57,310 Na tuliona wakati iliyopita, printf mapenzi kulinda sisi hapa juu na kusema tu 405 00:18:57,310 --> 00:18:58,990 null, ambayo ni kwenda kuangalia weird. 406 00:18:58,990 --> 00:19:02,340 Lakini angalau itakuwa si segfault, kama tulivyoona. 407 00:19:02,340 --> 00:19:05,990 >> Vizuri, basi mimi kufanya jambo moja nyingine hapa. structs-0 ni aina ya mpango wa kijinga 408 00:19:05,990 --> 00:19:09,700 kwa sababu mimi kuingia hii data zote, na kisha ni kupotea mara moja mpango wa mwisho. 409 00:19:09,700 --> 00:19:10,940 Lakini napenda kwenda mbele na kufanya hili. 410 00:19:10,940 --> 00:19:12,830 Napenda kufanya terminal dirisha kubwa kidogo. 411 00:19:12,830 --> 00:19:17,000 Napenda kufanya structs-1, ambayo ni toleo jipya la hii. 412 00:19:17,000 --> 00:19:18,520 >> Mimi itabidi kuvuta kidogo. 413 00:19:18,520 --> 00:19:21,620 Na sasa basi mimi kukimbia dot kufyeka structs-1. 414 00:19:21,620 --> 00:19:22,590 Jina ya mwanafunzi - 415 00:19:22,590 --> 00:19:31,500 Daudi Mather, hebu kufanya Rob Kirkland, hebu kufanya Lauren LEVERETT. 416 00:19:31,500 --> 00:19:33,650 Nini kuvutia sasa ni taarifa - 417 00:19:33,650 --> 00:19:35,540 na mimi tu najua hili kwa sababu Niliandika mpango - 418 00:19:35,540 --> 00:19:38,930 kuna faili sasa sasa yangu saraka ya kuitwa students.csv. 419 00:19:38,930 --> 00:19:40,420 Baadhi ya unaweza kuwa na kuonekana hizi katika ulimwengu wa kweli. 420 00:19:40,420 --> 00:19:42,980 >> Nini faili CSV? 421 00:19:42,980 --> 00:19:44,170 Koma maadili. 422 00:19:44,170 --> 00:19:46,670 Ni aina ya kama maskini wa mtu toleo la faili Excel. 423 00:19:46,670 --> 00:19:50,580 Ni meza ya safu na nguzo kwamba unaweza kufungua katika mpango kama Excel, 424 00:19:50,580 --> 00:19:51,800 Hesabu au juu ya Mac. 425 00:19:51,800 --> 00:19:55,180 >> Na kama mimi kufungua faili hii hapa gedit, ilani - na idadi si huko. 426 00:19:55,180 --> 00:19:57,360 Hiyo tu gedit kuwaambia mimi line namba. 427 00:19:57,360 --> 00:19:59,740 Taarifa juu ya line ya kwanza ya hii faili ni Daudi na Mather. 428 00:19:59,740 --> 00:20:01,450 mstari wa pili ni Rob comma Kirkland. 429 00:20:01,450 --> 00:20:04,170 Na mstari wa tatu ni Lauren comma LEVERETT. 430 00:20:04,170 --> 00:20:05,480 >> Hivyo kile mimi umba? 431 00:20:05,480 --> 00:20:09,580 Nimepata sasa imeandikwa mpango C kwamba ufanisi inaweza kuzalisha Spreadsheets 432 00:20:09,580 --> 00:20:11,840 kwamba anaweza kufunguliwa katika mpango kama Excel. 433 00:20:11,840 --> 00:20:15,520 Si kulazimisha kwamba wote kuweka data, lakini kama una chunks kubwa ya 434 00:20:15,520 --> 00:20:18,440 data kwamba kweli wanataka kuendesha na kufanya grafu ya na 435 00:20:18,440 --> 00:20:21,260 kama, hii labda ni moja njia ya kujenga data hizo. 436 00:20:21,260 --> 00:20:25,370 Aidha, ni kweli CSVs super kawaida tu kwa ajili ya kuhifadhi data rahisi - 437 00:20:25,370 --> 00:20:28,940 Yahoo Fedha, kwa mfano, kama kupata hisa quotes kupitia yao kinachojulikana 438 00:20:28,940 --> 00:20:33,180 API, huduma ya bure ambayo inakuwezesha kupata sasa up-to-ya-tarehe hisa 439 00:20:33,180 --> 00:20:35,650 quotes kwa ajili ya makampuni, wao kutoa data nyuma katika 440 00:20:35,650 --> 00:20:37,800 super rahisi CSV format. 441 00:20:37,800 --> 00:20:39,380 >> Hivyo ni jinsi gani sisi kufanya hivyo? 442 00:20:39,380 --> 00:20:42,530 Vizuri taarifa, zaidi ya hii ya mpango karibu sawa. 443 00:20:42,530 --> 00:20:46,870 Lakini taarifa chini hapa, badala ya magazeti wanafunzi nje, juu ya mstari 35 444 00:20:46,870 --> 00:20:51,040 kuendelea, mimi kudai kwamba mimi nina kuokoa wanafunzi kwa disk, hivyo kuokoa faili. 445 00:20:51,040 --> 00:20:53,630 >> Hivyo taarifa mimi nina kutangaza JALADA * - 446 00:20:53,630 --> 00:20:57,260 sasa, hii ni aina ya makosa katika C. Kwa sababu yoyote, JALADA ni kila kofia, 447 00:20:57,260 --> 00:21:00,690 ambayo si kama aina nyingine ya data katika C. Lakini hii ni kujengwa katika 448 00:21:00,690 --> 00:21:02,320 data aina, JALADA *. 449 00:21:02,320 --> 00:21:05,900 Na mimi nina kutangaza pointer faili, ni jinsi gani unaweza kufikiri ya kwamba. 450 00:21:05,900 --> 00:21:08,070 >> fopen maana faili wazi. 451 00:21:08,070 --> 00:21:09,470 Nini faili unataka wazi? 452 00:21:09,470 --> 00:21:12,620 Nataka kufungua faili kwamba mimi kiholela kuwaita students.csv. 453 00:21:12,620 --> 00:21:14,480 Mimi naweza kuita kwamba kitu nataka. 454 00:21:14,480 --> 00:21:15,200 >> Na kisha kuchukua nadhani. 455 00:21:15,200 --> 00:21:18,960 Ni nini hoja ya pili kwa fopen pengine maana? 456 00:21:18,960 --> 00:21:21,480 Haki, w kwa kuandika, inaweza kuwa r kwa ajili ya kusoma. 457 00:21:21,480 --> 00:21:24,120 Kuna kwa append kama wewe unataka kuongeza mistari na si 458 00:21:24,120 --> 00:21:25,200 overwrite jambo zima. 459 00:21:25,200 --> 00:21:28,005 >> Lakini mimi tu wanataka kujenga faili hii mara moja, hivyo mimi itabidi kutumia quote unquote w. 460 00:21:28,005 --> 00:21:31,880 Na najua kwamba tu kutoka baada ya kusoma nyaraka, au ukurasa mtu. 461 00:21:31,880 --> 00:21:35,100 Kama faili si null - kwa maneno mengine, kama hakuna kitu potoka huko - 462 00:21:35,100 --> 00:21:37,820 basi mimi iterate juu ya wanafunzi 0-3. 463 00:21:37,820 --> 00:21:40,410 >> Na sasa taarifa kuna kitu milele hivyo tofauti kidogo 464 00:21:40,410 --> 00:21:42,110 kuhusu line 41 hapa. 465 00:21:42,110 --> 00:21:42,960 Siyo printf. 466 00:21:42,960 --> 00:21:46,530 Ni kwa ajili ya faili fprintf printf. 467 00:21:46,530 --> 00:21:47,790 Hivyo ni kwenda kuandika na faili. 468 00:21:47,790 --> 00:21:48,860 Ambayo faili? 469 00:21:48,860 --> 00:21:53,630 mtu ambaye pointer bayana kama hoja ya kwanza. 470 00:21:53,630 --> 00:21:55,940 >> Kisha sisi bayana kamba format. 471 00:21:55,940 --> 00:21:59,660 Kisha sisi bayana nini kamba tunataka kuziba katika s kwanza kwa asilimia, na 472 00:21:59,660 --> 00:22:04,320 kisha mwingine kutofautiana au pili asilimia s. 473 00:22:04,320 --> 00:22:06,760 Kisha sisi karibu faili na fclose. 474 00:22:06,760 --> 00:22:09,380 Kuliko mimi huru kumbukumbu kama kabla, ingawa Mimi lazima kurudi nyuma katika na kuongeza 475 00:22:09,380 --> 00:22:10,540 baadhi ya hundi kwa null. 476 00:22:10,540 --> 00:22:12,090 >> Na hiyo ni yake. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, fclose anitiaye uwezo wa kujenga files maandishi. 478 00:22:16,960 --> 00:22:19,640 Sasa, utaona katika tatizo kuweka tano, ambayo inahusisha picha, wewe utakuwa kutumia 479 00:22:19,640 --> 00:22:20,990 binary files badala yake. 480 00:22:20,990 --> 00:22:24,200 Lakini kimsingi, wazo ni sawa, hata ingawa kazi utasikia 481 00:22:24,200 --> 00:22:28,710 kuona ni tofauti kidogo. 482 00:22:28,710 --> 00:22:32,580 >> Hivyo kimbunga ziara, lakini utapata wote pia familiar na faili I/O-- 483 00:22:32,580 --> 00:22:34,960 pembejeo na pato - na pset tano. 484 00:22:34,960 --> 00:22:38,607 Na maswali yoyote kuhusu awali misingi hapa? 485 00:22:38,607 --> 00:22:39,857 Yeah? 486 00:22:39,857 --> 00:22:41,880 487 00:22:41,880 --> 00:22:43,710 >> Nini kama wewe kujaribu bure thamani null? 488 00:22:43,710 --> 00:22:48,880 Naamini, isipokuwa bure imenipatia kidogo zaidi user-kirafiki, unaweza 489 00:22:48,880 --> 00:22:49,890 uwezekano segfault. 490 00:22:49,890 --> 00:22:54,160 Kupita null ni mbaya kwa sababu mimi si kuamini bure bothers kuangalia kwa ajili yenu, 491 00:22:54,160 --> 00:22:57,330 sababu ingekuwa uwezekano kuwa taka ya muda kwa ajili yake kufanya yenyewe kwa ajili ya 492 00:22:57,330 --> 00:22:59,022 kila mtu katika ulimwengu. 493 00:22:59,022 --> 00:23:00,590 Nzuri swali, ingawa. 494 00:23:00,590 --> 00:23:04,300 >> Haki ya wote, hivyo aina hii ya anapata sisi mada ya kuvutia. 495 00:23:04,300 --> 00:23:07,010 mandhari ya kuweka tatizo tano ni forensics. 496 00:23:07,010 --> 00:23:08,420 Angalau hiyo ni sehemu ya kuweka tatizo. 497 00:23:08,420 --> 00:23:12,030 Forensics kwa ujumla inahusu ahueni wa habari kwamba wanaweza au 498 00:23:12,030 --> 00:23:14,110 inaweza kuwa imefutwa makusudi. 499 00:23:14,110 --> 00:23:18,680 Na hivyo mimi mawazo ningependa kukupa haraka ladha ya kile ni kweli kinachoendelea kila 500 00:23:18,680 --> 00:23:21,230 wakati huu chini ya kofia ya kompyuta yako. 501 00:23:21,230 --> 00:23:23,960 >> Kwa mfano, kama una yako ndani ya mbali au desktop yako kompyuta 502 00:23:23,960 --> 00:23:28,040 gari ngumu, ni aidha mitambo kifaa kwamba kweli spins - 503 00:23:28,040 --> 00:23:31,650 kuna mviringo mambo kuitwa platters kwamba kuangalia kabisa kama kile 504 00:23:31,650 --> 00:23:34,540 tu alikuwa juu ya screen hapa, ingawa hii ni inazidi umri wa shule. 505 00:23:34,540 --> 00:23:37,370 Hii ni mitatu na nusu-inch gari ngumu. 506 00:23:37,370 --> 00:23:40,070 Na tatu na nusu inchi inahusu ya na wa kitu wakati wa kufunga ni 507 00:23:40,070 --> 00:23:40,890 katika kompyuta. 508 00:23:40,890 --> 00:23:44,890 >> Wengi wenu guys katika Laptops yako sasa kuwa anatoa imara-hali, au SSDs, 509 00:23:44,890 --> 00:23:46,260 ambayo hakuna kusonga sehemu. 510 00:23:46,260 --> 00:23:49,170 Wao ni zaidi kama RAM na chini kama haya vifaa mitambo. 511 00:23:49,170 --> 00:23:51,450 Lakini mawazo bado ni sawa, hakika kama wao kuhusiana 512 00:23:51,450 --> 00:23:52,790 kwa tatizo kuweka tano. 513 00:23:52,790 --> 00:23:57,400 >> Na kama unadhani kuhusu sasa gari ngumu inawakilisha kuwa mduara, ambayo 514 00:23:57,400 --> 00:23:58,930 Mimi itabidi kuteka kama hii hapa. 515 00:23:58,930 --> 00:24:02,290 Wakati kujenga faili kwenye kompyuta yako, kama ni SSD, au katika 516 00:24:02,290 --> 00:24:06,610 kesi hii, wakubwa shule ngumu kuendesha gari, faili ambayo inajumuisha bits nyingi. 517 00:24:06,610 --> 00:24:10,510 Hebu kusema kwamba ni hii 0 na 1, kundi zima la sekunde 0 na 1s. 518 00:24:10,510 --> 00:24:11,660 Hivyo hii ni ngumu wangu wote gari. 519 00:24:11,660 --> 00:24:13,225 Hii ni inaonekana faili pretty kubwa. 520 00:24:13,225 --> 00:24:18,080 Na ni kwa kutumia hadi sekunde 0 na 1s saa kwamba sehemu ya sahani ya kimwili. 521 00:24:18,080 --> 00:24:19,750 >> Naam, kile ni kwamba sehemu ya kimwili? 522 00:24:19,750 --> 00:24:25,310 Naam, zinageuka kuwa kwenye gari ngumu, angalau ya aina hii, kuna 523 00:24:25,310 --> 00:24:27,340 haya kidogo kidogo magnetic chembe. 524 00:24:27,340 --> 00:24:32,630 Na wao kimsingi kuwa na kaskazini na kusini fito kwa wao, ili kwamba kama wewe 525 00:24:32,630 --> 00:24:35,710 kurejea moja ya chembe wale magnetic njia hii, unaweza kusema kwamba ni 526 00:24:35,710 --> 00:24:36,720 anayewakilisha 1. 527 00:24:36,720 --> 00:24:39,340 Na kama ni kichwa chini kusini kaskazini, unaweza kusema kwamba ni 528 00:24:39,340 --> 00:24:40,390 anayewakilisha 0. 529 00:24:40,390 --> 00:24:43,660 >> Hivyo katika ulimwengu halisi ya kimwili, hiyo ni jinsi gani unaweza kuwakilisha kitu katika 530 00:24:43,660 --> 00:24:45,670 binary hali ya 0 na 1. 531 00:24:45,670 --> 00:24:46,720 Hivyo kwamba ni faili wote ni. 532 00:24:46,720 --> 00:24:49,300 Kuna rundo zima la magnetic chembe kuwa ni yao kwa njia hii au 533 00:24:49,300 --> 00:24:51,920 njia hii, kujenga chati ya sekunde 0 na 1s. 534 00:24:51,920 --> 00:24:56,760 >> Lakini zinageuka wakati wewe ila faili, baadhi ya habari ni kuokolewa tofauti. 535 00:24:56,760 --> 00:25:00,000 Hivyo hii ni meza kidogo, directory, hivyo kusema. 536 00:25:00,000 --> 00:25:05,810 Na Mimi nitakuita jina hili safu, na Mimi nitakuita hii eneo safu. 537 00:25:05,810 --> 00:25:08,850 >> Na mimi nina kwenda kusema, tuseme hii ni resume yangu. 538 00:25:08,850 --> 00:25:14,050 Resume.doc yangu ni kuhifadhiwa katika mahali, hebu sema 123. 539 00:25:14,050 --> 00:25:15,390 Mimi daima kwenda kwa idadi hiyo. 540 00:25:15,390 --> 00:25:18,810 Lakini inatosha kusema kwamba kama tu katika RAM, unaweza kuchukua gari ngumu 541 00:25:18,810 --> 00:25:22,350 hiyo ni gigabytes gigabyte au 200 au terabyte, na unaweza 542 00:25:22,350 --> 00:25:23,750 idadi yote ya ka. 543 00:25:23,750 --> 00:25:26,480 Unaweza kuzihesabu chunks wote wa bits 8. 544 00:25:26,480 --> 00:25:29,030 >> Hivyo tutaweza kusema kwamba hii ni eneo 123. 545 00:25:29,030 --> 00:25:32,070 Hivyo hii ndani ya saraka ya uendeshaji yangu mfumo anakumbuka kwamba yangu 546 00:25:32,070 --> 00:25:34,250 resume ni katika eneo 123. 547 00:25:34,250 --> 00:25:36,850 Lakini anapata kuvutia wakati kufuta faili. 548 00:25:36,850 --> 00:25:37,820 >> Hivyo kwa mfano - 549 00:25:37,820 --> 00:25:40,790 na nashiriki, wengi wa dunia ina hawakupata kwenye hii - kile kinachotokea wakati 550 00:25:40,790 --> 00:25:45,040 Drag faili takataka yako Mac OS au Windows yako Recycle Bin? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 Nini madhumuni ya kufanya hivyo? 553 00:25:50,510 --> 00:25:53,860 Ni wazi kujikwamua faili, lakini nini kitendo cha akawatoa na 554 00:25:53,860 --> 00:25:57,550 kuacha katika takataka yako au yako Recycle Bin kufanya kwenye kompyuta? 555 00:25:57,550 --> 00:25:59,230 >> Kabisa kitu, kwa kweli. 556 00:25:59,230 --> 00:26:00,320 Ni kama tu folder. 557 00:26:00,320 --> 00:26:01,800 Ni folder maalum, kuwa na uhakika. 558 00:26:01,800 --> 00:26:04,460 Lakini je, ni kweli kufuta faili? 559 00:26:04,460 --> 00:26:06,780 >> Naam, hapana, kwa sababu baadhi yenu pengine wamekuwa kama, oh damn, wewe si 560 00:26:06,780 --> 00:26:07,420 maana kwa kufanya hivyo. 561 00:26:07,420 --> 00:26:09,130 Hivyo bonyeza mara mbili Takataka au Recycle Bin. 562 00:26:09,130 --> 00:26:11,630 Umefanya poked karibu na umefanya zinalipwa faili tu na akawatoa ni 563 00:26:11,630 --> 00:26:12,110 nje ya hapo. 564 00:26:12,110 --> 00:26:14,420 Hivyo ni wazi, siyo lazima kufuta yake. 565 00:26:14,420 --> 00:26:15,990 >> OK, wewe ni nadhifu zaidi ya hiyo. 566 00:26:15,990 --> 00:26:18,860 Unajua kwamba tu akawatoa ndani Takataka au Recycle Bin haina maana 567 00:26:18,860 --> 00:26:19,930 wewe ni kuondoa takataka. 568 00:26:19,930 --> 00:26:24,110 Hivyo kwenda hadi orodha, na kusema Tupu takataka au Tupu Recycle Bin. 569 00:26:24,110 --> 00:26:25,360 Kisha nini kitatokea? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> Yeah, hivyo ni ilifutwa zaidi ya hivyo. 572 00:26:32,530 --> 00:26:37,660 Lakini yote ambayo hufanyika ni hii. 573 00:26:37,660 --> 00:26:45,350 kompyuta anasahau ambapo resume.doc mara. 574 00:26:45,350 --> 00:26:47,400 >> Lakini nini haujabadilika inaonekana kwenye picha? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 bits, sekunde 0 na 1s kwamba mimi kudai ni kwenye tovuti ya nyanja baadhi ya kimwili ya 577 00:26:55,570 --> 00:26:56,280 vifaa. 578 00:26:56,280 --> 00:26:57,110 Bado wapo. 579 00:26:57,110 --> 00:26:58,930 Ni tu kompyuta ina wamesahau nini hao. 580 00:26:58,930 --> 00:27:03,160 >> Hivyo ni kimsingi huru faili bits ili waweze kutumika tena. 581 00:27:03,160 --> 00:27:06,940 Lakini si mpaka kujenga files zaidi, na zaidi files, na zaidi files mapenzi 582 00:27:06,940 --> 00:27:12,150 probabilistically, wale sekunde 0 na 1s, chembe wale magnetic, kupata kutumika tena, 583 00:27:12,150 --> 00:27:16,220 kichwa au upande wa kulia juu, kwa nyingine files, sekunde 0 na 1s. 584 00:27:16,220 --> 00:27:17,980 >> Hivyo kuwa na dirisha hili la wakati. 585 00:27:17,980 --> 00:27:19,860 Na si wa kutabirika urefu, kwa kweli. 586 00:27:19,860 --> 00:27:22,240 Inategemea na ukubwa wa bidii yako gari na jinsi wengi files una na 587 00:27:22,240 --> 00:27:23,490 jinsi ya haraka ya kufanya ndio mpya. 588 00:27:23,490 --> 00:27:27,050 Lakini kuna hii dirisha la muda wakati ambayo faili kwamba ni bado kikamilifu 589 00:27:27,050 --> 00:27:27,770 recoverable. 590 00:27:27,770 --> 00:27:31,050 >> Hivyo kama wewe milele kutumia programu kama McAfee au Norton kujaribu kuokoa 591 00:27:31,050 --> 00:27:35,680 data, kila unachokifanya ni kujaribu kupona saraka hii kinachojulikana kwa 592 00:27:35,680 --> 00:27:37,340 kufikiri ambapo faili yako mara. 593 00:27:37,340 --> 00:27:40,605 Na wakati mwingine Norton na kusema, faili ni 93% recoverable. 594 00:27:40,605 --> 00:27:42,020 Naam, hiyo ina maana gani? 595 00:27:42,020 --> 00:27:45,690 Kwamba tu ina maana kwamba baadhi ya faili nyingine bahati kuishia kutumia, kusema, 596 00:27:45,690 --> 00:27:48,920 wale bits nje ya faili yako ya awali. 597 00:27:48,920 --> 00:27:51,950 >> Hivyo kile ni kweli kushiriki katika kurejesha data? 598 00:27:51,950 --> 00:27:55,720 Naam, kama huna kitu kama Norton kabla ya imewekwa kwenye kompyuta yako, 599 00:27:55,720 --> 00:27:59,510 bora unaweza wakati mwingine kufanya ni kuangalia saa nzima gari ngumu kuangalia kwa 600 00:27:59,510 --> 00:28:00,510 chati ya bits. 601 00:28:00,510 --> 00:28:05,350 Na moja ya mandhari ya kuweka tatizo tano ni kwamba utakuwa kutafuta 602 00:28:05,350 --> 00:28:09,570 sawa ya gari ngumu, kuchunguza mauaji mfano wa kadi Compact flash kutoka 603 00:28:09,570 --> 00:28:13,660 kamera ya digital, kwa ajili ya kutafuta sekunde 0 na 1s kwamba kwa kawaida, na high 604 00:28:13,660 --> 00:28:16,720 uwezekano, kuwakilisha kuanza wa picha JPEG. 605 00:28:16,720 --> 00:28:21,120 >> Na wewe guys anaweza kupona picha hizo na kuchukua, kama mimi kuona muundo huu wa 606 00:28:21,120 --> 00:28:24,380 bits juu ya picha kuchunguza mauaji, na juu ya uwezekano, kwamba alama 607 00:28:24,380 --> 00:28:25,650 mwanzo wa JPEG. 608 00:28:25,650 --> 00:28:29,520 Na kama mimi kuona mfano huo tena, kwamba pengine ni mwanzo wa 609 00:28:29,520 --> 00:28:32,440 mwingine JPEG, na mwingine JPEG, na mwingine JPEG. 610 00:28:32,440 --> 00:28:34,970 Na hii ni kawaida jinsi data ahueni itakuwa kazi. 611 00:28:34,970 --> 00:28:37,870 Nini ni nzuri kuhusu JPEGs ni hata ingawa aina ya faili yenyewe ni kiasi fulani 612 00:28:37,870 --> 00:28:44,400 tata, mwanzo wa kila vile faili ni kweli haki zinazotambulika 613 00:28:44,400 --> 00:28:47,370 na rahisi, kama utaona, kama wameweza si tayari. 614 00:28:47,370 --> 00:28:50,270 >> Basi hebu kuangalia kwa karibu chini ya kofia kama na hasa nini imekuwa 615 00:28:50,270 --> 00:28:53,360 kinachoendelea, na nini hawa sekunde 0 na 1s ni, kukupa zaidi kidogo ya 616 00:28:53,360 --> 00:28:55,330 mazingira kwa ajili ya changamoto hii hasa. 617 00:28:55,330 --> 00:28:55,510 >> [Video avspelning] 618 00:28:55,510 --> 00:28:58,700 >> -Wapi PC yako maduka zaidi ya data yake ya kudumu. 619 00:28:58,700 --> 00:29:03,390 Kufanya hivyo, data husafiri kutoka RAM pamoja na programu ishara kwamba kuwaambia 620 00:29:03,390 --> 00:29:06,110 gari ngumu jinsi ya kuhifadhi data hizo. 621 00:29:06,110 --> 00:29:09,410 ngumu kuendesha nyaya kutafsiri wale ishara katika voltage 622 00:29:09,410 --> 00:29:10,870 kushuka kwa thamani. 623 00:29:10,870 --> 00:29:14,970 Hizi, kwa upande wake, kudhibiti gari ngumu ya kuhamia sehemu, baadhi ya wachache 624 00:29:14,970 --> 00:29:17,910 kuhamia maeneo kushoto katika kisasa ya kompyuta. 625 00:29:17,910 --> 00:29:22,130 >> Baadhi ya ishara ya kudhibiti motor ambayo spins platters chuma-coated. 626 00:29:22,130 --> 00:29:25,470 Data zako ni kweli kuhifadhiwa juu ya haya platters. 627 00:29:25,470 --> 00:29:28,610 Ishara nyingine hoja ya kusoma / kuandika vichwa kusoma au 628 00:29:28,610 --> 00:29:30,710 kuandika data kwenye sahani. 629 00:29:30,710 --> 00:29:35,450 Hii mitambo hivyo sahihi kwamba binadamu nywele hakuweza hata kupita kati ya 630 00:29:35,450 --> 00:29:37,280 vichwa na platters inazunguka. 631 00:29:37,280 --> 00:29:40,316 Hata hivyo, kila kazi kwa kasi kali. 632 00:29:40,316 --> 00:29:40,660 >> [MWISHO video avspelning] 633 00:29:40,660 --> 00:29:42,190 >> DAVID Malan: Zoom katika kidogo undani sasa saa nini 634 00:29:42,190 --> 00:29:44,360 kweli juu platters hayo. 635 00:29:44,360 --> 00:29:44,720 >> [Video avspelning] 636 00:29:44,720 --> 00:29:47,660 >> -Hebu kuangalia nini sisi tu aliona katika mwendo wa polepole. 637 00:29:47,660 --> 00:29:51,710 Wakati mapigo mafupi ya umeme ni kutumwa kwa kichwa kusoma / kuandika, kama flips 638 00:29:51,710 --> 00:29:54,650 juu ya sumakuumeme vidogo kwa ajili ya sehemu ya pili. 639 00:29:54,650 --> 00:29:58,970 sumaku inajenga uwanja, ambayo mabadiliko polarity ya vidogo, vidogo 640 00:29:58,970 --> 00:30:02,850 sehemu ya chembe chuma ambayo kanzu kila uso sahani. 641 00:30:02,850 --> 00:30:05,940 >> mfululizo mfano wa haya vidogo, kushtakiwa-up maeneo ya rekodi 642 00:30:05,940 --> 00:30:08,470 inawakilisha kidogo moja ya data katika idadi binary 643 00:30:08,470 --> 00:30:10,530 mfumo kutumiwa na kompyuta. 644 00:30:10,530 --> 00:30:13,775 Sasa, kama sasa ni kutumwa kwa njia moja kupitia kusoma / kuandika kichwa, eneo 645 00:30:13,775 --> 00:30:15,970 ni polarized katika mwelekeo mmoja. 646 00:30:15,970 --> 00:30:17,950 Kama sasa ni alimtuma katika kinyume mwelekeo, 647 00:30:17,950 --> 00:30:19,930 ubaguzi ni kuachwa. 648 00:30:19,930 --> 00:30:22,370 >> Jinsi ya kupata data mbali disk ngumu? 649 00:30:22,370 --> 00:30:24,090 Tu kubadili mchakato. 650 00:30:24,090 --> 00:30:26,550 Hivyo ni chembe ya rekodi kwamba kupata sasa katika 651 00:30:26,550 --> 00:30:27,960 kusoma / kuandika kichwa kusonga mbele. 652 00:30:27,960 --> 00:30:30,700 Kuweka pamoja mamilioni ya hizi sumaku makundi, na 653 00:30:30,700 --> 00:30:32,160 nimepata faili. 654 00:30:32,160 --> 00:30:36,060 >> Sasa, vipande vya faili moja huenda watatawanyika wote juu ya gari 655 00:30:36,060 --> 00:30:39,970 platters, aina ya kama fujo karatasi ya dawati yako. 656 00:30:39,970 --> 00:30:43,500 Hivyo maalum faili ziada anaendelea kufuatilia ya ambapo kila kitu. 657 00:30:43,500 --> 00:30:45,985 Je, si unataka wewe alikuwa kitu kama hicho? 658 00:30:45,985 --> 00:30:46,470 >> [MWISHO video avspelning] 659 00:30:46,470 --> 00:30:47,820 >> DAVID Malan: OK, pengine si. 660 00:30:47,820 --> 00:30:52,070 Hivyo ni jinsi wengi wenu guys ikakua na haya? 661 00:30:52,070 --> 00:30:53,970 OK, hivyo ni chache na chache mikono kila mwaka. 662 00:30:53,970 --> 00:30:56,550 Lakini mimi nina furaha uko angalau ukoo pamoja nao, kwa sababu hii na yetu wenyewe 663 00:30:56,550 --> 00:31:00,520 kitabu demo, cha kusikitisha, wanakufa sana kupunguza vifo hapa ya kufahamiana. 664 00:31:00,520 --> 00:31:04,010 >> Lakini hii ni nini mimi, angalau, nyuma katika shule ya sekondari, kutumika kwa ajili ya matumizi ya Hifadhi. 665 00:31:04,010 --> 00:31:08,110 Na ilikuwa ni ajabu, kwa sababu wewe inaweza kuhifadhi megabaiti 1.4 juu ya 666 00:31:08,110 --> 00:31:08,930 hii disk fulani. 667 00:31:08,930 --> 00:31:12,260 Na hii ilikuwa high wiani toleo, kama unahitajika kwa HD, ambayo ina 668 00:31:12,260 --> 00:31:14,240 maana kabla ya video ya leo HD. 669 00:31:14,240 --> 00:31:16,400 >> Wiani kiwango mara 800 kilobytes. 670 00:31:16,400 --> 00:31:18,640 Na kabla ya kuwa, kulikuwa na 400-KiloByte disks. 671 00:31:18,640 --> 00:31:23,120 Na kabla ya kuwa, kulikuwa na 5 na 1/4 inch disks, ambayo yalikuwa kweli floppy, 672 00:31:23,120 --> 00:31:25,680 na pana kidogo na mirefu kuliko haya mambo hapa. 673 00:31:25,680 --> 00:31:29,150 Lakini unaweza kweli kuona kinachojulikana floppy disks nyanja ya haya. 674 00:31:29,150 --> 00:31:32,630 >> Na functionally, wao ni kweli pretty sawa na anatoa ngumu ya saa 675 00:31:32,630 --> 00:31:33,570 angalau aina hii. 676 00:31:33,570 --> 00:31:37,270 Tena, SSDs katika kompyuta ya karibu zaidi kazi tofauti kidogo. 677 00:31:37,270 --> 00:31:41,530 Lakini kama wewe hoja kwamba kidogo chuma tab, unaweza kweli kuona alama ya cookie kidogo, 678 00:31:41,530 --> 00:31:42,560 au ulio. 679 00:31:42,560 --> 00:31:43,830 >> Siyo chuma kama hii moja. 680 00:31:43,830 --> 00:31:46,000 Moja hii ni kweli baadhi ya bei nafuu plastiki nyenzo. 681 00:31:46,000 --> 00:31:46,750 Na unaweza aina ya wiggle yake. 682 00:31:46,750 --> 00:31:50,310 Na umefanya trully tu wiped off baadhi idadi ya bits au chembe magnetic 683 00:31:50,310 --> 00:31:51,220 kutoka disk hii. 684 00:31:51,220 --> 00:31:52,710 >> Hivyo nashiriki, kuna kitu juu yake. 685 00:31:52,710 --> 00:31:55,790 Kama jambo hilo katika njia - na kufunika macho yako na wale wa jirani yako - 686 00:31:55,790 --> 00:31:58,865 unaweza tu aina ya kuvuta hii nzima ala mbali kama hiyo. 687 00:31:58,865 --> 00:32:01,900 Lakini kuna spring kidogo, hivyo kuwa na kufahamu kwamba kwa macho yako. 688 00:32:01,900 --> 00:32:03,620 Hivyo sasa una kweli disketi. 689 00:32:03,620 --> 00:32:07,090 >> Na nini ajabu kuhusu hili ni kwamba katika kiasi kama hii ni 690 00:32:07,090 --> 00:32:10,830 wadogo wadogo kubwa ya uwakilishi wa gari ngumu, mambo haya ni super, 691 00:32:10,830 --> 00:32:11,590 super rahisi. 692 00:32:11,590 --> 00:32:15,170 Kama wewe Bana chini yake, sasa kwamba kwamba jambo chuma ni mbali, na peel 693 00:32:15,170 --> 00:32:20,990 yao wazi, kila kuna ni vipande viwili vya waliona na kinachojulikana floppy disk 694 00:32:20,990 --> 00:32:22,930 na kipande cha chuma ya ndani. 695 00:32:22,930 --> 00:32:25,990 >> Na huenda kuna nusu ya disk yangu yaliyomo. 696 00:32:25,990 --> 00:32:27,540 Huenda kuna mwingine nusu yao. 697 00:32:27,540 --> 00:32:31,375 Lakini hiyo yote ilikuwa inazunguka ndani ya kompyuta yako katika yesteryear. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> Na tena, kwa kuweka hii katika mtazamo, jinsi kubwa ni zaidi ya yako 700 00:32:38,310 --> 00:32:39,560 ngumu anatoa siku hizi? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 500 gigabytes, terabyte, labda katika desktop kompyuta, terabytes 2, 3 703 00:32:46,230 --> 00:32:47,630 terabytes, terabytes 4, haki? 704 00:32:47,630 --> 00:32:52,480 Hii ni moja megabyte, kutoa au kuchukua, ambayo hawezi hata fit MP3 kawaida 705 00:32:52,480 --> 00:32:55,310 tena siku hizi, au baadhi ya sawa muziki faili. 706 00:32:55,310 --> 00:32:59,500 >> Hivyo souvenir kidogo kwa ajili yenu leo, na pia kusaidia contextualize nini 707 00:32:59,500 --> 00:33:03,570 tutaweza kuwa na kuchukua kwa nafasi sasa katika tatizo kuweka tano. 708 00:33:03,570 --> 00:33:04,820 Hivyo wale ni yako ya kutunza. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 Hivyo basi mimi mpito ambapo itakuwa matumizi pset ijayo pia. 711 00:33:13,370 --> 00:33:18,470 Hivyo tumekuwa sasa kuweka ukurasa huu kwa ajili - oh, michache ya matangazo ya haraka. 712 00:33:18,470 --> 00:33:21,730 >> Ijumaa hii, kama ungependa kujiunga CS50 kwa chakula cha mchana, kwenda mahali kawaida, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 Na ya mwisho ya mradi - 715 00:33:25,100 --> 00:33:28,520 hivyo kwa mtaala, tumekuwa posted mwisho wa mradi vipimo tayari. 716 00:33:28,520 --> 00:33:31,410 Kutambua kwamba haina maana kwamba ni kutokana hasa hivi karibuni. 717 00:33:31,410 --> 00:33:33,990 Ni posted, kwa kweli, tu kupata guys kufikiri juu yake. 718 00:33:33,990 --> 00:33:37,620 Na kwa kweli, muhimu super asilimia ya utakuwa kukabiliana na 719 00:33:37,620 --> 00:33:40,780 mwisho miradi juu ya vifaa kwamba sisi si hata wamezipata kwa darasani, 720 00:33:40,780 --> 00:33:42,730 bali mapenzi mapema wiki ijayo. 721 00:33:42,730 --> 00:33:45,530 >> Ilani, ingawa, kwamba spec wito kwa vipengele kadhaa tofauti ya 722 00:33:45,530 --> 00:33:46,190 mwisho wa mradi. 723 00:33:46,190 --> 00:33:49,590 kwanza, katika wiki chache, ni kabla ya pendekezo, email pretty kawaida na 724 00:33:49,590 --> 00:33:52,760 TF wako kumwambia au nini wewe kufikiri juu kwa ajili ya mradi wako, na 725 00:33:52,760 --> 00:33:53,650 hakuna kujitoa. 726 00:33:53,650 --> 00:33:56,710 Pendekezo itakuwa hasa yako ahadi, akisema, hapa, hii ni nini 727 00:33:56,710 --> 00:33:57,770 Ningependa kufanya kwa ajili ya mradi wangu. 728 00:33:57,770 --> 00:33:58,250 Unafikiri nini? 729 00:33:58,250 --> 00:33:58,650 Kubwa mno? 730 00:33:58,650 --> 00:33:59,145 Ndogo mno? 731 00:33:59,145 --> 00:34:00,330 Je, ni manageable? 732 00:34:00,330 --> 00:34:02,230 Na unaweza kuona spec kwa maelezo zaidi. 733 00:34:02,230 --> 00:34:05,060 >> Wiki kadhaa baada ya kuwa ni hali ya Ripoti hiyo, ambayo ni vile vile 734 00:34:05,060 --> 00:34:08,260 kawaida email TF yako ya kusema tu jinsi mbali nyuma wewe ni katika fainali yako 735 00:34:08,260 --> 00:34:12,360 utekelezaji wa mradi, ikifuatiwa na Hackathon CS50 ambayo kila mtu 736 00:34:12,360 --> 00:34:17,520 ni waalikwa, ambayo itakuwa ya tukio kutoka 20:00 jioni kwenye moja mpaka 07:00 737 00:34:17,520 --> 00:34:19,150 Asubuhi asubuhi. 738 00:34:19,150 --> 00:34:22,560 Pizza, kama nipate kuwa zilizotajwa katika wiki sifuri, Wil kuwa aliwahi saa 9:00, 739 00:34:22,560 --> 00:34:24,120 Kichina chakula saa 1:00 asubuhi. 740 00:34:24,120 --> 00:34:27,929 Na kama wewe ni bado macho saa 5:00 asubuhi, tutaweza kuchukua wewe IHOP kwa kifungua kinywa. 741 00:34:27,929 --> 00:34:31,310 >> Hivyo hackathon ni moja ya zaidi kukumbukwa uzoefu katika darasa. 742 00:34:31,310 --> 00:34:35,290 Kisha utekelezaji ni kutokana na kisha climactic CS50 Fair. 743 00:34:35,290 --> 00:34:38,070 Maelezo zaidi juu ya yote haya katika wiki ijayo. 744 00:34:38,070 --> 00:34:40,739 >> Lakini hebu kwenda nyuma ya kitu umri wa shule - 745 00:34:40,739 --> 00:34:41,920 tena, safu. 746 00:34:41,920 --> 00:34:45,040 Hivyo safu ilikuwa nzuri, kwa sababu ni kutatua matatizo kama tuliona tu 747 00:34:45,040 --> 00:34:49,290 wakati iliyopita na miundo ya mwanafunzi kupata nje kidogo ya kudhibiti kama sisi 748 00:34:49,290 --> 00:34:52,405 wanataka kuwa na mwanafunzi mmoja, mwanafunzi mbili, mwanafunzi wa tatu, mwanafunzi dot dot dot, 749 00:34:52,405 --> 00:34:54,400 baadhi ya idadi holela wa wanafunzi. 750 00:34:54,400 --> 00:34:58,850 >> Hivyo arrays, wiki chache zilizopita, swooped katika na kutatuliwa matatizo yote ya yetu ya si 751 00:34:58,850 --> 00:35:03,340 kujua mapema jinsi mambo mengi ya aina fulani sisi kutaka. 752 00:35:03,340 --> 00:35:07,390 Na tumeona kwamba structs unaweza kutusaidia zaidi kuandaa kanuni wetu na kuendelea 753 00:35:07,390 --> 00:35:11,660 conceptually sawa vigezo, kama jina na nyumba, pamoja, hivyo kwamba sisi 754 00:35:11,660 --> 00:35:15,570 wanaweza kutibu yao kama moja chombo, ndani ya ya ambayo kuna vipande vidogo. 755 00:35:15,570 --> 00:35:17,810 >> Lakini arrays na baadhi hasara. 756 00:35:17,810 --> 00:35:19,780 Ni nini baadhi ya hasara tumekuwa wamekutana 757 00:35:19,780 --> 00:35:22,320 na arrays hivi sasa? 758 00:35:22,320 --> 00:35:23,450 Nini hiyo? 759 00:35:23,450 --> 00:35:28,130 Fasta ukubwa - hivyo hata kama wewe ili kuwa na uwezo wa kutenga kumbukumbu kwa 760 00:35:28,130 --> 00:35:32,310 safu, mara tu kujua jinsi wanafunzi wengi una ngapi wahusika una 761 00:35:32,310 --> 00:35:35,460 kutoka kwa mtumiaji, mara moja umefanya zilizotengwa safu, umefanya aina ya walijenga 762 00:35:35,460 --> 00:35:36,740 mwenyewe katika kona. 763 00:35:36,740 --> 00:35:40,600 >> Sababu huwezi kuingiza vipengele mpya ndani ya katikati ya safu. 764 00:35:40,600 --> 00:35:43,660 Huwezi kuingiza mambo zaidi mwisho wa safu. 765 00:35:43,660 --> 00:35:47,750 Kweli, una ya mapumziko kwa kujenga nzima mwezi safu, kama tumekuwa kujadiliwa, 766 00:35:47,750 --> 00:35:49,320 kuiga zamani katika mpya. 767 00:35:49,320 --> 00:35:52,610 Na tena, kwamba ni kichwa kwamba GetString inahusika na kwa ajili yenu. 768 00:35:52,610 --> 00:35:56,170 >> Lakini tena, unaweza hata kuingiza kitu ndani ya katikati ya safu 769 00:35:56,170 --> 00:35:58,200 ikiwa ni kiwango cha si kabisa kujazwa. 770 00:35:58,200 --> 00:36:03,010 Kwa mfano, kama hii safu ya ukubwa hapa sita tu ana mambo matano katika hayo, 771 00:36:03,010 --> 00:36:06,080 vizuri, unaweza tu tack kitu kwenye mwisho. 772 00:36:06,080 --> 00:36:08,200 Lakini nini kama unataka kuingiza kitu ndani ya katikati ya 773 00:36:08,200 --> 00:36:11,280 safu, hata ingawa inaweza kuwa watano kati ya vitu sita katika hilo? 774 00:36:11,280 --> 00:36:14,250 >> Vizuri, nini cha kufanya wakati tulikuwa wote ya kujitolea yetu ya kibinadamu onstage katika 775 00:36:14,250 --> 00:36:15,110 wiki iliyopita? 776 00:36:15,110 --> 00:36:18,710 Kama sisi alitaka kuweka mtu hapa, ama hawa watu jinsi ya hoja hii 777 00:36:18,710 --> 00:36:22,540 njia, au watu hawa jinsi ya hoja hii njia, na kwamba akawa ghali. 778 00:36:22,540 --> 00:36:26,950 shifting ya watu ndani ya safu kuishia na kuongeza hadi na kugharimu 779 00:36:26,950 --> 00:36:31,240 sisi wakati, hivyo mengi ya squared wetu n mbio mara kama aina kuingizwa, kwa ajili ya 780 00:36:31,240 --> 00:36:32,550 mfano, katika kesi mbaya. 781 00:36:32,550 --> 00:36:36,520 Hivyo arrays ni kubwa, lakini una kujua mapema jinsi kubwa unataka yao. 782 00:36:36,520 --> 00:36:38,030 >> OK hivyo, hapa ufumbuzi. 783 00:36:38,030 --> 00:36:43,860 Kama mimi si kujua mapema ngapi wanafunzi nipate kuwa, na mimi kujua mara moja 784 00:36:43,860 --> 00:36:47,870 Mimi kuamua, ingawa, mimi nina kukwama na kwamba wanafunzi wengi, kwa nini sio mimi tu daima 785 00:36:47,870 --> 00:36:51,740 kutenga mara mbili kama vile nafasi kama mimi ili nadhani wanahitaji? 786 00:36:51,740 --> 00:36:54,450 Ni kwamba si suluhisho busara? 787 00:36:54,450 --> 00:36:58,240 >> Realistically, sidhani kwamba sisi ni kwenda haja inafaa zaidi ya 50 788 00:36:58,240 --> 00:37:02,190 katika safu kwa ajili ya darasa kati-kawaida, hivyo hebu tu pande zote juu. 789 00:37:02,190 --> 00:37:07,040 Mimi itabidi kufanya inafaa 100 katika safu yangu, tu ili tuweze dhahiri kupata 790 00:37:07,040 --> 00:37:10,330 idadi ya wanafunzi mimi kutarajia kuwa katika baadhi ya tabaka la kati-size. 791 00:37:10,330 --> 00:37:14,320 Hivyo kwa nini siyo tu pande zote juu na kutenga zaidi ya kumbukumbu, kwa kawaida, kwa ajili ya safu 792 00:37:14,320 --> 00:37:16,290 kuliko unafikiri unaweza hata haja? 793 00:37:16,290 --> 00:37:20,190 Nini hii pushback rahisi na wazo hilo? 794 00:37:20,190 --> 00:37:21,440 >> Wewe tu kupoteza kumbukumbu. 795 00:37:21,440 --> 00:37:25,350 Literally kila mpango kuandika basi labda ni kwa kutumia mara mbili kama vile kumbukumbu kama 796 00:37:25,350 --> 00:37:26,680 haja kweli. 797 00:37:26,680 --> 00:37:28,990 Na kwamba tu haina kujisikia kama hasa kifahari ufumbuzi. 798 00:37:28,990 --> 00:37:31,990 Aidha, ni tu itapungua uwezekano wa tatizo. 799 00:37:31,990 --> 00:37:35,300 Kama kutokea kwa kuwa na shaka maarufu moja muhula na una 101 800 00:37:35,300 --> 00:37:39,610 wanafunzi, mpango wako bado ni kimsingi yanayowakabili suala hilo hilo. 801 00:37:39,610 --> 00:37:44,280 >> Hivyo nashiriki, kuna ufumbuzi kwa ad hii matatizo yetu yote katika fomu 802 00:37:44,280 --> 00:37:46,790 ya data miundo ambayo ni ngumu zaidi kuliko wale 803 00:37:46,790 --> 00:37:47,970 tumeona hivi sasa. 804 00:37:47,970 --> 00:37:50,530 Hii, mimi kudai, ni orodha zinazoungwa. 805 00:37:50,530 --> 00:37:51,920 Hii ni orodha ya idadi - 806 00:37:51,920 --> 00:37:54,970 9, 17, 22, 26, na 34 - 807 00:37:54,970 --> 00:38:00,120 ambayo yamekuwa wanaohusishwa pamoja kwa njia ya nini nimekuwa inayotolewa kama mishale. 808 00:38:00,120 --> 00:38:03,580 >> Kwa maneno mengine, kama alitaka kuwakilisha safu, mimi naweza kufanya 809 00:38:03,580 --> 00:38:04,910 kitu kama hiki. 810 00:38:04,910 --> 00:38:07,310 Na mimi itabidi kuweka hii juu ya uendeshaji katika muda tu. 811 00:38:07,310 --> 00:38:09,970 Mimi naweza kufanya - 812 00:38:09,970 --> 00:38:12,520 hello, wote haki. 813 00:38:12,520 --> 00:38:14,470 Kusimama kwa. 814 00:38:14,470 --> 00:38:17,360 Mpya ya kompyuta hapa, wazi - 815 00:38:17,360 --> 00:38:18,090 wote haki. 816 00:38:18,090 --> 00:38:21,730 >> Hivyo kama nina namba hizi katika safu - 817 00:38:21,730 --> 00:38:28,880 9, 17, 22, 26, 24 - 818 00:38:28,880 --> 00:38:30,530 si lazima wadogo. 819 00:38:30,530 --> 00:38:33,730 Haki ya wote, hivyo hapa ni safu yangu - 820 00:38:33,730 --> 00:38:34,980 oh mungu wangu. 821 00:38:34,980 --> 00:38:38,700 822 00:38:38,700 --> 00:38:40,395 Haki ya wote, hivyo hapa ni safu yangu. 823 00:38:40,395 --> 00:38:44,110 824 00:38:44,110 --> 00:38:45,050 Oh mungu wangu. 825 00:38:45,050 --> 00:38:48,820 >> [Kicheko] 826 00:38:48,820 --> 00:38:49,440 >> DAVID Malan: kujifanya. 827 00:38:49,440 --> 00:38:52,330 Ni sana juhudi ya kwenda nyuma na kurekebisha kwamba, hivyo kuna - 828 00:38:52,330 --> 00:38:54,290 26. 829 00:38:54,290 --> 00:38:57,650 Hivyo tuna hii safu ya 9, 17, 22, 26, na 34. 830 00:38:57,650 --> 00:39:00,260 Kwa wale wa wewe unaweza kuona kosa aibu mimi tu alifanya, 831 00:39:00,260 --> 00:39:00,830 huko ni. 832 00:39:00,830 --> 00:39:04,490 >> Hivyo mimi kudai kwamba hii ni ufanisi sana ufumbuzi. 833 00:39:04,490 --> 00:39:07,310 Nimekuwa zilizotengwa kama ints wengi kama Nahitaji - moja, mbili, tatu, 834 00:39:07,310 --> 00:39:09,100 nne, tano, au sita - 835 00:39:09,100 --> 00:39:11,660 na nimekuwa kisha kuhifadhiwa idadi ndani ya safu hii. 836 00:39:11,660 --> 00:39:15,220 Lakini tuseme, basi, nataka kuingiza thamani kama idadi ya 8? 837 00:39:15,220 --> 00:39:16,100 Naam, yanakwenda wapi? 838 00:39:16,100 --> 00:39:18,530 Tuseme nataka kuingiza idadi kama 20. 839 00:39:18,530 --> 00:39:19,790 Naam, yanakwenda wapi? 840 00:39:19,790 --> 00:39:23,160 Mahali fulani pale katikati, au namba 35 ina kwenda 841 00:39:23,160 --> 00:39:24,010 mahali fulani mwishoni. 842 00:39:24,010 --> 00:39:25,320 Lakini mimi nina wote nje ya nafasi. 843 00:39:25,320 --> 00:39:29,120 >> Na hivyo hii ni changamoto za msingi ya arrays kwamba hana ni ufumbuzi. 844 00:39:29,120 --> 00:39:32,280 Mimi alidai wakati iliyopita, GetString kutatua tatizo hili. 845 00:39:32,280 --> 00:39:37,380 Kama unataka kuingiza idadi ya sita ndani ya safu hii, ni nini angalau moja 846 00:39:37,380 --> 00:39:40,090 ufumbuzi unaweza kuanguka nyuma kwa hakika, tu kama sisi kufanya na GetString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 Nini hiyo? 849 00:39:46,030 --> 00:39:48,190 >> Vizuri, kufanya hivyo ni kubwa rahisi kusema kuliko kutenda. 850 00:39:48,190 --> 00:39:52,810 Tunaweza si lazima kufanya safu kubwa, lakini tunaweza kufanya nini? 851 00:39:52,810 --> 00:39:56,570 Kufanya safu mpya kwamba ni kubwa zaidi, ya kawaida 6, au labda kawaida 10, kama tunataka 852 00:39:56,570 --> 00:40:00,490 kupata mbele ya mambo, na kisha nakala safu ya zamani katika mpya, na kisha 853 00:40:00,490 --> 00:40:01,680 huru safu ya zamani. 854 00:40:01,680 --> 00:40:05,770 >> Lakini nini wakati mbio sasa ya mchakato huo? 855 00:40:05,770 --> 00:40:09,870 Ni kubwa O ya n, kwa sababu ya kuiga ni kwenda gharama vitengo baadhi ya 856 00:40:09,870 --> 00:40:13,480 wakati, hivyo si hivyo bora kama tuna kutenga safu mpya, ambayo ni kwenda 857 00:40:13,480 --> 00:40:15,610 kuwaondoa mara mbili kama vile kumbukumbu kwa muda. 858 00:40:15,610 --> 00:40:16,660 Nakala ya zamani katika mpya - 859 00:40:16,660 --> 00:40:18,800 I mean, ni tu maumivu ya kichwa, ambayo ni, tena, kwa nini sisi aliandika 860 00:40:18,800 --> 00:40:19,920 GetString kwa ajili yenu. 861 00:40:19,920 --> 00:40:21,380 >> Basi nini ili sisi nini badala yake? 862 00:40:21,380 --> 00:40:25,000 Vizuri, nini kama yetu data muundo kweli ina mapungufu katika hivyo? 863 00:40:25,000 --> 00:40:30,790 Tuseme kwamba mimi kupumzika lengo langu la kuwa na contiguous chunks ya kumbukumbu, ambapo 9 864 00:40:30,790 --> 00:40:34,500 ni haki ya karibu na 17, ambayo ni haki ya karibu na 22, na kadhalika. 865 00:40:34,500 --> 00:40:39,570 >> Na tuseme kwamba 9 inaweza kuwa zaidi ya hapa katika RAM, na 17 inaweza kuwa zaidi ya hapa katika RAM, 866 00:40:39,570 --> 00:40:40,990 na 22 inaweza kuwa zaidi ya hapa katika RAM. 867 00:40:40,990 --> 00:40:43,610 Kwa maneno mengine, mimi hawana haja nao hata nyuma kwa nyuma tena. 868 00:40:43,610 --> 00:40:47,850 Mimi tu na kwa namna fulani thread sindano kupitia katika kila namba hizi, au kila 869 00:40:47,850 --> 00:40:51,010 ya nodi hiyo, kama tutaweza kuwaita mistatili kama nimekuwa inayotolewa yao, ili 870 00:40:51,010 --> 00:40:55,670 kumbuka jinsi ya kupata mwisho vile nodi kutoka kwanza. 871 00:40:55,670 --> 00:40:59,940 >> Kwa hiyo kile ni kujenga programu tumeona kabisa hivi karibuni na ambayo mimi 872 00:40:59,940 --> 00:41:03,030 inaweza kutekeleza kwamba thread, au inayotolewa hapa, na ambayo naweza 873 00:41:03,030 --> 00:41:05,430 kutekeleza mishale hizo? 874 00:41:05,430 --> 00:41:06,500 Hivyo kuyatumia, haki? 875 00:41:06,500 --> 00:41:09,560 Kama mimi kutenga si tu int, lakini nodi - na kwa 876 00:41:09,560 --> 00:41:10,810 nodi, mimi tu maana chombo. 877 00:41:10,810 --> 00:41:12,900 Na kuibua, I mean mstatili. 878 00:41:12,900 --> 00:41:16,420 Hivyo nodi inaonekana mahitaji vyenye maadili mbili - 879 00:41:16,420 --> 00:41:21,490 int yenyewe, na kisha, kama alisema kwa nusu ya chini ya Mstatili, 880 00:41:21,490 --> 00:41:23,010 nafasi ya kutosha kwa int. 881 00:41:23,010 --> 00:41:26,130 >> Hivyo tu kufikiri mbele hapa, jinsi kubwa ni nodi hii, hii 882 00:41:26,130 --> 00:41:27,170 chombo katika swali? 883 00:41:27,170 --> 00:41:29,250 Ngapi ka kwa int? 884 00:41:29,250 --> 00:41:31,310 Takribani 4, ikiwa ni sawa kama kawaida. 885 00:41:31,310 --> 00:41:33,270 Na kisha ngapi ka kwa pointer? 886 00:41:33,270 --> 00:41:33,650 4. 887 00:41:33,650 --> 00:41:37,940 Hivyo hii chombo, au hii nodi, ni kwenda kuwa muundo wa 8-Byte. 888 00:41:37,940 --> 00:41:41,760 Oh, na kwamba ni bahati mbaya furaha kwamba sisi tu ilianzisha wazo hili la 889 00:41:41,760 --> 00:41:44,400 struct, au muundo C. 890 00:41:44,400 --> 00:41:48,890 >> Hivyo mimi kudai kwamba nataka kuchukua hatua kuelekea hii ya kisasa zaidi 891 00:41:48,890 --> 00:41:52,560 utekelezaji wa orodha ya idadi, wanaohusishwa orodha ya idadi, mimi haja ya kufanya 892 00:41:52,560 --> 00:41:56,920 zaidi kidogo kufikiri hadi mbele na kutangaza si tu int, lakini struct 893 00:41:56,920 --> 00:41:58,620 kwamba Mimi nitakuita, conventionally hapa, nodi. 894 00:41:58,620 --> 00:42:01,630 Tunaweza kuiita kitu tunataka, lakini nodi ni kwenda kuwa mada katika mengi 895 00:42:01,630 --> 00:42:03,560 ya mambo ya sisi kuanza kuangalia sasa. 896 00:42:03,560 --> 00:42:06,480 >> Ndani ya nodi kwamba ni n int. 897 00:42:06,480 --> 00:42:09,350 Na kisha hii syntax, kidogo weird katika mtazamo wa kwanza - 898 00:42:09,350 --> 00:42:12,960 struct nodi * ijayo. 899 00:42:12,960 --> 00:42:16,900 Vizuri pictorially, hiyo ni nini? 900 00:42:16,900 --> 00:42:21,000 Hiyo ni nusu ya chini ya Mstatili kuwa tuliona 901 00:42:21,000 --> 00:42:22,730 muda tu iliyopita. 902 00:42:22,730 --> 00:42:27,600 >> Lakini kwa nini mimi kusema struct nodi * kinyume na * tu nodi? 903 00:42:27,600 --> 00:42:31,370 Kwa sababu kama pointer kwamba ni akizungumzia kwenye nodi mwingine, ni tu 904 00:42:31,370 --> 00:42:32,760 anuani ya nodi. 905 00:42:32,760 --> 00:42:35,630 Hiyo ni thabiti na nini tumekuwa kujadiliwa kuhusu kuyatumia hivi sasa. 906 00:42:35,630 --> 00:42:39,690 Lakini kwa nini, kama mimi kudai muundo huu ni kuitwa nodi, wala mimi kusema struct 907 00:42:39,690 --> 00:42:42,660 nodi ndani ya hapa? 908 00:42:42,660 --> 00:42:43,190 >> Hasa. 909 00:42:43,190 --> 00:42:46,490 Ni aina ya hali halisi ya kijinga ya C. typedef, hivyo kusema, hana 910 00:42:46,490 --> 00:42:47,220 kilichotokea bado. 911 00:42:47,220 --> 00:42:48,510 C ni super halisi. 912 00:42:48,510 --> 00:42:51,050 Anasoma kanuni yako ya juu kwa chini, kushoto na kulia. 913 00:42:51,050 --> 00:42:54,930 Na mpaka hits kwamba semicolon juu ya bottom line, nadhani nini haina 914 00:42:54,930 --> 00:42:57,590 kuwepo kama aina data? 915 00:42:57,590 --> 00:42:59,060 Nodi, quote unquote nodi. 916 00:42:59,060 --> 00:43:03,050 >> Lakini kwa sababu ya verbose zaidi tamko mimi juu ya mstari wa kwanza - 917 00:43:03,050 --> 00:43:05,340 typedef struct nodi - 918 00:43:05,340 --> 00:43:08,790 kwa sababu kwamba alikuja kwanza, kabla ya curly braces, hiyo ni aina ya kama 919 00:43:08,790 --> 00:43:11,800 kabla ya kuelimisha Clang kwamba, wewe kujua nini, nipe struct 920 00:43:11,800 --> 00:43:13,570 kuitwa struct nodi. 921 00:43:13,570 --> 00:43:16,270 Kusema ukweli, sijui kama mambo wito struct nodi, struct nodi kila 922 00:43:16,270 --> 00:43:17,090 katika kanuni yangu. 923 00:43:17,090 --> 00:43:20,660 Lakini mimi itabidi kuitumia tu mara moja, tu ndani, ili niweze ufanisi 924 00:43:20,660 --> 00:43:25,010 kuunda aina ya kumbukumbu ya mviringo, si pointer mwenyewe per se, lakini 925 00:43:25,010 --> 00:43:29,400 pointer mwingine wa aina kufanana. 926 00:43:29,400 --> 00:43:32,330 >> Hivyo zinageuka kuwa juu ya muundo wa data kama hii, kuna wachache 927 00:43:32,330 --> 00:43:34,470 shughuli ambayo inaweza kuwa wa maslahi na sisi. 928 00:43:34,470 --> 00:43:37,460 Sisi kutaka kuingiza katika orodha kama hii. 929 00:43:37,460 --> 00:43:39,850 Sisi kutaka kufuta kutoka kwenye orodha kama hii. 930 00:43:39,850 --> 00:43:43,490 Sisi kutaka kutafuta orodha ya thamani, au zaidi kwa ujumla, tindanga. 931 00:43:43,490 --> 00:43:46,410 Na tindanga ni njia tu ya dhana ya akisema kuanza saa kushoto na hoja zote 932 00:43:46,410 --> 00:43:47,650 njia ya haki. 933 00:43:47,650 --> 00:43:52,640 >> Na notisi, hata na hii zaidi kidogo kisasa data muundo, basi 934 00:43:52,640 --> 00:43:56,510 mimi kupendekeza kwamba tunaweza kukopa baadhi ya mawazo ya wiki mbili zilizopita na 935 00:43:56,510 --> 00:43:58,410 kutekeleza kazi kuitwa kutafuta kama hii. 936 00:43:58,410 --> 00:44:01,360 Ni kwenda na kurudi kweli au uongo, kuonyesha, au ndiyo 937 00:44:01,360 --> 00:44:03,390 hakuna, n ni katika orodha. 938 00:44:03,390 --> 00:44:05,960 Hoja yake ya pili ni pointer kwa orodha yenyewe, hivyo 939 00:44:05,960 --> 00:44:07,920 pointer nodi. 940 00:44:07,920 --> 00:44:10,350 >> Kila nitakacho kisha kufanya ni kutangaza kutofautiana ya muda mfupi. 941 00:44:10,350 --> 00:44:12,730 Tutaweza kuiita PTR kwa mkataba, kwa pointer. 942 00:44:12,730 --> 00:44:15,220 Na mimi hawawajui ni sawa na mwanzo wa orodha. 943 00:44:15,220 --> 00:44:16,680 >> Na sasa taarifa kitanzi wakati. 944 00:44:16,680 --> 00:44:20,640 Hivyo muda mrefu kama pointer si sawa kwa null, mimi nina kwenda kuangalia. 945 00:44:20,640 --> 00:44:24,520 Ni pointer mshale n sawa na n kwamba ilipitishwa katika? 946 00:44:24,520 --> 00:44:26,410 Na kusubiri dakika - mpya kipande cha syntax. 947 00:44:26,410 --> 00:44:29,324 Kile ni mshale wote wa ghafla? 948 00:44:29,324 --> 00:44:30,574 Yeah? 949 00:44:30,574 --> 00:44:34,200 950 00:44:34,200 --> 00:44:34,810 >> Hasa. 951 00:44:34,810 --> 00:44:38,860 Hivyo ambapo dakika chache zilizopita, sisi kutumika nukta nukuu kupata kitu 952 00:44:38,860 --> 00:44:43,080 ndani ya struct, kama variable wewe si struct 953 00:44:43,080 --> 00:44:47,420 yenyewe, lakini pointer struct, nashiriki, kipande cha syntax kwamba 954 00:44:47,420 --> 00:44:48,620 hatimaye hufanya akili angavu. 955 00:44:48,620 --> 00:44:52,360 mshale maana yake kufuata pointer, kama mishale yetu kawaida maana 956 00:44:52,360 --> 00:44:56,570 pictorially, na kwenda katika shamba data ndani. 957 00:44:56,570 --> 00:44:59,700 Hivyo mshale ni kitu sawa kama nukta, lakini wewe kutumia wakati una pointer. 958 00:44:59,700 --> 00:45:05,270 >> Hivyo tu kwa kurejea basi, kama n shamba ndani ya struct kuitwa pointer 959 00:45:05,270 --> 00:45:07,760 sawa sawa n, kurudi kweli. 960 00:45:07,760 --> 00:45:11,970 Vinginevyo, line hii hapa - pointer sawa pointer ijayo. 961 00:45:11,970 --> 00:45:17,540 Basi nini hii ni kufanya, ilani, ni kama mimi am sasa akionyesha struct 962 00:45:17,540 --> 00:45:21,430 zenye 9, na 9 ni si idadi Mimi nina kuangalia kwa - nadhani nina kuangalia 963 00:45:21,430 --> 00:45:22,830 kwa ajili ya n sawa na 50 - 964 00:45:22,830 --> 00:45:25,930 Mimi nina kwenda update pointer yangu muda na si kumweka kwenye nodi hii 965 00:45:25,930 --> 00:45:31,190 tena, lakini pointer mshale ijayo, ambayo ni kwenda kuweka me up hapa. 966 00:45:31,190 --> 00:45:34,270 >> Sasa, mimi barabara ni kimbunga utangulizi. 967 00:45:34,270 --> 00:45:37,380 Siku ya Jumatano, tutaweza kweli kufanya hii pamoja na baadhi ya binadamu na kwa baadhi ya zaidi 968 00:45:37,380 --> 00:45:38,900 kanuni kwa kasi ndogo. 969 00:45:38,900 --> 00:45:42,990 Lakini kutambua, sisi ni sasa kufanya takwimu zetu miundo ngumu zaidi ili wetu 970 00:45:42,990 --> 00:45:45,780 algorithms wanaweza kupata ufanisi zaidi, ambayo ni kwenda kuwa zinazohitajika kwa 971 00:45:45,780 --> 00:45:50,500 pset sita, wakati sisi mzigo katika, tena, wale 150,000 maneno, lakini haja ya kufanya hivyo 972 00:45:50,500 --> 00:45:55,650 ufanisi, na walau, kujenga mpango kwamba anaendesha kwa watumiaji wetu si katika 973 00:45:55,650 --> 00:46:00,460 linear, si katika n squared, lakini katika mara kwa mara wakati, katika bora. 974 00:46:00,460 --> 00:46:02,300 >> Tutaweza kuona juu ya Jumatano. 975 00:46:02,300 --> 00:46:07,240 >> SPIKA: Katika CS50 ijayo, Daudi anasahau wigo wake kesi. 976 00:46:07,240 --> 00:46:12,770 >> DAVID Malan: Na kwamba ni jinsi ya kutuma Nakala ujumbe na C. Nini - 977 00:46:12,770 --> 00:46:14,020 >> [MBALIMBALI TEXT UJUMBE Taarifa Sauti] 978 00:46:14,020 --> 00:46:19,734