1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> DAVID Malan: Olgu, tere tulemast tagasi. 3 00:00:12,580 --> 00:00:13,290 See on CS50. 4 00:00:13,290 --> 00:00:15,130 See on algus nädalal seitse. 5 00:00:15,130 --> 00:00:18,890 Nii et see on olnud mõnda aega, nii et ma arvasin, et me võtma tuulispask tour, kus me 6 00:00:18,890 --> 00:00:20,760 pooleli jäi, ja kui me nüüd minema. 7 00:00:20,760 --> 00:00:23,310 >> Nii et see asi siin võib-olla tekitanud angst alguses. 8 00:00:23,310 --> 00:00:27,680 Aga loodetavasti hakkad aklimatiseeruda, mida see tähistab siin - 9 00:00:27,680 --> 00:00:32,670 star esindavad pointer, mis on just see, et rohkem üldarusaadavat mõttes? 10 00:00:32,670 --> 00:00:33,400 Nii et see on aadress. 11 00:00:33,400 --> 00:00:35,490 >> Nii et see on aadress, midagi mälestuseks. 12 00:00:35,490 --> 00:00:38,260 Ja hakkasime koor tagasi kihid Paar nädalat tagasi, asjad 13 00:00:38,260 --> 00:00:41,800 GetString ja muid selliseid funktsioone kõik see aeg on tagasi 14 00:00:41,800 --> 00:00:46,010 aadressid asju mälu, nagu aadress esimene märk 15 00:00:46,010 --> 00:00:46,990 mõned jada. 16 00:00:46,990 --> 00:00:50,360 >> Nii me ka kasutusele valgrind, mis hakkate kasutama seda probleemi 17 00:00:50,360 --> 00:00:53,380 seada, eelkõige järgmise probleem määrata samuti. 18 00:00:53,380 --> 00:00:54,980 Ja valgrind mida teeb meie jaoks? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 Ta kontrollib mälu lekib, ja see kontrollib ka kuritarvitamise mälu. 21 00:01:01,020 --> 00:01:05,890 >> See võib teatud tõenäosusega, avastada, kui Sinu kood läheb puudutada mälu 22 00:01:05,890 --> 00:01:07,100 et see lihtsalt ei peaks. 23 00:01:07,100 --> 00:01:10,410 Nii ei pruugi leke, kuid kui te ületavad piire mõned 24 00:01:10,410 --> 00:01:14,730 massiiv, ja sa tegelikult kulgema valgrind ja esile, et käitumine, kui 25 00:01:14,730 --> 00:01:17,870 valgrind töötab oma programmi töötab sees on, saad 26 00:01:17,870 --> 00:01:21,460 sõnumeid nagu see - "vigane kirjutame suurus 4 ", mis meenutavad paar 27 00:01:21,460 --> 00:01:25,880 nädalat tagasi tähendas, et olin kogemata nagu ühel int liiga kaugele 28 00:01:25,880 --> 00:01:27,250 piiridest väljapoole massiivi. 29 00:01:27,250 --> 00:01:30,790 Ja nii suurus 4 tähendab siin suurus et erilist int. 30 00:01:30,790 --> 00:01:35,260 >> Nii, et võta kindlustunnet selles, et valgrind väljund, vormistati see, 31 00:01:35,260 --> 00:01:36,170 on lihtsalt jõle. 32 00:01:36,170 --> 00:01:40,180 See on tõesti raske läbi näha segadus jaoks huvitavat informatsiooni. 33 00:01:40,180 --> 00:01:42,910 Niisiis, mida me oleme teinud siin on lihtsalt väljavõte mõned veel paar 34 00:01:42,910 --> 00:01:43,850 huvitav read. 35 00:01:43,850 --> 00:01:46,760 Aga mõistan, et 80% valgrind poolt toodang saab olema natuke 36 00:01:46,760 --> 00:01:47,650 tähelepanu kõrvale. 37 00:01:47,650 --> 00:01:52,820 >> Lihtsalt otsida mustreid, nagu need - kehtetu õigus, kehtetuks lugeda, 40 baiti 38 00:01:52,820 --> 00:01:56,690 ja mõned plokkide arv on kindlasti kadunud, märksõnad niimoodi. 39 00:01:56,690 --> 00:02:01,920 Ja mida sa loodetavasti näha, on mõned mingi jälg missugust ülesannet 40 00:02:01,920 --> 00:02:03,340 viga on tegelikult sisse 41 00:02:03,340 --> 00:02:07,195 Selles asjas, millises reas minu kood oli viga ilmselt? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26 faili nimega memory.c, mis oli Näiteks me mängisime koos 44 00:02:14,130 --> 00:02:14,890 ajal. 45 00:02:14,890 --> 00:02:16,460 Nii et see on tõenäoliselt ei malloc. 46 00:02:16,460 --> 00:02:18,630 See oli ilmselt minu koodi asemel. 47 00:02:18,630 --> 00:02:20,910 Nii me näeme, see uuesti ja uuesti enne pikk. 48 00:02:20,910 --> 00:02:24,080 >> Nii scanf, see tuli sisse paar vorme siiani. 49 00:02:24,080 --> 00:02:26,410 Nägime sscanf lühidalt. 50 00:02:26,410 --> 00:02:28,330 See oli midagi, mitmed sa sukeldus oma 51 00:02:28,330 --> 00:02:29,535 ettevalmistusi tegema. 52 00:02:29,535 --> 00:02:33,130 Ja scanf on tegelikult see, mis CS50 Raamatukogu on kasutanud all 53 00:02:33,130 --> 00:02:36,560 kapuuts juba mõnda aega, et saada sisend kasutaja. 54 00:02:36,560 --> 00:02:40,420 >> Näiteks, kui ma minna üle CS50 Seadme siin, lubage mul avada 55 00:02:40,420 --> 00:02:45,315 Näiteks täna, et kutsutakse scanf-0.c Ja see on super lihtne. 56 00:02:45,315 --> 00:02:46,590 See on lihtsalt paar rida koodi. 57 00:02:46,590 --> 00:02:50,880 Aga see näitab tegelikult, kuidas getInt on töötanud kogu see aeg. 58 00:02:50,880 --> 00:02:54,710 >> Selles programmis siin, joon 16 , Teate, et ma kuulutada int. 59 00:02:54,710 --> 00:02:57,270 Seega ei ole viiteid, midagi maagilist seal, lihtsalt int. 60 00:02:57,270 --> 00:03:00,330 Siis joon 17, I kiire kasutaja number, palun. 61 00:03:00,330 --> 00:03:02,930 Siis lõpus 18, ma saan kasutada scanf siin. 62 00:03:02,930 --> 00:03:06,910 Ja ma täpsustada, selline nagu printf, et ma ootan quote 63 00:03:06,910 --> 00:03:08,110 lõppeb protsenti i. 64 00:03:08,110 --> 00:03:10,920 >> Nii protsenti i muidugi tähistab int. 65 00:03:10,920 --> 00:03:14,580 Aga teate, mis teises argument scanf on. 66 00:03:14,580 --> 00:03:17,350 Kuidas te kirjeldaksite teine argument pärast koma? 67 00:03:17,350 --> 00:03:19,450 Mis see on? 68 00:03:19,450 --> 00:03:20,670 >> See on aadress, x. 69 00:03:20,670 --> 00:03:25,490 Nii et see on kasulik, sest andes scanf koos aadressiga x, mida see 70 00:03:25,490 --> 00:03:29,560 et anda see funktsioon teha? 71 00:03:29,560 --> 00:03:33,010 Mitte lihtsalt sinna minna, kuid ka seda, mida? 72 00:03:33,010 --> 00:03:34,060 >> Tee muudatusest. 73 00:03:34,060 --> 00:03:38,080 Sest sa ei lähe sinna, see on omamoodi nagu kaardi asukohta mälus. 74 00:03:38,080 --> 00:03:41,900 Ja nii kaua, kui te pakkuda scanf või iga funktsioon selline kaart, mis 75 00:03:41,900 --> 00:03:45,840 funktsiooni saab sinna minna, ja mitte ainult pilk väärtus, kuid see võib ka 76 00:03:45,840 --> 00:03:49,670 muutma seda väärtust, mis on kasulik, kui eesmärk elus on scanf on 77 00:03:49,670 --> 00:03:53,060 skaneerida kasutajalt konkreetselt alates klaviatuurist. 78 00:03:53,060 --> 00:03:57,830 Ja f tähistab vormindatud, just nagu printf, f tähistab vormindatud 79 00:03:57,830 --> 00:03:58,930 string, mida soovite printida. 80 00:03:58,930 --> 00:04:04,430 >> Nii lühike, see liin 18 lihtsalt ütleb, proovige lugeda int alates kasutaja 81 00:04:04,430 --> 00:04:10,420 klaviatuur ja hoidke seda sees x juures mis iganes aadress x juhtub elama. 82 00:04:10,420 --> 00:04:14,860 Ja siis lõpuks, liin 19 lihtsalt ütleb, tänu int, käesolevas asjas. 83 00:04:14,860 --> 00:04:15,940 >> Nii et lubage mul minna ja teha seda. 84 00:04:15,940 --> 00:04:18,570 Nii et scanf 0. 85 00:04:18,570 --> 00:04:20,130 Lubage mul minna ja suumimiseks 86 00:04:20,130 --> 00:04:22,960 Ma lähen ja käivitada seda dots kärpida scanf 0. 87 00:04:22,960 --> 00:04:24,020 Number, palun? 88 00:04:24,020 --> 00:04:24,720 50. 89 00:04:24,720 --> 00:04:25,730 Täname 50. 90 00:04:25,730 --> 00:04:27,270 Nii et see on üsna lihtne. 91 00:04:27,270 --> 00:04:28,160 >> Nüüd sellest, mis on ta ei tee? 92 00:04:28,160 --> 00:04:29,940 See ei tee terve hunnik vigade kontroll. 93 00:04:29,940 --> 00:04:33,000 Näiteks, kui ma ei tee koostööd, ja ma ei kirjuta number, kuid 94 00:04:33,000 --> 00:04:37,860 selle asemel ma kirjutada midagi "tere" see on lihtsalt mingi imelik. 95 00:04:37,860 --> 00:04:41,130 Ja nii üks asju CS50 raamatukogu on teinud meie jaoks mingil 96 00:04:41,130 --> 00:04:43,440 aeg on see, et reprompting ja reprompting. 97 00:04:43,440 --> 00:04:49,320 >> Uuesti fraas tagasikutsumine cs50.c, ja see on põhjus, et getInt sisse 98 00:04:49,320 --> 00:04:51,670 CS50 raamatukogu on tegelikult kogu hunnik rida pikk, sest me oleme 99 00:04:51,670 --> 00:04:53,190 kontrollimine loll värk niimoodi. 100 00:04:53,190 --> 00:04:55,730 Kas kasutaja ei anna meile tegelikult int? 101 00:04:55,730 --> 00:04:57,910 Kas ta annab meile midagi nagu tähestiku täht? 102 00:04:57,910 --> 00:05:01,410 Kui jah, me tahame, et avastada mis ja karju neile. 103 00:05:01,410 --> 00:05:03,915 >> Aga asjad huvitavamaks Järgmises näites. 104 00:05:03,915 --> 00:05:09,840 Kui ma lähen scanf-1.c, mis on üks asi, mis on fundamentaalselt muutunud 105 00:05:09,840 --> 00:05:11,135 Järgmises näites? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 Ma kasutan char * muidugi asemel int. 108 00:05:16,010 --> 00:05:19,210 >> Nii et see on huvitav, sest char * mäletan, on tegelikult lihtsalt 109 00:05:19,210 --> 00:05:20,190 sama asi nagu string. 110 00:05:20,190 --> 00:05:23,840 Niisiis tundub, nagu võib-olla on see super lihtne rakendamine getString. 111 00:05:23,840 --> 00:05:26,010 Aga ma olen kooritud tagasi kiht Euroopa CS50 raamatukogu, nii et ma olen 112 00:05:26,010 --> 00:05:27,550 kutsudes seda char * nüüd. 113 00:05:27,550 --> 00:05:30,070 Vaatame siis, kui pool, me valesti minna. 114 00:05:30,070 --> 00:05:30,840 >> Line 17 - 115 00:05:30,840 --> 00:05:33,950 Ma ütlen veelkord, palun anna mulle midagi, sel juhul string. 116 00:05:33,950 --> 00:05:37,940 Ja siis järgmisel real, kutsun scanf, uuesti, andes vormi kood, 117 00:05:37,940 --> 00:05:39,310 kuid seekord protsenti s. 118 00:05:39,310 --> 00:05:41,900 Ja siis see aeg, ma olen annab see puhver. 119 00:05:41,900 --> 00:05:43,550 >> Nüüd teate, ma ei kasuta ampersand. 120 00:05:43,550 --> 00:05:47,120 Aga miks on see, et ilmselt OK siin? 121 00:05:47,120 --> 00:05:49,760 Sest see, mis on puhver juba? 122 00:05:49,760 --> 00:05:50,770 See on juba pointer. 123 00:05:50,770 --> 00:05:51,650 See on juba aadress. 124 00:05:51,650 --> 00:05:54,510 >> Ja olgem see sõna "segadusse," andke mulle lihtsalt nimetame seda s näiteks jaoks 125 00:05:54,510 --> 00:05:55,050 lihtsus. 126 00:05:55,050 --> 00:05:58,250 Aga ma kutsusin ta puhverdada sest üldiselt, programmeerimine, kui teil on 127 00:05:58,250 --> 00:06:02,130 tüki mälu, mis string tõesti lihtsalt on, siis võite helistada see puhver. 128 00:06:02,130 --> 00:06:04,460 See on koht, et salvestada teavet. 129 00:06:04,460 --> 00:06:07,400 >> Sarnased asjad nagu YouTube, kui nad puhverdusvõime, nii rääkida, et 130 00:06:07,400 --> 00:06:10,270 lihtsalt tähendab see allalaadimine bitti Internet ja ladustamiseks neid 131 00:06:10,270 --> 00:06:14,160 kohaliku massiivi kohaliku tüki mälu, nii et saab vaadata seda hiljem ilma 132 00:06:14,160 --> 00:06:16,830 see vahele või riputamise te mängides tagasi. 133 00:06:16,830 --> 00:06:20,930 >> Nii et seal on probleem küll, sest Ma ütlen scanf oodata 134 00:06:20,930 --> 00:06:22,320 string kasutaja. 135 00:06:22,320 --> 00:06:24,410 Siin on aadress tüki mälu. 136 00:06:24,410 --> 00:06:26,180 Pane see string seal. 137 00:06:26,180 --> 00:06:31,230 Miks see nii on köidetud anda meile probleeme, kuigi? 138 00:06:31,230 --> 00:06:33,490 >> Mis see on? 139 00:06:33,490 --> 00:06:35,510 Kas ma tohin kasutada et osa mälu? 140 00:06:35,510 --> 00:06:36,250 Tead, ma ei tea. 141 00:06:36,250 --> 00:06:39,210 Sest on puhver on vormindatud midagi? 142 00:06:39,210 --> 00:06:39,820 Mitte eriti. 143 00:06:39,820 --> 00:06:43,090 Ja nii see on, mida me oleme oodanud prügi väärtus, mis 144 00:06:43,090 --> 00:06:44,040 ei ole ametlik sõna. 145 00:06:44,040 --> 00:06:49,200 See lihtsalt tähendab, et me ei tea, mis bitti on sees neli baiti, et 146 00:06:49,200 --> 00:06:51,240 Olen eraldatakse puhver. 147 00:06:51,240 --> 00:06:52,450 >> Ma pole kutsutud malloc. 148 00:06:52,450 --> 00:06:53,940 Olen kindlasti ei kutsunud getString. 149 00:06:53,940 --> 00:06:56,380 Nii et kes teab, mis on tegelikult sees puhver? 150 00:06:56,380 --> 00:07:00,550 Ja veel ütlen scanf pimesi minna ja panna mida iganes kasutaja sisestatud. 151 00:07:00,550 --> 00:07:04,460 >> Niisiis, mida võib põhjustada meie koodi kui me käivitada? 152 00:07:04,460 --> 00:07:05,700 Tõenäoliselt segfault. 153 00:07:05,700 --> 00:07:07,970 Võib-olla mitte, kuid ilmselt segfault. 154 00:07:07,970 --> 00:07:10,620 Ja ma ütlen, võib-olla mitte, sest mõnikord sa teed, mõnikord 155 00:07:10,620 --> 00:07:11,380 sa ei saa segfault. 156 00:07:11,380 --> 00:07:14,280 Mõnikord lihtsalt veab, kuid see on siiski saab olema 157 00:07:14,280 --> 00:07:15,340 bug meie programmis. 158 00:07:15,340 --> 00:07:17,060 >> Nii et lubage mul minna ja koostab selle. 159 00:07:17,060 --> 00:07:18,280 Ma lähen tegema seda vana kooli viis. 160 00:07:18,280 --> 00:07:23,825 Nii rõkkama kriips 0, scanf-1, scanf-1.c, Enter. 161 00:07:23,825 --> 00:07:24,720 Oih, liiga vana kool. 162 00:07:24,720 --> 00:07:26,550 Vaatame. 163 00:07:26,550 --> 00:07:28,440 Kust ma minna? 164 00:07:28,440 --> 00:07:29,700 Oh, char * puhver. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 Oh, tänan teid - 167 00:07:35,130 --> 00:07:36,930 Salvesta OK - 168 00:07:36,930 --> 00:07:37,690 väga vana kool. 169 00:07:37,690 --> 00:07:38,900 Olgu, see on olnud mõnda aega. 170 00:07:38,900 --> 00:07:41,720 >> Nii et ma olen lihtsalt salvestatud fail pärast tegemine, et ajutine 171 00:07:41,720 --> 00:07:42,700 muuta hetk tagasi. 172 00:07:42,700 --> 00:07:46,090 Ja nüüd olen koostanud see käsitsi rõkkama. 173 00:07:46,090 --> 00:07:49,500 Ja nüüd ma lähen edasi minna ja käivitada scanf-1, Enter. 174 00:07:49,500 --> 00:07:50,290 String palun. 175 00:07:50,290 --> 00:07:51,600 Ma kirjuta "tere." 176 00:07:51,600 --> 00:07:54,070 >> Ja nüüd, siin, kus ausalt öeldes printf võimalik on natuke tüütu. 177 00:07:54,070 --> 00:07:56,020 See ei ole tegelikult läheb segfault käesolevas asjas. 178 00:07:56,020 --> 00:07:59,860 Printf on natuke eriline, sest see on nii super levinud, et 179 00:07:59,860 --> 00:08:03,570 sisuliselt printf teeb meile teene ja realiseerimisel, 180 00:08:03,570 --> 00:08:04,830 see ei ole kehtiv pointer. 181 00:08:04,830 --> 00:08:09,080 Võtan ta pärast ise lihtsalt printida välja sulgudes null, isegi 182 00:08:09,080 --> 00:08:13,340 kuigi see ei pruugi olla see, mida me end oodata. 183 00:08:13,340 --> 00:08:16,940 >> Nii et me ei saa tõesti kergesti esile segfault seda, kuid selgelt seda 184 00:08:16,940 --> 00:08:18,600 ei ole käitumine tahtsin. 185 00:08:18,600 --> 00:08:19,800 Mis on lihtne lahendus? 186 00:08:19,800 --> 00:08:25,650 Noh, scanf-2, andke mulle ettepaneku, et asemel tegelikult lihtsalt eraldada 187 00:08:25,650 --> 00:08:30,100 char * Lubage mul olla natuke targemaks umbes seda ja las ma buhvritele 188 00:08:30,100 --> 00:08:32,940 jadana 16 tähemärki. 189 00:08:32,940 --> 00:08:34,200 >> Ma võin seda teha paar võimalust. 190 00:08:34,200 --> 00:08:35,610 Ma võiks täiesti kasutada malloc. 191 00:08:35,610 --> 00:08:38,980 Aga ma ei saa minna tagasi nädal kaks kui Ma lihtsalt vaja terve hunnik 192 00:08:38,980 --> 00:08:39,620 tähemärki. 193 00:08:39,620 --> 00:08:40,860 See on lihtsalt massiivi. 194 00:08:40,860 --> 00:08:44,870 Nii et lubage mul selle asemel uuesti puhver olema massiiv 16 tähemärki. 195 00:08:44,870 --> 00:08:47,340 >> Ja nüüd, kui ma edasi puhver - 196 00:08:47,340 --> 00:08:49,940 ja see on midagi, mida me ei rääkida nädalal kaks - 197 00:08:49,940 --> 00:08:53,730 kuid saab ravida massiivi kuigi see on aadress. 198 00:08:53,730 --> 00:08:56,390 Tehniliselt nagu me oleme näinud, et nad on natuke erinev. 199 00:08:56,390 --> 00:09:01,290 Aga scanf ei pahanda, kui te kaotate seda nimi massiivi, sest mida 200 00:09:01,290 --> 00:09:05,030 Rõkkama teeme meie jaoks on sisuliselt ravida nime, et massiivi 201 00:09:05,030 --> 00:09:08,280 aadress patakas 16 baiti. 202 00:09:08,280 --> 00:09:09,550 >> Nii et see on parem. 203 00:09:09,550 --> 00:09:12,110 See tähendab, et nüüd, ma saan loodetavasti tehke järgmist. 204 00:09:12,110 --> 00:09:16,800 Lubage mul välja suumida hetkeks ja ei tee scanf-2, mis on koostatud OK. 205 00:09:16,800 --> 00:09:19,390 Nüüd lubage mul ei saanud kaldkriipsuga scanf-2. 206 00:09:19,390 --> 00:09:22,430 String palun. "Tere." Ja see Tundus, et töö selle aja jooksul. 207 00:09:22,430 --> 00:09:26,020 >> Aga kas keegi ettepaneku stsenaarium milles see ei pruugi veel tööd? 208 00:09:26,020 --> 00:09:28,550 Jah? 209 00:09:28,550 --> 00:09:30,640 Midagi pikem kui 16 tähemärki. 210 00:09:30,640 --> 00:09:32,020 Ja tegelikult, me võime olla veidi täpsem. 211 00:09:32,020 --> 00:09:36,540 Midagi enam kui 15 tähemärki, sest tegelikult me ​​peame meeles pidama, 212 00:09:36,540 --> 00:09:39,920 et meil on vaja, et Kenoviiva null kaudselt lõpus stringi, 213 00:09:39,920 --> 00:09:42,950 mis on kõrvale scanf tavaliselt hoolitsevad meie eest. 214 00:09:42,950 --> 00:09:46,210 >> Nii et lubage mul teha midagi sellist - 215 00:09:46,210 --> 00:09:48,040 mõnikord me lihtsalt jätke see niimoodi. 216 00:09:48,040 --> 00:09:50,630 OK, nii et me oleme nüüd indutseeritud meie killustatust süü. 217 00:09:50,630 --> 00:09:51,000 Miks? 218 00:09:51,000 --> 00:09:54,940 Sest ma kirjutada rohkem kui 15 märki ja seega oleme tegelikult 219 00:09:54,940 --> 00:09:58,280 puudutanud mälu, et ma tegelikult ei tohiks olla. 220 00:09:58,280 --> 00:10:00,180 >> Mis siis tegelikult lahendus siin? 221 00:10:00,180 --> 00:10:02,210 Noh, mis siis, kui meil on vaja enam string? 222 00:10:02,210 --> 00:10:03,960 Noh, me võib-olla teeb see 32 baiti. 223 00:10:03,960 --> 00:10:05,160 Noh, mis siis, kui see ei ole piisavalt pikk? 224 00:10:05,160 --> 00:10:06,040 Kuidas 64 baiti? 225 00:10:06,040 --> 00:10:07,080 Mis siis, kui see ei ole piisavalt pikk? 226 00:10:07,080 --> 00:10:09,640 Kuidas 128 või 200 baiti? 227 00:10:09,640 --> 00:10:12,660 Mis tegelikult on lahendus siin Üldjuhul, kui me ei tea 228 00:10:12,660 --> 00:10:14,460 ette, mida kasutaja saab sisestada? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> See on lihtsalt selline suur valu on perse, Kui aus olla, mistõttu 231 00:10:23,050 --> 00:10:29,050 CS50 raamatukogu on mõnikümmend rida kood, mis ühiselt rakendada 232 00:10:29,050 --> 00:10:32,390 GetString string nii, et me ei on ette teada, mida 233 00:10:32,390 --> 00:10:33,430 kasutaja saab sisestada. 234 00:10:33,430 --> 00:10:37,370 Eriti siis, kui te vaatate tagasi cs50.c kaks nädalat tagasi, näete 235 00:10:37,370 --> 00:10:40,480 et getString tegelikult teeb mitte kasutama scanf niimoodi. 236 00:10:40,480 --> 00:10:43,720 Pigem loeb üks märk korraga. 237 00:10:43,720 --> 00:10:46,010 >> Sest üks tore asi lugedes üks märk, et me ei saa 238 00:10:46,010 --> 00:10:48,490 tagama end alati olema vähemalt üks märk. 239 00:10:48,490 --> 00:10:51,740 Ma ei saa lihtsalt kuulutada char, ja seejärel need tõeliselt beebi samme lihtsalt 240 00:10:51,740 --> 00:10:54,380 loe üks tegelane juures aeg klaviatuuril. 241 00:10:54,380 --> 00:10:58,240 Ja siis, mida te näete getString kas on iga kord, kui see saab otsa, 242 00:10:58,240 --> 00:11:02,280 ütleme, 16 baiti mälu, kasutab ta malloc või sugulane, ning et 243 00:11:02,280 --> 00:11:06,810 eraldada rohkem mälu, kopeerides vana mälu uude ja siis indekseerimise 244 00:11:06,810 --> 00:11:09,900 mööda, kuidas ühe märgi korraga, ja kui see saab otsa, et 245 00:11:09,900 --> 00:11:13,370 tüki mälu, viskab selle ära, greiferid suurem patakas mälu, kopeerib vana 246 00:11:13,370 --> 00:11:14,750 uutesse ja kordub. 247 00:11:14,750 --> 00:11:18,480 Ja see on tõesti valu tegelikult ellu midagi nii lihtne 248 00:11:18,480 --> 00:11:19,710 saada sisend kasutaja. 249 00:11:19,710 --> 00:11:21,090 >> Nii saad kasutada scanf. 250 00:11:21,090 --> 00:11:22,430 Võite kasutada ka muid samalaadseid funktsioone. 251 00:11:22,430 --> 00:11:25,420 Ja palju õpikuid ja internetis näidetest, kuid nad on kõik 252 00:11:25,420 --> 00:11:27,210 haavatavad probleeme niimoodi. 253 00:11:27,210 --> 00:11:29,550 Ja lõpuks, saada segfault on selline tüütu. 254 00:11:29,550 --> 00:11:30,680 See ei ole hea kasutaja. 255 00:11:30,680 --> 00:11:33,560 >> Kuid halvimal juhul, mis ei see põhimõtteliselt pane 256 00:11:33,560 --> 00:11:37,160 kood ohus? 257 00:11:37,160 --> 00:11:39,250 Mingi rünnaku potentsiaalselt. 258 00:11:39,250 --> 00:11:41,680 Rääkisime üks selline rünnak - täis stack. 259 00:11:41,680 --> 00:11:44,660 Aga üldiselt, kui olete lubatud ülevoolu puhver, nagu me tegime 260 00:11:44,660 --> 00:11:48,070 Paar nädalat tagasi, vaid kirjalikult rohkem kui "tere" on virnas, siis 261 00:11:48,070 --> 00:11:52,330 võib tõepoolest võtta üle, potentsiaalselt arvuti, või vähemalt saada on andmeid, et 262 00:11:52,330 --> 00:11:53,510 ei kuulu teile. 263 00:11:53,510 --> 00:11:55,970 >> Nii lühike, see on põhjus, miks meil on need abirattad. 264 00:11:55,970 --> 00:11:59,090 Aga nüüd me hakkame võtma need ära, nagu meie programme enam ei vaja, 265 00:11:59,090 --> 00:12:00,610 tingimata, panus kasutaja. 266 00:12:00,610 --> 00:12:03,960 Aga juhul, kui probleem seatud kuus, Teie panus on pärit suur 267 00:12:03,960 --> 00:12:07,520 sõnastik faili 150 mõned veider tuhat sõna. 268 00:12:07,520 --> 00:12:10,330 >> Nii et sa ei pea muretsema kasutaja suvalise sisendi. 269 00:12:10,330 --> 00:12:13,720 Me anname teile mõned eeldused umbes, et faili. 270 00:12:13,720 --> 00:12:20,340 Kõik küsimused on viiteid või scanf või kasutaja sisend üldiselt? 271 00:12:20,340 --> 00:12:24,450 >> Olgu, nii pilgu seejärel üks tagumisel teema kaks nädalat tagasi. 272 00:12:24,450 --> 00:12:28,590 Ja see oli see mõiste struktuure. 273 00:12:28,590 --> 00:12:34,180 Mitte, et - see mõiste vatseti, mis oli mis? 274 00:12:34,180 --> 00:12:35,430 Mida struct teha meie jaoks? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> Määrake - 277 00:12:39,860 --> 00:12:41,710 Vabandust? 278 00:12:41,710 --> 00:12:42,820 Määrake muutuja tüüp. 279 00:12:42,820 --> 00:12:44,410 Nii omamoodi. 280 00:12:44,410 --> 00:12:46,180 Me tegelikult ühendab kahte teemat. 281 00:12:46,180 --> 00:12:49,510 Nii typedef, meelde tuletada, et me ei kuulutada tüüpi meie ise, nagu 282 00:12:49,510 --> 00:12:51,500 sünonüüm, nagu stringi char *. 283 00:12:51,500 --> 00:12:56,200 Kuid kasutades typedef ja struktuure, saame luua tõeliselt oma andmestruktuurid. 284 00:12:56,200 --> 00:12:59,600 >> Näiteks, kui ma lähen tagasi gedit siin üks hetk ja ma minna 285 00:12:59,600 --> 00:13:08,230 ja teha midagi sellist, lubage mul päästa see on, oletame, structs.c 286 00:13:08,230 --> 00:13:10,840 ajutiselt, ma lihtsalt läheb minna ja sisaldama 287 00:13:10,840 --> 00:13:14,360 standardio.h, int main tühine. 288 00:13:14,360 --> 00:13:18,960 Ja siis siin, oletame, et ma tahan Kirjutada programm, mis salvestab 289 00:13:18,960 --> 00:13:21,840 mitu õpilast mitmest maja, näiteks. 290 00:13:21,840 --> 00:13:24,430 Nii et see on nagu registrarial andmebaasi mingisugune. 291 00:13:24,430 --> 00:13:29,550 >> Nii et kui mul on vaja nime üks õpilane, ma võiks teha midagi sellist char * nimi, 292 00:13:29,550 --> 00:13:31,570 ja ma teen midagi sellist - 293 00:13:31,570 --> 00:13:34,410 tegelikult, olgem kasutada CS50 raamatukogu hetkeks, et muuta see 294 00:13:34,410 --> 00:13:38,380 veidi lihtsam, nii et me saame laenata need kümned rida koodi. 295 00:13:38,380 --> 00:13:39,340 Ja olgem lihtsalt hoida lihtsa. 296 00:13:39,340 --> 00:13:42,610 Hoiame seda string, ja nüüd getString. 297 00:13:42,610 --> 00:13:47,420 >> Nii et ma väita nüüd, et ma olen salvestatud nimi Mõne õpilase ja maja 298 00:13:47,420 --> 00:13:50,240 mõned üliõpilane, lihtsalt kasutades muutujaid nagu me tegime ja nädalal üks. 299 00:13:50,240 --> 00:13:52,370 Aga arvan, et ma nüüd tahan, et toetada mitu õpilast. 300 00:13:52,370 --> 00:13:58,460 Olgu, mu instinktid on teha string NAME2 saab getString, string 301 00:13:58,460 --> 00:14:01,370 house2 saab getString. 302 00:14:01,370 --> 00:14:05,850 Ja siis meie kolmas õpilane, Teeme NAME3 getString. 303 00:14:05,850 --> 00:14:09,170 >> Olgu, see on loodetavasti silmatorkav sa nagu mingi loll, 304 00:14:09,170 --> 00:14:11,580 sest see protsess on tõesti kunagi lõppeb, ja see lihtsalt läheb 305 00:14:11,580 --> 00:14:13,130 teha oma kood koledamaks ja aina hullemaks ja hullemaks. 306 00:14:13,130 --> 00:14:14,810 Aga me lahendada see liiga nädalal kaks. 307 00:14:14,810 --> 00:14:19,450 Mis oli meie suhteliselt puhas lahendus kui meil oli mitu muutujate 308 00:14:19,450 --> 00:14:23,580 sama andmetüüp, mis on kõik seotud, kuid me ei taha, et see metsik segadus 309 00:14:23,580 --> 00:14:26,870 samalaadselt nimega muutujaid? 310 00:14:26,870 --> 00:14:30,060 Mida me teeme selle asemel? 311 00:14:30,060 --> 00:14:31,260 >> Nii et ma arvan, et ma kuulsin mõned kohad. 312 00:14:31,260 --> 00:14:32,590 Meil oli massiivi. 313 00:14:32,590 --> 00:14:37,110 Kui soovite Rohkete midagi, miks me ei puhasta see kõik 314 00:14:37,110 --> 00:14:39,540 up ja lihtsalt öelda, anna mulle massiivi nimetatakse nimed? 315 00:14:39,540 --> 00:14:41,640 >> Ja nüüd, lähme kõva kood 3. 316 00:14:41,640 --> 00:14:44,450 Ja siis anna mulle veel array kutsutud maja ja lase mind 317 00:14:44,450 --> 00:14:45,800 nüüd kõva kood 3. 318 00:14:45,800 --> 00:14:49,220 Ja ma olen tohutult koristada jama, et ma lihtsalt loodud. 319 00:14:49,220 --> 00:14:52,400 Nüüd, ma olen ikka kõva kodeeritud 3, kuid isegi 3 võib dünaamiliselt pärit 320 00:14:52,400 --> 00:14:54,350 kasutaja või argv vms. 321 00:14:54,350 --> 00:14:55,720 Nii et see on juba puhtam. 322 00:14:55,720 --> 00:15:00,100 >> Aga mis on tüütu on see, et nüüd, kuigi nimi on kuidagi 323 00:15:00,100 --> 00:15:02,280 tugevalt seotud üliõpilase maja - 324 00:15:02,280 --> 00:15:04,720 see on üliõpilane, et ma tõesti tahan kujutada - 325 00:15:04,720 --> 00:15:08,080 Mul on nüüd kaks massiivid, mis on paralleelne selles mõttes, et nad on 326 00:15:08,080 --> 00:15:13,930 sama suurus ja nimed sulg 0 arvatavasti kaardid maja sulg 0, 327 00:15:13,930 --> 00:15:16,600 ja nimed sulg 1 kaardid majade sulg 1. 328 00:15:16,600 --> 00:15:19,280 Teisisõnu, et õppija elab et maja, ja et teise õpilase 329 00:15:19,280 --> 00:15:20,530 elab teises majas. 330 00:15:20,530 --> 00:15:23,720 Aga kindlasti võiks see olla teha isegi puhtamalt. 331 00:15:23,720 --> 00:15:24,990 >> Noh, see võib tegelikult. 332 00:15:24,990 --> 00:15:28,730 Ja lubage mul minna ja avada üles structs.h ja sa 333 00:15:28,730 --> 00:15:31,130 vaata seda ideed siin. 334 00:15:31,130 --> 00:15:34,905 Pange tähele, et olen kasutanud typedef, nagu te vihjas hetk tagasi kuulutada meie 335 00:15:34,905 --> 00:15:35,570 enda andmete liiki. 336 00:15:35,570 --> 00:15:39,660 Aga ma olen ka kasutades teisi märksõna nimetatakse struct mis annab mulle uue 337 00:15:39,660 --> 00:15:40,790 andmestruktuur. 338 00:15:40,790 --> 00:15:43,980 >> Ja see andmestruktuur Väidan läheb on kaks asja sees 339 00:15:43,980 --> 00:15:47,060 see - string kutsus nime ja string nimega maja. 340 00:15:47,060 --> 00:15:49,820 Ja nimi ma annan see andmestruktuur läheb 341 00:15:49,820 --> 00:15:51,005 mida nimetatakse üliõpilane. 342 00:15:51,005 --> 00:15:54,030 Ma võiksin nimetada seda, mida tahan, kuid see semantiliselt teha 343 00:15:54,030 --> 00:15:55,810 mõtet mulle minu meelest. 344 00:15:55,810 --> 00:15:59,160 >> Nüüd, kui ma avada parem versioon Programmi hakkasin kirjalikult 345 00:15:59,160 --> 00:16:00,390 seal, lubage mul algusse kerimiseks. 346 00:16:00,390 --> 00:16:03,190 Ja seal on mõned rohkem rida koodi siin, kuid lubage mul keskenduda jaoks 347 00:16:03,190 --> 00:16:04,160 Praegu on üks. 348 00:16:04,160 --> 00:16:07,790 Olen kuulutatud pidev nn õpilased ja kõva kodeeritud 3 nüüd. 349 00:16:07,790 --> 00:16:11,110 Aga nüüd, pange tähele, kuidas puhas minu kood hakkab saama. 350 00:16:11,110 --> 00:16:15,030 >> Kooskõlas 22. Kinnitan massiivi õpilastele. 351 00:16:15,030 --> 00:16:18,760 Ja teate, et õpilane on ilmselt nüüd andmetüübi. 352 00:16:18,760 --> 00:16:23,360 Sest ülaosas seda faili märgata Lisasin, et päisefailist 353 00:16:23,360 --> 00:16:24,820 et ma tõmmata hetk tagasi. 354 00:16:24,820 --> 00:16:28,820 Ja et päisefailist lihtsalt tuli Selle mõiste üliõpilane. 355 00:16:28,820 --> 00:16:32,470 >> Nüüd, ma olen loonud oma enda kohandatud andmed tüüp, et autorid C aastat 356 00:16:32,470 --> 00:16:33,890 tagasi ei mõtle ette. 357 00:16:33,890 --> 00:16:34,570 Aga mingit probleemi. 358 00:16:34,570 --> 00:16:35,870 Ma ei tee seda ise. 359 00:16:35,870 --> 00:16:39,050 Nii et see on massiiv nimega õpilased, iga, mille liikmed 360 00:16:39,050 --> 00:16:41,100 on üliõpilane struktuur. 361 00:16:41,100 --> 00:16:44,270 Ja ma tahan, kolm neist massiivist. 362 00:16:44,270 --> 00:16:46,030 >> Ja nüüd, mida teeb ülejäänud Selle programmi teha? 363 00:16:46,030 --> 00:16:47,550 Mul oli vaja midagi veidi meelevaldne. 364 00:16:47,550 --> 00:16:51,450 Nii online 24 aastast Ma korrata 0-3. 365 00:16:51,450 --> 00:16:54,000 Ma siis paluda kasutajal jaoks õpilase nime. 366 00:16:54,000 --> 00:16:56,110 Ja siis ma kasutan getString nagu enne. 367 00:16:56,110 --> 00:16:59,410 Siis ma küsida õpilase maja, ja ma kasutan getString nagu enne. 368 00:16:59,410 --> 00:17:01,780 >> Aga teate - veidi uus tükk süntaks - 369 00:17:01,780 --> 00:17:07,010 Ma ei saa ikka indeks i-nda üliõpilane, aga kuidas ma saan kell konkreetsed andmed 370 00:17:07,010 --> 00:17:08,354 valdkonna sees struct? 371 00:17:08,354 --> 00:17:11,770 Nii, mis on ilmselt uus tükk süntaks? 372 00:17:11,770 --> 00:17:13,339 See on lihtsalt dot operaator. 373 00:17:13,339 --> 00:17:14,510 >> Me tõesti ei näinud seda enne. 374 00:17:14,510 --> 00:17:17,819 Sa oled näinud seda pset viis kui olete sukeldus juba koos bitmap faili. 375 00:17:17,819 --> 00:17:22,372 Aga dot tähendab lihtsalt sees käesoleva struct või mitut valdkonda, annavad dot 376 00:17:22,372 --> 00:17:24,510 nimi või mulle dot maja. 377 00:17:24,510 --> 00:17:28,690 See tähendab, minna sees struct ja saada need eri valdkondi. 378 00:17:28,690 --> 00:17:30,200 >> Mis ülejäänud seda programmi teha? 379 00:17:30,200 --> 00:17:31,190 See pole veel kõik, et seksikas. 380 00:17:31,190 --> 00:17:34,640 Pange tähele, et ma korrata 0-3 uuesti, ja ma lihtsalt luua English 381 00:17:34,640 --> 00:17:40,500 fraas nagu nii ja nii on selline ja nagu maja, mis kulgeb dot nime 382 00:17:40,500 --> 00:17:43,320 i-nda õpilaste ja nende maja samuti. 383 00:17:43,320 --> 00:17:47,560 >> Ja siis lõpuks, nüüd hakkame saada anal sellest nüüd, kui me oleme 384 00:17:47,560 --> 00:17:49,580 tuttav milline malloc ja muud funktsioonid on 385 00:17:49,580 --> 00:17:50,570 teeme kõik see aeg. 386 00:17:50,570 --> 00:17:54,220 Miks mul on vaba nii nimi ja maja, kuigi ma 387 00:17:54,220 --> 00:17:56,960 ei helistanud malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString tegi. 389 00:17:58,020 --> 00:18:00,930 Ja see oli väike räpane saladus mitu nädalat, kuid getString on 390 00:18:00,930 --> 00:18:03,530 välja lekib mälu üle pange kõik semester siiani. 391 00:18:03,530 --> 00:18:05,990 Ja valgrand lõpuks näitavad seda meile. 392 00:18:05,990 --> 00:18:10,730 >> Aga see ei ole suur asi, sest ma tean, et ma lihtsalt vabastada nimi 393 00:18:10,730 --> 00:18:15,750 ja maja, kuigi tehniliselt, et olema super, super ohutu, ma peaks olema 394 00:18:15,750 --> 00:18:17,890 teeme mõned veakontrollifunktsioon siin. 395 00:18:17,890 --> 00:18:19,040 Mida oma instinkte ütlen sulle? 396 00:18:19,040 --> 00:18:22,480 Mida ma peaksin olema kontrollimiseks enne kui ma vaba, mis on 397 00:18:22,480 --> 00:18:25,470 string, aka mis char *? 398 00:18:25,470 --> 00:18:33,460 >> Ma peaks tegelikult kontrollida, kas õpilased sulg i dot nimi ei 399 00:18:33,460 --> 00:18:34,840 võrdne null. 400 00:18:34,840 --> 00:18:40,400 Siis tulen OK minna ja tasuta et pointer, ja sama või muu 401 00:18:40,400 --> 00:18:41,160 üks samuti. 402 00:18:41,160 --> 00:18:46,860 Kui õpilased sulg i dot maja ei ole võrdne null, see nüüd kaitseb 403 00:18:46,860 --> 00:18:52,520 vastu nurga puhul, kus GetString tagastab midagi null. 404 00:18:52,520 --> 00:18:57,310 Ja me nägime hetk tagasi printf tahe kaitsta meid siia lihtsalt öeldes 405 00:18:57,310 --> 00:18:58,990 null, mis läheb otsima imelik. 406 00:18:58,990 --> 00:19:02,340 Aga vähemalt see ei segfault, Nagu me oleme näinud. 407 00:19:02,340 --> 00:19:05,990 >> Noh, lubage mul teha veel üks asi siin. structs-0 on selline loll programm 408 00:19:05,990 --> 00:19:09,700 sest ma sisestan kõik andmed, ja siis see on kadunud, kui programm lõpeb. 409 00:19:09,700 --> 00:19:10,940 Aga lubage mul minna ja seda teha. 410 00:19:10,940 --> 00:19:12,830 Lubage mul teha terminal aken natuke suurem. 411 00:19:12,830 --> 00:19:17,000 Lubage mul teha structs-1, mis on uus versioon sellest. 412 00:19:17,000 --> 00:19:18,520 >> Ma suumida natuke. 413 00:19:18,520 --> 00:19:21,620 Ja nüüd andke mulle joosta dot kaldkriips structs-1. 414 00:19:21,620 --> 00:19:22,590 Student nimi - 415 00:19:22,590 --> 00:19:31,500 David Ema, teeme Rob Kirkland, Teeme Lauren Leverett. 416 00:19:31,500 --> 00:19:33,650 Mis on huvitav on nüüd teade - 417 00:19:33,650 --> 00:19:35,540 ja ma tean vaid seda, sest Kirjutasin programmi - 418 00:19:35,540 --> 00:19:38,930 seal on fail nüüd minu praegune kataloog nimega students.csv. 419 00:19:38,930 --> 00:19:40,420 Mõned võite näinud neid reaalses maailmas. 420 00:19:40,420 --> 00:19:42,980 >> Mis CSV faili? 421 00:19:42,980 --> 00:19:44,170 Komadega eraldatud väärtused. 422 00:19:44,170 --> 00:19:46,670 See on omamoodi nagu vaese mehe versiooni Exceli faili. 423 00:19:46,670 --> 00:19:50,580 See tabel ridade ja veergude saate avada programmis nagu Excel, 424 00:19:50,580 --> 00:19:51,800 või numbrid Mac. 425 00:19:51,800 --> 00:19:55,180 >> Ja kui ma seda faili avada siin gedit, Hanketeade - ja numbrid ei ole seal. 426 00:19:55,180 --> 00:19:57,360 See on lihtsalt gedit ütlen mulle rida numbreid. 427 00:19:57,360 --> 00:19:59,740 Teatis esimene rida selles fail on David ja Ema. 428 00:19:59,740 --> 00:20:01,450 Järgmine rida on Rob koma Kirkland. 429 00:20:01,450 --> 00:20:04,170 Ja kolmas liin on Lauren koma Leverett. 430 00:20:04,170 --> 00:20:05,480 >> Niisiis, mida ma olen loonud? 431 00:20:05,480 --> 00:20:09,580 Olen nüüd kirjutatud C programm, mis tõhusalt suudab luua tabeleid 432 00:20:09,580 --> 00:20:11,840 mis saab avada programmi nagu Excel. 433 00:20:11,840 --> 00:20:15,520 Mitte kõik, mis mõjuvad andmekogum, kuid kui teil on palju suurem tükkideks 434 00:20:15,520 --> 00:20:18,440 andmed, mida sa tegelikult tahad manipuleerida ja teha graafikuid ja 435 00:20:18,440 --> 00:20:21,260 meeldib, see on ilmselt üks viis luua, et andmeid. 436 00:20:21,260 --> 00:20:25,370 Lisaks CSV-des võib tegelikult super ühine lihtsalt ladustamiseks lihtne andmed - 437 00:20:25,370 --> 00:20:28,940 Yahoo Finance, näiteks, kui sa saad börsikursid kaudu oma nn 438 00:20:28,940 --> 00:20:33,180 API, tasuta teenus, mis võimaldab teil saada praegune up-to-the-date laos 439 00:20:33,180 --> 00:20:35,650 hinnapakkumisi ettevõtteid, nad anda andmed tagasi 440 00:20:35,650 --> 00:20:37,800 super lihtne CSV formaadis. 441 00:20:37,800 --> 00:20:39,380 >> Niisiis, kuidas me seda teeme? 442 00:20:39,380 --> 00:20:42,530 Noh teate, kõige selle programmi peaaegu sama. 443 00:20:42,530 --> 00:20:46,870 Aga teate siia, mitte print üliõpilasi, on line 35 444 00:20:46,870 --> 00:20:51,040 aastast, ma väita, et ma hoian õpilased kettale, nii faili salvestamisel. 445 00:20:51,040 --> 00:20:53,630 >> Nii märkate Teatan FILE * - 446 00:20:53,630 --> 00:20:57,260 nüüd, see on omamoodi anomaalia C. Mingil põhjusel, FAIL on kõik mütsid, 447 00:20:57,260 --> 00:21:00,690 mis ei ole nagu enamik teisi andmetüüpe aastal C. Aga see on sisseehitatud 448 00:21:00,690 --> 00:21:02,320 andmetüüp, FILE *. 449 00:21:02,320 --> 00:21:05,900 Ja ma kuulutab kursor faili on see, kuidas sa ei mõtle seda. 450 00:21:05,900 --> 00:21:08,070 >> fopen tähendab avatud faili. 451 00:21:08,070 --> 00:21:09,470 Mis faili sa tahad avada? 452 00:21:09,470 --> 00:21:12,620 Ma tahan, et avada faili, et ma omavoliliselt helistada students.csv. 453 00:21:12,620 --> 00:21:14,480 Ma võiks helistada, et midagi ma tahan. 454 00:21:14,480 --> 00:21:15,200 >> Ja siis võtta arvan. 455 00:21:15,200 --> 00:21:18,960 Mis teine ​​argument et fopen ilmselt tähendab? 456 00:21:18,960 --> 00:21:21,480 Õigus, w kirjutada, võiks olema r read. 457 00:21:21,480 --> 00:21:24,120 Seal jaoks lisab, kui te soovite lisada ridu ja ei 458 00:21:24,120 --> 00:21:25,200 kirjutada kogu asi. 459 00:21:25,200 --> 00:21:28,005 >> Aga ma tahan, et luua seda pilti üks kord, nii et ma kasutada quote lõppeb w. 460 00:21:28,005 --> 00:21:31,880 Ja ma tean, et ainult lugenud dokumentatsiooni või mees lehele. 461 00:21:31,880 --> 00:21:35,100 Kui fail ei ole null - teisisõnu, Kui midagi läks valesti seal - 462 00:21:35,100 --> 00:21:37,820 lubage mul korrata üle üliõpilased 0-3. 463 00:21:37,820 --> 00:21:40,410 >> Ja nüüd teate, et midagi Ainult veidi 464 00:21:40,410 --> 00:21:42,110 umbes line 41 siin. 465 00:21:42,110 --> 00:21:42,960 See ei ole printf. 466 00:21:42,960 --> 00:21:46,530 See fprintf faili printf. 467 00:21:46,530 --> 00:21:47,790 Nii see läheb kirjutada faili. 468 00:21:47,790 --> 00:21:48,860 Mis fail? 469 00:21:48,860 --> 00:21:53,630 Üks kelle pointer saab määrata kui esimene argument. 470 00:21:53,630 --> 00:21:55,940 >> Siis määrata stringi. 471 00:21:55,940 --> 00:21:59,660 Siis me täpsustada, mida string tahame pistik esimest protsenti s ja 472 00:21:59,660 --> 00:22:04,320 siis teine ​​muutuja või Teise protsenti s. 473 00:22:04,320 --> 00:22:06,760 Siis sulgege fail kirjutamisel. 474 00:22:06,760 --> 00:22:09,380 Kui ma vaba mälu kui enne, kuigi Ma peaks minema tagasi ja lisada 475 00:22:09,380 --> 00:22:10,540 mõned kontrollid null. 476 00:22:10,540 --> 00:22:12,090 >> Ja ongi kõik. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, kirjutamisel annab mulle võime luua tekstifaile. 478 00:22:16,960 --> 00:22:19,640 Nüüd näete lahendamist viis, mis hõlmab pilte, saate kasutada 479 00:22:19,640 --> 00:22:20,990 binaarfailidele asemel. 480 00:22:20,990 --> 00:22:24,200 Aga põhimõtteliselt, idee on sama, kuigi funktsioone teid 481 00:22:24,200 --> 00:22:28,710 vaata on natuke erinev. 482 00:22:28,710 --> 00:22:32,580 >> Nii tuulispask tour, kuid sa saad liigagi tuttav faili I/O-- 483 00:22:32,580 --> 00:22:34,960 sisend ja väljund - koos pset viis. 484 00:22:34,960 --> 00:22:38,607 Ja küsimusi esialgne põhitõdesid siin? 485 00:22:38,607 --> 00:22:39,857 Jah? 486 00:22:39,857 --> 00:22:41,880 487 00:22:41,880 --> 00:22:43,710 >> Mis siis, kui sa püüad vaba null väärtus? 488 00:22:43,710 --> 00:22:48,880 Ma usun, kui vaba on saanud veidi kasutajasõbralikum, saate 489 00:22:48,880 --> 00:22:49,890 potentsiaalselt segfault. 490 00:22:49,890 --> 00:22:54,160 Söötmine see tühjaks on halb, sest ma ei usu vaba häirib, et kontrollida teie 491 00:22:54,160 --> 00:22:57,330 sest see võiks potentsiaalselt olla jäätmete aega, et seda teha ise 492 00:22:57,330 --> 00:22:59,022 kõik maailmas. 493 00:22:59,022 --> 00:23:00,590 Hea küsimus, kuigi. 494 00:23:00,590 --> 00:23:04,300 >> Olgu, selline muutub meil huvitav teema. 495 00:23:04,300 --> 00:23:07,010 Teema lahendamist viis on ekspertiisi. 496 00:23:07,010 --> 00:23:08,420 Vähemalt see on osa Probleemi komplekti. 497 00:23:08,420 --> 00:23:12,030 Kohtumeditsiini üldiselt viitab taastamiseks teavet, mis võib või 498 00:23:12,030 --> 00:23:14,110 ei tohi olla kustutatud tahtlikult. 499 00:23:14,110 --> 00:23:18,680 Ja nii ma mõtlesin, et ma annan sulle kiire maitse, mis tegelikult toimub kõik 500 00:23:18,680 --> 00:23:21,230 seekord all kapuuts arvuti. 501 00:23:21,230 --> 00:23:23,960 >> Näiteks, kui sul on sees oma sülearvuti või lauaarvuti 502 00:23:23,960 --> 00:23:28,040 kõvaketas, see on kas mehaaniline seade, mis tegelikult keerleb - 503 00:23:28,040 --> 00:23:31,650 seal on ümmarguse asju nimetatakse Vaagnad mis näevad välja üsna meeldib, mida ma 504 00:23:31,650 --> 00:23:34,540 oli just ekraanile, tõsi küll, Järjest enam on see vana kooli. 505 00:23:34,540 --> 00:23:37,370 See on kolme ja poole-tollise kõvakettale. 506 00:23:37,370 --> 00:23:40,070 Ja kolm ja pool tolli viitab kohta koos asja, kui sa seda installida 507 00:23:40,070 --> 00:23:40,890 arvutis. 508 00:23:40,890 --> 00:23:44,890 >> Paljud kutid oma sülearvutid nüüd on solid-state drives või SSDs, 509 00:23:44,890 --> 00:23:46,260 mis ei ole liikuvaid osi. 510 00:23:46,260 --> 00:23:49,170 Nad on rohkem nagu RAM ja vähem nagu need mehaanilised seadmed. 511 00:23:49,170 --> 00:23:51,450 Aga ideed on ikka sama, kindlasti kui need on seotud 512 00:23:51,450 --> 00:23:52,790 et probleem määratud viis. 513 00:23:52,790 --> 00:23:57,400 >> Ja kui sa mõtled nüüd kõvaketas esindab on ring, mis 514 00:23:57,400 --> 00:23:58,930 Ma joonistan niimoodi siin. 515 00:23:58,930 --> 00:24:02,290 Kui loote oma arvutist, kas see on SSD, või 516 00:24:02,290 --> 00:24:06,610 Sel juhul vanemad kooli kõvaketas, et fail sisaldab mitut bitti. 517 00:24:06,610 --> 00:24:10,510 Ütleme, et see on see 0 ja 1, terve hunnik 0. ja 1s. 518 00:24:10,510 --> 00:24:11,660 Nii et see on kogu mu kõvaketas. 519 00:24:11,660 --> 00:24:13,225 See on ilmselt päris suur fail. 520 00:24:13,225 --> 00:24:18,080 Ja ta kasutab kuni 0. ja 1s sel osa füüsilise vaagen. 521 00:24:18,080 --> 00:24:19,750 >> Noh, mis see on füüsiline osa? 522 00:24:19,750 --> 00:24:25,310 Noh, selgub, et kõvaketas, vähemalt seda tüüpi, seal 523 00:24:25,310 --> 00:24:27,340 need pisikesed magnet osakesi. 524 00:24:27,340 --> 00:24:32,630 Ja nad peavad sisuliselt põhja-ja lõunapoolusel neile, et kui te 525 00:24:32,630 --> 00:24:35,710 omakorda üks neist magnetilisi osakesi Sel viisil, võite öelda, et see on 526 00:24:35,710 --> 00:24:36,720 moodustab 1. 527 00:24:36,720 --> 00:24:39,340 Ja kui see on tagurpidi lõunasse põhja, siis võiks öelda, et see on 528 00:24:39,340 --> 00:24:40,390 esindavad 0. 529 00:24:40,390 --> 00:24:43,660 >> Nii reaalses füüsilises maailmas, mis on kuidas sa võiksid kujutada midagi 530 00:24:43,660 --> 00:24:45,670 binaarne seisu 0 ja 1. 531 00:24:45,670 --> 00:24:46,720 Nii et kõik on fail. 532 00:24:46,720 --> 00:24:49,300 Seal on terve hunnik magnet osakesed, mis on nende sel viisil või 533 00:24:49,300 --> 00:24:51,920 Sel moel, luues mustreid on 0. ja 1s. 534 00:24:51,920 --> 00:24:56,760 >> Aga selgub, salvestage fail, mõned andmed salvestatakse eraldi. 535 00:24:56,760 --> 00:25:00,000 Nii et see on veidi lauda kataloog, nii rääkida. 536 00:25:00,000 --> 00:25:05,810 Ja ma helistan selle veeru nimi ja Ma helistan selle veeru asukoht. 537 00:25:05,810 --> 00:25:08,850 >> Ja ma ütlen, arvan see on minu CV. 538 00:25:08,850 --> 00:25:14,050 Minu resume.doc hoitakse asukohta, ütleme 123. 539 00:25:14,050 --> 00:25:15,390 Ma alati minna, et number. 540 00:25:15,390 --> 00:25:18,810 Aga piisab, kui öelda, et nii nagu RAM, saate kõvaketta 541 00:25:18,810 --> 00:25:22,350 see on gigabyte või 200 GB või terabaidise ja te võite 542 00:25:22,350 --> 00:25:23,750 number kõik baiti. 543 00:25:23,750 --> 00:25:26,480 Võite nummerdada kõik tükkideks 8 bitti. 544 00:25:26,480 --> 00:25:29,030 >> Nii et me ütleme, et see on asukoht 123. 545 00:25:29,030 --> 00:25:32,070 Nii et see kataloog sees minu operatsioonisüsteemi süsteem mäletab, et minu 546 00:25:32,070 --> 00:25:34,250 CV on asukohast 123. 547 00:25:34,250 --> 00:25:36,850 Aga see läheb huvitavamaks, kui kustutate faili. 548 00:25:36,850 --> 00:25:37,820 >> Nii näiteks - 549 00:25:37,820 --> 00:25:40,790 ja õnneks enamik maailma on püütud peale seda - mis juhtub siis, kui 550 00:25:40,790 --> 00:25:45,040 lohistada fail oma Mac OS Prügikast või oma Windows Recycle Bin? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 Mis eesmärgil seda tehes? 553 00:25:50,510 --> 00:25:53,860 See on ilmselt vabaneda faili Aga mida see akt lohistades ja 554 00:25:53,860 --> 00:25:57,550 kukutades oma prügikasti või oma Prügikast teha arvutis? 555 00:25:57,550 --> 00:25:59,230 >> Absoluutselt mitte midagi, tõesti. 556 00:25:59,230 --> 00:26:00,320 See on nagu kausta. 557 00:26:00,320 --> 00:26:01,800 See on eraldi kausta, et olla kindel. 558 00:26:01,800 --> 00:26:04,460 Aga see tegelikult faili kustutada? 559 00:26:04,460 --> 00:26:06,780 >> Ei, sest mõned teist ilmselt olnud nagu, oh damn, sa ei teinud seda 560 00:26:06,780 --> 00:26:07,420 tähendab seda tegema. 561 00:26:07,420 --> 00:26:09,130 Nii te topeltklõps Trash või prügikasti. 562 00:26:09,130 --> 00:26:11,630 Sa oled torkasid ümber ja olete tagasi fail lihtsalt lohistades 563 00:26:11,630 --> 00:26:12,110 sealt. 564 00:26:12,110 --> 00:26:14,420 Nii selgelt, et see ei ole tingimata kustutamist. 565 00:26:14,420 --> 00:26:15,990 >> OK, sa oled targem. 566 00:26:15,990 --> 00:26:18,860 Sa tead, et lihtsalt tõmmates see Trash või prügikasti ei tähenda 567 00:26:18,860 --> 00:26:19,930 sa tühjendamist prügikasti. 568 00:26:19,930 --> 00:26:24,110 Nii et sa minna kuni menüü ja te ütlete Tühjenda prügikast või Empty Recycle Bin. 569 00:26:24,110 --> 00:26:25,360 Mis siis juhtub? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> Jah, nii see on jäetud rohkem. 572 00:26:32,530 --> 00:26:37,660 Aga kõik, mis juhtub on see. 573 00:26:37,660 --> 00:26:45,350 Arvuti unustab, kus resume.doc oli. 574 00:26:45,350 --> 00:26:47,400 >> Aga mida ei ole muutunud ilmselt pildil? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 Bitti 0. ja 1s, et ma väita, on kohapeal mõne füüsiline aspekt 577 00:26:55,570 --> 00:26:56,280 riistvara. 578 00:26:56,280 --> 00:26:57,110 Nad on ikka veel seal. 579 00:26:57,110 --> 00:26:58,930 See on lihtsalt arvuti on unustanud, mida nad on. 580 00:26:58,930 --> 00:27:03,160 >> Nii see on sisuliselt vabanenud faili bitti, nii et neid saab uuesti kasutada. 581 00:27:03,160 --> 00:27:06,940 Aga mitte enne, kui sa luua rohkem faile, ja rohkem faile, ja rohkem faile tahe 582 00:27:06,940 --> 00:27:12,150 tõenäosuslikult neid 0. ja 1s, neid magnetilisi osakesi, saada uuesti, 583 00:27:12,150 --> 00:27:16,220 tagurpidi või õigetpidi jaoks muid faile, 0. ja 1s. 584 00:27:16,220 --> 00:27:17,980 >> Nii et teil on see aken aeg. 585 00:27:17,980 --> 00:27:19,860 Ja see ei ole prognoositavate pikkus, tõesti. 586 00:27:19,860 --> 00:27:22,240 See sõltub suurusest oma raske sõita ja kui palju faile, mida ja 587 00:27:22,240 --> 00:27:23,490 kui kiiresti sa teha uued. 588 00:27:23,490 --> 00:27:27,050 Aga seal on see aken ajal mis et fail on ikka täiesti 589 00:27:27,050 --> 00:27:27,770 hüvitata. 590 00:27:27,770 --> 00:27:31,050 >> Nii et kui te kunagi kasutada programme nagu McAfee või Norton proovida taastada 591 00:27:31,050 --> 00:27:35,680 andmed, kõik nad teevad üritab tagasi see nn kataloogi 592 00:27:35,680 --> 00:27:37,340 aru saada, kus teie fail oli. 593 00:27:37,340 --> 00:27:40,605 Ja mõnikord Norton ja ütlevad, fail on 93% hüvitata. 594 00:27:40,605 --> 00:27:42,020 Noh, mida see tähendab? 595 00:27:42,020 --> 00:27:45,690 See tähendab lihtsalt seda, et mõne teise faili juhuslikult sattus kasutades, ütleme, 596 00:27:45,690 --> 00:27:48,920 need bitti välja oma algse faili. 597 00:27:48,920 --> 00:27:51,950 >> Niisiis, mis on tegelikult seotud andmete taastamise? 598 00:27:51,950 --> 00:27:55,720 Noh, kui sa ei ole midagi Norton eelnevalt arvutisse installitud, 599 00:27:55,720 --> 00:27:59,510 Parim, mida saate mõnikord tegema, on vaadata juures kogu kõvaketta otsivad 600 00:27:59,510 --> 00:28:00,510 mustrid bitti. 601 00:28:00,510 --> 00:28:05,350 Ja üks teemasid lahendamist viis on see, et sa otsida 602 00:28:05,350 --> 00:28:09,570 samaväärne kõvaketas kohtuekspertiisi Pilt kompaktne välklamp kaardi 603 00:28:09,570 --> 00:28:13,660 digikaamera, otsides 0. ja 1s, mis tavaliselt, kõrge 604 00:28:13,660 --> 00:28:16,720 Tõenäoliselt moodustavad algus JPEG. 605 00:28:16,720 --> 00:28:21,120 >> Ja te saate taastada need pildid, mida oletades, kui ma näen, see muster 606 00:28:21,120 --> 00:28:24,380 bitti kohtuekspertiisi pilt, suur tõenäosus, mis tähistab 607 00:28:24,380 --> 00:28:25,650 algust JPEG. 608 00:28:25,650 --> 00:28:29,520 Ja kui ma näen sama muster jälle et ilmselt algus, 609 00:28:29,520 --> 00:28:32,440 teine ​​JPEG, ja teine JPEG ja teine ​​JPEG. 610 00:28:32,440 --> 00:28:34,970 Ja see on tavaliselt kuidas andmete taastamise töötab. 611 00:28:34,970 --> 00:28:37,870 Mis on ilus umbes JPEG on isegi vormingus ise on mõnevõrra 612 00:28:37,870 --> 00:28:44,400 keeruline, alguses iga selline fail on tegelikult üsna äratuntavad 613 00:28:44,400 --> 00:28:47,370 ja lihtne, nagu te näete, kui oled seda juba teinud. 614 00:28:47,370 --> 00:28:50,270 >> Võtame lähemalt all kapuuts, mis täpselt, mida on olnud 615 00:28:50,270 --> 00:28:53,360 toimub ja mida need 0. ja 1s on, et anda teile natuke rohkem 616 00:28:53,360 --> 00:28:55,330 seoses selle konkreetse väljakutse. 617 00:28:55,330 --> 00:28:55,510 >> [VIDEO PLAYBACK] 618 00:28:55,510 --> 00:28:58,700 >> Kus teie arvuti salvestab kõige tema alaline andmed. 619 00:28:58,700 --> 00:29:03,390 Selleks, et andmed liiguvad RAM koos tarkvara signaale, mis ütlevad 620 00:29:03,390 --> 00:29:06,110 kõvaketas, kuidas säilitada, et andmed. 621 00:29:06,110 --> 00:29:09,410 Kõvaketas lülitused tõlkida need signaali pinge 622 00:29:09,410 --> 00:29:10,870 kõikumisi. 623 00:29:10,870 --> 00:29:14,970 Need omakorda kontrollida kõvaketta liikuvaid osi, mõned vähesed 624 00:29:14,970 --> 00:29:17,910 liikuvad osad jäänud kaasaegne arvuti. 625 00:29:17,910 --> 00:29:22,130 >> Mõned signaalid kontrollida mootor mis keerleb metalliga kaetud Vaagnad. 626 00:29:22,130 --> 00:29:25,470 Teie andmed on tegelikult salvestatud Nende Vaagnad. 627 00:29:25,470 --> 00:29:28,610 Muud signaalid liikuda lugeda / kirjutada pead lugema või 628 00:29:28,610 --> 00:29:30,710 kirjutada andmeid Vaagnad. 629 00:29:30,710 --> 00:29:35,450 See masin nii täpsed, et inimeste juuksed ei suutnud isegi vahel edastatavaid 630 00:29:35,450 --> 00:29:37,280 peade ja ketramine Vaagnad. 631 00:29:37,280 --> 00:29:40,316 Kuid see kõik töötab kohutav kiirusel. 632 00:29:40,316 --> 00:29:40,660 >> [END VIDEO PLAYBACK] 633 00:29:40,660 --> 00:29:42,190 >> DAVID Malan: suurendada vähe sügavam nüüd mis 634 00:29:42,190 --> 00:29:44,360 tegelikult on need Vaagnad. 635 00:29:44,360 --> 00:29:44,720 >> [VIDEO PLAYBACK] 636 00:29:44,720 --> 00:29:47,660 >> -Vaatame, mida me lihtsalt nägin aegluubis. 637 00:29:47,660 --> 00:29:51,710 Kui lühike pulss on elektri saadetakse lugeda / kirjutada pea, kui Peegeldab 638 00:29:51,710 --> 00:29:54,650 on väike elektromagnetiline eest sekundi murdosa jooksul. 639 00:29:54,650 --> 00:29:58,970 Magnet tekitab valdkonnas, mis muutused polaarsust tilluke, pisike 640 00:29:58,970 --> 00:30:02,850 osa metalli osakesi, mis mantel iga taldrik pind. 641 00:30:02,850 --> 00:30:05,940 >> Mustri rida neid pisikesi, laetud aladel kettal 642 00:30:05,940 --> 00:30:08,470 moodustab ühe natuke andmete binaarne number 643 00:30:08,470 --> 00:30:10,530 süsteem, mida kasutavad arvutid. 644 00:30:10,530 --> 00:30:13,775 Nüüd, kui praegune saadetakse üks viis läbi lugeda / kirjutada pea, ala 645 00:30:13,775 --> 00:30:15,970 polarisatsioon ühes suunas. 646 00:30:15,970 --> 00:30:17,950 Kui vool on saadetud vastupidises suunas, 647 00:30:17,950 --> 00:30:19,930 polarisatsiooni pöörata. 648 00:30:19,930 --> 00:30:22,370 >> Kuidas sa saad andmed kõvakettalt kustutama? 649 00:30:22,370 --> 00:30:24,090 Just vastupidine protsess. 650 00:30:24,090 --> 00:30:26,550 Nii et see on osakesed kettal et saada voolu 651 00:30:26,550 --> 00:30:27,960 lugeda / kirjutada pea liigub. 652 00:30:27,960 --> 00:30:30,700 Pane kokku miljoneid need magnetiseeritud segmentide 653 00:30:30,700 --> 00:30:32,160 sul on fail. 654 00:30:32,160 --> 00:30:36,060 >> Nüüd tükki ühe faili võib hajutatud üle kogu ketta 655 00:30:36,060 --> 00:30:39,970 Vaagnad selline nagu jama pabereid laual. 656 00:30:39,970 --> 00:30:43,500 Nii eriline pildi fail jälgib kohta, kus kõik on. 657 00:30:43,500 --> 00:30:45,985 Kas sa ei soovi sa olid midagi sellist? 658 00:30:45,985 --> 00:30:46,470 >> [END VIDEO PLAYBACK] 659 00:30:46,470 --> 00:30:47,820 >> DAVID Malan: OK, ilmselt mitte. 660 00:30:47,820 --> 00:30:52,070 Niisiis, kuidas paljud kutid Kasvasin üles koos nendega? 661 00:30:52,070 --> 00:30:53,970 OK, nii et see on vähem ja vähem käed igal aastal. 662 00:30:53,970 --> 00:30:56,550 Aga ma olen õnnelik, et sa oled vähemalt tuttav nendega, sest see ja meie enda 663 00:30:56,550 --> 00:31:00,520 raamat demo kahjuks surevad väga aeglane surm siin tundmine. 664 00:31:00,520 --> 00:31:04,010 >> Aga see on see, mida ma vähemalt tagasi keskkoolis, kasutatud kasutamise varukoopiaid. 665 00:31:04,010 --> 00:31:08,110 Ja see oli hämmastav, sest sa võib salvestada 1,4 megabaiti kohta 666 00:31:08,110 --> 00:31:08,930 see konkreetne disk. 667 00:31:08,930 --> 00:31:12,260 Ja see oli suur tihedus versioon mida näitab HD, mis on 668 00:31:12,260 --> 00:31:14,240 st enne tänast HD videod. 669 00:31:14,240 --> 00:31:16,400 >> Standard tihedus oli 800 kilobaiti. 670 00:31:16,400 --> 00:31:18,640 Ja enne seda oli 400 kilobaiti kettaid. 671 00:31:18,640 --> 00:31:23,120 Ja enne seda oli 5 ja 1/4 tollised veljed, mis olid tõeliselt floppy, 672 00:31:23,120 --> 00:31:25,680 ja veidi laiem ja pikem kui need asjad siin. 673 00:31:25,680 --> 00:31:29,150 Aga tegelikult võite näha nn floppy aspekt need kettad. 674 00:31:29,150 --> 00:31:32,630 >> Ja funktsionaalselt on nad tegelikult üsna sarnane kõvakettad juures 675 00:31:32,630 --> 00:31:33,570 Vähemalt seda tüüpi. 676 00:31:33,570 --> 00:31:37,270 Jällegi SSDs uuemad arvutid töö natuke teistmoodi. 677 00:31:37,270 --> 00:31:41,530 Aga kui sa liikuda, et väike metallist tab, tegelikult võite näha veidi küpsist, 678 00:31:41,530 --> 00:31:42,560 või vaagen. 679 00:31:42,560 --> 00:31:43,830 >> See ei ole metallist, nagu see üks. 680 00:31:43,830 --> 00:31:46,000 See üks on tegelikult mõned odavam plastist. 681 00:31:46,000 --> 00:31:46,750 Ja te saate objekti kõigutama ta. 682 00:31:46,750 --> 00:31:50,310 Ja olete trully lihtsalt maha pühkida mõned bittide arvu või magnetilisi osakesi 683 00:31:50,310 --> 00:31:51,220 selle kettale. 684 00:31:51,220 --> 00:31:52,710 >> Nii õnneks ei ole midagi selle kohta. 685 00:31:52,710 --> 00:31:55,790 Kui see asi on, kuidas - ja katta silmad ja teie naaber - 686 00:31:55,790 --> 00:31:58,865 võid lihtsalt omamoodi tõmmake see terve mantel maha niimoodi. 687 00:31:58,865 --> 00:32:01,900 Aga seal on vähe kevadel, et olla teadlikud, et teie silmad. 688 00:32:01,900 --> 00:32:03,620 Nüüd olete tõesti floppy disk. 689 00:32:03,620 --> 00:32:07,090 >> Ja mis on tähelepanuväärne selle on see, et nii palju kui see on 690 00:32:07,090 --> 00:32:10,830 väikesemahulise esindatus suurem kõvaketas, need asjad on super, 691 00:32:10,830 --> 00:32:11,590 super lihtne. 692 00:32:11,590 --> 00:32:15,170 Kui teil näputäis põhjas see, et nüüd, et metallist asi on välja lülitatud, ja koor 693 00:32:15,170 --> 00:32:20,990 neid avada, kõik on olemas on kaks tükki vilt ja nn diskett 694 00:32:20,990 --> 00:32:22,930 tükk metalli sees. 695 00:32:22,930 --> 00:32:25,990 >> Ja seal läheb pool minu ketta sisu. 696 00:32:25,990 --> 00:32:27,540 Seal läheb veel pool neist. 697 00:32:27,540 --> 00:32:31,375 Aga see on kõik, mis oli ketramine sees arvuti sisse Läinud. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> Ja jälle panna see perspektiivi, kui suur on enamiku oma 700 00:32:38,310 --> 00:32:39,560 kõvakettad nendel päevadel? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 500 gigabaiti terabaidise, võibolla lauaarvuti, 2 TB, 3 703 00:32:46,230 --> 00:32:47,630 TB, 4 TB, eks? 704 00:32:47,630 --> 00:32:52,480 See on üks megabait, anda või võtta, mis isegi ei sobi tüüpiline MP3 705 00:32:52,480 --> 00:32:55,310 enam nendel päevadel, või mõned sarnane muusikafaili. 706 00:32:55,310 --> 00:32:59,500 >> Nii väike meene teile täna, ja Samuti aitavad contextualize mida 707 00:32:59,500 --> 00:33:03,570 saadame võttes iseenesestmõistetavana nüüd probleem määrata viis. 708 00:33:03,570 --> 00:33:04,820 Nii et need on sinu hoida. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 Nii et lubage mul minna, kus saab kulutada järgmise pset samuti. 711 00:33:13,370 --> 00:33:18,470 Nii et me oleme nüüd seatud see lehekülg - oh, paar kuulutused kiiresti. 712 00:33:18,470 --> 00:33:21,730 >> Sel reedel, kui soovite liituda CS50 Lõunaks minna tavaline koht, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 Ja lõplik projekt - 715 00:33:25,100 --> 00:33:28,520 nii ühe õppekava oleme postitatud lõplik projekt spetsifikatsioon juba. 716 00:33:28,520 --> 00:33:31,410 Mõistma, et see ei tähenda, see on tingitud eriti kiiresti. 717 00:33:31,410 --> 00:33:33,990 See on postitatud, tõesti, lihtsalt saada kutid mõelda seda. 718 00:33:33,990 --> 00:33:37,620 Ja tõepoolest, super oluline protsent siis võidelda 719 00:33:37,620 --> 00:33:40,780 lõplik projektide materjalist, mida me pole isegi õppinud klassis, 720 00:33:40,780 --> 00:33:42,730 kuid tahe juba järgmisel nädalal. 721 00:33:42,730 --> 00:33:45,530 >> Teate küll, et spec nõuab mõned eri osade 722 00:33:45,530 --> 00:33:46,190 lõplik projekt. 723 00:33:46,190 --> 00:33:49,590 Esiteks, mõne nädala pärast on eelpakkumist, päris juhuslik kiri 724 00:33:49,590 --> 00:33:52,760 oma TF talle öelda või mida sa oled mõelda oma projekti, mille 725 00:33:52,760 --> 00:33:53,650 ei Commitment. 726 00:33:53,650 --> 00:33:56,710 Ettepanek on teie pühendumust, öeldes, siin on see, mida 727 00:33:56,710 --> 00:33:57,770 Ma tahaks teha oma projekti. 728 00:33:57,770 --> 00:33:58,250 Mis sa arvad? 729 00:33:58,250 --> 00:33:58,650 Liiga suur? 730 00:33:58,650 --> 00:33:59,145 Liiga väike? 731 00:33:59,145 --> 00:34:00,330 Kas see kontrollitav? 732 00:34:00,330 --> 00:34:02,230 Ja näed spec rohkem üksikasju. 733 00:34:02,230 --> 00:34:05,060 >> Paar nädalat pärast seda on olukord aruanne, mis on sarnaselt 734 00:34:05,060 --> 00:34:08,260 casual Kirjuta oma TF öelda, kuidas kaugele olete oma lõpliku 735 00:34:08,260 --> 00:34:12,360 projekti rakendamiseks, millele järgneb CS50 hackathon kus kõigil 736 00:34:12,360 --> 00:34:17,520 on kutsutud, mis on sündmuse 20:00 ühel õhtul kuni 7:00 737 00:34:17,520 --> 00:34:19,150 AM järgmisel hommikul. 738 00:34:19,150 --> 00:34:22,560 Pizza, nagu ma mainisin nädal null, wil serveeritakse 09:00, 739 00:34:22,560 --> 00:34:24,120 Hiina toit on 01:00. 740 00:34:24,120 --> 00:34:27,929 Ja kui sa oled ikka ärkvel 05:00, me teid IHOPi hommikusöögiks. 741 00:34:27,929 --> 00:34:31,310 >> Nii hackathon on üks rohkem meeldejääv kogemusi klassis. 742 00:34:31,310 --> 00:34:35,290 Siis rakendamisel arvestatakse, ja siis climactic CS50 Fair. 743 00:34:35,290 --> 00:34:38,070 Rohkem infot kõigi nende aastal lähinädalatel. 744 00:34:38,070 --> 00:34:40,739 >> Aga lähme tagasi millegi vana kooli - 745 00:34:40,739 --> 00:34:41,920 jälle massiivi. 746 00:34:41,920 --> 00:34:45,040 Nii array oli tore, sest see lahendab probleemidele nagu me nägime vaid 747 00:34:45,040 --> 00:34:49,290 hetk tagasi õpilaste struktuurid saada natuke kontrolli alt, kui me 748 00:34:49,290 --> 00:34:52,405 tahad olla üliõpilane üks üliõpilane kaks, üliõpilane kolm, üliõpilane dot dot dot 749 00:34:52,405 --> 00:34:54,400 mingi suvaline arv õpilasi. 750 00:34:54,400 --> 00:34:58,850 >> Nii massiivid, paar nädalat tagasi, swooped ja lahendada kõik meie probleemid ei 751 00:34:58,850 --> 00:35:03,340 teades ette, kui palju asju teatud tüüpi me tahta. 752 00:35:03,340 --> 00:35:07,390 Ja me oleme näinud, et structs aitab meil Lisaks sellele korraldab meie kood ja hoida 753 00:35:07,390 --> 00:35:11,660 kontseptuaalselt sarnased muutujad, nagu nimi ja maja koos, nii et me 754 00:35:11,660 --> 00:35:15,570 ravib neid ühe üksuse sees mida on väiksemateks tükkideks. 755 00:35:15,570 --> 00:35:17,810 >> Aga massiivid mõned puudused. 756 00:35:17,810 --> 00:35:19,780 Millised on mõned puudused oleme kokku puutunud 757 00:35:19,780 --> 00:35:22,320 massiivid siiani? 758 00:35:22,320 --> 00:35:23,450 Mis see on? 759 00:35:23,450 --> 00:35:28,130 Kindla suurusega - nii, kuigi sa võiksid võimalik mälu eraldada 760 00:35:28,130 --> 00:35:32,310 massiiv, kui sa tead, kui palju õpilasi sul on, kui palju märke, mida 761 00:35:32,310 --> 00:35:35,460 kasutaja, kui olete eraldatud massiiv, sa oled omamoodi värvitud 762 00:35:35,460 --> 00:35:36,740 ise nurka. 763 00:35:36,740 --> 00:35:40,600 >> Sest sa ei saa lisada uusi elemente keskele massiivi. 764 00:35:40,600 --> 00:35:43,660 Sa ei saa lisada rohkem elemente lõpus massiivi. 765 00:35:43,660 --> 00:35:47,750 Tõesti, sa pead kasutama luua täiesti uue massiivi, nagu me oleme arutanud, 766 00:35:47,750 --> 00:35:49,320 kopeerides vana uude. 767 00:35:49,320 --> 00:35:52,610 Ja veel, see on peavalu, mis GetString tegeleb teile. 768 00:35:52,610 --> 00:35:56,170 >> Aga jälle, sa ei saa isegi sisestada midagi keskele massiivi 769 00:35:56,170 --> 00:35:58,200 kui intressimäär ei ole täielikult täidetud. 770 00:35:58,200 --> 00:36:03,010 Näiteks, kui see array siin suuruse kuus on ainult viis asju see, 771 00:36:03,010 --> 00:36:06,080 Noh, sa võiksid lihtsalt tack midagi peale lõpuni. 772 00:36:06,080 --> 00:36:08,200 Aga mis siis, kui soovite lisada midagi keskele 773 00:36:08,200 --> 00:36:11,280 massiiv, kuigi see võib olla viis kuuest asjad on? 774 00:36:11,280 --> 00:36:14,250 >> Noh, mida me teeme, kui meil oli kõik meie Vabatahtlikel laval in 775 00:36:14,250 --> 00:36:15,110 nädalat varem? 776 00:36:15,110 --> 00:36:18,710 Kui me tahtsime panna keegi siin, kas need inimesed, kuidas liikuda selles 777 00:36:18,710 --> 00:36:22,540 viis, või need inimesed, kuidas liikuda selles Nii, ja mis sai kallis. 778 00:36:22,540 --> 00:36:26,950 Suunates inimesi sees array sattus liitmise ja maksumus 779 00:36:26,950 --> 00:36:31,240 meile aega, seega palju meie n ruudus töötab korda nagu sisestamise sorteerida jaoks 780 00:36:31,240 --> 00:36:32,550 Näiteks kõige halvemal juhul. 781 00:36:32,550 --> 00:36:36,520 Nii massiivid on suurepärane, kuid sa pead ette teada, kui suur sa tahad neid. 782 00:36:36,520 --> 00:36:38,030 >> Nii OK, siin on lahendus. 783 00:36:38,030 --> 00:36:43,860 Kui ma ei tea ette, kui palju üliõpilased ma võib-olla, ja ma tean, et kui 784 00:36:43,860 --> 00:36:47,870 Ma otsustada, kuigi ma olen ummikus, et paljud õpilased, miks ei ma lihtsalt alati 785 00:36:47,870 --> 00:36:51,740 eraldada kaks korda nii palju ruumi kui ma oleks vist vaja? 786 00:36:51,740 --> 00:36:54,450 Kas see ei ole mõistlik lahendus? 787 00:36:54,450 --> 00:36:58,240 >> Reaalselt, ma ei usu, et me oleme läheb vaja rohkem kui 50 pesa 788 00:36:58,240 --> 00:37:02,190 array jaoks keskmise suurusklassi niiet lihtsalt ümardada. 789 00:37:02,190 --> 00:37:07,040 Ma teen 100 slots minu array, lihtsalt nii et me saame kindlasti saada 790 00:37:07,040 --> 00:37:10,330 Õpilaste arv I oodata olla mõnes keskmise suurusklassi. 791 00:37:10,330 --> 00:37:14,320 Nii et miks mitte lihtsalt ümardada ja eraldama rohkem mälu jaoks tavaliselt massiivi 792 00:37:14,320 --> 00:37:16,290 kui te arvate, et teil võib isegi vaja on? 793 00:37:16,290 --> 00:37:20,190 Mis see on lihtne pushback selle mõte? 794 00:37:20,190 --> 00:37:21,440 >> Sa lihtsalt raiskad mälu. 795 00:37:21,440 --> 00:37:25,350 Sõna otseses mõttes iga programmi sa kirjutad siis on võib-olla kasutades kaks korda rohkem mälu kui 796 00:37:25,350 --> 00:37:26,680 mida sa tegelikult vajad. 797 00:37:26,680 --> 00:37:28,990 Ja see lihtsalt ei tunne eriti elegantne lahendus. 798 00:37:28,990 --> 00:37:31,990 Pealegi, see lihtsalt vähendab tõenäosus probleem. 799 00:37:31,990 --> 00:37:35,300 Kui juhtub, et on populaarne kursus ühe semestri ja teil on 101 800 00:37:35,300 --> 00:37:39,610 üliõpilased, teie programm on veel põhimõtteliselt silmitsi sama probleemi. 801 00:37:39,610 --> 00:37:44,280 >> Nii Õnneks on lahendus Selle reklaami kõik meie probleemid kujul 802 00:37:44,280 --> 00:37:46,790 andmete struktuurid, mis on keerulisemad kui need, 803 00:37:46,790 --> 00:37:47,970 oleme näinud siiani. 804 00:37:47,970 --> 00:37:50,530 See, ma väita, on seotud nimekirja. 805 00:37:50,530 --> 00:37:51,920 See on nimekiri numbrid - 806 00:37:51,920 --> 00:37:54,970 9, 17, 22, 26 ja 34 - 807 00:37:54,970 --> 00:38:00,120 mis on omavahel ühendatud nii mida ma joonistada nooli. 808 00:38:00,120 --> 00:38:03,580 >> Teisisõnu, kui ma tahtsin, et esindada massiiv, mida ma võiks teha 809 00:38:03,580 --> 00:38:04,910 midagi sellist. 810 00:38:04,910 --> 00:38:07,310 Ja ma panen selle õhuliini vaid hetk. 811 00:38:07,310 --> 00:38:09,970 Ma võiks teha - 812 00:38:09,970 --> 00:38:12,520 tere, eks. 813 00:38:12,520 --> 00:38:14,470 Oodake. 814 00:38:14,470 --> 00:38:17,360 Uus arvuti siin selge - 815 00:38:17,360 --> 00:38:18,090 Hea küll. 816 00:38:18,090 --> 00:38:21,730 >> Nii et kui mul on need numbrid array - 817 00:38:21,730 --> 00:38:28,880 9, 17, 22, 26, 24 - 818 00:38:28,880 --> 00:38:30,530 ei pruugi skaalal. 819 00:38:30,530 --> 00:38:33,730 Olgu, siin on minu array - 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 Olgu, siin on minu massiivi. 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 >> [Naer] 826 00:38:48,820 --> 00:38:49,440 >> DAVID Malan: Teeskle. 827 00:38:49,440 --> 00:38:52,330 See on liiga palju vaeva, et minna tagasi ning kinnitada, et nii on - 828 00:38:52,330 --> 00:38:54,290 26. 829 00:38:54,290 --> 00:38:57,650 Nii et meil on see massiiv 9, 17, 22, 26, ja 34. 830 00:38:57,650 --> 00:39:00,260 Neile näete piinlik viga ma lihtsalt tehtud, 831 00:39:00,260 --> 00:39:00,830 siin see on. 832 00:39:00,830 --> 00:39:04,490 >> Nii et ma väita, et see on väga tõhus lahendus. 833 00:39:04,490 --> 00:39:07,310 Olen eraldatud nii palju ints nagu Mul on vaja - üks, kaks, kolm, 834 00:39:07,310 --> 00:39:09,100 neli, viis või kuus - 835 00:39:09,100 --> 00:39:11,660 ja ma olen siis salvestatud numbrid sees see massiiv. 836 00:39:11,660 --> 00:39:15,220 Aga oletame, siis ma tahan, et sisestada väärtus nagu number 8? 837 00:39:15,220 --> 00:39:16,100 Noh, kus see kadus? 838 00:39:16,100 --> 00:39:18,530 Oletame, ma tahan lisada näiteks 20. 839 00:39:18,530 --> 00:39:19,790 Noh, kus see kadus? 840 00:39:19,790 --> 00:39:23,160 Kusagil keskel, või number 35 on minna 841 00:39:23,160 --> 00:39:24,010 kusagil lõpus. 842 00:39:24,010 --> 00:39:25,320 Aga ma olen kõik välja ruumi. 843 00:39:25,320 --> 00:39:29,120 >> Ja nii see on peamine väljakutse massiivid, mis on lahendus. 844 00:39:29,120 --> 00:39:32,280 Ma väitsid hetk tagasi getString lahendab selle probleemi. 845 00:39:32,280 --> 00:39:37,380 Kui soovite lisada kuues number sellesse massiiv, mis on vähemalt üks 846 00:39:37,380 --> 00:39:40,090 lahendus saab toetuda kindel, nagu me teeme getString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 Mis see on? 849 00:39:46,030 --> 00:39:48,190 >> Noh, oleks suurem on kergem öelda kui teha. 850 00:39:48,190 --> 00:39:52,810 Me ei saa tingimata teha massiivi suurem, kuid see, mida me saame teha? 851 00:39:52,810 --> 00:39:56,570 Tee uus massiiv, mis on suurem, suurus 6, või ehk suurus 10, kui me tahame 852 00:39:56,570 --> 00:40:00,490 saada edasi asju, ja siis kopeeri vana massiivi uude ja seejärel 853 00:40:00,490 --> 00:40:01,680 tasuta vana massiivi. 854 00:40:01,680 --> 00:40:05,770 >> Aga mis on sõiduaega nüüd selle protsessi? 855 00:40:05,770 --> 00:40:09,870 See on suur O n, sest kopeerimise läheb maksma teile mõned üksused 856 00:40:09,870 --> 00:40:13,480 aega, nii et ei ole nii ideaalne, kui meil eraldama uue massiivi, mis läheb 857 00:40:13,480 --> 00:40:15,610 tarbida kaks korda nii palju mälu ajutiselt. 858 00:40:15,610 --> 00:40:16,660 Kopeeri vana uutesse - 859 00:40:16,660 --> 00:40:18,800 Ma mõtlen, et see on lihtsalt peavalu, mis on jällegi miks me kirjutasime 860 00:40:18,800 --> 00:40:19,920 GetString teile. 861 00:40:19,920 --> 00:40:21,380 >> Niisiis, milline võiks teeme selle asemel? 862 00:40:21,380 --> 00:40:25,000 Noh, mis siis, kui meie andmestruktuur tegelikult on lüngad on? 863 00:40:25,000 --> 00:40:30,790 Oletame, et ma lõõgastuda minu eesmärk, mille külgnevas tükkideks mälu, kus 9 864 00:40:30,790 --> 00:40:34,500 on kohe 17, mis on kõrval 22, ja nii edasi. 865 00:40:34,500 --> 00:40:39,570 >> Ja arvan, et 9 saab üle siin RAM ja 17 saab siin RAM, 866 00:40:39,570 --> 00:40:40,990 ja 22 saab siin RAM. 867 00:40:40,990 --> 00:40:43,610 Teisisõnu, ma ei vaja neid isegi seljad enam. 868 00:40:43,610 --> 00:40:47,850 Ma pean kuidagi niit nõela läbi kõik need numbrid, või iga 869 00:40:47,850 --> 00:40:51,010 sõlmed, nagu me helistame ruudustiku Olen viinud nad, et 870 00:40:51,010 --> 00:40:55,670 mäleta, kuidas saada viimane selline sõlm alates esimesest. 871 00:40:55,670 --> 00:40:59,940 >> Mis on programmeerimine ehitada oleme näinud üsna hiljuti, kellega ma 872 00:40:59,940 --> 00:41:03,030 saab rakendada, et niit, või tõdeda, kellega ma ei 873 00:41:03,030 --> 00:41:05,430 rakendada need nooled? 874 00:41:05,430 --> 00:41:06,500 Nii viiteid, eks? 875 00:41:06,500 --> 00:41:09,560 Kui ma eraldada mitte ainult int, kuid sõlm - ja 876 00:41:09,560 --> 00:41:10,810 sõlm, ma lihtsalt tähendab konteiner. 877 00:41:10,810 --> 00:41:12,900 Ja visuaalselt, ma mõtlen ristkülik. 878 00:41:12,900 --> 00:41:16,420 Nii sõlme ilmselt vajab sisaldab kaks väärtust - 879 00:41:16,420 --> 00:41:21,490 int ise, ja siis, kui sellele viitab põhja pool ristküliku 880 00:41:21,490 --> 00:41:23,010 piisavalt ruumi int. 881 00:41:23,010 --> 00:41:26,130 >> Nii lihtsalt mõtlemine siin kui suur on see sõlm, see 882 00:41:26,130 --> 00:41:27,170 konteineri? 883 00:41:27,170 --> 00:41:29,250 Mitu baiti int? 884 00:41:29,250 --> 00:41:31,310 Arvatavasti 4, kui see on sama nagu tavaliselt. 885 00:41:31,310 --> 00:41:33,270 Ja siis, kui palju baite jaoks pointer? 886 00:41:33,270 --> 00:41:33,650 4. 887 00:41:33,650 --> 00:41:37,940 Nii pakendit või seda sõlme, on saab olema 8 baidi struktuur. 888 00:41:37,940 --> 00:41:41,760 Oh, ja see on õnnelik juhus, et me lihtsalt sisse see mõiste 889 00:41:41,760 --> 00:41:44,400 struct või C struktuuri. 890 00:41:44,400 --> 00:41:48,890 >> Nii et ma väita, et ma tahan, et astuda samm suunas see keerukamaid 891 00:41:48,890 --> 00:41:52,560 rakendamise numbrite loendi, seotud numbrite loendi, mida ma pean tegema 892 00:41:52,560 --> 00:41:56,920 veidi mõtlemist, kuni ees ja deklareerima mitte ainult int, kuid struct 893 00:41:56,920 --> 00:41:58,620 et ma helistan harilikult siin, sõlme. 894 00:41:58,620 --> 00:42:01,630 Me võiksime seda nimetada midagi tahame, kuid sõlm saab olema temaatiliselt palju 895 00:42:01,630 --> 00:42:03,560 asjad, mida me hakata otsima nüüd. 896 00:42:03,560 --> 00:42:06,480 >> Toas et sõlm on int n. 897 00:42:06,480 --> 00:42:09,350 Ja siis see süntaks, veidi imelik esmapilgul - 898 00:42:09,350 --> 00:42:12,960 struct tipp * järgmine. 899 00:42:12,960 --> 00:42:16,900 Noh piltlikult, mis see on? 900 00:42:16,900 --> 00:42:21,000 See on põhja pool ristkülik, mida me nägime 901 00:42:21,000 --> 00:42:22,730 hetk tagasi. 902 00:42:22,730 --> 00:42:27,600 >> Aga miks ma öelda struct tipp * mitte lihtsalt sõlme *? 903 00:42:27,600 --> 00:42:31,370 Sest, kui kursor on suunaga teises sõlme, see on lihtsalt 904 00:42:31,370 --> 00:42:32,760 aadress sõlme. 905 00:42:32,760 --> 00:42:35,630 See on kooskõlas sellega, mida me oleme arutlesid suunanäitajaks siiani. 906 00:42:35,630 --> 00:42:39,690 Aga miks, kui ma väidavad, et see struktuur on nimetatakse sõlm, ma pean ütlema, struct 907 00:42:39,690 --> 00:42:42,660 sõlm sees siin? 908 00:42:42,660 --> 00:42:43,190 >> Täpselt. 909 00:42:43,190 --> 00:42:46,490 See on omamoodi loll tegelikkus C. Typedef niiöelda, ei ole 910 00:42:46,490 --> 00:42:47,220 veel juhtunud. 911 00:42:47,220 --> 00:42:48,510 C on super sõnasõnaline. 912 00:42:48,510 --> 00:42:51,050 Ta loeb oma kood ülevalt alla, vasakult paremale. 913 00:42:51,050 --> 00:42:54,930 Ja kuni see tabab, et semikooloniga Alumine rida, arvan, mida ei 914 00:42:54,930 --> 00:42:57,590 eksisteerida andmetüüp? 915 00:42:57,590 --> 00:42:59,060 Sõlme, tsitaat lõppeb sõlme. 916 00:42:59,060 --> 00:43:03,050 >> Aga kuna rohkem verbose deklaratsiooni tegin esimesel real - 917 00:43:03,050 --> 00:43:05,340 typedef struct tipp - 918 00:43:05,340 --> 00:43:08,790 sest et tulid, enne looksulg, see on omamoodi nagu 919 00:43:08,790 --> 00:43:11,800 eelnevalt harida rõkkama, et sa Tead, mulle struct 920 00:43:11,800 --> 00:43:13,570 nimetatakse struct sõlme. 921 00:43:13,570 --> 00:43:16,270 Ausalt, ma ei meeldi kutsudes asjad struct sõlme, struct sõlme kõik 922 00:43:16,270 --> 00:43:17,090 kogu mu koodi. 923 00:43:17,090 --> 00:43:20,660 Aga ma kasutama seda ainult üks kord, vaid sees, nii et ma ei saa tõhusalt 924 00:43:20,660 --> 00:43:25,010 luua omamoodi ringviite, ei kursor ise per se, kuid 925 00:43:25,010 --> 00:43:29,400 kursor teise sama tüüpi. 926 00:43:29,400 --> 00:43:32,330 >> Nii selgub, et on andmestruktuur nagu see, seal on vähe 927 00:43:32,330 --> 00:43:34,470 toimingud, mis võiksid olla meid huvitab. 928 00:43:34,470 --> 00:43:37,460 Me võiksite sisestada arvesse nimekiri niimoodi. 929 00:43:37,460 --> 00:43:39,850 Meil võite kustutada loendist niimoodi. 930 00:43:39,850 --> 00:43:43,490 Me võiksite otsida nimekirja väärtus, või üldisemalt, Traverse. 931 00:43:43,490 --> 00:43:46,410 Ja Traverse on lihtsalt fancy viis öeldes alguse vasakult ja liigutada kõik 932 00:43:46,410 --> 00:43:47,650 tee paremale. 933 00:43:47,650 --> 00:43:52,640 >> Ja teate, isegi see veidi rohkem keerukamaid andmete struktuuri, andke 934 00:43:52,640 --> 00:43:56,510 mulle ettepaneku, et me saame laenata ideed viimase kahe nädala jooksul ja 935 00:43:56,510 --> 00:43:58,410 rakendada funktsioon nimega otsida niimoodi. 936 00:43:58,410 --> 00:44:01,360 Ta läheb tagasi true või vale, märkides, jah või 937 00:44:01,360 --> 00:44:03,390 ei, n on nimekirjas. 938 00:44:03,390 --> 00:44:05,960 Tema teine ​​argument on viit nimekirja ise, 939 00:44:05,960 --> 00:44:07,920 kursor sõlme. 940 00:44:07,920 --> 00:44:10,350 >> Ma lähen siis teha, on tunnistada ajutise muutuja. 941 00:44:10,350 --> 00:44:12,730 Me nimetame seda ptr Kokkuleppeliselt jaoks pointer. 942 00:44:12,730 --> 00:44:15,220 Ja ma määrata see võrdub loetelu alguses. 943 00:44:15,220 --> 00:44:16,680 >> Ja nüüd teate samas silmus. 944 00:44:16,680 --> 00:44:20,640 Nii kaua, kui kursor ei ole võrdne tühjaks, ma lähen, et kontrollida. 945 00:44:20,640 --> 00:44:24,520 Kas pointer nool n võrdne n, mis võeti vastu? 946 00:44:24,520 --> 00:44:26,410 Ja oodake minut - uus tükk süntaks. 947 00:44:26,410 --> 00:44:29,324 Mis on nool äkki? 948 00:44:29,324 --> 00:44:30,574 Jah? 949 00:44:30,574 --> 00:44:34,200 950 00:44:34,200 --> 00:44:34,810 >> Täpselt. 951 00:44:34,810 --> 00:44:38,860 Nii et mõned minutid tagasi, me kasutasime dot märke juurde midagi 952 00:44:38,860 --> 00:44:43,080 seest struktuure, kui muutuja olete ei struct 953 00:44:43,080 --> 00:44:47,420 ise, kuid kursor struktuure, õnneks tükk süntaks et 954 00:44:47,420 --> 00:44:48,620 lõpuks muudab intuitiivne tunne. 955 00:44:48,620 --> 00:44:52,360 Nool tähendab, et jälgida pointer, nagu meie nooled tavaliselt tähendab 956 00:44:52,360 --> 00:44:56,570 piltlikult, ja minna Andmeväljal sees. 957 00:44:56,570 --> 00:44:59,700 Nii nool on sama asi nagu täpp, kuid sa seda kasutada, kui teil on pointer. 958 00:44:59,700 --> 00:45:05,270 >> Nii lihtsalt sulgege siis, kui n valdkonnas sees struct nimetatakse pointer 959 00:45:05,270 --> 00:45:07,760 võrdub võrdub n, tagastab true. 960 00:45:07,760 --> 00:45:11,970 Muidu see joon siin - pointer võrdub osuti edasi. 961 00:45:11,970 --> 00:45:17,540 Niisiis, mida see teeb, teate, on see, kui ma olen praegu osutavad struct 962 00:45:17,540 --> 00:45:21,430 sisaldab 9 ja 9 ei ole number Ma otsin - arvan, et ma otsin 963 00:45:21,430 --> 00:45:22,830 n on võrdne 50 - 964 00:45:22,830 --> 00:45:25,930 Ma lähen uuendada oma ajutise pointer mitte juhtida seda sõlme 965 00:45:25,930 --> 00:45:31,190 enam, kuid osuti noolt, mis läheb pani mind siia. 966 00:45:31,190 --> 00:45:34,270 >> Nüüd sain aru, on keeristorm sissejuhatus. 967 00:45:34,270 --> 00:45:37,380 Kolmapäeval, me tegelikult seda teha mõned inimesed ja mõned veel 968 00:45:37,380 --> 00:45:38,900 kood aeglasemas tempos. 969 00:45:38,900 --> 00:45:42,990 Aga aru saama, et me nüüd teeme oma andmed struktuurid keerulisemaks, nii et meie 970 00:45:42,990 --> 00:45:45,780 algoritme saab tõhusamaks, mis saab olema eelduseks 971 00:45:45,780 --> 00:45:50,500 pset kuus, kui me koormus jälle need 150.000 sõnad, kuid pead tegema nii 972 00:45:50,500 --> 00:45:55,650 tõhusalt, ja ideaalis luua programm, mis töötab meie kasutajatele ei 973 00:45:55,650 --> 00:46:00,460 lineaarne, mitte n ruuduga, kuid pidev aega, ideaalne. 974 00:46:00,460 --> 00:46:02,300 >> Näeme kolmapäeval. 975 00:46:02,300 --> 00:46:07,240 >> Ettekandja: Järgmisel CS50, David unustab oma tugipunkti. 976 00:46:07,240 --> 00:46:12,770 >> DAVID Malan: Ja see, kuidas te saadate sõnumid C. Mida - 977 00:46:12,770 --> 00:46:14,020 >> [ERI SMS: TEADE SOUNDS] 978 00:46:14,020 --> 00:46:19,734