1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> Davidas Malan: Gerai, pasveikinti atgal. 3 00:00:12,580 --> 00:00:13,290 Tai CS50. 4 00:00:13,290 --> 00:00:15,130 Tai savaitės septynių pradžia. 5 00:00:15,130 --> 00:00:18,890 Taigi tai buvo, o, taigi aš maniau, mes norime imtis viesulu kelionė, kurioje mes 6 00:00:18,890 --> 00:00:20,760 baigiau ir kur mes dabar vyksta. 7 00:00:20,760 --> 00:00:23,310 >> Taigi tai, ką čia gali turėti sukėlė baimės ne pirmas. 8 00:00:23,310 --> 00:00:27,680 Bet tikiuosi, jūs pradeda Aklimatizuojama ką tai reiškia čia - 9 00:00:27,680 --> 00:00:32,670 žvaigždučių atstovaujanti rodyklę, kuri yra ką, daugiau profanas sąlygomis? 10 00:00:32,670 --> 00:00:33,400 Taigi tai adresas. 11 00:00:33,400 --> 00:00:35,490 >> Taigi tai adresas kažkas atmintyje. 12 00:00:35,490 --> 00:00:38,260 Ir mes pradėjome Nulupkite sluoksnių Prieš porą savaičių, viskas patinka 13 00:00:38,260 --> 00:00:41,800 GetString ir kitas funkcijas, visą tą laiką nebuvo grąžinti 14 00:00:41,800 --> 00:00:46,010 adresai dalykų atminties, pavyzdžiui, adresas pirmos ženklu 15 00:00:46,010 --> 00:00:46,990 kai seka. 16 00:00:46,990 --> 00:00:50,360 >> Taigi mes taip pat pristatė Valgrind, kuris jūs pradėsite naudoti šią problemą 17 00:00:50,360 --> 00:00:53,380 nustatyti, ypač Kitas problema nustatyti, taip pat. 18 00:00:53,380 --> 00:00:54,980 Ir Valgrind ką daro už mus? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 Ji tikrina, Atminties nutekėjimas, ir tai taip pat tikrina, įžeidžiantį turinį atminties. 21 00:01:01,020 --> 00:01:05,890 >> Jis gali su tam tikra tikimybe, nustatyti, ar Jūsų kodas ketina paliesti atmintį 22 00:01:05,890 --> 00:01:07,100 kad jis tiesiog neturėtų. 23 00:01:07,100 --> 00:01:10,410 Taigi nebūtinai nutekėjimą, bet jei peržengti kai ribų 24 00:01:10,410 --> 00:01:14,730 masyvas, ir jūs iš tikrųjų paleisti Comment ir paskatinti tą elgesį, o 25 00:01:14,730 --> 00:01:17,870 Valgrind veikia jūsų programa yra veikia viduje ji, gausite 26 00:01:17,870 --> 00:01:21,460 žinutės kaip ši - "negalioja rašyti apie dydis 4 ", kuris, prisiminti porą 27 00:01:21,460 --> 00:01:25,880 savaites reiškė, kad aš netyčia kaip viena int per toli 28 00:01:25,880 --> 00:01:27,250 už masyvo ribų. 29 00:01:27,250 --> 00:01:30,790 Ir taip 4 dydžio tai čia dydį tos konkrečios int. 30 00:01:30,790 --> 00:01:35,260 >> Taigi imtis nuraminti tuo, kad Comment išvestis, jo formatą, 31 00:01:35,260 --> 00:01:36,170 yra tik žiaurus. 32 00:01:36,170 --> 00:01:40,180 Tai tikrai sunku pamatyti per netvarka už įdomią informaciją. 33 00:01:40,180 --> 00:01:42,910 Taigi, ką mes padarėme čia yra tik fragmentas kai daugiau pora 34 00:01:42,910 --> 00:01:43,850 įdomių linijų. 35 00:01:43,850 --> 00:01:46,760 Bet suprasti, kad 80% Valgrind ųjų produkcija bus iš šiek tiek 36 00:01:46,760 --> 00:01:47,650 išsiblaškymas. 37 00:01:47,650 --> 00:01:52,820 >> Tiesiog pažiūrėkite modelius, kaip šie - negalioja teisė, negaliojančių skaityti, 40 baitų 38 00:01:52,820 --> 00:01:56,690 ir kai kurie iš blokų skaičius yra tikrai prarastas, raktiniai žodžiai, pavyzdžiui, kad. 39 00:01:56,690 --> 00:02:01,920 Ir ką jūs tikiuosi pamatyti yra keletas rūšies pėdsako ką veikti 40 00:02:01,920 --> 00:02:03,340 klaida yra iš tikrųjų in 41 00:02:03,340 --> 00:02:07,195 Šiuo atveju čia, kokia linija mano kodas buvo klaida matyt? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26 į failą pavadinimu memory.c, kuris buvo Pavyzdžiui žaidėme su 44 00:02:14,130 --> 00:02:14,890 tuo metu. 45 00:02:14,890 --> 00:02:16,460 Taigi, tai tikriausiai ne malloc. 46 00:02:16,460 --> 00:02:18,630 Tai tikriausiai buvo mano kodas vietoj. 47 00:02:18,630 --> 00:02:20,910 Taigi, mes pamatysime dar kartą ir vėl netrukus. 48 00:02:20,910 --> 00:02:24,080 >> Taigi scanf, tai atėjo į pora formų iki šiol. 49 00:02:24,080 --> 00:02:26,410 Mes matėme sscanf trumpai. 50 00:02:26,410 --> 00:02:28,330 Tai buvo kažkas skaičius jūs nėrė į į jūsų 51 00:02:28,330 --> 00:02:29,535 pasirengimas viktorinoje. 52 00:02:29,535 --> 00:02:33,130 Ir Scanf iš tikrųjų ką CS50 biblioteka manimi naudoju po 53 00:02:33,130 --> 00:02:36,560 dangtis gana ilgą užsakymo metu gauti informacijos iš vartotojo. 54 00:02:36,560 --> 00:02:40,420 >> Pavyzdžiui, jei aš pereiti į CS50 Prietaisas čia, leiskite man atverti 55 00:02:40,420 --> 00:02:45,315 pavyzdys, kad šiandien vadinama Scanf-0.c Ir tai super paprasta. 56 00:02:45,315 --> 00:02:46,590 Tai tik keletas eilučių kodo. 57 00:02:46,590 --> 00:02:50,880 Bet tai rodo, tikrai, kaip getInt dirbo visą šį laiką. 58 00:02:50,880 --> 00:02:54,710 >> Šioje programoje Čia, atitinka 16 , Pranešimas, kad aš pareiškiu, int. 59 00:02:54,710 --> 00:02:57,270 Taigi, jokių patarimų, nieko stebuklingo ten, tik int. 60 00:02:57,270 --> 00:03:00,330 Tada 17 eilutės, aš greitai vartotojas už numerį, prašome. 61 00:03:00,330 --> 00:03:02,930 Tada pabaigoje 18, aš naudoju scanf čia. 62 00:03:02,930 --> 00:03:06,910 Ir aš nenurodyta, lyg printf, kad aš laukiu citata 63 00:03:06,910 --> 00:03:08,110 Unquote proc i. 64 00:03:08,110 --> 00:03:10,920 >> Taigi proc i, žinoma, reiškia int. 65 00:03:10,920 --> 00:03:14,580 Tačiau pastebėti, kas antra argumentas scanf yra. 66 00:03:14,580 --> 00:03:17,350 Kaip Jūs apibūdintumėte antra argumentas po kablelio? 67 00:03:17,350 --> 00:03:19,450 Kas tai? 68 00:03:19,450 --> 00:03:20,670 >> Tai iš x adresą. 69 00:03:20,670 --> 00:03:25,490 Taigi tai yra naudinga, nes teikiant Scanf su x adresą, ką 70 00:03:25,490 --> 00:03:29,560 kad suteikti šią funkciją daryti? 71 00:03:29,560 --> 00:03:33,010 Ne tik ten, bet ką daryti? 72 00:03:33,010 --> 00:03:34,060 >> Padaryti pakeisti jį. 73 00:03:34,060 --> 00:03:38,080 Kadangi jūs galite eiti ten, tai tarsi kaip žemėlapį į A ATMINTIES VIETA. 74 00:03:38,080 --> 00:03:41,900 Ir taip ilgai, kaip jūs pateikiate Scanf arba bet su tokia struktūra, kad funkcija 75 00:03:41,900 --> 00:03:45,840 funkcija gali eiti ten, ir ne tik pažvelgti į vertę, tačiau ji taip pat gali 76 00:03:45,840 --> 00:03:49,670 pakeisti tą vertę, kuri yra naudinga, jei gyvenimu scanf tikslas 77 00:03:49,670 --> 00:03:53,060 nuskaityti informacijos iš vartotojo, ypač iš klaviatūros. 78 00:03:53,060 --> 00:03:57,830 Ir f žymi suformatuotas, kaip printf, f reiškia formatuotas 79 00:03:57,830 --> 00:03:58,930 eilutę, kurią norite spausdinti. 80 00:03:58,930 --> 00:04:04,430 >> Taigi trumpai tariant, ši eilutė 18 tiesiog sako, bandyti skaityti iš vartotojo int 81 00:04:04,430 --> 00:04:10,420 klaviatūra ir laikyti jį viduje x, ne kokia adresas x atsitinka gyventi. 82 00:04:10,420 --> 00:04:14,860 Ir tada galiausiai linija 19 tiesiog sako, Ačiū už int, šiuo atveju. 83 00:04:14,860 --> 00:04:15,940 >> Taigi leiskite man eiti į priekį ir padaryti tai. 84 00:04:15,940 --> 00:04:18,570 Taigi, kad scanf 0. 85 00:04:18,570 --> 00:04:20,130 Leiskite man eiti į priekį ir priartinti 86 00:04:20,130 --> 00:04:22,960 Aš eisiu ir paleisti tai su taškų velniop scanf 0. 87 00:04:22,960 --> 00:04:24,020 Skaičius, prašau? 88 00:04:24,020 --> 00:04:24,720 50. 89 00:04:24,720 --> 00:04:25,730 Ačiū už 50. 90 00:04:25,730 --> 00:04:27,270 Taigi, tai gana paprasta. 91 00:04:27,270 --> 00:04:28,160 >> Dabar ko jis nedaro? 92 00:04:28,160 --> 00:04:29,940 Tai ne daro visa krūva Klaidų tikrinimo. 93 00:04:29,940 --> 00:04:33,000 Pavyzdžiui, jei aš neturiu bendradarbiauti, ir nemanau, įveskite skaičių, bet 94 00:04:33,000 --> 00:04:37,860 o aš rašau kažką panašaus į "Labas" tai tiesiog rūšies keista. 95 00:04:37,860 --> 00:04:41,130 Ir taip vienas iš dalykų, CS50 biblioteka buvo padaryti mums kai 96 00:04:41,130 --> 00:04:43,440 laikas yra tai, kad reprompting ir reprompting. 97 00:04:43,440 --> 00:04:49,320 >> Bandykite dar kartą prisiminti mane buvo cs50.c, ir tai yra priežastis, kad getInt į 98 00:04:49,320 --> 00:04:51,670 CS50 biblioteka yra iš tikrųjų visa krūva linijų ilgio, nes mes 99 00:04:51,670 --> 00:04:53,190 tikrinant kvailas stuff like this. 100 00:04:53,190 --> 00:04:55,730 Ar vartotojas neduoda mums, tiesą sakant, int? 101 00:04:55,730 --> 00:04:57,910 Ar jis ar ji mums kažką kaip abėcėlės raide? 102 00:04:57,910 --> 00:05:01,410 Jei taip, mes norime nustatyti kad ir klykauti į juos. 103 00:05:01,410 --> 00:05:03,915 >> Bet viskas gauti daugiau įdomių Šiame Kitame pavyzdyje. 104 00:05:03,915 --> 00:05:09,840 Jei aš einu į Scanf-1.c, kas yra vienas dalykas, kad iš esmės pasikeitė 105 00:05:09,840 --> 00:05:11,135 tai kitą pavyzdys? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 Aš naudoju char *, žinoma, vietoj int. 108 00:05:16,010 --> 00:05:19,210 >> Taigi tai yra įdomi, nes char * pamenu, yra tikrai tik 109 00:05:19,210 --> 00:05:20,190 tas pats, kaip eilutę. 110 00:05:20,190 --> 00:05:23,840 Taigi ji mano, kaip gal tai super paprasta įgyvendinti GetString. 111 00:05:23,840 --> 00:05:26,010 Bet aš nulupus sluoksnį iš CS50 bibliotekoje, todėl aš 112 00:05:26,010 --> 00:05:27,550 raginama šį char * dabar. 113 00:05:27,550 --> 00:05:30,070 Taigi pažiūrėkime, kur, jei bet kur, mes suklysti. 114 00:05:30,070 --> 00:05:30,840 >> Line 17 - 115 00:05:30,840 --> 00:05:33,950 Aš dar kartą sakau, prašom duoti man ką nors, šiuo atveju eilutė. 116 00:05:33,950 --> 00:05:37,940 Ir tada į kitą eilutę, aš vadinu scanf, vėl, suteikiant jai formato kodą, 117 00:05:37,940 --> 00:05:39,310 bet šį kartą proc s. 118 00:05:39,310 --> 00:05:41,900 Ir tada šį kartą, aš suteikiant jai buferio. 119 00:05:41,900 --> 00:05:43,550 >> Dabar pastebėsite, aš ne naudojant ampersendas. 120 00:05:43,550 --> 00:05:47,120 Bet kodėl tai, kad tikriausiai Gerai čia? 121 00:05:47,120 --> 00:05:49,760 Nes tai, kas yra buferis jau? 122 00:05:49,760 --> 00:05:50,770 Tai jau rodyklę. 123 00:05:50,770 --> 00:05:51,650 Tai jau adresą. 124 00:05:51,650 --> 00:05:54,510 >> Ir tegul šis žodis "suklaidinti", leiskite man tiesiog paskambinkite ji s, pavyzdžiui, už 125 00:05:54,510 --> 00:05:55,050 paprastumas. 126 00:05:55,050 --> 00:05:58,250 Bet aš jį pavadino buferio, nes Apskritai, programavimo, jei turite 127 00:05:58,250 --> 00:06:02,130 riekė atmintis, kuri eilutė tikrai tiesiog yra, galite ją vadina buferio. 128 00:06:02,130 --> 00:06:04,460 Tai vieta, kurioje saugoma informacija. 129 00:06:04,460 --> 00:06:07,400 >> Panašus į dalykų, pavyzdžiui, "YouTube", kai jie buferio, todėl kalbėti, kad 130 00:06:07,400 --> 00:06:10,270 tiesiog reiškia tai atsisiųsti bitai nuo interneto ir saugoti juos 131 00:06:10,270 --> 00:06:14,160 vietos masyvas, vietos riekė atmintis taip kad jūs galite žiūrėti jį vėliau be 132 00:06:14,160 --> 00:06:16,830 tai praleidžiant arba kabinti ant jūs žaisdami atgal. 133 00:06:16,830 --> 00:06:20,930 >> Taigi, čia yra problema čia, nors, nes sakau scanf, tikėtis 134 00:06:20,930 --> 00:06:22,320 eilutė iš vartotojo. 135 00:06:22,320 --> 00:06:24,410 Štai adresas atminties riekė. 136 00:06:24,410 --> 00:06:26,180 Padėk eilutę ten. 137 00:06:26,180 --> 00:06:31,230 Kodėl tai jungiasi suteikti mums problemų, nors? 138 00:06:31,230 --> 00:06:33,490 >> Kas tai? 139 00:06:33,490 --> 00:06:35,510 Aš leidžiama naudotis kad atminties dalis? 140 00:06:35,510 --> 00:06:36,250 Žinai, aš nežinau. 141 00:06:36,250 --> 00:06:39,210 Kadangi buvo buferis buvo inicijuoti nieko? 142 00:06:39,210 --> 00:06:39,820 Tikrai ne. 143 00:06:39,820 --> 00:06:43,090 Ir todėl, ką mes buvo raginama šiukšlių vertė, kuri 144 00:06:43,090 --> 00:06:44,040 nėra formalus žodis. 145 00:06:44,040 --> 00:06:49,200 Tai tik reiškia, kad mes ne idėja, ką bitai viduje iš keturių baitų 146 00:06:49,200 --> 00:06:51,240 Aš paskirstomos buferio. 147 00:06:51,240 --> 00:06:52,450 >> Aš ne vadinamas malloc. 148 00:06:52,450 --> 00:06:53,940 Aš tikrai ne vadinamas GetString. 149 00:06:53,940 --> 00:06:56,380 Taigi, kas žino, kas yra iš tikrųjų viduje buferio? 150 00:06:56,380 --> 00:07:00,550 Ir dar sakau scanf aklai ten ir įdėti ką vartotojas turi įvesti. 151 00:07:00,550 --> 00:07:04,460 >> Taigi, kas gali sukelti mūsų kodekse, jeigu mes paleisti jį? 152 00:07:04,460 --> 00:07:05,700 Tikriausiai segfault. 153 00:07:05,700 --> 00:07:07,970 Gal ir ne, bet tikriausiai segfault. 154 00:07:07,970 --> 00:07:10,620 Ir aš sakau, o gal ir ne, nes kartais jūs, kartais 155 00:07:10,620 --> 00:07:11,380 jums nereikia gauti segfault. 156 00:07:11,380 --> 00:07:14,280 Kartais jūs tiesiog gauti pasisekė, bet tai vis dėlto bus 157 00:07:14,280 --> 00:07:15,340 mūsų programoje klaida. 158 00:07:15,340 --> 00:07:17,060 >> Taigi leiskite man eiti į priekį ir kaupti tai. 159 00:07:17,060 --> 00:07:18,280 Aš ruošiuosi tai padaryti senosios mokyklos būdas. 160 00:07:18,280 --> 00:07:23,825 Taigi Zaszczękać brūkšnys 0, Scanf-1, Scanf-1.c, Enter. 161 00:07:23,825 --> 00:07:24,720 Oi, per senas mokykla. 162 00:07:24,720 --> 00:07:26,550 Pažiūrėkime. 163 00:07:26,550 --> 00:07:28,440 Kur aš einu? 164 00:07:28,440 --> 00:07:29,700 O, char * buferis. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 O, ačiū - 167 00:07:35,130 --> 00:07:36,930 Išsaugoti Gerai - 168 00:07:36,930 --> 00:07:37,690 labai sena mokykla. 169 00:07:37,690 --> 00:07:38,900 Gerai, tai buvo o. 170 00:07:38,900 --> 00:07:41,720 >> Taigi, aš tiesiog išsaugoti failą po todėl, kad laikinas 171 00:07:41,720 --> 00:07:42,700 pakeisti šiuo metu senumo. 172 00:07:42,700 --> 00:07:46,090 Ir dabar aš turiu surinkti jį rankiniu būdu žvangėjimas. 173 00:07:46,090 --> 00:07:49,500 Ir dabar aš ruošiuosi eiti į priekį ir paleisti Scanf-1, Enter. 174 00:07:49,500 --> 00:07:50,290 Styginių prašom. 175 00:07:50,290 --> 00:07:51,600 Aš tipo "labas". 176 00:07:51,600 --> 00:07:54,070 >> Ir dabar, štai, kur, tiesą sakant, printf gali šiek tiek erzina. 177 00:07:54,070 --> 00:07:56,020 Tai nėra iš tikrųjų ketina segfault šiuo atveju. 178 00:07:56,020 --> 00:07:59,860 Printf yra šiek tiek ypatingas, nes tai taip super paprastai naudojami, kad 179 00:07:59,860 --> 00:08:03,570 iš esmės printf daro mums pritaria ir supranta, 180 00:08:03,570 --> 00:08:04,830 tai ne galioja rodyklę. 181 00:08:04,830 --> 00:08:09,080 Leiskite jį į save tiesiog atspausdinti iš skliausteliuose null, net 182 00:08:09,080 --> 00:08:13,340 nors tai nebūtinai tai, kas mes patys tikėtasi. 183 00:08:13,340 --> 00:08:16,940 >> Taigi, mes galime tikrai ne lengvai sukelti segfault su šia, bet aiškiai tai 184 00:08:16,940 --> 00:08:18,600 nėra elgesys norėjau. 185 00:08:18,600 --> 00:08:19,800 Taigi, kas yra paprastas sprendimas? 186 00:08:19,800 --> 00:08:25,650 Na, Scanf-2, leiskite man pasiūlyti, kad vietoj tikrųjų tik paskirstant 187 00:08:25,650 --> 00:08:30,100 char *, leiskite man būti šiek tiek protingesni apie tai, ir leiskite man skirti buferio 188 00:08:30,100 --> 00:08:32,940 kaip 16 simbolių seką. 189 00:08:32,940 --> 00:08:34,200 >> Taigi aš galiu tai padaryti įvairiais būdais pora. 190 00:08:34,200 --> 00:08:35,610 Galėčiau absoliučiai naudoti malloc. 191 00:08:35,610 --> 00:08:38,980 Bet aš galiu grįžti į savaitę du, kai Aš tiesiog reikia visa krūva 192 00:08:38,980 --> 00:08:39,620 simbolių. 193 00:08:39,620 --> 00:08:40,860 Tai tik matrica. 194 00:08:40,860 --> 00:08:44,870 Taigi leiskite man vietoj naujo buferio būti 16 simbolių masyvas. 195 00:08:44,870 --> 00:08:47,340 >> Ir dabar, kai galiu perduoti buferio - 196 00:08:47,340 --> 00:08:49,940 ir tai yra kažkas, mes ne kalbėti apie savaitę dvi - 197 00:08:49,940 --> 00:08:53,730 , bet jūs galite gydyti masyvą kaip nors tai adresas. 198 00:08:53,730 --> 00:08:56,390 Techniškai, kaip mes matėme, jie šiek tiek skiriasi. 199 00:08:56,390 --> 00:09:01,290 Bet Scanf bus ne tai, jei perduoti jį masyvo vardas, nes tai, ką 200 00:09:01,290 --> 00:09:05,030 Zaszczękać darys mums iš esmės gydyti masyvo, pavadinimą, kaip 201 00:09:05,030 --> 00:09:08,280 adresas su 16 baitų riekė. 202 00:09:08,280 --> 00:09:09,550 >> Taigi tai yra geriau. 203 00:09:09,550 --> 00:09:12,110 Tai reiškia, kad dabar galiu tikiuosi atlikite šiuos veiksmus. 204 00:09:12,110 --> 00:09:16,800 Leiskite nutolinti for a moment, ir padarysiu Scanf-2, rengiami Gerai. 205 00:09:16,800 --> 00:09:19,390 Dabar leiskite man nereikia turite velniop Scanf-2. 206 00:09:19,390 --> 00:09:22,430 Styginių prašom. "Labas". Ir tai atrodė, kad darbas šiuo metu. 207 00:09:22,430 --> 00:09:26,020 >> Bet ar gali kas nors pasiūlyti scenarijų , kurioje ji gali dar dirbti? 208 00:09:26,020 --> 00:09:28,550 Taip? 209 00:09:28,550 --> 00:09:30,640 Kažkas ilgesnis nei 16 simbolių. 210 00:09:30,640 --> 00:09:32,020 Ir iš tikrųjų, mes galime būti šiek tiek tiksliau. 211 00:09:32,020 --> 00:09:36,540 Kažkas ilgiau nei 15 simbolių, nes tikrai turime nepamiršti, 212 00:09:36,540 --> 00:09:39,920 kad mes turime tą Atgal nerijos velniop nulio netiesiogiai ne eilutės pabaigoje, 213 00:09:39,920 --> 00:09:42,950 kuris yra panaikinti Scanf paprastai rūpintis mums. 214 00:09:42,950 --> 00:09:46,210 >> Taigi leiskite man padaryti kažką panašaus - 215 00:09:46,210 --> 00:09:48,040 kartais mes galime tik palikti jį panašaus. 216 00:09:48,040 --> 00:09:50,630 Gerai, kad dabar mes sukeltas mūsų segmentavimo kaltės. 217 00:09:50,630 --> 00:09:51,000 Kodėl? 218 00:09:51,000 --> 00:09:54,940 Nes aš įvedėte daugiau nei 15 ženklai, ir todėl mes iš tikrųjų 219 00:09:54,940 --> 00:09:58,280 palietė atminties, kad aš iš tikrųjų neturėtų turėti. 220 00:09:58,280 --> 00:10:00,180 >> Taigi, kas iš tikrųjų sprendimas čia? 221 00:10:00,180 --> 00:10:02,210 Na, ką daryti, jei mes turime ilgesnį eilutę? 222 00:10:02,210 --> 00:10:03,960 Na, mes gal padaryti 32 baitų. 223 00:10:03,960 --> 00:10:05,160 Na, ką daryti, jei tai nėra pakankamai ilgas? 224 00:10:05,160 --> 00:10:06,040 Kaip apie 64 baitų? 225 00:10:06,040 --> 00:10:07,080 Ką daryti, jei tai nėra pakankamai ilgas? 226 00:10:07,080 --> 00:10:09,640 Kaip apie 128 arba 200 baitų? 227 00:10:09,640 --> 00:10:12,660 Kas iš tikrųjų yra sprendimas čia bendruoju atveju, jei mes neturime žinoti 228 00:10:12,660 --> 00:10:14,460 iš anksto, ką vartotojas ketina įvesti? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> Tai tiesiog rūšies didelis skausmas Oslas, būti sąžiningas, todėl 231 00:10:23,050 --> 00:10:29,050 CS50 biblioteka turi keletą dešimčių eilučių kodas, kuris bendrai įgyvendinti 232 00:10:29,050 --> 00:10:32,390 GetString eilutę taip, kad darome ne turi iš anksto žinoti, kas 233 00:10:32,390 --> 00:10:33,430 vartotojas ketina įvesti. 234 00:10:33,430 --> 00:10:37,370 Visų pirma, jei pažvelgti atgal cs50.c iš prieš dvi savaites, pamatysite 235 00:10:37,370 --> 00:10:40,480 kad GetString tiesų nenaudokite scanf tokiu būdu. 236 00:10:40,480 --> 00:10:43,720 Greičiau, jis nuskaito vieną simbolį metu. 237 00:10:43,720 --> 00:10:46,010 >> Kadangi vienas malonus dalykas, apie skaityti vieną simbolį yra mes galime 238 00:10:46,010 --> 00:10:48,490 garantuoti sau visada turėti bent vieną char. 239 00:10:48,490 --> 00:10:51,740 Galiu tiesiog paskelbti char, o tada imtis šie tikrai kūdikių žingsniai tik 240 00:10:51,740 --> 00:10:54,380 skaityti vieną simbolį ne laikas nuo klaviatūros. 241 00:10:54,380 --> 00:10:58,240 Ir tada, ką jūs pamatysite GetString ar yra kas kartą, kai jis baigsis, 242 00:10:58,240 --> 00:11:02,280 tarkim, 16 baitų atminties, ji naudoja malloc, ar pusbrolis dalį, į 243 00:11:02,280 --> 00:11:06,810 paskirstyti daugiau atminties, kopijavimo metai Atminties į naują, o tada nuskaityti 244 00:11:06,810 --> 00:11:09,900 kartu, gauti vieną simbolį vienu metu, ir kai jis baigsis, kad 245 00:11:09,900 --> 00:11:13,370 riekė atminties, meta jį šalin, griebtuvai didesnė riekė atminties, kopijuoja metai 246 00:11:13,370 --> 00:11:14,750 į naujas ir kartojasi. 247 00:11:14,750 --> 00:11:18,480 Ir tai tikrai skausmas iš tikrųjų įgyvendinti kažką taip paprasta, kaip 248 00:11:18,480 --> 00:11:19,710 gauti įvestis iš vartotojo. 249 00:11:19,710 --> 00:11:21,090 >> Todėl jūs galite naudoti scanf. 250 00:11:21,090 --> 00:11:22,430 Jūs galite naudoti kitas panašias funkcijas. 251 00:11:22,430 --> 00:11:25,420 Ir vadovėlių daug ir internete pavyzdžiai daryti, bet jie visi 252 00:11:25,420 --> 00:11:27,210 pažeidžiami problemas, kaip šis. 253 00:11:27,210 --> 00:11:29,550 Ir galiausiai, vis segfault rūšies erzina. 254 00:11:29,550 --> 00:11:30,680 Tai nėra gerai vartotojui. 255 00:11:30,680 --> 00:11:33,560 >> Tačiau blogiausiu atveju, ką jis iš esmės ĮDĖK 256 00:11:33,560 --> 00:11:37,160 kodas gresia? 257 00:11:37,160 --> 00:11:39,250 Kai atakos rūšis, potencialiai. 258 00:11:39,250 --> 00:11:41,680 Mes kalbėjome apie vieną tokį išpuolį - perpildyta kamino. 259 00:11:41,680 --> 00:11:44,660 Bet apskritai, jei jums leidžiama perpildymo buferis, kaip darėme 260 00:11:44,660 --> 00:11:48,070 pora savaičių atgal, o tik raštu daugiau nei "labas" ant kamino, jūs 261 00:11:48,070 --> 00:11:52,330 iš tiesų gali perimti potencialiai kompiuteris, arba bent jau gauti į duomenų, kurie 262 00:11:52,330 --> 00:11:53,510 nepriklauso jums. 263 00:11:53,510 --> 00:11:55,970 >> Taigi trumpai tariant, tai kodėl mes turime šių mokymo ratai. 264 00:11:55,970 --> 00:11:59,090 Bet dabar, mes pradėsime į juos išjungti, kaip mūsų programos nebereikia, 265 00:11:59,090 --> 00:12:00,610 nebūtinai, įėjimas iš vartotojo. 266 00:12:00,610 --> 00:12:03,960 Bet iš problemos atveju nustatyti šeši, Jūsų indėlis bus iš didžiulis 267 00:12:03,960 --> 00:12:07,520 žodynas failą su 150 kai keista tūkstančio žodžių. 268 00:12:07,520 --> 00:12:10,330 >> Taigi, jūs neturite jaudintis naudotojo savavališkai įėjimas. 269 00:12:10,330 --> 00:12:13,720 Mes suteiksime jums keletą prielaidų apie tą failą. 270 00:12:13,720 --> 00:12:20,340 Bet apie tai rodykles arba scanf klausimai arba naudotojo įvesties apskritai? 271 00:12:20,340 --> 00:12:24,450 >> Gerai, kad greitai pažvelgti tada vienu gale temą nuo prieš dvi savaites. 272 00:12:24,450 --> 00:12:28,590 Ir tai buvo tai iš struct sąvoka. 273 00:12:28,590 --> 00:12:34,180 Ne todėl, kad - tai sąvoka struct, kuris buvo ką? 274 00:12:34,180 --> 00:12:35,430 Ką konstrukto daryti mums? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> Nustatykite - 277 00:12:39,860 --> 00:12:41,710 atsiprašau? 278 00:12:41,710 --> 00:12:42,820 Nustatykite kintamojo tipą. 279 00:12:42,820 --> 00:12:44,410 Taigi rūšiuoti. 280 00:12:44,410 --> 00:12:46,180 Mes iš tikrųjų sujungus dvi temas. 281 00:12:46,180 --> 00:12:49,510 Taigi su Typedef, priminti, kad galime paskelbti mūsų pačių rūšį, pavyzdžiui, 282 00:12:49,510 --> 00:12:51,500 sinonimas, kaip eilutę char *. 283 00:12:51,500 --> 00:12:56,200 Tačiau naudojant Typedef ir struct, mes galime sukurti tikrai mūsų pačių duomenų struktūras. 284 00:12:56,200 --> 00:12:59,600 >> Pavyzdžiui, jei aš einu atgal į gedit čia tik akimirką, ir aš eiti į priekį 285 00:12:59,600 --> 00:13:08,230 ir padaryti kažką panašaus, leiskite man išsaugoti tai kaip, tarkim, structs.c 286 00:13:08,230 --> 00:13:10,840 laikinai, aš tik ketina eiti į priekį ir yra 287 00:13:10,840 --> 00:13:14,360 standardio.h, int main negalioja. 288 00:13:14,360 --> 00:13:18,960 Ir tada čia, tarkime, kad aš noriu parašyti programą, kuri saugo 289 00:13:18,960 --> 00:13:21,840 daug studentų iš daugelio namai, pavyzdžiui. 290 00:13:21,840 --> 00:13:24,430 Taigi tai tarsi registrarial duomenų bazė kai rūšiuoti. 291 00:13:24,430 --> 00:13:29,550 >> Taigi, jei man reikia vardo vienas studentas, aš galėtų padaryti kažką panašaus char * Vardas, 292 00:13:29,550 --> 00:13:31,570 ir aš padaryti kažką panašaus - 293 00:13:31,570 --> 00:13:34,410 iš tikrųjų, galime naudoti CS50 biblioteką tik akimirką, kad šis 294 00:13:34,410 --> 00:13:38,380 šiek tiek paprastesnis, todėl mes galime skolintis tie eilučių kodo dešimtys. 295 00:13:38,380 --> 00:13:39,340 Ir tegul tiesiog laikyti jį paprasta. 296 00:13:39,340 --> 00:13:42,610 Mes laikyti jį seka, ir dabar GetString. 297 00:13:42,610 --> 00:13:47,420 >> Taigi galiu reikalauti dabar, kad aš saugomas pavadinimas kai kurių studentų, ir namai 298 00:13:47,420 --> 00:13:50,240 kai studentas, tiesiog naudojant kintamuosius kaip tai darėme ir vieną savaitę. 299 00:13:50,240 --> 00:13:52,370 Bet manau, kad aš dabar norite paremti keli studentai. 300 00:13:52,370 --> 00:13:58,460 Gerai, kad mano instinktai yra padaryti styginių name2, gauna GetString, styginių 301 00:13:58,460 --> 00:14:01,370 house2 gauna GetString. 302 00:14:01,370 --> 00:14:05,850 Ir tada mūsų trečias studentas, darykime NAME3 GetString. 303 00:14:05,850 --> 00:14:09,170 >> Gerai, kad tai tikiuosi, ryškus jūs, kaip rūšies kvailas, 304 00:14:09,170 --> 00:14:11,580 nes šis procesas yra tikrai niekada baigsis, ir tik ketina 305 00:14:11,580 --> 00:14:13,130 kad mano kodas atrodo blogiau ir dar blogiau ir blogiau. 306 00:14:13,130 --> 00:14:14,810 Bet mes išspręsta ši per pirmąją savaitę du. 307 00:14:14,810 --> 00:14:19,450 Kas buvo mūsų gana švarus tirpalas kai mes turėjome kelis kintamuosius 308 00:14:19,450 --> 00:14:23,580 pats duomenų tipas, kurie visi yra susiję, tačiau mes nenorėjome šią žiaurią netvarka 309 00:14:23,580 --> 00:14:26,870 panašiai pavadintas kintamųjų? 310 00:14:26,870 --> 00:14:30,060 Ką mes darome vietoj? 311 00:14:30,060 --> 00:14:31,260 >> Taigi, manau, aš girdėjau keletą vietų. 312 00:14:31,260 --> 00:14:32,590 Mes turėjome masyvą. 313 00:14:32,590 --> 00:14:37,110 Jei norite keletą egzempliorių kažkas, kodėl ne mes išvalyti visa tai 314 00:14:37,110 --> 00:14:39,540 aukštyn ir tiesiog pasakyti, duok man masyve pavadinimai? 315 00:14:39,540 --> 00:14:41,640 >> Ir dabar, jau sunku kodekso 3. 316 00:14:41,640 --> 00:14:44,450 Ir tada man kitą masyvas vadinamas namus, ir tegul mane 317 00:14:44,450 --> 00:14:45,800 dabar sunku kodas 3. 318 00:14:45,800 --> 00:14:49,220 Ir aš masiškai išvalytos netvarka, kad aš ką tik sukūrėte. 319 00:14:49,220 --> 00:14:52,400 Dabar, aš vis dar sunkiai koduojami 3 dalių, tačiau net 3 gali dinamiškai iš 320 00:14:52,400 --> 00:14:54,350 vartotojas, ar argv ar pan. 321 00:14:54,350 --> 00:14:55,720 Taigi, tai jau švaresnis. 322 00:14:55,720 --> 00:15:00,100 >> Bet kas erzina apie tai, kad dabar, net jei vardas yra kažkaip 323 00:15:00,100 --> 00:15:02,280 iš esmės susijęs su studento namas - 324 00:15:02,280 --> 00:15:04,720 tai studentas, kad aš tikrai nori atstovauti - 325 00:15:04,720 --> 00:15:08,080 Dabar turiu dvi matricas, kurios yra lygiagrečios ta prasme, kad jie 326 00:15:08,080 --> 00:15:13,930 paties dydžio ir pavadinimai laikiklis 0 matyt žemėlapių namų laikiklio 0, 327 00:15:13,930 --> 00:15:16,600 ir pavadinimai laikiklis 1 žemėlapiai į namus laikiklis 1. 328 00:15:16,600 --> 00:15:19,280 Kitaip tariant, kad studentas gyvena tą namą, o kitas studentas 329 00:15:19,280 --> 00:15:20,530 gyvena toje kitoje namo. 330 00:15:20,530 --> 00:15:23,720 Bet tikrai tai gali būti padaryta dar švariai. 331 00:15:23,720 --> 00:15:24,990 >> Na, tai gali iš tikrųjų. 332 00:15:24,990 --> 00:15:28,730 Ir leiskite man eiti į priekį ir atidaryti iki structs.h, ir jūs 333 00:15:28,730 --> 00:15:31,130 pamatyti šią idėją čia. 334 00:15:31,130 --> 00:15:34,905 Atkreipkite dėmesį, kad aš naudojamas Typedef, kaip jūs užsiminė akimirką prieš paskelbti mūsų 335 00:15:34,905 --> 00:15:35,570 savo duomenų tipas. 336 00:15:35,570 --> 00:15:39,660 Bet aš taip pat naudojant šį kitą raktažodį vadinamas konstrukto, kuris suteikia man naują 337 00:15:39,660 --> 00:15:40,790 duomenų struktūra. 338 00:15:40,790 --> 00:15:43,980 >> Ir tai duomenų struktūra, galiu reikalauti vyksta turėti du dalykus viduje 339 00:15:43,980 --> 00:15:47,060 tai - eilutė vadinama vardas ir Styga vadinamas namas. 340 00:15:47,060 --> 00:15:49,820 Ir pavadinimas aš ruošiuosi duoti tai duomenų struktūra, vyksta 341 00:15:49,820 --> 00:15:51,005 būti vadinamas studentas. 342 00:15:51,005 --> 00:15:54,030 Galėčiau vadinti ką noriu, bet tai semantiškai padaryti 343 00:15:54,030 --> 00:15:55,810 jausti, kad man mano galvoje. 344 00:15:55,810 --> 00:15:59,160 >> Taigi dabar, jei aš atverti geresnę versiją Programos aš pradėjau rašyti 345 00:15:59,160 --> 00:16:00,390 ten, leiskite man slinkti į viršų. 346 00:16:00,390 --> 00:16:03,190 Ir dar šiek tiek daugiau eilučių kodo čia, bet leiskite man sutelkti dėmesį į 347 00:16:03,190 --> 00:16:04,160 viena akimirka. 348 00:16:04,160 --> 00:16:07,790 Aš paskelbė pastovus vadinamosios studentų ir sunkiai koduojami 3 dabar. 349 00:16:07,790 --> 00:16:11,110 Bet dabar, pastebėti, kaip švarus mano kodas prasideda gauti. 350 00:16:11,110 --> 00:16:15,030 >> Atsižvelgiant į 22, aš pareiškiu, masyvas studentams. 351 00:16:15,030 --> 00:16:18,760 Ir pastebėsite, kad studentas, matyt, dabar duomenų tipas. 352 00:16:18,760 --> 00:16:23,360 Nes bent šio failo viršuje, pranešimas, Aš įtraukti, kad antraštės failą 353 00:16:23,360 --> 00:16:24,820 kad aš išrautas tik prieš akimirką. 354 00:16:24,820 --> 00:16:28,820 Ir kad failo antraštės paprasčiausiai turėjo šis studentas apibrėžimas. 355 00:16:28,820 --> 00:16:32,470 >> Taigi dabar, aš sukūriau savo pasirinktinius duomenų tipo, kad C metų autoriai 356 00:16:32,470 --> 00:16:33,890 prieš nemanė anksto. 357 00:16:33,890 --> 00:16:34,570 Bet ne problema. 358 00:16:34,570 --> 00:16:35,870 Aš galiu padaryti jį sau. 359 00:16:35,870 --> 00:16:39,050 Taigi tai yra masyvas vadinamas studentų, kurių kiekvieno nariai 360 00:16:39,050 --> 00:16:41,100 yra studentas struktūra. 361 00:16:41,100 --> 00:16:44,270 Ir aš noriu, iš kurių trys masyve. 362 00:16:44,270 --> 00:16:46,030 >> Ir dabar, ką kiti Šios programos daryti? 363 00:16:46,030 --> 00:16:47,550 Man reikia kažką šiek tiek savavališkas. 364 00:16:47,550 --> 00:16:51,450 Taigi iš interneto 24 toliau, Aš kartoti 0-3. 365 00:16:51,450 --> 00:16:54,000 Aš tada prašyti vartotoją studento vardas. 366 00:16:54,000 --> 00:16:56,110 Ir tada aš naudoju GetString kaip ir anksčiau. 367 00:16:56,110 --> 00:16:59,410 Tada aš paprašyti studento namuose, ir aš naudoju GetString kaip ir anksčiau. 368 00:16:59,410 --> 00:17:01,780 >> Bet paskyrimas - šiek tiek nauja gabalas sintaksė - 369 00:17:01,780 --> 00:17:07,010 Aš vis dar gali indeksas i-ojo studentas, bet kaip man prie konkrečių duomenų 370 00:17:07,010 --> 00:17:08,354 lauko viduje struct? 371 00:17:08,354 --> 00:17:11,770 Na, ką, matyt, Naujas kūrinys sintaksė? 372 00:17:11,770 --> 00:17:13,339 Tai tiesiog dot operatorius. 373 00:17:13,339 --> 00:17:14,510 >> Mes tikrai matėme anksčiau. 374 00:17:14,510 --> 00:17:17,819 Jūs matėte jį pset penkių, jei jūs nėrė jau su bitmap failus. 375 00:17:17,819 --> 00:17:22,372 Bet taškas reiškia tiesiog viduje tai konstrukto ar kelis laukus, suteikti tašką 376 00:17:22,372 --> 00:17:24,510 pavadinimas arba duoti man dot namą. 377 00:17:24,510 --> 00:17:28,690 Tai reiškia, nueikite struct ir gauti tuos ypatingas sritis. 378 00:17:28,690 --> 00:17:30,200 >> Ką šios programos poilsio daryti? 379 00:17:30,200 --> 00:17:31,190 Tai ne viskas, kad seksuali. 380 00:17:31,190 --> 00:17:34,640 Atkreipkite dėmesį, kad aš kartoti 0-3 kartą, ir aš tiesiog sukurti Anglų 381 00:17:34,640 --> 00:17:40,500 frazė lyg taip ir taip yra tokia ir toks namas, einančios dot pavadinimą nuo 382 00:17:40,500 --> 00:17:43,320 i-osios studentų ir jų namas taip pat. 383 00:17:43,320 --> 00:17:47,560 >> Ir tada galiausiai, dabar mes pradėsime gauti analinis apie tai, kad dabar mes 384 00:17:47,560 --> 00:17:49,580 susipažinęs su tuo, ką malloc ir kitos funkcijos buvo 385 00:17:49,580 --> 00:17:50,570 daro visą šį laiką. 386 00:17:50,570 --> 00:17:54,220 Kodėl aš turiu atlaisvinti tiek vardą ir namai, nors aš 387 00:17:54,220 --> 00:17:56,960 neragino malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString padarė. 389 00:17:58,020 --> 00:18:00,930 Ir tai buvo purvinas maža paslaptis keletą savaičių, tačiau GetString turi 390 00:18:00,930 --> 00:18:03,530 yra nesandarus atmintį visame įdėti visą semestrą iki šiol. 391 00:18:03,530 --> 00:18:05,990 Ir valgrand pagaliau atskleisti tai mums. 392 00:18:05,990 --> 00:18:10,730 >> Bet tai nėra baisi, nes aš žinau, kad galiu paprasčiausiai išlaisvinti pavadinimą 393 00:18:10,730 --> 00:18:15,750 ir namas, nors techniškai, į būti super, super saugus, aš turėtų būti 394 00:18:15,750 --> 00:18:17,890 daryti kai kurių klaidų tikrinimo čia. 395 00:18:17,890 --> 00:18:19,040 Koks yra jūsų instinktai jums sakau? 396 00:18:19,040 --> 00:18:22,480 Ką aš turėčiau būti patikrinti kol aš išlaisvinti tai, kas 397 00:18:22,480 --> 00:18:25,470 eilutę, dar žinomas kaip kurie char *? 398 00:18:25,470 --> 00:18:33,460 >> Aš tikrai turėtų būti patikrinti, ar studentai laikiklis i dot pavadinimas nėra 399 00:18:33,460 --> 00:18:34,840 lygi NULL. 400 00:18:34,840 --> 00:18:40,400 Tada jis bus OK, kad eiti į priekį ir nemokamai kad rodyklė, ir tas pats arba kitas 401 00:18:40,400 --> 00:18:41,160 taip pat. 402 00:18:41,160 --> 00:18:46,860 Jei studentai laikiklis i dot namas nėra lygi null, tai dabar bus apsaugoti 403 00:18:46,860 --> 00:18:52,520 prieš kampe atveju, kai GetString grįžta kažką panašaus null. 404 00:18:52,520 --> 00:18:57,310 Ir mes matėme momentas prieš printf bus apsaugoti mus čia tiesiog pasakyti 405 00:18:57,310 --> 00:18:58,990 null, kuris ketina atrodo keistai. 406 00:18:58,990 --> 00:19:02,340 Bet bent jau nebus segfault, kaip matėme. 407 00:19:02,340 --> 00:19:05,990 >> Na, leiskite man padaryti vienas kitas dalykas čia. structs-0 yra tipo kvailas programos 408 00:19:05,990 --> 00:19:09,700 nes man reikia įvesti visus šiuos duomenis, ir tada jis prarado, kai programa baigiasi. 409 00:19:09,700 --> 00:19:10,940 Bet leiskite man eiti į priekį ir tai padaryti. 410 00:19:10,940 --> 00:19:12,830 Leiskite terminalą langas šiek tiek didesni. 411 00:19:12,830 --> 00:19:17,000 Leiskite structs-1, kuris yra nauja versija tai. 412 00:19:17,000 --> 00:19:18,520 >> Aš padidinti šiek tiek. 413 00:19:18,520 --> 00:19:21,620 O dabar leiskite man paleisti tašką velniop structs-1. 414 00:19:21,620 --> 00:19:22,590 Studento vardas, pavardė - 415 00:19:22,590 --> 00:19:31,500 Davidas Mather, darykime Rob Kirkland, darykime Lauren Leverett. 416 00:19:31,500 --> 00:19:33,650 Kas įdomu dabar paskyrimas - 417 00:19:33,650 --> 00:19:35,540 ir aš tik žinau tai, nes Parašiau programą - 418 00:19:35,540 --> 00:19:38,930 ten failas dabar mano dabartinis katalogas vadinama students.csv. 419 00:19:38,930 --> 00:19:40,420 Kai kurie iš jūsų galėjo matyti juos pateikti realiame pasaulyje. 420 00:19:40,420 --> 00:19:42,980 >> Kokia CSV failą? 421 00:19:42,980 --> 00:19:44,170 Kableliais atskirtų reikšmių. 422 00:19:44,170 --> 00:19:46,670 Tai tarsi vargšų portalo Excel failą. 423 00:19:46,670 --> 00:19:50,580 Tai eilučių ir stulpelių lentelė galite atidaryti, pavyzdžiui, "Excel" programa, 424 00:19:50,580 --> 00:19:51,800 arba numerius ant Mac. 425 00:19:51,800 --> 00:19:55,180 >> Ir jei aš atidaryti šį failą čia gedit, Skelbimas - ir skaičiai yra ne ten. 426 00:19:55,180 --> 00:19:57,360 Tai tik gedit pasakoja man eilučių numerius. 427 00:19:57,360 --> 00:19:59,740 Pranešimas apie pirmoje eilutėje ši failas yra Dovydas ir Mather. 428 00:19:59,740 --> 00:20:01,450 Kitą eilutę is Rob kablelis Kirkland. 429 00:20:01,450 --> 00:20:04,170 Ir trečia linija Lauren kablelis Leverett. 430 00:20:04,170 --> 00:20:05,480 >> Taigi, ką aš sukurta? 431 00:20:05,480 --> 00:20:09,580 Aš dabar parašyta C programą, kuri efektyviai gali generuoti skaičiuoklės 432 00:20:09,580 --> 00:20:11,840 kad galima atidaryti programa, kaip "Excel". 433 00:20:11,840 --> 00:20:15,520 Ne visi, kad įtikinamų duomenų rinkinys, bet jei turite daug didesnius gabaliukus 434 00:20:15,520 --> 00:20:18,440 duomenys, kad jūs iš tikrųjų nori manipuliuoti ir padaryti diagramas ir 435 00:20:18,440 --> 00:20:21,260 patinka, tai turbūt vienas būdas sukurti šių duomenų. 436 00:20:21,260 --> 00:20:25,370 Be to, CSV ataskaitose yra tikrai super dažnas tiesiog laikyti paprastus duomenis - 437 00:20:25,370 --> 00:20:28,940 "Yahoo" Finansai, pavyzdžiui, jei jūs gaunate akcijų kursus per savo vadinamąją 438 00:20:28,940 --> 00:20:33,180 API nemokama paslauga, kuri leidžia jums gauti dabartinę up-to-data atsargas 439 00:20:33,180 --> 00:20:35,650 citatos įmonėms, jie pateikti duomenis atgal 440 00:20:35,650 --> 00:20:37,800 super paprasta CSV formatu. 441 00:20:37,800 --> 00:20:39,380 >> Taigi, kaip mes tai darome? 442 00:20:39,380 --> 00:20:42,530 Na pastebėsite, dauguma šios programos beveik tas pats. 443 00:20:42,530 --> 00:20:46,870 Tačiau pastebėti žemyn čia, o ne spausdinti studentai out, on line 35 444 00:20:46,870 --> 00:20:51,040 toliau, galiu reikalauti, kad aš taupyti mokiniai į diską, taip įrašant failą. 445 00:20:51,040 --> 00:20:53,630 >> Taigi pastebėti aš skelbiantis failą * - 446 00:20:53,630 --> 00:20:57,260 dabar, tai yra natūra asmuo, kuris pagal C anomalija Dėl kokios nors priežasties, failas yra visi dangteliai, 447 00:20:57,260 --> 00:21:00,690 kuris yra ne taip, kaip daugelyje kitų duomenų tipų į C. Bet tai yra built-in 448 00:21:00,690 --> 00:21:02,320 duomenų tipas, FILE *. 449 00:21:02,320 --> 00:21:05,900 Ir aš skelbiantis žymiklį į failą, kaip jūs galite galvoti apie tai. 450 00:21:05,900 --> 00:21:08,070 >> fopen reiškia atvirą failą. 451 00:21:08,070 --> 00:21:09,470 Ką failą norite atidaryti? 452 00:21:09,470 --> 00:21:12,620 Noriu atidaryti failą, kad aš savavališkai skambinti students.csv. 453 00:21:12,620 --> 00:21:14,480 Galėčiau skambinti, kad ką noriu. 454 00:21:14,480 --> 00:21:15,200 >> Ir tada imtis atspėti. 455 00:21:15,200 --> 00:21:18,960 Ką Antrasis argumentas į fopen tikriausiai reiškia? 456 00:21:18,960 --> 00:21:21,480 Teisingai, w rašyti, galėtų būti r skaityti. 457 00:21:21,480 --> 00:21:24,120 Nėra už Papildyti jei norite įterpti eilučių, o ne 458 00:21:24,120 --> 00:21:25,200 perrašyti visą dalykas. 459 00:21:25,200 --> 00:21:28,005 >> Bet aš tik noriu sukurti šį failą vieną kartą, todėl aš naudoti citata citatos w. 460 00:21:28,005 --> 00:21:31,880 Ir aš žinau, kad tik gražu skaityti dokumentus, ar vyras puslapis. 461 00:21:31,880 --> 00:21:35,100 Jei failas nėra lygus nuliui, - kitaip tariant, jei nieko nutiko ten - 462 00:21:35,100 --> 00:21:37,820 leiskite man pakartoti per studentai 0-3. 463 00:21:37,820 --> 00:21:40,410 >> Ir dabar pastebėsite, kad kažkas vis tiek šiek tiek skiriasi 464 00:21:40,410 --> 00:21:42,110 apie linijos 41 čia. 465 00:21:42,110 --> 00:21:42,960 Tai ne printf. 466 00:21:42,960 --> 00:21:46,530 Tai fprintf failui printf. 467 00:21:46,530 --> 00:21:47,790 Taigi, ji ketina rašyti į failą. 468 00:21:47,790 --> 00:21:48,860 Kuris failas? 469 00:21:48,860 --> 00:21:53,630 Tas, kurio žymeklis galite nurodyti kaip pirmojo argumento. 470 00:21:53,630 --> 00:21:55,940 >> Tada mes nurodyti format string. 471 00:21:55,940 --> 00:21:59,660 Tada mes nurodome, ką styginių norime įjunkite pirmą proc s ir 472 00:21:59,660 --> 00:22:04,320 tada kitas kintamasis arba antra proc s. 473 00:22:04,320 --> 00:22:06,760 Tada mes uždaryti su fclose failą. 474 00:22:06,760 --> 00:22:09,380 Nei aš atlaisvinti atminties, kaip ir anksčiau, nors Turėčiau grįžti ir pridėti 475 00:22:09,380 --> 00:22:10,540 kai for null patikrinimus. 476 00:22:10,540 --> 00:22:12,090 >> Štai ir viskas. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, fclose suteikia man gebėjimas kurti tekstinius failus. 478 00:22:16,960 --> 00:22:19,640 Dabar jūs matysite problemą, penkių, kuri apima vaizdus, ​​jūs naudojate 479 00:22:19,640 --> 00:22:20,990 dvejetainiai failai vietoj. 480 00:22:20,990 --> 00:22:24,200 Bet iš esmės, idėja yra ta pati, nors funkcijos jums 481 00:22:24,200 --> 00:22:28,710 pamatyti, yra šiek tiek kitokia. 482 00:22:28,710 --> 00:22:32,580 >> Taigi viesulas kelionė, bet jūs gausite per daug susipažinę su byla I/O-- 483 00:22:32,580 --> 00:22:34,960 įvesties ir išvesties - su pset penkių. 484 00:22:34,960 --> 00:22:38,607 Ir visą informaciją apie klausimus pradiniai pagrindai čia? 485 00:22:38,607 --> 00:22:39,857 Taip? 486 00:22:39,857 --> 00:22:41,880 487 00:22:41,880 --> 00:22:43,710 >> Ką daryti, jei bandysite atlaisvinti nulinę vertę? 488 00:22:43,710 --> 00:22:48,880 Manau, jei nemokamai pakliuvusiam šiek tiek patogesnis, galite 489 00:22:48,880 --> 00:22:49,890 potencialiai segfault. 490 00:22:49,890 --> 00:22:54,160 Perdavimai tai nulis yra blogai, nes aš ne mano, nemokama trukdo patikrinti jums, 491 00:22:54,160 --> 00:22:57,330 nes tai gali būti atliekos laiko dėl to daryti pati už 492 00:22:57,330 --> 00:22:59,022 kiekvienas pasaulyje. 493 00:22:59,022 --> 00:23:00,590 Geras klausimas, nors. 494 00:23:00,590 --> 00:23:04,300 >> Visos teisės, todėl šios rūšies gauna mums įdomi tema. 495 00:23:04,300 --> 00:23:07,010 Problemos rinkinio tema yra penki ekspertizės. 496 00:23:07,010 --> 00:23:08,420 Bent jau dalis šios problemos rinkinį. 497 00:23:08,420 --> 00:23:12,030 Teismai paprastai reiškia atkūrimas informaciją, kuri gali arba 498 00:23:12,030 --> 00:23:14,110 negali būti ištrintas sąmoningai. 499 00:23:14,110 --> 00:23:18,680 Ir taip aš maniau aš jums greitai skonis, kas iš tikrųjų vyksta visi 500 00:23:18,680 --> 00:23:21,230 tai po laiko dangtis kompiuterio. 501 00:23:21,230 --> 00:23:23,960 >> Pavyzdžiui, jei jūs turite viduje jūsų nešiojamas ar jūsų stalinis kompiuteris 502 00:23:23,960 --> 00:23:28,040 kietasis diskas, tai arba mechaninis prietaisas, kuris iš tikrųjų sukasi - 503 00:23:28,040 --> 00:23:31,650 ten apvalūs dalykų vadinamas plokšteles kad atrodo gana patinka tai, ką aš 504 00:23:31,650 --> 00:23:34,540 tiesiog turėjo ant ekrano čia, nors tai vis senosios mokyklos. 505 00:23:34,540 --> 00:23:37,370 Tai trijų su puse colių kietasis diskas. 506 00:23:37,370 --> 00:23:40,070 Ir tris ir puse colių reiškia iš su iš dalykas, kai jūs diegiate 507 00:23:40,070 --> 00:23:40,890 į kompiuterį. 508 00:23:40,890 --> 00:23:44,890 >> Daugelis iš jūsų vaikinai savo nešiojamus kompiuterius dabar turi kietojo kūno diskus, SSD, 509 00:23:44,890 --> 00:23:46,260 kurios nėra judančių dalių. 510 00:23:46,260 --> 00:23:49,170 Jie daugiau kaip RAM ir mažiau kaip šie mechaniniai įtaisai. 511 00:23:49,170 --> 00:23:51,450 Bet idėjos yra vis dar tas pats, tikrai, kiek jie susiję 512 00:23:51,450 --> 00:23:52,790 kad problema nustatyti penkis. 513 00:23:52,790 --> 00:23:57,400 >> Ir jei jūs manote apie dabar kietasis diskas yra yra apskritimas, kuris 514 00:23:57,400 --> 00:23:58,930 Aš atkreipti, kaip tai čia. 515 00:23:58,930 --> 00:24:02,290 Kai kuriate failą savo kompiuteryje, ar tai VSD, arba 516 00:24:02,290 --> 00:24:06,610 Šiuo atveju, vyresni mokyklos kietasis diskas, kad byla apima keletą bitai. 517 00:24:06,610 --> 00:24:10,510 Tarkime, kad tai tik 0 ir 1, visa krūva 0s ir 1s. 518 00:24:10,510 --> 00:24:11,660 Taigi tai yra mano visą kietąjį diską. 519 00:24:11,660 --> 00:24:13,225 Tai, matyt, gana didelis failas. 520 00:24:13,225 --> 00:24:18,080 Ir ji naudoja iki 0s ir 1s tuo dalis fizinio patiekalas. 521 00:24:18,080 --> 00:24:19,750 >> Na, kas tai yra fizinis dalis? 522 00:24:19,750 --> 00:24:25,310 Na, paaiškėja, kad kietajame diske, bent jau tokio tipo, yra 523 00:24:25,310 --> 00:24:27,340 šių mažų mažai magnetinių dalelių. 524 00:24:27,340 --> 00:24:32,630 Ir jie iš esmės turi į šiaurę ir pietinį polius jiems taip, kad jei 525 00:24:32,630 --> 00:24:35,710 įjungti vieną iš šių magnetinių dalelių Tokiu būdu, jūs galite sakyti, kad tai 526 00:24:35,710 --> 00:24:36,720 atstovaujančių 1. 527 00:24:36,720 --> 00:24:39,340 Ir jei jis aukštyn kojom į pietus iki į šiaurę, jūs galite sakyti, kad tai 528 00:24:39,340 --> 00:24:40,390 atstovaujančių 0. 529 00:24:40,390 --> 00:24:43,660 >> Taigi realiame fiziniame pasaulyje, tai kaip galima atstovauti kažką 530 00:24:43,660 --> 00:24:45,670 dvejetainis būklė 0 ir 1. 531 00:24:45,670 --> 00:24:46,720 Taigi, kad viskas failas. 532 00:24:46,720 --> 00:24:49,300 Yra visa krūva magnetinio dalelių, kurios jų šiuo būdu arba 533 00:24:49,300 --> 00:24:51,920 Tokiu būdu, kuriant modelius iš 0s ir 1s. 534 00:24:51,920 --> 00:24:56,760 >> Tačiau paaiškėja, kai įrašote failą, tam tikra informacija yra saugomi atskirai. 535 00:24:56,760 --> 00:25:00,000 Taigi tai yra staliukas, katalogas, taip sakant. 536 00:25:00,000 --> 00:25:05,810 Ir aš vadinu tai stulpelio pavadinimą ir Aš vadinu tai stulpelio vietą. 537 00:25:05,810 --> 00:25:08,850 >> Ir aš ruošiuosi pasakyti, tarkime, tai yra mano CV. 538 00:25:08,850 --> 00:25:14,050 Mano resume.doc yra saugomi vieta, tarkim 123. 539 00:25:14,050 --> 00:25:15,390 Aš visada eiti šiuo numeriu. 540 00:25:15,390 --> 00:25:18,810 Tačiau pakanka pasakyti, kad tiesiog patinka RAM, galite imtis kietąjį diską 541 00:25:18,810 --> 00:25:22,350 tai Gigabyte arba 200 GB arba terabaito, ir jūs galite 542 00:25:22,350 --> 00:25:23,750 skaičius visi baitai. 543 00:25:23,750 --> 00:25:26,480 Galite suskaičiuoti visus 8 bitai gabaliukus. 544 00:25:26,480 --> 00:25:29,030 >> Taigi, mes pasakyti, kad tai yra vieta 123. 545 00:25:29,030 --> 00:25:32,070 Taigi, šis katalogas viduje savo veiklos sistema prisimena, kad mano 546 00:25:32,070 --> 00:25:34,250 CV yra vietoje 123. 547 00:25:34,250 --> 00:25:36,850 Bet jis bus įdomus, kai ištrinti failą. 548 00:25:36,850 --> 00:25:37,820 >> Taigi, pavyzdžiui - 549 00:25:37,820 --> 00:25:40,790 ir, laimei, daugelyje pasaulio šalių yra sugauti ant to - kas atsitinka, kai 550 00:25:40,790 --> 00:25:45,040 jūs vilkite failą į savo "Mac OS šiukšliadėžę ar jūsų šiukšlinę Windows? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 Kas daro, kad tikslas? 553 00:25:50,510 --> 00:25:53,860 Tai akivaizdžiai atsikratyti failą, bet ką iš vilkdami aktas ir 554 00:25:53,860 --> 00:25:57,550 nuleisti į savo šiukšliadėžę arba jūsų Šiukšlių padaryti kompiuteryje? 555 00:25:57,550 --> 00:25:59,230 >> Absoliučiai nieko, tikrai. 556 00:25:59,230 --> 00:26:00,320 Tai tiesiog kaip aplanką. 557 00:26:00,320 --> 00:26:01,800 Tai specialų aplanką, būti tikri. 558 00:26:01,800 --> 00:26:04,460 Bet ji iš tikrųjų ištrinti failą? 559 00:26:04,460 --> 00:26:06,780 >> Na, ne, nes kai kurie iš jūsų turbūt buvę tarsi oh damn, tu ne 560 00:26:06,780 --> 00:26:07,420 tai daryti. 561 00:26:07,420 --> 00:26:09,130 Taigi jūs dukart spustelėkite Šiukšlių arba šiukšlinę. 562 00:26:09,130 --> 00:26:11,630 Jūs baksnodavo aplink ir jūs atsigavo tiesiog vilkite jį failą 563 00:26:11,630 --> 00:26:12,110 iš ten. 564 00:26:12,110 --> 00:26:14,420 Taigi aišku, tai nebūtinai jį pašalinti. 565 00:26:14,420 --> 00:26:15,990 >> Gerai, jūs protingesni nei tai. 566 00:26:15,990 --> 00:26:18,860 Jūs žinote, kad tiesiog vilkite jį į Šiukšlių arba šiukšlinė nereiškia 567 00:26:18,860 --> 00:26:19,930 jūs ištuštinti šiukšlinę. 568 00:26:19,930 --> 00:26:24,110 Taigi jums eiti į meniu, o jūs sakote, Ištuštintišiukšliadėžę ar Išvalyti šiukšlinę. 569 00:26:24,110 --> 00:26:25,360 Kas tada atsitiks? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> Taip, taip, jis bus ištrintas labiau. 572 00:26:32,530 --> 00:26:37,660 Bet visa tai atsitiks tai. 573 00:26:37,660 --> 00:26:45,350 Kompiuteris pamiršta, kur resume.doc buvo. 574 00:26:45,350 --> 00:26:47,400 >> Bet kas nepasikeitė, matyt, paveikslėlyje? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 Bitai, 0s ir 1s, kad galiu reikalauti yra vietoje kai kurių fizinis aspektas 577 00:26:55,570 --> 00:26:56,280 aparatūros. 578 00:26:56,280 --> 00:26:57,110 Jie vis dar ten. 579 00:26:57,110 --> 00:26:58,930 Tai tiesiog kompiuteris pamiršote, ką jie yra. 580 00:26:58,930 --> 00:27:03,160 >> Taigi tai iš esmės išlaisvino failo bitai, kad jie gali būti pakartotinai naudojamas. 581 00:27:03,160 --> 00:27:06,940 Bet ne iki jums sukurti daugiau failų, ir daugiau failų ir daugiau failai bus 582 00:27:06,940 --> 00:27:12,150 probabilistically, tie 0s ir 1s, tie magnetinės dalelės, gauti pakartotinai, 583 00:27:12,150 --> 00:27:16,220 aukštyn arba dešinėje pusėje aukštyn, už kitos bylos, 0s ir 1s. 584 00:27:16,220 --> 00:27:17,980 >> Taigi jūs turite tai laiko langas. 585 00:27:17,980 --> 00:27:19,860 Ir tai nėra nuspėjama ilgis, tikrai. 586 00:27:19,860 --> 00:27:22,240 Tai priklauso nuo jūsų kietajame dydžio vairuoti ir kiek failų turite ir 587 00:27:22,240 --> 00:27:23,490 kaip greitai jums padaryti naujus. 588 00:27:23,490 --> 00:27:27,050 Bet ten tai laiko langas metu kurioje tas failas vis dar puikiai 589 00:27:27,050 --> 00:27:27,770 atlygintinos. 590 00:27:27,770 --> 00:27:31,050 >> Taigi, jei jūs kada nors naudoti programas, pavyzdžiui, "McAfee" arba "Norton bandys susigrąžinti 591 00:27:31,050 --> 00:27:35,680 duomenys, visi jie daro bando susigrąžinti šį vadinamąjį katalogas 592 00:27:35,680 --> 00:27:37,340 išsiaiškinti, kur yra jūsų failas. 593 00:27:37,340 --> 00:27:40,605 Ir kartais Norton ir sakys: failas yra 93% atlygintinos. 594 00:27:40,605 --> 00:27:42,020 Na, ką tai reiškia? 595 00:27:42,020 --> 00:27:45,690 Tai tiesiog reiškia, kad kai kitų failų atsitiktinai galų gale naudojant, tarkim, 596 00:27:45,690 --> 00:27:48,920 tie iš jūsų originalaus failo bitai. 597 00:27:48,920 --> 00:27:51,950 >> Taigi, kas iš tikrųjų dalyvauja atgauti duomenis? 598 00:27:51,950 --> 00:27:55,720 Na, jei jūs neturite ką nors panašaus "Norton" iš anksto įdiegta jūsų kompiuteryje, 599 00:27:55,720 --> 00:27:59,510 geriausia, ką kartais gali padaryti, tai ieškoti ne visą kietąjį diską ieškote 600 00:27:59,510 --> 00:28:00,510 modelius bitai. 601 00:28:00,510 --> 00:28:05,350 Ir vienas iš probleminių temų rinkinys penkių, kad jums ieškoti 602 00:28:05,350 --> 00:28:09,570 ekvivalentas kietąjį diską, teismo vaizdas iš Compact Flash kortelė nuo 603 00:28:09,570 --> 00:28:13,660 skaitmeninis fotoaparatas, ieškant 0s ir 1s, paprastai, aukštos 604 00:28:13,660 --> 00:28:16,720 tikimybė, atstovauti pradžia JPEG vaizdas. 605 00:28:16,720 --> 00:28:21,120 >> Ir vaikinai gali susigrąžinti tuos vaizdus darant prielaidą, jei matau šį modelį 606 00:28:21,120 --> 00:28:24,380 bitai dėl teismo vaizdą, didelė tikimybė, kad prekių ženklai 607 00:28:24,380 --> 00:28:25,650 iš JPEG pradžia. 608 00:28:25,650 --> 00:28:29,520 Ir jei matau, tą patį modelį vėl, kad tikriausiai žymi pradžią 609 00:28:29,520 --> 00:28:32,440 kitas JPEG, o kitas JPEG, ir kitų JPEG. 610 00:28:32,440 --> 00:28:34,970 Ir tai paprastai kaip duomenų atkūrimo veiks. 611 00:28:34,970 --> 00:28:37,870 Kas yra malonu apie JPEG yra nors failo formatas pati yra šiek tiek 612 00:28:37,870 --> 00:28:44,400 sudėtingas, kiekvienas toks pradžia failas yra iš tikrųjų gana atpažįstami 613 00:28:44,400 --> 00:28:47,370 ir paprastas, kaip pamatysite, jei jūs neturite jau. 614 00:28:47,370 --> 00:28:50,270 >> Taigi, galime atidžiau pažvelgti apačioje kaip tiksliai kas buvo gaubtas 615 00:28:50,270 --> 00:28:53,360 vyksta, ir kas tai 0s ir 1s yra, kad duoti jums šiek tiek daugiau 616 00:28:53,360 --> 00:28:55,330 kontekstas šiuo konkrečiu iššūkiu. 617 00:28:55,330 --> 00:28:55,510 >> [VIDEO PLAYBACK] 618 00:28:55,510 --> 00:28:58,700 >> -Kur jūsų kompiuteryje saugo labiausiai jos nuolatinių duomenų. 619 00:28:58,700 --> 00:29:03,390 Norėdami tai padaryti, duomenys keliauja iš RAM kartu su programinės įrangos signalus, kad pasakyti 620 00:29:03,390 --> 00:29:06,110 kietasis diskas, kaip saugoti tuos duomenis. 621 00:29:06,110 --> 00:29:09,410 Kietojo disko grandinės išversti tos į įtampos signalus 622 00:29:09,410 --> 00:29:10,870 svyravimai. 623 00:29:10,870 --> 00:29:14,970 Tai, savo ruožtu, valdyti kietojo disko judančių dalių, kai kurie mažai 624 00:29:14,970 --> 00:29:17,910 judančios dalys liko modernus kompiuteris. 625 00:29:17,910 --> 00:29:22,130 >> Kai kurie iš signalus valdyti variklį kuris sukasi metalo dengtos plokšteles. 626 00:29:22,130 --> 00:29:25,470 Jūsų duomenys yra faktiškai saugojamas apie šias plokšteles. 627 00:29:25,470 --> 00:29:28,610 Kiti signalai judėti skaityti / rašyti vadovai skaityti arba 628 00:29:28,610 --> 00:29:30,710 įrašyti duomenis į plokšteles. 629 00:29:30,710 --> 00:29:35,450 Ši technika taip tiksliai, kad žmogaus plaukai net negalėjo praeiti tarp 630 00:29:35,450 --> 00:29:37,280 vadovai ir verpimo plokšteles. 631 00:29:37,280 --> 00:29:40,316 Tačiau visa tai veikia ne siaubingas greičiu. 632 00:29:40,316 --> 00:29:40,660 >> [PABAIGA VIDEO PLAYBACK] 633 00:29:40,660 --> 00:29:42,190 >> Davidas Malan: Padidinti mažai giliau dabar kas 634 00:29:42,190 --> 00:29:44,360 iš tikrųjų dėl šių plokšteles. 635 00:29:44,360 --> 00:29:44,720 >> [VIDEO PLAYBACK] 636 00:29:44,720 --> 00:29:47,660 >> -Pažvelkime, ką mes tik pamačiau sulėtintai. 637 00:29:47,660 --> 00:29:51,710 Kai trumpas impulsas elektros energijos siunčiami į skaitymo / rašymo galvutės, jei salto 638 00:29:51,710 --> 00:29:54,650 apie mažą elektromagnetinį už per sekundės dalį. 639 00:29:54,650 --> 00:29:58,970 Magnetas sukuria lauką, kuris pakeitimai yra maža, maža poliškumas 640 00:29:58,970 --> 00:30:02,850 dalis metalo dalelių, kurios sluoksnis kiekvieną patiekalas paviršiaus. 641 00:30:02,850 --> 00:30:05,940 >> Modelis serija šių mažų, už-up sritys diske 642 00:30:05,940 --> 00:30:08,470 atstovauja vieną bitą duomenys, kaip dvejetainis skaičius 643 00:30:08,470 --> 00:30:10,530 sistema, kurią naudoja kompiuterius. 644 00:30:10,530 --> 00:30:13,775 Dabar, jei srovė yra siunčiami į vieną pusę per skaitymo / rašymo galvutės, plotas 645 00:30:13,775 --> 00:30:15,970 yra poliarizuota viena kryptimi. 646 00:30:15,970 --> 00:30:17,950 Jei srovė yra siunčiami priešinga kryptimi, 647 00:30:17,950 --> 00:30:19,930 poliarizacija yra atstatomas. 648 00:30:19,930 --> 00:30:22,370 >> Kaip jūs gaunate duomenis išjungti kietąjį diską? 649 00:30:22,370 --> 00:30:24,090 Tiesiog pakeisti procesą. 650 00:30:24,090 --> 00:30:26,550 Taigi tai, kad diske dalelės kad gauti srovė 651 00:30:26,550 --> 00:30:27,960 skaitymo / rašymo galvutės juda. 652 00:30:27,960 --> 00:30:30,700 Sujungti milijonus šių įmagnetintame segmentai ir 653 00:30:30,700 --> 00:30:32,160 jūs turite failą. 654 00:30:32,160 --> 00:30:36,060 >> Dabar, iš vieno failo gabalai gali būti išsibarsčiusios visame disko 655 00:30:36,060 --> 00:30:39,970 plokšteles, lyg netvarka Straipsnių ant jūsų stalo. 656 00:30:39,970 --> 00:30:43,500 Taigi speciali papildoma failas stebi , kur viskas yra. 657 00:30:43,500 --> 00:30:45,985 Ar ne norite, turėjo kažkas panašaus? 658 00:30:45,985 --> 00:30:46,470 >> [PABAIGA VIDEO PLAYBACK] 659 00:30:46,470 --> 00:30:47,820 >> Davidas Malan: Gerai, tikriausiai ne. 660 00:30:47,820 --> 00:30:52,070 Taigi, kaip daugelis iš jūsų vaikinai užaugau su jais? 661 00:30:52,070 --> 00:30:53,970 Gerai, kad tai mažiau ir mažiau rankos kasmet. 662 00:30:53,970 --> 00:30:56,550 Bet aš džiaugiuosi, jūs bent susipažinę su jais, nes tai ir mūsų pačių 663 00:30:56,550 --> 00:31:00,520 knyga demo, deja, miršta labai nunykti čia familiarumo. 664 00:31:00,520 --> 00:31:04,010 >> Bet tai, ką aš, bent jau, dar aukštosios mokyklos, naudotos atsargines kopijas. 665 00:31:04,010 --> 00:31:08,110 Ir ji buvo nuostabi, nes jums galima laikyti 1,4 megabaitų 666 00:31:08,110 --> 00:31:08,930 tai ypač disko. 667 00:31:08,930 --> 00:31:12,260 Ir tai buvo didelio tankio versija, kaip rodo HD, kuris turi 668 00:31:12,260 --> 00:31:14,240 ty prieš šiandienos HD vaizdo įrašus. 669 00:31:14,240 --> 00:31:16,400 >> Standartinis tankis buvo 800 kilobaitų. 670 00:31:16,400 --> 00:31:18,640 Ir prieš tai, kad buvo 400-Kilobaitas diskai. 671 00:31:18,640 --> 00:31:23,120 Ir prieš tai, kad buvo 5 ir 1/4 colių diskus, kurie buvo tikrai diskelių, 672 00:31:23,120 --> 00:31:25,680 ir šiek tiek platesnė ir aukštesnė nei šių dalykų čia. 673 00:31:25,680 --> 00:31:29,150 Bet jūs iš tikrųjų galite pamatyti vadinamasis diskelių aspektas šių diskų. 674 00:31:29,150 --> 00:31:32,630 >> Ir funkciškai, jie iš tikrųjų gana panašus į kietuosius diskus, ne 675 00:31:32,630 --> 00:31:33,570 Bent tai tipo. 676 00:31:33,570 --> 00:31:37,270 Vėlgi, SSD naujesniuose kompiuteriuose dirbti šiek tiek kitaip. 677 00:31:37,270 --> 00:31:41,530 Bet jei jums judėti, kad mažai metalinę kilpelę, Jūs iš tikrųjų galite pamatyti šiek tiek slapuką, 678 00:31:41,530 --> 00:31:42,560 arba patiekalas. 679 00:31:42,560 --> 00:31:43,830 >> Tai ne metalo patiko šį vieną. 680 00:31:43,830 --> 00:31:46,000 Tai vienas iš tikrųjų kai pigiau plastiko. 681 00:31:46,000 --> 00:31:46,750 Ir jūs galite rūšies kraipyti ją. 682 00:31:46,750 --> 00:31:50,310 Ir jūs trully tiesiog nušluota kai bitų skaičius arba magnetinių dalelių 683 00:31:50,310 --> 00:31:51,220 iš šio disko. 684 00:31:51,220 --> 00:31:52,710 >> Taigi, laimei, nėra nieko ant jo. 685 00:31:52,710 --> 00:31:55,790 Jei tas dalykas tai taip, - ir padengti jūsų akys ir jūsų kaimynas - 686 00:31:55,790 --> 00:31:58,865 galite tiesiog rūšies traukti tai visas apvalkalas nuo panašaus. 687 00:31:58,865 --> 00:32:01,900 Bet yra šiek tiek pavasarį, todėl žino, kad savo akimis. 688 00:32:01,900 --> 00:32:03,620 Taigi, dabar jūs turite tikrai diskelį. 689 00:32:03,620 --> 00:32:07,090 >> Ir kas puikus apie tai yra tai, kad tiek, kiek tai 690 00:32:07,090 --> 00:32:10,830 nedidelio masto atstovavimas didesnis kietasis diskas, šie dalykai yra super, 691 00:32:10,830 --> 00:32:11,590 super paprasta. 692 00:32:11,590 --> 00:32:15,170 Jei suimkite jo dugną, dabar, kad kad metalo dalykas yra išjungti, ir žievelės 693 00:32:15,170 --> 00:32:20,990 juos atidaryti, viskas yra yra du gabalai veltinys ir vadinamasis diskelis 694 00:32:20,990 --> 00:32:22,930 su gabalėlio metalo į vidų. 695 00:32:22,930 --> 00:32:25,990 >> Ir ten eina pusė mano diske, kurių turinys. 696 00:32:25,990 --> 00:32:27,540 Čia eina vienas iš jų pusė. 697 00:32:27,540 --> 00:32:31,375 Bet tai visa tai sukosi viduje iš jūsų kompiuterio, pasekėjai. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> Ir vėl įdėti šią į perspektyvą, kaip didelis yra didžiąją dalį savo 700 00:32:38,310 --> 00:32:39,560 kietieji diskai šių dienų? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 GB 500, terabaito, gal stalinis kompiuteris, 2 terabaitų, 3 703 00:32:46,230 --> 00:32:47,630 terabaitų, 4 terabaitų, tiesa? 704 00:32:47,630 --> 00:32:52,480 Tai yra vienas megabaitas, duoti ar priimti, kuris gali neatitikti tipiškų MP3 705 00:32:52,480 --> 00:32:55,310 nebėra šių dienų, arba kai panašios muzikos failą. 706 00:32:55,310 --> 00:32:59,500 >> Taigi šiek tiek suvenyrų jums šiandien, ir taip pat padėti kontekstualizuoti ką 707 00:32:59,500 --> 00:33:03,570 mes atsižvelgiant savaime suprantamu dalyku dabar problema nustatyti penkių. 708 00:33:03,570 --> 00:33:04,820 Taigi tie, kurie tavo laikyti. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 Taigi leiskite man pereiti prie kur bus išleisti kitą pset taip pat. 711 00:33:13,370 --> 00:33:18,470 Taigi mes dabar nustatyti šį puslapį - oi, Skelbimų greitai pora. 712 00:33:18,470 --> 00:33:21,730 >> Šį penktadienį, jei norėtumėte prisijungti CS50 pietums, eikite į įprastą vietą, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 Ir galutinis projektas - 715 00:33:25,100 --> 00:33:28,520 todėl už mokymo programą, mes parašė Baigiamoji projekto specifikacija jau. 716 00:33:28,520 --> 00:33:31,410 Suprantu, kad tai nereiškia, tai dėl itin greitai. 717 00:33:31,410 --> 00:33:33,990 Jis parašė, tikrai, tik gauti vaikinai galvoja apie tai. 718 00:33:33,990 --> 00:33:37,620 Ir iš tiesų, itin reikšmingas dalis jums bus kovoti 719 00:33:37,620 --> 00:33:40,780 galutiniai projektai medžiagų, kurias mes net ne Dotarłeś į klasę, 720 00:33:40,780 --> 00:33:42,730 bet bus ne anksčiau kaip kitą savaitę. 721 00:33:42,730 --> 00:33:45,530 >> Pranešimas, nors, kad spec ragina keli skirtingi komponentai 722 00:33:45,530 --> 00:33:46,190 galutinis projektas. 723 00:33:46,190 --> 00:33:49,590 Pirma, per kelias savaites, yra Išankstinis pasiūlymas, gana atsitiktinis laiškus elektrininiu paštu 724 00:33:49,590 --> 00:33:52,760 Jūsų TF pasakyti jam ar kas esate galvoju apie savo projektą, su 725 00:33:52,760 --> 00:33:53,650 jokių įsipareigojimų. 726 00:33:53,650 --> 00:33:56,710 Pasiūlymas bus jūsų pirma įsipareigojimas, sakydamas: čia tai, ką 727 00:33:56,710 --> 00:33:57,770 Norėčiau padaryti mano projektą. 728 00:33:57,770 --> 00:33:58,250 Ką manote? 729 00:33:58,250 --> 00:33:58,650 Per didelis? 730 00:33:58,650 --> 00:33:59,145 Per mažas? 731 00:33:59,145 --> 00:34:00,330 Ar tai įvykdoma? 732 00:34:00,330 --> 00:34:02,230 Ir pamatysite spec daugiau informacijos. 733 00:34:02,230 --> 00:34:05,060 >> Pora savaičių po to yra statusas ataskaita, kuri panašiai 734 00:34:05,060 --> 00:34:08,260 atsitiktinis siųsti savo TF pasakyti tik tai, kaip gerokai atsilieka esate jūsų galutinis 735 00:34:08,260 --> 00:34:12,360 Projekto įgyvendinimas, po CS50 Hackathon kurį kiekvienas 736 00:34:12,360 --> 00:34:17,520 yra kviečiami, kuris bus įvykis iš 20:00 viena vakare iki 07:00 737 00:34:17,520 --> 00:34:19,150 AM kitą rytą. 738 00:34:19,150 --> 00:34:22,560 Pica, kaip aš galėjo paminėti savaitę nulis, wil būti įteiktas 9:00 PM, 739 00:34:22,560 --> 00:34:24,120 Kinų maisto 1:00 PM. 740 00:34:24,120 --> 00:34:27,929 Ir jei jūs vis dar atsibunda 05:00, mes priimsime jus į IHOP pusryčiams. 741 00:34:27,929 --> 00:34:31,310 >> Taigi Hackathon yra vienas iš labiau neužmirštamų įspūdžių klasėje. 742 00:34:31,310 --> 00:34:35,290 Tada įgyvendinimas lemia ir tada kulminacinis CS50 mugė. 743 00:34:35,290 --> 00:34:38,070 Daugiau informacijos apie visa tai per ateinančias savaites. 744 00:34:38,070 --> 00:34:40,739 >> Bet grįžkime į kažką senosios mokyklos - 745 00:34:40,739 --> 00:34:41,920 vėl masyvo. 746 00:34:41,920 --> 00:34:45,040 Taigi matrica buvo gražus, nes jis sprendžia problemų, kaip mes matėme tik 747 00:34:45,040 --> 00:34:49,290 prieš akimirką su studentų struktūrų gauti šiek tiek iš kontrolės, jei mes 748 00:34:49,290 --> 00:34:52,405 nori turėti studento vieną, studento du, studentas trijų, studentas taškas taškas taškas, 749 00:34:52,405 --> 00:34:54,400 kai savavališkai studentų skaičius. 750 00:34:54,400 --> 00:34:58,850 >> Taigi matricos, prieš kelias savaites, swooped į ir išspręsti visas mūsų problemas ne 751 00:34:58,850 --> 00:35:03,340 iš anksto žinant, kiek daug kai tipo mes norime. 752 00:35:03,340 --> 00:35:07,390 Ir mes matėme, kad structs gali padėti mums toliau organizuoti savo kodą ir išlaikyti 753 00:35:07,390 --> 00:35:11,660 konceptualiai panašūs kintamieji, pavyzdžiui, pavadinimas ir namo kartu, kad mes 754 00:35:11,660 --> 00:35:15,570 gali traktuoti jas kaip vieną subjektą, viduje kurių yra mažesnius gabalėlius. 755 00:35:15,570 --> 00:35:17,810 >> Bet matricos turi tam tikrų trūkumų. 756 00:35:17,810 --> 00:35:19,780 Kokie yra keletas trūkumų mes susidūrėme 757 00:35:19,780 --> 00:35:22,320 su matricomis iki šiol? 758 00:35:22,320 --> 00:35:23,450 Kas tai? 759 00:35:23,450 --> 00:35:28,130 Fiksuotas dydis - todėl, nors galbūt būtų galima skirti atminties 760 00:35:28,130 --> 00:35:32,310 masyvas, kai jūs žinote, kiek studentų turite, kiek simbolių turite 761 00:35:32,310 --> 00:35:35,460 nuo vartotojo, kai jūs skiriama masyvas, jūs rūšies dažytos 762 00:35:35,460 --> 00:35:36,740 save į kampą. 763 00:35:36,740 --> 00:35:40,600 >> Kadangi jūs negalite įterpti naujus elementus į masyvo viduryje. 764 00:35:40,600 --> 00:35:43,660 Jūs negalite įterpti daugiau elementų tuo masyvo pabaigos. 765 00:35:43,660 --> 00:35:47,750 Tikrai, jūs turite imtis kurti visiškai naujas masyvas, kaip mes aptarti, 766 00:35:47,750 --> 00:35:49,320 kopijavimo metai į naują. 767 00:35:49,320 --> 00:35:52,610 Ir vėl, tai yra galvos skausmas GetString kalbama jums. 768 00:35:52,610 --> 00:35:56,170 >> Bet vėl, jūs negalite net įterpti kažkas į masyvo viduryje 769 00:35:56,170 --> 00:35:58,200 jei palūkanų norma yra ne visiškai užpildyti. 770 00:35:58,200 --> 00:36:03,010 Pavyzdžiui, jei tai masyvas čia dydžio tik šešios turi penkis dalykus tai, 771 00:36:03,010 --> 00:36:06,080 gerai, galima tiesiog smeigtuko kažkas ant galo. 772 00:36:06,080 --> 00:36:08,200 Bet kas, jei norite įterpti kažką į vidurį 773 00:36:08,200 --> 00:36:11,280 masyvas, nors jis gali turėti penki iš šešių dalykų tai? 774 00:36:11,280 --> 00:36:14,250 >> Na, ką mes darome, kai mes turėjome viską mūsų savanoriais ant scenos 775 00:36:14,250 --> 00:36:15,110 savaites praeityje? 776 00:36:15,110 --> 00:36:18,710 Jei mes norėjome įdėti ką nors čia, arba šie žmonės, kaip perkelti šį 777 00:36:18,710 --> 00:36:22,540 būdu, arba šie žmonės, kaip perkelti šį būdas, ir kad tapo brangu. 778 00:36:22,540 --> 00:36:26,950 Perkelia žmonių viduje masyvas galų gale sudėjus ir kainuoja 779 00:36:26,950 --> 00:36:31,240 mums laiko, todėl daug mūsų n kvadratu veikia kartus kaip įterpimo rūšiuoti, už 780 00:36:31,240 --> 00:36:32,550 Pavyzdžiui, blogiausiu atveju. 781 00:36:32,550 --> 00:36:36,520 Taigi matricos yra puikus, tačiau jūs turite iš anksto žinoti, kaip didelis norite juos. 782 00:36:36,520 --> 00:36:38,030 >> Taigi gerai, čia yra sprendimas. 783 00:36:38,030 --> 00:36:43,860 Jeigu aš nežinau iš anksto, kiek studentai galiu turėti, ir aš žinau, kai 784 00:36:43,860 --> 00:36:47,870 Aš nuspręsti, nors, aš pakimba su tuo daug studentų, kodėl gi ne aš tiesiog visada 785 00:36:47,870 --> 00:36:51,740 skirti dvigubai daugiau erdvės, kaip galėčiau manau reikia? 786 00:36:51,740 --> 00:36:54,450 Ar tai ne protingas sprendimas? 787 00:36:54,450 --> 00:36:58,240 >> Realiai, aš nemanau, kad mes reikės daugiau nei 50 laiko tarpsnių 788 00:36:58,240 --> 00:37:02,190 nagrinėjant ieškinį dėl vidutinio dydžio klasės masyvas, todėl galime tik suapvalinti. 789 00:37:02,190 --> 00:37:07,040 Aš padarysiu 100 lizdus mano masyvas, tik kad mes tikrai gali gauti 790 00:37:07,040 --> 00:37:10,330 studentų skaičius tikiuosi būti tam tikru vidutinio dydžio klasėje. 791 00:37:10,330 --> 00:37:14,320 Tad kodėl gi ne tiesiog suapvalinti ir skirti daugiau atminties, paprastai, už masyvo 792 00:37:14,320 --> 00:37:16,290 nei jūs manote, kad galite net nereikia? 793 00:37:16,290 --> 00:37:20,190 Kas tai yra paprastas Pushback tos idėjos? 794 00:37:20,190 --> 00:37:21,440 >> Jūs tik eikvoti atmintį. 795 00:37:21,440 --> 00:37:25,350 Pažodžiui kiekviena programa rašote tada gal naudojant dvigubai daug atminties kaip 796 00:37:25,350 --> 00:37:26,680 jūs iš tikrųjų reikia. 797 00:37:26,680 --> 00:37:28,990 Ir tai tiesiog nesijaučia kaip ypač elegantiškas sprendimas. 798 00:37:28,990 --> 00:37:31,990 Be to, jis tiesiog mažėja tikimybė problemą. 799 00:37:31,990 --> 00:37:35,300 Jei atsitiktų, kad populiarus kursą vieną semestrą, ir jūs turite 101 800 00:37:35,300 --> 00:37:39,610 studentų, jūsų programa yra vis dar iš esmės susiduria su ta pačia problema. 801 00:37:39,610 --> 00:37:44,280 >> Taigi, laimei, yra sprendimas tai ad visos mūsų problemos formos 802 00:37:44,280 --> 00:37:46,790 duomenų struktūrų, kurios yra sudėtingesnis nei tas, 803 00:37:46,790 --> 00:37:47,970 mes matėme iki šiol. 804 00:37:47,970 --> 00:37:50,530 Tai, galiu reikalauti, yra susijusi sąrašas. 805 00:37:50,530 --> 00:37:51,920 Tai numerių sąrašas - 806 00:37:51,920 --> 00:37:54,970 9, 17, 22, 26 ir 34 - 807 00:37:54,970 --> 00:38:00,120 , kurios buvo sujungtos taip, , ką aš braižomos kaip rodyklėmis. 808 00:38:00,120 --> 00:38:03,580 >> Kitaip tariant, jei aš norėjau atstovauti masyvas, aš galėtų padaryti 809 00:38:03,580 --> 00:38:04,910 kažkas panašaus į tai. 810 00:38:04,910 --> 00:38:07,310 Ir aš įdėti šią Viršuje vos akimirką. 811 00:38:07,310 --> 00:38:09,970 Galėčiau padaryti - 812 00:38:09,970 --> 00:38:12,520 labas, viskas gerai. 813 00:38:12,520 --> 00:38:14,470 Budėjimo. 814 00:38:14,470 --> 00:38:17,360 Naujas kompiuteris čia aišku - 815 00:38:17,360 --> 00:38:18,090 Gerai. 816 00:38:18,090 --> 00:38:21,730 >> Taigi, jei aš turėti šiuos numerius masyvo - 817 00:38:21,730 --> 00:38:28,880 9, 17, 22, 26, 24 - 818 00:38:28,880 --> 00:38:30,530 nebūtinai pagal mastelį. 819 00:38:30,530 --> 00:38:33,730 Gerai, kad čia yra mano masyvas - 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 Gerai, kad čia yra mano masyvo. 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 >> [Juokas] 826 00:38:48,820 --> 00:38:49,440 >> Davidas Malan: Pretend. 827 00:38:49,440 --> 00:38:52,330 Tai pernelyg daug pastangų grįžti ir nustatyti, kad taip nėra - 828 00:38:52,330 --> 00:38:54,290 26. 829 00:38:54,290 --> 00:38:57,650 Taigi, mes turime šį masyvas 9, 17, 22, 26 ir 34. 830 00:38:57,650 --> 00:39:00,260 Tiems iš jūsų, galite pamatyti nepatogus klaida Aš ką tik atliko, 831 00:39:00,260 --> 00:39:00,830 ten yra. 832 00:39:00,830 --> 00:39:04,490 >> Taigi, aš teigti, kad tai yra labai efektyvus sprendimas. 833 00:39:04,490 --> 00:39:07,310 Aš skirta tiek Ints kaip Man reikia - Vienas, du, trys, 834 00:39:07,310 --> 00:39:09,100 keturių, penkių arba šešių - 835 00:39:09,100 --> 00:39:11,660 ir aš tada saugomi skaičiai viduje šio masyvo. 836 00:39:11,660 --> 00:39:15,220 Bet tarkime, tada, aš noriu įterpti kaip numeris 8 vertė? 837 00:39:15,220 --> 00:39:16,100 Na, kur ji eiti? 838 00:39:16,100 --> 00:39:18,530 Tarkime, aš noriu įterpti kaip skaičius 20. 839 00:39:18,530 --> 00:39:19,790 Na, kur ji eiti? 840 00:39:19,790 --> 00:39:23,160 Kažkur per vidurį, ar skaičius 35 turi eiti 841 00:39:23,160 --> 00:39:24,010 kažkur pabaigoje. 842 00:39:24,010 --> 00:39:25,320 Bet aš visiems išretinti. 843 00:39:25,320 --> 00:39:29,120 >> Ir todėl tai yra pagrindinis iššūkis iš masyvų, kuris yra sprendimas. 844 00:39:29,120 --> 00:39:32,280 Aš teigė šiuo metu senumo, GetString sprendžia šią problemą. 845 00:39:32,280 --> 00:39:37,380 Jei norite įterpti šeštąjį numeris į šio masyvo, kas yra bent vienas 846 00:39:37,380 --> 00:39:40,090 sprendimas jums gali vėl kristi ant tikrai, kaip mes darome su GetString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 Kas tai? 849 00:39:46,030 --> 00:39:48,190 >> Na, kad ji didesnė yra lengviau pasakyti nei padaryti. 850 00:39:48,190 --> 00:39:52,810 Mes ne visada gali padaryti masyvas didesnis, bet ką mes galime padaryti? 851 00:39:52,810 --> 00:39:56,570 Sukurti naują masyvą, kad yra didesnis, pagal savo dydį 6, o gal dydis 10, jei norime 852 00:39:56,570 --> 00:40:00,490 gauti į priekį dalykų, ir tada nukopijuokite Esu masyvas į Naujas, tada 853 00:40:00,490 --> 00:40:01,680 nemokamai seną masyvo. 854 00:40:01,680 --> 00:40:05,770 >> Bet kas važiavimo laikas dabar šio proceso? 855 00:40:05,770 --> 00:40:09,870 Tai didelis O n, nes kopijavimas kainuos jums keletą vienetų 856 00:40:09,870 --> 00:40:13,480 laiką, todėl ne taip idealu, jei mes turime skirti naują masyvą, kuris vyksta 857 00:40:13,480 --> 00:40:15,610 vartoti dvigubai daugiau atminties laikinai. 858 00:40:15,610 --> 00:40:16,660 Kopijuoti metai į naują - 859 00:40:16,660 --> 00:40:18,800 Aš turiu galvoje, tai tik galvos skausmas, kuris yra, vėlgi, kodėl mes parašėme 860 00:40:18,800 --> 00:40:19,920 GetString už jus. 861 00:40:19,920 --> 00:40:21,380 >> Taigi, ką galėtume padaryti vietoj? 862 00:40:21,380 --> 00:40:25,000 Na, ką daryti, jei mūsų duomenų struktūra iš tikrųjų turi jos spragas? 863 00:40:25,000 --> 00:40:30,790 Tarkime, kad aš atsipalaiduoti savo tikslą turėti gretimi gabaliukus atminties, jei 9 864 00:40:30,790 --> 00:40:34,500 yra šalia 17, kuris yra šalia 22 ir pan. 865 00:40:34,500 --> 00:40:39,570 >> Ir manyti, kad 9 gali būti per čia RAM ir 17 gali būti per daug čia, RAM, 866 00:40:39,570 --> 00:40:40,990 ir 22 gali būti per daug čia RAM. 867 00:40:40,990 --> 00:40:43,610 Kitaip tariant, aš jų nereikia net atgal atgal nebėra. 868 00:40:43,610 --> 00:40:47,850 Aš tiesiog kažkaip siūlų adata pagal kiekvieną iš šių numerių, ar kiekvienas 869 00:40:47,850 --> 00:40:51,010 Šių mazgų, kaip mes vadiname stačiakampiai, kaip aš traukti jų, 870 00:40:51,010 --> 00:40:55,670 Prisimenu, kaip gauti naujausia toks mazgas nuo pirmosios. 871 00:40:55,670 --> 00:40:59,940 >> Taigi, kas yra programavimas statyti mes matėme gana neseniai, su kuria aš 872 00:40:59,940 --> 00:41:03,030 gali įgyvendinti šią temą, arba rengia čia, su kuriais galiu 873 00:41:03,030 --> 00:41:05,430 įgyvendinti šias rodykles? 874 00:41:05,430 --> 00:41:06,500 Taigi patarimų, tiesa? 875 00:41:06,500 --> 00:41:09,560 Jei aš skirti ne tik int, bet mazgas - ir 876 00:41:09,560 --> 00:41:10,810 mazgas, aš tiesiog reiškia konteinerį. 877 00:41:10,810 --> 00:41:12,900 Ir vizualiai, aš tai stačiakampis. 878 00:41:12,900 --> 00:41:16,420 Taigi mazgas, matyt, reikia kad yra dvi reikšmes - 879 00:41:16,420 --> 00:41:21,490 LC pati, o tada, kaip teigiama apatinė stačiakampio, 880 00:41:21,490 --> 00:41:23,010 pakankamai vietos int. 881 00:41:23,010 --> 00:41:26,130 >> Taigi, tiesiog galvoju į priekį čia kaip didelis yra šis mazgas, tai 882 00:41:26,130 --> 00:41:27,170 Pakuotę klausimą? 883 00:41:27,170 --> 00:41:29,250 Kiek baitų int? 884 00:41:29,250 --> 00:41:31,310 Matyt 4, jei tai kaip įprasta pats. 885 00:41:31,310 --> 00:41:33,270 Ir tada kiek baitų už rodykle? 886 00:41:33,270 --> 00:41:33,650 4. 887 00:41:33,650 --> 00:41:37,940 Taigi tai konteineris, ar tai mazgas, yra bus 8 baito struktūra. 888 00:41:37,940 --> 00:41:41,760 Oh, ir tai laimingas sutapimas, kad mes tiesiog pristatė šią sąvoką 889 00:41:41,760 --> 00:41:44,400 konstrukto ar gelžbetonio konstrukcijos. 890 00:41:44,400 --> 00:41:48,890 >> Taigi galiu reikalauti, kad aš noriu žengti žingsnį į tai vis sudėtingesnės 891 00:41:48,890 --> 00:41:52,560 įgyvendinimas numerių sąrašą, į susiję sąrašas numerius, man reikia padaryti 892 00:41:52,560 --> 00:41:56,920 šiek tiek daugiau mąstymo priekyje ir paskelbti ne tik int, bet STRUCT 893 00:41:56,920 --> 00:41:58,620 kad aš vadinu, tradiciškai čia mazgas. 894 00:41:58,620 --> 00:42:01,630 Mes galime vadinti ką norime, bet mazgas bus teminio daug 895 00:42:01,630 --> 00:42:03,560 iš dalykų, mes pradėti ieškoti dabar. 896 00:42:03,560 --> 00:42:06,480 >> Viduje Šis mazgas yra int n. 897 00:42:06,480 --> 00:42:09,350 Ir tada šį sintaksė, šiek tiek keista iš pirmo žvilgsnio - 898 00:42:09,350 --> 00:42:12,960 konstrukto mazgas * kito. 899 00:42:12,960 --> 00:42:16,900 Na pavaizduotomis piktogramo, kas tai? 900 00:42:16,900 --> 00:42:21,000 Tai yra apatinėje stačiakampis, kad mes matėme 901 00:42:21,000 --> 00:42:22,730 tik prieš akimirką. 902 00:42:22,730 --> 00:42:27,600 >> Bet kodėl aš sakau struct mazgas * o ne tik mazgas *? 903 00:42:27,600 --> 00:42:31,370 Nes jei, kad rodyklė būtų nukreipta kitame mazge, tai tik 904 00:42:31,370 --> 00:42:32,760 adresas mazgas. 905 00:42:32,760 --> 00:42:35,630 Tai atitinka tai, ką mes diskutuojama apie rodykles iki šiol. 906 00:42:35,630 --> 00:42:39,690 Tačiau kodėl, jei galiu reikalauti ši struktūra yra vadinama mazgas, turiu pasakyti struct 907 00:42:39,690 --> 00:42:42,660 mazgas viduje čia? 908 00:42:42,660 --> 00:42:43,190 >> Būtent. 909 00:42:43,190 --> 00:42:46,490 Tai tarsi kvailas tikrovės C. Typedef, taip sakant, yra ne 910 00:42:46,490 --> 00:42:47,220 atsitiko dar. 911 00:42:47,220 --> 00:42:48,510 C Super pažodinis. 912 00:42:48,510 --> 00:42:51,050 Jis skaito jūsų kodą viršų į apačioje, iš kairės į dešinę. 913 00:42:51,050 --> 00:42:54,930 Ir kol ji hitai kad kabliataškį dėl Esmė, manau, kas ne 914 00:42:54,930 --> 00:42:57,590 egzistuoti kaip duomenų tipą? 915 00:42:57,590 --> 00:42:59,060 Mazgas, citata citatos mazgas. 916 00:42:59,060 --> 00:43:03,050 >> Bet kadangi daugiau neaiški deklaracija aš pirmoje eilutėje - 917 00:43:03,050 --> 00:43:05,340 Typedef struct mazgas - 918 00:43:05,340 --> 00:43:08,790 nes atėjo pirmas, prieš garbanotas petnešos, kad tarsi kaip 919 00:43:08,790 --> 00:43:11,800 prieš šviesti Zaszczękać, kad jūs Žinai ką, man struct 920 00:43:11,800 --> 00:43:13,570 vadinamas struct mazgas. 921 00:43:13,570 --> 00:43:16,270 Atvirai kalbant, man nepatinka telefono dalykų konstrukto mazgas, konstrukto mazgas visi 922 00:43:16,270 --> 00:43:17,090 per mano kodas. 923 00:43:17,090 --> 00:43:20,660 Bet aš ją naudoti tik vieną kartą, tik viduje, kad galėčiau efektyviai 924 00:43:20,660 --> 00:43:25,010 sukurti apykaitinės nuoroda rūšiuoti, o ne rodyklę į save per se, bet 925 00:43:25,010 --> 00:43:29,400 rodyklė į kitą identiški tipas. 926 00:43:29,400 --> 00:43:32,330 >> Taigi paaiškėja, kad dėl duomenų struktūros kaip tai, yra keletas 927 00:43:32,330 --> 00:43:34,470 operacijos, kurios gali būti domina mus. 928 00:43:34,470 --> 00:43:37,460 Mes galime norite įterpti į panašaus sąrašą. 929 00:43:37,460 --> 00:43:39,850 Mes galime norite ištrinti iš panašaus sąrašą. 930 00:43:39,850 --> 00:43:43,490 Mes galime norite ieškoti už sąrašą vertė, arba apskritai, ėjimas. 931 00:43:43,490 --> 00:43:46,410 Ir ėjimas yra tik išgalvotas būdas sakydamas prasideda į kairę ir perkelti visus 932 00:43:46,410 --> 00:43:47,650 Kelias į dešinę. 933 00:43:47,650 --> 00:43:52,640 >> Ir pastebėkite, net tai šiek tiek daugiau sudėtingos duomenų struktūros, leiskite 934 00:43:52,640 --> 00:43:56,510 man pasiūlyti, kad mes galime skolintis kai pastarųjų dviejų savaičių idėjas ir 935 00:43:56,510 --> 00:43:58,410 įgyvendinti funkcija vadinama ieškoti, kaip šis. 936 00:43:58,410 --> 00:44:01,360 Ji ketina grįžti true arba klaidingas, prireikus nurodydama, "taip" arba 937 00:44:01,360 --> 00:44:03,390 ne, n sąraše. 938 00:44:03,390 --> 00:44:05,960 Jo Antrasis argumentas yra rodyklė į paties sąrašo, todėl 939 00:44:05,960 --> 00:44:07,920 rodyklė mazgas. 940 00:44:07,920 --> 00:44:10,350 >> Viskas, ką aš ruošiuosi tada padaryti, tai paskelbti laikinas kintamasis. 941 00:44:10,350 --> 00:44:12,730 Mes jį vadiname PTR pagal susitarimą rodykliniams. 942 00:44:12,730 --> 00:44:15,220 Ir aš ją priskirti lygūs pradžioje sąrašo. 943 00:44:15,220 --> 00:44:16,680 >> Ir dabar pastebėsite, o linijos. 944 00:44:16,680 --> 00:44:20,640 Kol žymiklis nėra lygus nulis, aš ruošiuosi patikrinti. 945 00:44:20,640 --> 00:44:24,520 Ar rodyklė rodyklė N lygų n, kuris buvo priimtas? 946 00:44:24,520 --> 00:44:26,410 Ir laukti minučių - naujas gabalas sintaksė. 947 00:44:26,410 --> 00:44:29,324 Kas yra rodyklė visi staiga? 948 00:44:29,324 --> 00:44:30,574 Taip? 949 00:44:30,574 --> 00:44:34,200 950 00:44:34,200 --> 00:44:34,810 >> Būtent. 951 00:44:34,810 --> 00:44:38,860 Todėl nors prieš kelias minutes, mes panaudojome taško žymėjimas pasiekti kažką 952 00:44:38,860 --> 00:44:43,080 viduje struct, jei kintamasis jūs ne konstrukto 953 00:44:43,080 --> 00:44:47,420 pati, bet Rodyklė į struct, laimei, sintaksės vienetas, 954 00:44:47,420 --> 00:44:48,620 pagaliau tampa intuityvus jausmas. 955 00:44:48,620 --> 00:44:52,360 Rodyklė reiškia sekti rodyklę kaip mūsų rodykles paprastai reiškia 956 00:44:52,360 --> 00:44:56,570 pavaizduotomis piktogramo ir eiti duomenų laukas viduje. 957 00:44:56,570 --> 00:44:59,700 Taigi rodyklė tas pats, kaip taškas, tačiau jūs jį naudoti, kai jūs turite rodyklę. 958 00:44:59,700 --> 00:45:05,270 >> Taigi tiesiog Priminti tada, jei nanotechnologijų srityje viduje struct vadinamas rodyklę 959 00:45:05,270 --> 00:45:07,760 lygus lygus n return true. 960 00:45:07,760 --> 00:45:11,970 Priešingu atveju, ši eilutė čia - rodyklė lygus rodyklę šalia. 961 00:45:11,970 --> 00:45:17,540 Taigi, kas tai daro, pranešime, yra, jei aš šiuo metu nukreiptos į atitinkamą struct 962 00:45:17,540 --> 00:45:21,430 , kurių sudėtyje yra 9, o 9 nėra skaičius Aš ieškau - tarkime, aš ieškau 963 00:45:21,430 --> 00:45:22,830 Apie n lygus 50 - 964 00:45:22,830 --> 00:45:25,930 Aš ruošiuosi atnaujinti savo laikiną žymeklį ne atkreipti šiuo mazgas 965 00:45:25,930 --> 00:45:31,190 nebėra, bet rodyklė rodyklė kitą, kuris ketina įtraukti mane čia. 966 00:45:31,190 --> 00:45:34,270 >> Dabar supratau, yra viesulas Įvadas. 967 00:45:34,270 --> 00:45:37,380 Trečiadienį, mes iš tikrųjų tai padaryti su kai kuriais žmonėmis ir su šiek tiek daugiau 968 00:45:37,380 --> 00:45:38,900 kodas lėčiau. 969 00:45:38,900 --> 00:45:42,990 Bet suprasti, mes dabar padaryti savo duomenis struktūros sudėtingesnė todėl, kad mūsų 970 00:45:42,990 --> 00:45:45,780 algoritmai gali gauti efektyviau, kuris bus būtina sąlyga 971 00:45:45,780 --> 00:45:50,500 pset šešių, kai mes pakrauti, vėlgi, tie 150.000 žodžių, bet reikia tai daryti 972 00:45:50,500 --> 00:45:55,650 efektyviai, o idealiu atveju, sukurti programa, kuri veikia mūsų vartotojams nėra 973 00:45:55,650 --> 00:46:00,460 linijinis, o ne n kvadratu, bet pastovus laikas, o idealas. 974 00:46:00,460 --> 00:46:02,300 >> Dar pasimatysime trečiadienį. 975 00:46:02,300 --> 00:46:07,240 >> GARSIAKALBIS: Kitame CS50, David pamiršta savo bazę bylą. 976 00:46:07,240 --> 00:46:12,770 >> Davidas Malan: Ir tai, kaip jūs siųsti tekstinius prane ¹ imus su C. Kas - 977 00:46:12,770 --> 00:46:14,020 >> [ĮVAIRIŲ tekstinį pranešimą PRANEŠIMAS SOUNDS] 978 00:46:14,020 --> 00:46:19,734