1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> DAVID MALAN: Okei, tervetuloa takaisin. 3 00:00:12,580 --> 00:00:13,290 Tämä on CS50. 4 00:00:13,290 --> 00:00:15,130 Tämä on alku viikolla seitsemän. 5 00:00:15,130 --> 00:00:18,890 Joten se on ollut jonkin aikaa, joten ajattelin olimme ottaa tornado kiertueen, jossa olemme 6 00:00:18,890 --> 00:00:20,760 jäit ja missä olemme nyt menossa. 7 00:00:20,760 --> 00:00:23,310 >> Joten tämä asia täällä voisi olla aiheutti ahdistusta aluksi. 8 00:00:23,310 --> 00:00:27,680 Mutta toivottavasti alatte sopeutua mitä tämä tarkoittaa täällä - 9 00:00:27,680 --> 00:00:32,670 tähden edustavat osoitin, joka on juuri, enemmän maallikon termein? 10 00:00:32,670 --> 00:00:33,400 Joten se osoite. 11 00:00:33,400 --> 00:00:35,490 >> Joten se osoite jotain muistiin. 12 00:00:35,490 --> 00:00:38,260 Ja aloimme kuori takaisin kerrokset pari viikkoa sitten, asioita, kuten 13 00:00:38,260 --> 00:00:41,800 GetString ja muita tällaisia ​​toimintoja Koko tämän ajan on palaamassa 14 00:00:41,800 --> 00:00:46,010 osoitteet asioita muistiin, kuten osoite ensimmäisen merkin 15 00:00:46,010 --> 00:00:46,990 Joissakin sekvenssi. 16 00:00:46,990 --> 00:00:50,360 >> Joten me esitteli myös valgrind, joka voit alkaa käyttää tähän ongelmaan 17 00:00:50,360 --> 00:00:53,380 set, etenkin seuraavaan Harjoitus samoin. 18 00:00:53,380 --> 00:00:54,980 Ja valgrind tekee mitä meille? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 Se etsii muistivuotoja, ja se tarkistaa myös väärin muistin. 21 00:01:01,020 --> 00:01:05,890 >> Se voi tietyllä todennäköisyydellä, havaita, jos koodi tulee koskettaa muistia 22 00:01:05,890 --> 00:01:07,100 että se ei yksinkertaisesti ole. 23 00:01:07,100 --> 00:01:10,410 Joten ei välttämättä vuoda, mutta jos ylittävät rajoja joidenkin 24 00:01:10,410 --> 00:01:14,730 array, ja olet todella ajaa valgrind ja aiheuttaa, että käyttäytymisestäsi 25 00:01:14,730 --> 00:01:17,870 valgrind on käynnissä ohjelma on käynnissä sen sisällä, saat 26 00:01:17,870 --> 00:01:21,460 tällaista viestiä - "virheellinen kirjoittavat koon 4 ", joka muistuttaa pari 27 00:01:21,460 --> 00:01:25,880 viikkoa sitten tarkoitti, että minulla oli vahingossa kuin yhden int liian pitkälle 28 00:01:25,880 --> 00:01:27,250 rajojen ulkopuolelle array. 29 00:01:27,250 --> 00:01:30,790 Ja niin koko 4 tarkoittaa tässä koko että erityisesti int. 30 00:01:30,790 --> 00:01:35,260 >> Joten ota varmuuden siinä, että valgrind tuotannosta, muoto se, 31 00:01:35,260 --> 00:01:36,170 on vain kamalaa. 32 00:01:36,170 --> 00:01:40,180 On todella vaikea nähdä läpi sotku ja mielenkiintoista tietoa. 33 00:01:40,180 --> 00:01:42,910 Joten mitä olemme tehneet täällä on vain ote jotkut pari lisää 34 00:01:42,910 --> 00:01:43,850 mielenkiintoinen linjat. 35 00:01:43,850 --> 00:01:46,760 Mutta ymmärtää, että 80% valgrind n lähtö tulee olemaan hieman 36 00:01:46,760 --> 00:01:47,650 häiriötekijä. 37 00:01:47,650 --> 00:01:52,820 >> Vain etsiä malleja, kuten nämä - virheellinen oikea, virheellinen lukea, 40 tavua 38 00:01:52,820 --> 00:01:56,690 ja jotkut lohkojen määrä on varmasti menetetty, avainsanoja, kuten että. 39 00:01:56,690 --> 00:02:01,920 Ja mitä tulee toivottavasti nähdä jonkin verran Tällainen jälki mikä funktio 40 00:02:01,920 --> 00:02:03,340 virhe on todella sisään 41 00:02:03,340 --> 00:02:07,195 Tässä tapauksessa täällä, missä linja minun koodi oli virhe ilmeisesti? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26-tiedostoon memory.c, joka oli Esimerkiksi me leikimme 44 00:02:14,130 --> 00:02:14,890 tuolloin. 45 00:02:14,890 --> 00:02:16,460 Joten se on luultavasti ole malloc. 46 00:02:16,460 --> 00:02:18,630 Se oli luultavasti minun koodin sijasta. 47 00:02:18,630 --> 00:02:20,910 Niin näemme tämän uudelleen ja jälleen ennen pitkää. 48 00:02:20,910 --> 00:02:24,080 >> Joten scanf, tämä tuli esille pari muotoja toistaiseksi. 49 00:02:24,080 --> 00:02:26,410 Näimme sscanf lyhyesti. 50 00:02:26,410 --> 00:02:28,330 Se oli jotain määrä olet sukeltanut oman 51 00:02:28,330 --> 00:02:29,535 valmistelut tietokilpailu. 52 00:02:29,535 --> 00:02:33,130 Ja scanf on oikeastaan ​​mitä CS50 Kirjasto on käyttänyt alla 53 00:02:33,130 --> 00:02:36,560 huppu jo jonkin aikaa, jotta saada käyttäjän syötettä. 54 00:02:36,560 --> 00:02:40,420 >> Esimerkiksi jos muutan yli CS50 laite täällä, haluaisin avata 55 00:02:40,420 --> 00:02:45,315 Esimerkiksi tänään, että kutsutaan scanf-0.c Ja se on erittäin yksinkertaista. 56 00:02:45,315 --> 00:02:46,590 Se on vain muutaman rivin koodia. 57 00:02:46,590 --> 00:02:50,880 Mutta se osoittaa todella, miten getInt on toiminut koko tämän ajan. 58 00:02:50,880 --> 00:02:54,710 >> Tässä ohjelmassa täällä line 16 , Huomaa, että julistan int. 59 00:02:54,710 --> 00:02:57,270 Joten ei viitteitä, ei mitään maagista siellä, vain int. 60 00:02:57,270 --> 00:03:00,330 Sitten linja 17, I pyytää käyttäjän numero, kiitos. 61 00:03:00,330 --> 00:03:02,930 Sitten loppuvuodesta 18, käytän scanf täällä. 62 00:03:02,930 --> 00:03:06,910 Ja olen täsmentänyt, ikään kuin printf, että olen odottanut viestiä 63 00:03:06,910 --> 00:03:08,110 listatut prosenttia i. 64 00:03:08,110 --> 00:03:10,920 >> Joten prosenttia i, tietenkin, tarkoittaa int. 65 00:03:10,920 --> 00:03:14,580 Mutta huomaa, mitä toinen argumentti scanf on. 66 00:03:14,580 --> 00:03:17,350 Miten kuvailisit toinen argumentti pilkun jälkeen? 67 00:03:17,350 --> 00:03:19,450 Mikä se on? 68 00:03:19,450 --> 00:03:20,670 >> Se on osoite x. 69 00:03:20,670 --> 00:03:25,490 Joten tämä on hyödyllistä, koska tarjoamalla scanf osoite x, mitä 70 00:03:25,490 --> 00:03:29,560 jotka antavat että toiminto tehdä? 71 00:03:29,560 --> 00:03:33,010 Ei vain mennä sinne, mutta myös mitä? 72 00:03:33,010 --> 00:03:34,060 >> Tee muutos siihen. 73 00:03:34,060 --> 00:03:38,080 Koska voit mennä sinne, se on eräänlainen kuten kartan sijainti muistiin. 74 00:03:38,080 --> 00:03:41,900 Ja niin kauan kuin annat scanf tai mitään toimintoa sellainen kartta, joka 75 00:03:41,900 --> 00:03:45,840 toiminto voi mennä sinne, eikä vain katsokaa arvoa, mutta se voi myös 76 00:03:45,840 --> 00:03:49,670 muuttaa tätä arvoa, mikä on hyödyllistä, jos tarkoitusta elämään scanf on 77 00:03:49,670 --> 00:03:53,060 skannata käyttäjän syötettä, erityisesti näppäimistöltä. 78 00:03:53,060 --> 00:03:57,830 Ja F tarkoittaa alustettu, kuten printf, F tarkoittaa alustettu 79 00:03:57,830 --> 00:03:58,930 merkkijono, jonka haluat tulostaa. 80 00:03:58,930 --> 00:04:04,430 >> Joten lyhyt, tämä linja 18 yksinkertaisesti sanoo, yritä lukea int käyttäjän 81 00:04:04,430 --> 00:04:10,420 näppäimistö ja säilytä se sisällä x kello mitä osoite x sattuu asumaan. 82 00:04:10,420 --> 00:04:14,860 Ja sitten lopuksi, linja 19 sanoo vain, kiitos int, tässä tapauksessa. 83 00:04:14,860 --> 00:04:15,940 >> Joten anna minun mennä eteenpäin ja tehdä tämän. 84 00:04:15,940 --> 00:04:18,570 Joten tee scanf 0. 85 00:04:18,570 --> 00:04:20,130 Anna minun mennä eteenpäin ja zoomata sisään 86 00:04:20,130 --> 00:04:22,960 Menen ja ajaa tämän kanssa pisteitä slash scanf 0. 87 00:04:22,960 --> 00:04:24,020 Numero, kiitos? 88 00:04:24,020 --> 00:04:24,720 50. 89 00:04:24,720 --> 00:04:25,730 Kiitos 50. 90 00:04:25,730 --> 00:04:27,270 Joten se on melko yksinkertainen. 91 00:04:27,270 --> 00:04:28,160 >> Nyt mitä se ei tee? 92 00:04:28,160 --> 00:04:29,940 Se ei tee koko joukko Virheen tarkistus. 93 00:04:29,940 --> 00:04:33,000 Esimerkiksi, jos en yhteistyötä, enkä kirjoittaa numeron, mutta 94 00:04:33,000 --> 00:04:37,860 vaan minä kirjoitan jotain "hei" se on vain outoa. 95 00:04:37,860 --> 00:04:41,130 Ja niin yksi niistä asioista CS50 kirjasto on tehnyt meille jostain 96 00:04:41,130 --> 00:04:43,440 aika on, että reprompting ja reprompting. 97 00:04:43,440 --> 00:04:49,320 >> Yritä lause muistaa oli cs50.c, ja se on syy, että getInt vuonna 98 00:04:49,320 --> 00:04:51,670 CS50 kirjasto on itse asiassa koko nippu riviä pitkä, koska olemme 99 00:04:51,670 --> 00:04:53,190 tarkistamalla tyhmä tavaraa kuten tämä. 100 00:04:53,190 --> 00:04:55,730 Ei käyttäjä ei anna Meidän mielestämme, int? 101 00:04:55,730 --> 00:04:57,910 Oliko hän antaa meille jotain kuten aakkosellinen kirje? 102 00:04:57,910 --> 00:05:01,410 Jos näin on, haluamme havaita että ja huutaa heille. 103 00:05:01,410 --> 00:05:03,915 >> Mutta asiat saavat enemmän mielenkiintoista tässä seuraavassa esimerkissä. 104 00:05:03,915 --> 00:05:09,840 Jos menen scanf-1.c, mikä on yksi asia, joka on perusteellisesti muuttunut 105 00:05:09,840 --> 00:05:11,135 tämä seuraava esimerkki? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 Käytän char *, tietenkin, sijasta int. 108 00:05:16,010 --> 00:05:19,210 >> Joten tämä on mielenkiintoinen, koska char *, muistaa, on oikeastaan ​​vain 109 00:05:19,210 --> 00:05:20,190 sama asia kuin merkkijono. 110 00:05:20,190 --> 00:05:23,840 Joten se tuntuu ehkä tämä on erittäin yksinkertaisen toteutuksen getString. 111 00:05:23,840 --> 00:05:26,010 Mutta olen kuoriutui kerros ja CS50 kirjaston, joten olen 112 00:05:26,010 --> 00:05:27,550 kutsumalla tätä char * nyt. 113 00:05:27,550 --> 00:05:30,070 Katsotaanpa missä, jos missä, me mennä pieleen. 114 00:05:30,070 --> 00:05:30,840 >> Line 17 - 115 00:05:30,840 --> 00:05:33,950 Sanon taas, antakaa minulle jotain, Tässä tapauksessa merkkijono. 116 00:05:33,950 --> 00:05:37,940 Ja sitten seuraavalle riville, pyydän scanf, uudelleen, jolloin se muoto koodi, 117 00:05:37,940 --> 00:05:39,310 mutta tällä kertaa prosenttia s. 118 00:05:39,310 --> 00:05:41,900 Ja sitten tällä kertaa, olen ja antaa sen puskuriin. 119 00:05:41,900 --> 00:05:43,550 >> Nyt huomaa, en käytä et-merkki. 120 00:05:43,550 --> 00:05:47,120 Mutta miksi se on todennäköisesti OK täällä? 121 00:05:47,120 --> 00:05:49,760 Sillä mitä puskuri jo? 122 00:05:49,760 --> 00:05:50,770 Se on jo osoitin. 123 00:05:50,770 --> 00:05:51,650 Se on jo osoite. 124 00:05:51,650 --> 00:05:54,510 >> Ja antaa tämän sanan "hämmentää" haluan vain kutsua sitä s, esimerkiksi sen, 125 00:05:54,510 --> 00:05:55,050 yksinkertaisuus. 126 00:05:55,050 --> 00:05:58,250 Mutta olen sitä kutsui puskuri koska Yleensä ohjelmointi, jos sinulla on 127 00:05:58,250 --> 00:06:02,130 kimpale muisti, joka merkkijono todella vain on, voit kutsua sitä puskuria. 128 00:06:02,130 --> 00:06:04,460 Se on paikka tallentaa tietoja. 129 00:06:04,460 --> 00:06:07,400 >> Samanlaisia ​​asioita, kuten YouTube, kun he puskurointi, niin sanoakseni, että 130 00:06:07,400 --> 00:06:10,270 vain tarkoittaa sitä lataamalla bittiä Internet-ja tallentamalla ne 131 00:06:10,270 --> 00:06:14,160 paikallisten joukko, paikallinen kimpale muistia, joten että voit katsella sitä myöhemmin ilman 132 00:06:14,160 --> 00:06:16,830 se ohitetaan tai roikkuu voit toiston aikana. 133 00:06:16,830 --> 00:06:20,930 >> Joten siellä ongelma tässä kuitenkin, koska Kerron scanf, odottaa 134 00:06:20,930 --> 00:06:22,320 merkkijonon käyttäjä. 135 00:06:22,320 --> 00:06:24,410 Tässä osoite kimpale muisti. 136 00:06:24,410 --> 00:06:26,180 Laita merkkijonon siellä. 137 00:06:26,180 --> 00:06:31,230 Miksi näin on sidottu antaa harmia, vaikka? 138 00:06:31,230 --> 00:06:33,490 >> Mikä tuo on? 139 00:06:33,490 --> 00:06:35,510 Voinko käyttää että osa muistia? 140 00:06:35,510 --> 00:06:36,250 Tiedäthän, en tiedä. 141 00:06:36,250 --> 00:06:39,210 Koska on puskuri ole alustettu mitään? 142 00:06:39,210 --> 00:06:39,820 Ei oikeastaan. 143 00:06:39,820 --> 00:06:43,090 Ja niin se mitä olemme kutsuneet roskat arvo, joka 144 00:06:43,090 --> 00:06:44,040 ei ole virallista sanaa. 145 00:06:44,040 --> 00:06:49,200 Se vain tarkoittaa, että meillä ei ole aavistustakaan, mitä bittiä ovat sisällä neljä tavua, että 146 00:06:49,200 --> 00:06:51,240 Olen varattu puskurina. 147 00:06:51,240 --> 00:06:52,450 >> En ole soittanut malloc. 148 00:06:52,450 --> 00:06:53,940 Olen ehdottomasti ei kutsuttu getString. 149 00:06:53,940 --> 00:06:56,380 Joten kuka tietää, mikä on todella sisällä puskuri? 150 00:06:56,380 --> 00:07:00,550 Ja vielä kertoa scanf sokeasti, mene sinne ja laittaa mitä käyttäjä kirjoittaa. 151 00:07:00,550 --> 00:07:04,460 >> Joten mikä on omiaan aiheuttamaan meidän koodi, jos otamme sen? 152 00:07:04,460 --> 00:07:05,700 Luultavasti segfault. 153 00:07:05,700 --> 00:07:07,970 Ehkä ei, mutta luultavasti segfault. 154 00:07:07,970 --> 00:07:10,620 Sanon ehkä ei, koska joskus teet, joskus 155 00:07:10,620 --> 00:07:11,380 et saa segfault. 156 00:07:11,380 --> 00:07:14,280 Joskus vain onnekas, mutta se kuitenkin tulee olemaan 157 00:07:14,280 --> 00:07:15,340 bug ohjelmaamme. 158 00:07:15,340 --> 00:07:17,060 >> Joten anna minun mennä eteenpäin ja koota tähän. 159 00:07:17,060 --> 00:07:18,280 Aion tehdä sen vanhan koulun tavalla. 160 00:07:18,280 --> 00:07:23,825 Joten kalahtaa viiva 0, scanf-1, scanf-1.c, Anna. 161 00:07:23,825 --> 00:07:24,720 Hups, liian vanha koulu. 162 00:07:24,720 --> 00:07:26,550 Katsotaanpa. 163 00:07:26,550 --> 00:07:28,440 Minne menen? 164 00:07:28,440 --> 00:07:29,700 Voi, char * puskuri. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 Kiitos - 167 00:07:35,130 --> 00:07:36,930 Tallenna, OK - 168 00:07:36,930 --> 00:07:37,690 hyvin vanha koulu. 169 00:07:37,690 --> 00:07:38,900 Okei, se on ollut jonkin aikaa. 170 00:07:38,900 --> 00:07:41,720 >> Joten olen juuri tallentanut tiedoston jälkeen tehdä, että väliaikainen 171 00:07:41,720 --> 00:07:42,700 muuttaa hetki sitten. 172 00:07:42,700 --> 00:07:46,090 Ja nyt olen koonnut sen manuaalisesti kalahtaa. 173 00:07:46,090 --> 00:07:49,500 Ja nyt aion mennä eteenpäin ja ajaa scanf-1, Anna. 174 00:07:49,500 --> 00:07:50,290 String kiitos. 175 00:07:50,290 --> 00:07:51,600 Tulen kirjoittamaan "hei." 176 00:07:51,600 --> 00:07:54,070 >> Ja nyt, tässä kun suoraan sanottuna printf voi on hieman ärsyttävää. 177 00:07:54,070 --> 00:07:56,020 Se ei oikeastaan ​​tule segfault tässä tapauksessa. 178 00:07:56,020 --> 00:07:59,860 Printf on hieman erityinen, koska se on niin erittäin yleisesti käytetty, että 179 00:07:59,860 --> 00:08:03,570 lähinnä printf tekee meille palveluksen ja ymmärtämättä, 180 00:08:03,570 --> 00:08:04,830 se ei ole voimassa osoitin. 181 00:08:04,830 --> 00:08:09,080 Otan sen itselleni vain tulostaa out suluissa null, jopa 182 00:08:09,080 --> 00:08:13,340 vaikka se ei ole välttämättä mitä me itse odottaa. 183 00:08:13,340 --> 00:08:16,940 >> Joten emme todellakaan voi helposti aiheuttaa segfault tämän, mutta selvästi tämä 184 00:08:16,940 --> 00:08:18,600 ei ole käyttäytymistä halusin. 185 00:08:18,600 --> 00:08:19,800 Joten mitä yksinkertainen ratkaisu? 186 00:08:19,800 --> 00:08:25,650 No, scanf-2, haluaisin ehdottaa, että eikä oikeastaan ​​vain jaettaessa 187 00:08:25,650 --> 00:08:30,100 char *, anna minun olla hieman älykkäämpiä tämän ja haluan varata puskuria 188 00:08:30,100 --> 00:08:32,940 jaksona 16 merkkiä. 189 00:08:32,940 --> 00:08:34,200 >> Joten en voi tehdä tämän pari tapaa. 190 00:08:34,200 --> 00:08:35,610 Voisin ehdottomasti käyttää malloc. 191 00:08:35,610 --> 00:08:38,980 Mutta voin palata viikon kaksi, kun Tarvitsin vain koko joukko 192 00:08:38,980 --> 00:08:39,620 merkkiä. 193 00:08:39,620 --> 00:08:40,860 Se on vain joukko. 194 00:08:40,860 --> 00:08:44,870 Joten haluan sen sijaan uudelleen puskuri on joukko 16 merkkiä. 195 00:08:44,870 --> 00:08:47,340 >> Ja nyt, kun kuljen puskuri - 196 00:08:47,340 --> 00:08:49,940 ja tämä on jotain emme puhua viikolla kaksi - 197 00:08:49,940 --> 00:08:53,730 mutta voit hoitaa array vaikka se on osoite. 198 00:08:53,730 --> 00:08:56,390 Teknisesti kuten olemme nähneet, he hieman erilainen. 199 00:08:56,390 --> 00:09:01,290 Mutta scanf ei pahastu, jos ohitat sen nimi array, sillä mitä 200 00:09:01,290 --> 00:09:05,030 Kalahtaa tekee meille on olennaisesti hoitoon nimi, että levyjärjestelmän 201 00:09:05,030 --> 00:09:08,280 osoite kimpale 16 tavua. 202 00:09:08,280 --> 00:09:09,550 >> Joten tämä on parempi. 203 00:09:09,550 --> 00:09:12,110 Tämä tarkoittaa nyt, että voin toivottavasti toimi seuraavasti. 204 00:09:12,110 --> 00:09:16,800 Saanen loitontaa hetki ja tekevät scanf-2, koottu OK. 205 00:09:16,800 --> 00:09:19,390 Nyt haluan tehdä sai slash scanf-2. 206 00:09:19,390 --> 00:09:22,430 String kiitos. "Hei." Ja se näytti toimivan tällä kertaa. 207 00:09:22,430 --> 00:09:26,020 >> Mutta voiko joku ehdottaa skenaario jossa se ei ehkä vielä toimi? 208 00:09:26,020 --> 00:09:28,550 Niin? 209 00:09:28,550 --> 00:09:30,640 Jotain yli 16 merkkiä. 210 00:09:30,640 --> 00:09:32,020 Ja todella, voimme olla hieman tarkempi. 211 00:09:32,020 --> 00:09:36,540 Jotain enää sitten 15 merkkiä, koska todellakin meidän täytyy pitää mielessä 212 00:09:36,540 --> 00:09:39,920 että me tarvitsemme kenoviiva nolla implisiittisesti lopussa merkkijonon, 213 00:09:39,920 --> 00:09:42,950 joka on varattu scanf tyypillisesti hoitaa meille. 214 00:09:42,950 --> 00:09:46,210 >> Joten anna minun tehdä jotain - 215 00:09:46,210 --> 00:09:48,040 Joskus voimme vain jätä se niin. 216 00:09:48,040 --> 00:09:50,630 OK, joten olemme nyt aiheuttama meidän segmentointi vika. 217 00:09:50,630 --> 00:09:51,000 Miksi? 218 00:09:51,000 --> 00:09:54,940 Koska olen kirjoittanut yli 15 merkkejä, joten olemme todella 219 00:09:54,940 --> 00:09:58,280 kosketti muisti, että olen itse ei pitäisi olla. 220 00:09:58,280 --> 00:10:00,180 >> Joten mitä todella ratkaisu tähän? 221 00:10:00,180 --> 00:10:02,210 No, mitä jos me tarvitsemme enää merkkijono? 222 00:10:02,210 --> 00:10:03,960 No, me ehkä tehdä 32 tavua. 223 00:10:03,960 --> 00:10:05,160 No, mitä jos se ei ole tarpeeksi pitkä? 224 00:10:05,160 --> 00:10:06,040 Entä 64 tavua? 225 00:10:06,040 --> 00:10:07,080 Mitä jos se ei ole tarpeeksi pitkä? 226 00:10:07,080 --> 00:10:09,640 Entä 128 tai 200 tavua? 227 00:10:09,640 --> 00:10:12,660 Mikä oikeastaan ​​on ratkaisu täällä Yleisessä tapauksessa, jos emme tiedä 228 00:10:12,660 --> 00:10:14,460 etukäteen, mitä käyttäjän tulee kirjoittaa? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> Se on vain sellainen iso riesa, Ollakseni rehellinen, minkä vuoksi 231 00:10:23,050 --> 00:10:29,050 CS50 kirjastossa on muutamia kymmeniä rivejä koodi, joka yhdessä toteuttaa 232 00:10:29,050 --> 00:10:32,390 GetString merkkijonon siten, että emme on tiedettävä etukäteen, mitä 233 00:10:32,390 --> 00:10:33,430 käyttäjän tulee kirjoittaa. 234 00:10:33,430 --> 00:10:37,370 Erityisesti jos katsomme taaksepäin cs50.c kaksi viikkoa sitten, näet 235 00:10:37,370 --> 00:10:40,480 että getString todella tekee ei käytä scanf tällä tavalla. 236 00:10:40,480 --> 00:10:43,720 Pikemminkin se lukee yhden merkin kerrallaan. 237 00:10:43,720 --> 00:10:46,010 >> Koska yksi kiva juttu lukee yhden merkin on voimme 238 00:10:46,010 --> 00:10:48,490 taata itsemme aina on ainakin yksi merkkiä. 239 00:10:48,490 --> 00:10:51,740 Voin vain todeta nieriää, ja sitten ottaa nämä todella askelin vain 240 00:10:51,740 --> 00:10:54,380 lukea jokin merkki on aika näppäimistöltä. 241 00:10:54,380 --> 00:10:58,240 Ja sitten, mitä näet getString tekee, on aina se loppuu, 242 00:10:58,240 --> 00:11:02,280 sanovat, 16 tavua muistia, se käyttää malloc tai serkku sekä että 243 00:11:02,280 --> 00:11:06,810 jakaa enemmän muistia, kopiointi vanha muistin uuteen, ja sitten indeksoinnin 244 00:11:06,810 --> 00:11:09,900 pitkin, saada yksi merkki kerrallaan, ja kun se loppuu, että 245 00:11:09,900 --> 00:11:13,370 kimpale muisti, heittää sen pois, nappaa isompi kimpale muisti, kopioi vanha 246 00:11:13,370 --> 00:11:14,750 uusiin, ja toistaa. 247 00:11:14,750 --> 00:11:18,480 Ja se on todella tuskaa todella toteuttaa jotain niin yksinkertaista kuin 248 00:11:18,480 --> 00:11:19,710 saada panosta käyttäjä. 249 00:11:19,710 --> 00:11:21,090 >> Voit siis käyttää scanf. 250 00:11:21,090 --> 00:11:22,430 Voit käyttää muita vastaavia toimintoja. 251 00:11:22,430 --> 00:11:25,420 Ja paljon oppikirjoja ja online- esimerkkejä tehdä, mutta ne ovat kaikki 252 00:11:25,420 --> 00:11:27,210 alttiita tämänkaltaisia ​​ongelmia. 253 00:11:27,210 --> 00:11:29,550 Ja lopulta saada segfault on tavallaan ärsyttävää. 254 00:11:29,550 --> 00:11:30,680 Se ei ole hyvä käyttäjälle. 255 00:11:30,680 --> 00:11:33,560 >> Mutta pahimmassa tapauksessa, mitä se pohjimmiltaan laittaa 256 00:11:33,560 --> 00:11:37,160 koodi vaarassa? 257 00:11:37,160 --> 00:11:39,250 Jonkinlainen hyökkäys, mahdollisesti. 258 00:11:39,250 --> 00:11:41,680 Puhuimme yksi tällainen hyökkäys - täynnä pino. 259 00:11:41,680 --> 00:11:44,660 Mutta yleensä, jos et saa ylivuoto puskuri, kuten teimme 260 00:11:44,660 --> 00:11:48,070 pari viikkoa sitten, vain kirjallisesti enemmän kuin "Hello" pinoon, et 261 00:11:48,070 --> 00:11:52,330 voi todellakin ottaa, mahdollisesti tietokoneen, tai ainakin päästä käsiksi tietoihin, jotka 262 00:11:52,330 --> 00:11:53,510 ei kuulu sinulle. 263 00:11:53,510 --> 00:11:55,970 >> Joten lyhyt, siksi olemme ne apupyörät. 264 00:11:55,970 --> 00:11:59,090 Mutta nyt alamme ottaa niitä pois, meidän ohjelmia ei enää tarvitse, 265 00:11:59,090 --> 00:12:00,610 välttämättä, käyttäjän syötettä. 266 00:12:00,610 --> 00:12:03,960 Mutta jos ongelma asetettu kuusi, syöte tulevat valtava 267 00:12:03,960 --> 00:12:07,520 sanastotiedostoa 150 joidenkin outoa tuhat sanaa. 268 00:12:07,520 --> 00:12:10,330 >> Joten sinun ei tarvitse huolehtia käyttäjän mielivaltainen tulo. 269 00:12:10,330 --> 00:12:13,720 Annamme sinulle joitakin oletuksia siitä tiedoston. 270 00:12:13,720 --> 00:12:20,340 Kysyttävää viitteitä tai scanf tai käyttäjä syöttää yleensä? 271 00:12:20,340 --> 00:12:24,450 >> Okei, joten vilkaista sitten yksi perään aihe kaksi viikkoa sitten. 272 00:12:24,450 --> 00:12:28,590 Ja se oli tämä käsite struct. 273 00:12:28,590 --> 00:12:34,180 Ei siksi, että - tämä käsite struct, joka oli mitä? 274 00:12:34,180 --> 00:12:35,430 Mitä struct tehdä meille? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> Määrittele - 277 00:12:39,860 --> 00:12:41,710 Anteeksi? 278 00:12:41,710 --> 00:12:42,820 Määritä muuttujan tyyppi. 279 00:12:42,820 --> 00:12:44,410 Joten tavallaan. 280 00:12:44,410 --> 00:12:46,180 Olemme itse asiassa yhdistämällä kaksi aihetta. 281 00:12:46,180 --> 00:12:49,510 Joten typedef, muistaa, että voimme julistaa tyyppi omaa, kuten 282 00:12:49,510 --> 00:12:51,500 synonyymi, kuten merkkijonon char *. 283 00:12:51,500 --> 00:12:56,200 Mutta käyttämällä typedef ja struct, voimme luoda aidosti omia tietorakenteita. 284 00:12:56,200 --> 00:12:59,600 >> Esimerkiksi, jos menen takaisin gedit täällä vain hetken, ja menen eteenpäin 285 00:12:59,600 --> 00:13:08,230 ja tehdä jotain, haluan säästää tämä, sanotaanko, structs.c 286 00:13:08,230 --> 00:13:10,840 tilapäisesti, olen juuri menossa mennä eteenpäin ja sisältää 287 00:13:10,840 --> 00:13:14,360 standardio.h, int main mitätön. 288 00:13:14,360 --> 00:13:18,960 Ja sitten täällä, olettaa, että haluan kirjoittaa ohjelma, joka tallentaa 289 00:13:18,960 --> 00:13:21,840 useita opiskelijoita useista taloja, esimerkiksi. 290 00:13:21,840 --> 00:13:24,430 Joten se on kuin registrarial tietokanta jonkinlaisia. 291 00:13:24,430 --> 00:13:29,550 >> Joten jos tarvitsen nimensä yksi opiskelija, I voisi tehdä jotain char * nimi, 292 00:13:29,550 --> 00:13:31,570 ja minä teen jotain - 293 00:13:31,570 --> 00:13:34,410 Oikeastaan ​​nyt käyttää CS50 kirjasto vain hetken tehdä tästä 294 00:13:34,410 --> 00:13:38,380 hieman yksinkertaisempi, jotta voimme lainata niitä kymmeniä rivejä koodia. 295 00:13:38,380 --> 00:13:39,340 Ja haluan vain pitää asiat yksinkertaisina. 296 00:13:39,340 --> 00:13:42,610 Pidämme sitä merkkijono, ja nyt getString. 297 00:13:42,610 --> 00:13:47,420 >> Joten Väitän nyt, että olen tallennettu nimi Joidenkin opiskelijoiden ja talon 298 00:13:47,420 --> 00:13:50,240 Joissakin opiskelija, yksinkertaisesti käyttämällä muuttujia kuten teimme ja viikolla yksi. 299 00:13:50,240 --> 00:13:52,370 Mutta kai nyt halua tukea useita opiskelijoita. 300 00:13:52,370 --> 00:13:58,460 Okei, joten minun vaistoni tehdä string nimi2 saa getString, string 301 00:13:58,460 --> 00:14:01,370 house2 saa getString. 302 00:14:01,370 --> 00:14:05,850 Ja sitten meidän kolmas opiskelija, Tehdään nimi3 getString. 303 00:14:05,850 --> 00:14:09,170 >> Okei, joten tämä on toivottavasti silmiinpistävää te typerää, 304 00:14:09,170 --> 00:14:11,580 koska tämä prosessi on oikeastaan ​​koskaan tulee päättymään, ja se on juuri menossa 305 00:14:11,580 --> 00:14:13,130 tehdä minun koodi näyttää pahempi ja pahemmaksi. 306 00:14:13,130 --> 00:14:14,810 Mutta me ratkaisi liian viikolla kaksi. 307 00:14:14,810 --> 00:14:19,450 Mikä oli meidän suhteellisen puhdasta ratkaisu kun meillä oli useita muuttujia 308 00:14:19,450 --> 00:14:23,580 samaa tietotyyppiä, jotka kaikki liittyvät, mutta emme halua tätä kamalaa sotkua 309 00:14:23,580 --> 00:14:26,870 samalla tavoin nimetty muuttujia? 310 00:14:26,870 --> 00:14:30,060 Mitä me teimme sen sijaan? 311 00:14:30,060 --> 00:14:31,260 >> Joten Taisin kuulla muutamia paikkoja. 312 00:14:31,260 --> 00:14:32,590 Meillä oli jono. 313 00:14:32,590 --> 00:14:37,110 Jos haluat useita esiintymiä jotain, miksi emme puhdista kaikki 314 00:14:37,110 --> 00:14:39,540 ja vain sanoa, anna minulle array kutsutaan nimillä? 315 00:14:39,540 --> 00:14:41,640 >> Ja nyt, nyt kova koodi 3. 316 00:14:41,640 --> 00:14:44,450 Ja sitten antaa minulle toisen array kutsutaan taloa, ja anna minulle 317 00:14:44,450 --> 00:14:45,800 nyt kova koodi 3. 318 00:14:45,800 --> 00:14:49,220 Ja olen massiivisesti siivonnut sotkea, että olen juuri luonut. 319 00:14:49,220 --> 00:14:52,400 Nyt olen edelleen kova koodattu 3, mutta vielä 3 voisi dynaamisesti tulevat 320 00:14:52,400 --> 00:14:54,350 käyttäjän, tai argv tai vastaavia. 321 00:14:54,350 --> 00:14:55,720 Joten tämä on jo puhtaampaa. 322 00:14:55,720 --> 00:15:00,100 >> Mutta mikä on ärsyttävää tässä on, että nyt, vaikka nimi on jotenkin 323 00:15:00,100 --> 00:15:02,280 liittyviä peruskysymyksiä opiskelijan talo - 324 00:15:02,280 --> 00:15:04,720 se on opiskelija, että olen todella haluavat edustaa - 325 00:15:04,720 --> 00:15:08,080 Minulla on nyt kaksi paneelit, jotka ovat rinnakkaisia siinä mielessä, että he 326 00:15:08,080 --> 00:15:13,930 samankokoisia, ja nimet kiinnike 0 oletettavasti karttoja talot kiinnike 0, 327 00:15:13,930 --> 00:15:16,600 ja nimet kiinnike 1 karttoja taloja kiinnike 1. 328 00:15:16,600 --> 00:15:19,280 Toisin sanoen, että opiskelija asuu että talo, ja että muut opiskelija 329 00:15:19,280 --> 00:15:20,530 asuu, että muut talossa. 330 00:15:20,530 --> 00:15:23,720 Mutta varmasti tämä voisi olla tehdään entistä puhtaammin. 331 00:15:23,720 --> 00:15:24,990 >> No, se voi itse asiassa. 332 00:15:24,990 --> 00:15:28,730 Ja anna minun mennä eteenpäin ja avata up structs.h, ja voit 333 00:15:28,730 --> 00:15:31,130 katso tätä ajatusta täällä. 334 00:15:31,130 --> 00:15:34,905 Huomaa, että olen käyttänyt typedef, kun viittasi hetki sitten julistaa meidän 335 00:15:34,905 --> 00:15:35,570 oma tietotyyppi. 336 00:15:35,570 --> 00:15:39,660 Mutta olen myös tällä muita avainsanan nimeltään struct joka antaa minulle uuden 337 00:15:39,660 --> 00:15:40,790 tietorakenne. 338 00:15:40,790 --> 00:15:43,980 >> Ja tämä tietorakenne Väitän on menossa on kaksi asiaa sisällä 339 00:15:43,980 --> 00:15:47,060 se - merkkijono kutsutaan nimellä, ja merkkijono kutsutaan talon. 340 00:15:47,060 --> 00:15:49,820 Ja nimi aion antaa Tämä tietorakenne on menossa 341 00:15:49,820 --> 00:15:51,005 kutsua opiskelija. 342 00:15:51,005 --> 00:15:54,030 Voisin kutsua sitä mitä haluan, mutta semanttisesti tehdä 343 00:15:54,030 --> 00:15:55,810 järkeä minulle mielessäni. 344 00:15:55,810 --> 00:15:59,160 >> Joten nyt, jos en avaa parempi versio Ohjelman aloin kirjoittaa 345 00:15:59,160 --> 00:16:00,390 siellä, haluan selaa alkuun. 346 00:16:00,390 --> 00:16:03,190 Ja siellä on joitakin riviä koodia täällä, mutta haluan keskittyä varten 347 00:16:03,190 --> 00:16:04,160 hetki yhdessä. 348 00:16:04,160 --> 00:16:07,790 Olen ilmoittanut jatkuvasti kutsuttu opiskelijoita ja kova koodattu 3 nyt. 349 00:16:07,790 --> 00:16:11,110 Mutta nyt, huomaa kuinka puhdas minun koodi alkaa saada. 350 00:16:11,110 --> 00:16:15,030 >> Linjassa 22, julistan joukko opiskelijoita. 351 00:16:15,030 --> 00:16:18,760 Ja huomaa, että opiskelija on ilmeisesti nyt tietotyyppi. 352 00:16:18,760 --> 00:16:23,360 Koska yläreunassa olevan tiedoston, huomaa Olen mukana, että otsikkotiedoston 353 00:16:23,360 --> 00:16:24,820 että olen vetänyt ylös juuri hetki sitten. 354 00:16:24,820 --> 00:16:28,820 Ja että header-tiedosto yksinkertaisesti ollut tämä määritelmä opiskelija. 355 00:16:28,820 --> 00:16:32,470 >> Joten nyt olen luonut omia tietoja tyyppi, joka laatijat C vuotta 356 00:16:32,470 --> 00:16:33,890 sitten ei ajattele etukäteen. 357 00:16:33,890 --> 00:16:34,570 Mutta ei ole ongelma. 358 00:16:34,570 --> 00:16:35,870 Voin tehdä sen itse. 359 00:16:35,870 --> 00:16:39,050 Joten tämä on joukko nimeltään opiskelijoita, jokainen, jonka jäsenet 360 00:16:39,050 --> 00:16:41,100 on opiskelija rakenne. 361 00:16:41,100 --> 00:16:44,270 Ja haluan kolme näistä pakassa. 362 00:16:44,270 --> 00:16:46,030 >> Ja nyt, mitä muualla Tämän ohjelman tehdä? 363 00:16:46,030 --> 00:16:47,550 Tarvitsin jotain hieman mielivaltainen. 364 00:16:47,550 --> 00:16:51,450 Joten verkossa 24 lähtien Olen toistaa 0-3. 365 00:16:51,450 --> 00:16:54,000 Sitten kysyä käyttäjältä opiskelijan nimi. 366 00:16:54,000 --> 00:16:56,110 Ja sitten käytän getString kuin ennen. 367 00:16:56,110 --> 00:16:59,410 Sitten pyydän opiskelijan talossa, ja käytän getString kuin ennen. 368 00:16:59,410 --> 00:17:01,780 >> Mutta ilmoitus - hieman uutta pala syntaksin - 369 00:17:01,780 --> 00:17:07,010 En voi silti indeksi i. opiskelija, mutta miten saan at erityisiä tietoja 370 00:17:07,010 --> 00:17:08,354 alan sisällä struct? 371 00:17:08,354 --> 00:17:11,770 No, mitä ilmeisesti uusi pala syntaksin? 372 00:17:11,770 --> 00:17:13,339 Se on vain piste operaattori. 373 00:17:13,339 --> 00:17:14,510 >> Olemme oikeastaan ​​nähnyt tätä ennen. 374 00:17:14,510 --> 00:17:17,819 Olet nähnyt sen PSET viisi, jos olet syöksyi jo kanssa bittikarttatiedostoja. 375 00:17:17,819 --> 00:17:22,372 Mutta piste tarkoittaa vain sitä sisällä tämän struct tai useita kenttiä, antaa piste 376 00:17:22,372 --> 00:17:24,510 nimi, tai antaa minulle dot talo. 377 00:17:24,510 --> 00:17:28,690 Tämä tarkoittaa mennä sisälle struct ja saada ne tietyt kentät. 378 00:17:28,690 --> 00:17:30,200 >> Mitä loput tämän ohjelman tehdä? 379 00:17:30,200 --> 00:17:31,190 Se ei ole kaikki, että seksikäs. 380 00:17:31,190 --> 00:17:34,640 Huomaa, että en kerrata 0-3 uudelleen, ja minä yksinkertaisesti luoda Englanti 381 00:17:34,640 --> 00:17:40,500 lause kuten niin ja niin on niin ja kuten talo, kulkee pisteen nimi 382 00:17:40,500 --> 00:17:43,320 i: nnen opiskelijoiden ja niiden talon samoin. 383 00:17:43,320 --> 00:17:47,560 >> Ja sitten lopuksi, nyt alamme saada anaali tästä, nyt kun olemme 384 00:17:47,560 --> 00:17:49,580 perehtynyt mitä malloc ja muut toiminnot ovat olleet 385 00:17:49,580 --> 00:17:50,570 tekee kaiken tämän ajan. 386 00:17:50,570 --> 00:17:54,220 Miksi minun täytyy vapauttaa molemmat nimi ja talon, vaikka en 387 00:17:54,220 --> 00:17:56,960 ei soita malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString teki. 389 00:17:58,020 --> 00:18:00,930 Ja se oli likainen pikku salaisuus useita viikkoja, mutta getString on 390 00:18:00,930 --> 00:18:03,530 vuotanut muistin koko sijoittaa kaikki lukukauden toistaiseksi. 391 00:18:03,530 --> 00:18:05,990 Ja valgrand lopulta paljastaa tämän meille. 392 00:18:05,990 --> 00:18:10,730 >> Mutta se ei ole iso juttu, koska tiedän että en voi yksinkertaisesti vapauttaa nimi 393 00:18:10,730 --> 00:18:15,750 ja talon, vaikka teknisesti, jotta olla super, super turvallinen, minun pitäisi olla 394 00:18:15,750 --> 00:18:17,890 tekee joitakin virheentarkistusta täällä. 395 00:18:17,890 --> 00:18:19,040 Mitä vaistosi kertovat sinulle? 396 00:18:19,040 --> 00:18:22,480 Mitä minun pitäisi olla tarkistamatta ennen kuin vapauttaa mikä on 397 00:18:22,480 --> 00:18:25,470 merkkijono, alias joka char *? 398 00:18:25,470 --> 00:18:33,460 >> Olisin todella tarkistaa, jos opiskelijat kiinnike i dot nimi ei ole 399 00:18:33,460 --> 00:18:34,840 yhtä null. 400 00:18:34,840 --> 00:18:40,400 Sitten se tulee olemaan OK mennä eteenpäin ja vapaa että osoitin, ja sama tai muiden 401 00:18:40,400 --> 00:18:41,160 yhtä hyvin. 402 00:18:41,160 --> 00:18:46,860 Jos opiskelijat kiinnike i dot talo ei ole sama null, tämä nyt suojaa 403 00:18:46,860 --> 00:18:52,520 kulmaa vasten tapaus, jossa GetString palauttaa jotain null. 404 00:18:52,520 --> 00:18:57,310 Ja näimme hetki sitten, printf tulee suojella meitä täällä vain sanomalla 405 00:18:57,310 --> 00:18:58,990 null, joka on menossa katsomaan outoa. 406 00:18:58,990 --> 00:19:02,340 Mutta ainakin se ei segfault, kuten olemme nähneet. 407 00:19:02,340 --> 00:19:05,990 >> No, anna minun tehdä yksi asia täällä. structs-0 on sellainen tyhmä ohjelma 408 00:19:05,990 --> 00:19:09,700 koska en anna kaiken tämän tiedon, ja sitten se menetetään, kun ohjelma päättyy. 409 00:19:09,700 --> 00:19:10,940 Mutta haluan mennä eteenpäin ja tehdä tämän. 410 00:19:10,940 --> 00:19:12,830 Haluan tehdä terminaalin ikkuna vähän isompi. 411 00:19:12,830 --> 00:19:17,000 Haluan tehdä structs-1, joka on uusi versio. 412 00:19:17,000 --> 00:19:18,520 >> Minä suurentaa hieman. 413 00:19:18,520 --> 00:19:21,620 Ja nyt haluan ajaa piste slash structs-1. 414 00:19:21,620 --> 00:19:22,590 Opiskelijan nimi - 415 00:19:22,590 --> 00:19:31,500 David Mather, tehdään Rob Kirkland, Tehdään Lauren Leverett. 416 00:19:31,500 --> 00:19:33,650 Mielenkiintoista on nyt ilmoitus - 417 00:19:33,650 --> 00:19:35,540 ja minä vain tiedän tämän, koska Kirjoitin ohjelman - 418 00:19:35,540 --> 00:19:38,930 siellä on tiedosto nyt minun nykyinen hakemistoon students.csv. 419 00:19:38,930 --> 00:19:40,420 Jotkut teistä ehkä nähnyt Näiden todellisessa maailmassa. 420 00:19:40,420 --> 00:19:42,980 >> Mikä on CSV-tiedosto? 421 00:19:42,980 --> 00:19:44,170 Comma erotetut arvot. 422 00:19:44,170 --> 00:19:46,670 Se on tavallaan kuin köyhän miehen versio Excel-tiedoston. 423 00:19:46,670 --> 00:19:50,580 Se taulukko rivien ja sarakkeiden voit avata kuten Excel, 424 00:19:50,580 --> 00:19:51,800 tai Numerot Mac. 425 00:19:51,800 --> 00:19:55,180 >> Ja jos avaan tiedoston täällä gedit, ilmoitus - ja numerot eivät ole siellä. 426 00:19:55,180 --> 00:19:57,360 Se on vain gedit kertoo minua linja numerot. 427 00:19:57,360 --> 00:19:59,740 Huomaa ensimmäisellä rivillä tämän tiedosto on David ja Mather. 428 00:19:59,740 --> 00:20:01,450 Seuraava rivi on Rob pilkulla Kirkland. 429 00:20:01,450 --> 00:20:04,170 Ja kolmas rivi on Lauren pilkku Leverett. 430 00:20:04,170 --> 00:20:05,480 >> Joten mitä olen luonut? 431 00:20:05,480 --> 00:20:09,580 Olen nyt kirjoittanut C-ohjelma, joka tehokkaasti voi tuottaa taulukkolaskenta 432 00:20:09,580 --> 00:20:11,840 että voidaan avata kuten Excel. 433 00:20:11,840 --> 00:20:15,520 Ei kaikki, että pakottavia tietokokonaisuus, mutta jos sinulla on paljon suurempi paloina 434 00:20:15,520 --> 00:20:18,440 tietoja, joita et itse halua manipuloida ja tehdä kuvaajia ja 435 00:20:18,440 --> 00:20:21,260 kuten, tämä on ehkä yksi tapa luoda tietoihin. 436 00:20:21,260 --> 00:20:25,370 Lisäksi CSVs ovat todella erittäin yleinen vain tallentaa yksinkertaisia ​​tietoja - 437 00:20:25,370 --> 00:20:28,940 Yahoo Finance, esimerkiksi jos saat osakekursseja kautta ns 438 00:20:28,940 --> 00:20:33,180 API, ilmainen palvelu, jonka avulla voit get ajan tasalla varastossa 439 00:20:33,180 --> 00:20:35,650 lainauksia yrityksille, ne antaa tietoja takaisin 440 00:20:35,650 --> 00:20:37,800 Super yksinkertainen CSV-muodossa. 441 00:20:37,800 --> 00:20:39,380 >> Joten miten me sen teemme? 442 00:20:39,380 --> 00:20:42,530 No huomata, suurin osa tämän ohjelman lähes sama. 443 00:20:42,530 --> 00:20:46,870 Mutta huomaa täällä, eikä tulosta oppilaat ulos, on line 35 444 00:20:46,870 --> 00:20:51,040 eteenpäin, Väitän, että olen säästö opiskelijat levylle, joten säästää tiedoston. 445 00:20:51,040 --> 00:20:53,630 >> Niin huomaa olen julistamisesta FILE * - 446 00:20:53,630 --> 00:20:57,260 nyt tämä on sellainen epäkohta C. Jostain syystä FILE on kaikki korkit, 447 00:20:57,260 --> 00:21:00,690 joka ei ole kuten useimmat muut tietotyypit in C. Mutta tämä on sisäänrakennettu 448 00:21:00,690 --> 00:21:02,320 tietotyyppi, FILE *. 449 00:21:02,320 --> 00:21:05,900 Ja olen julistamisesta osoitin tiedoston, Näin voit ajatella, että. 450 00:21:05,900 --> 00:21:08,070 >> fopen tarkoittaa open file. 451 00:21:08,070 --> 00:21:09,470 Mitä tiedosto haluat avata? 452 00:21:09,470 --> 00:21:12,620 Haluan avata tiedoston minä mielivaltaisesti soittaa students.csv. 453 00:21:12,620 --> 00:21:14,480 Voisin soittaa että jotain haluan. 454 00:21:14,480 --> 00:21:15,200 >> Ja sitten ottaa arvaus. 455 00:21:15,200 --> 00:21:18,960 Mitä toinen argumentti to fopen luultavasti tarkoittaa? 456 00:21:18,960 --> 00:21:21,480 Oikea, w kirjoittamista varten, voisi olla r lukea. 457 00:21:21,480 --> 00:21:24,120 Siellä on append jos haluat lisätä rivejä eikä 458 00:21:24,120 --> 00:21:25,200 korvata koko juttu. 459 00:21:25,200 --> 00:21:28,005 >> Mutta haluan luoda tämän tiedoston kerran, niin minä käytän quote lainaus w. 460 00:21:28,005 --> 00:21:31,880 Ja tiedän, että vain lukeneeni asiakirjoja tai man-sivulta. 461 00:21:31,880 --> 00:21:35,100 Jos tiedosto ei ole nolla - toisin sanoen, jos mitään meni pieleen - 462 00:21:35,100 --> 00:21:37,820 haluan kerrata yli opiskelijat 0-3. 463 00:21:37,820 --> 00:21:40,410 >> Ja nyt huomaa jotain koskaan niin hieman eri 464 00:21:40,410 --> 00:21:42,110 noin line 41 täällä. 465 00:21:42,110 --> 00:21:42,960 Se ei ole printf. 466 00:21:42,960 --> 00:21:46,530 Se fprintf tiedostojen printf. 467 00:21:46,530 --> 00:21:47,790 Joten se tulee kirjoittaa tiedostoon. 468 00:21:47,790 --> 00:21:48,860 Mitä tiedostoa? 469 00:21:48,860 --> 00:21:53,630 Yksi, jonka osoitin voit määrittää ensimmäisenä argumenttina. 470 00:21:53,630 --> 00:21:55,940 >> Sitten määrittää muotomerkkijonoa. 471 00:21:55,940 --> 00:21:59,660 Sitten määrittää, mitä merkkijono haluamme plug in ensimmäinen prosenttia s, ja 472 00:21:59,660 --> 00:22:04,320 sitten toinen muuttuja tai Toinen prosenttia s. 473 00:22:04,320 --> 00:22:06,760 Sitten suljemme tiedoston fclose. 474 00:22:06,760 --> 00:22:09,380 Kuin minä vapauttaa muistia kuin ennen, vaikka Minun pitäisi mennä takaisin ja lisää 475 00:22:09,380 --> 00:22:10,540 Joissakin tarkistaa null. 476 00:22:10,540 --> 00:22:12,090 >> Ja siinä se. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, fclose antaa minulle kyky luoda tekstitiedostoja. 478 00:22:16,960 --> 00:22:19,640 Nyt näet ongelmatilanteissa asetettu viisi, joka liittyy kuvia, voit käyttää 479 00:22:19,640 --> 00:22:20,990 binääritiedostot sijaan. 480 00:22:20,990 --> 00:22:24,200 Mutta pohjimmiltaan, idea on sama, vaikka toimintoja will 481 00:22:24,200 --> 00:22:28,710 nähdä ovat hieman erilainen. 482 00:22:28,710 --> 00:22:32,580 >> Joten pyörremyrsky kiertue, mutta saat liiankin tuttuja tiedosto I/O-- 483 00:22:32,580 --> 00:22:34,960 tulo ja lähtö - kanssa PSET viisi. 484 00:22:34,960 --> 00:22:38,607 Ja kysyttävää aluksi perusasiat täällä? 485 00:22:38,607 --> 00:22:39,857 Niin? 486 00:22:39,857 --> 00:22:41,880 487 00:22:41,880 --> 00:22:43,710 >> Mitä jos yrität vapauttaa nolla? 488 00:22:43,710 --> 00:22:48,880 Uskon, ellei vapaa on saanut hieman enemmän käyttäjäystävällinen, voit 489 00:22:48,880 --> 00:22:49,890 mahdollisesti segfault. 490 00:22:49,890 --> 00:22:54,160 Kulkee sen null on huono, koska en uskovat ilmaiseksi viitsii tarkistaa sinulle, 491 00:22:54,160 --> 00:22:57,330 koska se olisi mahdollisesti jätettä aikaa se tehdä itselleen 492 00:22:57,330 --> 00:22:59,022 kaikki maailman. 493 00:22:59,022 --> 00:23:00,590 Hyvä kysymys. 494 00:23:00,590 --> 00:23:04,300 >> Okei, joten tällainen saa meitä kiinnostava aihe. 495 00:23:04,300 --> 00:23:07,010 Teema Harjoitus viisi on tutkintaan. 496 00:23:07,010 --> 00:23:08,420 Ainakin se osa Ongelman asetettu. 497 00:23:08,420 --> 00:23:12,030 Forensics viitataan yleensä elpyminen tietoa, joka voi tai 498 00:23:12,030 --> 00:23:14,110 ei ehkä ole poistettu tarkoituksella. 499 00:23:14,110 --> 00:23:18,680 Ja niin ajattelin kertoa teille nopeasti maku mitä todella tapahtuu kaikilla 500 00:23:18,680 --> 00:23:21,230 tällä kertaa alla huppu tietokoneen. 501 00:23:21,230 --> 00:23:23,960 >> Esimerkiksi, jos sinulla on sisäpuolelle kannettavan tai pöytätietokoneen 502 00:23:23,960 --> 00:23:28,040 kovalevy, se on joko mekaaninen laite, joka todella pyörii - 503 00:23:28,040 --> 00:23:31,650 siellä on pyöreä asioita kutsutaan Platters jotka näyttävät aivan kuten mitä 504 00:23:31,650 --> 00:23:34,540 juuri ruudulle täällä, vaikka Tämä on yhä vanha koulu. 505 00:23:34,540 --> 00:23:37,370 Tämä on kolmen ja puolen tuuman kiintolevylle. 506 00:23:37,370 --> 00:23:40,070 Ja kolme ja puoli tuumaa viittaa of kanssa on asia, kun asennat sen 507 00:23:40,070 --> 00:23:40,890 ja tietokone. 508 00:23:40,890 --> 00:23:44,890 >> Monet teistä kaverit kannettavat tietokoneet nyt on solid-state drives tai SSD, 509 00:23:44,890 --> 00:23:46,260 jossa ei ole mitään liikkuvia osia. 510 00:23:46,260 --> 00:23:49,170 Ne ovat paremminkin RAM ja vähemmän kuin Nämä mekaaniset laitteet. 511 00:23:49,170 --> 00:23:51,450 Mutta ideat ovat edelleen samat, varmasti kuin ne liittyvät 512 00:23:51,450 --> 00:23:52,790 ongelmaan asettaa viisi. 513 00:23:52,790 --> 00:23:57,400 >> Ja jos ajattelee nyt kovalevy edustaa on ympyrä, jonka 514 00:23:57,400 --> 00:23:58,930 Minä piirtää täällä näin. 515 00:23:58,930 --> 00:24:02,290 Kun luot tiedosto tietokoneeseen, onko se SSD, tai 516 00:24:02,290 --> 00:24:06,610 Tällöin vanhempi koulun kiintolevy, että tiedosto sisältää useita bittejä. 517 00:24:06,610 --> 00:24:10,510 Sanotaan, että se on tämän 0 ja 1, koko joukko 0 ja 1 s. 518 00:24:10,510 --> 00:24:11,660 Joten tämä on minun koko kiintolevyn. 519 00:24:11,660 --> 00:24:13,225 Tämä on ilmeisesti aika iso tiedosto. 520 00:24:13,225 --> 00:24:18,080 Ja se käyttää jopa 0 ja 1 s tuohon osa fyysisen lautasella. 521 00:24:18,080 --> 00:24:19,750 >> No, mitä se on fyysinen osa? 522 00:24:19,750 --> 00:24:25,310 No, käy ilmi, että kiintolevylle, ainakin tämän tyyppinen, siellä on 523 00:24:25,310 --> 00:24:27,340 nämä pikku magneettisia hiukkasia. 524 00:24:27,340 --> 00:24:32,630 Ja he pohjimmiltaan ovat pohjois-ja etelänavat heille niin, että jos 525 00:24:32,630 --> 00:24:35,710 puolestaan ​​yksi niistä magneettisia hiukkasia Näin voisi sanoa, että se on 526 00:24:35,710 --> 00:24:36,720 edustaa 1. 527 00:24:36,720 --> 00:24:39,340 Ja jos se on ylösalaisin etelään pohjoiseen, voisi sanoa, että se on 528 00:24:39,340 --> 00:24:40,390 eli 0. 529 00:24:40,390 --> 00:24:43,660 >> Joten todellisessa fyysisessä maailmassa, joka on miten voisi edustaa jotain 530 00:24:43,660 --> 00:24:45,670 binary tila 0 ja 1. 531 00:24:45,670 --> 00:24:46,720 Niin, että kaikki tiedosto on. 532 00:24:46,720 --> 00:24:49,300 On koko joukko magneettinen hiukkasia, jotka ovat niiden tällä tavalla tai 533 00:24:49,300 --> 00:24:51,920 Tällä tavoin luodaan malleja 0 ja 1 s. 534 00:24:51,920 --> 00:24:56,760 >> Mutta näyttää siltä, ​​kun tallennat tiedoston, joitakin tietoja on tallennettu erikseen. 535 00:24:56,760 --> 00:25:00,000 Joten tämä on pieni pöytä, hakemistoon, niin sanoakseni. 536 00:25:00,000 --> 00:25:05,810 Ja Soitan tämän sarakkeen nimi, ja Soitan tämän sarakkeen sijainti. 537 00:25:05,810 --> 00:25:08,850 >> Ja aion sanoa, kai tämä on minun jatkaa. 538 00:25:08,850 --> 00:25:14,050 Oma resume.doc varastoidaan sijainti, sanokaamme 123. 539 00:25:14,050 --> 00:25:15,390 Olen aina mennä, että numero. 540 00:25:15,390 --> 00:25:18,810 Mutta riittää sanoa, että aivan kuten RAM, voit ottaa kiintolevyn 541 00:25:18,810 --> 00:25:22,350 se gigatavu tai 200 gigatavua tai teratavu, ja voit 542 00:25:22,350 --> 00:25:23,750 määrä koko tavua. 543 00:25:23,750 --> 00:25:26,480 Voit numeroida kaikki paloina 8 bittiä. 544 00:25:26,480 --> 00:25:29,030 >> Joten me sanomme, että tämä on paikka 123. 545 00:25:29,030 --> 00:25:32,070 Joten tämän hakemiston sisällä minun käyttöjärjestelmä järjestelmä muistaa, että minun 546 00:25:32,070 --> 00:25:34,250 ansioluettelosi on paikalla 123. 547 00:25:34,250 --> 00:25:36,850 Mutta se saa mielenkiintoista, kun poistat tiedoston. 548 00:25:36,850 --> 00:25:37,820 >> Joten esimerkiksi - 549 00:25:37,820 --> 00:25:40,790 ja onneksi suurin osa maailman on kiinni kiinni tämän - mitä tapahtuu, kun 550 00:25:40,790 --> 00:25:45,040 vedät tiedoston Mac OS Trash tai Windowsin roskakorin? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 Mikä tarkoitus tehdä se? 553 00:25:50,510 --> 00:25:53,860 Se on tietysti päästä eroon tiedoston, mutta mitä teko vetämällä ja 554 00:25:53,860 --> 00:25:57,550 tippu roskakoriin tai Roskakori tehdä tietokoneella? 555 00:25:57,550 --> 00:25:59,230 >> Ei yhtään mitään, oikeastaan. 556 00:25:59,230 --> 00:26:00,320 Se on aivan kuin kansio. 557 00:26:00,320 --> 00:26:01,800 Se on erityinen kansio, on varma. 558 00:26:01,800 --> 00:26:04,460 Mutta se todella poistaa tiedoston? 559 00:26:04,460 --> 00:26:06,780 >> No, ei, koska jotkut teistä luultavasti ollut kuin, oh damn, et ole 560 00:26:06,780 --> 00:26:07,420 tarkoita tehdä. 561 00:26:07,420 --> 00:26:09,130 Joten kaksoisnapsauttamaasi Roskakoriin tai roskakoriin. 562 00:26:09,130 --> 00:26:11,630 Olet pisti ympäri ja olet takaisin tiedosto vetämällä se 563 00:26:11,630 --> 00:26:12,110 pois sieltä. 564 00:26:12,110 --> 00:26:14,420 Niin selvästi, se ei ole välttämättä poistamista. 565 00:26:14,420 --> 00:26:15,990 >> OK, olet fiksumpi. 566 00:26:15,990 --> 00:26:18,860 Tiedät, että vain vetämällä sen Roskakoriin tai roskakorin ei tarkoita 567 00:26:18,860 --> 00:26:19,930 olet tyhjennys roskakoriin. 568 00:26:19,930 --> 00:26:24,110 Joten voit mennä jopa valikkoon ja sanot Tyhjennä roskakori tai Tyhjennä roskakori. 569 00:26:24,110 --> 00:26:25,360 Mitä sitten tapahtuu? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> Niin, niin se poistetaan enemmän. 572 00:26:32,530 --> 00:26:37,660 Mutta kaikki tämä tapahtuu, on tämä. 573 00:26:37,660 --> 00:26:45,350 Tietokone unohtaa missä resume.doc oli. 574 00:26:45,350 --> 00:26:47,400 >> Mutta mitä ei ole muuttunut ilmeisesti kuvassa? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 Bittiä, 0 ja 1 s joka Väitän ovat paikan päällä joidenkin fysikaalisten 577 00:26:55,570 --> 00:26:56,280 laitteisto. 578 00:26:56,280 --> 00:26:57,110 He ovat yhä olemassa. 579 00:26:57,110 --> 00:26:58,930 Se on vain tietokone on unohtanut, mitä ne ovat. 580 00:26:58,930 --> 00:27:03,160 >> Joten se on lähinnä vapautti tiedoston bittejä niin, että ne voidaan käyttää uudelleen. 581 00:27:03,160 --> 00:27:06,940 Mutta ei ennen kuin luoda enemmän tiedostoja, ja enemmän tiedostoja, ja lisää tiedostot 582 00:27:06,940 --> 00:27:12,150 toden-näköisesti, ne 0 ja 1 s, nämä magneettiset partikkelit, saavat uudelleen, 583 00:27:12,150 --> 00:27:16,220 ylösalaisin tai oikein päin, sillä muita tiedostoja, 0 ja 1 s. 584 00:27:16,220 --> 00:27:17,980 >> Joten sinulla on tämä aikaikkuna. 585 00:27:17,980 --> 00:27:19,860 Ja se ei ole ennustettavissa pituus, todella. 586 00:27:19,860 --> 00:27:22,240 Se riippuu koosta kiintolevyn ajaa ja kuinka monta tiedostoa olet ja 587 00:27:22,240 --> 00:27:23,490 kuinka nopeasti voit tehdä uusia. 588 00:27:23,490 --> 00:27:27,050 Mutta on tämä aikaikkuna aikana kyseinen tiedosto on edelleen täysin 589 00:27:27,050 --> 00:27:27,770 kerrytettävissä. 590 00:27:27,770 --> 00:27:31,050 >> Joten jos joskus käyttää ohjelmia, kuten McAfee tai Norton yrittää palauttaa 591 00:27:31,050 --> 00:27:35,680 tiedot, kaikki he tekevät yrittää palauttaa tämän ns hakemiston 592 00:27:35,680 --> 00:27:37,340 selvittää, missä tiedosto oli. 593 00:27:37,340 --> 00:27:40,605 Ja joskus Norton ja sanon, tiedosto on 93% kerrytettävissä. 594 00:27:40,605 --> 00:27:42,020 No, mitä se tarkoittaa? 595 00:27:42,020 --> 00:27:45,690 Se tarkoittaa vain sitä, että jonkin toisen tiedoston sattumalta päätyi käyttämällä vaikkapa 596 00:27:45,690 --> 00:27:48,920 ne bittiä alkuperäinen tiedosto. 597 00:27:48,920 --> 00:27:51,950 >> Joten mitä todella mukana tietojen palauttaminen? 598 00:27:51,950 --> 00:27:55,720 No, jos sinulla ei ole jotain Norton valmiiksi asennettu tietokoneeseen, 599 00:27:55,720 --> 00:27:59,510 parasta mitä voi joskus tehdä on katsoa klo koko kiintolevyn etsimässä 600 00:27:59,510 --> 00:28:00,510 bittikuvioina. 601 00:28:00,510 --> 00:28:05,350 Ja yksi teemoista Harjoitus viisi on, että voit etsiä 602 00:28:05,350 --> 00:28:09,570 vastaa kiintolevyn, oikeuslääketieteen kuva compact flash kortti 603 00:28:09,570 --> 00:28:13,660 digitaalikamera, etsivät 0s ja 1s, että tyypillisesti korkea 604 00:28:13,660 --> 00:28:16,720 todennäköisyys, edustavat alku JPEG-kuvan. 605 00:28:16,720 --> 00:28:21,120 >> Ja te voi palauttaa niitä kuvia olettaen, jos näen tätä mallia 606 00:28:21,120 --> 00:28:24,380 bittiä rikosteknisen kuvan, jossa suuri todennäköisyys, että merkit 607 00:28:24,380 --> 00:28:25,650 alku JPEG. 608 00:28:25,650 --> 00:28:29,520 Ja jos näen saman kuvion uudestaan, että luultavasti merkitsee alkua 609 00:28:29,520 --> 00:28:32,440 toinen JPEG, ja toinen JPEG, ja toinen JPEG. 610 00:28:32,440 --> 00:28:34,970 Ja tämä on tyypillisesti miten tietojen palauttamista toimii. 611 00:28:34,970 --> 00:28:37,870 Mitä mukavaa noin JPEG on vaikka tiedostomuoto itsessään on hieman 612 00:28:37,870 --> 00:28:44,400 monimutkainen, alussa jokaisen tällaisen tiedosto on oikeastaan ​​melko tunnistettavissa 613 00:28:44,400 --> 00:28:47,370 ja yksinkertainen, kuten näette, Jos et ole saanut jo. 614 00:28:47,370 --> 00:28:50,270 >> Joten lähemmin alla huppu siitä, mitä on ollut 615 00:28:50,270 --> 00:28:53,360 meneillään, ja mitä nämä 0 ja 1 s ovat, antaa sinulle vähän enemmän 616 00:28:53,360 --> 00:28:55,330 yhteydessä tähän nimenomaiseen haasteeseen. 617 00:28:55,330 --> 00:28:55,510 >> [VIDEOTOISTOSTA] 618 00:28:55,510 --> 00:28:58,700 >> -Jos tietokone tallentaa eniten sen pysyvä tietojen. 619 00:28:58,700 --> 00:29:03,390 Voit tehdä, että data kulkee RAM ohjelman kanssa signaaleja, jotka kertovat 620 00:29:03,390 --> 00:29:06,110 kovalevy, miten säilyttää tietoihin. 621 00:29:06,110 --> 00:29:09,410 Kovalevy piirit kääntää nämä signaalit jännite 622 00:29:09,410 --> 00:29:10,870 vaihtelut. 623 00:29:10,870 --> 00:29:14,970 Nämä puolestaan ​​hallita kiintolevyn liikkuvat osat, joitakin harvoja 624 00:29:14,970 --> 00:29:17,910 liikkuvat osat jäljellä moderni tietokone. 625 00:29:17,910 --> 00:29:22,130 >> Osa signaaleista ohjata moottoria joka pyörii metallipäällysteisten Platters. 626 00:29:22,130 --> 00:29:25,470 Tietosi on tosiasiallisesti varastoitu Näiden Platters. 627 00:29:25,470 --> 00:29:28,610 Muut signaalit siirtää lukea / kirjoittaa päät lukea tai 628 00:29:28,610 --> 00:29:30,710 kirjoittaa tietoja Platters. 629 00:29:30,710 --> 00:29:35,450 Tämä kone niin tarkka, että ihmisen hiukset voinut edes kulua 630 00:29:35,450 --> 00:29:37,280 päätä ja spinning Platters. 631 00:29:37,280 --> 00:29:40,316 Silti se kaikki toimii loistava nopeuksilla. 632 00:29:40,316 --> 00:29:40,660 >> [END VIDEOTOISTOSTA] 633 00:29:40,660 --> 00:29:42,190 >> DAVID MALAN: Suurenna hieman syvemmälle nyt mitä 634 00:29:42,190 --> 00:29:44,360 itse asiassa nämä Platters. 635 00:29:44,360 --> 00:29:44,720 >> [VIDEOTOISTOSTA] 636 00:29:44,720 --> 00:29:47,660 >> -Katsotaan mitä vain näki hidastettuna. 637 00:29:47,660 --> 00:29:51,710 Kun lyhyt pulssi sähköä lähetetään luku / kirjoituspää, jos kääntää 638 00:29:51,710 --> 00:29:54,650 on pieni sähkömagneettinen varten sekunnin murto-osassa. 639 00:29:54,650 --> 00:29:58,970 Magneetti luo kentän, joka muutoksia napaisuus pieni, pieni 640 00:29:58,970 --> 00:30:02,850 osa metalli-hiukkaset, jotka takki jokaisen vati pinta. 641 00:30:02,850 --> 00:30:05,940 >> Kuvio sarja näitä pieniä, ladattu-alueilla levylle 642 00:30:05,940 --> 00:30:08,470 edustaa yhtä vähän tietoja binääriluku 643 00:30:08,470 --> 00:30:10,530 käyttämän tietokoneita. 644 00:30:10,530 --> 00:30:13,775 Nyt, jos nykyinen on lähetetty yksi tapa läpi luku / kirjoituspää, alue 645 00:30:13,775 --> 00:30:15,970 on polarisoitu yhteen suuntaan. 646 00:30:15,970 --> 00:30:17,950 Jos nykyinen lähetetään vastakkaiseen suuntaan, 647 00:30:17,950 --> 00:30:19,930 polarisaatio on päinvastainen. 648 00:30:19,930 --> 00:30:22,370 >> Miten saat tietoja pois kiintolevyltä? 649 00:30:22,370 --> 00:30:24,090 Vain kääntää prosessi. 650 00:30:24,090 --> 00:30:26,550 Joten se on hiukkasia levyn jotka saavat virran 651 00:30:26,550 --> 00:30:27,960 luku / kirjoituspää liikkuu. 652 00:30:27,960 --> 00:30:30,700 Kokoa miljoonia tällaisia magneettisia segmentit, ja 653 00:30:30,700 --> 00:30:32,160 sinulla tiedoston. 654 00:30:32,160 --> 00:30:36,060 >> Nyt palaset yhteen tiedostoon voi olla hajallaan ympäri aseman 655 00:30:36,060 --> 00:30:39,970 Platters, ikään kuin sotku papereita pöydällä. 656 00:30:39,970 --> 00:30:43,500 Joten erityinen extra tiedosto pitää kirjaa , missä kaikki on. 657 00:30:43,500 --> 00:30:45,985 Etkö halua sinulla oli jotain? 658 00:30:45,985 --> 00:30:46,470 >> [END VIDEOTOISTOSTA] 659 00:30:46,470 --> 00:30:47,820 >> DAVID MALAN: OK, luultavasti ei. 660 00:30:47,820 --> 00:30:52,070 Joten kuinka moni teistä kaverit Kasvoin nämä? 661 00:30:52,070 --> 00:30:53,970 OK, joten se on vähemmän ja vähemmän omistajaa joka vuosi. 662 00:30:53,970 --> 00:30:56,550 Mutta olen iloinen, että olet ainakin tuttuja niiden kanssa, koska tämä ja oman 663 00:30:56,550 --> 00:31:00,520 Varaa demo valitettavasti kuolevat hyvin hidas kuolema täällä tuntemus. 664 00:31:00,520 --> 00:31:04,010 >> Mutta tämä on mitä olen ainakin takaisin lukion, käytetään käyttö varmuuskopioita. 665 00:31:04,010 --> 00:31:08,110 Ja se oli mahtavaa, koska voisi tallentaa 1,4 megatavua 666 00:31:08,110 --> 00:31:08,930 tässä levylle. 667 00:31:08,930 --> 00:31:12,260 Ja tämä oli suuri tiheys versio, kuten on osoitettu HD, joka on 668 00:31:12,260 --> 00:31:14,240 eli ennen tämänpäiväistä HD-videoita. 669 00:31:14,240 --> 00:31:16,400 >> Standard tiheys oli 800 kilotavua. 670 00:31:16,400 --> 00:31:18,640 Ja sitä ennen oli 400 kilotavun levyjä. 671 00:31:18,640 --> 00:31:23,120 Ja sitä ennen oli 5 ja 1/4 tuuman levyt, jotka olivat todella levyke, 672 00:31:23,120 --> 00:31:25,680 ja hieman leveämpi ja korkeampi kuin nämä asiat täällä. 673 00:31:25,680 --> 00:31:29,150 Mutta voit itse nähdä niin sanotut floppy osa näistä kiekoista. 674 00:31:29,150 --> 00:31:32,630 >> Ja toiminnallisesti, he todella melko samanlainen kuin kovalevyt at 675 00:31:32,630 --> 00:31:33,570 ainakin tätä tyyppiä. 676 00:31:33,570 --> 00:31:37,270 Jälleen SSD uudemmissa tietokoneissa toimivat hieman eri tavalla. 677 00:31:37,270 --> 00:31:41,530 Mutta jos siirrät että pieni metalli-välilehti, voit itse nähdä hieman evästeen, 678 00:31:41,530 --> 00:31:42,560 tai vati. 679 00:31:42,560 --> 00:31:43,830 >> Se ei ole metallia kuin tämä yksi. 680 00:31:43,830 --> 00:31:46,000 Tämä on todella jokin halvempi muovia. 681 00:31:46,000 --> 00:31:46,750 Ja voit sellaista heiluminen sitä. 682 00:31:46,750 --> 00:31:50,310 Ja olet trully vain pyyhkiä pois joitakin bittien määrä tai magneettisia hiukkasia 683 00:31:50,310 --> 00:31:51,220 Tämän levyn. 684 00:31:51,220 --> 00:31:52,710 >> Joten onneksi ei ole mitään sitä. 685 00:31:52,710 --> 00:31:55,790 Jos tämä asia on sillä tavalla - ja kattavat silmäsi ja ne teidän naapuri - 686 00:31:55,790 --> 00:31:58,865 voit vain sellainen vetää tämän koko vaippa pois niin. 687 00:31:58,865 --> 00:32:01,900 Mutta on hieman keväällä, joten tietoinen, että silmäsi. 688 00:32:01,900 --> 00:32:03,620 Joten nyt sinulla on todella levyke. 689 00:32:03,620 --> 00:32:07,090 >> Ja mitä merkillistä tästä on se, että niin paljon kuin se on 690 00:32:07,090 --> 00:32:10,830 pienimuotoinen esitys suurempi kovalevy, nämä asiat ovat super, 691 00:32:10,830 --> 00:32:11,590 Super yksinkertainen. 692 00:32:11,590 --> 00:32:15,170 Jos hyppysellinen pohjaan se nyt, että metalli asia on pois ja kuori 693 00:32:15,170 --> 00:32:20,990 ne auki, kaikki on on kaksi kappaletta huopa ja ns levyke 694 00:32:20,990 --> 00:32:22,930 kanssa pala metallia sisäpuolella. 695 00:32:22,930 --> 00:32:25,990 >> Ja siellä menee puolet minun levyn sisällöstä. 696 00:32:25,990 --> 00:32:27,540 Siinä menee toinen puolet. 697 00:32:27,540 --> 00:32:31,375 Mutta se kaikki pyöri sisällä käyttävän tietokoneen menneen. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> Ja vielä, että tämä oikeisiin mittasuhteisiin, kuinka suuri on irti 700 00:32:38,310 --> 00:32:39,560 kovalevyt näinä päivinä? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 500 gigatavua, teratavu, ehkä pöytätietokone, 2 teratavua, 3 703 00:32:46,230 --> 00:32:47,630 teratavua, 4 teratavua, eikö? 704 00:32:47,630 --> 00:32:52,480 Tämä on yksi megatavu, antaa tai ottaa, joita ei edes sovi tyypillinen MP3 705 00:32:52,480 --> 00:32:55,310 enää näinä päivinä, tai joidenkin samankaltaisia ​​musiikkitiedoston. 706 00:32:55,310 --> 00:32:59,500 >> Joten pieni matkamuisto sinulle tänään ja myös auttaa contextualize mitä 707 00:32:59,500 --> 00:33:03,570 me voidaan ottaa itsestäänselvyytenä nyt ongelma asettaa viisi. 708 00:33:03,570 --> 00:33:04,820 Joten ne ovat sinun omiasi. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 Joten anna minun siirtyminen, jossa on viettää seuraavan PSET samoin. 711 00:33:13,370 --> 00:33:18,470 Joten olemme nyt asetettu tälle sivulle - oh, pari ilmoitukset nopeasti. 712 00:33:18,470 --> 00:33:21,730 >> Tänä perjantaina, jos haluat liittyä CS50 lounaalle, mene paikkakunta, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 Ja opinnäytetyön - 715 00:33:25,100 --> 00:33:28,520 niin per oppimäärän, olemme julkaisseet Opinnäytetyö erittely jo. 716 00:33:28,520 --> 00:33:31,410 Ymmärtäkää, että se ei tarkoita se johtuu erityisesti pian. 717 00:33:31,410 --> 00:33:33,990 Se on lähetetty, todella, vain saada te ajatellut sitä. 718 00:33:33,990 --> 00:33:37,620 Ja todellakin, erittäin merkittävä prosenttiosuus sinun tulee puuttua 719 00:33:37,620 --> 00:33:40,780 lopullinen hankkeiden aineistosta, että ei ole edes mennyt luokassa, 720 00:33:40,780 --> 00:33:42,730 mutta jo ensi viikolla. 721 00:33:42,730 --> 00:33:45,530 >> Ilmoitus kuitenkin, että spec vaatii muutama eri osien 722 00:33:45,530 --> 00:33:46,190 opinnäytetyön. 723 00:33:46,190 --> 00:33:49,590 Ensimmäinen, muutaman viikon, on alustava ehdotus, melko rento sähköpostia 724 00:33:49,590 --> 00:33:52,760 oman TF kertoa hänelle tai mitä olet miettiä projektin, jossa 725 00:33:52,760 --> 00:33:53,650 ei sitoudu. 726 00:33:53,650 --> 00:33:56,710 Ehdotus on sinun sitoutuminen, sanoi täällä, tämä on mitä 727 00:33:56,710 --> 00:33:57,770 Haluaisin tehdä projektiini. 728 00:33:57,770 --> 00:33:58,250 Mitä mieltä olet? 729 00:33:58,250 --> 00:33:58,650 Liian iso? 730 00:33:58,650 --> 00:33:59,145 Liian pieni? 731 00:33:59,145 --> 00:34:00,330 Onko se hallittavissa? 732 00:34:00,330 --> 00:34:02,230 Ja näet spec lisätietoja. 733 00:34:02,230 --> 00:34:05,060 >> Pari viikkoa sen jälkeen, että on tilaa mietintö, joka on samalla 734 00:34:05,060 --> 00:34:08,260 casual sähköpostia oman TF sanoa, kuinka kaukana olet lopulliseen 735 00:34:08,260 --> 00:34:12,360 hankkeen toteuttamiseen, jonka jälkeen CS50 Hackathon joka antaa kaikille 736 00:34:12,360 --> 00:34:17,520 on kutsuttu, joka on tapahtuman 20:00 yhtenä iltana asti 07:00 737 00:34:17,520 --> 00:34:19,150 AM seuraavana aamuna. 738 00:34:19,150 --> 00:34:22,560 Pizza, kuten olen saattanut mainita viikolla nolla, wil tarjoillaan 21:00, 739 00:34:22,560 --> 00:34:24,120 Kiinalaista ruokaa 01:00. 740 00:34:24,120 --> 00:34:27,929 Ja jos olet vielä hereillä 05:00, otamme sinut IHop aamiaiseksi. 741 00:34:27,929 --> 00:34:31,310 >> Joten hackathon on yksi enemmän elämyksiä luokassa. 742 00:34:31,310 --> 00:34:35,290 Sitten täytäntöönpano johtuu, ja sitten huipussaan CS50 Fair. 743 00:34:35,290 --> 00:34:38,070 Lisätietoja kaikista näistä vuonna lähiviikkoina. 744 00:34:38,070 --> 00:34:40,739 >> Mutta mennään takaisin jotain old school - 745 00:34:40,739 --> 00:34:41,920 uudelleen, array. 746 00:34:41,920 --> 00:34:45,040 Joten array oli mukavaa, koska se ratkaisee ongelmia, kuten näimme 747 00:34:45,040 --> 00:34:49,290 hetki sitten opiskelija-rakenteet saada vähän käsistä, jos me 748 00:34:49,290 --> 00:34:52,405 haluavat olla opiskelija yhden, opiskelija kaksi, Opiskelija kolme, opiskelija dot dot dot, 749 00:34:52,405 --> 00:34:54,400 Joissakin mielivaltainen joukko opiskelijoita. 750 00:34:54,400 --> 00:34:58,850 >> Joten paneelit, muutama viikko sitten, swooped ja ratkaista kaikki ongelmamme, ettei 751 00:34:58,850 --> 00:35:03,340 tietäen etukäteen, kuinka paljon tietyntyyppinen saatamme haluta. 752 00:35:03,340 --> 00:35:07,390 Ja olemme nähneet, että structs voi auttaa meitä edelleen järjestää meidän koodi ja pitää 753 00:35:07,390 --> 00:35:11,660 käsitteellisesti samankaltaisia ​​muuttujia, kuten nimi ja talon yhdessä, jotta voimme 754 00:35:11,660 --> 00:35:15,570 voi käsitellä niitä yhtenä kokonaisuutena sisällä joita on pienempiä paloja. 755 00:35:15,570 --> 00:35:17,810 >> Mutta paneelit on joitakin haittoja. 756 00:35:17,810 --> 00:35:19,780 Mitkä ovat joitakin haittoja olemme kohdanneet 757 00:35:19,780 --> 00:35:22,320 jossa ryhmät tähän mennessä? 758 00:35:22,320 --> 00:35:23,450 Mikä tuo on? 759 00:35:23,450 --> 00:35:28,130 Kiinteä koko - joten vaikka saatat voitava varata muistia 760 00:35:28,130 --> 00:35:32,310 array, kun tiedät kuinka monta opiskelijaa sinulla on, kuinka monta merkkiä on 761 00:35:32,310 --> 00:35:35,460 käyttäjältä, kun olet varattu array, olet sellainen maalattu 762 00:35:35,460 --> 00:35:36,740 itsesi nurkkaan. 763 00:35:36,740 --> 00:35:40,600 >> Koska et voi lisätä uusia osia keskelle array. 764 00:35:40,600 --> 00:35:43,660 Et voi lisätä enemmän elementtejä lopussa array. 765 00:35:43,660 --> 00:35:47,750 Oikeasti, sinun täytyy turvautua luoda kokonaan uusi joukko, kuten olemme keskustelleet, 766 00:35:47,750 --> 00:35:49,320 kopioimalla vanha uuteen. 767 00:35:49,320 --> 00:35:52,610 Ja vielä, että on päänsärky, joka GetString käsittelee sinulle. 768 00:35:52,610 --> 00:35:56,170 >> Mutta jälleen kerran, et voi jopa lisätä jotain keskelle array 769 00:35:56,170 --> 00:35:58,200 jos korko ei ole täysin täytetty. 770 00:35:58,200 --> 00:36:03,010 Esimerkiksi, jos tämä joukko tässä koon kuusi on vain viisi asiaa siinä, 771 00:36:03,010 --> 00:36:06,080 Voisit vain tack jotain kiinni loppuun. 772 00:36:06,080 --> 00:36:08,200 Mutta entä jos haluat lisätä jotain keskelle 773 00:36:08,200 --> 00:36:11,280 array, vaikka se voisi olla viisi kuudesta asioita se? 774 00:36:11,280 --> 00:36:14,250 >> No, mitä me teemme, kun meillä oli kaikki meidän vapaaehtoisilla ihmisillä lavalla 775 00:36:14,250 --> 00:36:15,110 viikkoa aiemmin? 776 00:36:15,110 --> 00:36:18,710 Jos halusimme laittaa joku täällä, joko nämä ihmiset miten siirtää tämän 777 00:36:18,710 --> 00:36:22,540 tavalla, tai nämä ihmiset miten siirtää tämän tavalla, ja että tuli kalliiksi. 778 00:36:22,540 --> 00:36:26,950 Siirtämällä ihmisiä sisällä array päätyi laskemalla ja kustannuslaskenta 779 00:36:26,950 --> 00:36:31,240 meille aikaa, joten paljon meidän n potenssiin käynnissä aikoina lisäyslajittelu varten 780 00:36:31,240 --> 00:36:32,550 Esimerkiksi, pahimmassa tapauksessa. 781 00:36:32,550 --> 00:36:36,520 Joten ryhmät ovat suuria, mutta sinun on tietää etukäteen, kuinka suuri haluat. 782 00:36:36,520 --> 00:36:38,030 >> Joten OK, tässä on ratkaisu. 783 00:36:38,030 --> 00:36:43,860 Jos en tiedä etukäteen, kuinka monta opiskelijat Saatan olla, ja tiedän kerran 784 00:36:43,860 --> 00:36:47,870 Päätän kuitenkin olen juuttunut, että monet opiskelijat, miksi en vain aina 785 00:36:47,870 --> 00:36:51,740 jakaa kaksi kertaa niin paljon tilaa niin voisin mielestäni tarvitse? 786 00:36:51,740 --> 00:36:54,450 Eikö tämä ole järkevä ratkaisu? 787 00:36:54,450 --> 00:36:58,240 >> Realistisesti, en usko, että olemme menossa on yli 50 paikkaa 788 00:36:58,240 --> 00:37:02,190 in array keski-kokoluokan joten haluan vain pyöristää ylöspäin. 789 00:37:02,190 --> 00:37:07,040 Teen 100 paikkaa minun array, vain jotta voimme varmasti saada 790 00:37:07,040 --> 00:37:10,330 opiskelijoiden määrä Odotan olla joissakin keskisuurten luokassa. 791 00:37:10,330 --> 00:37:14,320 Joten miksi ei vain koota ja jakaa enemmän muistia, Tyypillisesti array 792 00:37:14,320 --> 00:37:16,290 kuin uskot edes tarvitse? 793 00:37:16,290 --> 00:37:20,190 Mitä tämä yksinkertainen pushback tätä ajatusta? 794 00:37:20,190 --> 00:37:21,440 >> Olet vain tuhlaa muistia. 795 00:37:21,440 --> 00:37:25,350 Kirjaimellisesti jokainen ohjelma kirjoitat sitten on ehkä käyttää kaksi kertaa enemmän muistia kuin 796 00:37:25,350 --> 00:37:26,680 todella tarvitset. 797 00:37:26,680 --> 00:37:28,990 Ja se vain ei tunnu Erityisen tyylikäs ratkaisu. 798 00:37:28,990 --> 00:37:31,990 Lisäksi se vain laskee todennäköisyys ongelma. 799 00:37:31,990 --> 00:37:35,300 Jos sinulla sattuu olemaan suosittu kurssi yhden lukukauden ja sinulla on 101 800 00:37:35,300 --> 00:37:39,610 opiskelijoita, ohjelma on vielä pohjimmiltaan edessään sama ongelma. 801 00:37:39,610 --> 00:37:44,280 >> Joten onneksi on olemassa ratkaisu Tämän mainoksen kaikki ongelmamme muodossa 802 00:37:44,280 --> 00:37:46,790 tietorakenteita, jotka ovat monimutkaisempia kuin ne, 803 00:37:46,790 --> 00:37:47,970 olemme nähneet tähän mennessä. 804 00:37:47,970 --> 00:37:50,530 Tämä Väitän, on linkitetty lista. 805 00:37:50,530 --> 00:37:51,920 Tämä on luettelo numerot - 806 00:37:51,920 --> 00:37:54,970 9, 17, 22, 26, ja 34 - 807 00:37:54,970 --> 00:38:00,120 , jotka on yhdistetty toisiinsa tavalla mitä olen piirretään nuolet. 808 00:38:00,120 --> 00:38:03,580 >> Toisin sanoen, jos halusin edustaa array, voisin tehdä 809 00:38:03,580 --> 00:38:04,910 jotain tällaista. 810 00:38:04,910 --> 00:38:07,310 Ja laitan tämän riippukuljettimella vain hetken. 811 00:38:07,310 --> 00:38:09,970 Voisin tehdä - 812 00:38:09,970 --> 00:38:12,520 Hei, kaikki hyvin. 813 00:38:12,520 --> 00:38:14,470 Valmiustila. 814 00:38:14,470 --> 00:38:17,360 Uusi tietokone täällä, kirkas - 815 00:38:17,360 --> 00:38:18,090 Selvä. 816 00:38:18,090 --> 00:38:21,730 >> Joten jos minulla on nämä numerot 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 välttämättä mittakaavassa. 819 00:38:30,530 --> 00:38:33,730 Okei, joten tässä on minun 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 Okei, joten tässä on minun array. 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 >> [Naurua] 826 00:38:48,820 --> 00:38:49,440 >> DAVID MALAN: Pretend. 827 00:38:49,440 --> 00:38:52,330 Se on liian paljon vaivaa mennä takaisin ja korjata se, joten - 828 00:38:52,330 --> 00:38:54,290 26. 829 00:38:54,290 --> 00:38:57,650 Joten meillä on tämä joukko 9, 17, 22, 26, ja 34. 830 00:38:57,650 --> 00:39:00,260 Niille näet kiusallista virhe Olen juuri tehnyt, 831 00:39:00,260 --> 00:39:00,830 siellä se on. 832 00:39:00,830 --> 00:39:04,490 >> Olen siis väittävät, että tämä on erittäin tehokas ratkaisu. 833 00:39:04,490 --> 00:39:07,310 Olen myönnetty yhtä monta ints kuin Tarvitsen - yksi, kaksi, kolme, 834 00:39:07,310 --> 00:39:09,100 neljä, viisi tai kuusi - 835 00:39:09,100 --> 00:39:11,660 ja olen sitten tallennetaan numerot sisällä tämän taulukon. 836 00:39:11,660 --> 00:39:15,220 Mutta oletetaan, sitten haluan lisätä arvo, kuten numero 8? 837 00:39:15,220 --> 00:39:16,100 No, jos se menee? 838 00:39:16,100 --> 00:39:18,530 Oletetaan Haluan lisätä numero kuin 20. 839 00:39:18,530 --> 00:39:19,790 No, jos se menee? 840 00:39:19,790 --> 00:39:23,160 Jossain keskellä, tai numero 35 on mennä 841 00:39:23,160 --> 00:39:24,010 jossain lopussa. 842 00:39:24,010 --> 00:39:25,320 Mutta olen kaikki loppui. 843 00:39:25,320 --> 00:39:29,120 >> Ja niin tämä on keskeinen haaste Taulukoiden, että ei ole ratkaisu. 844 00:39:29,120 --> 00:39:32,280 Väitin ​​hetki sitten, getString ratkaisee tämän ongelman. 845 00:39:32,280 --> 00:39:37,380 Jos haluat lisätä kuudennella numerolla tähän array, mikä on ainakin yksi 846 00:39:37,380 --> 00:39:40,090 ratkaisu voi turvautua varmasti, aivan kuten me teemme getString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 Mikä tuo on? 849 00:39:46,030 --> 00:39:48,190 >> No, tee se isompi on helpommin sanottu kuin tehty. 850 00:39:48,190 --> 00:39:52,810 Emme voi välttämättä tehdä array isompi, mutta mitä voimme tehdä? 851 00:39:52,810 --> 00:39:56,570 Tee uusi joukko, joka on isompi, kooltaan 6, tai ehkä koko 10, jos haluamme 852 00:39:56,570 --> 00:40:00,490 päästä eteenpäin asioita, ja sitten kopioida vanha array uuteen, ja sen jälkeen 853 00:40:00,490 --> 00:40:01,680 vapauttaa vanha array. 854 00:40:01,680 --> 00:40:05,770 >> Mutta mitä käyntiaika nyt tätä prosessia? 855 00:40:05,770 --> 00:40:09,870 Se on iso O n, koska kopiointi tulee maksamaan sinulle yksikköä 856 00:40:09,870 --> 00:40:13,480 aikaa, joten ei niin hyvä, jos meillä on jakaa uuden array, joka on menossa 857 00:40:13,480 --> 00:40:15,610 kuluttaa kaksi kertaa niin paljon tilapäisesti muistiin. 858 00:40:15,610 --> 00:40:16,660 Kopioi vanha uusiksi - 859 00:40:16,660 --> 00:40:18,800 Tarkoitan, se on vain päänsärky, joka on, jälleen, miksi me kirjoitimme 860 00:40:18,800 --> 00:40:19,920 GetString sinulle. 861 00:40:19,920 --> 00:40:21,380 >> Joten mitä voisimme tehdä sen sijaan? 862 00:40:21,380 --> 00:40:25,000 No, mitä jos meidän tietorakenne todella on aukkoja se? 863 00:40:25,000 --> 00:40:30,790 Oletetaan, että olen rentoutua minun tavoite saada peräkkäisiä paloina muistia, jossa 9 864 00:40:30,790 --> 00:40:34,500 on aivan 17, joka on aivan 22, ja niin edelleen. 865 00:40:34,500 --> 00:40:39,570 >> Ja olettaa, että 9 voi olla yli täällä RAM ja 17 voi olla yli täällä RAM, 866 00:40:39,570 --> 00:40:40,990 ja 22 voi olla yli täällä RAM. 867 00:40:40,990 --> 00:40:43,610 Toisin sanoen, en tarvitse niitä edes takaisin takaisin enää. 868 00:40:43,610 --> 00:40:47,850 Minulla on vain jotenkin lanka neulan läpi jokaisen näistä numeroista tai kukin 869 00:40:47,850 --> 00:40:51,010 Näiden solmut, kuten me kutsumme suorakulmioissa Olen laatinut heitä, 870 00:40:51,010 --> 00:40:55,670 Muistan miten päästä viimeinen kuten solmun ensin. 871 00:40:55,670 --> 00:40:59,940 >> Joten mikä on ohjelma rakentaa olemme nähneet viime aikoina, joista en 872 00:40:59,940 --> 00:41:03,030 voi toteuttaa, että kierre, tai piirretään täällä, jolla voin 873 00:41:03,030 --> 00:41:05,430 panemaan ne nuolet? 874 00:41:05,430 --> 00:41:06,500 Joten viitteitä, eikö? 875 00:41:06,500 --> 00:41:09,560 Jos minä kohdentaa ole vain int, mutta solmu - ja 876 00:41:09,560 --> 00:41:10,810 solmu, en tarkoita vain astiaan. 877 00:41:10,810 --> 00:41:12,900 Ja visuaalisesti, tarkoitan suorakulmio. 878 00:41:12,900 --> 00:41:16,420 Joten solmu ilmeisesti tarvitsee sisältää kaksi arvoa - 879 00:41:16,420 --> 00:41:21,490 int itse, ja sitten, kuten ehdotetun alaosassa suorakulmion, 880 00:41:21,490 --> 00:41:23,010 tilaa int. 881 00:41:23,010 --> 00:41:26,130 >> Joten ajatellen täällä, kuinka suuri on tämä solmu, tämä 882 00:41:26,130 --> 00:41:27,170 kontti kyseessä? 883 00:41:27,170 --> 00:41:29,250 Kuinka monta tavua int? 884 00:41:29,250 --> 00:41:31,310 Oletettavasti 4, jos se on yhtä paljon kuin tavallisesti. 885 00:41:31,310 --> 00:41:33,270 Ja sitten kuinka monta tavua että osoitin? 886 00:41:33,270 --> 00:41:33,650 4. 887 00:41:33,650 --> 00:41:37,940 Joten tämä pakkaus, tai tämän solmun, on olemaan 8-tavun rakenne. 888 00:41:37,940 --> 00:41:41,760 Niin, ja se on onnellinen sattuma, että me vain esitteli tämän käsitteen 889 00:41:41,760 --> 00:41:44,400 struct, tai C-rakenne. 890 00:41:44,400 --> 00:41:48,890 >> Niin väitän, että haluan ottaa askel tätä kohti kehittyneempiä 891 00:41:48,890 --> 00:41:52,560 täytäntöönpano lukuluettelosta linkitetty lista numeroita, minun täytyy tehdä 892 00:41:52,560 --> 00:41:56,920 hieman ajattelua edessä ja julistaa ei vain int, mutta struct 893 00:41:56,920 --> 00:41:58,620 että soitan, tavanomaisesti täällä, solmu. 894 00:41:58,620 --> 00:42:01,630 Voisimme kutsua sitä mitä haluamme, mutta solmu tulee olemaan temaattinen paljon 895 00:42:01,630 --> 00:42:03,560 asioita, alamme nyt. 896 00:42:03,560 --> 00:42:06,480 >> Sisällä että solmu on int n. 897 00:42:06,480 --> 00:42:09,350 Ja sitten tämä syntaksin, hieman outo ensi silmäyksellä - 898 00:42:09,350 --> 00:42:12,960 struct solmu * seuraavaksi. 899 00:42:12,960 --> 00:42:16,900 No kuvallisesti, mikä se on? 900 00:42:16,900 --> 00:42:21,000 Tämä on alaosa suorakulmion näimme 901 00:42:21,000 --> 00:42:22,730 vain hetki sitten. 902 00:42:22,730 --> 00:42:27,600 >> Mutta miksi minä puhun struct solmu * toisin kuin vain solmuun *? 903 00:42:27,600 --> 00:42:31,370 Koska jos näin osoitin osoittaa toisessa solmussa, se on vain 904 00:42:31,370 --> 00:42:32,760 osoite, solmun. 905 00:42:32,760 --> 00:42:35,630 Se vastaa sitä, mitä olemme keskustelivat viitteitä toistaiseksi. 906 00:42:35,630 --> 00:42:39,690 Mutta miksi, jos väitän, tämä rakenne on nimeltään solmu, minun on sanottava struct 907 00:42:39,690 --> 00:42:42,660 solmun täällä sisällä? 908 00:42:42,660 --> 00:42:43,190 >> Täsmälleen. 909 00:42:43,190 --> 00:42:46,490 Se on tavallaan typerä todellisuus C. Typedef, niin sanotusti, ei ole 910 00:42:46,490 --> 00:42:47,220 vielä tapahtunut. 911 00:42:47,220 --> 00:42:48,510 C on super kirjaimellisesti. 912 00:42:48,510 --> 00:42:51,050 Se lukee koodin ylhäältä alas, vasemmalta oikealle. 913 00:42:51,050 --> 00:42:54,930 Ja kunnes se osuu, että puolipiste on bottom line, arvaa mitä ei 914 00:42:54,930 --> 00:42:57,590 olemassa tietotyyppi? 915 00:42:57,590 --> 00:42:59,060 Solmu, lainaus lainaus solmu. 916 00:42:59,060 --> 00:43:03,050 >> Mutta koska Pidempi ilmoitus tein ensimmäisellä rivillä - 917 00:43:03,050 --> 00:43:05,340 struct solmu - 918 00:43:05,340 --> 00:43:08,790 koska se oli ensin, ennen aaltosulkeita, että on tavallaan kuin 919 00:43:08,790 --> 00:43:11,800 pre-kouluttamalla kalahtaa, että olet Tiedätkö mitä, anna minulle struct 920 00:43:11,800 --> 00:43:13,570 nimeltään struct solmu. 921 00:43:13,570 --> 00:43:16,270 Suoraan sanottuna, en pidä soittaa asioita struct solmu, struct solmu kaikki 922 00:43:16,270 --> 00:43:17,090 koko minun koodi. 923 00:43:17,090 --> 00:43:20,660 Mutta minä käyttää sitä vain kerran, vain sisällä, niin että voin tehokkaasti 924 00:43:20,660 --> 00:43:25,010 luoda eräänlainen kehäviittauksen, ei osoitin itselleni sinänsä, mutta 925 00:43:25,010 --> 00:43:29,400 osoitin toiseen sama tyyppi. 926 00:43:29,400 --> 00:43:32,330 >> Niin on käynyt ilmi, että tietorakenne näin, siellä on muutama 927 00:43:32,330 --> 00:43:34,470 toiminnot, jotka voivat olla kiinnostaa meitä. 928 00:43:34,470 --> 00:43:37,460 Meidän kannattaa lisätä osaksi listan näin. 929 00:43:37,460 --> 00:43:39,850 Meidän kannattaa poistaa luettelosta näin. 930 00:43:39,850 --> 00:43:43,490 Meidän kannattaa etsiä luettelosta arvo, tai yleisemmin kulkea. 931 00:43:43,490 --> 00:43:46,410 Ja Traverse on vain hieno tapa sanomalla alkavat vasemmalle ja siirtää kaikki 932 00:43:46,410 --> 00:43:47,650 aivan oikealle. 933 00:43:47,650 --> 00:43:52,640 >> Ja ilmoitusta, vaikka tätä hieman hienostunut tietorakenne, anna 934 00:43:52,640 --> 00:43:56,510 minulle ehdottaa, että voimme lainata joitakin ajatuksia viimeisen kahden viikon aikana ja 935 00:43:56,510 --> 00:43:58,410 toteuttaa toiminto nimeltään etsiä näin. 936 00:43:58,410 --> 00:44:01,360 Se tulee palauttaa true tai väärä, osoittaa kyllä ​​tai 937 00:44:01,360 --> 00:44:03,390 no, n on luettelossa. 938 00:44:03,390 --> 00:44:05,960 Sen toinen argumentti on osoitin luetteloon itse, niin 939 00:44:05,960 --> 00:44:07,920 osoitin solmuun. 940 00:44:07,920 --> 00:44:10,350 >> Kaikki aion niin tehdä, on ilmoittaa väliaikainen muuttuja. 941 00:44:10,350 --> 00:44:12,730 Me kutsumme sitä PTR Sopimuksen mukaan osoitintoimintoihin. 942 00:44:12,730 --> 00:44:15,220 Ja voin liittää se sama listan alussa. 943 00:44:15,220 --> 00:44:16,680 >> Ja nyt huomaa kun silmukka. 944 00:44:16,680 --> 00:44:20,640 Niin kauan kuin osoitin ei ole yhtä suuri null, aion tarkistaa. 945 00:44:20,640 --> 00:44:24,520 Onko osoitin nuoli n yhtä n, joka hyväksyttiin vuonna? 946 00:44:24,520 --> 00:44:26,410 Ja odota hetki - uusi pala syntaksin. 947 00:44:26,410 --> 00:44:29,324 Mikä on nuoli yhtäkkiä? 948 00:44:29,324 --> 00:44:30,574 Niin? 949 00:44:30,574 --> 00:44:34,200 950 00:44:34,200 --> 00:44:34,810 >> Täsmälleen. 951 00:44:34,810 --> 00:44:38,860 Joten taas muutama minuutti sitten, käytimme dot merkintätapa käyttää jotain 952 00:44:38,860 --> 00:44:43,080 sisällä struct, jos muuttuja et ole struct 953 00:44:43,080 --> 00:44:47,420 itse, mutta osoitin struct, Onneksi pala syntaksin 954 00:44:47,420 --> 00:44:48,620 lopulta tekee vaistomaisesti järkevältä. 955 00:44:48,620 --> 00:44:52,360 Nuoli tarkoittaa seurata osoitin, kuten meidän nuolet tyypillisesti tarkoittaa 956 00:44:52,360 --> 00:44:56,570 kuvallisesti, ja mennä tiedot alan sisällä. 957 00:44:56,570 --> 00:44:59,700 Joten nuoli on sama asia kuin piste, mutta voit käyttää sitä, kun olet osoittimen. 958 00:44:59,700 --> 00:45:05,270 >> Joten vain kertaus sitten, jos n alalla sisällä struct kutsutaan osoitin 959 00:45:05,270 --> 00:45:07,760 vastaa yhtä n, return true. 960 00:45:07,760 --> 00:45:11,970 Muuten, tämä linja täällä - osoitin vastaa osoittimen vieressä. 961 00:45:11,970 --> 00:45:17,540 Joten mitä tämä tekee, ilmoitusta, on, jos olen Olen tällä hetkellä suunnattu struct 962 00:45:17,540 --> 00:45:21,430 , joka sisältää 9, ja 9 ei ole numero Etsin - kai Etsin 963 00:45:21,430 --> 00:45:22,830 for n = 50 - 964 00:45:22,830 --> 00:45:25,930 Aion päivittää väliaikainen osoitin ja osoita tässä solmu 965 00:45:25,930 --> 00:45:31,190 enää, mutta osoitin nuolta, joka aikoo laittaa minut tänne. 966 00:45:31,190 --> 00:45:34,270 >> Nyt tajusin on tornado käyttöönottoa. 967 00:45:34,270 --> 00:45:37,380 Keskiviikkona me itse tehdä tämän joidenkin ihmisten ja joidenkin enemmän 968 00:45:37,380 --> 00:45:38,900 koodi hitaammin. 969 00:45:38,900 --> 00:45:42,990 Mutta ymmärtää, olemme nyt tekemässä tietomme rakenteet monimutkaisempi niin, että 970 00:45:42,990 --> 00:45:45,780 algoritmeja voidaan saada tehokkaampia, joka tulee olemaan edellytys 971 00:45:45,780 --> 00:45:50,500 PSET kuusi, kun lataudu, taas ne, 150000 sanaa, mutta täytyy tehdä niin 972 00:45:50,500 --> 00:45:55,650 tehokkaasti, ja mieluiten luoda ohjelma, joka toimii meidän käyttäjät eivät 973 00:45:55,650 --> 00:46:00,460 lineaarinen, ei N potenssiin, mutta jatkuva aikaan, ihanteellinen. 974 00:46:00,460 --> 00:46:02,300 >> Nähdään keskiviikkona. 975 00:46:02,300 --> 00:46:07,240 >> SPEAKER: Seuraavassa CS50, David unohtaa hänen base tapauksessa. 976 00:46:07,240 --> 00:46:12,770 >> DAVID MALAN: Ja se miten lähettää tekstiviestejä C. Mikä - 977 00:46:12,770 --> 00:46:14,020 >> [ERI TEKSTIVIESTI Ilmoituksen ääniä] 978 00:46:14,020 --> 00:46:19,734