1 00:00:00,000 --> 00:00:03,381 >> [Musiikkia] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [VIDEOTOISTOSTA] 4 00:00:11,610 --> 00:00:13,640 >> -Hän Valehtelee. 5 00:00:13,640 --> 00:00:14,380 >> -Noin Mitä? 6 00:00:14,380 --> 00:00:17,182 >> -Minä en tiedä. 7 00:00:17,182 --> 00:00:19,990 >> -No Mitä tiedämme? 8 00:00:19,990 --> 00:00:23,145 >> -Se Klo 9.15, Ray Santoya oli ATM. 9 00:00:23,145 --> 00:00:23,644 -Joo. 10 00:00:23,644 --> 00:00:27,030 Joten kysymys on, mitä hän oli tekemässä 09:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting 9 millimetrin jotain. 12 00:00:29,720 --> 00:00:31,540 Ehkä hän näki ampuja. 13 00:00:31,540 --> 00:00:33,412 >> -tai Oli työskennellä hänen kanssaan. 14 00:00:33,412 --> 00:00:34,340 >> -Wait. 15 00:00:34,340 --> 00:00:36,200 Mene takaisin yksi. 16 00:00:36,200 --> 00:00:36,975 >> -Mitä näet? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Bring Hänen kasvonsa ylöspäin koko näytön. 19 00:00:47,805 --> 00:00:48,680 >> -His Lasit. 20 00:00:48,680 --> 00:00:50,060 >> -On On heijastus. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Se Nuevitas baseball-joukkue. 23 00:01:02,280 --> 00:01:03,110 Se on heidän logo. 24 00:01:03,110 --> 00:01:05,820 >> -Ja Hän puhuu kuka on päällään että takki. 25 00:01:05,820 --> 00:01:06,670 >> [Lopeta toisto] 26 00:01:06,670 --> 00:01:07,628 >> DAVID MALAN: Selvä. 27 00:01:07,628 --> 00:01:11,210 Tämä on CS50 ja tämä on hieman of [äänetön], jolla olet 28 00:01:11,210 --> 00:01:12,890 puuhastellessa ongelma asetettu neljä. 29 00:01:12,890 --> 00:01:16,606 Tänään alamme näyttää hieman enemmän syvästi näitä asioita kutsutaan osoittimia, 30 00:01:16,606 --> 00:01:18,480 joka vaikka se on melko arcane aihe, 31 00:01:18,480 --> 00:01:20,813 käy ilmi, että se on menossa olla keinoja, joilla me 32 00:01:20,813 --> 00:01:24,320 voi alkaa rakentaa ja kokoonpano paljon kehittyneempiä ohjelmia. 33 00:01:24,320 --> 00:01:28,150 Mutta teimme sen viime keskiviikkona Poiketen joidenkin claymation ensin. 34 00:01:28,150 --> 00:01:30,190 Joten tämä, muistaa, on Binky ja käytimme häntä 35 00:01:30,190 --> 00:01:33,148 jotta katsomaan ohjelmaa, joka ei oikeastaan ​​tee mitään mielenkiintoista, 36 00:01:33,148 --> 00:01:34,950 mutta se teki paljastaa muutamia ongelmia. 37 00:01:34,950 --> 00:01:38,570 Joten alkaa tänään, miksi emme kävele nopeasti läpi muutamia näistä vaiheista, 38 00:01:38,570 --> 00:01:41,920 yritä tislata ihmisen ehdoilla mitä täällä on tekeillä 39 00:01:41,920 --> 00:01:45,410 ja miksi tämä on huono, ja sitten siirtyä ja todella alkaa rakentaa jotain 40 00:01:45,410 --> 00:01:46,309 tätä tekniikkaa? 41 00:01:46,309 --> 00:01:48,350 Niinpä nämä olivat ensimmäiset kaksi riviä tässä ohjelmassa 42 00:01:48,350 --> 00:01:51,340 ja maallikon termein, mitä nämä kaksi riviä tehdä? 43 00:01:51,340 --> 00:01:55,600 Joku, joka on kohtuullisen mukava mitä on ilmoitettu ruudulla? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Mitä nämä kaksi riviä tehdä? 46 00:02:00,120 --> 00:02:02,070 Se ei ole kaikki, että eroaa viikko yksi, 47 00:02:02,070 --> 00:02:03,611 mutta on joitakin uusia erityinen symboli. 48 00:02:03,611 --> 00:02:04,152 Joo? 49 00:02:04,152 --> 00:02:05,628 Takaisin sinne. 50 00:02:05,628 --> 00:02:07,092 >> Yleisö: ilmoittaminen viitteitä? 51 00:02:07,092 --> 00:02:08,050 DAVID MALAN: Sano uudestaan? 52 00:02:08,050 --> 00:02:08,860 Yleisö: ilmoittaminen viitteitä? 53 00:02:08,860 --> 00:02:11,776 DAVID MALAN: ilmoittaminen osoittimet ja katsotaanpa tarkentaa sitä vähän enemmän. 54 00:02:11,776 --> 00:02:14,050 Yleisö: [äänetön] osoite X ja sitten y. 55 00:02:14,050 --> 00:02:15,300 DAVID MALAN: Ja sitten käsitellä. 56 00:02:15,300 --> 00:02:18,550 Joten erityisesti mitä teemme on me julistaa kaksi muuttujaa. 57 00:02:18,550 --> 00:02:21,252 Nämä muuttujat kuitenkin menossa on tyyppiä int tähti, joka 58 00:02:21,252 --> 00:02:23,210 tarkemmin sanottuna tarkoitetaan he aikovat säilyttää 59 00:02:23,210 --> 00:02:26,450 osoite int, vastaavasti, x ja y. 60 00:02:26,450 --> 00:02:27,660 Nyt on olemassa mitään arvoja? 61 00:02:27,660 --> 00:02:32,621 Onko todellinen osoitteet näissä kaksi muuttujaa tässä vaiheessa? 62 00:02:32,621 --> 00:02:33,120 Ei. 63 00:02:33,120 --> 00:02:35,030 Se on vain niin sanottu roskat arvot. 64 00:02:35,030 --> 00:02:38,120 Jos et itse määrittää muuttuja, mikä oli RAM 65 00:02:38,120 --> 00:02:42,224 aiemmin aikoo täyttää nollilla ja ne molemmat näistä muuttujista. 66 00:02:42,224 --> 00:02:44,140 Mutta emme vielä tiedä mitä ne ovat ja se on 67 00:02:44,140 --> 00:02:47,060 olemaan avain miksi Binky menetti päänsä viime viikolla. 68 00:02:47,060 --> 00:02:49,980 >> Joten tämä oli claymation inkarnaatio tämän 69 00:02:49,980 --> 00:02:53,580 jolloin sinulla on vain kaksi muuttujaa, pieni pyöreä kappaletta savi, 70 00:02:53,580 --> 00:02:57,330 joka voi tallentaa muuttujia, mutta kääritty ylös nuolet osoittavat, 71 00:02:57,330 --> 00:03:00,640 he eivät oikeastaan ​​osoittaa minne tahansa sinänsä tunnettuja. 72 00:03:00,640 --> 00:03:03,670 Joten sitten meillä oli tätä linjaa, ja tämä oli uutta viime viikolla, malloc muistin 73 00:03:03,670 --> 00:03:07,130 jako, joka on vain hieno tapa kertoa käyttöjärjestelmä, Linux 74 00:03:07,130 --> 00:03:09,750 tai Mac OS tai Windows, hei, antaa minulle muistia, 75 00:03:09,750 --> 00:03:11,780 ja kaikki sinun täytyy kertoa käyttöjärjestelmä 76 00:03:11,780 --> 00:03:14,699 on mitä kun he pyytävät sitä muistia. 77 00:03:14,699 --> 00:03:16,990 Se ei tule välitä mitä aiot tehdä sen kanssa, 78 00:03:16,990 --> 00:03:19,786 mutta sinun täytyy kertoa toiminta järjestelmä mitä Poiketen malloc. 79 00:03:19,786 --> 00:03:20,286 Joo? 80 00:03:20,286 --> 00:03:21,078 >> Yleisö: Kuinka paljon? 81 00:03:21,078 --> 00:03:21,994 DAVID MALAN: Kuinka paljon? 82 00:03:21,994 --> 00:03:25,280 Kuinka paljon tavuina, ja niin, tämä, jälleen, keinotekoinen esimerkki, on vain sanoa, 83 00:03:25,280 --> 00:03:27,360 antaa minulle koko int. 84 00:03:27,360 --> 00:03:30,550 Nyt koko int on neljä tavua tai 32 bittiä. 85 00:03:30,550 --> 00:03:32,850 Joten tämä on vain tapa sanomalla, hei, käyttöjärjestelmä, 86 00:03:32,850 --> 00:03:37,290 anna minulle neljä tavua muistia että voin käyttää käytettävissäni, 87 00:03:37,290 --> 00:03:40,560 ja erityisesti, mitä malloc paluu osalta 88 00:03:40,560 --> 00:03:41,795 kuin kimpale neljän tavun? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 Yleisö: Osoite? 91 00:03:44,860 --> 00:03:45,901 DAVID MALAN: osoite. 92 00:03:45,901 --> 00:03:47,580 Osoitteen että murikka neljä tavua. 93 00:03:47,580 --> 00:03:48,190 Aivan. 94 00:03:48,190 --> 00:03:51,430 Ja niin se mitä on tallennettu lopulta x ja siksi emme oikeastaan 95 00:03:51,430 --> 00:03:55,240 välitä mitä määrää, että osoite on, onko se OX1 tai OX2 96 00:03:55,240 --> 00:03:57,110 tai jotkut arvoituksellinen heksadesimaaliosoitteen. 97 00:03:57,110 --> 00:03:59,850 Me vain välitä kuvallisesti että muuttuja x on nyt 98 00:03:59,850 --> 00:04:01,630 osoittaen että murikka muistia. 99 00:04:01,630 --> 00:04:05,570 Niin, että nuoli edustaa osoitin, tai tarkemmin sanottuna, muistin osoite. 100 00:04:05,570 --> 00:04:09,120 Mutta jälleen kerran, emme yleensä välitä mitä nämä todelliset osoitteet ovat. 101 00:04:09,120 --> 00:04:11,780 Nyt tämä linja sanoo mitä maallikon termein? 102 00:04:11,780 --> 00:04:14,330 Star X saa 42 puolipiste. 103 00:04:14,330 --> 00:04:17,390 Mitä tämä tarkoittaa? 104 00:04:17,390 --> 00:04:18,200 Haluatko mennä? 105 00:04:18,200 --> 00:04:20,102 Älä naarmuta niskaasi. 106 00:04:20,102 --> 00:04:22,360 >> Yleisö: osoite x on 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID MALAN: Osoite x on 42. 108 00:04:24,300 --> 00:04:25,190 Ei aivan. 109 00:04:25,190 --> 00:04:28,485 Niin lähellä, mutta ei aivan, koska siellä tähti, joka on prefixing tämä x. 110 00:04:28,485 --> 00:04:29,860 Joten meidän täytyy nipistää hieman. 111 00:04:29,860 --> 00:04:31,032 Joo? 112 00:04:31,032 --> 00:04:36,044 >> Yleisö: arvo osoitin x osoittaa on 42. 113 00:04:36,044 --> 00:04:36,710 DAVID MALAN: OK. 114 00:04:36,710 --> 00:04:40,840 Arvo että osoitin x on osoittaa, sanotaan, on 42, 115 00:04:40,840 --> 00:04:44,165 tai toisin sanoin, tähti X sanoo, löytää minkä osoite 116 00:04:44,165 --> 00:04:48,340 on x, onko se 1 Oxford Katu tai 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 tai OX1 tai ox33 riippumatta että numeerinen osoite on, 118 00:04:51,850 --> 00:04:54,380 tähti x on dereferencing x. 119 00:04:54,380 --> 00:04:57,297 Niin mene, että osoite ja sitten laittaa numero 42 siellä. 120 00:04:57,297 --> 00:04:59,380 Jotta olisi vastaava tapa sanoa, että. 121 00:04:59,380 --> 00:05:01,860 Niin, että kaikki hieno ja sitten me edustaisi kuva 122 00:05:01,860 --> 00:05:05,370 seuraavasti jossa olemme lisänneet 42 että kimpale neljä 123 00:05:05,370 --> 00:05:09,370 tavua oikealla puolella, mutta tämä linja oli, mikä meni pieleen 124 00:05:09,370 --> 00:05:11,120 ja Binky pää piipahti pois tässä vaiheessa, 125 00:05:11,120 --> 00:05:15,290 koska pahoja asioita tapahtuu, kun te dereference roskat arvot 126 00:05:15,290 --> 00:05:18,210 tai voit dereference kelpaa osoittimia, ja sanon kelpaa 127 00:05:18,210 --> 00:05:21,020 koska tässä vaiheessa tarina, mitä on sisällä y? 128 00:05:21,020 --> 00:05:24,440 Mikä arvo y perustuu on viime vaiheet? 129 00:05:24,440 --> 00:05:25,360 Joo? 130 00:05:25,360 --> 00:05:26,115 Mikä tuo on? 131 00:05:26,115 --> 00:05:26,990 >> Yleisö: osoite. 132 00:05:26,990 --> 00:05:28,460 DAVID MALAN: osoite. 133 00:05:28,460 --> 00:05:31,910 Sen pitäisi olla osoite mutta olen alustettu se? 134 00:05:31,910 --> 00:05:32,800 Joten en ole vielä. 135 00:05:32,800 --> 00:05:35,430 Joten mitä tiedetään olevan siellä? 136 00:05:35,430 --> 00:05:37,590 Se on vain noin roskat arvo. 137 00:05:37,590 --> 00:05:41,500 Se voi olla mikä tahansa osoite nollasta 2000000000 jos sinulla on kaksi keikkaa muistia, 138 00:05:41,500 --> 00:05:44,289 tai nolla 4000000000 jos olet sai neljä gigatavua RAM-muistia. 139 00:05:44,289 --> 00:05:46,080 On joitakin roskat arvo, mutta ongelma on 140 00:05:46,080 --> 00:05:48,200 että käyttöjärjestelmä, jos se ei ole antanut sinulle 141 00:05:48,200 --> 00:05:51,140 että kimpale muisti erityisesti että yrität mennä, 142 00:05:51,140 --> 00:05:54,650 se yleensä tulee aiheuttamaan mitä olemme nähneet niin segmentointi vika. 143 00:05:54,650 --> 00:05:57,810 Joten itse asiassa, joku teistä, jotka ovat kamppailivat ongelmia virka 144 00:05:57,810 --> 00:06:00,393 tai ongelmia, jotka on enemmän yleensä yrittää selvittää 145 00:06:00,393 --> 00:06:02,150 segmentointi vika, että yleensä tarkoittaa 146 00:06:02,150 --> 00:06:05,017 olet koskettaa segmentin muisti että sinun ei pitäisi olla. 147 00:06:05,017 --> 00:06:07,350 Olet koskettaa muisti että käyttöjärjestelmä ei ole 148 00:06:07,350 --> 00:06:10,450 salli teidän koskettaa, onko se menemällä liian pitkälle matriisisi 149 00:06:10,450 --> 00:06:12,870 tai alkaa nyt, onko se johtuu olet koskettaa 150 00:06:12,870 --> 00:06:14,780 muisti että vain on jonkin verran roskaa arvo. 151 00:06:14,780 --> 00:06:18,230 >> Näin tähti X täällä on tavallaan määrittelemätön käyttäytymistä. 152 00:06:18,230 --> 00:06:22,030 Sinun ei pitäisi koskaan tehdä sitä, koska kertoimet ovat, ohjelman juuri menossa kaatua, 153 00:06:22,030 --> 00:06:24,050 koska sanot, mennä tähän osoitteeseen 154 00:06:24,050 --> 00:06:27,000 ja sinulla ei ole aavistustakaan, missä että osoite todella on. 155 00:06:27,000 --> 00:06:30,300 Joten käyttöjärjestelmä on todennäköisesti menossa kaataa ohjelman 156 00:06:30,300 --> 00:06:33,840 seurauksena ja todellakin, se on mitä tapahtui siellä Binky. 157 00:06:33,840 --> 00:06:37,210 Joten lopulta, Binky kiinteä tämä ongelma tässä. 158 00:06:37,210 --> 00:06:38,909 Niin että ohjelma itsessään oli virheellinen. 159 00:06:38,909 --> 00:06:41,450 Mutta jos sellainen eteenpäin ja suorittaa tämän linjan sijaan, 160 00:06:41,450 --> 00:06:45,580 y on yhtä kuin X tarkoittaa vain sitä, mitä osoite on X, myös laittaa se y. 161 00:06:45,580 --> 00:06:48,740 >> Ja niin kuvallisesti, olemme edusti tätä kaksi nuolta 162 00:06:48,740 --> 00:06:51,570 X ja y osoittaa samaan paikkaan. 163 00:06:51,570 --> 00:06:55,760 Niin semanttisesti, x on yhtä suuri y, koska molemmat näistä 164 00:06:55,760 --> 00:07:00,300 varastoivat sama osoite, ergo osoittaen 42, 165 00:07:00,300 --> 00:07:04,910 ja nyt, kun sanot tähti y, siirry osoitteeseen y, 166 00:07:04,910 --> 00:07:06,790 tämä on mielenkiintoinen sivuvaikutus. 167 00:07:06,790 --> 00:07:10,320 Joten osoite y on sama asia kuin osoite x. 168 00:07:10,320 --> 00:07:15,060 Joten jos sanot mennä osoitteeseen y ja vaihda arvoksi 13, 169 00:07:15,060 --> 00:07:17,140 kuka muu vaikuttaa? 170 00:07:17,140 --> 00:07:21,100 X, D kohta, niin sanoakseni, tulisi vaikuttaa samoin. 171 00:07:21,100 --> 00:07:24,340 >> Ja todellakin, miten Nick piirsi tämä kuva vuonna claymation oli juuri sitä. 172 00:07:24,340 --> 00:07:28,665 Vaikka me seuraamme osoitin y, päädyimme samaan paikkaan, 173 00:07:28,665 --> 00:07:32,780 joten jos me tulostaa ulos X tai Y: n pointee, 174 00:07:32,780 --> 00:07:35,720 niin näkisimme arvoa 13. 175 00:07:35,720 --> 00:07:37,927 Nyt, minä sanon pointee olla sopusoinnussa videon. 176 00:07:37,927 --> 00:07:39,760 Ohjelmoijat, minun tieto, koskaan itse 177 00:07:39,760 --> 00:07:42,460 sano sana pointee, se, mikä on terävä 178 00:07:42,460 --> 00:07:44,650 at, mutta johdonmukaisuuden videon kanssa, ymmärtää 179 00:07:44,650 --> 00:07:47,520 siinä kaikki, että oli tarkoitti tässä tilanteessa. 180 00:07:47,520 --> 00:07:54,190 Joten kaikki kysymykset claymation tai viitteitä tai malloc aivan vielä? 181 00:07:54,190 --> 00:07:54,850 Ei? 182 00:07:54,850 --> 00:07:55,470 Selvä. 183 00:07:55,470 --> 00:07:58,560 >> Joten ilman puheitta katsomaan 184 00:07:58,560 --> 00:08:00,700 klo jossa tämä on todella käytetty jonkin aikaa. 185 00:08:00,700 --> 00:08:03,580 Joten meillä on ollut tämä CS50 kirjasto että sai kaikki nämä toiminnot. 186 00:08:03,580 --> 00:08:06,810 Olemme käyttäneet GetInt paljon, GetString, luultavasti GetLongLong aikaisemmin 187 00:08:06,810 --> 00:08:09,840 minun PSET yksi tai niin, mutta mitä todella tapahtuu? 188 00:08:09,840 --> 00:08:12,920 No, ottaa vilkaista alla huppu on ohjelma, joka 189 00:08:12,920 --> 00:08:17,017 inspiroi miksi annamme sinulle CS50 kirjasto, ja todellakin kuin viime viikolla, 190 00:08:17,017 --> 00:08:18,850 aloimme tehdä niitä apupyörät pois. 191 00:08:18,850 --> 00:08:21,080 Joten tämä on nyt lajitellaan of jälkipuinti mitä 192 00:08:21,080 --> 00:08:23,690 on ollut käynnissä sisällä CS50 kirjasto, 193 00:08:23,690 --> 00:08:27,250 vaikka me nyt alkaa liikkua pois useimmissa ohjelmissa. 194 00:08:27,250 --> 00:08:29,460 >> Joten tämä on ohjelma nimeltä scanf 0. 195 00:08:29,460 --> 00:08:30,510 Se on erittäin lyhyt. 196 00:08:30,510 --> 00:08:33,909 Se vain on näitä rivejä, mutta se otetaan käyttöön toiminto nimeltään scanf 197 00:08:33,909 --> 00:08:36,909 että olemme todella menossa nähdä hetki sisällä CS50 kirjasto, 198 00:08:36,909 --> 00:08:38,600 vaikkakin hieman eri muodossa. 199 00:08:38,600 --> 00:08:41,330 Niin tämä ohjelma rivillä 16 julistaa muuttujan x. 200 00:08:41,330 --> 00:08:43,150 Joten antaa minulle neljä tavua int. 201 00:08:43,150 --> 00:08:45,750 Se kertoneet käyttäjä, numero ota, ja sitten 202 00:08:45,750 --> 00:08:49,010 tämä on mielenkiintoinen linja, joka todella sitoo yhteen viime viikolla 203 00:08:49,010 --> 00:08:49,790 ja tämä. 204 00:08:49,790 --> 00:08:53,230 Scanf, ja sitten huomaa se vie muotoilumerkkijonoa, kuten printf, 205 00:08:53,230 --> 00:08:57,480 % I tarkoittaa int, ja sitten se kestää Toinen väite, joka näyttää hieman 206 00:08:57,480 --> 00:08:58,260 funky. 207 00:08:58,260 --> 00:09:01,880 Se et-merkki X, ja muistuttaa, me vain näki tämän kerran viime viikolla. 208 00:09:01,880 --> 00:09:03,465 Mitä et-merkki X edustaa? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Mitä et-merkki tehdä C? 211 00:09:08,450 --> 00:09:08,950 Joo? 212 00:09:08,950 --> 00:09:10,024 >> Yleisö: osoite. 213 00:09:10,024 --> 00:09:11,190 DAVID MALAN: osoite. 214 00:09:11,190 --> 00:09:13,190 Joten se päinvastainen Star operaattori, 215 00:09:13,190 --> 00:09:17,270 katsoo tähti operaattori sanoo, siirry tämä osoite, et-merkki operaattori 216 00:09:17,270 --> 00:09:20,280 sanoo, selvittää osoite tämän muuttujan, 217 00:09:20,280 --> 00:09:23,530 ja niin tämä on avain, koska scanf tarkoitus elämässä 218 00:09:23,530 --> 00:09:26,320 on skannata käyttäjän panosta näppäimistö, 219 00:09:26,320 --> 00:09:29,970 riippuen mitä hän tyypit, ja sitten lukea, että käyttäjän syöte 220 00:09:29,970 --> 00:09:32,970 muuttujaan, mutta me näki viimeisen kahden viikon 221 00:09:32,970 --> 00:09:36,080 että swap toiminto että me yritti vaivattomasti toteuttaa 222 00:09:36,080 --> 00:09:37,110 oli juuri rikki. 223 00:09:37,110 --> 00:09:42,470 Muista, että swap-toiminto, jos me vain ilmoitettu ja B ints, 224 00:09:42,470 --> 00:09:47,040 teimme onnistuneesti vaihtaa kaksi muuttujaa sisällä swap 225 00:09:47,040 --> 00:09:50,080 Aivan kuten maito ja EYVL, mutta heti kun swap palasi, 226 00:09:50,080 --> 00:09:55,200 mikä oli seurausta suhteen x ja y, alkuperäiset arvot? 227 00:09:55,200 --> 00:09:55,700 Mitään. 228 00:09:55,700 --> 00:09:56,200 Joo. 229 00:09:56,200 --> 00:09:59,754 Mitään ei tapahtunut, että aika, koska swap muuttaa vain sen paikallisia kopioita, 230 00:09:59,754 --> 00:10:01,670 toisin sanoen, kaikki tällä kertaa, kun olemme 231 00:10:01,670 --> 00:10:04,010 on ohimennen perustelut toimintojen, olemme 232 00:10:04,010 --> 00:10:05,939 vain ohimennen kopioita nämä väitteet. 233 00:10:05,939 --> 00:10:07,980 Voit tehdä, että mitä haluat heidän kanssaan, 234 00:10:07,980 --> 00:10:10,890 mutta he aikovat ei ole Vaikutus alkuperäiset arvot. 235 00:10:10,890 --> 00:10:13,650 Joten tämä on ongelmallista, jos haluavat toimivat kuin scanf 236 00:10:13,650 --> 00:10:17,170 elämässä, jonka tarkoituksena on kartoittaa käyttäjän näppäinsyötteisin 237 00:10:17,170 --> 00:10:22,010 ja sitten täytä tyhjät, niin puhua, että on, anna muuttuja kuin X 238 00:10:22,010 --> 00:10:25,410 arvoa, koska jos olisin vain siirtää x scanf, 239 00:10:25,410 --> 00:10:28,790 jos pidätte logiikkaa viime viikko, scanf voi tehdä mitä haluaa 240 00:10:28,790 --> 00:10:33,100 jäljennös x, mutta se ei voinut pysyvästi muuttaa x ellei annamme 241 00:10:33,100 --> 00:10:37,120 scanf aarrekartan, niin sanoakseni, jossa x merkitsee paikan, jossa 242 00:10:37,120 --> 00:10:41,860 ohitamme osoitekenttään x siten, että scanf voi mennä sinne ja todella muuttaa 243 00:10:41,860 --> 00:10:42,920 x: n arvo. 244 00:10:42,920 --> 00:10:45,080 Ja niin todellakin, kaikki että tämä ohjelma tekee 245 00:10:45,080 --> 00:10:53,180 jos teen scanf 0, minun lähde 5m hakemiston, tehdä scanf 0, 246 00:10:53,180 --> 00:10:57,730 piste slash scanf, numero ota 50, kiitos 50. 247 00:10:57,730 --> 00:11:01,020 >> Joten se ei ole kaikki, että mielenkiintoinen, mutta mitä todella tapahtuu 248 00:11:01,020 --> 00:11:04,820 on, että heti kun kutsun scanf täällä, x arvo 249 00:11:04,820 --> 00:11:06,410 on pysyvästi muuttunut. 250 00:11:06,410 --> 00:11:08,335 Nyt, tämä vaikuttaa mukavalta ja hyvä, ja itse asiassa, se 251 00:11:08,335 --> 00:11:11,200 tuntuu me ei todellakaan tarvitse CS50 kirjasto enää ollenkaan. 252 00:11:11,200 --> 00:11:13,960 Esimerkiksi katsotaanpa juosta tämän kerran lisää täältä. 253 00:11:13,960 --> 00:11:15,750 Saanen uudelleen sitä toista. 254 00:11:15,750 --> 00:11:20,600 Yritetään numero ota ja sijasta sanomalla 50 kuten ennen, 255 00:11:20,600 --> 00:11:22,810 Haluan vain sanoa ei. 256 00:11:22,810 --> 00:11:24,000 OK, että on hieman outo. 257 00:11:24,000 --> 00:11:25,270 OK. 258 00:11:25,270 --> 00:11:28,680 Ja vain joitakin hölynpölyä täällä. 259 00:11:28,680 --> 00:11:31,170 Joten se ei näytä kahva virheellinen tilanteita. 260 00:11:31,170 --> 00:11:33,620 Joten meidän on minimaalisesti alku lisäämällä joitakin virhe tarkkailun 261 00:11:33,620 --> 00:11:37,460 varmistaa, että käyttäjä on kirjoitettu todellinen määrä, kuten 50, 262 00:11:37,460 --> 00:11:40,720 koska ilmeisesti kirjoittamalla sanoja ei tunnisteta ongelmallista, 263 00:11:40,720 --> 00:11:42,020 mutta se todennäköisesti pitäisi olla. 264 00:11:42,020 --> 00:11:46,450 >> Katsotaanpa tämä versio nyt se minun yrittää reimplement GetString. 265 00:11:46,450 --> 00:11:48,437 Jos scanf on kaikki tämän toiminnallisuus rakennettu, 266 00:11:48,437 --> 00:11:51,270 Miksi olemme olleet dabbling näillä apupyörät kuten GetString? 267 00:11:51,270 --> 00:11:55,450 No, tässä on ehkä oma yksinkertainen versio GetString 268 00:11:55,450 --> 00:12:00,766 jolloin viikko sitten, olisin sanonut, antaa minulle merkkijono ja kutsua sitä puskuri. 269 00:12:00,766 --> 00:12:03,390 Tänään aion aloittaa vain sanomalla char tähti, joka muistaa, 270 00:12:03,390 --> 00:12:04,400 se on vain synonyymi. 271 00:12:04,400 --> 00:12:06,629 Se näyttää pelottavampi mutta se on täsmälleen sama asia. 272 00:12:06,629 --> 00:12:09,420 Joten antaa minulle muuttuja nimeltä puskuri joka tulee tallentaa merkkijonon, 273 00:12:09,420 --> 00:12:12,780 kertoa käyttäjälle merkkijono kiitos, ja sitten, aivan kuten ennen, 274 00:12:12,780 --> 00:12:17,760 koetamme lainata tämä oppitunti scanf % S tällä kertaa ja sitten siirtää puskurissa. 275 00:12:17,760 --> 00:12:19,310 Nyt nopeasti järki tarkistaa. 276 00:12:19,310 --> 00:12:22,120 Miksi en sano Ampersand puskuri tällä kertaa? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Päätellä edellisessä esimerkissä. 279 00:12:26,625 --> 00:12:28,000 Yleisö: Char tähti on osoitin. 280 00:12:28,000 --> 00:12:29,920 DAVID MALAN: Aivan, koska tällä kertaa, char 281 00:12:29,920 --> 00:12:34,080 tähti on jo osoitin, osoite, määritelmän kyseisen tähti siellä. 282 00:12:34,080 --> 00:12:37,530 Ja jos scanf odottaa osoitteen, riittää vain siirtää puskurissa. 283 00:12:37,530 --> 00:12:39,260 Minun ei tarvitse sanoa ampersand puskuriin. 284 00:12:39,260 --> 00:12:42,177 Utelias, voisit tehdä jotain tällaista. 285 00:12:42,177 --> 00:12:43,510 Se on eri merkitys. 286 00:12:43,510 --> 00:12:47,240 Tämä antaisi sinulle osoitin on osoitin, joka on itse asiassa 287 00:12:47,240 --> 00:12:50,050 voimassa asia C, mutta Nyt, pidettävä yksinkertaisina 288 00:12:50,050 --> 00:12:51,750 ja pitää tarina johdonmukainen. 289 00:12:51,750 --> 00:12:54,100 Olen juuri menossa kulkea puskuri ja se on oikein. 290 00:12:54,100 --> 00:12:56,487 Ongelmana kuitenkin on tämä. 291 00:12:56,487 --> 00:12:58,820 Anna minun mennä eteenpäin ja suorittaa tämän Ohjelman jälkeen kääntämiseen. 292 00:12:58,820 --> 00:13:00,902 Tee scanf 1. 293 00:13:00,902 --> 00:13:02,610 Hitto, minun kääntäjän kiinni minun virhe. 294 00:13:02,610 --> 00:13:04,090 Anna minulle yksi sekunti. 295 00:13:04,090 --> 00:13:05,460 Kalahtaa. 296 00:13:05,460 --> 00:13:06,990 Sanotaan scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 OK. 299 00:13:11,380 --> 00:13:12,720 Siellä mennään. 300 00:13:12,720 --> 00:13:14,280 Tarvitsen sitä. 301 00:13:14,280 --> 00:13:16,750 CS50 tunnus on eri kokoonpanoasetukset 302 00:13:16,750 --> 00:13:18,280 että suojella sinua itseäsi. 303 00:13:18,280 --> 00:13:21,300 Tarvitsin poistaa ne vuoteen käynnissä kalahtaa käsin tällä kertaa. 304 00:13:21,300 --> 00:13:22,140 Joten merkkijono kiitos. 305 00:13:22,140 --> 00:13:25,560 Aion mennä eteenpäin ja kirjoita suosikkini Hei maailma. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 Se ei ole mitä olen kirjoittanut. 308 00:13:27,700 --> 00:13:29,690 Joten se osoitus jotain on vialla. 309 00:13:29,690 --> 00:13:33,920 Anna minun mennä eteenpäin ja kirjoita vuonna todella pitkä jono. 310 00:13:33,920 --> 00:13:37,210 Kiitos nolla ja en tiedä jos aion pystyä kaada. 311 00:13:37,210 --> 00:13:40,240 Kokeillaan hieman kopio liitä ja nähdä, jos tämä auttaa. 312 00:13:40,240 --> 00:13:43,290 Vain liittää paljon tätä. 313 00:13:43,290 --> 00:13:47,310 Se on varmasti isompi merkkijono kuin tavallisesti. 314 00:13:47,310 --> 00:13:51,450 Haluan vain todella kirjoittaa se. 315 00:13:51,450 --> 00:13:51,950 Ei. 316 00:13:51,950 --> 00:13:52,650 Perkele. 317 00:13:52,650 --> 00:13:53,480 Komento ei löytynyt. 318 00:13:53,480 --> 00:13:54,550 Joten se liity. 319 00:13:54,550 --> 00:13:56,440 Että koska olen liittänyt huonoja merkkejä, 320 00:13:56,440 --> 00:13:59,780 mutta tämä osoittautuu ei tule toimimaan. 321 00:13:59,780 --> 00:14:03,510 >> Kokeillaan vielä kerran, koska se on hauskempaa, jos me todella kaada. 322 00:14:03,510 --> 00:14:09,116 Katsotaanpa kirjoitan tätä ja nyt, olen menossa kopioida todella pitkä jono 323 00:14:09,116 --> 00:14:10,990 ja nyt katsotaanpas jos me voi kaataa tämä asia. 324 00:14:10,990 --> 00:14:14,235 Huomaan pois tiloja ja uusia linjoja ja puolipisteellä 325 00:14:14,235 --> 00:14:16,035 ja kaikki outoja merkkejä. 326 00:14:16,035 --> 00:14:16,535 Anna. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Ja nyt verkko on vain oltava hitaasti. 329 00:14:22,880 --> 00:14:27,460 Pidin alhaalla Komento-V liian pitkä, selvästi. 330 00:14:27,460 --> 00:14:28,190 Perkele! 331 00:14:28,190 --> 00:14:29,260 Komento ei löytynyt. 332 00:14:29,260 --> 00:14:29,780 >> OK. 333 00:14:29,780 --> 00:14:32,240 No, kohta on kuitenkin seuraavat. 334 00:14:32,240 --> 00:14:36,910 Joten mitä todella tapahtuu on tähän julkilausumaan 335 00:14:36,910 --> 00:14:39,240 nieriää tähti puskuri rivillä 16? 336 00:14:39,240 --> 00:14:41,820 Joten mitä saan kun Julistan osoitin? 337 00:14:41,820 --> 00:14:47,440 Kaikki Saan on neljä tavulla nimeltään puskuri, mutta mitä sen sisällä 338 00:14:47,440 --> 00:14:49,540 hetkellä? 339 00:14:49,540 --> 00:14:50,930 Se on vain noin roskat arvo. 340 00:14:50,930 --> 00:14:54,170 Koska tahansa julistaa muuttuja C, se on vain joitakin roskat arvo, 341 00:14:54,170 --> 00:14:56,220 ja olemme alkaneet kompastua tätä todellisuutta. 342 00:14:56,220 --> 00:14:59,720 Nyt, kun sanon scanf, mennä tähän osoitteeseen 343 00:14:59,720 --> 00:15:01,520 ja laittaa mitä käyttäjä on. 344 00:15:01,520 --> 00:15:06,400 Jos käyttäjä on hei maailman, hyvin, mistä voin laittaa sen? 345 00:15:06,400 --> 00:15:07,750 Puskuri on roskaa arvo. 346 00:15:07,750 --> 00:15:11,510 >> Niin, että on ikään kuin nuoli joka on osoittaa ties minne. 347 00:15:11,510 --> 00:15:13,880 Ehkä se osoittaa täällä mieleeni. 348 00:15:13,880 --> 00:15:16,560 Ja niin kun käyttäjä nimikkeet Hello World, 349 00:15:16,560 --> 00:15:22,380 ohjelma yrittää laittaa string Hello World kenoviiva 0 350 00:15:22,380 --> 00:15:23,910 että murikka muistia. 351 00:15:23,910 --> 00:15:27,070 Mutta suurella todennäköisyydellä, mutta selvästikään ole 100% todennäköisyydellä, 352 00:15:27,070 --> 00:15:30,440 tietokone tulee sitten kaatuu ohjelmaa, koska tämä ei ole 353 00:15:30,440 --> 00:15:32,490 muisti Olisin saa koskettaa. 354 00:15:32,490 --> 00:15:36,330 Joten lyhyt, tämä ohjelma on virheellinen täsmälleen tästä syystä. 355 00:15:36,330 --> 00:15:38,070 En pohjimmiltaan ole sitä, mitä? 356 00:15:38,070 --> 00:15:42,366 Mihin toimiin olen pois, aivan kuten me pois kanssa Binky ensimmäinen esimerkki? 357 00:15:42,366 --> 00:15:42,866 Joo? 358 00:15:42,866 --> 00:15:43,710 >> Yleisö: Muistin varaus? 359 00:15:43,710 --> 00:15:45,001 >> DAVID MALAN: Muistin varaus. 360 00:15:45,001 --> 00:15:48,400 En ole oikeastaan ​​myönnetty kaikki muisti merkkijono. 361 00:15:48,400 --> 00:15:50,270 Jotta voimme korjata tämän pari tapaa. 362 00:15:50,270 --> 00:15:52,700 Yksi, voimme pitää asiat yksinkertaisina ja itse asiassa, nyt olet 363 00:15:52,700 --> 00:15:55,116 menossa alkaa nähdä hämärtymisestä linjojen välillä, mitä 364 00:15:55,116 --> 00:15:58,520 matriisi on, mitä merkkijono on, mitä char tähti on, mitä joukko merkkiä 365 00:15:58,520 --> 00:15:59,020 on. 366 00:15:59,020 --> 00:16:02,450 Tässä toinen esimerkki johon jouset ja huomautus 367 00:16:02,450 --> 00:16:05,690 kaikki Olen tehnyt verkossa 16 on, sen sijaan että hän 368 00:16:05,690 --> 00:16:09,530 että puskuri tulee olemaan char tähti, osoitin kimpale muistia, 369 00:16:09,530 --> 00:16:14,057 Aion hyvin ennakoivasti antaa itseäni puskuri 16 merkkiä, 370 00:16:14,057 --> 00:16:16,390 ja itse asiassa, jos olet perehtynyt termillä puskurointia, 371 00:16:16,390 --> 00:16:20,570 luultavasti maailman videoita, jos video on puskurointi, puskurointi, 372 00:16:20,570 --> 00:16:21,175 puskurointi. 373 00:16:21,175 --> 00:16:22,550 No, mikä on yhteys täällä? 374 00:16:22,550 --> 00:16:24,960 No, Inside YouTube ja sisältä videonauhuriyhdistelmä 375 00:16:24,960 --> 00:16:27,200 yleensä on array joka on suurempi kuin 16. 376 00:16:27,200 --> 00:16:30,340 Se voi olla taulukon koko yhden megatavu, ehkä 10 megatavua, 377 00:16:30,340 --> 00:16:34,330 ja tuohon array ei selaimen ladata koko joukko tavua, 378 00:16:34,330 --> 00:16:37,500 koko joukko megatavua video, ja videosoitin, 379 00:16:37,500 --> 00:16:40,930 YouTuben tai kuka on, alkaa lukeminen tavua että jono, 380 00:16:40,930 --> 00:16:43,530 ja milloin tahansa nähdä sana puskurointi, puskurointi, 381 00:16:43,530 --> 00:16:46,350 se tarkoittaa, että pelaaja on mennyt loppuun, että jono. 382 00:16:46,350 --> 00:16:50,430 Verkko on niin hidasta, että se ei ole täytetään array enemmän tavua 383 00:16:50,430 --> 00:16:55,610 ja niin olet poissa bittiä näyttää käyttäjälle. 384 00:16:55,610 --> 00:16:59,430 >> Joten puskuri on osuva termi täällä että se on vain joukko, kimpale muistia. 385 00:16:59,430 --> 00:17:02,530 Ja tämä korjata sen koska se kääntyy pois 386 00:17:02,530 --> 00:17:07,410 että voit hoitaa taulukot ikään kuin ne ovat osoitteita, vaikka puskuri 387 00:17:07,410 --> 00:17:10,710 on vain symboli, se on merkkijono, puskuria, 388 00:17:10,710 --> 00:17:14,760 se on hyödyllinen minulle, ohjelmoija, voit siirtää sen nimi ympäri 389 00:17:14,760 --> 00:17:17,079 ikään kuin se olisi osoitin, ikään kuin se 390 00:17:17,079 --> 00:17:21,000 olivat osoite kimpale muistia 16 merkkiä. 391 00:17:21,000 --> 00:17:24,530 Niin se sanoa, voin kulkea scanf juuri tätä sanaa 392 00:17:24,530 --> 00:17:30,670 ja niin nyt, jos teen tätä ohjelmaa, tehdä scanf 2, piste slash scanf 2, 393 00:17:30,670 --> 00:17:35,386 ja kirjoita Hei maailma, Anna, että time-- 394 00:17:35,386 --> 00:17:37,590 >> Hmm, mitä tapahtui? 395 00:17:37,590 --> 00:17:39,340 String kiitos. 396 00:17:39,340 --> 00:17:41,430 Mitä tein väärin? 397 00:17:41,430 --> 00:17:43,800 Hei maailma, puskuri. 398 00:17:43,800 --> 00:17:44,705 Hei maailma. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, tiedän mitä se tekee. 401 00:17:49,420 --> 00:17:49,920 OK. 402 00:17:49,920 --> 00:17:51,628 Joten se lukee ylös kunnes ensimmäinen avaruudessa. 403 00:17:51,628 --> 00:17:55,680 Joten huijata vain hetken ja say Halusin vain kirjoittaa jotain 404 00:17:55,680 --> 00:18:01,408 todella pitkä kuin tämä on pitkä lause se on yksi, kaksi, kolme, neljä, viisi, 405 00:18:01,408 --> 00:18:04,420 kuusi, seitsemän, kahdeksan, yhdeksän, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 OK. 407 00:18:05,300 --> 00:18:07,600 Se on todellakin pitkä lause. 408 00:18:07,600 --> 00:18:10,710 Joten tämä lause on pidempi kuin 16 merkkiä 409 00:18:10,710 --> 00:18:13,670 ja kun minä paina Enter, mitä tulee tapahtumaan? 410 00:18:13,670 --> 00:18:16,940 No, tässä tapauksessa tarina, olin julistanut puskuri 411 00:18:16,940 --> 00:18:22,190 todella on array 16 merkkiä valmis menemään. 412 00:18:22,190 --> 00:18:27,426 Joten yksi, kaksi, kolme, neljä, viisi, kuusi, seitsemän, kahdeksan, yhdeksän, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 Niin 16 merkkiä, ja nyt, kun lukea jotain tällaista on pitkä 415 00:18:34,410 --> 00:18:43,950 lause, mitä tulee tapahtumaan on että aion lukea tässä on pitkä 416 00:18:43,950 --> 00:18:49,660 S-E-N-T-E-N-C-E-, lause. 417 00:18:49,660 --> 00:18:52,270 >> Joten tämä on tarkoituksella huono asia, että olen 418 00:18:52,270 --> 00:18:55,060 pitää kirjallisesti yli rajat minun array, 419 00:18:55,060 --> 00:18:56,660 rajojen minun puskuria. 420 00:18:56,660 --> 00:19:00,100 Saisin onnekas ja ohjelma pitää käynnissä ja välitä, 421 00:19:00,100 --> 00:19:03,450 mutta yleisesti ottaen, tämä todellakin kaataa ohjelman, 422 00:19:03,450 --> 00:19:06,440 ja se on bugi minun koodata hetki astun 423 00:19:06,440 --> 00:19:08,576 rajojen Kyseisen array, koska olen 424 00:19:08,576 --> 00:19:10,450 en tiedä jos se on väistämättä menossa kaatua 425 00:19:10,450 --> 00:19:12,120 tai jos olen juuri menossa onnekas. 426 00:19:12,120 --> 00:19:15,750 Joten tämä on ongelmallista, koska Tässä tapauksessa se ei näytä toimivan 427 00:19:15,750 --> 00:19:20,931 ja nyt uhmata kohtaloa täällä, vaikka IDE näyttää sietää melko vähän 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Siellä mennään. 430 00:19:22,040 --> 00:19:23,240 Lopuksi. 431 00:19:23,240 --> 00:19:26,470 Joten olen ainoa, joka voi nähdä tämän. 432 00:19:26,470 --> 00:19:29,630 Joten Minulla oli hauskaa konekirjoitus ulos todella pitkä todellinen ilmaisu 433 00:19:29,630 --> 00:19:32,800 että se varmasti ylittänyt 16 tavua, koska olen 434 00:19:32,800 --> 00:19:38,050 kirjoitetaan tässä hullu pitkä multi-line lause, ja sitten huomaa, mitä tapahtui. 435 00:19:38,050 --> 00:19:41,110 Ohjelma yritti tulostaa sen ja sitten sai segmentointi vika 436 00:19:41,110 --> 00:19:44,430 ja segmentointi viat on kun jotain tällaista tapahtuu 437 00:19:44,430 --> 00:19:47,650 ja käyttöjärjestelmä sanoo ei, ei voi koskettaa, että muisti. 438 00:19:47,650 --> 00:19:49,570 Aiomme tappaa ohjelma kokonaan. 439 00:19:49,570 --> 00:19:51,180 >> Joten tämä vaikuttaa ongelmalliselta. 440 00:19:51,180 --> 00:19:54,540 Olen parantaneet ohjelman puitteissa ainakin joitakin muisti, 441 00:19:54,540 --> 00:19:58,000 mutta tämä näyttäisi rajoittaa toiminto GetString saada 442 00:19:58,000 --> 00:20:00,780 jouset joidenkin äärellinen pituus 16. 443 00:20:00,780 --> 00:20:04,200 Joten jos haluat tukea enää lauseita kuin 16 merkkiä, 444 00:20:04,200 --> 00:20:04,880 Mitä sinä teet? 445 00:20:04,880 --> 00:20:07,970 No, voit lisätä koko on puskurin 32 446 00:20:07,970 --> 00:20:09,190 tai että tuntuu sellainen lyhyt. 447 00:20:09,190 --> 00:20:12,260 Miksemme vain tehdä se 1000 mutta työntää takaisin. 448 00:20:12,260 --> 00:20:17,100 Mikä vastaus intuitiivisesti ja vain välttää tämän ongelman tekemällä 449 00:20:17,100 --> 00:20:20,660 minun puskuri isompi, kuin 1000 merkkiä? 450 00:20:20,660 --> 00:20:23,470 Toteuttamalla GetString tällä tavalla. 451 00:20:23,470 --> 00:20:27,130 Mikä on hyvä tai huono täällä? 452 00:20:27,130 --> 00:20:28,033 Joo? 453 00:20:28,033 --> 00:20:30,574 Yleisö: Jos sitoa paljon tilaa ja et käytä sitä, 454 00:20:30,574 --> 00:20:33,500 niin et voi jakaa uudelleen, että tilaa. 455 00:20:33,500 --> 00:20:34,500 DAVID MALAN: Ehdottomasti. 456 00:20:34,500 --> 00:20:38,480 Se on tuhlaileva sikäli kuin jos et todella tarvitsevat 900 näistä tavua 457 00:20:38,480 --> 00:20:41,057 ja kuitenkin olet pyytänyt 1000 yhteensä muutenkin, 458 00:20:41,057 --> 00:20:44,140 olet vain kuluttaa enemmän muistia käyttäjän tietokoneessa kuin sinun täytyy, 459 00:20:44,140 --> 00:20:45,740 ja kun kaikki, jotkut olet jo kohdannut 460 00:20:45,740 --> 00:20:47,620 elämässä, että kun olet käynnissä paljon ohjelmia 461 00:20:47,620 --> 00:20:50,470 ja he syövät paljon muistia, tämä voi todella vaikuttaa suorituskykyyn 462 00:20:50,470 --> 00:20:52,220 ja käyttäjän kokemus tietokoneella. 463 00:20:52,220 --> 00:20:56,090 Niin, että sellainen laiska ratkaisun, varmasti, ja päinvastoin, 464 00:20:56,090 --> 00:21:00,140 se ei ole vain tuhlausta, mitä ongelma edelleen, vaikka saan puskuri 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 Joo? 467 00:21:02,600 --> 00:21:04,475 >> Yleisö: merkkijono on pituus 1001. 468 00:21:04,475 --> 00:21:05,350 DAVID MALAN: Aivan. 469 00:21:05,350 --> 00:21:08,280 Jos merkkijono on pituus 1001, sinulla on täsmälleen sama ongelma, 470 00:21:08,280 --> 00:21:10,705 ja minun väite, olisin vain tee se 2000, 471 00:21:10,705 --> 00:21:12,830 mutta et tiedä etukäteen, kuinka suuri se olisi, 472 00:21:12,830 --> 00:21:16,890 ja vielä, minun on kääntää minun ohjelma ennen kerroit ihmiset käyttävät ja lataa 473 00:21:16,890 --> 00:21:17,390 se. 474 00:21:17,390 --> 00:21:21,490 Joten tämä on juuri sellainen kamaa että CS50 kirjasto yrittää 475 00:21:21,490 --> 00:21:24,750 auttaa meitä ja me vain silmäyksellä joitakin taustalla täytäntöönpanon 476 00:21:24,750 --> 00:21:29,790 täällä, mutta tämä on CS50 piste C. Tämä on tiedosto, joka on ollut CS50 IDE 477 00:21:29,790 --> 00:21:31,420 kaikki nämä viikot olet käyttänyt. 478 00:21:31,420 --> 00:21:34,280 Se on valmiiksi käännetty ja olet käyttänyt sitä automaattisesti 479 00:21:34,280 --> 00:21:38,780 luonteeltaan ottaa dash L CS50 lippu kanssa kalahtaa, 480 00:21:38,780 --> 00:21:42,300 mutta jos minä selaa läpi kaikki Näiden toimintojen, tässä on GetString, 481 00:21:42,300 --> 00:21:44,636 ja vain antaa sinulle maku mitä tapahtuu, 482 00:21:44,636 --> 00:21:46,760 sallikaa vilkaista monimutkaisuus. 483 00:21:46,760 --> 00:21:48,870 Se ei ole erittäin pitkä toiminto, mutta emme 484 00:21:48,870 --> 00:21:52,530 täytyy ajatella kaikki hartaasti miten edetä saada jouset. 485 00:21:52,530 --> 00:21:55,660 >> Joten tässä on minun puskuri ja minä ilmeisesti alustaa sen null. 486 00:21:55,660 --> 00:21:57,990 Tämä tietenkin on sama asia kuin char tähti, 487 00:21:57,990 --> 00:22:00,585 mutta päätin täytäntöönpanosta CS50 kirjasto 488 00:22:00,585 --> 00:22:02,460 että jos aiomme olla täysin dynaaminen, 489 00:22:02,460 --> 00:22:05,770 En tiedä etukäteen, kuinka suuri string käyttäjät ovat menossa halua saada. 490 00:22:05,770 --> 00:22:08,140 Joten aion aloittaa vain tyhjä merkkijono 491 00:22:08,140 --> 00:22:11,507 ja aion rakentaa niin paljon muistia kuin minun täytyy sovittaa käyttäjälle merkkijono 492 00:22:11,507 --> 00:22:13,340 ja jos minulla ei ole tarpeeksi, aion kysyä 493 00:22:13,340 --> 00:22:15,010 käyttöjärjestelmän enemmän muistia. 494 00:22:15,010 --> 00:22:17,510 Aion siirtää merkkijono isompi murikka muistia 495 00:22:17,510 --> 00:22:21,847 ja aion vapauttaa tai vapauttaa riittävän suuren osan muistia 496 00:22:21,847 --> 00:22:23,680 ja olemme juuri menossa tehdä tämän iteratiivisesti. 497 00:22:23,680 --> 00:22:25,570 >> Niin nopealla silmäyksellä, täällä on vain muuttuja 498 00:22:25,570 --> 00:22:28,780 jonka kanssa aion seurata kapasiteetin minun puskuria. 499 00:22:28,780 --> 00:22:30,071 Kuinka monta tavua voin mahdu? 500 00:22:30,071 --> 00:22:32,070 Tässä muuttujan n kanssa joka Aion pitää 501 00:22:32,070 --> 00:22:36,200 seuraa, kuinka monta tavua ovat todella puskuri tai siitä, että käyttäjä on kirjoittanut. 502 00:22:36,200 --> 00:22:39,900 Jos et ole nähnyt tätä ennen, te voi määrittää, että muuttuja kuin int 503 00:22:39,900 --> 00:22:46,370 on allekirjoitettu, joka kuten nimestä voi päätellä, tarkoittaa että se on ei-negatiivinen, ja miksi 504 00:22:46,370 --> 00:22:50,590 En koskaan halua vaivata täsmennetään että int ei ole vain int, 505 00:22:50,590 --> 00:22:52,540 mutta se on unsigned int? 506 00:22:52,540 --> 00:22:55,064 Se on ei-negatiivinen int. 507 00:22:55,064 --> 00:22:56,355 Mitä [äänetön] tarkoittaa? 508 00:22:56,355 --> 00:22:58,910 >> Yleisö: Se kuvailee määrä muistia voi olla [äänetön]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID MALAN: Joo. 510 00:22:59,660 --> 00:23:03,710 Joten jos sanon allekirjoittamaton, tämä on todella antaa sinulle yksi vähän ylimääräistä muistia 511 00:23:03,710 --> 00:23:07,440 ja se tuntuu sellainen typerä, mutta jos on yksi vähän lisämuistia, että 512 00:23:07,440 --> 00:23:09,940 tarkoittaa olet kaksi kertaa niin paljon arvot voit edustaa, 513 00:23:09,940 --> 00:23:11,570 koska se voi olla 0 tai 1. 514 00:23:11,570 --> 00:23:14,660 Niin oletuksena, int voi olla karkeasti negatiivinen 2000000000 aina 515 00:23:14,660 --> 00:23:16,030 jopa positiivinen 2000000000. 516 00:23:16,030 --> 00:23:18,540 Ne ovat suuria alueita, mutta se on vielä sellainen tuhlausta 517 00:23:18,540 --> 00:23:21,280 jos vain välitä koot, joka vain intuitiivisesti 518 00:23:21,280 --> 00:23:24,620 pitäisi olla ei-negatiivinen tai positiivinen tai 0, hyvin sitten, 519 00:23:24,620 --> 00:23:28,884 miksi olet tuhlaa 2000000000 mahdolliset arvot negatiiviset luvut 520 00:23:28,884 --> 00:23:30,300 jos olet koskaan aio käyttää niitä? 521 00:23:30,300 --> 00:23:35,350 Joten sanomalla allekirjoittamaton, nyt minun int voi olla välillä 0 ja noin 4 miljardia euroa. 522 00:23:35,350 --> 00:23:39,280 >> Joten tässä on vain int C syistä emme päästä juuri nyt 523 00:23:39,280 --> 00:23:42,280 miksi se int sijasta of char, mutta tässä 524 00:23:42,280 --> 00:23:44,630 Käydyn mitä tapahtuu päälle, ja jotkut teistä 525 00:23:44,630 --> 00:23:48,340 voidaan käyttää, esimerkiksi, fgetc toiminto jopa PSET neljä 526 00:23:48,340 --> 00:23:51,580 tai sen jälkeen, näemme sen jälleen ongelma asettaa viisi, 527 00:23:51,580 --> 00:23:55,410 fgetc on mukavaa, koska kuten nimi sellainen, tavallaan arcanely ehdottaa, 528 00:23:55,410 --> 00:23:57,940 se on toiminto, saa hahmo ja niin, 529 00:23:57,940 --> 00:24:00,690 mitä pohjimmiltaan erilainen mitä teemme vuonna GetString 530 00:24:00,690 --> 00:24:03,110 ei emme käyttäen scanf samalla tavalla. 531 00:24:03,110 --> 00:24:07,550 Olemme vain hiipivät pitkin askel-askeleelta yli mitä käyttäjä on kirjoittanut, 532 00:24:07,550 --> 00:24:10,970 koska voimme aina jakaa yksi nieriä, ja niin voimme aina turvallisesti 533 00:24:10,970 --> 00:24:15,599 katso yksi char kerrallaan, ja taika alkaa tapahtua täällä. 534 00:24:15,599 --> 00:24:17,890 Aion selaa Keskellä tätä toimintoa 535 00:24:17,890 --> 00:24:20,360 vain esitellä lyhyesti tämän toiminnon. 536 00:24:20,360 --> 00:24:22,670 Aivan kuten on olemassa malloc funktio, siellä 537 00:24:22,670 --> 00:24:27,740 RealLOC toiminto jossa realloc avulla voit jakaa uudelleen kimpale muisti 538 00:24:27,740 --> 00:24:29,570 ja tehdä se isompi tai pienempi. 539 00:24:29,570 --> 00:24:33,060 Niin pitkän tarinan lyhyesti ja aalto minun käsi tänään, 540 00:24:33,060 --> 00:24:35,620 tietää, että mitä GetString tekee se on eräänlainen 541 00:24:35,620 --> 00:24:39,720 maagisesti kasvaa tai kutistuu puskuria käyttäjä 542 00:24:39,720 --> 00:24:41,440 nimikkeet hänen merkkijono. 543 00:24:41,440 --> 00:24:43,962 >> Joten jos käyttäjä kirjoittaa lyhyt merkkijono, tämä koodi 544 00:24:43,962 --> 00:24:45,920 vain jakaa tarpeeksi muisti sopivaksi merkkijono. 545 00:24:45,920 --> 00:24:48,086 Jos käyttäjä pitää kirjoittamisen kuten tein sen uudestaan ​​ja uudestaan 546 00:24:48,086 --> 00:24:50,330 ja taas, hyvin, jos puskurin aluksi tämä iso 547 00:24:50,330 --> 00:24:53,310 ja ohjelma ymmärtää, että Hetkinen, olen pois tilaa, 548 00:24:53,310 --> 00:24:55,410 se tulee kaksinkertaistaa puskurin koko 549 00:24:55,410 --> 00:24:59,110 ja sitten kaksinkertaiseksi puskurin ja koodi, jolla ei kaksinkertaistaminen, 550 00:24:59,110 --> 00:25:03,170 jos katsomme sen täällä, se on vain tämä fiksu sutkaus. 551 00:25:03,170 --> 00:25:06,830 Et ehkä ole nähnyt tätä syntaksin ennen, mutta jos sanot tähti vastaa, 552 00:25:06,830 --> 00:25:10,470 tämä on sama asia kuin sanomalla kapasiteetti kertaa 2. 553 00:25:10,470 --> 00:25:13,390 Joten se vain pitää kaksinkertaistaa kapasiteetti puskurin 554 00:25:13,390 --> 00:25:17,480 ja sitten kertoa realloc antaa siitä, että paljon enemmän muistia. 555 00:25:17,480 --> 00:25:19,720 >> Nyt, kun sivuun, siellä ovat muita toimintoja täällä 556 00:25:19,720 --> 00:25:23,680 että emme tutkia mitään yksityiskohtia muut kuin näkyä GetInt, 557 00:25:23,680 --> 00:25:26,150 käytämme GetString vuonna GetInt. 558 00:25:26,150 --> 00:25:28,192 Me tarkistamme, että se ei ole null, joka muistaa, 559 00:25:28,192 --> 00:25:30,400 on erityinen arvo, tarkoittaa jotain meni pieleen. 560 00:25:30,400 --> 00:25:31,233 Olemme muisti. 561 00:25:31,233 --> 00:25:32,310 Parempi tarkistaa, että. 562 00:25:32,310 --> 00:25:33,710 Ja palaamme Sentinel arvo. 563 00:25:33,710 --> 00:25:37,850 Mutta minä taipua kommentit siitä, miksi ja sitten käytämme tätä serkku scanf 564 00:25:37,850 --> 00:25:42,100 kutsui sscanf ja se osoittautuu että sscanf, tai merkkijono scanf, 565 00:25:42,100 --> 00:25:45,310 avulla voit katsomaan linjaa käyttäjä on kirjoitettu ja voit 566 00:25:45,310 --> 00:25:49,610 analysoida se olennaisesti ja mitä minä olen tekee täällä on kerron sscanf, 567 00:25:49,610 --> 00:25:54,440 analysoida mitä käyttäjä on kirjoitettu ja varmista% i, 568 00:25:54,440 --> 00:25:59,250 on kokonaisluku sitä, emmekä päästä tänään juuri siksi siellä on myös 569 00:25:59,250 --> 00:26:03,760 % C täällä, mutta pähkinänkuoressa mahdollistaa meitä havaita, jos käyttäjä on kirjoittanut 570 00:26:03,760 --> 00:26:06,050 jotain vale numeron jälkeen. 571 00:26:06,050 --> 00:26:11,766 Niin siitä syystä, että GetInt ja GetString kertoa yrittää uudelleen, yritä uudelleen, yritä uudelleen 572 00:26:11,766 --> 00:26:13,640 on, koska kaikki on että koodi olemme kirjoitettu, 573 00:26:13,640 --> 00:26:17,900 Se on eräänlainen katsomalla käyttäjän syöttää sen varmistamisessa, se on täysin numeerinen 574 00:26:17,900 --> 00:26:21,700 tai se on todellinen kelluva piste arvo tai vastaavan, 575 00:26:21,700 --> 00:26:24,233 riippuen siitä, mitä arvo toimiakseen käytät. 576 00:26:24,233 --> 00:26:25,060 >> Vau. 577 00:26:25,060 --> 00:26:25,710 OK. 578 00:26:25,710 --> 00:26:27,592 Se oli suupala mutta tässä on 579 00:26:27,592 --> 00:26:29,550 että syy meillä oli ne apupyörät päälle 580 00:26:29,550 --> 00:26:32,880 johtuu alimmalla tasolla, On vain niin paljon asioita, 581 00:26:32,880 --> 00:26:35,674 voi mennä vikaan, että halusimme ja ennaltaehkäisevästi käsitellä 582 00:26:35,674 --> 00:26:38,090 niitä asioita varmasti aikaisintaan viikon luokan, 583 00:26:38,090 --> 00:26:42,230 mutta nyt PSET neljä ja PSET viisi ja kuin sinä näet, että se on enemmän tykö 584 00:26:42,230 --> 00:26:45,570 sinua mutta myös olet enemmän pystyy ratkaista näitä erilaisia ​​ongelmia 585 00:26:45,570 --> 00:26:47,180 sinä itse. 586 00:26:47,180 --> 00:26:51,770 Kysyttävää GetString tai GetInt? 587 00:26:51,770 --> 00:26:52,630 Joo? 588 00:26:52,630 --> 00:26:55,130 >> Yleisö: Miksi kaksinkertainen kapasiteetti puskurin 589 00:26:55,130 --> 00:26:57,630 eikä vain kasvaa sen tarkka määrä? 590 00:26:57,630 --> 00:26:58,100 >> DAVID MALAN: Hyvä kysymys. 591 00:26:58,100 --> 00:27:00,474 Miksi me kaksinkertaistaa kapasiteetin puskurin vastakohtana 592 00:27:00,474 --> 00:27:02,800 vain lisätä sitä noin vakioarvo? 593 00:27:02,800 --> 00:27:03,900 Se oli suunnittelu päätös. 594 00:27:03,900 --> 00:27:08,590 Olemme juuri päättänyt, että koska se pyrkii olla vähän kallis ajan viisasta kysyä 595 00:27:08,590 --> 00:27:10,440 käyttöjärjestelmä muistin, emme 596 00:27:10,440 --> 00:27:13,210 halua päätyä joutumassa tilanne iso jousille 597 00:27:13,210 --> 00:27:14,960 että me pyysivät OS uudelleen ja uudelleen 598 00:27:14,960 --> 00:27:17,500 ja uudelleen ja uudelleen peräkkäin muistin. 599 00:27:17,500 --> 00:27:20,387 Joten me vain päättänyt, hieman mielivaltaisesti mutta toivomme kohtuudella, 600 00:27:20,387 --> 00:27:22,720 että, tiedätkö mitä, katsotaanpa yrittää mennä asioiden edelle 601 00:27:22,720 --> 00:27:25,520 ja vain pitää kaksinkertaistaa niin, että me minimoida kertaa 602 00:27:25,520 --> 00:27:29,010 Meidän täytyy soittaa malloc tai RealLOC, mutta yhteensä tuomio 603 00:27:29,010 --> 00:27:31,820 soittaa ilman tietäen mitä käyttäjät kannattaa kirjoittaa. 604 00:27:31,820 --> 00:27:33,600 Molemmat tavat voivat olla kyseenalainen. 605 00:27:33,600 --> 00:27:35,430 Luultavasti hyvä. 606 00:27:35,430 --> 00:27:39,240 >> Joten katsomaan pari Muiden haittavaikutuksia muistia, 607 00:27:39,240 --> 00:27:41,610 asioita, jotka voivat mennä pieleen ja työkaluja, joita voit 608 00:27:41,610 --> 00:27:43,880 käyttää kiinni tällaisia ​​virheitä. 609 00:27:43,880 --> 00:27:47,800 On käynyt ilmi kaikille teille, vaikka check50 ei ole kertonut sinulle niin paljon, 610 00:27:47,800 --> 00:27:50,050 on kirjallisesti buginen koodi vuodesta viikko yksi, 611 00:27:50,050 --> 00:27:53,630 vaikka kaikki check50 testit kulunut, ja vaikka sinä ja TF 612 00:27:53,630 --> 00:27:56,010 ovat super varmoja, että koodi toimii tarkoitetulla tavalla. 613 00:27:56,010 --> 00:27:59,190 Koodi on viallisista tai virheellinen, että te kaikki, 614 00:27:59,190 --> 00:28:02,540 käyttämään CS50 kirjasto, on vuotaa muistia. 615 00:28:02,540 --> 00:28:06,040 Olet pyytänyt käyttöjärjestelmä muistin useimmissa ohjelmissa 616 00:28:06,040 --> 00:28:08,850 olet kirjoittanut, mutta olet koskaan itse antanut sen takaisin. 617 00:28:08,850 --> 00:28:12,110 Olet kutsutaan GetString ja GetInt ja GetFloat, 618 00:28:12,110 --> 00:28:15,270 mutta GetString, olet koskaan kutsuta unGetString tai Anna 619 00:28:15,270 --> 00:28:19,890 String Takaisin tms, mutta olemme nähneet että GetString ei varata muistia 620 00:28:19,890 --> 00:28:22,810 Poiketen malloc tai tämän toiminto RealLOC, joka on vain 621 00:28:22,810 --> 00:28:25,670 hyvin samanlainen henki, ja vielä, olemme olleet 622 00:28:25,670 --> 00:28:28,629 pyytää käyttöjärjestelmä muisti ja muisti uudelleen ja uudelleen 623 00:28:28,629 --> 00:28:29,670 mutta koskaan antaa sitä takaisin. 624 00:28:29,670 --> 00:28:33,550 >> Nyt, syrjään, käy ilmi, että kun ohjelma sulkeutuu, kaikki muisti 625 00:28:33,550 --> 00:28:34,870 automaattisesti vapautuu. 626 00:28:34,870 --> 00:28:36,150 Joten se ei ollut valtava käsitellä. 627 00:28:36,150 --> 00:28:38,590 Se ei tule rikkoa IDE tai hidas asioita alas, 628 00:28:38,590 --> 00:28:40,670 mutta kun ohjelmat eivät yleensä vuotaa muistia 629 00:28:40,670 --> 00:28:42,170 ja ne käynnissä pitkään. 630 00:28:42,170 --> 00:28:45,640 Jos olet koskaan nähnyt tyhmä pikku rantapallo Mac OS tai tiimalasi 631 00:28:45,640 --> 00:28:51,160 Windows missä se on eräänlainen hidastaa tai ajatella tai ajattelu 632 00:28:51,160 --> 00:28:53,770 tai vain todella alkaa hidastuvan ryömiä, 633 00:28:53,770 --> 00:28:56,960 se hyvin mahdollisesti voisi olla tulos on muisti vuotaa. 634 00:28:56,960 --> 00:28:59,970 Ohjelmoijia jotka kirjoittivat ohjelmisto käytät 635 00:28:59,970 --> 00:29:03,570 pyytää käyttöjärjestelmä muistia muutaman minuutin välein, joka tunti. 636 00:29:03,570 --> 00:29:05,570 Mutta jos käytät ohjelmisto, vaikka se on 637 00:29:05,570 --> 00:29:08,680 minimoitu tietokoneen tunteja tai päiväkausia, 638 00:29:08,680 --> 00:29:11,980 saatat kysyä lisää ja lisää muisti ja koskaan todellisuudessa käyttävät sitä 639 00:29:11,980 --> 00:29:15,180 ja niin koodi saattaa olla, tai ohjelmat saattavat vuotaa muistia, 640 00:29:15,180 --> 00:29:18,350 ja jos alkaa vuotaa muistia, siellä on vähemmän muistia muiden ohjelmien, 641 00:29:18,350 --> 00:29:21,220 ja vaikutus on hidastaa kaiken alas. 642 00:29:21,220 --> 00:29:23,600 >> Nyt, tämä on ehdottomasti yksi kaikkein hirvittävät ohjelmat 643 00:29:23,600 --> 00:29:26,350 sinulla on mahdollisuuksia ajaa CS50 sikäli 644 00:29:26,350 --> 00:29:31,650 koska sen tuotanto on vieläkin esoteerinen kuin kalahtaa n tai tehdä tai jonkin komennon 645 00:29:31,650 --> 00:29:35,930 line ohjelmien olemme ajaa ennen, mutta onneksi, upotettu sen ulostulo 646 00:29:35,930 --> 00:29:39,810 on joitakin erittäin hyödyllisiä vinkkejä että on hyötyä joko PSET neljä 647 00:29:39,810 --> 00:29:41,510 tai varmasti PMääritä viisi. 648 00:29:41,510 --> 00:29:44,250 Joten Valgrind on työkalu , joita voidaan käyttää etsimään 649 00:29:44,250 --> 00:29:46,930 muistin vuotoja ohjelmaan. 650 00:29:46,930 --> 00:29:48,570 Se on suhteellisen helppo ajaa. 651 00:29:48,570 --> 00:29:51,420 Suoritat Valgrind ja sitten, jopa vaikka se on vähän verbose, 652 00:29:51,420 --> 00:29:54,440 dash viiva vuoto Tarkista vastaa täynnä, ja sitten piste 653 00:29:54,440 --> 00:29:56,320 kauttaviiva ja nimi ohjelman. 654 00:29:56,320 --> 00:30:00,010 Joten Valgrind sitten ajaa ohjelma ja aivan lopussa oman ohjelman 655 00:30:00,010 --> 00:30:02,240 käynnissä ennen kuin se sulkeutuu ja antaa sinulle toinen nopea, 656 00:30:02,240 --> 00:30:04,980 se tulee analysoida ohjelma, kun se on ollut käynnissä 657 00:30:04,980 --> 00:30:07,740 ja kertoa sinä vuotaa kaikki muisti ja vielä parempaa, 658 00:30:07,740 --> 00:30:10,610 Koskitko muisti että ei kuulu sinulle? 659 00:30:10,610 --> 00:30:13,700 Se voi saalis kaikkea, mutta se on aika hyvä kiinni useimmat asiat. 660 00:30:13,700 --> 00:30:19,700 >> Joten tässä on esimerkki minun jolla on ajettu Tämän ohjelman, jolla on ajettu valgrind, 661 00:30:19,700 --> 00:30:21,470 on ohjelma nimeltä muistia, ja aion 662 00:30:21,470 --> 00:30:24,730 korostaa rivit, jotka ovat lopulta kiinnostaa meitä. 663 00:30:24,730 --> 00:30:27,690 Joten on vielä enemmän häiriötekijöitä että olen poistettu liukumäki. 664 00:30:27,690 --> 00:30:30,930 Mutta haluan vain nähdä, mitä tämä ohjelma pystyy kertoa meille. 665 00:30:30,930 --> 00:30:34,800 Se pystyy kertoa meille asioita kuten virheellinen kirjoittavat koko 4. 666 00:30:34,800 --> 00:30:38,020 Toisin sanoen, jos kosket muisti, erityisesti 4 tavua muistia 667 00:30:38,020 --> 00:30:40,350 että sinun ei pitäisi olla, Valgrind voi kertoa. 668 00:30:40,350 --> 00:30:41,660 Virheellinen kirjoitus koko 4. 669 00:30:41,660 --> 00:30:43,640 Kosketit neljä tavua että sinun ei pitäisi olla. 670 00:30:43,640 --> 00:30:44,840 Missä teit tuon? 671 00:30:44,840 --> 00:30:45,900 Tämä on kauneus. 672 00:30:45,900 --> 00:30:50,000 Muisti piste C linja 21 on silloin, kun mokasi ja siksi se on hyödyllistä. 673 00:30:50,000 --> 00:30:53,410 Aivan kuten GDB, se voi auttaa kohta sinua todellinen virhe. 674 00:30:53,410 --> 00:30:57,170 >> Nyt, tämä on hieman verbose, jos ei sekava. 675 00:30:57,170 --> 00:31:01,307 40 tavua 1 lohkot ovat ehdottomasti hävisi tappio ennätys 1 1. 676 00:31:01,307 --> 00:31:02,140 Mitä se tarkoittaa? 677 00:31:02,140 --> 00:31:05,920 No, se vain tarkoittaa pyysit 40 tavua ja et koskaan antanut sitä takaisin. 678 00:31:05,920 --> 00:31:08,930 Soitit malloc tai soitit GetString ja käyttöjärjestelmä 679 00:31:08,930 --> 00:31:12,450 antoi sinulle 40 tavua, mutta et koskaan vapautettu tai vapautetaan, että muisti, 680 00:31:12,450 --> 00:31:15,400 ja olla oikeudenmukainen, olemme koskaan näytä miten antaa takaisin muistiin. 681 00:31:15,400 --> 00:31:17,910 Osoittautuu olemassa Super yksinkertainen funktio kutsutaan vapaaksi. 682 00:31:17,910 --> 00:31:21,170 Ottaa yhden argumentin, asia haluat vapauttaa tai antaa takaisin, 683 00:31:21,170 --> 00:31:23,430 mutta 40 tavua, ilmeisesti, tässä ohjelmassa 684 00:31:23,430 --> 00:31:27,300 on menetetty rivillä 20 muistia piste C. 685 00:31:27,300 --> 00:31:28,650 >> Joten katso tätä ohjelmaa. 686 00:31:28,650 --> 00:31:31,020 Se on erittäin hyödytön. 687 00:31:31,020 --> 00:31:33,980 Se vain osoittaa tässä virhe. 688 00:31:33,980 --> 00:31:34,920 Joten katsomaan. 689 00:31:34,920 --> 00:31:39,920 Tässä on tärkein ja tärkein, huomautus, puhelut toiminto nimeltään f ja sitten palaa. 690 00:31:39,920 --> 00:31:41,550 Joten kaikki, että mielenkiintoinen. 691 00:31:41,550 --> 00:31:42,664 Mitä f tekee? 692 00:31:42,664 --> 00:31:44,330 Huomaa, en vaivaudu kanssa prototyyppi. 693 00:31:44,330 --> 00:31:46,520 Halusin pitää koodi mahdollisimman vähäiset. 694 00:31:46,520 --> 00:31:49,530 Joten laitoin f edellä tärkein ja se on hieno, varmasti, 695 00:31:49,530 --> 00:31:51,500 lyhyitä ohjelmia, kuten tämä. 696 00:31:51,500 --> 00:31:56,910 Joten f ei palaa mitään ja tekee ei ota mitään, mutta se ei tee tätä. 697 00:31:56,910 --> 00:31:59,620 Se julistaa, aivan kuten vuonna Binky esimerkissä, 698 00:31:59,620 --> 00:32:02,682 osoitin nimeltään x että menee tallentaa osoitteen int. 699 00:32:02,682 --> 00:32:03,890 Niin, että vasemmalla puolella. 700 00:32:03,890 --> 00:32:07,230 Englanti, mikä on oikea puoli tekee? 701 00:32:07,230 --> 00:32:09,770 Kukaan? 702 00:32:09,770 --> 00:32:13,665 Mitä tämä tekee meille? 703 00:32:13,665 --> 00:32:14,651 Joo? 704 00:32:14,651 --> 00:32:16,623 >> Yleisö: [äänetön] kertaa koko int 705 00:32:16,623 --> 00:32:19,175 joka on 10 kertaa, että [äänetön] 706 00:32:19,175 --> 00:32:20,800 DAVID MALAN: Hyvä ja haluan tiivistää. 707 00:32:20,800 --> 00:32:25,480 Joten varata tarpeeksi tilaa 10 kokonaislukuja tai 10, mikä on koko int, 708 00:32:25,480 --> 00:32:29,340 se on neljä tavua, joten 10 kertaa 4 on 40, niin että oikea puoli, että olen 709 00:32:29,340 --> 00:32:33,930 korostettu on antaa minulle 40 tavua ja tallentaa osoitteen ensimmäisen tavun 710 00:32:33,930 --> 00:32:34,940 osaksi X. 711 00:32:34,940 --> 00:32:38,380 Ja nyt lopuksi, ja tässä tarina tämä ohjelma on buginen, mitä 712 00:32:38,380 --> 00:32:41,540 vikaa linja 21 perustuu että logiikka? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Mitä vikaa linja 21? 715 00:32:46,280 --> 00:32:46,780 Joo? 716 00:32:46,780 --> 00:32:49,550 Yleisö: Et voi indeksinä x [kuultavissa]. 717 00:32:49,550 --> 00:32:50,300 DAVID MALAN: Joo. 718 00:32:50,300 --> 00:32:52,270 Minun ei pitäisi indeksinä x niin. 719 00:32:52,270 --> 00:32:53,850 Niin syntaktisesti, se on OK. 720 00:32:53,850 --> 00:32:56,990 Mitä mukavaa on, aivan kuten sinä voi hoitaa nimi array 721 00:32:56,990 --> 00:33:01,080 ikään kuin se on osoitin, samoin voit käsitellä osoittimen kuin se on 722 00:33:01,080 --> 00:33:06,425 array, ja niin voin syntaktisesti sanoa X kiinnike jotain, X teline i, 723 00:33:06,425 --> 00:33:07,800 mutta 10 on ongelmallinen. 724 00:33:07,800 --> 00:33:09,096 Miksi? 725 00:33:09,096 --> 00:33:10,910 >> Yleisö: Koska se ei sisällä. 726 00:33:10,910 --> 00:33:12,390 >> DAVID MALAN: Se ei ole sisällä että murikka muistia. 727 00:33:12,390 --> 00:33:15,306 Mikä on suurin arvo minun pitäisi laittamalla näissä hakasulkeissa? 728 00:33:15,306 --> 00:33:16,870 9, 0 kautta 9. 729 00:33:16,870 --> 00:33:18,160 Koska nolla indeksointi. 730 00:33:18,160 --> 00:33:20,190 Joten 0 kautta 9 olisi hienoa. 731 00:33:20,190 --> 00:33:23,960 Kiinnike 10 ei ole hyvä ja mutta, muistuttaa kuitenkin, joka kerta 732 00:33:23,960 --> 00:33:27,017 En tahdo yrittää tehdä CS50 IDE Crash kirjoittamalla väärä arvoja, 733 00:33:27,017 --> 00:33:29,100 se ei aina yhteistyötä, ja todellakin, usein 734 00:33:29,100 --> 00:33:31,460 onnekas vain siksi Käyttöjärjestelmä ei 735 00:33:31,460 --> 00:33:35,467 huomaat koskaan niin hieman siirtää joitakin kimpale muistia, 736 00:33:35,467 --> 00:33:38,300 koska Oletko yöpynyt sisällä teknisesti segmentille, mutta siitä lisää 737 00:33:38,300 --> 00:33:40,940 vuonna käyttöjärjestelmien luokka, ja niin jotain tällaista 738 00:33:40,940 --> 00:33:43,000 voisi hyvin helposti mennä huomaamatta. 739 00:33:43,000 --> 00:33:48,120 Ohjelmasi ei ikinä kaatumaan johdonmukaisesti mutta ehkä silloin tällöin. 740 00:33:48,120 --> 00:33:50,610 >> Ja niin yritetään valgrind Tämän, ja tässä 741 00:33:50,610 --> 00:33:52,870 jossa me hukkua lähdön hetkellisesti. 742 00:33:52,870 --> 00:34:00,810 Joten muisti valgrind vuotaa Tarkista vastaa koko piste slash muisti. 743 00:34:00,810 --> 00:34:03,040 Ja tästä syystä Lupaan tämä hukuttaa. 744 00:34:03,040 --> 00:34:05,700 Tässä mitä valgrind, tässä mitä ohjelmoija, joitakin vuosia avarien 745 00:34:05,700 --> 00:34:08,469 päättänyt, että olisi hyvä idea tuotoksen näyttää. 746 00:34:08,469 --> 00:34:09,750 Joten järkeä tämän. 747 00:34:09,750 --> 00:34:13,120 Joten kaikki tavoin vasen puoli ilman hyvää syytä 748 00:34:13,120 --> 00:34:16,620 on prosessi ID ohjelman me vain ajaa, yksilöllinen tunniste 749 00:34:16,620 --> 00:34:18,030 Ohjelman me loppui juuri. 750 00:34:18,030 --> 00:34:19,738 Poistimme että vuodesta dia, mutta siellä 751 00:34:19,738 --> 00:34:22,190 on joitakin hyödyllisiä tietoja täällä. 752 00:34:22,190 --> 00:34:24,684 >> Katsotaanpa selaamalla ylös hyvin alkuun. 753 00:34:24,684 --> 00:34:25,600 Tässä kun aloitimme. 754 00:34:25,600 --> 00:34:27,040 Joten se ei ole kovin paljon teho. 755 00:34:27,040 --> 00:34:30,429 Tässä että virheellinen kirjoittaa koosta 4 rivillä 21. 756 00:34:30,429 --> 00:34:31,760 No, mikä oli linja 21? 757 00:34:31,760 --> 00:34:34,500 Rivi 21 oli täsmälleen tämä ja se on järkevää 758 00:34:34,500 --> 00:34:37,290 että olen pätevästi kirjallisesti 4 tavua, koska olen 759 00:34:37,290 --> 00:34:40,389 yrittää laittaa tämän kokonaisluku, joka voisi olla mitään, 760 00:34:40,389 --> 00:34:42,370 se vain sattuu olemaan nolla, mutta yritän 761 00:34:42,370 --> 00:34:44,940 laittaa sen sijainti joka ei kuulu minulle. 762 00:34:44,940 --> 00:34:50,900 Lisäksi täällä, 40 tavua yhdessä lohkot ovat varmasti menetetään ennätys 1. 763 00:34:50,900 --> 00:34:56,500 Tämä johtuu siitä, kun soitan malloc täällä, en koskaan todella vapaa muisti. 764 00:34:56,500 --> 00:34:58,140 >> Joten kuinka voimme korjata tämän? 765 00:34:58,140 --> 00:35:02,970 Anna minun mennä eteenpäin ja olla hieman turvallisempi ja tehdä 9 siellä ja haluaisin tästä ilmaiseksi x. 766 00:35:02,970 --> 00:35:04,820 Tämä on uusi toiminto tänään. 767 00:35:04,820 --> 00:35:11,520 Jos minä nyt uusintana tehdä muisti piste slash, Katsotaanpa ajaa valgrind sitä uudelleen, 768 00:35:11,520 --> 00:35:14,990 maksimoida minun ikkuna ja paina Enter. 769 00:35:14,990 --> 00:35:16,900 Nyt, se on hyvä. 770 00:35:16,900 --> 00:35:19,590 He haudata hyvä uutinen kaikissa tämän tuotoksen. 771 00:35:19,590 --> 00:35:20,810 Kaikki pino lohkot olivat vapaat. 772 00:35:20,810 --> 00:35:23,604 Tulemme takaisin mitä kasaan on, mutta ei vuotoja ovat mahdollisia. 773 00:35:23,604 --> 00:35:25,520 Joten tämä on vain yksi työkalu työkalusarja 774 00:35:25,520 --> 00:35:30,220 jolla voit alkaa löytää nyt virheitä, kuten että. 775 00:35:30,220 --> 00:35:34,532 >> Mutta katsotaanpa mitä lisää voi mennä pieleen. 776 00:35:34,532 --> 00:35:38,890 Katsotaanpa siirtyminen nyt todella ratkaista ongelman. 777 00:35:38,890 --> 00:35:42,440 Sivuhuomautuksena, jos tämä lievittää hieman sekaannusta tai jännitystä, 778 00:35:42,440 --> 00:35:43,430 tämä on nyt hauska. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Joo. 781 00:35:46,900 --> 00:35:49,040 Se on aika hyvä. 782 00:35:49,040 --> 00:35:50,890 Koska osoittimet ovat osoitteet ja osoitteet 783 00:35:50,890 --> 00:35:53,098 ovat yleensä sopimuksen mukaan kirjoitettu heksadesimaalimuodossa. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, tämä on hauska nyt. 785 00:35:54,650 --> 00:35:58,390 Oli miten oli, joten katsotaanpa nyt todella ratkaista ongelman. 786 00:35:58,390 --> 00:36:00,840 Tämä on ollut erittäin, Super matalan tason toistaiseksi, 787 00:36:00,840 --> 00:36:03,950 ja voimme todella tehdä hyödyllinen asioita nämä matalan tason tiedot. 788 00:36:03,950 --> 00:36:06,710 >> Joten otimme käyttöön muutaman viikon sitten käsite array. 789 00:36:06,710 --> 00:36:09,177 Array oli mukavaa, koska on vaikea puhdistaa meidän koodi 790 00:36:09,177 --> 00:36:11,760 koska jos halusimme kirjoittaa ohjelma useita opiskelijoita 791 00:36:11,760 --> 00:36:15,270 tai useampia nimiä ja taloja ja asuntoloissa ja korkeakoulujen ja kaikki tämä, 792 00:36:15,270 --> 00:36:19,430 voisimme tallentaa kaiken enemmän siististi sisällä array. 793 00:36:19,430 --> 00:36:23,039 Mutta ehdottaa yhtä haittapuoli array toistaiseksi. 794 00:36:23,039 --> 00:36:26,080 Vaikka et ole kärsinyt itse ohjelmassa, vain vaistomaisesti, 795 00:36:26,080 --> 00:36:30,870 mikä on huono asia noin array, kenties? 796 00:36:30,870 --> 00:36:32,337 Kuulen joidenkin sivuääniä. 797 00:36:32,337 --> 00:36:34,170 Yleisö: On vaikeaa muuttaa kokoa. 798 00:36:34,170 --> 00:36:36,128 DAVID MALAN: Vaikea muuttaa kokoa. 799 00:36:36,128 --> 00:36:38,660 Et voi muuttaa kokoa array, itse asiassa, sinänsä 800 00:36:38,660 --> 00:36:43,040 C. Voit jakaa toisen array, siirtää kaiken vanhan 801 00:36:43,040 --> 00:36:45,380 uuteen, ja nyt on ylimääräistä tilaa, 802 00:36:45,380 --> 00:36:47,469 mutta se ei ole kuin kieli kuten Java tai Python 803 00:36:47,469 --> 00:36:49,760 tai useita muita kielet, jolla jotkut teistä 804 00:36:49,760 --> 00:36:52,070 saattaa olla tuttu, jos olet voi vain pitää lisäämällä asiat 805 00:36:52,070 --> 00:36:53,930 kyllästymiseen loppuun array. 806 00:36:53,930 --> 00:36:57,880 Kun sinulla on joukko koko 6, joka on sen koko, 807 00:36:57,880 --> 00:37:01,970 ja niin paljon kuin ajatus aikaisemmin jonka puskuri tietyn koon, 808 00:37:01,970 --> 00:37:05,940 sinun täytyy arvata ulos portista mitä kokoa haluat sen olevan? 809 00:37:05,940 --> 00:37:07,880 Jos arvaa liian iso, olet tuhlaa tilaa. 810 00:37:07,880 --> 00:37:10,950 Jos arvaa liian pieni, sinun voi tallentaa että tiedot, ainakin 811 00:37:10,950 --> 00:37:12,940 ilman paljon enemmän työtä. 812 00:37:12,940 --> 00:37:18,180 >> Joten tänään, kiitos osoittimia, voimme Aloita ompelemalla yhteen meidän omia 813 00:37:18,180 --> 00:37:20,989 tietorakenteita, ja Itse asiassa tässä on jotain 814 00:37:20,989 --> 00:37:23,030 joka näyttää hieman enemmän arvoituksellinen ensi silmäyksellä, 815 00:37:23,030 --> 00:37:26,440 mutta tämä on mitä me kutsumme liittyy luettelosta, ja sen nimi sellainen on yhteenveto 816 00:37:26,440 --> 00:37:26,940 se. 817 00:37:26,940 --> 00:37:29,550 Se on luettelo numeroita, tai Tässä tapauksessa listan numeroita, 818 00:37:29,550 --> 00:37:33,480 mutta se voisi olla luettelon mitään, mutta se toisiinsa tavalla nuolet, 819 00:37:33,480 --> 00:37:36,380 ja ota arvaus mitä tekniikkaa 820 00:37:36,380 --> 00:37:38,310 aiomme pystyä pistellä yhdessä, 821 00:37:38,310 --> 00:37:42,540 tavallaan kuin popcornia kanssa kierre, linkitettyjen listojen suorakulmioita täällä? 822 00:37:42,540 --> 00:37:43,936 Sen numerot? 823 00:37:43,936 --> 00:37:45,560 Mikä taustalla kieli ominaisuus? 824 00:37:45,560 --> 00:37:46,350 >> Yleisö: osoitin. 825 00:37:46,350 --> 00:37:47,308 >> DAVID MALAN: osoitin. 826 00:37:47,308 --> 00:37:51,700 Joten jokainen näistä nuolet täällä edustaa osoitin tai vain osoite. 827 00:37:51,700 --> 00:37:54,590 Eli toisin sanoen, jos haluan tallentaa listan numeroita, 828 00:37:54,590 --> 00:37:59,040 En voi vain tallentaa se jos haluan kykyä kasvaa ja kutistua 829 00:37:59,040 --> 00:38:00,990 tietoni rakenne array. 830 00:38:00,990 --> 00:38:03,000 Joten minun täytyy olla vähän enemmän hienostuneisuutta, 831 00:38:03,000 --> 00:38:05,720 mutta huomaa, että tämä kuva eräänlainen ehdottaa 832 00:38:05,720 --> 00:38:08,650 että jos olet juuri vähän viestiketjut yhdistää kaiken yhdessä, 833 00:38:08,650 --> 00:38:13,100 luultavasti ei ole niin vaikea tehdä tilaa välissä kaksi näistä suorakulmioita 834 00:38:13,100 --> 00:38:16,750 tai kaksi näistä solmuja, kuten aloitamme kutsumalla heitä, laittaa uusi solmu, 835 00:38:16,750 --> 00:38:19,547 ja sitten joitakin uusia kierre, vain oja kolme solmua yhdessä, 836 00:38:19,547 --> 00:38:22,880 ensimmäinen, viimeinen, ja yksi että juuri työnnetty keskelle. 837 00:38:22,880 --> 00:38:26,000 >> Ja todellakin linkitetty lista, toisin array, on dynaaminen. 838 00:38:26,000 --> 00:38:27,840 Se voi kasvaa ja se voi kutistua ja et 839 00:38:27,840 --> 00:38:32,434 täytyy tietää tai välitä etukäteen, miten paljon tietoa aiot olla varastoinnin, 840 00:38:32,434 --> 00:38:35,600 mutta se osoittautuu meidän on oltava hieman varovainen miten toteuttaa tämä. 841 00:38:35,600 --> 00:38:39,070 Joten Katsotaanpa ensin miettiä, miten toteutamme yhden näistä pienistä suorakulmioita. 842 00:38:39,070 --> 00:38:40,690 Se on helppo toteuttaa int. 843 00:38:40,690 --> 00:38:44,000 Sanoit int n ja sitten saat 4 tavua varten int, 844 00:38:44,000 --> 00:38:49,089 mutta miten saan int, kutsuvat sitä n, ja sitten osoitin, kutsukaamme sitä seuraava. 845 00:38:49,089 --> 00:38:50,880 Voisimme kutsua näitä asiat mitä haluamme 846 00:38:50,880 --> 00:38:53,590 mutta tarvitsen mukautetun tietorakennetta. 847 00:38:53,590 --> 00:38:54,257 Joo? 848 00:38:54,257 --> 00:38:57,020 >> Yleisö: Ampersand [äänetön]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID MALAN: Joten Ampersand aiomme käyttää saada osoitteen solmun mahdollisesti. 850 00:39:00,940 --> 00:39:02,740 Mutta tarvitsemme toisen piirre C, jotta 851 00:39:02,740 --> 00:39:06,700 antaa minulle mahdollisuuden luoda Tämä tapa suorakulmio, tämä custom 852 00:39:06,700 --> 00:39:08,919 muuttuja jos haluatte, muistiin. 853 00:39:08,919 --> 00:39:09,710 Yleisö: struct. 854 00:39:09,710 --> 00:39:10,626 DAVID MALAN: struct. 855 00:39:10,626 --> 00:39:14,310 Recall viime viikolla, esittelimme struct, tämä suhteellisen yksinkertainen avainsanan 856 00:39:14,310 --> 00:39:16,254 jonka avulla meitä tekemään asioita, kuten tämä. 857 00:39:16,254 --> 00:39:18,420 C ei tullut tiedot rakenne kutsutaan opiskelija. 858 00:39:18,420 --> 00:39:22,190 Sen mukana tulee int ja kellua ja nieriää ja kuten, mutta se ei tule opiskelija, 859 00:39:22,190 --> 00:39:26,750 mutta voimme luoda opiskelija tietotyyppi, opiskelija rakenne, tällä syntaksilla 860 00:39:26,750 --> 00:39:27,250 täällä. 861 00:39:27,250 --> 00:39:28,350 Ja näet tämän uudestaan ​​ja uudestaan. 862 00:39:28,350 --> 00:39:30,426 Joten älä ole huolissasi ulkoa avainsanoja, 863 00:39:30,426 --> 00:39:33,300 mutta avainsanan, joka on tärkeää on juuri siitä, että sanoimme struct 864 00:39:33,300 --> 00:39:37,590 ja sitten kutsuimme opiskelija ja sisällä Opiskelijan oli nimi ja talon 865 00:39:37,590 --> 00:39:39,390 tai asuntolan tai vastaavaa. 866 00:39:39,390 --> 00:39:41,980 >> Ja nyt tänään, nyt ehdottaa tätä. 867 00:39:41,980 --> 00:39:45,240 Olen lisännyt muutaman sanan, mutta jos haluan toteuttaa tämän suorakulmion se 868 00:39:45,240 --> 00:39:48,440 sai sekä int ja osoitin, tiedätkö mitä, minä olen 869 00:39:48,440 --> 00:39:51,540 menossa julistaa struct kutsutaan solmu. 870 00:39:51,540 --> 00:39:55,630 Olen myös, sen sisälle, aikoo sanoa että solmu, tämä suorakulmio, on int 871 00:39:55,630 --> 00:39:59,730 ja me kutsumme sitä n ja sillä on seuraava osoitin. 872 00:39:59,730 --> 00:40:02,540 Ja tämä on hieman verbose, mutta jos ajattelee sitä, 873 00:40:02,540 --> 00:40:07,300 nuolet, jotka olivat kuva hetki sitten ovat, mitä tietoja tyyppi? 874 00:40:07,300 --> 00:40:12,330 Kun nämä molemmat nuolet osoittaa millaista tietojen rakenne? 875 00:40:12,330 --> 00:40:14,332 Se ei osoita vain int sinänsä. 876 00:40:14,332 --> 00:40:16,165 Se osoittaa koko suorakulmainen juttu 877 00:40:16,165 --> 00:40:18,720 ja että suorakulmainen asia, sanoimme, kutsutaan solmu. 878 00:40:18,720 --> 00:40:21,720 Ja niin me tavallaan on rekursiivisesti määritellä tästä niin 879 00:40:21,720 --> 00:40:26,270 että solmu, me sanomme, sisältää int nimeltään n 880 00:40:26,270 --> 00:40:31,070 ja osoitin sanottujen seuraavan ja millaisia ​​tietoja rakenteesta, johon 881 00:40:31,070 --> 00:40:35,770 että osoitin on ilmeisesti olemaan struct solmu. 882 00:40:35,770 --> 00:40:41,550 >> Joten tämä on ärsyttävän monisanainen ja vain olla pikkumainen, 883 00:40:41,550 --> 00:40:44,100 miksi emme voi vain sanoa, mikä rehellisesti 884 00:40:44,100 --> 00:40:46,860 näyttää paljon enemmän luettavissa, johtuu muistuttaa, että C lukea 885 00:40:46,860 --> 00:40:48,710 asioita ylhäältä alas, vasemmalta oikealle. 886 00:40:48,710 --> 00:40:54,120 Se ei ole kunnes saamme puolipiste että avainsana solmu todella on olemassa. 887 00:40:54,120 --> 00:40:57,980 Joten jos haluamme olla tällainen syklinen viittaus sisällä tietoja 888 00:40:57,980 --> 00:41:02,120 rakenne, meidän täytyy tehdä tämä, jos sanomme struct solmu huipulla, joka 889 00:41:02,120 --> 00:41:06,770 antaa meille enää tapa kuvata tätä asia, sitten sisällä sanomme struct solmu, 890 00:41:06,770 --> 00:41:09,560 ja sitten aivan viimeinen rivi sanomme, kaikki hyvin, C, muuten, 891 00:41:09,560 --> 00:41:12,060 vain soittaa tämä koko hemmetin asia solmu ja lopettaa 892 00:41:12,060 --> 00:41:14,360 hakusanalla struct kokonaan. 893 00:41:14,360 --> 00:41:18,030 Joten tämä on vain eräänlainen syntaktisten temppu, joka lopulta antaa meidän luoda 894 00:41:18,030 --> 00:41:21,370 jotain, joka näyttää täsmälleen samalta kuin tämä. 895 00:41:21,370 --> 00:41:25,010 >> Joten jos oletamme nyt voimme toteuttaa tämä asia C, 896 00:41:25,010 --> 00:41:28,040 miten me oikeastaan aloittaa liikkumisesta tämä? 897 00:41:28,040 --> 00:41:32,360 No, itse asiassa, meidän täytyy tehdä, on kerrata vasemmalta oikealle ja vain 898 00:41:32,360 --> 00:41:35,960 Tällainen lisätä solmuja tai poistaa solmut tai etsiä asioita minne haluamme, 899 00:41:35,960 --> 00:41:39,560 mutta tehdä tämän, mennään eteenpäin ja tehdä asiat hieman todellista, koska tämä 900 00:41:39,560 --> 00:41:42,560 on ollut erittäin matalan tason toistaiseksi. 901 00:41:42,560 --> 00:41:45,700 Onko joku kirjaimellisesti haluaisi olla ensimmäinen? 902 00:41:45,700 --> 00:41:46,200 OK. 903 00:41:46,200 --> 00:41:47,092 Tule ylös. 904 00:41:47,092 --> 00:41:47,800 Mikä on nimesi? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: David. 906 00:41:48,499 --> 00:41:49,290 DAVID MALAN: David. 907 00:41:49,290 --> 00:41:49,998 Kiva tavata. 908 00:41:49,998 --> 00:41:50,960 Minä myös. 909 00:41:50,960 --> 00:41:52,450 Selvä. 910 00:41:52,450 --> 00:41:53,990 Ja tarvitsemme numero 9. 911 00:41:53,990 --> 00:41:55,240 Ei niin hyvä kuin ensimmäinen, ehkä. 912 00:41:55,240 --> 00:41:56,430 OK, numero 9. 913 00:41:56,430 --> 00:41:59,667 Numero 17, kiitos. 914 00:41:59,667 --> 00:42:01,000 Anna minun mennä takaisin hieman kauempana. 915 00:42:01,000 --> 00:42:03,980 Numero 22, kiitos, ja entä kauemmas taaksepäin 916 00:42:03,980 --> 00:42:06,344 jos näen käsiä kaikki valo tai ei. 917 00:42:06,344 --> 00:42:08,010 Joku on vapaaehtoinen oikeassa. 918 00:42:08,010 --> 00:42:08,968 Haluatko keksiä? 919 00:42:08,968 --> 00:42:10,450 Kyynärvarresta on väkisin menossa ylös. 920 00:42:10,450 --> 00:42:12,340 OK, 17. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 on tulossa alas. 923 00:42:15,120 --> 00:42:18,450 Onko kukaan muu haluatko forcefully-- Tule ylös. 924 00:42:18,450 --> 00:42:21,030 Varsinainen vapaaehtoinen. 925 00:42:21,030 --> 00:42:23,330 >> Niin hyvin nopeasti, jos te voisi järjestää 926 00:42:23,330 --> 00:42:26,550 itsenne aivan kuten solmut ruudulla. 927 00:42:26,550 --> 00:42:27,510 Kiitos. 928 00:42:27,510 --> 00:42:29,234 Ja voit olla 26. 929 00:42:29,234 --> 00:42:30,650 Hyvä ja nopea esittelyt. 930 00:42:30,650 --> 00:42:32,139 Joten olen Daavidin ja olet myös? 931 00:42:32,139 --> 00:42:32,680 DAVID: David. 932 00:42:32,680 --> 00:42:33,721 DAVID MALAN: Ja sinä olet? 933 00:42:33,721 --> 00:42:34,229 JAKE: Jake. 934 00:42:34,229 --> 00:42:34,729 SUE: Sue. 935 00:42:34,729 --> 00:42:35,229 ALEX: Alex. 936 00:42:35,229 --> 00:42:36,475 RAPHAEL: Raphael. 937 00:42:36,475 --> 00:42:37,100 TAYLOR: Taylor. 938 00:42:37,100 --> 00:42:37,466 DAVID MALAN: Taylor. 939 00:42:37,466 --> 00:42:37,590 Erinomainen. 940 00:42:37,590 --> 00:42:39,810 Joten nämä ovat vapaaehtoisia tänään ja mennä eteenpäin 941 00:42:39,810 --> 00:42:43,090 ja siirtää vähän, että tapa, ja vain mennä eteenpäin ja pitää 942 00:42:43,090 --> 00:42:47,024 tilalla numerot kuin olet tai ensimmäinen merkki ja vasemmalla kädellä, 943 00:42:47,024 --> 00:42:48,940 mennä eteenpäin ja vain toteuttaa nämä nuolet, vain 944 00:42:48,940 --> 00:42:51,360 niin, että vasen käsi on kirjaimellisesti osoittamalla mitä pitäisi kohta 945 00:42:51,360 --> 00:42:54,610 klo, ja anna itsellesi tilaa niin, että voimme visuaalisesti nähdä kädet todella 946 00:42:54,610 --> 00:42:58,120 osoittaa, ja voit vain pisteen tavallaan on maa on hieno. 947 00:42:58,120 --> 00:43:03,040 >> Joten tässä meillä on linkitetty lista yhden, kaksi, kolme, neljä, viisi solmua aluksi, 948 00:43:03,040 --> 00:43:05,860 ja huomaat meillä on tämä erityinen osoitin alussa kuka 949 00:43:05,860 --> 00:43:09,770 avain koska meillä on seurata Koko pituudeltaan lista jotenkin. 950 00:43:09,770 --> 00:43:13,590 Nämä kaverit, vaikka he jäljellä oikealle, takaisin takaisin muistiin, 951 00:43:13,590 --> 00:43:15,950 he voivat itse olla missä tahansa tietokoneen muistiin. 952 00:43:15,950 --> 00:43:18,240 Joten nämä kaverit voivat olla seisoo tahansa vaiheessa 953 00:43:18,240 --> 00:43:20,960 ja se on hieno, kunhan ne ovat todella suunnattu toisiaan, 954 00:43:20,960 --> 00:43:22,770 mutta pitää asiat puhdas ja yksinkertainen, käymme 955 00:43:22,770 --> 00:43:25,728 vain vetää ne vasemmalta oikealle kuten tämä, mutta voisi olla massiivinen aukkoja 956 00:43:25,728 --> 00:43:26,790 välillä näiden solmujen. 957 00:43:26,790 --> 00:43:30,710 >> Nyt, jos haluan todella lisätä joitakin uusi arvo, mennään eteenpäin ja tehdä tämän. 958 00:43:30,710 --> 00:43:33,720 Meillä on nyt tilaisuus valita toiseen solmuun. 959 00:43:33,720 --> 00:43:39,820 Sano nyt alkajaisiksi mallocing 55. 960 00:43:39,820 --> 00:43:41,320 Voisiko joku pahaksesi malloc? 961 00:43:41,320 --> 00:43:42,280 OK, tule ylös. 962 00:43:42,280 --> 00:43:42,992 Mikä on nimesi? 963 00:43:42,992 --> 00:43:43,700 RAINBOW: Rainbow. 964 00:43:43,700 --> 00:43:44,050 DAVID MALAN: Rainbow? 965 00:43:44,050 --> 00:43:44,810 Selvä. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 Tule ylös. 968 00:43:47,450 --> 00:43:51,610 Joten nyt meidän on kysyttävä itseltämme algoritmisesti jossa voimme laittaa 55. 969 00:43:51,610 --> 00:43:53,610 Joten me kaikki tiedämme, tietenkin, jossa hän luultavasti 970 00:43:53,610 --> 00:43:55,401 kuuluu jos me yritämme pitää tämä lajitellaan 971 00:43:55,401 --> 00:43:58,299 ja jos te voisi ottaa yhden askel taaksepäin joten emme putoa 972 00:43:58,299 --> 00:43:59,590 vaiheessa, että olisi hienoa. 973 00:43:59,590 --> 00:44:01,420 Joten oikeastaan, Rainbow, aloittaa täällä kanssani, 974 00:44:01,420 --> 00:44:04,200 koska me tietokoneen nyt voi näkevät vain yksi muuttuja kerrallaan. 975 00:44:04,200 --> 00:44:05,190 Joten jos tämä on ensimmäinen solmu. 976 00:44:05,190 --> 00:44:07,160 Huomaa, hän ei ole solmu, hän on vain osoitin, 977 00:44:07,160 --> 00:44:10,270 ja siksi hän vetoa olla vain koko osoittimen, ei 978 00:44:10,270 --> 00:44:11,780 yksi niistä koko suorakulmioita. 979 00:44:11,780 --> 00:44:16,650 Joten aiomme tarkistaa jokaisen iterointia on 55 vähemmän kuin 9? 980 00:44:16,650 --> 00:44:17,150 Ei. 981 00:44:17,150 --> 00:44:19,060 On 55 vähemmän kuin 17? 982 00:44:19,060 --> 00:44:19,720 Ei. 983 00:44:19,720 --> 00:44:20,800 Alle 22? 984 00:44:20,800 --> 00:44:22,020 Alle 26? 985 00:44:22,020 --> 00:44:23,390 Alle 34? 986 00:44:23,390 --> 00:44:25,890 Ja niin nyt, ilmeisesti Rainbow kuuluu lopussa. 987 00:44:25,890 --> 00:44:27,270 Joten oltava selkeä, ja mitä oli nimesi, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID MALAN: Joten keskuudessa Taylorin vasemmalla ja Rainbow kädet täällä, 990 00:44:32,510 --> 00:44:38,324 jonka käsi on osoitat mitä velvoittaa lisätä 55 tähän luetteloon? 991 00:44:38,324 --> 00:44:39,240 Mitä meidän pitää tehdä? 992 00:44:39,240 --> 00:44:39,700 Joo? 993 00:44:39,700 --> 00:44:41,140 >> Yleisö: Taylorin käsi on kohtaan vasemmalle. 994 00:44:41,140 --> 00:44:41,680 >> DAVID MALAN: Aivan. 995 00:44:41,680 --> 00:44:43,800 Joten lisäämällä solmu osaksi listan loppuun 996 00:44:43,800 --> 00:44:47,140 on melko yksinkertainen, koska Taylor vain on kohtaan, eikä maata kohti 997 00:44:47,140 --> 00:44:49,640 tai me kutsumme sitä null, null on eräänlainen puuttuessa 998 00:44:49,640 --> 00:44:51,640 osoittimen tai erityinen nolla osoitin, olet 999 00:44:51,640 --> 00:44:53,740 menossa kohta vasemmalla käsi Rainbow ja sitten Rainbow, 1000 00:44:53,740 --> 00:44:55,910 Missä vasenta käytetyt luultavasti kohta? 1001 00:44:55,910 --> 00:44:56,570 Alas. 1002 00:44:56,570 --> 00:45:00,140 Se ei ole hyvä, jos hänen kätensä on eräänlainen ja osoittaa tehoilla tai lajitella tahansa 1003 00:45:00,140 --> 00:45:00,640 millä tavalla. 1004 00:45:00,640 --> 00:45:02,407 Se olisi otettava huomioon roskat arvo, 1005 00:45:02,407 --> 00:45:04,240 mutta jos hän osoittaa jotkut tunnettu arvo käymme 1006 00:45:04,240 --> 00:45:07,360 kutsuvat sitä nolla tai nolla, se on OK koska meillä on termi tässä 1007 00:45:07,360 --> 00:45:09,390 ja tiedämme luettelo on nyt valmis. 1008 00:45:09,390 --> 00:45:11,550 >> Niin mitä toinen suhteellisen yksinkertainen tapaus? 1009 00:45:11,550 --> 00:45:13,125 Voisimmeko malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Tule ylös. 1011 00:45:14,010 --> 00:45:14,782 Mikä on nimesi? 1012 00:45:14,782 --> 00:45:15,490 TIFFANY: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID MALAN: Anteeksi? 1014 00:45:16,000 --> 00:45:16,470 TIFFANY: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID MALAN: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Selvä. 1017 00:45:17,110 --> 00:45:19,071 Tiffany on malloced arvolla 5. 1018 00:45:19,071 --> 00:45:19,570 Tule ylös. 1019 00:45:19,570 --> 00:45:23,820 Tämä on suhteellisen helppoa myös, mutta Tarkastellaan järjestystä toiminnan nyt. 1020 00:45:23,820 --> 00:45:25,820 Se oli melko helppo Taylor lopussa. 1021 00:45:25,820 --> 00:45:30,302 Numero 5 on tietenkin pienempi kuin 9, ja niin meillä on David, olemme Tiffany, 1022 00:45:30,302 --> 00:45:31,260 ja mikä oli nimesi? 1023 00:45:31,260 --> 00:45:31,680 >> JAKE: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID MALAN: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake, David. 1026 00:45:34,300 --> 00:45:36,580 Jonka käsi olisi päivitettävä ensin? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Mitä haluat tehdä täällä? 1029 00:45:40,590 --> 00:45:45,244 On pari mahdollisuuksia, mutta siellä on myös yksi tai useampi väärä tavalla. 1030 00:45:45,244 --> 00:45:46,620 >> Yleisö: Aloita vasemmassa reunassa. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID MALAN: Aloita vasemmanpuoleisin. 1032 00:45:47,800 --> 00:45:49,008 Kuka vasemmanpuoleisin täällä sitten? 1033 00:45:49,008 --> 00:45:49,700 Yleisö: Ensimmäinen. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID MALAN: OK. 1035 00:45:50,366 --> 00:45:53,781 Joten aloittaa ensimmäisen ja missä sinä haluat päivittää Daavidin käsiin olla? 1036 00:45:53,781 --> 00:45:54,780 Yleisö: Kohti 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID MALAN: OK. 1038 00:45:55,446 --> 00:45:59,026 Daavid, piste viisi tai Tiffany täällä, ja nyt? 1039 00:45:59,026 --> 00:46:01,072 >> Yleisö: Tiffany viittaa 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID MALAN: Perfect, paitsi Binky n johtaja juuri sellainen putosi, eikö? 1041 00:46:04,030 --> 00:46:06,820 Koska mitä vikaa tämä kuva kirjaimellisesti? 1042 00:46:06,820 --> 00:46:08,070 Yleisö: Mitään ei osoittaa. 1043 00:46:08,070 --> 00:46:09,945 DAVID MALAN: Mikään ei ole osoittaa Jake nyt. 1044 00:46:09,945 --> 00:46:13,360 Olemme kirjaimellisesti orvoksi 9 ja 17, ja olemme kirjaimellisesti 1045 00:46:13,360 --> 00:46:18,450 vuotanut kaikki tämä muisti, koska mukaan päivittäminen Davidin käden ensimmäinen, joka on 1046 00:46:18,450 --> 00:46:21,660 hieno sikäli kuin se on oikein osoittaen Tiffany nyt, 1047 00:46:21,660 --> 00:46:25,410 mutta jos kukaan ei ollut kaukokatseisuutta osoitat Jake, 1048 00:46:25,410 --> 00:46:27,490 sitten olemme menettäneet kokonaisuudessaan tähän luetteloon. 1049 00:46:27,490 --> 00:46:28,200 Joten kumota. 1050 00:46:28,200 --> 00:46:30,950 Joten se oli hyvä asia kompastua mutta nyt korjata nyt. 1051 00:46:30,950 --> 00:46:33,624 Mitä meidän pitäisi tehdä ensin sen sijaan? 1052 00:46:33,624 --> 00:46:34,124 Joo? 1053 00:46:34,124 --> 00:46:35,791 >> Yleisö: Tiffany olisi piste 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID MALAN: En voi saada, että lähellä sinua. 1055 00:46:37,582 --> 00:46:38,720 Kenen pitäisi piste 9? 1056 00:46:38,720 --> 00:46:39,220 >> Yleisö: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID MALAN: Selvä. 1058 00:46:39,390 --> 00:46:41,200 Joten Tiffany ensimmäiseksi pisteen 9. 1059 00:46:41,200 --> 00:46:43,550 Joten Tiffany olisi otettava on sama arvo 1060 00:46:43,550 --> 00:46:45,820 David, joka näyttää tarpeeton hetkeksi, 1061 00:46:45,820 --> 00:46:48,820 mutta se on hieno koska nyt, toinen vaihe, voimme päivittää Davidin käden 1062 00:46:48,820 --> 00:46:52,680 pisteeseen Tiffany, ja sitten jos me juuri sellainen puhdas asioita 1063 00:46:52,680 --> 00:46:55,740 ikään kuin tämä on tavallaan keväinen, nyt se oikea asennus. 1064 00:46:55,740 --> 00:46:56,700 Niin erinomainen. 1065 00:46:56,700 --> 00:46:57,970 Joten nyt olemme melkein perillä. 1066 00:46:57,970 --> 00:47:01,075 Katsotaanpa aseta yksi lopullinen arvo kuin arvo 20. 1067 00:47:01,075 --> 00:47:03,010 Jos voisimme malloc yksi lopullinen vapaaehtoinen? 1068 00:47:03,010 --> 00:47:04,140 Tule ylös. 1069 00:47:04,140 --> 00:47:06,224 Joten tämä on hieman mutkikkaampi. 1070 00:47:06,224 --> 00:47:08,390 Mutta oikeasti, koodi olemme kirjallisesti, vaikkakin suullisesti, 1071 00:47:08,390 --> 00:47:10,610 on aivan kuin ottaa nippu ja jos olosuhteet nyt, eikö? 1072 00:47:10,610 --> 00:47:12,318 Meillä oli kunnossa tarkistaa, jos se kuuluu 1073 00:47:12,318 --> 00:47:13,840 lopussa, ehkä alussa. 1074 00:47:13,840 --> 00:47:15,940 Tarvitsemme jonkinlaisen silmukan löytää paikka keskellä. 1075 00:47:15,940 --> 00:47:17,400 Joten tehdä, että mikä on nimesi? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID MALAN: Eric? 1078 00:47:18,340 --> 00:47:18,660 Eric. 1079 00:47:18,660 --> 00:47:19,368 Kiva tavata. 1080 00:47:19,368 --> 00:47:20,490 Joten meillä on 20. 1081 00:47:20,490 --> 00:47:21,220 Alle viisi? 1082 00:47:21,220 --> 00:47:21,530 Ei. 1083 00:47:21,530 --> 00:47:22,160 Alle yhdeksän? 1084 00:47:22,160 --> 00:47:22,410 Ei. 1085 00:47:22,410 --> 00:47:23,050 Alle 17? 1086 00:47:23,050 --> 00:47:23,550 Ei. 1087 00:47:23,550 --> 00:47:23,740 OK. 1088 00:47:23,740 --> 00:47:25,701 Hän kuuluu tässä ja teidän nimenne taas ovat? 1089 00:47:25,701 --> 00:47:26,200 SUE: Sue. 1090 00:47:26,200 --> 00:47:26,880 DAVID MALAN: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID MALAN: Sue, Alex, ja? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 DAVID MALAN: Eric. 1095 00:47:30,120 --> 00:47:32,140 Joiden kädet täytyy saada päivitetään ensin? 1096 00:47:32,140 --> 00:47:32,930 >> Yleisö: Eric. 1097 00:47:32,930 --> 00:47:33,429 OK. 1098 00:47:33,429 --> 00:47:35,200 Joten Ericin olisi osoitat missä? 1099 00:47:35,200 --> 00:47:35,930 22. 1100 00:47:35,930 --> 00:47:36,430 Hyvä. 1101 00:47:36,430 --> 00:47:38,180 Ja nyt, mitä seuraavaksi? 1102 00:47:38,180 --> 00:47:40,800 Sue voi sitten piste Eric ja nyt, jos te vain 1103 00:47:40,800 --> 00:47:44,077 tehdä joitakin huone, joka on hieno visuaalisesti, nyt olemme tehneet lisäys. 1104 00:47:44,077 --> 00:47:47,160 Joten nyt käsittelemään kysymystä mutta Kiitos paljon meidän vapaaehtoisille. 1105 00:47:47,160 --> 00:47:48,090 Erittäin hyvin tehty. 1106 00:47:48,090 --> 00:47:50,831 Voit pitää ne, jos haluat. 1107 00:47:50,831 --> 00:47:54,140 Ja meillä on kaunis jakaus lahja, jos haluat jokaisen haluavat viedä stressipallo. 1108 00:47:54,140 --> 00:47:56,030 Haluan vain välittää tämän alas. 1109 00:47:56,030 --> 00:47:58,430 Joten mikä on takeaway tämän? 1110 00:47:58,430 --> 00:48:02,430 Tämä näyttää olevan hämmästyttävä sikäli kuin meillä on nyt 1111 00:48:02,430 --> 00:48:06,360 esitteli vaihtoehto array, joka ei ole niin rajoitu 1112 00:48:06,360 --> 00:48:07,780 array noin kiinteä koko. 1113 00:48:07,780 --> 00:48:09,380 Ne voivat kasvaa dynaamisesti. 1114 00:48:09,380 --> 00:48:13,220 >> Mutta aivan kuten olemme nähneet viikkoa Aiemmin emme koskaan saa mitään ilmaiseksi, 1115 00:48:13,220 --> 00:48:15,740 kuten varmasti siellä kauppaa tehoilla. 1116 00:48:15,740 --> 00:48:18,890 Joten ylösalaisin liittyy lista, on tämä dynaamisuus? 1117 00:48:18,890 --> 00:48:21,590 Tämä kyky kasvaa ja rehellisesti, olisimme voineet tehdä delete 1118 00:48:21,590 --> 00:48:23,570 ja voisimme kutistua tarpeen mukaan. 1119 00:48:23,570 --> 00:48:24,710 Minkä hinnan maksamme? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Kaksi kertaa niin paljon tilaa, ensiksi. 1122 00:48:30,340 --> 00:48:34,010 Jos katsot kuvaa, ei enää olen tallentamiseksi kokonaislukujen lista. 1123 00:48:34,010 --> 00:48:36,740 Olen tallentamiseen luettelo kokonaislukuja plus viitteitä. 1124 00:48:36,740 --> 00:48:38,240 Joten olen kaksinkertaistaa määrä tilaa. 1125 00:48:38,240 --> 00:48:40,740 Nyt, ehkä se ei ole niin iso juttu 4 tavua, 8 tavua, 1126 00:48:40,740 --> 00:48:43,160 mutta se voi varmasti lisätä up suuria tietomääriä. 1127 00:48:43,160 --> 00:48:45,570 Mikä on toinen haittapuoli? 1128 00:48:45,570 --> 00:48:46,070 Joo? 1129 00:48:46,070 --> 00:48:48,010 >> Yleisö: Meidän on kulkevat ne yksi kerrallaan. 1130 00:48:48,010 --> 00:48:48,760 DAVID MALAN: Joo. 1131 00:48:48,760 --> 00:48:50,260 Meidän on kuljettava niitä yksi kerrallaan. 1132 00:48:50,260 --> 00:48:53,860 Tiedätkö mitä, luovuimme super kätevä ominaisuus hakasulkeen 1133 00:48:53,860 --> 00:48:57,240 merkintä, oikeammin tunnettu random access, 1134 00:48:57,240 --> 00:48:59,280 jossa voimme vain hypätä yksittäiselle elementin 1135 00:48:59,280 --> 00:49:01,470 mutta nyt jos minulla oli vielä minun vapaaehtoisia täällä, 1136 00:49:01,470 --> 00:49:04,660 jos halusin löytää numero 22, en voi vain 1137 00:49:04,660 --> 00:49:06,620 hypätä kannatin jotain jotain. 1138 00:49:06,620 --> 00:49:10,530 Minun täytyy käydä läpi lista, paljon kuten meidän haku esimerkkejä lineaarisesti, 1139 00:49:10,530 --> 00:49:12,260 löytää numero 22. 1140 00:49:12,260 --> 00:49:14,340 Joten me näytämme ovat maksaneet siellä. 1141 00:49:14,340 --> 00:49:16,430 Mutta voimme silti ratkaista muita ongelmia. 1142 00:49:16,430 --> 00:49:18,587 >> Itse asiassa, haluan esitellä vain pari grafiikka. 1143 00:49:18,587 --> 00:49:20,920 Joten jos olet ollut alas Mather ruokasalissa äskettäin, 1144 00:49:20,920 --> 00:49:23,320 voit muistaa, että niiden pinot tarjottimia näin, 1145 00:49:23,320 --> 00:49:26,300 me lainattu nämä maasta Annenberg ennen luokan. 1146 00:49:26,300 --> 00:49:28,930 Joten tämä pino tarjottimia, vaikka, on tyypillinen todella 1147 00:49:28,930 --> 00:49:30,860 Tietokoneen tietoarkisto rakenne. 1148 00:49:30,860 --> 00:49:32,910 On tietorakenne tietotekniikassa 1149 00:49:32,910 --> 00:49:38,010 tunnetaan pino joka hyvin kauniisti omiaan juuri tämä visuaalinen. 1150 00:49:38,010 --> 00:49:41,380 Joten jos jokainen näistä lokerot eivät ole tarjotin mutta kuten numero ja halusin 1151 00:49:41,380 --> 00:49:45,010 tallentaa numeroita, I voisi laittaa yksi tänne, 1152 00:49:45,010 --> 00:49:48,320 ja voisin laittaa toinen tänne, ja jatkaa pinoaminen numerot 1153 00:49:48,320 --> 00:49:53,180 päällekkäin toisen, ja mitä suotuisia tästä 1154 00:49:53,180 --> 00:49:55,450 on, että mitä vaikutuksia Näiden tietojen rakenne? 1155 00:49:55,450 --> 00:49:58,045 Joka määrä voi vetää ulos ensimmäinen kätevimmin? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 Viimeksi yksi laittaa siellä. 1158 00:50:03,030 --> 00:50:06,430 >> Joten tämä on mitä me kutsuisi tietojenkäsittelytiede LIFO tietorakennetta. 1159 00:50:06,430 --> 00:50:08,070 Last in, first out. 1160 00:50:08,070 --> 00:50:10,800 Ja näemme ennen pitkää miksi että voisi olla hyödyllistä, mutta nyt, 1161 00:50:10,800 --> 00:50:12,200 vain pitävät omaisuutta. 1162 00:50:12,200 --> 00:50:15,158 Ja se on typerää, jos luulet, miten ruokasalissa tekee sen. 1163 00:50:15,158 --> 00:50:17,910 Joka kerta he puhdas tarjottimia ja laittaa tuoreimmat niitä päälle, 1164 00:50:17,910 --> 00:50:22,160 sinulla voisi olla aiemmin puhdas mutta lopulta hyvin likainen ja pölyinen 1165 00:50:22,160 --> 00:50:24,360 lokero alareunassa jos et koskaan todella 1166 00:50:24,360 --> 00:50:26,820 saada pohjaan kyseisen pino, koska juuri 1167 00:50:26,820 --> 00:50:29,380 sysäämään uuden ja puhtaisiin sen päälle. 1168 00:50:29,380 --> 00:50:31,840 Sama voi tapahtua supermarket liian. 1169 00:50:31,840 --> 00:50:35,450 Jos sinulla on vitriinissä maidon ja joka kerta CVS 1170 00:50:35,450 --> 00:50:37,610 tai kuka saa enemmän maitoa, juuri työntää maidot 1171 00:50:37,610 --> 00:50:39,880 sinulla on jo taakse ja laitat uusia edessä, 1172 00:50:39,880 --> 00:50:43,088 olet menossa on joitakin melko kurja maito lopussa tietorakenteen, 1173 00:50:43,088 --> 00:50:46,390 koska se on aina alareunassa tai vastaavasti se on aina takana. 1174 00:50:46,390 --> 00:50:50,407 >> Mutta on toinen tapa ajatella riviin tiedot ja esimerkiksi tämä. 1175 00:50:50,407 --> 00:50:53,490 Jos olet yksi niistä ihmisistä, jotka tykkää riviin ulkopuolella Applen myymälöissä 1176 00:50:53,490 --> 00:50:55,610 kun uusi tuote tulee ulos, olet luultavasti 1177 00:50:55,610 --> 00:50:58,780 ei käytä pino tiedot rakenne koska olet 1178 00:50:58,780 --> 00:51:03,070 vieraannuttaisi kaikkia muita, jotka on vuori jopa ostaa joitakin uusia lelu. 1179 00:51:03,070 --> 00:51:06,610 Pikemminkin, olet luultavasti käyttäen millaisia ​​tietoja rakenne 1180 00:51:06,610 --> 00:51:10,050 tai millainen järjestelmä todellisessa maailmassa? 1181 00:51:10,050 --> 00:51:13,493 Toivottavasti se linja, tai enemmän asianmukaisesti tai enemmän Britannian kaltainen, jono. 1182 00:51:13,493 --> 00:51:17,700 Ja käy ilmi, jono on myös tietorakenne tietotekniikassa, 1183 00:51:17,700 --> 00:51:19,700 mutta jono on hyvin eri omaisuutta. 1184 00:51:19,700 --> 00:51:20,820 Se ei ole LIFO. 1185 00:51:20,820 --> 00:51:21,990 Last in, first out. 1186 00:51:21,990 --> 00:51:22,800 Jumala varjelkoon. 1187 00:51:22,800 --> 00:51:24,280 Se on sen sijaan FIFO. 1188 00:51:24,280 --> 00:51:26,110 Ensimmäinen sisällä ensimmäinen ulkona. 1189 00:51:26,110 --> 00:51:27,970 Ja se on hyvä asia oikeudenmukaisuuden "vuoksi 1190 00:51:27,970 --> 00:51:30,428 varmasti kun olet vuori up Super aikaisin aamulla. 1191 00:51:30,428 --> 00:51:33,400 Jos sinne ensin, sinua haluavat saada ensin samoin. 1192 00:51:33,400 --> 00:51:35,880 >> Ja niin kaikki nämä tiedot rakenteet, jonot ja pinot 1193 00:51:35,880 --> 00:51:39,220 ja rypäleterttuja muiden osoittautuu sinua voi ajatella tätä vain array. 1194 00:51:39,220 --> 00:51:41,820 Tämä on joukko, ehkä kiinteä koko 4, mutta se would 1195 00:51:41,820 --> 00:51:44,990 olla sellainen kiva jos voisimme vain kasa tarjottimet lähes äärettömän pitkä jos me 1196 00:51:44,990 --> 00:51:46,780 on, että monta lokeroa tai numeroita. 1197 00:51:46,780 --> 00:51:48,840 Joten ehkä haluamme Käytä linkitetty lista täällä, 1198 00:51:48,840 --> 00:51:51,800 mutta kompromissi tulee olemaan mahdollisesti, että tarvitsemme enemmän muistia, 1199 00:51:51,800 --> 00:51:55,930 vie hieman enemmän aikaa, mutta meidän eivät rajoita pinon korkeus, 1200 00:51:55,930 --> 00:51:59,550 aivan kuten Mather: n vitriinissä saattaa rajoittaa koko pinon, 1201 00:51:59,550 --> 00:52:03,117 ja niin nämä ovat suunnittelun päätöksiä tai vaihtoehtoja meille lopulta. 1202 00:52:03,117 --> 00:52:04,950 Joten nämä tiedot rakenteet, olemme aloittaneet 1203 00:52:04,950 --> 00:52:09,360 nähdä uusia ylärajan mahdollisesti mitä aiemmin oli huippunopea 1204 00:52:09,360 --> 00:52:11,260 ja jos jätämme pois tänään ja missä 1205 00:52:11,260 --> 00:52:13,200 me toivoa päästä on keskiviikko, käymme 1206 00:52:13,200 --> 00:52:15,740 alkaa tarkastella tietoja rakenne, joka antaa meidän etsi 1207 00:52:15,740 --> 00:52:18,260 kautta tietoja tukin päättymisaika uudelleen. 1208 00:52:18,260 --> 00:52:21,470 Ja näimme, että muistatte, viikolla nolla ja yksi binäärihaku tai jakaa 1209 00:52:21,470 --> 00:52:22,180 ja valloittaa. 1210 00:52:22,180 --> 00:52:26,240 Se tulee takaisin ja vielä parempaa, pyhä Graal tänä keskiviikkona 1211 00:52:26,240 --> 00:52:29,510 on keksiä tietorakenne, joka toimii aidosti 1212 00:52:29,510 --> 00:52:32,070 tai teoreettisesti vakio aika, jolloin 1213 00:52:32,070 --> 00:52:34,760 sillä ei ole väliä kuinka monta miljoonia tai miljardeja asioita 1214 00:52:34,760 --> 00:52:38,470 meillä tietorakenteessa, se vie meidät vakio aikaa, ehkä yksi askel 1215 00:52:38,470 --> 00:52:41,387 tai kaksi askelta tai 10 askelta, mutta jatkuva numerot vaiheet 1216 00:52:41,387 --> 00:52:42,970 etsiä tietojen rakenne. 1217 00:52:42,970 --> 00:52:46,300 Se todellakin on pyhä Graal mutta siitä lisää keskiviikkona. 1218 00:52:46,300 --> 00:52:49,045 Nähdään sitten. 1219 00:52:49,045 --> 00:52:53,704 >> [Musiikkia] 1220 00:52:53,704 --> 00:56:08,448