1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> DAVID Malan: Labi, welcome atpakaļ. 3 00:00:12,580 --> 00:00:13,290 Tas ir CS50. 4 00:00:13,290 --> 00:00:15,130 Tas ir sākums septiņiem nedēļā. 5 00:00:15,130 --> 00:00:18,890 Tātad tas ir bijis, bet, tāpēc es domāju, mēs gribētu veikt viesulis tūre, kur mēs 6 00:00:18,890 --> 00:00:20,760 left off, un kur mēs esam tagad iet. 7 00:00:20,760 --> 00:00:23,310 >> Tātad šī lieta šeit varētu būt radījis zināmu Angst sākumā. 8 00:00:23,310 --> 00:00:27,680 Bet, cerams, jūs esat sākuši aklimatizēties, ko tas nozīmē šeit - 9 00:00:27,680 --> 00:00:32,670 zvaigžņu pārstāv rādītāju, kas ir tikai to, kas vairāk lajs izteiksmē? 10 00:00:32,670 --> 00:00:33,400 Tātad, tas ir adrese. 11 00:00:33,400 --> 00:00:35,490 >> Tātad, tas ir adrese kaut ko atmiņā. 12 00:00:35,490 --> 00:00:38,260 Un mēs sākām mizu atpakaļ slāņiem pāris nedēļas atpakaļ, lietas, piemēram, 13 00:00:38,260 --> 00:00:41,800 GetString un citas šādas funkcijas visu šo laiku ir atgriešanās 14 00:00:41,800 --> 00:00:46,010 adreses lietas atmiņā, piemēram, adrese pirmās rakstzīmes 15 00:00:46,010 --> 00:00:46,990 daži secība. 16 00:00:46,990 --> 00:00:50,360 >> Tāpēc mēs arī ieviesa Valgrind, kas jūs sākat izmantot šo problēmu 17 00:00:50,360 --> 00:00:53,380 noteikt, jo īpaši uz nākamo Problēma, kas, kā labi. 18 00:00:53,380 --> 00:00:54,980 Un Valgrind ko dara mūsu labā? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 Tā pārbauda atmiņas noplūdes, un tas arī pārbauda ļaunprātīgu atmiņu. 21 00:01:01,020 --> 00:01:05,890 >> Tā var, ar kādu varbūtību, atklāt, ja Jūsu kods ir gatavojas pieskarties atmiņu 22 00:01:05,890 --> 00:01:07,100 ka tas vienkārši nav. 23 00:01:07,100 --> 00:01:10,410 Līdz ar to ne vienmēr ir noplūdi, bet, ja jūs pārsniedz dažu robežām 24 00:01:10,410 --> 00:01:14,730 masīvs, un jūs faktiski vadīt Valgrind un panākt, ka uzvedību, vienlaikus 25 00:01:14,730 --> 00:01:17,870 Valgrind darbojas savā programmā, ir darbojas iekšpusē no tā, jūs saņemsiet 26 00:01:17,870 --> 00:01:21,460 ziņas, piemēram, šo - "par spēkā neesošu rakstīt par izmērs 4 ", kas, atgādināt pāris 27 00:01:21,460 --> 00:01:25,880 nedēļas atpakaļ nozīmēja, ka man bija nejauši piemēram, par vienu int pārāk tālu 28 00:01:25,880 --> 00:01:27,250 ārpus masīva robežām. 29 00:01:27,250 --> 00:01:30,790 Un tā izmērs 4 nozīmē šeit lielumu šo konkrēto int. 30 00:01:30,790 --> 00:01:35,260 >> Lai ņemtu mierinājumu ar to, ka Valgrind izlaidē, formātu no tā, 31 00:01:35,260 --> 00:01:36,170 ir vienkārši šausmīgs. 32 00:01:36,170 --> 00:01:40,180 Tas ir patiešām grūti redzēt cauri putru par interesantu informāciju. 33 00:01:40,180 --> 00:01:42,910 Tātad, ko mēs esam darījuši šeit ir tikai fragments daži no pāris vairāk 34 00:01:42,910 --> 00:01:43,850 interesantas līnijas. 35 00:01:43,850 --> 00:01:46,760 Bet saprast, ka 80% no Valgrind s izeja būs mazliet 36 00:01:46,760 --> 00:01:47,650 uzmanību. 37 00:01:47,650 --> 00:01:52,820 >> Paskatieties uz modeļiem, piemēram, šo - nederīgs labi, nederīgs lasīt, 40 baiti 38 00:01:52,820 --> 00:01:56,690 un daži no blokiem skaits ir noteikti zaudēja, atslēgvārdi, piemēram, ka. 39 00:01:56,690 --> 00:02:01,920 Un ko jūs, cerams, redzēt, ir daži veida izsekot kādu funkciju 40 00:02:01,920 --> 00:02:03,340 kļūda ir faktiski iekšā 41 00:02:03,340 --> 00:02:07,195 Šajā gadījumā šeit, jo to, ko līnija no mans kods bija kļūda acīmredzot? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26 failā ar nosaukumu memory.c, kas bija Piemēram mēs spēlējām ar 44 00:02:14,130 --> 00:02:14,890 tajā laikā. 45 00:02:14,890 --> 00:02:16,460 Tātad, tas ir iespējams, nav malloc. 46 00:02:16,460 --> 00:02:18,630 Tas bija iespējams, manā kodu vietā. 47 00:02:18,630 --> 00:02:20,910 Tātad mēs redzam atkal un atkal pirms ilgi. 48 00:02:20,910 --> 00:02:24,080 >> Tātad scanf, tas nāca klajā ar pāris formu līdz šim. 49 00:02:24,080 --> 00:02:26,410 Mēs redzējām sscanf īsi. 50 00:02:26,410 --> 00:02:28,330 Tas bija kaut kas vairāk Jūs ienira arī jūsu 51 00:02:28,330 --> 00:02:29,535 preparāti uz viktorīnas. 52 00:02:29,535 --> 00:02:33,130 Un scanf ir faktiski ko CS50 bibliotēka ir bijis, izmantojot zem 53 00:02:33,130 --> 00:02:36,560 pārsegs ilgu laiku secībā lai iegūtu informāciju no lietotāja. 54 00:02:36,560 --> 00:02:40,420 >> Piemēram, ja es pāriet uz CS50 ar ierīce šeit, ļaujiet man atvērt 55 00:02:40,420 --> 00:02:45,315 Piemēram, šodien, ka sauc scanf-0.c Un tas ir super vienkārši. 56 00:02:45,315 --> 00:02:46,590 Tas ir tikai dažas rindiņas kodu. 57 00:02:46,590 --> 00:02:50,880 Bet tas parāda, tiešām, cik getInt ir darba visu laiku. 58 00:02:50,880 --> 00:02:54,710 >> Ar šo programmu šeit, jo 16 līnijas , Paziņojums, ka es apliecinu int. 59 00:02:54,710 --> 00:02:57,270 Līdz ar to nav norādes, nekas maģisks tur, tikai int. 60 00:02:57,270 --> 00:03:00,330 Tad 17 rindā, es ātri lietotāju par numuru, lūdzu. 61 00:03:00,330 --> 00:03:02,930 Tad 18 beigās, es izmantot scanf šeit. 62 00:03:02,930 --> 00:03:06,910 Un esmu norādījis, veida, piemēram, printf, ka es esmu gaidījis citātu 63 00:03:06,910 --> 00:03:08,110 likt pēdiņas beigās procenti i. 64 00:03:08,110 --> 00:03:10,920 >> Tātad procenti i, protams, apzīmē int. 65 00:03:10,920 --> 00:03:14,580 Bet paziņojums, ko otrajā arguments scanf ir. 66 00:03:14,580 --> 00:03:17,350 Kā jūs raksturotu otrais arguments aiz komata? 67 00:03:17,350 --> 00:03:19,450 Kas ir tas, ka? 68 00:03:19,450 --> 00:03:20,670 >> Tas ir adrese x. 69 00:03:20,670 --> 00:03:25,490 Tātad tas ir noderīgi, jo, sniedzot scanf ar adresi x, ko dara 70 00:03:25,490 --> 00:03:29,560 kas dotu šo funkciju, lai darīt? 71 00:03:29,560 --> 00:03:33,010 Ne tikai iet tur, bet arī darīt to, ko? 72 00:03:33,010 --> 00:03:34,060 >> Veikt izmaiņas tajā. 73 00:03:34,060 --> 00:03:38,080 Tāpēc, ka jūs varat iet tur, tas ir sava veida kā karte uz vietu atmiņā. 74 00:03:38,080 --> 00:03:41,900 Un tik ilgi, kamēr jūs sniedzat scanf, vai kādas funkcijas ar šādu karti, ka 75 00:03:41,900 --> 00:03:45,840 funkcija var iet tur, un ne tikai apskatīt vērtībā, bet tā var arī 76 00:03:45,840 --> 00:03:49,670 mainītu šo vērtību, kas ir noderīgi, ja dzīvē uz scanf mērķis ir 77 00:03:49,670 --> 00:03:53,060 skenēt informāciju no lietotāja, jo īpaši no klaviatūras. 78 00:03:53,060 --> 00:03:57,830 Un f apzīmē formatēti, tāpat kā printf, f apzīmē format 79 00:03:57,830 --> 00:03:58,930 virkne, kas jūs vēlaties izdrukāt. 80 00:03:58,930 --> 00:04:04,430 >> Tātad, īsi sakot, šī līnija 18 vienkārši saka, mēģināt lasīt int no lietotāja 81 00:04:04,430 --> 00:04:10,420 tastatūru un uzglabāt to iekšpusē x, pie neatkarīgi adrese x notiek dzīvot. 82 00:04:10,420 --> 00:04:14,860 Un tad visbeidzot, līnija 19 vienkārši saka, paldies par int, šajā gadījumā. 83 00:04:14,860 --> 00:04:15,940 >> Tātad, ļaujiet man iet uz priekšu un darīt to. 84 00:04:15,940 --> 00:04:18,570 Tātad, lai scanf 0. 85 00:04:18,570 --> 00:04:20,130 Ļaujiet man iet uz priekšu un pietuvinātu objektu 86 00:04:20,130 --> 00:04:22,960 Es iešu un palaist to ar punkti slash scanf 0. 87 00:04:22,960 --> 00:04:24,020 Numuru, lūdzu? 88 00:04:24,020 --> 00:04:24,720 50. 89 00:04:24,720 --> 00:04:25,730 Paldies par 50. 90 00:04:25,730 --> 00:04:27,270 Tātad tas ir diezgan vienkārši. 91 00:04:27,270 --> 00:04:28,160 >> Tagad to, kas ir tā nedara? 92 00:04:28,160 --> 00:04:29,940 Tas nav darīt visu ķekars ar kļūdu labošanas. 93 00:04:29,940 --> 00:04:33,000 Piemēram, ja man nav sadarboties, un es nav veids vairākās, bet 94 00:04:33,000 --> 00:04:37,860 tā vietā es rakstīt kaut ko līdzīgu "sveiki", tas ir tikai sava veida dīvaini. 95 00:04:37,860 --> 00:04:41,130 Un tā viena no lietām, CS50 bibliotēka ir darījis mums dažām 96 00:04:41,130 --> 00:04:43,440 laiks ir tāds, ka reprompting un reprompting. 97 00:04:43,440 --> 00:04:49,320 >> Retry frāze atsaukšanu bija cs50.c, un tas ir iemesls, ka getInt kas 98 00:04:49,320 --> 00:04:51,670 CS50 bibliotēka ir faktiski viss ķekars līniju ilgi, jo mēs esam 99 00:04:51,670 --> 00:04:53,190 pārbaudot stulba sīkumi kā šis. 100 00:04:53,190 --> 00:04:55,730 Vai lietotājs nedod mums, patiesībā, int? 101 00:04:55,730 --> 00:04:57,910 Vai viņš vai viņa dod mums kaut ko piemēram, alfabēta burtu? 102 00:04:57,910 --> 00:05:01,410 Ja tā, mēs vēlamies, lai atklātu kas un kliegt pie viņiem. 103 00:05:01,410 --> 00:05:03,915 >> Bet lietas iegūt vairāk interesanti šajā nākamajā piemērā. 104 00:05:03,915 --> 00:05:09,840 Ja es eju uz Scanf-1.c, kas ir viens lieta, kas ir būtiski mainījies 105 00:05:09,840 --> 00:05:11,135 Šis nākamais piemērs? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 Es esmu, izmantojot char *, protams, nevis int. 108 00:05:16,010 --> 00:05:19,210 >> Tātad, tas ir interesanti, jo char *, atceros, ir tiešām tikai 109 00:05:19,210 --> 00:05:20,190 pats kā virkni. 110 00:05:20,190 --> 00:05:23,840 Tāpēc tā uzskata, piemēram, varbūt tas ir super vienkāršs īstenošanu GetString. 111 00:05:23,840 --> 00:05:26,010 Bet es esmu nomizoti atpakaļ slāni no CS50 bibliotēkas, tāpēc es esmu 112 00:05:26,010 --> 00:05:27,550 Piezvanot uz šo char * tagad. 113 00:05:27,550 --> 00:05:30,070 Tātad, pieņemsim redzēt, kur, ja visur, mēs ejam nepareizi. 114 00:05:30,070 --> 00:05:30,840 >> Līnija 17 - 115 00:05:30,840 --> 00:05:33,950 Es vēlreiz saku, lūdzu, iedodiet man kaut ko, Šajā gadījumā, string. 116 00:05:33,950 --> 00:05:37,940 Un tad nākamajā rindā, es aicinu scanf, atkal, piešķirot tam formāta kodu, 117 00:05:37,940 --> 00:05:39,310 bet šoreiz procenti s. 118 00:05:39,310 --> 00:05:41,900 Un tad šoreiz, es esmu piešķirot tam buferi. 119 00:05:41,900 --> 00:05:43,550 >> Tagad paziņojums, es neesmu, izmantojot zīme &. 120 00:05:43,550 --> 00:05:47,120 Bet kāpēc ir tā, ka, iespējams, OK šeit? 121 00:05:47,120 --> 00:05:49,760 Jo to, kas ir bufera jau? 122 00:05:49,760 --> 00:05:50,770 Tas ir jau rādītājs. 123 00:05:50,770 --> 00:05:51,650 Tas jau adresi. 124 00:05:51,650 --> 00:05:54,510 >> Un pieņemsim šo vārdu "sajaukt," let me tikai sauc to s, piemēram, attiecībā uz 125 00:05:54,510 --> 00:05:55,050 vienkāršību. 126 00:05:55,050 --> 00:05:58,250 Bet es esmu sauc to buferi, jo vispārēja, programmēšanā, ja jums ir 127 00:05:58,250 --> 00:06:02,130 rieciens atmiņas, kas stīgu patiešām vienkārši, jūs varētu aicināt to buferis. 128 00:06:02,130 --> 00:06:04,460 Tā ir vieta, kur glabāt informāciju. 129 00:06:04,460 --> 00:06:07,400 >> Līdzīgi lietām, piemēram, YouTube, kad viņi buferizācijas, tā sakot, ka 130 00:06:07,400 --> 00:06:10,270 vienkārši nozīmē, ka tas ir lejupielādēt biti no interneta un uzglabājot tos 131 00:06:10,270 --> 00:06:14,160 vietējā masīvs, vietējo rieciens atmiņas, lai ka jūs varat noskatīties to vēlāk, 132 00:06:14,160 --> 00:06:16,830 tā izlaižot vai karājas jūs spēlējot atpakaļ. 133 00:06:16,830 --> 00:06:20,930 >> Tātad tur ir problēma, lai gan, jo es esmu stāsta scanf, kas paredz 134 00:06:20,930 --> 00:06:22,320 string no lietotāja. 135 00:06:22,320 --> 00:06:24,410 Lūk adrese rieciens atmiņas. 136 00:06:24,410 --> 00:06:26,180 Nodot, ka virkne tur. 137 00:06:26,180 --> 00:06:31,230 Kāpēc ir tā, ka saistās dot mums problēmas, lai gan? 138 00:06:31,230 --> 00:06:33,490 >> Kas tas ir? 139 00:06:33,490 --> 00:06:35,510 Es atļauts piekļūt ka daļa no atmiņas? 140 00:06:35,510 --> 00:06:36,250 Ziniet, es nezinu. 141 00:06:36,250 --> 00:06:39,210 Tāpēc, ka ir buferi ir inicializēts uz kaut ko? 142 00:06:39,210 --> 00:06:39,820 Nav īsti. 143 00:06:39,820 --> 00:06:43,090 Un tāpēc tas ir tas, ko mēs esam aicinājuši atkritumu vērtību, kas 144 00:06:43,090 --> 00:06:44,040 nav formāls vārda. 145 00:06:44,040 --> 00:06:49,200 Tas tikai nozīmē, ka mums nav ne jausmas, ko biti ir iekšā no četriem baitiem, ka 146 00:06:49,200 --> 00:06:51,240 Man ir piešķirti kā buferis. 147 00:06:51,240 --> 00:06:52,450 >> Es neesmu sauc malloc. 148 00:06:52,450 --> 00:06:53,940 Es esmu noteikti nav sauc GetString. 149 00:06:53,940 --> 00:06:56,380 Tātad, kurš zina, kas ir faktiski iekšpusē no bufera? 150 00:06:56,380 --> 00:07:00,550 Un tomēr stāsta scanf akli, iet uz turieni un ielieciet kāds lietotājs drukāti. 151 00:07:00,550 --> 00:07:04,460 >> Tātad, kas var izraisīt mūsu kodu, ja mēs palaist to? 152 00:07:04,460 --> 00:07:05,700 Iespējams segfault. 153 00:07:05,700 --> 00:07:07,970 Varbūt ne, bet, iespējams, segfault. 154 00:07:07,970 --> 00:07:10,620 Un es saku varbūt nav, jo dažreiz jūs darāt, dažreiz 155 00:07:10,620 --> 00:07:11,380 jūs nesaņemat segfault. 156 00:07:11,380 --> 00:07:14,280 Reizēm jūs vienkārši saņemt laimīgs, bet tas tomēr būs 157 00:07:14,280 --> 00:07:15,340 bug mūsu programmā. 158 00:07:15,340 --> 00:07:17,060 >> Tātad, ļaujiet man iet uz priekšu un apkopo šo. 159 00:07:17,060 --> 00:07:18,280 Es esmu gatavojas to darīt vecās skolas ceļu. 160 00:07:18,280 --> 00:07:23,825 Tā šķindēt dash 0, scanf-1, scanf-1.c, Enter. 161 00:07:23,825 --> 00:07:24,720 Hmm, arī vecās skolas. 162 00:07:24,720 --> 00:07:26,550 Let 's redzēt. 163 00:07:26,550 --> 00:07:28,440 Uz kurieni es eju? 164 00:07:28,440 --> 00:07:29,700 Ak, char * buferis. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 Ak, paldies - 167 00:07:35,130 --> 00:07:36,930 Saglabāt, OK - 168 00:07:36,930 --> 00:07:37,690 ļoti vecs skolas. 169 00:07:37,690 --> 00:07:38,900 Labi, tas ir bijis, bet. 170 00:07:38,900 --> 00:07:41,720 >> Tāpēc es esmu tikko saglabāto failu pēc padarot šo pagaidu 171 00:07:41,720 --> 00:07:42,700 mainīt pirms brīža. 172 00:07:42,700 --> 00:07:46,090 Un tagad es esmu apkopojusi to manuāli ar šķindēt. 173 00:07:46,090 --> 00:07:49,500 Un tagad es iešu uz priekšu un palaist Scanf-1, Enter. 174 00:07:49,500 --> 00:07:50,290 String lūdzu. 175 00:07:50,290 --> 00:07:51,600 Es veida "sveiki". 176 00:07:51,600 --> 00:07:54,070 >> Un tagad, lūk, kur, godīgi sakot, printf var, ir mazliet kaitinošas. 177 00:07:54,070 --> 00:07:56,020 Tas nav faktiski gatavojas segfault šajā gadījumā. 178 00:07:56,020 --> 00:07:59,860 Printf ir nedaudz īpašs, jo tas ir tik super, ko parasti izmanto, ka 179 00:07:59,860 --> 00:08:03,570 būtībā printf dara mūs atbalsta, un saprotot, 180 00:08:03,570 --> 00:08:04,830 tas nav derīgs rādītājs. 181 00:08:04,830 --> 00:08:09,080 Ļaujiet man ņemt to uz sevi, lai tikai drukāt kas iekavās null, pat 182 00:08:09,080 --> 00:08:13,340 lai gan tas ne vienmēr tas, ko mēs paši gaidīts. 183 00:08:13,340 --> 00:08:16,940 >> Tātad, mēs nevaram īsti viegli izraisīt segfault ar šo, bet skaidri tas 184 00:08:16,940 --> 00:08:18,600 nav uzvedība es gribēju. 185 00:08:18,600 --> 00:08:19,800 Tātad, kas ir vienkāršs risinājums? 186 00:08:19,800 --> 00:08:25,650 Nu, Scanf-2, ļaujiet man ierosināt nevis faktiski tikai piešķirot 187 00:08:25,650 --> 00:08:30,100 char *, ļaujiet man būt mazliet gudrāki par to, un ļaujiet man piešķirt buferi 188 00:08:30,100 --> 00:08:32,940 jo secība 16 simboliem. 189 00:08:32,940 --> 00:08:34,200 >> Lai es varētu darīt to pāris veidos. 190 00:08:34,200 --> 00:08:35,610 Es varētu pilnīgi izmantot malloc. 191 00:08:35,610 --> 00:08:38,980 Bet es varu doties atpakaļ uz divām nedēļā, kad Man vajadzēja tikai visu ķekars 192 00:08:38,980 --> 00:08:39,620 rakstzīmes. 193 00:08:39,620 --> 00:08:40,860 Tas ir tikai masīvs. 194 00:08:40,860 --> 00:08:44,870 Tātad, ļaujiet man vietā jauna buferi būt masīvs 16 rakstzīmes. 195 00:08:44,870 --> 00:08:47,340 >> Un tagad, kad es iet bufera - 196 00:08:47,340 --> 00:08:49,940 un tas ir kaut kas, mēs neesam runāt par divu nedēļu - 197 00:08:49,940 --> 00:08:53,730 bet jūs varat ārstēt masīvu kā lai gan tas ir adrese. 198 00:08:53,730 --> 00:08:56,390 Tehniski, kā mēs esam redzējuši, viņi mazliet atšķirīgs. 199 00:08:56,390 --> 00:09:01,290 Bet scanf nebūs prātā, ja jūs nodot to nosaukums masīva, jo tas, ko 200 00:09:01,290 --> 00:09:05,030 Šķindēt darīs mūs būtībā ārstēt nosaukumu ka masīva kā 201 00:09:05,030 --> 00:09:08,280 adrese rieciens 16 baitu. 202 00:09:08,280 --> 00:09:09,550 >> Tātad, tas ir labāk. 203 00:09:09,550 --> 00:09:12,110 Tas nozīmē, ka šobrīd es varu cerams veiciet šādas darbības. 204 00:09:12,110 --> 00:09:16,800 Ļaujiet man attālinātu uz brīdi, un darīsim Scanf-2, apkopoti OK. 205 00:09:16,800 --> 00:09:19,390 Tagad ļaujiet man darīt tagad slīpsvītra scanf-2. 206 00:09:19,390 --> 00:09:22,430 String lūdzu. "Sveiki". Un tas šķita strādāt šo laiku. 207 00:09:22,430 --> 00:09:26,020 >> Bet var kāds ieteikt scenāriju , kurā tā varētu joprojām strādā? 208 00:09:26,020 --> 00:09:28,550 Yeah? 209 00:09:28,550 --> 00:09:30,640 Kaut kas garāks par 16 simboliem. 210 00:09:30,640 --> 00:09:32,020 Un patiesībā, mēs varam būt nedaudz precīzāks. 211 00:09:32,020 --> 00:09:36,540 Kaut ilgāk, tad 15 rakstzīmes, jo tiešām mums ir nepieciešams paturēt prātā 212 00:09:36,540 --> 00:09:39,920 ka mums ir nepieciešams, ka slīpsvītru nulles netieši beigās virknes, 213 00:09:39,920 --> 00:09:42,950 kas ir malā scanf parasti rūpējas par mums. 214 00:09:42,950 --> 00:09:46,210 >> Tātad, ļaujiet man darīt kaut kas līdzīgs - 215 00:09:46,210 --> 00:09:48,040 Dažreiz mēs varam vienkārši atstāt to, piemēram, ka. 216 00:09:48,040 --> 00:09:50,630 Labi, tāpēc mēs esam tagad izraisa Mūsu segmentāciju vaina. 217 00:09:50,630 --> 00:09:51,000 Kāpēc? 218 00:09:51,000 --> 00:09:54,940 Tāpēc, ka es drukāti uz vairāk nekā 15 rakstzīmes, un tāpēc mēs esam patiesībā 219 00:09:54,940 --> 00:09:58,280 pieskārās atmiņa, kas es patiesībā nevajadzētu būt. 220 00:09:58,280 --> 00:10:00,180 >> Tātad, kas īsti risinājums šeit? 221 00:10:00,180 --> 00:10:02,210 Nu, ko tad, ja mums ir nepieciešams ilgāks virkni? 222 00:10:02,210 --> 00:10:03,960 Nu, mēs varbūt būtu 32 baiti. 223 00:10:03,960 --> 00:10:05,160 Nu, ko tad, ja tas nav pietiekami ilgi? 224 00:10:05,160 --> 00:10:06,040 Kā par 64 baiti? 225 00:10:06,040 --> 00:10:07,080 Ko darīt, ja tas nav pietiekami ilgi? 226 00:10:07,080 --> 00:10:09,640 Kā par 128 vai 200 baiti? 227 00:10:09,640 --> 00:10:12,660 Kas īsti ir risinājums šeit vispārējā gadījumā, ja mēs nezinām, kas 228 00:10:12,660 --> 00:10:14,460 sekmēt to, ko lietotājs ir gatavojas rakstīt? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> Tas ir tikai sava veida liels sāpes ass, ja godīgi, kas ir kāpēc 231 00:10:23,050 --> 00:10:29,050 CS50 bibliotēkā ir daži desmiti rindiņas kodu, kas kopīgi īsteno 232 00:10:29,050 --> 00:10:32,390 GetString virkni, tādā veidā, ka mums nav ir iepriekš zināt, ko 233 00:10:32,390 --> 00:10:33,430 lietotājs gatavojas rakstīt. 234 00:10:33,430 --> 00:10:37,370 Jo īpaši, ja paskatās atpakaļ cs50.c no pirms divām nedēļām, jūs redzēsiet 235 00:10:37,370 --> 00:10:40,480 ka GetString tiešām nedrīkst izmantot scanf šādā veidā. 236 00:10:40,480 --> 00:10:43,720 Drīzāk, tas skan vienu rakstzīmi laikā. 237 00:10:43,720 --> 00:10:46,010 >> Tāpēc, ka viena jauka lieta par lasot vienu rakstzīmi ir, mēs varam 238 00:10:46,010 --> 00:10:48,490 nodrošināt sevi vienmēr ir vismaz viens char. 239 00:10:48,490 --> 00:10:51,740 Es tikai varu paziņot, char, un tad šie patiesi bērnu soļi, lai vienkārši 240 00:10:51,740 --> 00:10:54,380 lasīt vienu rakstzīmi pie laiks no klaviatūras. 241 00:10:54,380 --> 00:10:58,240 Un tad, ko jūs redzēsiet GetString tas ir katru reizi, kad tas iztek no, 242 00:10:58,240 --> 00:11:02,280 teiksim, 16 baitu atmiņas, tā izmanto malloc, vai brālēns tā, lai 243 00:11:02,280 --> 00:11:06,810 piešķirt vairāk atmiņas, kopējot vecā Atmiņas par jaunu, un tad indeksēšanu 244 00:11:06,810 --> 00:11:09,900 kopā, kļūst par vienu rakstzīmi laikā, un tad, kad tas darbojas no ka 245 00:11:09,900 --> 00:11:13,370 rieciens atmiņas, met to prom, greiferi lielāku rieciens atmiņas, kopijas vecs 246 00:11:13,370 --> 00:11:14,750 jaunu, un atkārtojas. 247 00:11:14,750 --> 00:11:18,480 Un tas ir patiesi sāpes, faktiski ieviest kaut ko tik vienkārši, kā 248 00:11:18,480 --> 00:11:19,710 iegūt datus no lietotāja. 249 00:11:19,710 --> 00:11:21,090 >> Tātad jūs varat izmantot scanf. 250 00:11:21,090 --> 00:11:22,430 Jūs varat izmantot citas līdzīgas funkcijas. 251 00:11:22,430 --> 00:11:25,420 Un mācību grāmatu daudz un tiešsaistes piemēriem, bet viņi visi 252 00:11:25,420 --> 00:11:27,210 neaizsargāta pret problēmām, piemēram, šo. 253 00:11:27,210 --> 00:11:29,550 Un galu galā, kļūst segfault ir sava veida kaitinošas. 254 00:11:29,550 --> 00:11:30,680 Tas nav labi, lai lietotājam. 255 00:11:30,680 --> 00:11:33,560 >> Bet sliktākajā gadījumā, ko dara tas būtībā nodot savu 256 00:11:33,560 --> 00:11:37,160 kods risks? 257 00:11:37,160 --> 00:11:39,250 Sava veida uzbrukumu, iespējams. 258 00:11:39,250 --> 00:11:41,680 Mēs runājām par vienu šādu uzbrukumu - pārpildīta kaudzīti. 259 00:11:41,680 --> 00:11:44,660 Bet vispār, ja jūs esat atļauts pārplūdes buferis, kā mēs to izdarījām 260 00:11:44,660 --> 00:11:48,070 pāris nedēļas atpakaļ, tikai ar rakstisku vairāk nekā "hello" uz skursteņa, jūs 261 00:11:48,070 --> 00:11:52,330 patiešām var pārņemt, iespējams, dators, vai vismaz nokļūt pie datiem, kas 262 00:11:52,330 --> 00:11:53,510 nepieder jums. 263 00:11:53,510 --> 00:11:55,970 >> Tātad, īsi sakot, tas ir iemesls, kāpēc mēs esam šie mācību riteņi. 264 00:11:55,970 --> 00:11:59,090 Bet tagad, mēs sākam ņemt tos off, kā mūsu programmas vairs nav nepieciešams, 265 00:11:59,090 --> 00:12:00,610 obligāti, ieeja no lietotāja. 266 00:12:00,610 --> 00:12:03,960 Bet, ja problēmas noteikts seši, Jūsu ieguldījums nāks no milzīga 267 00:12:03,960 --> 00:12:07,520 vārdnīca fails ar 150 dažiem nepāra tūkstoš vārdiem. 268 00:12:07,520 --> 00:12:10,330 >> Tātad jums nebūs jāuztraucas par lietotāja patvaļīgu ieejas. 269 00:12:10,330 --> 00:12:13,720 Mēs sniegsim jums dažus pieņēmumus par šo failu. 270 00:12:13,720 --> 00:12:20,340 Visus jautājumus par norādes vai Scanf vai lietotāja ievadi vispār? 271 00:12:20,340 --> 00:12:24,450 >> Visas tiesības, lai ātri apskatīt tad vienā trailing tēmu no pirms divām nedēļām. 272 00:12:24,450 --> 00:12:28,590 Un tas bija šis jēdziens no struktūrai. 273 00:12:28,590 --> 00:12:34,180 Ne, ka - šis jēdziens struct, kas bija tas, ko? 274 00:12:34,180 --> 00:12:35,430 Ko struktūrai darīt mums? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> Definēt - 277 00:12:39,860 --> 00:12:41,710 žēl? 278 00:12:41,710 --> 00:12:42,820 Definēt mainīgo tipu. 279 00:12:42,820 --> 00:12:44,410 Tātad sava veida. 280 00:12:44,410 --> 00:12:46,180 Mēs esam patiešām apvienojot divas tēmas. 281 00:12:46,180 --> 00:12:49,510 Tātad ar typedef, atcerēties, ka mēs varam atzīt veida mūsu pašu, piemēram, 282 00:12:49,510 --> 00:12:51,500 sinonīmu, piemēram, virkni par char *. 283 00:12:51,500 --> 00:12:56,200 Bet izmantojot typedef un struct, mēs varam radīt patiesi mūsu pašu datu struktūras. 284 00:12:56,200 --> 00:12:59,600 >> Piemēram, ja es dodos atpakaļ uz gedit šeit tikai brīdi, un es iet uz priekšu 285 00:12:59,600 --> 00:13:08,230 un darīt kaut ko līdzīgu, ļaujiet man ietaupīt to, kā, teiksim, structs.c 286 00:13:08,230 --> 00:13:10,840 laiku, es esmu tikai gatavojas iet uz priekšu, un arī 287 00:13:10,840 --> 00:13:14,360 standardio.h, int main spēkā neesošu. 288 00:13:14,360 --> 00:13:18,960 Un tad šeit, domāju, ka es gribu Uzrakstiet programmu, kas saglabā 289 00:13:18,960 --> 00:13:21,840 vairāki studenti no vairākām mājas, piemēram. 290 00:13:21,840 --> 00:13:24,430 Tātad, tas ir tāpat kā registrarial datu bāze sava veida. 291 00:13:24,430 --> 00:13:29,550 >> Tātad, ja man ir nepieciešams, vārdu viens students, es varētu darīt kaut ko līdzīgu char * Vārds, 292 00:13:29,550 --> 00:13:31,570 un es darīšu kaut ko līdzīgu - 293 00:13:31,570 --> 00:13:34,410 patiesībā, pieņemsim izmantot CS50 bibliotēku tikai brīdi, lai padarītu šo 294 00:13:34,410 --> 00:13:38,380 nedaudz vienkāršāka, lai mēs varētu aizņemties šie desmitiem rindas kodu. 295 00:13:38,380 --> 00:13:39,340 Un pieņemsim tikai saglabātu tā vienkārši. 296 00:13:39,340 --> 00:13:42,610 Mēs turpināsim to stīgu, un tagad GetString. 297 00:13:42,610 --> 00:13:47,420 >> Tāpēc es apgalvot tagad, ka es esmu saglabājis nosaukumu par kādu studentu, un nama 298 00:13:47,420 --> 00:13:50,240 daži students, vienkārši izmantojot mainīgos kā mēs un vienas nedēļas laikā. 299 00:13:50,240 --> 00:13:52,370 Bet domāju, ka es tagad gribu, lai atbalstītu vairāki studenti. 300 00:13:52,370 --> 00:13:58,460 Visas tiesības, lai mani instinkti ir jādara name2 stīgu, saņem GetString, stīgu 301 00:13:58,460 --> 00:14:01,370 house2 izpaužas GetString. 302 00:14:01,370 --> 00:14:05,850 Un tad mūsu trešais students, darīsim NAME3 GetString. 303 00:14:05,850 --> 00:14:09,170 >> Visas tiesības, tāpēc tas ir cerams pārsteidzoši Jums kā sava veida stulba, 304 00:14:09,170 --> 00:14:11,580 jo šis process ir tiešām nekad beigsies, un tas ir tikai gatavojas 305 00:14:11,580 --> 00:14:13,130 padarīt manu kods izskatās sliktāk un sliktāk un sliktāk. 306 00:14:13,130 --> 00:14:14,810 Bet mēs atrisināt šo pārāk otrajā nedēļā. 307 00:14:14,810 --> 00:14:19,450 Kāds bija mūsu salīdzinoši tīrs risinājums kad mums bija vairākas mainīgo 308 00:14:19,450 --> 00:14:23,580 tas pats datu tips, kas visi ir saistīti, bet Mēs nevēlējāmies šo zvērīgās putru 309 00:14:23,580 --> 00:14:26,870 ar līdzīgi nosaukumu mainīgie? 310 00:14:26,870 --> 00:14:30,060 Ko mēs darām tā vietā? 311 00:14:30,060 --> 00:14:31,260 >> Tāpēc es domāju, ka es dzirdēju dažas vietas. 312 00:14:31,260 --> 00:14:32,590 Mums bija masīvs. 313 00:14:32,590 --> 00:14:37,110 Ja jūs vēlaties vairākus gadījumus kaut kas, kāpēc nav mēs tīrs tas viss 314 00:14:37,110 --> 00:14:39,540 uz augšu un tikai saka, dod man masīvs sauc nosaukumus? 315 00:14:39,540 --> 00:14:41,640 >> Un tagad, pieņemsim, ir grūti koda 3. 316 00:14:41,640 --> 00:14:44,450 Un tad dod man citu masīvs sauc māju, un ļaujiet man 317 00:14:44,450 --> 00:14:45,800 Tagad grūti koda 3. 318 00:14:45,800 --> 00:14:49,220 Un es esmu masveidā sakopta haoss, ka es tikko izveidots. 319 00:14:49,220 --> 00:14:52,400 Tagad, es esmu vēl grūti kodēta 3, bet pat 3 varētu dinamiski nākt no 320 00:14:52,400 --> 00:14:54,350 lietotājs, vai argv, vai, piemēram,. 321 00:14:54,350 --> 00:14:55,720 Tātad tas jau ir tīrāks. 322 00:14:55,720 --> 00:15:00,100 >> Bet kas ir kaitinošas par šo ir tas, ka Tagad, pat ja nosaukums ir kaut 323 00:15:00,100 --> 00:15:02,280 būtībā saistīts ar studenta māja - 324 00:15:02,280 --> 00:15:04,720 tas ir students, kas man patiešām vēlas pārstāvēt - 325 00:15:04,720 --> 00:15:08,080 Man tagad ir divi bloki, kas ir paralēlas tādā ziņā, ka viņi ir 326 00:15:08,080 --> 00:15:13,930 tikpat liels, un vārdi kronšteins 0 domājams kartes uz mājas grupā 0, 327 00:15:13,930 --> 00:15:16,600 un nosaukumi kronšteins 1 kartes mājām stiprinājums 1. 328 00:15:16,600 --> 00:15:19,280 Citiem vārdiem sakot, ka studentu dzīvo ka nams, un ka citi studentu 329 00:15:19,280 --> 00:15:20,530 dzīvo šajā citā mājā. 330 00:15:20,530 --> 00:15:23,720 Bet, protams, tas varētu būt darīts vēl tīri. 331 00:15:23,720 --> 00:15:24,990 >> Nu, tas ir iespējams, patiesībā. 332 00:15:24,990 --> 00:15:28,730 Un ļaujiet man iet uz priekšu un atvērt uz augšu structs.h, un jūs 333 00:15:28,730 --> 00:15:31,130 redzēt šo ideju šeit. 334 00:15:31,130 --> 00:15:34,905 Ievērojiet, ka es esmu, ko izmanto typedef, kā jūs norādīja uz brīdi pirms pasludināt mūsu 335 00:15:34,905 --> 00:15:35,570 pašu datu tips. 336 00:15:35,570 --> 00:15:39,660 Bet es esmu arī izmantojot šo citu atslēgvārdu sauc struktūrai, kas dod man jaunu 337 00:15:39,660 --> 00:15:40,790 datu struktūra. 338 00:15:40,790 --> 00:15:43,980 >> Un tas datu struktūra es varu pieprasīt notiek ir divas lietas iekšpusē 339 00:15:43,980 --> 00:15:47,060 tā - stīgu sauc vārdu, un stīgu sauc māja. 340 00:15:47,060 --> 00:15:49,820 Un vārdu es esmu gatavojas dot šie dati tiek veidotas jaunas struktūras 341 00:15:49,820 --> 00:15:51,005 saukt students. 342 00:15:51,005 --> 00:15:54,030 Es varētu saukt kaut ko es gribu, bet tas semantiski padarītu 343 00:15:54,030 --> 00:15:55,810 jēga man manā prātā. 344 00:15:55,810 --> 00:15:59,160 >> Tāpēc tagad, ja es atvērtu labāku versiju Programmas es sāku rakstīt 345 00:15:59,160 --> 00:16:00,390 tur, ļaujiet man ritiniet uz augšu. 346 00:16:00,390 --> 00:16:03,190 Un tur ir vēl daži koda rindiņas šeit, bet ļaujiet man koncentrēties uz 347 00:16:03,190 --> 00:16:04,160 brīdis par vienu. 348 00:16:04,160 --> 00:16:07,790 Esmu paziņoja konstantu saucamo studentiem un grūti kodē 3 tagad. 349 00:16:07,790 --> 00:16:11,110 Bet tagad, pamanīsiet, cik tīrs mans kods sāk saņemt. 350 00:16:11,110 --> 00:16:15,030 >> 22 rindā, es apliecinu masīvs studentiem. 351 00:16:15,030 --> 00:16:18,760 Un ievēroju, ka students ir acīmredzami Tagad datu tips. 352 00:16:18,760 --> 00:16:23,360 Jo augšpusē šo failu, paziņojums Es esmu iekļauts, ka header failu 353 00:16:23,360 --> 00:16:24,820 ka es velk uz augšu tieši pirms brīža. 354 00:16:24,820 --> 00:16:28,820 Un tas header failu gluži vienkārši bija šī definīcija students. 355 00:16:28,820 --> 00:16:32,470 >> Tāpēc tagad, es esmu izveidojis savu pielāgoto datu veids, ka autori C gadus 356 00:16:32,470 --> 00:16:33,890 Pirms nedomāja par iepriekš. 357 00:16:33,890 --> 00:16:34,570 Bet nekādu problēmu. 358 00:16:34,570 --> 00:16:35,870 Es varu darīt to pats. 359 00:16:35,870 --> 00:16:39,050 Tātad tas ir masīvs sauc studenti, katrs locekļu 360 00:16:39,050 --> 00:16:41,100 ir students struktūra. 361 00:16:41,100 --> 00:16:44,270 Un es gribu, trīs no tiem masīvā. 362 00:16:44,270 --> 00:16:46,030 >> Un tagad, ko dara pārējie Šīs programmas darīt? 363 00:16:46,030 --> 00:16:47,550 Man vajadzēja kaut nedaudz patvaļīgu. 364 00:16:47,550 --> 00:16:51,450 Līdz ar to no tiešsaistes 24 vēlāk, Es atkārtot 0-3. 365 00:16:51,450 --> 00:16:54,000 Es tad pieprasīt no lietotāja studenta vārdu. 366 00:16:54,000 --> 00:16:56,110 Un tad es izmantoju GetString kā iepriekš. 367 00:16:56,110 --> 00:16:59,410 Tad es lūgt studenta mājā, un es izmantot GetString kā iepriekš. 368 00:16:59,410 --> 00:17:01,780 >> Bet paziņojums - nedaudz jauns gabals sintaksi - 369 00:17:01,780 --> 00:17:07,010 Es joprojām varat indekss i-tās students, bet kā es varu nokļūt pie konkrētiem datiem 370 00:17:07,010 --> 00:17:08,354 lauks iekšpusē struktūrai? 371 00:17:08,354 --> 00:17:11,770 Nu, kas ir acīmredzami jauns gabals sintaksi? 372 00:17:11,770 --> 00:17:13,339 Tas ir tikai dot operatoram. 373 00:17:13,339 --> 00:17:14,510 >> Mēs esam īsti redzējis to pirms tam. 374 00:17:14,510 --> 00:17:17,819 Jūs esat redzējuši to piecu PSET, ja jūs esat dived jau ar bitmap failus. 375 00:17:17,819 --> 00:17:22,372 Bet dot tikai nozīmē, iekšpusē tas struktūrai vai vairākus laukus, dot dot 376 00:17:22,372 --> 00:17:24,510 nosaukums, vai dot man dot māju. 377 00:17:24,510 --> 00:17:28,690 Tas nozīmē, ka iet iekšā no struct un saņemt šīs konkrētās jomās. 378 00:17:28,690 --> 00:17:30,200 >> Ko nozīmē šīs programmas atpūtas darīt? 379 00:17:30,200 --> 00:17:31,190 Tas vēl nav viss, kas seksīgi. 380 00:17:31,190 --> 00:17:34,640 Ievērojiet, ka es pārietu no 0 līdz 3 atkal, un es vienkārši izveidot angļu 381 00:17:34,640 --> 00:17:40,500 frāze, piemēram, tik un tā ir tāda un piemēram, māju, iet uz dot vārdu no 382 00:17:40,500 --> 00:17:43,320 i-students, un to māju, kā arī. 383 00:17:43,320 --> 00:17:47,560 >> Un tad visbeidzot, tagad mēs sāksim saņemt anālais par šo, tagad, ka mēs esam 384 00:17:47,560 --> 00:17:49,580 pazīstams ar to, malloc un citas funkcijas ir 385 00:17:49,580 --> 00:17:50,570 darot visu šo laiku. 386 00:17:50,570 --> 00:17:54,220 Kāpēc man, lai atbrīvotu gan vārdu un mājas, lai gan es 387 00:17:54,220 --> 00:17:56,960 nezvana malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString izdarīja. 389 00:17:58,020 --> 00:18:00,930 Un tas bija netīrs maz noslēpums vairākas nedēļas, taču GetString ir 390 00:18:00,930 --> 00:18:03,530 nav noplūdes atmiņā visā vieta visu pusgadu līdz šim. 391 00:18:03,530 --> 00:18:05,990 Un valgrand beidzot atklāj to mums. 392 00:18:05,990 --> 00:18:10,730 >> Bet tas nav liels galā, jo es zinu ka es varu vienkārši atbrīvot nosaukumu 393 00:18:10,730 --> 00:18:15,750 un māju, gan tehniski, lai būtu super, super droša, es būtu 394 00:18:15,750 --> 00:18:17,890 darot kādu kļūdu pārbaudi šeit. 395 00:18:17,890 --> 00:18:19,040 Kādas ir jūsu instinkti stāsta jums? 396 00:18:19,040 --> 00:18:22,480 Ko man vajadzētu pārbaudīt, pirms es atbrīvot to, kas ir 397 00:18:22,480 --> 00:18:25,470 string, aka kas char *? 398 00:18:25,470 --> 00:18:33,460 >> Es tiešām vajadzētu pārbaudīt, ja skolēni kronšteins i dot vārdu nav 399 00:18:33,460 --> 00:18:34,840 vienādi null. 400 00:18:34,840 --> 00:18:40,400 Tad tas būs OK, lai iet uz priekšu un bez maksas ka rādītājs, un tas pats vai cits 401 00:18:40,400 --> 00:18:41,160 viens, kā labi. 402 00:18:41,160 --> 00:18:46,860 Ja skolēni kronšteins i dot māja nav vienāds ar nulli, tagad tas pasargās 403 00:18:46,860 --> 00:18:52,520 pret stūra gadījumā, kurā GetString atgriež kaut ko līdzīgu null. 404 00:18:52,520 --> 00:18:57,310 Un mēs redzējām pirms brīža, printf būs aizsargātu mūs šeit, vienkārši sakot, 405 00:18:57,310 --> 00:18:58,990 null, kas gatavojas izskatās dīvaini. 406 00:18:58,990 --> 00:19:02,340 Bet vismaz tas nebūs segfault, kā mēs esam redzējuši. 407 00:19:02,340 --> 00:19:05,990 >> Nu, ļaujiet man darīt viena cita lieta šeit. structs-0, ir sava veida stulba programmas 408 00:19:05,990 --> 00:19:09,700 jo es ievadīt visus šos datus, un pēc tam tas ir zaudējis, kad programma beidzas. 409 00:19:09,700 --> 00:19:10,940 Bet ļaujiet man iet uz priekšu un darīt to. 410 00:19:10,940 --> 00:19:12,830 Ļaujiet man termināla logu nedaudz lielāks. 411 00:19:12,830 --> 00:19:17,000 Ļaujiet man structs-1, kas ir jauna versija par to. 412 00:19:17,000 --> 00:19:18,520 >> Es tuvinātu mazliet. 413 00:19:18,520 --> 00:19:21,620 Un tagad ļaujiet man palaist dot slash structs-1. 414 00:19:21,620 --> 00:19:22,590 Studenta vārds - 415 00:19:22,590 --> 00:19:31,500 David Mather, pieņemsim do Rob Kirkland, darīsim Lauren Leverett. 416 00:19:31,500 --> 00:19:33,650 Kas ir interesanti tagad ir paziņojums - 417 00:19:33,650 --> 00:19:35,540 un es zinu tikai tāpēc, ka Es uzrakstīju programmu - 418 00:19:35,540 --> 00:19:38,930 tur ir fails tagad mana pašreizējā direktorija sauc students.csv. 419 00:19:38,930 --> 00:19:40,420 Daži no jums varētu būt redzējis šie reālajā pasaulē. 420 00:19:40,420 --> 00:19:42,980 >> Kas ir CSV fails? 421 00:19:42,980 --> 00:19:44,170 Komatu atdalītas vērtības. 422 00:19:44,170 --> 00:19:46,670 Tas ir veida, piemēram, nabadzīgo ļaužu versija Excel failā. 423 00:19:46,670 --> 00:19:50,580 Tā ir tabula ar rindu un kolonnu, kas Jūs varat atvērt programmas, piemēram, Excel, 424 00:19:50,580 --> 00:19:51,800 vai Skaitļi par Mac. 425 00:19:51,800 --> 00:19:55,180 >> Un, ja es atvērtu šo failu šeit gedit, Paziņojums - un to skaits nav tur. 426 00:19:55,180 --> 00:19:57,360 Tas ir tikai gedit stāsta me līniju numuri. 427 00:19:57,360 --> 00:19:59,740 Paziņojums par pirmās līnijas tas fails ir Dāvids un Mather. 428 00:19:59,740 --> 00:20:01,450 Nākamais rindā ir Rob komats Kirkland. 429 00:20:01,450 --> 00:20:04,170 Un trešajā rindā ir Lauren komats Leverett. 430 00:20:04,170 --> 00:20:05,480 >> Tātad, kas ir I izveidojis? 431 00:20:05,480 --> 00:20:09,580 Man tagad ir rakstīts C programmu, kas faktiski var radīt izklājlapas 432 00:20:09,580 --> 00:20:11,840 kas var tikt atvērts programma, piemēram, Excel. 433 00:20:11,840 --> 00:20:15,520 Ne visi, kas pārliecinoši datu kopumu, bet ja jums ir daudz lielākas gabalos 434 00:20:15,520 --> 00:20:18,440 dati, ka jūs tiešām vēlaties manipulēt un izdarīt grafikus un 435 00:20:18,440 --> 00:20:21,260 piemēram, tas ir iespējams, ir viens veids, kā radīt šos datus. 436 00:20:21,260 --> 00:20:25,370 Turklāt, CSVs ir faktiski super kopīgas tikai glabāšanai vienkāršu datu - 437 00:20:25,370 --> 00:20:28,940 Yahoo Finance, piemēram, ja jums akciju cenas, izmantojot savu tā saukto 438 00:20:28,940 --> 00:20:33,180 API, bezmaksas pakalpojums, kas ļauj saņemt pašreizējo up-to-atjauninātu sastāvu 439 00:20:33,180 --> 00:20:35,650 pēdiņām uzņēmumi, tie sniedz datus atpakaļ 440 00:20:35,650 --> 00:20:37,800 super vienkārši CSV formātā. 441 00:20:37,800 --> 00:20:39,380 >> Tātad, kā mēs to darām? 442 00:20:39,380 --> 00:20:42,530 Nu novērojat, lielākā daļa no šīs programmas ir gandrīz vienāds. 443 00:20:42,530 --> 00:20:46,870 Bet paziņojums šeit lejā, nevis drukāt studenti uzmanību, par 35 līniju 444 00:20:46,870 --> 00:20:51,040 tālāk, es apgalvot, ka es esmu ietaupot studenti uz diska, lai saglabājot failu. 445 00:20:51,040 --> 00:20:53,630 >> Tāpēc paziņojums es esmu deklarējot failu * - 446 00:20:53,630 --> 00:20:57,260 Tagad, tas ir sava veida anomālija, kas C. Kaut kāda iemesla dēļ, FILE ir visi vāciņi, 447 00:20:57,260 --> 00:21:00,690 kas nav tāpat kā lielākā daļa citu datu tipu in C. Bet tas ir iebūvēts 448 00:21:00,690 --> 00:21:02,320 datu tips, FILE *. 449 00:21:02,320 --> 00:21:05,900 Un es esmu atzīst rādītāju uz failu, ir, kā jūs varat iedomāties, ka. 450 00:21:05,900 --> 00:21:08,070 >> fopen nozīmē atvērtu failu. 451 00:21:08,070 --> 00:21:09,470 Ko fails jūs vēlaties, lai atvērtu? 452 00:21:09,470 --> 00:21:12,620 Es gribu, lai atvērtu failu, ka es patvaļīgi zvanu students.csv. 453 00:21:12,620 --> 00:21:14,480 Es varētu saukt, ka kaut ko es gribu. 454 00:21:14,480 --> 00:21:15,200 >> Un tad ņem minējums. 455 00:21:15,200 --> 00:21:18,960 Kāda otrais arguments līdz fopen iespējams, nozīmē? 456 00:21:18,960 --> 00:21:21,480 Tiesības, W rakstīt, varētu būt r par lasīt. 457 00:21:21,480 --> 00:21:24,120 Tur, lai pievienot, ja jūs vēlaties pievienot rindas un ne 458 00:21:24,120 --> 00:21:25,200 pārrakstīt visu lieta. 459 00:21:25,200 --> 00:21:28,005 >> Bet es tikai vēlos, lai izveidotu šo failu vienu reizi, tāpēc es ņemšu izmantot quote likt pēdiņas beigās w. 460 00:21:28,005 --> 00:21:31,880 Un es zinu, ka tikai izlasot dokumentāciju, vai cilvēks lapā. 461 00:21:31,880 --> 00:21:35,100 Ja fails nav Null - citiem vārdiem sakot, ja nekas nogāja greizi tur - 462 00:21:35,100 --> 00:21:37,820 ļaujiet man atkārtot vairāk studenti no 0 līdz 3. 463 00:21:37,820 --> 00:21:40,410 >> Un tagad paziņojums tur ir kaut kas kādreiz tik nedaudz atšķiras 464 00:21:40,410 --> 00:21:42,110 par line 41 šeit. 465 00:21:42,110 --> 00:21:42,960 Tas nav printf. 466 00:21:42,960 --> 00:21:46,530 Tas ir fprintf failu printf. 467 00:21:46,530 --> 00:21:47,790 Tātad, tas ir gatavojas rakstīt failā. 468 00:21:47,790 --> 00:21:48,860 Kuru failu? 469 00:21:48,860 --> 00:21:53,630 Viens, kuru rādītājs norādāt kā pirmais arguments. 470 00:21:53,630 --> 00:21:55,940 >> Tad mēs norādīt formāta virknes. 471 00:21:55,940 --> 00:21:59,660 Tad mēs precizē, kāda stīgu mēs vēlamies plug in par pirmo procentu s, un 472 00:21:59,660 --> 00:22:04,320 tad vēl mainīgu vai otrais procenti s. 473 00:22:04,320 --> 00:22:06,760 Tad mēs aizveriet failu ar fclose. 474 00:22:06,760 --> 00:22:09,380 Nekā es atbrīvotu atmiņu, kā līdz šim, kaut Man vajadzētu doties atpakaļ un pievienot 475 00:22:09,380 --> 00:22:10,540 dažas pārbaudes null. 476 00:22:10,540 --> 00:22:12,090 >> Un tas arī viss. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, fclose dod man Spēja radīt teksta failus. 478 00:22:16,960 --> 00:22:19,640 Tagad jūs redzēsiet problēmu kopumu pieciem, kas ietver attēlus, jūs izmantojat 479 00:22:19,640 --> 00:22:20,990 bināro failu vietā. 480 00:22:20,990 --> 00:22:24,200 Bet būtībā, iecere ir tāda pati, pat ja funkcijas jūs 481 00:22:24,200 --> 00:22:28,710 redzēt ir nedaudz atšķirīgs. 482 00:22:28,710 --> 00:22:32,580 >> Tātad viesulis ceļojums, bet jūs saņemsiet pārāk pazīstams ar failu I/O-- 483 00:22:32,580 --> 00:22:34,960 ieejas un izejas - ar pieciem PSET. 484 00:22:34,960 --> 00:22:38,607 Un kādi jautājumi par sākotnējie pamati šeit? 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 >> Ko darīt, ja jūs mēģināt, lai atbrīvotu Null vērtību? 488 00:22:43,710 --> 00:22:48,880 Es uzskatu, ka, ja vien bez maksas ir gotten nedaudz vairāk lietotājam draudzīgu, jūs varat 489 00:22:48,880 --> 00:22:49,890 potenciāli segfault. 490 00:22:49,890 --> 00:22:54,160 Iet tas null ir slikti, jo man nav uzskata, brīvi traucē, lai pārbaudītu jums, 491 00:22:54,160 --> 00:22:57,330 jo tas, iespējams, varētu būt atkritumi laika, lai to darīt sevi 492 00:22:57,330 --> 00:22:59,022 visiem visā pasaulē. 493 00:22:59,022 --> 00:23:00,590 Labs jautājums, lai gan. 494 00:23:00,590 --> 00:23:04,300 >> Labi, tāpēc šāda veida izpaužas mums interesantu tēmu. 495 00:23:04,300 --> 00:23:07,010 Tēma problēmu kopuma pieci ir kriminālistikas. 496 00:23:07,010 --> 00:23:08,420 Vismaz tas ir daļa par problēmu kopu. 497 00:23:08,420 --> 00:23:12,030 Kriminālistikas parasti attiecas uz atgūt informāciju, kas var vai 498 00:23:12,030 --> 00:23:14,110 iespējams, nav izdzēsts apzināti. 499 00:23:14,110 --> 00:23:18,680 Un tāpēc es domāju, es gribētu jums ātri garša par to, kas patiesībā notiek visu 500 00:23:18,680 --> 00:23:21,230 šoreiz zem kapuci datora. 501 00:23:21,230 --> 00:23:23,960 >> Piemēram, ja jums ir iekšpusē jūsu klēpjdatoru vai darbvirsmas datoru 502 00:23:23,960 --> 00:23:28,040 cietais disks, tas ir vai nu mehāniska ierīce, kas faktiski griežas - 503 00:23:28,040 --> 00:23:31,650 tur ir apļveida lietas, ko sauc šķīvji , kas izskatās gluži tāpat kā tas, ko es 504 00:23:31,650 --> 00:23:34,540 tikko bija up ekrānā šeit, lai gan tas ir arvien vairāk vecās skolas. 505 00:23:34,540 --> 00:23:37,370 Tas ir trīs-un-ar pusi collu cieto disku. 506 00:23:37,370 --> 00:23:40,070 Un trīs ar pusi collas attiecas uz ar no lieta, kad jūs instalējiet to 507 00:23:40,070 --> 00:23:40,890 ar datoru. 508 00:23:40,890 --> 00:23:44,890 >> Daudzi no jums, puiši jūsu klēpjdatorus tagad ir cietvielu disku, vai SSD, 509 00:23:44,890 --> 00:23:46,260 kas nav kustīgu daļu. 510 00:23:46,260 --> 00:23:49,170 Viņi vairāk, piemēram, RAM un mazāk kā šīs mehāniskās ierīces. 511 00:23:49,170 --> 00:23:51,450 Bet idejas joprojām ir tas pats, protams, tie attiecas 512 00:23:51,450 --> 00:23:52,790 līdz problēma noteikti pieci. 513 00:23:52,790 --> 00:23:57,400 >> Un, ja jūs domājat par to tagad cieto disku ir ir aplis, kas 514 00:23:57,400 --> 00:23:58,930 Es izdarīt, piemēram, šo šeit. 515 00:23:58,930 --> 00:24:02,290 Kad jūs izveidojat failu uz jūsu datora, vai tas ir SSD, vai 516 00:24:02,290 --> 00:24:06,610 Šajā gadījumā vecāki, skola cieto disku, ka fails ietver vairākas bitiem. 517 00:24:06,610 --> 00:24:10,510 Pieņemsim, ka tas ir šis 0 un 1, viss ķekars 0s un 1s. 518 00:24:10,510 --> 00:24:11,660 Tātad šis ir mans visu cieto disku. 519 00:24:11,660 --> 00:24:13,225 Tas ir acīmredzami diezgan liels fails. 520 00:24:13,225 --> 00:24:18,080 Un tas ir, izmantojot uz augšu 0s un 1s pie ka daļa fiziskā plate. 521 00:24:18,080 --> 00:24:19,750 >> Nu, kas tas ir fiziskā daļa? 522 00:24:19,750 --> 00:24:25,310 Nu, izrādās, ka uz cietā diska, vismaz no šāda veida, tur 523 00:24:25,310 --> 00:24:27,340 šie tiny maz magnētiskās daļiņas. 524 00:24:27,340 --> 00:24:32,630 Un tie būtībā ir uz ziemeļiem un dienvidiem stabi viņiem, tā, ka, ja jūs 525 00:24:32,630 --> 00:24:35,710 savukārt vienu no šīm magnētiskajām daļiņām Tādā veidā, jūs varētu teikt, ka tā ir 526 00:24:35,710 --> 00:24:36,720 pārstāv 1. 527 00:24:36,720 --> 00:24:39,340 Un, ja tas ir otrādi dienvidiem ziemeļiem, jūs varētu teikt, ka tas ir 528 00:24:39,340 --> 00:24:40,390 pārstāv 0. 529 00:24:40,390 --> 00:24:43,660 >> Tātad reālajā fiziskajā pasaulē, tas ir Kā jūs varētu būt kaut kas 530 00:24:43,660 --> 00:24:45,670 bināro no 0 stāvoklis un 1. 531 00:24:45,670 --> 00:24:46,720 Tātad tas viss fails ir. 532 00:24:46,720 --> 00:24:49,300 Tur viss ķekars magnētiskā daļiņas, kas ir to šādā veidā, vai 533 00:24:49,300 --> 00:24:51,920 šādā veidā, radot modeļus no 0s un 1s. 534 00:24:51,920 --> 00:24:56,760 >> Bet izrādās, kad saglabājat failu, kāda informācija tiek saglabāta atsevišķi. 535 00:24:56,760 --> 00:25:00,000 Tātad tas ir galdiņš, direktoriju, lai runāt. 536 00:25:00,000 --> 00:25:05,810 Un es aicinu šo kolonnas nosaukuma, un Es aicinu šo sleju vietu. 537 00:25:05,810 --> 00:25:08,850 >> Un es esmu gatavojas teikt, pieņemsim, ka šis ir mans CV. 538 00:25:08,850 --> 00:25:14,050 Mans resume.doc tiek uzglabāts vieta, teiksim 123. 539 00:25:14,050 --> 00:25:15,390 Es vienmēr iet uz šo numuru. 540 00:25:15,390 --> 00:25:18,810 Bet pietiek pateikt, ka tāpat kā RAM, jūs varat veikt cieto disku 541 00:25:18,810 --> 00:25:22,350 Tas ir gigabaitu vai 200 gigabaitiem vai terabaitu, un jūs varat 542 00:25:22,350 --> 00:25:23,750 skaits, visi baiti. 543 00:25:23,750 --> 00:25:26,480 Jūs varat saskaitīt visus gabalus 8 biti. 544 00:25:26,480 --> 00:25:29,030 >> Tāpēc mēs sakām, ka šis ir vieta 123. 545 00:25:29,030 --> 00:25:32,070 Tātad šajā direktorijā iekšpusē manas darbības Sistēma atceras, ka mana 546 00:25:32,070 --> 00:25:34,250 atsākt ir 123 vietu. 547 00:25:34,250 --> 00:25:36,850 Bet tā kļūst interesanti, kad izdzēšat failu. 548 00:25:36,850 --> 00:25:37,820 >> Tātad, piemēram - 549 00:25:37,820 --> 00:25:40,790 un par laimi, lielākā daļa pasaulē ir noķerti uz šo - kas notiek, kad 550 00:25:40,790 --> 00:25:45,040 Velkot failu uz jūsu Mac OS miskastes vai jūsu Windows Recycle Bin? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 Kāda ir to izdarīt, mērķis? 553 00:25:50,510 --> 00:25:53,860 Tas ir acīmredzami, lai atbrīvotos no faila, bet ko tas velkot aktu un 554 00:25:53,860 --> 00:25:57,550 krītot uz jūsu miskastes, vai jūsu Recycle Bin paveikt ar datoru? 555 00:25:57,550 --> 00:25:59,230 >> Absolūti nekas, tiešām. 556 00:25:59,230 --> 00:26:00,320 Tas ir tāpat kā mapē. 557 00:26:00,320 --> 00:26:01,800 Tas ir īpašs mapi, lai pārliecinātos. 558 00:26:01,800 --> 00:26:04,460 Bet vai tas tiešām izdzēst failu? 559 00:26:04,460 --> 00:26:06,780 >> Nu, nē, jo daži no jums, iespējams, ir bijis, piemēram, oh damn, jums nav 560 00:26:06,780 --> 00:26:07,420 nozīmē, lai to izdarītu. 561 00:26:07,420 --> 00:26:09,130 Tātad jūs dubultklikšķi Trash vai Recycle Bin. 562 00:26:09,130 --> 00:26:11,630 Jūs esat poked apkārt un jūs esat jāatgūst failu, vienkārši velkot to 563 00:26:11,630 --> 00:26:12,110 no tur. 564 00:26:12,110 --> 00:26:14,420 Tik skaidri, tas ne vienmēr ir dzēšanu. 565 00:26:14,420 --> 00:26:15,990 >> Labi, jūs esat gudrāki, nekā. 566 00:26:15,990 --> 00:26:18,860 Jūs zināt, ka vienkārši velkot to Trash vai Recycle Bin nenozīmē 567 00:26:18,860 --> 00:26:19,930 jūs iztukšot miskasti. 568 00:26:19,930 --> 00:26:24,110 Tātad jūs iet uz augšu uz izvēlni, un jūs sakāt Empty Trash vai Empty Recycle Bin. 569 00:26:24,110 --> 00:26:25,360 Kas notiks tālāk? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> Jā, tāpēc tas tiek izdzēsts vairāk. 572 00:26:32,530 --> 00:26:37,660 Bet viss, kas notiek, tas ir. 573 00:26:37,660 --> 00:26:45,350 Dators aizmirst, kur resume.doc bija. 574 00:26:45,350 --> 00:26:47,400 >> Bet ko nav mainījies acīmredzot attēlā? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 Biti, 0s un 1s, ka es varu pieprasīt, ir uz vietas dažu fizisko aspektu 577 00:26:55,570 --> 00:26:56,280 aparatūras. 578 00:26:56,280 --> 00:26:57,110 Viņi joprojām. 579 00:26:57,110 --> 00:26:58,930 Tas ir tikai dators ir aizmirsuši, kas viņi ir. 580 00:26:58,930 --> 00:27:03,160 >> Tātad, tas ir būtībā atbrīvoja fails ir biti tā, ka tos var izmantot atkārtoti. 581 00:27:03,160 --> 00:27:06,940 Bet ne, kamēr jums izveidot vairākus failus, un vairāk failus, un vairāk faili 582 00:27:06,940 --> 00:27:12,150 probabilistically, kas 0s un 1s, šie magnētiskās daļiņas, saņemt atkārtoti, 583 00:27:12,150 --> 00:27:16,220 Otrādi vai labajā pusē uz augšu, uz citi faili, 0s un 1s. 584 00:27:16,220 --> 00:27:17,980 >> Tātad jums ir šo logu laika. 585 00:27:17,980 --> 00:27:19,860 Un tas nav prognozējama garums, tiešām. 586 00:27:19,860 --> 00:27:22,240 Tas ir atkarīgs no lieluma jūsu cietā disku un cik daudz failus, jums ir un 587 00:27:22,240 --> 00:27:23,490 cik ātri jūs veicat jaunas. 588 00:27:23,490 --> 00:27:27,050 Bet tur tas ir laika logs laikā kas tas fails joprojām ir pilnīgi 589 00:27:27,050 --> 00:27:27,770 atlīdzināmi. 590 00:27:27,770 --> 00:27:31,050 >> Tātad, ja jūs kādreiz izmantot programmas, piemēram, McAfee vai Norton, lai mēģinātu atgūt 591 00:27:31,050 --> 00:27:35,680 datiem, visi viņi dara, cenšas atgūt šo tā saukto direktoriju 592 00:27:35,680 --> 00:27:37,340 izdomāt, kur jūsu fails bija. 593 00:27:37,340 --> 00:27:40,605 Un dažreiz Norton un teiks, fails ir 93% atlīdzināmi. 594 00:27:40,605 --> 00:27:42,020 Nu, ko tas nozīmē? 595 00:27:42,020 --> 00:27:45,690 Tas tikai nozīmē, ka kādu citu failu nejauši beidzās ar, teiksim, 596 00:27:45,690 --> 00:27:48,920 šie biti no jūsu sākotnējā faila. 597 00:27:48,920 --> 00:27:51,950 >> Tātad, kas ir faktiski iesaistīti atgūt datus? 598 00:27:51,950 --> 00:27:55,720 Nu, ja jums nav kaut kas līdzīgs Norton iepriekš instalēta datorā, 599 00:27:55,720 --> 00:27:59,510 labākais jūs varat dažreiz darīt, ir meklēt pēc visu cieto disku meklē 600 00:27:59,510 --> 00:28:00,510 modeļus bitiem. 601 00:28:00,510 --> 00:28:05,350 Un viens no problēmu kopumu tēmas pieci ir, ka jūs meklēt 602 00:28:05,350 --> 00:28:09,570 ekvivalentu cieto disku, kriminālistikas tēls kompaktu flash karti no 603 00:28:09,570 --> 00:28:13,660 digitālā kamera, meklējot 0s un 1s ka parasti, ar augstu 604 00:28:13,660 --> 00:28:16,720 varbūtība, pārstāv sākums JPEG attēlu. 605 00:28:16,720 --> 00:28:21,120 >> Un jūs guys var atgūt šos attēlus, pieņemot, ka, ja es redzu šo modeli 606 00:28:21,120 --> 00:28:24,380 biti uz tiesu tēlu, ar liela varbūtība, kas iezīmē 607 00:28:24,380 --> 00:28:25,650 sākums JPEG. 608 00:28:25,650 --> 00:28:29,520 Un, ja es redzu to pašu modeli atkal, ka, iespējams, iezīmē sākumu 609 00:28:29,520 --> 00:28:32,440 cits JPEG, un vēl JPEG, un vēl JPEG. 610 00:28:32,440 --> 00:28:34,970 Un tas parasti ir, kā datu atgūšanas strādās. 611 00:28:34,970 --> 00:28:37,870 Kas ir jauka par JPEG ir kaut faila formāts pats par sevi ir nedaudz 612 00:28:37,870 --> 00:28:44,400 komplekss, sākums katra šāda fails ir faktiski diezgan identificējama 613 00:28:44,400 --> 00:28:47,370 un vienkārši, kā jūs redzēsiet, ja jūs esat jau nav. 614 00:28:47,370 --> 00:28:50,270 >> Tātad, pieņemsim ņemt tuvāk apskatīt zem hood par to, tieši to, kas ir bijis 615 00:28:50,270 --> 00:28:53,360 notiek, un kādi tie 0s un 1s ir, lai dotu jums mazliet vairāk 616 00:28:53,360 --> 00:28:55,330 konteksts šo konkrēto problēmu. 617 00:28:55,330 --> 00:28:55,510 >> [VIDEO PLAYBACK] 618 00:28:55,510 --> 00:28:58,700 >> -Ja jūsu dators saglabā visvairāk tās pastāvīgajiem datiem. 619 00:28:58,700 --> 00:29:03,390 Lai to izdarītu, datu ceļo no RAM kopā ar programmatūras signāliem, kas liecina 620 00:29:03,390 --> 00:29:06,110 cieto disku, kā uzglabāt šos datus. 621 00:29:06,110 --> 00:29:09,410 Cieto disku shēmas tulkot šie signāli uz sprieguma 622 00:29:09,410 --> 00:29:10,870 svārstības. 623 00:29:10,870 --> 00:29:14,970 Tie, savukārt, kontrolē cietais disks ir kustīgās daļas, daži maz 624 00:29:14,970 --> 00:29:17,910 kustīgās daļas palikušas Mūsdienu dators. 625 00:29:17,910 --> 00:29:22,130 >> Daži no signālu kontrolēt motoru kas griežas metāla pārklājumu šķīvji. 626 00:29:22,130 --> 00:29:25,470 Jūsu dati ir faktiski uzglabā par šiem šķīvji. 627 00:29:25,470 --> 00:29:28,610 Citi signāli pārvietot lasīšanas / rakstīšanas galvas, lai lasītu vai 628 00:29:28,610 --> 00:29:30,710 rakstīt datus par šķīvji. 629 00:29:30,710 --> 00:29:35,450 Šī mašīna tik precīzs, ka cilvēka mati pat nevarēja paiet 630 00:29:35,450 --> 00:29:37,280 galvas un vērpšanas šķīvji. 631 00:29:37,280 --> 00:29:40,316 Tomēr, tas viss strādā drausmīgs ātrumu. 632 00:29:40,316 --> 00:29:40,660 >> [END VIDEO PLAYBACK] 633 00:29:40,660 --> 00:29:42,190 >> DAVID Malan: Zoom in nedaudz dziļāk tagad to, kas ir 634 00:29:42,190 --> 00:29:44,360 faktiski par šīm šķīvji. 635 00:29:44,360 --> 00:29:44,720 >> [VIDEO PLAYBACK] 636 00:29:44,720 --> 00:29:47,660 >> -Apskatīsim ko mēs tikko redzēja palēninājumā. 637 00:29:47,660 --> 00:29:51,710 Ja īsu impulsu elektroenerģijas ir nosūtīts uz lasīšanas / rakstīšanas galviņu, ja flips 638 00:29:51,710 --> 00:29:54,650 uz tiny elektromagnētisko par daļa otrā. 639 00:29:54,650 --> 00:29:58,970 Magnēts rada lauku, kas mainās polaritāte tiny, tiny 640 00:29:58,970 --> 00:30:02,850 daļa no metāla daļiņas, kas mētelis katru plate virsmu. 641 00:30:02,850 --> 00:30:05,940 >> Modelis sērija no šiem tiny, uzlādēts-up jomas, uz diska 642 00:30:05,940 --> 00:30:08,470 pārstāv vienu bitu dati bināro numuru 643 00:30:08,470 --> 00:30:10,530 sistēma, ko izmanto datoros. 644 00:30:10,530 --> 00:30:13,775 Tagad, ja strāva tiek nosūtīta viens veids ar lasīšanas / rakstīšanas galviņu, teritoriju 645 00:30:13,775 --> 00:30:15,970 ir polarizēts vienā virzienā. 646 00:30:15,970 --> 00:30:17,950 Ja strāva ir nosūtīts pretējā virzienā, 647 00:30:17,950 --> 00:30:19,930 polarizācija ir pretēja. 648 00:30:19,930 --> 00:30:22,370 >> Kā jūs iegūt datus no cietā diska? 649 00:30:22,370 --> 00:30:24,090 Vienkārši mainīt šo procesu. 650 00:30:24,090 --> 00:30:26,550 Tātad, tas ir daļiņas uz diska ka iegūt strāva 651 00:30:26,550 --> 00:30:27,960 lasīšanas / rakstīšanas galviņa pārvietojas. 652 00:30:27,960 --> 00:30:30,700 Savākt miljoniem šos magnetizētus segmenti, un 653 00:30:30,700 --> 00:30:32,160 tev failu. 654 00:30:32,160 --> 00:30:36,060 >> Tagad, tad vienā failā gabali var būt izkaisīti pa visu disku s 655 00:30:36,060 --> 00:30:39,970 šķīvji, veida, piemēram, putru par dokumentus par sava rakstāmgalda. 656 00:30:39,970 --> 00:30:43,500 Tāpēc īpaša papildu fails seko , kur viss ir. 657 00:30:43,500 --> 00:30:45,985 Vai ne jūs vēlaties jums bija kaut kā tā? 658 00:30:45,985 --> 00:30:46,470 >> [END VIDEO PLAYBACK] 659 00:30:46,470 --> 00:30:47,820 >> DAVID Malan: Labi, iespējams, nav. 660 00:30:47,820 --> 00:30:52,070 Tik, cik daudzi no jums puiši uzauguši ar šiem? 661 00:30:52,070 --> 00:30:53,970 Labi, tāpēc tas ir mazāk un mazāk rokas katru gadu. 662 00:30:53,970 --> 00:30:56,550 Bet es esmu priecīgs jūs vismaz pazīstami ar viņiem, jo ​​šo un mūsu pašu 663 00:30:56,550 --> 00:31:00,520 Grāmata demo, diemžēl, mirst ļoti lēna nāve šeit familiaritāte. 664 00:31:00,520 --> 00:31:04,010 >> Bet tas ir tas, ko es, vismaz, atpakaļ vidusskolas, ko izmanto izmantošana backups. 665 00:31:04,010 --> 00:31:08,110 Un tas bija pārsteidzošs, jo jūs var uzglabāt 1,4 megabaiti par 666 00:31:08,110 --> 00:31:08,930 šo konkrēto disku. 667 00:31:08,930 --> 00:31:12,260 Un tas bija augsta blīvuma versiju, kā norādīts ar HD, kas ir 668 00:31:12,260 --> 00:31:14,240 kas nozīmē, pirms šodienas HD video. 669 00:31:14,240 --> 00:31:16,400 >> Standarta blīvums bija 800 kilobaiti. 670 00:31:16,400 --> 00:31:18,640 Un pirms tam, bija 400 kilobaiti diski. 671 00:31:18,640 --> 00:31:23,120 Un pirms tam, bija 5 un 1/4 collu diski, kas bija patiešām disketes, 672 00:31:23,120 --> 00:31:25,680 un nedaudz platāks un augstāks par šīm lietām šeit. 673 00:31:25,680 --> 00:31:29,150 Bet jūs faktiski var redzēt tā saukto floppy aspekts šiem diskiem. 674 00:31:29,150 --> 00:31:32,630 >> Un funkcionāli, viņi faktiski diezgan līdzīgs diskdziņiem pie 675 00:31:32,630 --> 00:31:33,570 Vismaz šāda veida. 676 00:31:33,570 --> 00:31:37,270 Atkal, SSD ar jaunāku datoru strādā nedaudz savādāk. 677 00:31:37,270 --> 00:31:41,530 Bet, ja jūs pārvietoties ka maz metāla cilni, Jūs faktiski var redzēt nedaudz cookie, 678 00:31:41,530 --> 00:31:42,560 vai plate. 679 00:31:42,560 --> 00:31:43,830 >> Tas nav metāla, piemēram, šo vienu. 680 00:31:43,830 --> 00:31:46,000 Tas viens ir tiešām dažas lētāk plastmasas materiāls. 681 00:31:46,000 --> 00:31:46,750 Un jūs varat veida valstīties it. 682 00:31:46,750 --> 00:31:50,310 Un jūs esat trully tikai jānoslauka dažas bitu skaitu vai magnētiskām daļiņām 683 00:31:50,310 --> 00:31:51,220 no šī diska. 684 00:31:51,220 --> 00:31:52,710 >> Tātad par laimi, tur nekas par to. 685 00:31:52,710 --> 00:31:55,790 Ja šī lieta ir ceļā - un aptver acis un Jūsu kaimiņš - 686 00:31:55,790 --> 00:31:58,865 Jūs varat vienkārši veida pull šo Visa apvalks off, piemēram, ka. 687 00:31:58,865 --> 00:32:01,900 Bet tur ir maz pavasarī, tāpēc apzinās, ka ar jūsu acīm. 688 00:32:01,900 --> 00:32:03,620 Tātad, tagad jums ir patiesi disketi. 689 00:32:03,620 --> 00:32:07,090 >> Un, kas ir ievērojams par šo ir tā, ka ir tik daudz, cik tas ir 690 00:32:07,090 --> 00:32:10,830 maza mēroga pārstāvība lielāka cietais disks, šīs lietas ir super, 691 00:32:10,830 --> 00:32:11,590 super vienkārši. 692 00:32:11,590 --> 00:32:15,170 Ja jūs saņemiet apakšā to tagad, ka metāla lieta ir off, un miza 693 00:32:15,170 --> 00:32:20,990 tos atvērt, viss notiek, ir divi gabali filcs un tā saukto diskete 694 00:32:20,990 --> 00:32:22,930 ar metāla gabals no iekšpuses. 695 00:32:22,930 --> 00:32:25,990 >> Un tur iet pusi mana diska saturu. 696 00:32:25,990 --> 00:32:27,540 Tur iet vēl puse no tiem. 697 00:32:27,540 --> 00:32:31,375 Bet tas ir viss, kas bija vērpšanai iekšpusē Jūsu datorā vakardienas. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> Un atkal, tas tiktu ieviests perspektīvā, cik liels ir lielākā daļa no jūsu 700 00:32:38,310 --> 00:32:39,560 cieto disku šajās dienās? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 500 gigabaiti, terabaitu, varbūt galddators, 2 terabaitiem, 3 703 00:32:46,230 --> 00:32:47,630 terabaitiem, 4 terabaitiem, labi? 704 00:32:47,630 --> 00:32:52,480 Šis ir viens megabaitu, sniegt vai pieņemt, kas nevar pat fit tipiska MP3 705 00:32:52,480 --> 00:32:55,310 vairs šajās dienās, vai dažas līdzīgi mūzikas failu. 706 00:32:55,310 --> 00:32:59,500 >> Tik maz suvenīru jums šodien, un arī palīdzēt kontekstualizēt ko 707 00:32:59,500 --> 00:33:03,570 mēs, ņemot par pašsaprotamu tagad problēma noteikti pieci. 708 00:33:03,570 --> 00:33:04,820 Tātad tie ir jūsu, lai saglabātu. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 Tātad, ļaujiet man pāreja, kur būs izdevumu nākamo PSET, kā arī. 711 00:33:13,370 --> 00:33:18,470 Tāpēc mēs esam tagad ir noteikts šo lapu - oh, pāris paziņojumiem ātri. 712 00:33:18,470 --> 00:33:21,730 >> Šo piektdien, ja vēlaties pievienoties CS50 pusdienām, dodieties uz ierastajā vietā, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 Un galīgais projekts - 715 00:33:25,100 --> 00:33:28,520 tāpēc vienu mācību, mēs esam ievietojis galīgais projekts specifikācija jau ir. 716 00:33:28,520 --> 00:33:31,410 Saprast, ka tas nenozīmē, ka tas ir saistīts īpaši ātri. 717 00:33:31,410 --> 00:33:33,990 Tas ir ievietojis, tiešām, tikai, lai iegūtu jūs guys domāt par to. 718 00:33:33,990 --> 00:33:37,620 Un tiešām, super ievērojams procentos no jums būs novērst 719 00:33:37,620 --> 00:33:40,780 galīgie projekti par materiālu, ko mēs nav pat gotten uz klasē, 720 00:33:40,780 --> 00:33:42,730 bet būs jau nākamajā nedēļā. 721 00:33:42,730 --> 00:33:45,530 >> Paziņojuma, lai gan, ka spec aicina daži dažādu komponenti 722 00:33:45,530 --> 00:33:46,190 galīgais projekts. 723 00:33:46,190 --> 00:33:49,590 Pirmais, pēc pāris nedēļām, ir kārtas pieteikumā, diezgan gadījuma e-pastu 724 00:33:49,590 --> 00:33:52,760 Jūsu TF pateikt viņam, ko jūs esat domāt par savu projektu, ar 725 00:33:52,760 --> 00:33:53,650 nekādas saistības. 726 00:33:53,650 --> 00:33:56,710 Priekšlikums būs jūsu īpaši saistības, sakot, šeit, tas ir tas, ko 727 00:33:56,710 --> 00:33:57,770 Es gribētu darīt manu projektu. 728 00:33:57,770 --> 00:33:58,250 Ko jūs domājat? 729 00:33:58,250 --> 00:33:58,650 Pārāk liels? 730 00:33:58,650 --> 00:33:59,145 Pārāk mazs? 731 00:33:59,145 --> 00:34:00,330 Vai tas ir pārvaldāms? 732 00:34:00,330 --> 00:34:02,230 Un jūs redzat spec lai saņemtu sīkāku informāciju. 733 00:34:02,230 --> 00:34:05,060 >> Pāris nedēļas pēc tam, kad tas ir statuss ziņojums, kas ir līdzīgi 734 00:34:05,060 --> 00:34:08,260 gadījuma e-pastu uz jūsu TF pateikt, cik tālu aiz jums ir jūsu gala 735 00:34:08,260 --> 00:34:12,360 projekta īstenošana, kam seko CS50 Hackathon uz kuru visi 736 00:34:12,360 --> 00:34:17,520 ir aicināta, kas būs notikums, no 20:00 uz vienu vakaru līdz 07:00 737 00:34:17,520 --> 00:34:19,150 AM nākamajā rītā. 738 00:34:19,150 --> 00:34:22,560 Picas, kā es varētu būt minēts nedēļā nulle, wil tiks pasniegtas 09:00, 739 00:34:22,560 --> 00:34:24,120 Ķīniešu virtuve at 01:00. 740 00:34:24,120 --> 00:34:27,929 Un, ja jūs joprojām nomodā 05:00, mēs tevi IHop brokastīm. 741 00:34:27,929 --> 00:34:31,310 >> Tā Hackathon ir viens no vairāk neaizmirstamu pieredzi šajā klasē. 742 00:34:31,310 --> 00:34:35,290 Tad īstenošana ir saistīts, un tad klimatiskajiem CS50 Fair. 743 00:34:35,290 --> 00:34:38,070 Sīkāka informācija par visiem šiem dažu nedēļu laikā nākt. 744 00:34:38,070 --> 00:34:40,739 >> Bet iesim atpakaļ uz kaut ko vecās skolas - 745 00:34:40,739 --> 00:34:41,920 atkal, masīvs. 746 00:34:41,920 --> 00:34:45,040 Tātad masīvs bija jauki, jo tas atrisina problēmas, piemēram, mēs redzējām tikai 747 00:34:45,040 --> 00:34:49,290 pirms brīža ar studentu struktūrām kļūst mazliet ārpus kontroles, ja mēs 748 00:34:49,290 --> 00:34:52,405 gribu būt students vienu, students divas, students trīs, students dot dot dot, 749 00:34:52,405 --> 00:34:54,400 daži patvaļīgi studentu skaits. 750 00:34:54,400 --> 00:34:58,850 >> Tātad blokiem, pirms dažām nedēļām, swooped un atrisināt visas mūsu problēmas, ne 751 00:34:58,850 --> 00:35:03,340 iepriekš zināt, cik daudz no kaut kāda veida mēs varētu vēlēties. 752 00:35:03,340 --> 00:35:07,390 Un mēs esam redzējuši, ka structs var palīdzēt mums turpmāk organizēt mūsu kodu un saglabāt 753 00:35:07,390 --> 00:35:11,660 konceptuāli līdzīgi mainīgie, piemēram, nosaukums un māja, kopā, lai mēs 754 00:35:11,660 --> 00:35:15,570 var uzskatīt tos par vienu vienību, iekšpusē no kuriem ir mazāki gabali. 755 00:35:15,570 --> 00:35:17,810 >> Bet masīvi ir daži trūkumi. 756 00:35:17,810 --> 00:35:19,780 Kādi ir daži no trūkumiem mēs esam saskārušās 757 00:35:19,780 --> 00:35:22,320 ar masīviem līdz šim? 758 00:35:22,320 --> 00:35:23,450 Kas tas ir? 759 00:35:23,450 --> 00:35:28,130 Fiksēta izmēra - tā, pat ja jūs varētu varētu piešķirt atmiņu 760 00:35:28,130 --> 00:35:32,310 masīvs, kad jūs zināt, cik daudz studentu Jums ir, cik rakstzīmes jums ir 761 00:35:32,310 --> 00:35:35,460 no lietotāja, kad esat sadala masīvs, jūs esat veida krāsots 762 00:35:35,460 --> 00:35:36,740 sevi stūrī. 763 00:35:36,740 --> 00:35:40,600 >> Tāpēc, ka jūs nevarat ievietot jaunus elementus uz centru no masīva. 764 00:35:40,600 --> 00:35:43,660 Jūs nevarat ievietot vairāk elementiem gada beigās masīva. 765 00:35:43,660 --> 00:35:47,750 Tiešām, jums ir jāizmanto, lai izveidotu pilnīgi jaunu masīvs, kā mēs esam apspriests, 766 00:35:47,750 --> 00:35:49,320 kopējot vecā uz jauno. 767 00:35:49,320 --> 00:35:52,610 Un atkal, ka ir galvassāpes, kas GetString nodarbojas ar jums. 768 00:35:52,610 --> 00:35:56,170 >> Bet atkal, jūs pat nevarat ievietot kaut kas vērā vidū masīva 769 00:35:56,170 --> 00:35:58,200 ja likme nav pilnībā aizpildīta. 770 00:35:58,200 --> 00:36:03,010 Piemēram, ja šis masīvs šeit lieluma seši ir tikai piecas lietas tajā, 771 00:36:03,010 --> 00:36:06,080 labi, jūs varētu vienkārši lavierēt kaut uz beigām. 772 00:36:06,080 --> 00:36:08,200 Bet ko tad, ja vēlaties ievietot kaut ko vērā vidū 773 00:36:08,200 --> 00:36:11,280 masīvs, lai gan tas varētu būt piecas no sešām lietām tajā? 774 00:36:11,280 --> 00:36:14,250 >> Nu, ko mēs darām, kad mums bija visi no mūsu brīvprātīgajiem skatuves ar 775 00:36:14,250 --> 00:36:15,110 nedēļas agrāk? 776 00:36:15,110 --> 00:36:18,710 Ja mēs vēlējāmies, lai kāds šeit, vai nu šie cilvēki, kā pārvietot šo 777 00:36:18,710 --> 00:36:22,540 veidā, vai šie cilvēki, kā virzīties uz šo veids, un tas kļuva dārgi. 778 00:36:22,540 --> 00:36:26,950 Novirzot cilvēku iekšpusē masīvs beidzās saskaitot un izmaksu 779 00:36:26,950 --> 00:36:31,240 mums laiku, līdz ar to daudz mūsu n kvadrātā rādīt reizes, piemēram ievietošanas kārtot, lai 780 00:36:31,240 --> 00:36:32,550 Piemēram, sliktākajā gadījumā. 781 00:36:32,550 --> 00:36:36,520 Tātad bloki ir liels, bet jums ir iepriekš zināt, cik liels vēlaties tos. 782 00:36:36,520 --> 00:36:38,030 >> Tātad Labi, šeit ir risinājums. 783 00:36:38,030 --> 00:36:43,860 Ja man nav iepriekš zināt, cik daudz studentiem es varētu būt, un es zinu, reiz 784 00:36:43,860 --> 00:36:47,870 Es nolemju, lai gan, es esmu iestrēdzis ar to daudzi studenti, kāpēc ne es tikai vienmēr 785 00:36:47,870 --> 00:36:51,740 piešķirt divreiz tik daudz vietas kā es varētu domāt, man ir nepieciešams? 786 00:36:51,740 --> 00:36:54,450 Vai tas nav saprātīgs risinājums? 787 00:36:54,450 --> 00:36:58,240 >> Reāli, es nedomāju, ka mēs esam būs nepieciešams vairāk nekā 50 slots 788 00:36:58,240 --> 00:37:02,190 masīva par vidēja lieluma klases, tāpēc pieņemsim tikai noapaļot uz augšu. 789 00:37:02,190 --> 00:37:07,040 Es ņemšu veikt 100 nišas manā masīvs, vienkārši lai mēs varētu noteikti iegūt 790 00:37:07,040 --> 00:37:10,330 studentu skaits, es gaidīt, lai būt kāda vidēja izmēra klasē. 791 00:37:10,330 --> 00:37:14,320 Tātad, kāpēc ne tikai noapaļot uz augšu, un piešķirt vairāk atmiņas, parasti, masīva 792 00:37:14,320 --> 00:37:16,290 nekā jūs domājat, ka jums var būt pat nepieciešama? 793 00:37:16,290 --> 00:37:20,190 Kas tas ir vienkāršs pushback ar šo ideju? 794 00:37:20,190 --> 00:37:21,440 >> Jūs vienkārši izšķērdēt atmiņu. 795 00:37:21,440 --> 00:37:25,350 Burtiski katru programmu, jums rakstīt, tad ir varbūt izmantojot divreiz tik daudz atmiņas, kā 796 00:37:25,350 --> 00:37:26,680 jums tiešām ir nepieciešams. 797 00:37:26,680 --> 00:37:28,990 Un tas vienkārši nav justies kā Īpaši elegants risinājums. 798 00:37:28,990 --> 00:37:31,990 Turklāt, tas tikai samazinās varbūtība problēmu. 799 00:37:31,990 --> 00:37:35,300 Ja jums gadās būt populārs kursu viens semestris un jums ir 101 800 00:37:35,300 --> 00:37:39,610 studenti, jūsu programma ir vēl pamatos vērsts uz to pašu jautājumu. 801 00:37:39,610 --> 00:37:44,280 >> Tātad par laimi, tur ir risinājums, lai Šī reklāma visas mūsu problēmas, kas izpaužas 802 00:37:44,280 --> 00:37:46,790 datu struktūras, kas ir sarežģītāka nekā tiem, 803 00:37:46,790 --> 00:37:47,970 mēs esam redzējuši līdz šim. 804 00:37:47,970 --> 00:37:50,530 Tas, es pretenziju, ir saistīts saraksts. 805 00:37:50,530 --> 00:37:51,920 Šis ir saraksts ar numuriem - 806 00:37:51,920 --> 00:37:54,970 9, 17, 22, 26, 34 un - 807 00:37:54,970 --> 00:38:00,120 , kas ir savstarpēji saistīti ar ceļu par to, ko es esmu sagatavots kā bultiņām. 808 00:38:00,120 --> 00:38:03,580 >> Citiem vārdiem sakot, ja es gribēju, lai pārstāvētu masīvs, es varētu darīt 809 00:38:03,580 --> 00:38:04,910 kaut kas līdzīgs šim. 810 00:38:04,910 --> 00:38:07,310 Un es nolikšu to pie griestiem tikai brīdi. 811 00:38:07,310 --> 00:38:09,970 Es varētu darīt - 812 00:38:09,970 --> 00:38:12,520 sveiki, visi labi. 813 00:38:12,520 --> 00:38:14,470 Gaidīšanas. 814 00:38:14,470 --> 00:38:17,360 Jauns dators šeit, skaidrs - 815 00:38:17,360 --> 00:38:18,090 Labi. 816 00:38:18,090 --> 00:38:21,730 >> Tātad, ja man ir šos skaitļus masīvā - 817 00:38:21,730 --> 00:38:28,880 9, 17, 22, 26, 24 - 818 00:38:28,880 --> 00:38:30,530 ne vienmēr mērogā. 819 00:38:30,530 --> 00:38:33,730 Labi, tāpēc šeit ir mana masīvs - 820 00:38:33,730 --> 00:38:34,980 Ak mans Dievs. 821 00:38:34,980 --> 00:38:38,700 822 00:38:38,700 --> 00:38:40,395 Labi, tāpēc šeit ir mana masīvs. 823 00:38:40,395 --> 00:38:44,110 824 00:38:44,110 --> 00:38:45,050 Ak mans Dievs. 825 00:38:45,050 --> 00:38:48,820 >> [Smiekli] 826 00:38:48,820 --> 00:38:49,440 >> DAVID Malan: Pretend. 827 00:38:49,440 --> 00:38:52,330 Tas ir pārāk daudz pūļu, lai dotos atpakaļ un noteikt, ka tā tur - 828 00:38:52,330 --> 00:38:54,290 26. 829 00:38:54,290 --> 00:38:57,650 Tātad mums ir šis masīvs 9, 17, 22, 26, 34 un. 830 00:38:57,650 --> 00:39:00,260 Attiecībā uz tiem no jums, var redzēt neērts kļūda Es tikko veikts, 831 00:39:00,260 --> 00:39:00,830 tur tas ir. 832 00:39:00,830 --> 00:39:04,490 >> Tāpēc es apgalvo, ka tas ir ļoti efektīvs risinājums. 833 00:39:04,490 --> 00:39:07,310 Esmu piešķirti tik daudz ints kā Man vajag - viens, divi, trīs, 834 00:39:07,310 --> 00:39:09,100 četriem, pieciem, sešiem vai - 835 00:39:09,100 --> 00:39:11,660 un es esmu tam uzglabā skaitļus iekšā šajā masīvā. 836 00:39:11,660 --> 00:39:15,220 Bet pieņemsim, tad, es gribu, lai ievietotu vērtība, piemēram, ar numuru 8? 837 00:39:15,220 --> 00:39:16,100 Nu, ja tas iet? 838 00:39:16,100 --> 00:39:18,530 Pieņemsim, ka es gribu, lai ievietotu numuru, piemēram, 20. 839 00:39:18,530 --> 00:39:19,790 Nu, ja tas iet? 840 00:39:19,790 --> 00:39:23,160 Kaut kur pa vidu, vai skaitlis 35 ir iet 841 00:39:23,160 --> 00:39:24,010 kaut kur beigās. 842 00:39:24,010 --> 00:39:25,320 Bet es esmu visu no kosmosa. 843 00:39:25,320 --> 00:39:29,120 >> Un tā tas ir būtisks izaicinājums ar masīvu tas ir risinājums. 844 00:39:29,120 --> 00:39:32,280 Es apgalvoja pirms brīža, GetString atrisina šo problēmu. 845 00:39:32,280 --> 00:39:37,380 Ja vēlaties ievietot sesto numuru šajā masīva, kas ir vismaz viens 846 00:39:37,380 --> 00:39:40,090 risinājums, jūs varat krist atpakaļ, lai pārliecinātos, tāpat kā mēs ar GetString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 Kas tas ir? 849 00:39:46,030 --> 00:39:48,190 >> Nu, padarītu to lielāku ir vieglāk pateikt, nekā izdarīt. 850 00:39:48,190 --> 00:39:52,810 Mēs nevaram vienmēr padarīt masīvs lielāks, bet ko mēs varam darīt? 851 00:39:52,810 --> 00:39:56,570 Izveidojiet jaunu masīvu, kas ir lielāka, par lielumu 6, vai varbūt size 10, ja mēs vēlamies 852 00:39:56,570 --> 00:40:00,490 lai apsteigtu lietām, un tad kopēt vecais masīvs uz jaunu, un pēc tam 853 00:40:00,490 --> 00:40:01,680 atbrīvotu veco masīvs. 854 00:40:01,680 --> 00:40:05,770 >> Bet kas ir darba laiks Tagad šī procesa? 855 00:40:05,770 --> 00:40:09,870 Tas ir liels O n, jo kopēšana gatavojas izmaksas jums dažas vienības 856 00:40:09,870 --> 00:40:13,480 laiks, tāpēc nav tik ideāls, ja mums ir piešķirt jaunu masīvu, kas notiek 857 00:40:13,480 --> 00:40:15,610 patērēt divreiz tik daudz atmiņā laiku. 858 00:40:15,610 --> 00:40:16,660 Kopēt veco par jaunu - 859 00:40:16,660 --> 00:40:18,800 Es domāju, tas ir tikai galvassāpes, kas ir, atkal, kāpēc mēs rakstījām 860 00:40:18,800 --> 00:40:19,920 GetString jums. 861 00:40:19,920 --> 00:40:21,380 >> Tātad, ko mēs varbūt darīt tā vietā? 862 00:40:21,380 --> 00:40:25,000 Nu, ko tad, ja mūsu datu struktūra patiesībā ir nepilnības to? 863 00:40:25,000 --> 00:40:30,790 Pieņemsim, ka es atpūsties savu mērķi, kam kaimiņu gabalos atmiņas, kur 9 864 00:40:30,790 --> 00:40:34,500 ir tieši blakus 17, kas ir blakus 22, un tā tālāk. 865 00:40:34,500 --> 00:40:39,570 >> Un pieņemsim, ka 9 var būt vairāk nekā šeit RAM, 17 un var būt vairāk nekā šeit RAM, 866 00:40:39,570 --> 00:40:40,990 un 22 var būt vairāk nekā šeit RAM. 867 00:40:40,990 --> 00:40:43,610 Citiem vārdiem sakot, man nav nepieciešams tos pat atpakaļ atpakaļ vairs. 868 00:40:43,610 --> 00:40:47,850 Man vienkārši ir kaut ievērt adatā diegu caur katru no šiem numuriem, vai katrs 869 00:40:47,850 --> 00:40:51,010 no šiem mezgliem, kā mēs to saucam taisnstūri, kā es esmu izstrādāti tiem, uz 870 00:40:51,010 --> 00:40:55,670 atceros, kā nokļūt līdz pēdējo piemēram mezglu no pirmās. 871 00:40:55,670 --> 00:40:59,940 >> Tātad, kas ir plānošanas būvēt mēs esam redzējuši pavisam nesen, ar kuru es 872 00:40:59,940 --> 00:41:03,030 var īstenot šo pavedienu, vai izstrādāts šeit, ar kuru es varu 873 00:41:03,030 --> 00:41:05,430 īstenotu šos bultas? 874 00:41:05,430 --> 00:41:06,500 Tātad norādes, vai ne? 875 00:41:06,500 --> 00:41:09,560 Ja es piešķirt ne tikai int, bet mezglu - un 876 00:41:09,560 --> 00:41:10,810 mezglā, es tikai domāju konteiners. 877 00:41:10,810 --> 00:41:12,900 Un vizuāli, es domāju taisnstūri. 878 00:41:12,900 --> 00:41:16,420 Tātad mezglu acīmredzot vajadzībām lai ir divas vērtības - 879 00:41:16,420 --> 00:41:21,490 int pati par sevi, un pēc tam, kā tas ir norādīts apakšējā puse no taisnstūra, 880 00:41:21,490 --> 00:41:23,010 pietiekami daudz vietas, lai int. 881 00:41:23,010 --> 00:41:26,130 >> Tik vienkārši domāšana uz priekšu šeit, cik liels ir šis mezgls, tas 882 00:41:26,130 --> 00:41:27,170 konteineru attiecīgais? 883 00:41:27,170 --> 00:41:29,250 Cik baiti int? 884 00:41:29,250 --> 00:41:31,310 Jādomā 4, ja tas ir tāds pats kā parasti. 885 00:41:31,310 --> 00:41:33,270 Un tad cik daudz baitu par rādītāju? 886 00:41:33,270 --> 00:41:33,650 4. 887 00:41:33,650 --> 00:41:37,940 Tātad šis konteiners, vai šis mezgls, ir būs 8 baitu struktūra. 888 00:41:37,940 --> 00:41:41,760 Ak, un tas ir laimīga sakritība, ka mēs tikko ieviesusi šo jēdzienu 889 00:41:41,760 --> 00:41:44,400 struktūrai, vai C struktūra. 890 00:41:44,400 --> 00:41:48,890 >> Tāpēc es apgalvot, ka es gribu spert soli pret šo sarežģītākas 891 00:41:48,890 --> 00:41:52,560 īstenošanu saraksta numuru, ar saistīts saraksts ar skaitļiem, man ir jādara 892 00:41:52,560 --> 00:41:56,920 nedaudz vairāk, līdz priekšā domāšana un atzīt ne tikai int, bet struct 893 00:41:56,920 --> 00:41:58,620 ka es zvanu, parasti šeit, mezglu. 894 00:41:58,620 --> 00:42:01,630 Mēs varētu saukt kaut ko mēs gribam, bet mezglā būs tematiska daudz 895 00:42:01,630 --> 00:42:03,560 lietas, ko mēs sākt meklēt tagad. 896 00:42:03,560 --> 00:42:06,480 >> Inside šo mezglā ir int n. 897 00:42:06,480 --> 00:42:09,350 Un tad tas sintaksi, nedaudz dīvaini, pēc pirmā acu uzmetiena - 898 00:42:09,350 --> 00:42:12,960 struct mezglā * nākamo. 899 00:42:12,960 --> 00:42:16,900 Nu piktogrammām, kas tas ir? 900 00:42:16,900 --> 00:42:21,000 Tas ir apakšējā puse no taisnstūris, ka mēs redzējām 901 00:42:21,000 --> 00:42:22,730 tikai pirms brīža. 902 00:42:22,730 --> 00:42:27,600 >> Bet kāpēc es saku struct mezglā * nevis tikai mezglu *? 903 00:42:27,600 --> 00:42:31,370 Jo, ja tas rādītājs ir vērsta citā mezglā, tas ir tikai 904 00:42:31,370 --> 00:42:32,760 adrese mezglā. 905 00:42:32,760 --> 00:42:35,630 Tas ir saskaņā ar to, ko mēs esam apspriesti par norādes līdz šim. 906 00:42:35,630 --> 00:42:39,690 Bet kāpēc, ja man apgalvo, šī struktūra ir sauc par mezglu, man jāsaka struct 907 00:42:39,690 --> 00:42:42,660 mezglu iekšā šeit? 908 00:42:42,660 --> 00:42:43,190 >> Tieši tā. 909 00:42:43,190 --> 00:42:46,490 Tas ir sava veida stulbu realitātes C. Typedef, tā sakot, tā nav 910 00:42:46,490 --> 00:42:47,220 noticis yet. 911 00:42:47,220 --> 00:42:48,510 C ir super burtiski. 912 00:42:48,510 --> 00:42:51,050 Tas skan jūsu kodu augšas uz apakšas, kreisās puses uz labo. 913 00:42:51,050 --> 00:42:54,930 Un, kamēr tas hits, ka semikolu par apakšējā līnija, uzminēt, ko nav 914 00:42:54,930 --> 00:42:57,590 pastāvēt kā datu tipu? 915 00:42:57,590 --> 00:42:59,060 Mezglā, citējot likt pēdiņas beigās mezglā. 916 00:42:59,060 --> 00:43:03,050 >> Bet tāpēc, ka vairāk runīgs deklarācija I did pirmajā līnijā - 917 00:43:03,050 --> 00:43:05,340 typedef struktūrai mezglu - 918 00:43:05,340 --> 00:43:08,790 tāpēc, ka tas bija pirmais, pirms cirtaini bikšturi, tas ir veida, piemēram, 919 00:43:08,790 --> 00:43:11,800 iepriekš izglītojot šķindēt, ka jūs zināt, ko, iedodiet man struct 920 00:43:11,800 --> 00:43:13,570 sauc struct mezglā. 921 00:43:13,570 --> 00:43:16,270 Atklāti sakot, man nepatīk, aicinot lietas struct mezglā, struktūrai mezgls visu 922 00:43:16,270 --> 00:43:17,090 visā manā kodu. 923 00:43:17,090 --> 00:43:20,660 Bet es ņemšu izmantot tikai to vienu reizi, tikai iekšpusē, tāpēc, ka es varu efektīvi 924 00:43:20,660 --> 00:43:25,010 radīt sava veida apļveida atsauces, kas nav rādītāju uz sevi per se, bet gan 925 00:43:25,010 --> 00:43:29,400 rādītājs uz citu identiska tipa. 926 00:43:29,400 --> 00:43:32,330 >> Tātad izrādās, ka par datu struktūru kā šis, tur ir maz 927 00:43:32,330 --> 00:43:34,470 darbības, kas varētu būt , kas interesē mūs. 928 00:43:34,470 --> 00:43:37,460 Mēs varētu vēlēties, lai ievietotu par sarakstu, piemēram, šis. 929 00:43:37,460 --> 00:43:39,850 Mēs varētu vēlēties, lai dzēstu no saraksta, piemēram, šis. 930 00:43:39,850 --> 00:43:43,490 Mēs varētu vēlēties, lai meklētu sarakstu vērtību, vai, plašākā nozīmē, traversa. 931 00:43:43,490 --> 00:43:46,410 Un traversa ir tikai iedomātā veids sakot sākt pa kreisi, un pārvietot visus 932 00:43:46,410 --> 00:43:47,650 veids, kā labi. 933 00:43:47,650 --> 00:43:52,640 >> Un paziņojums, pat ar to nedaudz vairāk sarežģītu datu struktūra, lai 934 00:43:52,640 --> 00:43:56,510 es ierosinu, ka mēs varam aizņemties dažus idejas, kas pēdējo divu nedēļu laikā un 935 00:43:56,510 --> 00:43:58,410 īstenotu ko sauc funkciju meklēt, kā šis. 936 00:43:58,410 --> 00:44:01,360 Tas notiek, lai atgrieztos taisnība, vai nepatiesi, norādot, jā vai 937 00:44:01,360 --> 00:44:03,390 nē, n ir sarakstā. 938 00:44:03,390 --> 00:44:05,960 Tās Otrs arguments ir rādītājs līdz sarakstā pati, tā 939 00:44:05,960 --> 00:44:07,920 rādītāju uz mezglu. 940 00:44:07,920 --> 00:44:10,350 >> Viss, ko es esmu gatavojas, lai pēc tam darīt, ir atzīt pagaidu mainīgo. 941 00:44:10,350 --> 00:44:12,730 Mēs to saucam par PTR pēc vienošanās, par rādītāju. 942 00:44:12,730 --> 00:44:15,220 Un es piešķirt to vienāds sākumā sarakstā. 943 00:44:15,220 --> 00:44:16,680 >> Un tagad paziņojums, kamēr cilpa. 944 00:44:16,680 --> 00:44:20,640 Tik ilgi, kamēr rādītājs nav vienāds Null, es esmu gatavojas pārbaudīt. 945 00:44:20,640 --> 00:44:24,520 Ir rādītājs arrow n ir vienāds ar n, kas tika pieņemts? 946 00:44:24,520 --> 00:44:26,410 Bet pagaidiet minūti - jauns gabals sintaksi. 947 00:44:26,410 --> 00:44:29,324 Kas ir bultiņa pēkšņi? 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 >> Tieši tā. 951 00:44:34,810 --> 00:44:38,860 Tātad, tā kā pirms dažām minūtēm, mēs izmantojām dot notācija piekļūt kaut ko 952 00:44:38,860 --> 00:44:43,080 iekšpusē ar struktūrai, ja mainīgais Jums nav struct 953 00:44:43,080 --> 00:44:47,420 pati par sevi, bet rādītājs uz struktūrai, par laimi, gabals sintaksi, ka 954 00:44:47,420 --> 00:44:48,620 beidzot padara intuitīvu sajūtu. 955 00:44:48,620 --> 00:44:52,360 Bultiņa nozīmē sekot rādītāju, tāpat kā mūsu bultiņas parasti nozīmē 956 00:44:52,360 --> 00:44:56,570 gleznieciski, un iet pie datu lauks iekšā. 957 00:44:56,570 --> 00:44:59,700 Tātad bultiņa ir tas pats, kas dot, bet jūs to izmantot, ja jums ir rādītājs. 958 00:44:59,700 --> 00:45:05,270 >> Tik vienkārši, lai Atgādinājums, tad, ja n lauks iekšpusē struktūrai sauc rādītāju 959 00:45:05,270 --> 00:45:07,760 vienāds vienāds n, atgriešanās patiess. 960 00:45:07,760 --> 00:45:11,970 Pretējā gadījumā šī līnija šeit - rādītājs vienāds ar rādītāju nākamo. 961 00:45:11,970 --> 00:45:17,540 Tātad, ko tas dara, paziņojums, ir, ja es esmu šobrīd, norādot uz struct 962 00:45:17,540 --> 00:45:21,430 , kas satur 9, 9 un ir ne numurs Es esmu meklē - domāju, ka es esmu meklē 963 00:45:21,430 --> 00:45:22,830 par n ir vienāds ar 50 - 964 00:45:22,830 --> 00:45:25,930 Es esmu gatavojas atjaunināt savu pagaidu rādītāju ne norādīt uz šajā mezglā 965 00:45:25,930 --> 00:45:31,190 vairs, bet rādītājs bultiņas blakus, kas gatavojas nodot mani šeit. 966 00:45:31,190 --> 00:45:34,270 >> Tagad, es sapratu, ir viesulis ieviešana. 967 00:45:34,270 --> 00:45:37,380 Trešdien, mēs faktiski darīt ar dažiem cilvēkiem un dažas vairāk 968 00:45:37,380 --> 00:45:38,900 kods lēnākā tempā. 969 00:45:38,900 --> 00:45:42,990 Bet saproti, mēs tagad padarīt mūsu datiem struktūras sarežģītāka tāpēc, ka mūsu 970 00:45:42,990 --> 00:45:45,780 algoritmi var iegūt efektīvāku, kas būs priekšnosacījums 971 00:45:45,780 --> 00:45:50,500 PSET seši, kad mēs slodze, atkal, tie, 150000 vārdi, bet ir nepieciešams to darīt 972 00:45:50,500 --> 00:45:55,650 efektīvi, un ideālā gadījumā, izveidot programma, kas darbojas, lai mūsu lietotājiem nav 973 00:45:55,650 --> 00:46:00,460 lineāra, nevis n kvadrātā, bet konstante laiks, ideālā. 974 00:46:00,460 --> 00:46:02,300 >> Mēs tiksimies trešdien. 975 00:46:02,300 --> 00:46:07,240 >> SPEAKER: Nākamajā CS50, David aizmirst savu pamata lietu. 976 00:46:07,240 --> 00:46:12,770 >> DAVID Malan: Un tas, kā jūs sūtīt īsziņas ar C. Ko - 977 00:46:12,770 --> 00:46:14,020 >> [DAŽĀDU īsziņā PAZIŅOJUMS SOUNDS] 978 00:46:14,020 --> 00:46:19,734