1 00:00:00,000 --> 00:00:01,110 >> [Musiikki soi] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. MALAN: Okei. 4 00:00:11,650 --> 00:00:15,610 Tämä on CS50, ja tämä on viikon lopussa neljä. 5 00:00:15,610 --> 00:00:19,420 Ja yksi aiheista tänään on, että digitaalisen aineiston tutkintaan, 6 00:00:19,420 --> 00:00:20,989 taidetta toipumassa tietoa. 7 00:00:20,989 --> 00:00:22,780 Ja todellakin, vaikka olet keskellä 8 00:00:22,780 --> 00:00:25,070 nyt Rauhan Three ja Breakout, ensi viikolla, 9 00:00:25,070 --> 00:00:27,880 keskitytään Juuri tällä alalla. 10 00:00:27,880 --> 00:00:30,686 >> Joten yksi hienoimmista työpaikoista koskaan oli palasi tutkijakoulu, 11 00:00:30,686 --> 00:00:33,560 kun olin työskennellyt paikallisten Middlesex County syyttäjän 12 00:00:33,560 --> 00:00:34,950 toimisto, tekee tutkintaan toimi. 13 00:00:34,950 --> 00:00:37,450 Niin olennaisesti, Massachusetts Valtiollinen poliisi, toisinaan 14 00:00:37,450 --> 00:00:40,100 työskenneltäessä Tapauksille tuoda asioita, kuten kiintolevyt 15 00:00:40,100 --> 00:00:42,185 ja levykkeet ja muistikortit ja vastaavat. 16 00:00:42,185 --> 00:00:44,060 Ja he toimittavat ne minulle ja minun mentori, 17 00:00:44,060 --> 00:00:48,070 ja tavoitteenamme oli löytää todisteita, jos oli mitään, näitä median. 18 00:00:48,070 --> 00:00:50,700 Nyt olet ehkä nähnyt välähdyksiä Tämän maailman tutkintaan 19 00:00:50,700 --> 00:00:53,000 tiedotusvälineissä, televisio ja elokuvat. 20 00:00:53,000 --> 00:00:55,730 Mutta työ minulla oli, ja daresay että maailma, 21 00:00:55,730 --> 00:00:57,550 ei ole aivan kuin näkisit sen. 22 00:00:57,550 --> 00:01:00,794 Katsotaanpa katsomaan mitä Olet varmasti nähnyt. 23 00:01:00,794 --> 00:01:01,460 [VIDEOTOISTOSTA] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Nyt, saada hyvä katsoa sinua. 26 00:01:05,380 --> 00:01:06,850 >> [Musiikki soi] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Pidä Sitä. 29 00:01:12,932 --> 00:01:13,657 Ajaa sen takaisin. 30 00:01:13,657 --> 00:01:14,733 >> Hetkinen. 31 00:01:14,733 --> 00:01:15,233 Mene oikealle. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 Tuolla. 34 00:01:16,870 --> 00:01:17,369 Jäätyä että. 35 00:01:17,369 --> 00:01:17,930 Full-screen. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Jäätyä että. 38 00:01:18,875 --> 00:01:20,160 Tiukentaa ylös, että sinä? 39 00:01:20,160 --> 00:01:22,126 >> -Vector Kauppaa näillä kaveri takapyörä. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom Sisään täällä tällä paikalla. 41 00:01:24,435 --> 00:01:28,580 >> -Kun Oikeat laitteet, Kuvaa voi suurentaa ja terävöittää. 42 00:01:28,580 --> 00:01:29,330 >> Mitä se on? 43 00:01:29,330 --> 00:01:30,780 >> -Se Tehostamisohjelma. 44 00:01:30,780 --> 00:01:32,170 >> Voitko selvää, että mihin tahansa? 45 00:01:32,170 --> 00:01:33,070 >> En tiedä. 46 00:01:33,070 --> 00:01:34,150 Katsotaan parantaa sitä. 47 00:01:34,150 --> 00:01:35,440 >> -Paranna § A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Olen parannettu yksityiskohta, ja-- 50 00:01:38,562 --> 00:01:40,020 -Luulen On tarpeeksi parantaa. 51 00:01:40,020 --> 00:01:40,976 Vapauta se minun näytöllä. 52 00:01:40,976 --> 00:01:42,559 >> -I Parannettu pohdintaa hänen silmässä. 53 00:01:42,559 --> 00:01:44,322 Piiloudutaan ajaa tätä kautta kuvanmuokkausteknologia. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Voit lisätä tämän? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Päälle. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Olen Työskennelleet tämän pohdintaa. 58 00:01:49,458 --> 00:01:50,402 >> Tuolla on joku heijastus. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -Siellä Heijastaa miehen kasvot. 61 00:01:52,870 --> 00:01:53,694 >> P heijastus! 62 00:01:53,694 --> 00:01:54,610 Tuolla on pohdintaa. 63 00:01:54,610 --> 00:01:55,880 -Zoom Sisään peiliin. 64 00:01:55,880 --> 00:01:57,860 Näet pohdintaa. 65 00:01:57,860 --> 00:01:59,630 >> Voitko parantaa kuvan täältä? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 Voitko parantaa sitä? 68 00:02:01,210 --> 00:02:02,190 Voitko parantaa sitä? 69 00:02:02,190 --> 00:02:03,066 -Voimmeko Parantaa tätä? 70 00:02:03,066 --> 00:02:03,898 Voitko parantaa sitä? 71 00:02:03,898 --> 00:02:04,740 Odota hetki toinen. 72 00:02:04,740 --> 00:02:05,281 Minä parantaa. 73 00:02:05,281 --> 00:02:06,470 -Zoom Vuonna oveen. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Siirrä Sisään. 77 00:02:08,509 --> 00:02:09,340 -Enemmän. 78 00:02:09,340 --> 00:02:10,094 Odota, lopeta. 79 00:02:10,094 --> 00:02:10,750 Lopeta. 80 00:02:10,750 --> 00:02:11,250 -Pause Sitä. 81 00:02:11,250 --> 00:02:13,542 -Rotate Meille 75 astetta ympäri pystysuoran, kiitos. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> Lopeta. 84 00:02:16,127 --> 00:02:19,330 Mene takaisin osa siitä ovesta. 85 00:02:19,330 --> 00:02:21,420 >> -Sain Kuva tehostajana, joka voi bittikartta? 86 00:02:21,420 --> 00:02:24,420 >> Ehkä voimme käyttää Pradeep Singh menetelmä kurkistaa ikkunoita. 87 00:02:24,420 --> 00:02:25,902 >> P ohjelmisto on uusinta. 88 00:02:25,902 --> 00:02:26,866 >> P ominaisarvo on pois päältä. 89 00:02:26,866 --> 00:02:29,758 >> -Kun Oikea yhdistelmä algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> -Hän Otettu valaistus algoritmeja seuraavalle tasolle, 91 00:02:32,168 --> 00:02:34,110 ja voin käyttää niitä parantaa tämän valokuvan. 92 00:02:34,110 --> 00:02:36,840 >> -Lock Päälle ja suurentaa z-akselin. 93 00:02:36,840 --> 00:02:37,351 >> -Paranna. 94 00:02:37,351 --> 00:02:37,850 Parantaa. 95 00:02:37,850 --> 00:02:38,720 -Paranna. 96 00:02:38,720 --> 00:02:40,070 -Freeze Ja parantaa. 97 00:02:40,070 --> 00:02:43,420 [END VIDEOTOISTOSTA] 98 00:02:43,420 --> 00:02:45,830 DAVID J. MALAN: Joten ne ovat kaikki sanat, mutta ne eivät olleet 99 00:02:45,830 --> 00:02:47,870 käytetään lauseita oikein. 100 00:02:47,870 --> 00:02:52,370 Ja todellakin tulevaisuudessa, milloin tahansa, kiitos, kuulet jonkun sanovan sanan, 101 00:02:52,370 --> 00:02:54,250 "Parantaa", hihittää vain vähän. 102 00:02:54,250 --> 00:02:57,190 Koska kun yrität parantaa, Esimerkiksi tämä on mitä tapahtuu. 103 00:02:57,190 --> 00:02:58,580 >> Joten tässä on upea kuva. 104 00:02:58,580 --> 00:02:59,720 Tämä on CS50 oma Daven. 105 00:02:59,720 --> 00:03:03,740 Ja olettaa, että halusimme painopiste on pilke silmäkulmassa, 106 00:03:03,740 --> 00:03:05,870 tai heijastus pahis, joka oli selvästi 107 00:03:05,870 --> 00:03:07,820 vangiksi valvontakamera. 108 00:03:07,820 --> 00:03:10,330 Tämä on mitä tapahtuu, kun suurennat kuvan, että 109 00:03:10,330 --> 00:03:14,060 on vain äärellinen määrä bittien liittyy siihen. 110 00:03:14,060 --> 00:03:15,420 >> Eli mitä saisit. 111 00:03:15,420 --> 00:03:19,190 Ja todellakin, vuonna Daven silmään on vaan neljä, ehkä kuusi pikseliä 112 00:03:19,190 --> 00:03:22,110 että säveltää mitä oli kimaltelevan siellä. 113 00:03:22,110 --> 00:03:25,890 Joten Harjoitus neljä on lopulta voit tutustua maailmaan, erityisesti 114 00:03:25,890 --> 00:03:28,090 luonteeltaan jotain kutsumme tiedoston I / O, jossa 115 00:03:28,090 --> 00:03:31,000 i / o on vain hieno tapa sanomalla tulon ja lähdön. 116 00:03:31,000 --> 00:03:34,280 >> Niin tähän mennessä kaikki vuorovaikutukset meillä on ollut tietokoneen kanssa 117 00:03:34,280 --> 00:03:36,770 ovat olleet pääosin kanssa näppäimistö ja näyttö, 118 00:03:36,770 --> 00:03:40,770 mutta ei niinkään kiintolevy, tai tiedostojen tallentamista niiden lisäksi, joita 119 00:03:40,770 --> 00:03:41,620 itse kirjoittaa. 120 00:03:41,620 --> 00:03:44,570 Ohjelmat ovat toistaiseksi ei ollut luomassa, ja säästää, 121 00:03:44,570 --> 00:03:46,270 ja päivittää omia tiedostojaan. 122 00:03:46,270 --> 00:03:47,150 >> No, mikä tiedosto? 123 00:03:47,150 --> 00:03:48,105 No, jotain JPEG. 124 00:03:48,105 --> 00:03:50,520 Tämä on kuva saatat on tai ladata Facebook, 125 00:03:50,520 --> 00:03:51,690 tai nähdä kaikkialla internetissä. 126 00:03:51,690 --> 00:03:54,460 Todellakin, että kuva me vain saha Daven oli JPEG. 127 00:03:54,460 --> 00:03:57,570 Ja mikä mielenkiintoista noin tiedostoja, kuten JPEG 128 00:03:57,570 --> 00:04:02,170 on se, että ne voidaan tunnistaa, tyypillisesti, tietyt bittikuvioina. 129 00:04:02,170 --> 00:04:05,200 >> Toisin sanoen, mikä on se, että erottaa JPEG GIF 130 00:04:05,200 --> 00:04:08,109 alkaen ping Word Asiakirjan Excel-tiedoston? 131 00:04:08,109 --> 00:04:09,900 No, se on vain erilainen bittikuvioina. 132 00:04:09,900 --> 00:04:12,820 Ja näiden eri kuviot ovat Yleensä alussa kyseiset tiedostot. 133 00:04:12,820 --> 00:04:18,200 >> Niin, että kun tietokone avataan Word doc, tai kun tietokone avataan JPEG, 134 00:04:18,200 --> 00:04:20,940 se näyttää tyypillisesti Ensimmäinen useita bittejä tiedoston. 135 00:04:20,940 --> 00:04:24,059 Ja jos se tunnistaa kuvion, se sanoo, oi, tämä on kuva. 136 00:04:24,059 --> 00:04:25,850 Saanen tuoda sen käyttäjälle graafinen. 137 00:04:25,850 --> 00:04:27,870 Tai, oi, tämä näyttää Word doc. 138 00:04:27,870 --> 00:04:30,480 Haluan näyttää sen käyttäjälle essee. 139 00:04:30,480 --> 00:04:33,020 >> Joten esimerkiksi JPEG, se kääntyy pois, ovat 140 00:04:33,020 --> 00:04:35,460 varsin kehittyneitä alla huppu. 141 00:04:35,460 --> 00:04:40,140 Mutta kolme ensimmäistä tavua melkein joka JPEG aloittaa nämä kolme numeroa. 142 00:04:40,140 --> 00:04:44,680 Niin tavu nolla, yksi ja kaksi ovat, ja melkein joka JPEG, 255, niin numero 143 00:04:44,680 --> 00:04:46,675 216, sitten numero 255. 144 00:04:46,675 --> 00:04:48,990 >> Ja mitä voit alkaa tehdä ensi viikolla 145 00:04:48,990 --> 00:04:52,920 on todella tönäisi alla huppu tiedostoja, kuten JPEG 146 00:04:52,920 --> 00:04:57,210 ja kuten bittikarttatiedostot, ja nähdä mikä on aina ollut siellä niin kauan 147 00:04:57,210 --> 00:04:58,650 koska olet käyttänyt tietokonetta. 148 00:04:58,650 --> 00:05:01,860 >> Mutta mitä siellä ei ole tyypillisesti kirjoitettu kuten desimaalilukuja näin. 149 00:05:01,860 --> 00:05:04,620 Tietotekniikan tutkijoita ei taipumus puhua desimaalin. 150 00:05:04,620 --> 00:05:06,139 He eivät todellakaan puhu binary. 151 00:05:06,139 --> 00:05:07,930 Tyypillisesti, kun haluamme ilmaista numeroita, 152 00:05:07,930 --> 00:05:10,710 me todella käyttää heksadesimaali-, joka ehkä muistatte 153 00:05:10,710 --> 00:05:13,027 alkaen vaikkapa Harjoitus Yksi, joka haastoi 154 00:05:13,027 --> 00:05:14,610 miettimään eri järjestelmää. 155 00:05:14,610 --> 00:05:17,170 >> Me, tietenkin, ovat tuttuja Desimaaliluvulliset, nollasta yhdeksään. 156 00:05:17,170 --> 00:05:18,215 Puhuimme binary. 157 00:05:18,215 --> 00:05:20,710 Ja meillä ei oikeastaan ​​ole käyttää niin paljon täällä 158 00:05:20,710 --> 00:05:22,470 ulos, sillä tietokoneet käyttävät sitä. 159 00:05:22,470 --> 00:05:24,900 Mutta ohjelmoijat hyvin Usein, mutta ei aina, 160 00:05:24,900 --> 00:05:29,360 käyttää heksadesimaali-, mikä tarkoittaa vain sitä, Sinulla on 16 kirjainta teidän aakkoset, 161 00:05:29,360 --> 00:05:31,330 toisin kuin kaksi tai 10. 162 00:05:31,330 --> 00:05:34,530 >> Joten miten voit laskea korkeamman kuin yhdeksän heksadesimaali-? 163 00:05:34,530 --> 00:05:41,120 Menet 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, , b, c, d, e, f, vain sopimuksen mukaan. 164 00:05:41,120 --> 00:05:43,540 Mutta mitä tärkeintä on, että jokainen Näiden on yksi symboli. 165 00:05:43,540 --> 00:05:44,340 Ei ole 10. 166 00:05:44,340 --> 00:05:48,400 Ei ole 11, sinänsä, koska kukin teidän numeroa, ihan niinkuin desimaalin 167 00:05:48,400 --> 00:05:51,940 ja aivan kuten binary, pitäisi vain olla yksi merkki, jota yleissopimus. 168 00:05:51,940 --> 00:05:55,280 >> Joten silloin on aakkosten meillä käytössämme heksadesimaaliluvussa. 169 00:05:55,280 --> 00:05:58,600 Joten mitä JPEG näyttää jos oli kirjoittaa ulos ensimmäisen kolmen 170 00:05:58,600 --> 00:06:01,980 tavut eivät desimaalin vaan, Esimerkiksi heksadesimaali-? 171 00:06:01,980 --> 00:06:03,640 Ja miksi hex jopa kaikki, että hyödyllinen? 172 00:06:03,640 --> 00:06:05,290 >> No, vilkaista esimerkki. 173 00:06:05,290 --> 00:06:09,030 Joten jos kirjoitan ulos bittien edustavat nämä desimaalin numbers-- 174 00:06:09,030 --> 00:06:12,450 tämä saattaa olla hieman ruosteessa nyt muutaman viikon takaisin, 175 00:06:12,450 --> 00:06:14,820 mutta vasen ja oikea on melko helppoa. 176 00:06:14,820 --> 00:06:17,990 255 oli suurin määrä me voisi edustaa kahdeksan bittiä. 177 00:06:17,990 --> 00:06:18,820 Se oli kaikki ykkösiä. 178 00:06:18,820 --> 00:06:21,320 Joten ainoa, joka on lievästi mielenkiintoista on keskimmäinen. 179 00:06:21,320 --> 00:06:24,700 Ja jos sellaista tehdä ulos matematiikka, voit päätellä, että todellakin, 180 00:06:24,700 --> 00:06:27,949 että kuvio yhden ja nollat ​​edustaa 216. 181 00:06:27,949 --> 00:06:30,240 Joten vain määrätä, nyt, että ne ovat oikein. 182 00:06:30,240 --> 00:06:31,730 Mutta miksi tämä mielenkiintoinen? 183 00:06:31,730 --> 00:06:33,970 >> No, tavu, tietenkin, on kahdeksan bittiä. 184 00:06:33,970 --> 00:06:38,980 Ja käy ilmi, että jos luulet tavun kaksi paloina neljä bittiä, 185 00:06:38,980 --> 00:06:39,500 näin. 186 00:06:39,500 --> 00:06:41,000 Saanen lisätä tilaa. 187 00:06:41,000 --> 00:06:42,550 Joten ennen, jälkeen. 188 00:06:42,550 --> 00:06:46,520 Olen vain lisännyt joitakin valkoinen tila visualisointi vuoksi täällä. 189 00:06:46,520 --> 00:06:51,840 Miten voi nyt edustamme, vaikkapa heksadesimaali- kukin quad bittejä, 190 00:06:51,840 --> 00:06:52,880 jokaisen sarjan neljä bittiä? 191 00:06:52,880 --> 00:06:56,420 >> Niinpä esimerkiksi, vasemmalla nyt meillä on 1111 binary. 192 00:06:56,420 --> 00:07:00,420 Mikä on tuo numero kymmenjärjestelmässä jos et ulos matematiikka? 193 00:07:00,420 --> 00:07:03,780 Sinulla on niitä paikka, kaksittain paikka, nelosta paikka, ja kahdeksikkoa paikka. 194 00:07:03,780 --> 00:07:04,341 >> Yleisö: 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. MALAN: On 15. 196 00:07:05,340 --> 00:07:08,340 Joten jos teemme kahdeksan plus neljä plus kaksi plus yksi, saamme 15. 197 00:07:08,340 --> 00:07:11,790 Niin voisin kirjoittaa 15 alla 1111, mutta pointti tässä 198 00:07:11,790 --> 00:07:13,190 ei heksadesimaali-, ei desimaalia. 199 00:07:13,190 --> 00:07:17,310 Niin kirjoittamisen sijaan alas 15, 1-5, Aion kirjoittaa, että hex, 200 00:07:17,310 --> 00:07:22,311 jotka, jos luulet takaisin, jos sinulla on nolla-F, mikä on 15 tulee? 201 00:07:22,311 --> 00:07:22,810 Yleisö: f. 202 00:07:22,810 --> 00:07:24,434 DAVID J. MALAN: Eli se kääntyy pois se on f. 203 00:07:24,434 --> 00:07:29,140 Ja voit työskennellä että ulos sanomalla, hyvin, jos on 10, niin OK, f on 15. 204 00:07:29,140 --> 00:07:33,250 Joten todellakin, voisimme kirjoittaa näitä samoja numeroita kuin ff. 205 00:07:33,250 --> 00:07:35,750 Ja sitten jos teemme vähän matematiikkaa, me päätellä, että se on d. 206 00:07:35,750 --> 00:07:38,650 Kahdeksan on melko helppoa, koska me on yksi kasia paikassa. 207 00:07:38,650 --> 00:07:40,620 Ja sitten meillä on vielä pari e e n. 208 00:07:40,620 --> 00:07:44,669 >> Joten mitä ihmiset tapana tehdä sopimuksen mukaan kun he käyttävät heksadesimaalista on ne vain 209 00:07:44,669 --> 00:07:47,710 Kirjoitan tätä hieman lyhyemmin, päästä eroon useimmat että valkoinen tila. 210 00:07:47,710 --> 00:07:50,890 Ja vain olla erittäin selväksi lukijoille, että tämä on heksadesimaali-, 211 00:07:50,890 --> 00:07:54,670 yksinkertainen yleissopimus keskuudessa Ihmisillä kirjoitat nolla 212 00:07:54,670 --> 00:07:58,000 x, jolla ei ole muuta merkitystä kuin visuaalinen tunniste, 213 00:07:58,000 --> 00:07:59,590 tässä tulee hex numero. 214 00:07:59,590 --> 00:08:04,210 >> Ja sitten, laitat kaksi numeroa, f f tässä tapauksessa sitten d, niin f f. 215 00:08:04,210 --> 00:08:06,700 Niin pitkän tarinan lyhyesti, heksadesimaali- vain taipumus 216 00:08:06,700 --> 00:08:11,990 olla kätevä, koska sen numeroa, nolla-F, täydellisesti linjat 217 00:08:11,990 --> 00:08:13,880 kanssa rakenteessa neljä bittiä. 218 00:08:13,880 --> 00:08:18,080 >> Joten jos sinulla on kaksi heksadesimaaliyksikön, nolla-F, uudestaan ​​ja uudestaan, 219 00:08:18,080 --> 00:08:20,256 joka antaa sinulle täydellisesti kahdeksan bittiä tai yksi tavu. 220 00:08:20,256 --> 00:08:22,380 Joten siksi se pyrkii olla tavanomaisesti hyödyllinen. 221 00:08:22,380 --> 00:08:24,990 Ei mitään älyllistä sisältö todella pidemmälle, 222 00:08:24,990 --> 00:08:27,010 muu kuin sen todellinen hyödyllisyys. 223 00:08:27,010 --> 00:08:29,310 >> Nyt JPEG eivät ole ainoa tiedostomuodot grafiikka. 224 00:08:29,310 --> 00:08:33,230 Saatat muistaa, että on olemassa tiedostoja, kuten tässä maailmassa, 225 00:08:33,230 --> 00:08:34,830 ainakin muutama vuosi sitten. 226 00:08:34,830 --> 00:08:37,580 >> Joten tämä oli oikeastaan asennettu Windows XP 227 00:08:37,580 --> 00:08:39,960 miljooniin tietokoneisiin ympäri maailmaa. 228 00:08:39,960 --> 00:08:43,000 Ja tämä oli bittikarttatiedostoa, BMP. 229 00:08:43,000 --> 00:08:47,690 Ja bittikarttatiedostoa, niin näet seuraavan viikolla, vain tarkoittaa pistekuvion 230 00:08:47,690 --> 00:08:51,710 pikselit niitä kutsutaan, kartta bittiä, todella. 231 00:08:51,710 --> 00:08:55,160 >> Niin mitä mielenkiintoista, vaikka, tästä tiedostomuoto, BMP, on 232 00:08:55,160 --> 00:08:58,590 että alla huppu, se on enemmän kuin vain kolme tavua 233 00:08:58,590 --> 00:09:01,020 jotka muodostavat sen otsikkoa, niin puhua, muutaman ensimmäisen puree. 234 00:09:01,020 --> 00:09:03,330 Se todella näyttää hieman monimutkainen ensi silmäyksellä. 235 00:09:03,330 --> 00:09:04,704 Ja näet tämän P asetettu. 236 00:09:04,704 --> 00:09:06,810 Ja saada jotain Erityisesti ulos tästä nyt 237 00:09:06,810 --> 00:09:10,720 ei ole niin tärkeä, koska juuri se seikka, että alussa jokainen bittikartta 238 00:09:10,720 --> 00:09:13,823 tiedosto, graafisessa muodossa, siellä on koko joukko numeroita. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Nyt Microsoft, Kirjailija tämän muodon, 241 00:09:16,720 --> 00:09:18,820 yleensä soittaa nämä asioita ei ints ja merkkiä 242 00:09:18,820 --> 00:09:22,259 ja kelluu mutta sanoja ja d sanat ja pitkät ja tavua. 243 00:09:22,259 --> 00:09:23,800 Joten he ovat vain erilaiset tiedot. 244 00:09:23,800 --> 00:09:25,170 Ne ovat eri nimiä sama asia. 245 00:09:25,170 --> 00:09:26,740 Mutta huomaat, että P asettanut neljä. 246 00:09:26,740 --> 00:09:31,450 >> Mutta tämä on vain sanoa, että jos ihminen kaksoisnapsauttaa joitakin BMP tiedosto hänen 247 00:09:31,450 --> 00:09:35,015 tai hänen kiintolevyn, ja ikkuna avautuu ylös osoittaa hänelle, että kuva, 248 00:09:35,015 --> 00:09:38,500 että tapahtui, koska toiminta järjestelmä oletettavasti huomannut paitsi 249 00:09:38,500 --> 00:09:41,460 .BMP tiedostopääte tiedoston nimi, 250 00:09:41,460 --> 00:09:45,010 mutta myös se, että on olemassa jokin yleissopimus ohjeeseen bittien 251 00:09:45,010 --> 00:09:47,490 aivan alussa Kyseisen bittikarttatiedosto. 252 00:09:47,490 --> 00:09:50,270 >> Mutta katsotaanpa nyt keskittyä niin monimutkainen tiedoston, 253 00:09:50,270 --> 00:09:52,120 mutta sen sijaan jotain tällaista. 254 00:09:52,120 --> 00:09:55,190 Oletetaan täällä GEdit, I vain alku 255 00:09:55,190 --> 00:09:57,070 on ohjelma, joka on melko yksinkertainen. 256 00:09:57,070 --> 00:09:58,860 Minulla on myös alkuun asti. 257 00:09:58,860 --> 00:10:02,120 Nyt minulla on # include "structs.h", mutta Palaan tähän hetken kuluttua. 258 00:10:02,120 --> 00:10:03,974 Mutta tästä on hyötyä nyt. 259 00:10:03,974 --> 00:10:05,890 Niin tämä on ohjelma että menee toteuttaa 260 00:10:05,890 --> 00:10:07,335 kuten rekisterinpitäjän tietokantaan. 261 00:10:07,335 --> 00:10:09,710 Joten tietokanta opiskelijoita, ja jokainen opiskelija maailmassa 262 00:10:09,710 --> 00:10:13,190 on nimi ja talon ja luultavasti joidenkin muita juttuja, mutta me pitää se yksinkertainen. 263 00:10:13,190 --> 00:10:15,140 Jokaisella opiskelijalla on nimi ja talon. 264 00:10:15,140 --> 00:10:17,700 >> Joten jos halusin kirjoittaa ohjelmaa, jonka tarkoitus elämässä 265 00:10:17,700 --> 00:10:19,860 oli vain kerrata päässä nolla jopa kolme, 266 00:10:19,860 --> 00:10:22,070 jos on kolme opiskelijaa Harvardin yliopistossa. 267 00:10:22,070 --> 00:10:25,350 Ja haluan vain saada käyttäen GetString, opiskelijan nimi ja talon, 268 00:10:25,350 --> 00:10:26,600 ja sitten vain tulostaa ne pois. 269 00:10:26,600 --> 00:10:28,630 >> Tämä on tavallaan kuin viikko Yksi, Viikko Kaksi kamaa nyt, 270 00:10:28,630 --> 00:10:30,810 jos haluan vain varten silmukka tai jotain. 271 00:10:30,810 --> 00:10:34,500 Ja haluan soittaa GetString muutaman kertaa, ja sitten tulostaa f muutaman kerran. 272 00:10:34,500 --> 00:10:37,340 Joten miten voisin tehdä tämän, vaikka, kun sekä nimi ja talon 273 00:10:37,340 --> 00:10:39,070 ovat mukana jokaiselle opiskelijalle? 274 00:10:39,070 --> 00:10:42,830 >> Joten minun ensimmäinen vaisto pitää olla tehdä jotain tällaista. 275 00:10:42,830 --> 00:10:49,620 Voisin ensin sanoa, hyvin, anna minulle, sanoa, Merkkijonotaulukko nimitelty. 276 00:10:49,620 --> 00:10:51,530 Ja en halua hardcode kolme täällä. 277 00:10:51,530 --> 00:10:53,064 Mitä haluan laittaa sinne? 278 00:10:53,064 --> 00:10:55,730 Niin opiskelijoita, koska se on vain jatkuva julisti huipulla, 279 00:10:55,730 --> 00:10:57,860 juuri niin minulla ei ole hardcode kolme useissa paikoissa. 280 00:10:57,860 --> 00:11:00,859 Näin voin vaihtaa sen yhteen paikkaan, ja se vaikuttaa muutoksen kaikkialla. 281 00:11:00,859 --> 00:11:04,470 Ja sitten, voisin tehdä merkkijono taloa opiskelijoille. 282 00:11:04,470 --> 00:11:10,250 >> Ja nyt voisin tehdä jotain for (int i = 0; i 00:11:14,390 Joten olen kirjoittaessa nopeasti, mutta tämä on varmasti tuttuja syntaksi nyt. 284 00:11:14,390 --> 00:11:17,030 >> Ja nyt tämä oli uudempi. 285 00:11:17,030 --> 00:11:22,890 Jos haluan laittaa i: nnen opiskelijan nimi, taidan tehdä tätä. 286 00:11:22,890 --> 00:11:26,480 Ja sitten, ei nimiä mutta taloa haarukoida i. 287 00:11:26,480 --> 00:11:29,930 Teen tämän, GetString, ja anna minun mennä takaisin ja korjata tätä linjaa. 288 00:11:29,930 --> 00:11:30,430 Olen samaa mieltä? 289 00:11:30,430 --> 00:11:31,200 Eri mieltä? 290 00:11:31,200 --> 00:11:32,366 Se ei ole kovin käyttäjäystävällinen. 291 00:11:32,366 --> 00:11:33,890 En ole kertonut käyttäjä mitä tehdä. 292 00:11:33,890 --> 00:11:36,520 >> Mutta nyt, jos minäkin halusi myöhemmin, katsotaanpa 293 00:11:36,520 --> 00:11:40,060 vaikkapa tulostaa nämä asiat out-- niin Tehtävät myöhemmin. 294 00:11:40,060 --> 00:11:42,330 Aion tehdä enemmän this-- tämä luultavasti IS 295 00:11:42,330 --> 00:11:45,970 asianmukainen täytäntöönpano saada nimet ja taloja, kolme 296 00:11:45,970 --> 00:11:48,870 niistä yhteensä jokaisen, käyttäjältä. 297 00:11:48,870 --> 00:11:51,280 >> Mutta tämä ei ole kovin hyvä suunnittelu, oikea? 298 00:11:51,280 --> 00:11:55,220 Mitä jos opiskelija ei ole vain nimi ja talon, mutta myös ID-numero, 299 00:11:55,220 --> 00:11:57,770 ja puhelinnumero, ja sähköpostiosoite, 300 00:11:57,770 --> 00:12:00,280 ja ehkä kotisivun, ja Ehkä Twitter kahva, 301 00:12:00,280 --> 00:12:03,730 ja useita muita yksityiskohtia liittyvät opiskelija tai henkilö, 302 00:12:03,730 --> 00:12:04,610 yleisemmin. 303 00:12:04,610 --> 00:12:07,720 Miten alamme lisätä toiminnallisuus tähän ohjelmaan? 304 00:12:07,720 --> 00:12:14,080 >> No, minusta tuntuu yksinkertaisin tapa pitää olla tehdä jotain, sanokaamme, 305 00:12:14,080 --> 00:12:16,490 int tunnukset opiskelijoille. 306 00:12:16,490 --> 00:12:18,380 Joten voin laittaa kaikki tunnukset sinne. 307 00:12:18,380 --> 00:12:22,240 Ja sitten, jotain kuten puhelinnumeroita, 308 00:12:22,240 --> 00:12:24,400 En ole varma, miten vakuuttaa, ettei vielä. 309 00:12:24,400 --> 00:12:30,280 Joten mene eteenpäin ja vain puhelun Tämän Twitters opiskelijoita, jotka 310 00:12:30,280 --> 00:12:33,550 on hieman outoa, mutta-- ja joukko enemmän kenttiä. 311 00:12:33,550 --> 00:12:36,360 >> Olen alkanut tehokkaasti kopioi ja liitä tänne. 312 00:12:36,360 --> 00:12:39,416 Ja tämä tulee kasvamaan aika kömpelö melko nopeasti, eikö? 313 00:12:39,416 --> 00:12:42,290 Eikö olisi kiva jos olisi maailman tietorakenne tiedossa 314 00:12:42,290 --> 00:12:45,600 eikä int tai merkkijono, mutta jotain korkeammalle tasolle, abstraktio, joten 315 00:12:45,600 --> 00:12:47,570 puhua, tunnetaan opiskelija? 316 00:12:47,570 --> 00:12:50,220 C ei tullut sisäänrakennettu toiminnallisuus opiskelijoille, 317 00:12:50,220 --> 00:12:52,260 mutta mitä jos halusin antaa sille tällaista? 318 00:12:52,260 --> 00:12:55,640 >> No, se kääntyy pois, aion Avaa tiedosto nimeltä structs.h täällä, 319 00:12:55,640 --> 00:12:57,090 ja voit tehdä juuri näin. 320 00:12:57,090 --> 00:12:58,290 Ja me aiomme alkaa tehdä tätä nyt. 321 00:12:58,290 --> 00:13:01,490 Ja alla huppu P asetti kolme, olet jo tehnyt tätä nyt. 322 00:13:01,490 --> 00:13:05,920 Ei ole olemassa sellaista asiaa kuin g rect tai g soikea ohjelmointikieli C. 323 00:13:05,920 --> 00:13:10,570 >> Folks Stanfordin täytäntöön ne tietotyypit käyttämällä tätä lähestymistapaa täällä, 324 00:13:10,570 --> 00:13:13,900 julistamalla omia uusia tietoja tyyppeihin käyttäen uusi avainsana 325 00:13:13,900 --> 00:13:16,744 nimeltään struct ja toinen yksi nimeltään typedef. 326 00:13:16,744 --> 00:13:19,660 Ja todellakin, vaikka syntaksin näyttää hieman erilainen kuin tavaraa 327 00:13:19,660 --> 00:13:23,550 olemme nähneet ennen, vuonna Periaatteessa se on erittäin yksinkertaista. 328 00:13:23,550 --> 00:13:25,297 >> Tämä tarkoittaa vain sitä "määritellä tyyppi." 329 00:13:25,297 --> 00:13:27,255 Se tulee olemaan rakennetta, ja rakenne 330 00:13:27,255 --> 00:13:29,400 on aivan kuin säiliön useita asioita. 331 00:13:29,400 --> 00:13:31,780 Ja että rakenne on menossa on merkkijono kutsutaan nimellä, 332 00:13:31,780 --> 00:13:33,210 ja merkkijono kutsutaan talon. 333 00:13:33,210 --> 00:13:37,520 Ja kutsukaamme, vain mukavuussyistä, tämä koko tietorakenne opiskelija. 334 00:13:37,520 --> 00:13:40,320 >> Joten nyt saat puolipiste, sinulla on nyt 335 00:13:40,320 --> 00:13:43,280 luotu omat tietosi tyyppi nimeltään opiskelija 336 00:13:43,280 --> 00:13:46,420 että nyt rinnalla int, ja kellua, ja nieriää ja string, 337 00:13:46,420 --> 00:13:50,270 ja g välilliset, ja g soikea, ja rajoittamattoman määrän Muiden asioita ihmiset ovat keksineet. 338 00:13:50,270 --> 00:13:53,340 >> Joten mitä hyötyä tästä nyt, että jos menen takaisin 339 00:13:53,340 --> 00:13:57,430 to struct 0 ja lopettaa tämän täytäntöönpanoa, jonka kirjoitin 340 00:13:57,430 --> 00:14:02,080 etukäteen täällä, huomaa, että kaikki väistämätön messiness että 341 00:14:02,080 --> 00:14:05,490 oli alkamassa tapahtuu niin lisäsin puhelinnumeroita ja twitters ja kaikki 342 00:14:05,490 --> 00:14:07,370 näitä muita asioita opiskelijan määritelmä, 343 00:14:07,370 --> 00:14:11,810 nyt se on ytimekkäästi kääritty ylös on vain yksi joukko opiskelijoita. 344 00:14:11,810 --> 00:14:15,500 >> Ja jokainen näistä opiskelijoiden nyt on useita asioita sisälle. 345 00:14:15,500 --> 00:14:16,930 Niin että vain jättää yksi kysymys. 346 00:14:16,930 --> 00:14:19,700 Miten saat haluamasi nimen, ja talon, ja tunnus, 347 00:14:19,700 --> 00:14:21,640 ja mitä muuta on sisällä opiskelija? 348 00:14:21,640 --> 00:14:22,930 Super yksinkertainen, samoin. 349 00:14:22,930 --> 00:14:25,730 Uusi syntaksi, mutta yksinkertainen idea. 350 00:14:25,730 --> 00:14:29,239 >> Sinun tarvitsee vain indeksinä array, kuten teimme viime viikolla ja tätä. 351 00:14:29,239 --> 00:14:31,030 Ja mikä on selvästi uusi pala syntaksin? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Vain., Joka tarkoittaa "mennä sisälle rakenne ja saada kentän nimeltään 354 00:14:35,880 --> 00:14:39,030 nimi, saat kentän nimeltään talossa, saada kentän nimeltään opiskelija. " 355 00:14:39,030 --> 00:14:41,940 >> Joten P asetti kolme, jos olet edelleen työtä, että 356 00:14:41,940 --> 00:14:44,020 ja useimmat ihmiset silti on, ymmärtää, että kun 357 00:14:44,020 --> 00:14:46,130 alkaa käyttää asioita, kuten g rects ja g ovals 358 00:14:46,130 --> 00:14:50,201 ja muita asioita, jotka eivät näytä tulevat Viikko nolla, yksi tai kaksi, 359 00:14:50,201 --> 00:14:52,950 ymmärtää, että se johtuu Stanford julisti uusia tietotyyppejä. 360 00:14:52,950 --> 00:14:56,160 >> Ja todellakin, se on juuri sitä, mitä jaamme tehdä samoin, P asettanut neljä, kun 361 00:14:56,160 --> 00:14:59,880 alamme käsitellä asioita kuten kuvia, logoja, ja enemmän. 362 00:14:59,880 --> 00:15:02,882 Joten se on vain teaser ja henkinen malli, mitä on tulossa. 363 00:15:02,882 --> 00:15:04,590 Nyt olen lykänneet hieman tänä aamuna. 364 00:15:04,590 --> 00:15:09,560 Minulla oli sellainen utelias näkemään, mitä Microsoft taustakuva todella 365 00:15:09,560 --> 00:15:10,310 näyttää tänään. 366 00:15:10,310 --> 00:15:15,200 Ja se osoittautuu joku 2006 todellisuudessa meni lähes tarkalleen 367 00:15:15,200 --> 00:15:19,210 Sama paikka kuvata todellisuudessa mitä näyttää, että näinä päivinä. 368 00:15:19,210 --> 00:15:21,380 Kenttä on nyt hieman umpeen. 369 00:15:21,380 --> 00:15:24,850 >> Niin puhuu nyt kuvia, Katsotaanpa tuoda takaisin Daven täällä 370 00:15:24,850 --> 00:15:26,890 ruudulla ja Nicholas, ja muistuttaa teitä 371 00:15:26,890 --> 00:15:30,540 että jos haluat liittyä meihin lounaalle perjantaina, pään tavallisia URL 372 00:15:30,540 --> 00:15:31,440 täällä. 373 00:15:31,440 --> 00:15:33,530 >> Mistä siis jätämme pois maanantaina? 374 00:15:33,530 --> 00:15:35,140 Otimme tämän ongelman, eikö? 375 00:15:35,140 --> 00:15:37,610 Tämä oli ilmeisesti oikea täytäntöönpano swap, 376 00:15:37,610 --> 00:15:40,460 jolloin viet kaksi ints, yksi nimeltään, yksi nimeltään b, 377 00:15:40,460 --> 00:15:44,130 vaihtaa niitä, aivan kuten Laura teki tässä lavalla maito ja vesi, 378 00:15:44,130 --> 00:15:46,820 käyttämällä väliaikaista muuttuja, tai tyhjä kuppi, 379 00:15:46,820 --> 00:15:50,540 jotta voisimme laittaa B ja vuonna b ilman sotkemaan asioita. 380 00:15:50,540 --> 00:15:51,560 Käytimme muuttuja. 381 00:15:51,560 --> 00:15:52,870 Sitä kutsutaan temp. 382 00:15:52,870 --> 00:15:55,520 >> Mutta mikä oli olennainen Ongelmana tässä koodi maanantaina? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Mikä oli ongelma? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Joo. 387 00:16:00,605 --> 00:16:01,970 >> Yleisö: Se vie enemmän tilaa. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. MALAN: vie enemmän tilaa, koska olen käyttäen muuttuja, 389 00:16:04,719 --> 00:16:05,400 ja se on OK. 390 00:16:05,400 --> 00:16:07,300 Se on totta, mutta olen aio sanoa, että on OK. 391 00:16:07,300 --> 00:16:10,030 Se on vain 32 bittiä grand järjestelmässä asioita, joten ei ole iso juttu. 392 00:16:10,030 --> 00:16:10,655 Muita ajatuksia? 393 00:16:10,655 --> 00:16:12,572 Yleisö: Se vain koronvaihtosopimukset muuttujat paikallisesti. 394 00:16:12,572 --> 00:16:13,571 DAVID J. MALAN: Aivan. 395 00:16:13,571 --> 00:16:15,090 Se vain swap muuttujat paikallisesti. 396 00:16:15,090 --> 00:16:18,173 Koska tahansa soitat function-- kun minulla oli lokerot Annenberg 397 00:16:18,173 --> 00:16:19,840 Viimeisen kerran, olet tärkein pohjassa. 398 00:16:19,840 --> 00:16:23,560 Heti kun soitat toiminto nimeltään swap, swap ei saada x ja y, 399 00:16:23,560 --> 00:16:24,400 alkuperäiset arvot. 400 00:16:24,400 --> 00:16:26,392 Mitä swap get, ei me väitämme? 401 00:16:26,392 --> 00:16:27,100 Yleisö: kopiot. 402 00:16:27,100 --> 00:16:28,090 DAVID J. MALAN: Niin jäljennökset. 403 00:16:28,090 --> 00:16:31,120 Joten se saa yhden ja kahden, jos muistuttaa esimerkiksi viime kerralla, 404 00:16:31,120 --> 00:16:34,730 mutta kopio yksi ja kaksi jotka ovat onnistuneesti vaihdettu. 405 00:16:34,730 --> 00:16:38,550 Mutta valitettavasti lopussa, nämä arvot ovat edelleen samat. 406 00:16:38,550 --> 00:16:41,880 Jotta voimme nähdä tämän kanssa uusi ystävä, toivottavasti GDB, 407 00:16:41,880 --> 00:16:45,180 että sinä tai TF: n ja Ca: n on on ohjata sinua kohti seuraavaa. 408 00:16:45,180 --> 00:16:51,210 >> Joten ei swap muistaa näyttää kuin-- katsotaanpa avata this-- näyttää tältä. 409 00:16:51,210 --> 00:16:54,160 Me alustetaan x yhden, y kaksi. 410 00:16:54,160 --> 00:16:55,620 Oli joukko tulostaa f n. 411 00:16:55,620 --> 00:16:58,080 Mutta sitten, avain puhelu täällä oli vaihtaa, mikä 412 00:16:58,080 --> 00:17:00,260 Juuri koodi me Näin juuri hetki sitten. 413 00:17:00,260 --> 00:17:03,180 Mikä on oikein ensimmäinen silmäyksellä, mutta toiminnallisesti, 414 00:17:03,180 --> 00:17:06,800 tämä ohjelma ei toimi, koska se ei pysyvästi vaihtaa x ja y. 415 00:17:06,800 --> 00:17:10,190 >> Katsotaanpa tätä, pikalämmitysjärjestelmä täällä GDB, ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Joukko ylivoimainen tietoa, Haen eroon Control L nyt. 418 00:17:15,200 --> 00:17:17,516 Ja nyt aion mennä eteenpäin ja käyttää sitä. 419 00:17:17,516 --> 00:17:19,349 Ja valitettavasti, että ei ollut hyötyä. 420 00:17:19,349 --> 00:17:22,355 Se juoksi ohjelman sisällä tämän ohjelma nimeltä GDB, debuggeri 421 00:17:22,355 --> 00:17:23,730 mutta se ei anna minun penkoa. 422 00:17:23,730 --> 00:17:26,229 >> Joten miten voin itse keskeyttää suorituksen sisällä tätä ohjelmaa? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Niin tauko. 425 00:17:28,329 --> 00:17:32,340 Ja voisin rikkoa millään linja numero yksi, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Mutta voin myös rikkoa symbolisesti sanomalla tauko tärkein. 427 00:17:35,530 --> 00:17:38,980 Ja se tulee asettaa tauko piste, ilmeisesti linja 16 main. 428 00:17:38,980 --> 00:17:40,050 Ja missä on line 16? 429 00:17:40,050 --> 00:17:42,960 Mennään jopa koodi ja mennä jopa noswap. 430 00:17:42,960 --> 00:17:46,930 Ja todellakin, linja 16 on ensimmäinen ohjelmaan. 431 00:17:46,930 --> 00:17:52,130 >> Joten nyt, jos menen eteenpäin ja tyyppi ajaa tällä kertaa, Anna, se pysähtyi. 432 00:17:52,130 --> 00:17:53,080 Joten penkoa. 433 00:17:53,080 --> 00:17:55,716 Tulosta x-- miksi x nolla? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 Ja sivuuttaa dollarin merkki. 436 00:17:57,830 --> 00:17:59,725 Se on vain harrastaja ohjelman käyttöä. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Miksi x nolla tällä hetkellä? 439 00:18:03,140 --> 00:18:03,640 Joo. 440 00:18:03,640 --> 00:18:07,061 >> Yleisö: Se pysähtyi juuri ennen linja 16, ei oikeastaan ​​linjalla 16. 441 00:18:07,061 --> 00:18:08,060 DAVID J. MALAN: Aivan. 442 00:18:08,060 --> 00:18:11,630 GDB, oletuksena on keskeytetty toteutus juuri ennen linja 16. 443 00:18:11,630 --> 00:18:14,820 Joten se ei ole toteuttanut, joka tarkoittaa x on noin tuntematon arvo. 444 00:18:14,820 --> 00:18:17,150 Ja meillä kävi tuuri, että se on jotain puhdasta kuin nolla. 445 00:18:17,150 --> 00:18:20,310 Joten nyt jos kirjoitan seuraavaksi, nyt se toteutetaan 16. 446 00:18:20,310 --> 00:18:22,000 Se odottaa minua suorittamaan 17. 447 00:18:22,000 --> 00:18:23,400 Anna minun mennä eteenpäin ja tulostaa x. 448 00:18:23,400 --> 00:18:24,094 Se on yksi. 449 00:18:24,094 --> 00:18:25,260 Anna minun mennä eteenpäin ja tulostaa y. 450 00:18:25,260 --> 00:18:26,176 Mitä minun pitäisi nähdä nyt? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> Yleisö: [kuulumaton] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. MALAN: hieman kovempaa. 454 00:18:29,165 --> 00:18:30,040 >> Yleisö: [kuulumaton] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. MALAN: Ei aivan yksimielisyys. 457 00:18:32,120 --> 00:18:34,760 Joten kyllä, näemme roskat arvo. 458 00:18:34,760 --> 00:18:37,862 Nyt, y on 134514064 siellä. 459 00:18:37,862 --> 00:18:39,320 No, se on vain joku roska arvo. 460 00:18:39,320 --> 00:18:41,350 Oma ohjelma käyttää muistia eri tarkoituksiin. 461 00:18:41,350 --> 00:18:42,350 Ei muita toimintoja. 462 00:18:42,350 --> 00:18:44,040 Muut ihmiset kirjoittivat sisällä minun tietokone. 463 00:18:44,040 --> 00:18:46,789 Joten ne bitit on käytetty muut arvot, ja mitä näen 464 00:18:46,789 --> 00:18:49,470 on jäänteitä noin ennen käyttöä, että muistia. 465 00:18:49,470 --> 00:18:53,350 >> Joten ei ole iso juttu, koska heti kun kirjoitan seuraavaksi ja sitten tulostaa y, 466 00:18:53,350 --> 00:18:55,640 se alustetaan arvo että haluan. 467 00:18:55,640 --> 00:18:57,400 Joten nyt mennään eteenpäin hieman nopeammin. 468 00:18:57,400 --> 00:18:58,540 N seuraavaa. 469 00:18:58,540 --> 00:18:59,570 Tehdään se uudestaan. 470 00:18:59,570 --> 00:19:00,530 Tehdään se uudestaan. 471 00:19:00,530 --> 00:19:02,404 Mutta en halua lyödä sen tässä, koska jos minä 472 00:19:02,404 --> 00:19:05,110 haluavat nähdä mitä tapahtuu sisällä Vaihtokorien, mitä komento? 473 00:19:05,110 --> 00:19:05,520 >> Yleisö: vaiheita. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. MALAN: vaiheita. 475 00:19:06,436 --> 00:19:09,800 Joten tämä astuu minut toiminto, pikemminkin kuin sen yli. 476 00:19:09,800 --> 00:19:12,270 Ja nyt se on hieman arvoituksellinen rehellisesti, mutta tämä on vain 477 00:19:12,270 --> 00:19:14,581 kertoo minulle Olen linjassa 33 nyt. 478 00:19:14,581 --> 00:19:15,580 Ja tehdään tämä uudestaan. 479 00:19:15,580 --> 00:19:16,080 Tulosta temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Garbage arvo, negatiivinen tällä kertaa, mutta se on vain vielä roskat arvo. 482 00:19:20,170 --> 00:19:22,810 Joten tehdä seuraavaksi, tulostaa temp. 483 00:19:22,810 --> 00:19:27,130 Se alustetaan 1, joka oli arvo x, aka. 484 00:19:27,130 --> 00:19:29,110 >> Nyt, missä ovat meidän ja X tulee? 485 00:19:29,110 --> 00:19:32,510 No, ilmoituksen tärkein, me kutsutaan nämä arvot x ja y. 486 00:19:32,510 --> 00:19:34,740 Me sitten siirretään ne vaihtaa seuraavasti. 487 00:19:34,740 --> 00:19:37,010 X oli ensin, pilkku y. 488 00:19:37,010 --> 00:19:40,020 Ja sitten, swap niitä voisi kutsua x ja y. 489 00:19:40,020 --> 00:19:42,630 Mutta selvyyden, se on kutsuen heitä ja b. 490 00:19:42,630 --> 00:19:45,970 Vaan ja b ovat nyt olemaan kopioita x ja y, vastaavasti. 491 00:19:45,970 --> 00:19:50,660 >> Joten jos menen takaisin GDB, temp on nyt yksi ja on nyt yksi. 492 00:19:50,660 --> 00:19:56,130 Mutta jos teen seuraavaksi ja nyt tehdä tulosta , on jo siirtynyt. 493 00:19:56,130 --> 00:20:00,030 Maito on kaadetaan entiseen appelsiinimehua lasiin, tai päinvastoin. 494 00:20:00,030 --> 00:20:04,750 >> Ja jos teen seuraavaksi uudestaan, ja nyt jos tulostan ulos järki tarkistaa, 495 00:20:04,750 --> 00:20:07,687 on vielä kaksi, mutta b on nyt yksi. 496 00:20:07,687 --> 00:20:08,770 Suoraan sanottuna, se on yhä olemassa. 497 00:20:08,770 --> 00:20:10,670 En välitä, mitä lämpötila on. 498 00:20:10,670 --> 00:20:16,850 Mutta heti kun olen nyt kirjoitat, sanokaamme, edelleen mennä takaisin, nyt olen lopussa 499 00:20:16,850 --> 00:20:17,480 ohjelma. 500 00:20:17,480 --> 00:20:20,730 Ja valitettavasti, x on edelleen yksi ja y on edelleen kaksi. 501 00:20:20,730 --> 00:20:22,272 >> Joten mikä oli hyödyllisyys GDB siellä? 502 00:20:22,272 --> 00:20:23,980 Se ei auta minua korjaamaan ongelma sinänsä, 503 00:20:23,980 --> 00:20:26,265 mutta se toivottavasti auttaa minua ymmärtää sitä ymmärtämättä 504 00:20:26,265 --> 00:20:30,000 että kyllä, minun logiikka on oikea, mutta minun koodi ei lopulta ottaa 505 00:20:30,000 --> 00:20:31,450 pysyviä vaikutuksia. 506 00:20:31,450 --> 00:20:34,570 Niin, että ongelma olemme menossa nyt ratkaista tänään. 507 00:20:34,570 --> 00:20:37,870 >> Mutta katsotaanpa sinne Poiketen tästä. 508 00:20:37,870 --> 00:20:39,230 Merkkijono on valhe. 509 00:20:39,230 --> 00:20:41,860 Sekin, ei tietotyyppi että on olemassa C. Se 510 00:20:41,860 --> 00:20:44,750 ollut synonyymi joidenkin aikaa jotain muuta, 511 00:20:44,750 --> 00:20:47,300 ja voimme paljastaa, että seuraava. 512 00:20:47,300 --> 00:20:53,282 >> Anna minun mennä eteenpäin ja avata kutsuttu ohjelma vertaa-0. 513 00:20:53,282 --> 00:20:56,240 Ja sen sijaan kirjoita tämä yksi, alamme kulkea koodi 514 00:20:56,240 --> 00:20:58,040 Olen jo kirjoittanut, mutta se on vain muutaman rivin. 515 00:20:58,040 --> 00:20:59,570 Joten tämä on verrata-0. 516 00:20:59,570 --> 00:21:02,380 Ja ensimmäinen asia teen on saada rivi tekstiä. 517 00:21:02,380 --> 00:21:05,610 >> Mutta huomaa, mitä olen tekee ensimmäistä kertaa. 518 00:21:05,610 --> 00:21:07,910 Erona selvästi noin linjan 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Oikeastaan, odota hetki. 521 00:21:11,402 --> 00:21:12,110 Tämä on kopio kaksi. 522 00:21:12,110 --> 00:21:13,568 Se ei ole edes oikea ohjelma. 523 00:21:13,568 --> 00:21:14,780 Okei, spoileri hälytys. 524 00:21:14,780 --> 00:21:16,890 Kunnossa, niin älä välitä siitä. 525 00:21:16,890 --> 00:21:18,520 Se on vastaus tulevaisuuden kysymys. 526 00:21:18,520 --> 00:21:21,450 >> Täällä on verrata-0, ja olen saamassa rivi tekstiä. 527 00:21:21,450 --> 00:21:22,435 Ohjelman paljon yksinkertaisempi. 528 00:21:22,435 --> 00:21:23,560 Joten tämä on yksinkertaista. 529 00:21:23,560 --> 00:21:28,070 Tämä on kuin viikko yksi, Viikko Kaksi tavaraa tällä hetkellä. string s = GetString. 530 00:21:28,070 --> 00:21:29,700 Nyt sanon sen taas tänne. 531 00:21:29,700 --> 00:21:31,830 merkkijono t = GetString. 532 00:21:31,830 --> 00:21:35,300 Ja sitten, viimeinen asia tässä ohjelma, kuten nimestäkin voi päätellä, 533 00:21:35,300 --> 00:21:37,090 on Aion yrittää verrata niitä. 534 00:21:37,090 --> 00:21:40,709 >> Joten jos s, ensimmäinen merkkijono, vastaa = t, niin olen 535 00:21:40,709 --> 00:21:42,250 aikoo sanoa kirjoitat sama asia. 536 00:21:42,250 --> 00:21:44,291 Muuta, aion sanoa kirjoitat eri asioita. 537 00:21:44,291 --> 00:21:45,880 Joten kääntää ja ajaa ohjelman. 538 00:21:45,880 --> 00:21:48,481 Joten vertailla nolla. 539 00:21:48,481 --> 00:21:48,980 Näyttää hyvältä. 540 00:21:48,980 --> 00:21:50,490 Ei kokoelma virheitä. 541 00:21:50,490 --> 00:21:52,386 >> Anna minun mennä eteenpäin nyt ja kirjoita ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Anna minun mennä eteenpäin ja sanoa jotain : Daven ja jotain: Rob. 544 00:21:59,220 --> 00:22:00,450 Ja kirjoitan eri asioita. 545 00:22:00,450 --> 00:22:01,250 Toistaiseksi niin hyvä. 546 00:22:01,250 --> 00:22:02,680 Ohjelma näyttää olevan oikea. 547 00:22:02,680 --> 00:22:03,880 >> Mutta katsotaanpa käyttää sitä uudelleen. 548 00:22:03,880 --> 00:22:05,800 Sano jotain: Gabe. 549 00:22:05,800 --> 00:22:07,140 Sano jotain: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Kunnossa. 552 00:22:09,020 --> 00:22:10,851 Ehkä osuin välilyöntiä tai jotain funky. 553 00:22:10,851 --> 00:22:11,600 Tehdään se uudestaan. 554 00:22:11,600 --> 00:22:13,020 Niin Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Eri asioita. 559 00:22:17,330 --> 00:22:19,430 Joten mitä on tekeillä? 560 00:22:19,430 --> 00:22:23,200 >> Joten meillä on nämä kaksi riviä koodin, GetString kutsutaan kahdesti. 561 00:22:23,200 --> 00:22:25,760 Ja sitten, olen yksinkertaisesti yritä verrata s ja t. 562 00:22:25,760 --> 00:22:28,370 Mutta mitä oikeastaan ​​sitten tapahtuu? 563 00:22:28,370 --> 00:22:31,180 No, minun käsiala on noin teurastaa tässä esimerkissä hieman. 564 00:22:31,180 --> 00:22:34,630 Ja lähdetään todella heittää tämä ylös tänne, samoin. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Joten meillä on linja, kuten string s = GetString. 567 00:22:45,712 --> 00:22:48,295 Niin, että vain ensimmäinen mielenkiintoisen tuosta ohjelmasta. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Mutta mitä tämä kaikki aika on ollut takana tapahtuu huppu? 570 00:22:52,974 --> 00:22:55,890 No, vasemmalla puolella on merkkijono, joka on tietyntyyppinen muuttuja, 571 00:22:55,890 --> 00:22:56,785 ja sitä kutsutaan s. 572 00:22:56,785 --> 00:23:00,019 Joten tiedän, että tämä käyttää muistia, tai RAM, minun tietokone jotenkin. 573 00:23:00,019 --> 00:23:02,060 Joten aion abstraktisti piirtää että neliö. 574 00:23:02,060 --> 00:23:04,820 32 bittiä, se kääntyy pois, mutta siitä lisää tulevaisuudessa. 575 00:23:04,820 --> 00:23:06,410 Ja sitten, mitä tapahtuu täällä? 576 00:23:06,410 --> 00:23:08,700 >> No, GetString ilmeisesti saa merkkijonon käyttäjältä. 577 00:23:08,700 --> 00:23:11,360 Ja GetString sai Zamyla tai Gabe tai Daven. 578 00:23:11,360 --> 00:23:14,640 Joten valita ensimmäinen niistä, jotka oli Daven. 579 00:23:14,640 --> 00:23:19,174 Niin tehokkaasti, mikä GetString sai minulle, että ensimmäisessä tapauksessa oli D-V-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 Ja sitten, mitä muuta teki se antaa minulle salaa? 582 00:23:25,045 --> 00:23:25,920 Yleisö: [kuulumaton] 583 00:23:25,920 --> 00:23:28,720 DAVID J. MALAN: Joo, / 0 tai tyhjä merkki. 584 00:23:28,720 --> 00:23:30,550 Niin tehokkaasti antoi minulle merkkijono. 585 00:23:30,550 --> 00:23:34,550 Mutta tiedämme jo aikaisemmista näyttää, että jono on vain joukko 586 00:23:34,550 --> 00:23:37,895 merkkejä, ja se lopetettiin tätä erityistä kiinteän pisteen merkki, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Mutta jos tämä on totta ja tämä on neliö, 589 00:23:42,310 --> 00:23:44,160 tämä on selvästi paljon suurempi suorakulmio. 590 00:23:44,160 --> 00:23:46,830 Ja todellakin, tämä on, Väitän, vain 32 bittiä. 591 00:23:46,830 --> 00:23:49,500 Ja tämä on selvästi enemmän kuin 32 bittiä, koska tämä on luultavasti 592 00:23:49,500 --> 00:23:51,583 kahdeksan plus kahdeksan plus kahdeksan plus kahdeksan plus kahdeksan, 593 00:23:51,583 --> 00:23:53,320 vain koska tavujen ASCII. 594 00:23:53,320 --> 00:23:57,030 Miten hitossa aiomme sovi Daven tähän pieni laatikko täällä? 595 00:23:57,030 --> 00:23:59,880 >> No, mitä GetString todella tekee? 596 00:23:59,880 --> 00:24:03,680 No, tämä grid täällä edustaa tietokoneeni muistiin tai RAM. 597 00:24:03,680 --> 00:24:07,564 Joten mielivaltaisesti sanoa, että jos jokainen näistä edustaa tavu, 598 00:24:07,564 --> 00:24:09,730 voimme ajatella kunkin tavu olevan osoitteen, 599 00:24:09,730 --> 00:24:13,830 kuten 33 Oxford Street, tai 34 Oxford Street, tai 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Joten aivan kuten kodeissa on osoitteita ja rakennukset ovat osoitteita, 601 00:24:16,700 --> 00:24:19,810 niin tehdä yksittäisiä tavuja muisti osoitteita tai numeroita 602 00:24:19,810 --> 00:24:21,042 että yksilöllisesti tunnistaa ne. 603 00:24:21,042 --> 00:24:22,000 Nyt tämä on mielivaltainen. 604 00:24:22,000 --> 00:24:25,370 Mutta pitää se yksinkertainen, aion käyttää heksadesimaali- vain sopimuksen mukaan, 605 00:24:25,370 --> 00:24:28,200 mutta 0x merkitse mitään muita kuin "tämä on heksadesimaali-." 606 00:24:28,200 --> 00:24:31,030 ja aion vaatia, että "D" päätyy tavua Yksi muistiin. 607 00:24:31,030 --> 00:24:34,210 >> Minulla ei ole mitään muuta meneillään muistia, joten Daven sai ensimmäisen paikan 608 00:24:34,210 --> 00:24:35,509 klo Byte One. 609 00:24:35,509 --> 00:24:36,800 Tämä siis tulee olemaan 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Tämä on menossa 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Tämä tulee olemaan 0x4. 614 00:24:41,800 --> 00:24:43,025 Tämä on menossa 0x5. 615 00:24:43,025 --> 00:24:44,025 Tämä tulee olemaan 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Mutta kun alkaa ajatella mitä tietokone tekee 618 00:24:48,290 --> 00:24:50,710 alla huppu, voit alkaa päätellä 619 00:24:50,710 --> 00:24:54,960 miten muutama vuosi sitten, olisi ovat toteuttaneet C itse. 620 00:24:54,960 --> 00:24:58,360 Mikä on GetString luultavasti returning-- koska se 621 00:24:58,360 --> 00:25:00,946 tuntuu se ei ole paluu Daven sinänsä 622 00:25:00,946 --> 00:25:03,320 koska hän varmasti aio sopivaksi tässä vähän box-- 623 00:25:03,320 --> 00:25:05,090 joten mitä GetString todennäköisesti palaamassa? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> Yleisö: [kuulumaton] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. MALAN: sijainti Daven. 627 00:25:10,540 --> 00:25:12,770 Ja se on tehnyt tätä lähtien viikko yksi. 628 00:25:12,770 --> 00:25:16,150 Mikä GetString on todella paluu ei ole merkkijono, sinänsä. 629 00:25:16,150 --> 00:25:17,780 Se on yksi pieni valkoinen valheita. 630 00:25:17,780 --> 00:25:22,520 Se on palaamassa osoite merkkijono muistiin, yksilöllinen osoite. 631 00:25:22,520 --> 00:25:24,820 Daven asuu 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Mutta lyhyemmin, Gavin elää klo 0x1, Osoite Number One. 633 00:25:29,310 --> 00:25:32,280 >> Joten mitä saa laittaa tähän pieni laatikko sitten, on selvää, 634 00:25:32,280 --> 00:25:35,930 on vain osoite merkkijonon. 635 00:25:35,930 --> 00:25:38,110 Joten kaikki tällä kertaa, tämä on jatkunut. 636 00:25:38,110 --> 00:25:41,650 Mutta mitä tämä vihjaa nyt on, että jos kaikki s on 637 00:25:41,650 --> 00:25:44,710 on numero sisällä se, kuka pysäyttää sinut, ohjelmoija, 638 00:25:44,710 --> 00:25:47,970 panemasta tahansa numero mikä tahansa muuttuja ja vain hyppy 639 00:25:47,970 --> 00:25:49,080 kuin kimpale muistia? 640 00:25:49,080 --> 00:25:51,320 Ja todellakin, näemme se uhkaa ensi kerralla. 641 00:25:51,320 --> 00:25:53,500 >> Mutta nyt tämä tuntuu riittämätön. 642 00:25:53,500 --> 00:25:55,630 Jos sanon, saada minut merkkijono, annat minulle Daven. 643 00:25:55,630 --> 00:25:57,230 Mutta et todellakaan anna minulle Daven. 644 00:25:57,230 --> 00:25:59,310 Kaikki annatte minulle on Daven osoite. 645 00:25:59,310 --> 00:26:04,310 Miten sitten tietää varmasti jossa Daven alkaa ja ends-- 646 00:26:04,310 --> 00:26:07,140 Tarina alkaa olla weird-- jossa Daven alkaa ja loppuu, 647 00:26:07,140 --> 00:26:10,435 ja sitten, seuraava merkkijonon muistiin alkaa? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> No, jos olet jakamassa minua alussa Daven, 650 00:26:13,620 --> 00:26:17,230 olennaisesti, mistä tiedän jos lopussa hänen nimensä on? 651 00:26:17,230 --> 00:26:20,550 Että erityistä null merkki, joka on entistä tärkeämpää nyt 652 00:26:20,550 --> 00:26:23,040 jos jouset alla huppu ovat yksinkertaisesti tunnistettu 653 00:26:23,040 --> 00:26:25,820 yksikäsitteisesti niiden sijainti muistiin. 654 00:26:25,820 --> 00:26:28,130 Joten koko tämän ajan, joka on mitä on tekeillä. 655 00:26:28,130 --> 00:26:32,470 >> Joten kun katsomme nyt koodi tähän, selittää 656 00:26:32,470 --> 00:26:35,790 Jos haluat vian linjan 26. 657 00:26:35,790 --> 00:26:39,560 Miksi Zamyla ja Zamyla erilainen? 658 00:26:39,560 --> 00:26:41,330 Miksi Gabe ja Gabe erilainen? 659 00:26:41,330 --> 00:26:42,154 Joo, takana. 660 00:26:42,154 --> 00:26:43,390 >> Yleisö: Niillä on eri osoitteet. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. MALAN: Yksinkertaisesti siksi, ne ovat eri osoitteita. 662 00:26:45,931 --> 00:26:48,820 Koska kun soitat GetString jälleen, jonka minä teen nopeasti täällä, 663 00:26:48,820 --> 00:26:52,870 jos tämä on toinen linja, merkkijono t, kuten tein, että ohjelman 664 00:26:52,870 --> 00:26:55,030 vastaa toisen puhelun GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Seuraavan kerran soitan GetString, aion 667 00:26:58,670 --> 00:27:00,190 saada eri kimpale muistia. 668 00:27:00,190 --> 00:27:02,220 >> GetString on sallittu kysyä toiminta 669 00:27:02,220 --> 00:27:03,800 järjestelmää enemmän ja enemmän muistia. 670 00:27:03,800 --> 00:27:07,894 Se ei tule käyttää samaa kuusi tavua joka ikinen kerta. 671 00:27:07,894 --> 00:27:09,810 Se tulee saada uusi kimpale muistia, joka 672 00:27:09,810 --> 00:27:12,780 tarkoittaa t on menossa jokin muu arvo tänne. 673 00:27:12,780 --> 00:27:15,380 >> Joten kun en s vastaa = t, et ole vertaamalla 674 00:27:15,380 --> 00:27:17,880 D vastaan ​​ja vastaan Tämän ja V vastaan. 675 00:27:17,880 --> 00:27:19,588 Olet verrataan tämän vastaan, joka 676 00:27:19,588 --> 00:27:24,020 suoraan sanottuna on melko useful-- useless-- on melko turha, koska kuka oikeasti 677 00:27:24,020 --> 00:27:25,830 välittää missä jouset ovat muistissa? 678 00:27:25,830 --> 00:27:26,850 >> Ja todellakin, meillä ei. 679 00:27:26,850 --> 00:27:28,980 Ja emme aio aloittaa erityisen huolehtiva. 680 00:27:28,980 --> 00:27:34,180 Ainoastaan ​​siinä määrin, että vikoja voi syntyä ja turvallisuusuhat voivat syntyä tahtoa 681 00:27:34,180 --> 00:27:36,100 me todella alkaa välitä tästä. 682 00:27:36,100 --> 00:27:37,230 Joten korjata ongelman. 683 00:27:37,230 --> 00:27:39,650 Osoittautuu, voit korjata sen erittäin yksinkertaisesti. 684 00:27:39,650 --> 00:27:42,600 >> Ja lähdetään itse, ennen kuin paljastaa, että jälleen, mikä olisi 685 00:27:42,600 --> 00:27:47,170 et jos CS50 luokassa, ja sinun piti toteuttaa 686 00:27:47,170 --> 00:27:48,600 vertaaminen kaksi merkkijonoa. 687 00:27:48,600 --> 00:27:51,440 Olette selvästi voi vain käyttää s vastaa = t. 688 00:27:51,440 --> 00:27:54,090 Mutta loogisesti, kuinka vertaisit tämän merkkijonon 689 00:27:54,090 --> 00:27:56,370 vastaan ​​merkkijono käyttäen C-koodia? 690 00:27:56,370 --> 00:27:56,880 Joo. 691 00:27:56,880 --> 00:27:58,780 >> Yleisö: Just do silmukka [kuulumaton] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. MALAN: Perfect. 694 00:28:01,670 --> 00:28:02,900 Yleisö: [kuulumaton] 695 00:28:02,900 --> 00:28:03,310 DAVID J. MALAN: Joo. 696 00:28:03,310 --> 00:28:05,390 Just käyttää silmukka tai kun silmukka tai mitä tahansa. 697 00:28:05,390 --> 00:28:08,710 Mutta vain soveltaa perusajatuksesta, että jos tämä on kimpale muistia tai array 698 00:28:08,710 --> 00:28:11,590 ja tämä on, kerrata yli molemmat samaan aikaan. 699 00:28:11,590 --> 00:28:12,960 Ja juuri verrata kirjaimia. 700 00:28:12,960 --> 00:28:14,260 >> Ja sinun täytyy olla hieman varovainen, koska olet 701 00:28:14,260 --> 00:28:16,247 halua yhden sormen ohittaa muut 702 00:28:16,247 --> 00:28:18,080 koska yksi merkkijono on pitempi kuin toinen. 703 00:28:18,080 --> 00:28:21,380 Niin olet menossa haluavat tarkistaa tämä erityinen arvo lopussa, null. 704 00:28:21,380 --> 00:28:24,017 Mutta se todella on, että loppuun, niin yksinkertaista. 705 00:28:24,017 --> 00:28:26,100 Ja suoraan sanottuna, emme tarvitse keksiä pyörän. 706 00:28:26,100 --> 00:28:27,960 Tässä on versio kaksi. 707 00:28:27,960 --> 00:28:32,910 Ja mitä aion sanoa tässä, että sijaan vertaamalla vertaistuki = t, 708 00:28:32,910 --> 00:28:38,964 Minä sen sijaan aio sanoa, jos merkkijono vertailun n pilkuilla t on = 0. 709 00:28:38,964 --> 00:28:40,130 Nyt, mitä on merkkijono vertailla? 710 00:28:40,130 --> 00:28:43,046 >> On käynyt ilmi, se on toiminto, joka mukana C, jonka elämän tarkoitus 711 00:28:43,046 --> 00:28:44,650 on vertailla kahta merkkijonoa. 712 00:28:44,650 --> 00:28:48,300 Ja sekoita vertailla, jos luemme sen man-sivulta tai asiakirjoja tai CS50 713 00:28:48,300 --> 00:28:50,630 viite, se yksinkertaisesti kertoa, että kohua 714 00:28:50,630 --> 00:28:55,730 vertaa palauttaa joko negatiivinen numero tai positiivinen tai nolla, 715 00:28:55,730 --> 00:28:57,660 Nolla tarkoittaa, että ne ovat yhtä. 716 00:28:57,660 --> 00:28:58,570 >> Niin vain arvailua. 717 00:28:58,570 --> 00:29:00,390 Mitä se voisi tarkoittaa, jos sekoita vertaa palaa 718 00:29:00,390 --> 00:29:02,110 negatiivinen arvo tai positiivinen arvo? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 Yleisö: suurempi tai pienempi kuin. 721 00:29:04,285 --> 00:29:05,570 DAVID J. MALAN: Joo, suurempi tai pienempi kuin. 722 00:29:05,570 --> 00:29:08,640 Joten jos halusi lajitella koko nippu jousille dictionary-- 723 00:29:08,640 --> 00:29:12,975 koska me lopulta alas road-- Virheetöntä käyttää mahdollisesti, 724 00:29:12,975 --> 00:29:15,850 koska se tulee tehdä vertailu jouset sinulle, ja kertoa 725 00:29:15,850 --> 00:29:20,060 teistä tekee tulee ennen b, tai ei b tulevat ennen aakkosjärjestyksessä. 726 00:29:20,060 --> 00:29:21,490 Voimme tehdä juuri näin. 727 00:29:21,490 --> 00:29:23,620 >> Ja huomaa, tein yhden muun asia tässä esimerkissä. 728 00:29:23,620 --> 00:29:26,870 Mitä muuta on muuttunut korkeampi jopa tässä päätehtävä? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 Ja tämä on, että muut valkoinen valhe. 732 00:29:31,150 --> 00:29:33,750 Kaikki tällä kertaa, kun olet kirjoittanut merkkijonon, 733 00:29:33,750 --> 00:29:38,350 olemme salaa kirjoittamasta merkkijonon char * jotta kalahtaa todella 734 00:29:38,350 --> 00:29:39,270 ymmärtää sinua. 735 00:29:39,270 --> 00:29:42,450 >> Toisin sanoen, CS50.h ja niin me lopulta nähdä, 736 00:29:42,450 --> 00:29:45,950 teimme synonyymi kutsutaan merkkijono se on sama asia kuin char *. 737 00:29:45,950 --> 00:29:49,910 Ja nyt tiedän vain että *, Tässä yhteydessä, ainakin, 738 00:29:49,910 --> 00:29:51,286 tarkoittaa osoite. 739 00:29:51,286 --> 00:29:52,210 >> Osoite mitä? 740 00:29:52,210 --> 00:29:56,390 No, se, että sanoin char *, eikä int * tai float *, 741 00:29:56,390 --> 00:30:00,820 tarkoittaa, että char * on osoitteen merkkiä. 742 00:30:00,820 --> 00:30:06,770 Joten tämä pieni laatikko täällä, alias merkkijono, on todella tyyppiä char *, 743 00:30:06,770 --> 00:30:10,490 joka on yksinkertaisesti hieno tapa sanoa, tähän kohtaan menee osoite. 744 00:30:10,490 --> 00:30:12,430 Ja mitä se osoite viittaa? 745 00:30:12,430 --> 00:30:13,780 Ilmeisesti merkkiä. 746 00:30:13,780 --> 00:30:16,410 >> Mutta voisimme aivan on int * ja muita asioita. 747 00:30:16,410 --> 00:30:20,790 Mutta nyt, char * on oikeastaan ​​kaikkein suoraviivainen ja yksi kiinnostava. 748 00:30:20,790 --> 00:30:23,310 Niin tämä ongelma on menossa nousta, vaikka, jälleen. 749 00:30:23,310 --> 00:30:24,830 >> Taitaa tämän ohjelman avaamista. 750 00:30:24,830 --> 00:30:27,670 Katsotaan nyt voimme ennustaa Mitä vikaa tämän koodin. 751 00:30:27,670 --> 00:30:31,140 Joten tässä ohjelmassa, copy-0, olen aio mennä eteenpäin ja taas soittaa 752 00:30:31,140 --> 00:30:34,190 GetString ja tallentaa arvon s. 753 00:30:34,190 --> 00:30:38,800 >> Ja sitten, miksi teen tämän, aivan kuten muistutuksen viikkoa aikaisemmin? 754 00:30:38,800 --> 00:30:40,960 Teimme sanoa, että GetString joskus palauttaa null. 755 00:30:40,960 --> 00:30:42,793 Mitä se tarkoittaa, jos GetString palauttaa null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Jokin meni pieleen. 758 00:30:46,034 --> 00:30:48,950 Se tarkoittaa luultavasti merkkijono on liian iso, tietokoneen muisti. 759 00:30:48,950 --> 00:30:51,724 Se tapahtuu super, super, super harvoin, mutta se voisi tapahtua. 760 00:30:51,724 --> 00:30:53,890 Haluamme tarkistaa sitä, ja siinä kaikki teemme. 761 00:30:53,890 --> 00:30:57,910 >> Koska näemme nyt, jos et aloittaa tarkkailun tavallisesti asioita 762 00:30:57,910 --> 00:31:00,870 kuten null, saatat todella alkaa mennä 763 00:31:00,870 --> 00:31:03,106 osoitteisiin muisti, ovat pätemättömiä. 764 00:31:03,106 --> 00:31:05,980 Ja aiot aloittaa asiakkuutta enemmän ja enemmän segmentointi viat. 765 00:31:05,980 --> 00:31:08,360 Tai Mac tai PC, vain saa tietokoneen ripustaa 766 00:31:08,360 --> 00:31:10,340 tai ohjelma jäädyttää, mahdollisesti. 767 00:31:10,340 --> 00:31:14,930 >> Joten nyt olen väittävät copy-0.c, että minä aijon kopioida nämä jousille tavalla 768 00:31:14,930 --> 00:31:15,685 linjan 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 Ja sitten, aion Patenttivaatimuksen alareunassa 771 00:31:18,750 --> 00:31:21,430 tässä, että aion muuttaa yksi heistä. 772 00:31:21,430 --> 00:31:22,330 >> Niin huomaa. 773 00:31:22,330 --> 00:31:24,370 Soitan vanha ystävämme strlen. 774 00:31:24,370 --> 00:31:28,960 Ja juuri selittää Englanti mitä tämä linja 34 tekee? 775 00:31:28,960 --> 00:31:32,480 Mitä t kiinnike 0 edustavat vasemmalla. 776 00:31:32,480 --> 00:31:32,980 Joo. 777 00:31:32,980 --> 00:31:34,339 >> Yleisö: Ensimmäinen merkki t? 778 00:31:34,339 --> 00:31:35,880 DAVID J. MALAN: Ensimmäinen merkki t. 779 00:31:35,880 --> 00:31:36,379 Siinä se. 780 00:31:36,379 --> 00:31:40,024 Ensimmäisen merkin t, haluan määrittää isoiksi versio 781 00:31:40,024 --> 00:31:41,190 ensimmäisen merkin t. 782 00:31:41,190 --> 00:31:43,200 Joten tämä on hyödyntäminen ensimmäinen kirjain. 783 00:31:43,200 --> 00:31:46,340 Ja sitten, aivan viimeinen tekoni Tässä ohjelmassa on Väitän tässä 784 00:31:46,340 --> 00:31:50,340 alkuperäinen, s, ja tässä on kopio, t. 785 00:31:50,340 --> 00:31:54,610 >> Vaan perustuu tarinan me vain kertoi mitä kieliä todella ovat, 786 00:31:54,610 --> 00:31:57,520 mikä on line 28 todella tekee ja mitä on 787 00:31:57,520 --> 00:31:59,405 Tuloksena bug menossa olla ruudulla? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Joten ensimmäinen, ensimmäinen kysymys, 28. 790 00:32:03,500 --> 00:32:09,040 Mikä on merkkijono t = s todella tekee? 791 00:32:09,040 --> 00:32:16,430 Jos meillä on vasemmassa puoli tässä string t = s; 792 00:32:16,430 --> 00:32:19,400 joka antaa minulle yksi laatikko täällä ja yksi laatikko täällä. 793 00:32:19,400 --> 00:32:25,530 Ja kai tämä osoite on 0x, sanokaamme, 50 tällä kertaa, mielivaltaisesti. 794 00:32:25,530 --> 00:32:28,847 Mitä string t = s tehdä alla huppu? 795 00:32:28,847 --> 00:32:30,340 >> Yleisö: [kuulumaton] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. MALAN: Se tallentaa muistiin käsitellä siellä, niin 0x50 menee sinne. 797 00:32:34,100 --> 00:32:37,980 Joten jos nyt menen ensin merkki t ja isoiksi sitä, 798 00:32:37,980 --> 00:32:39,535 mitä olen tehokkaasti tekee s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Olen todella tehdä sama asia, eikö? 801 00:32:43,450 --> 00:32:47,680 Koska jos Osoite 0x50-- ja vain minä ei ole paljon tilaa pöydällä täällä, 802 00:32:47,680 --> 00:32:51,750 mutta olettaa, että tämä on 0x50 tänne, jonnekin minun tietokoneen muistiin. 803 00:32:51,750 --> 00:32:55,825 >> Ja olen esimerkiksi Gabe pienillä täällä, kuten tämä. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 Ja olen sanonut t kiinnike 0 saa aktivoitu. 806 00:33:01,980 --> 00:33:04,860 No, t kiinnike 0 on ensimmäinen kirjain t. 807 00:33:04,860 --> 00:33:07,840 Niin vähän g on menossa tullut iso G. Mutta ongelma 808 00:33:07,840 --> 00:33:09,410 on, mitä s myös viitata? 809 00:33:09,410 --> 00:33:10,300 >> Yleisö: sama. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. MALAN: täsmälleen sama asia. 811 00:33:11,841 --> 00:33:16,342 Niin yksinkertainen selitys ehkä, vaikka syntaksi on hieman outo. 812 00:33:16,342 --> 00:33:17,050 Joten tehdään tämä. 813 00:33:17,050 --> 00:33:20,210 Tehdä kopio-0 ja sitten ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Sano jotain: Gabe. 816 00:33:24,110 --> 00:33:26,760 Ja valitettavasti, molemmat ne on nyt aktivoitu, 817 00:33:26,760 --> 00:33:29,500 vaan että taustalla syystä, että olemme yksinkertaisesti 818 00:33:29,500 --> 00:33:32,350 nyt tekemisissä osoitteita. 819 00:33:32,350 --> 00:33:36,470 >> Niin miten alamme address-- no pun intended-- 820 00:33:36,470 --> 00:33:39,270 miten me vastataan tätä ongelmaa? 821 00:33:39,270 --> 00:33:44,400 No, copy1.c, asiat etenevät saada hieman monimutkaisempi. 822 00:33:44,400 --> 00:33:49,310 Haluaisin kuitenkin vaatia käsitteellisesti yksinkertainen ratkaisu. 823 00:33:49,310 --> 00:33:50,852 >> Niin vaikea päästä ensi silmäyksellä. 824 00:33:50,852 --> 00:33:53,560 Ei tule olemaan helppoa ensimmäistä kun kirjoitat sen pois, ehkä, 825 00:33:53,560 --> 00:33:57,440 mutta jos ongelma on, että yksinkertaisesti tee t = s vain 826 00:33:57,440 --> 00:33:59,694 kopioi osoite, mitä, uudelleen, jos voin valita sinua, 827 00:33:59,694 --> 00:34:02,110 tulee olemaan ratkaisu ja oikeastaan ​​kopiointi merkkijono? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> Yleisö: me luultavasti käyttää silmukka uudelleen. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. MALAN: Joo. 831 00:34:06,890 --> 00:34:08,390 Joten olemme menossa tarvitse silmukka uudelleen. 832 00:34:08,390 --> 00:34:11,800 Ja koska jos haluamme kopioida merkkijonon s toiseen merkkijono, 833 00:34:11,800 --> 00:34:14,120 me luultavasti halua tehdä sitä merkki kerrallaan. 834 00:34:14,120 --> 00:34:17,199 Mutta ongelma on, jos tämä on alunperin s, 835 00:34:17,199 --> 00:34:22,159 Nyt meidän täytyy aloittaa nimenomaisesti muistin allokointi t. 836 00:34:22,159 --> 00:34:24,320 >> Toisin sanoen, nyt piirtää tämän viimeisen kerran. 837 00:34:24,320 --> 00:34:28,659 Jos tämä on merkkijono s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 Ja laitetaan tämä tänne, samoin. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Tämä on GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 Ja sitten, kuvan jotain kuin että tulee olemaan kuin ennen, 844 00:34:43,860 --> 00:34:44,360 g-a-b-e / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 Se näyttää vähän jotain tällaista. 847 00:34:48,960 --> 00:34:53,650 Ja s siksi me kutsumme tätä 0x50, ja että tulee olemaan 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Joten tämä on 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 Ja sitten, en merkkijono t. 851 00:34:59,690 --> 00:35:02,450 Muistiin, joka on juuri menossa antaa minulle pienen aukion näin. 852 00:35:02,450 --> 00:35:04,080 Niin mitä tärkeä askel nyt? 853 00:35:04,080 --> 00:35:09,870 Jos haluan kopioida s kohti t, mitä tyhjä meidän täytyy täyttää täällä? 854 00:35:09,870 --> 00:35:12,050 Vai mitä meidän on tehdä korkealla tasolla? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Joo? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Joku? 859 00:35:17,020 --> 00:35:17,690 Joo. 860 00:35:17,690 --> 00:35:19,214 >> Yleisö: Meidän [kuultavissa]. 861 00:35:19,214 --> 00:35:21,380 DAVID J. MALAN: Joo, me täytyy täyttää tämä tyhjäksi. 862 00:35:21,380 --> 00:35:24,340 En voi kopioida ja sitten hyödyntämään Gabe nimi 863 00:35:24,340 --> 00:35:28,120 kunnes Pyydän käyttöjärjestelmä toisen kimpale muistia 864 00:35:28,120 --> 00:35:30,640 joka on vähintään yhtä suuri kuin alkuperäinen. 865 00:35:30,640 --> 00:35:32,130 Niin että jättää meille kysymyksen. 866 00:35:32,130 --> 00:35:36,080 >> Miten Pyydän käyttöjärjestelmä ei vain yksinkertainen pikku pointer-- 867 00:35:36,080 --> 00:35:38,530 koska tätä kutsutaan, osoite, pointer-- ei 868 00:35:38,530 --> 00:35:40,980 yksinkertainen pieni laatikko näin kutsutaan merkkijono? 869 00:35:40,980 --> 00:35:44,200 Miten pyydän toiminta järjestelmä iso kimpale muistia? 870 00:35:44,200 --> 00:35:48,430 Toistaiseksi olen vain saanut sen takaisin välillisesti soittamalla GetString. 871 00:35:48,430 --> 00:35:50,740 Joten miten on GetString jopa saada sen muistiin? 872 00:35:50,740 --> 00:35:53,430 >> No, käy ilmi, että siellä on tämä toinen toiminto täällä 873 00:35:53,430 --> 00:35:55,160 että me nyt alkaa käyttää. 874 00:35:55,160 --> 00:35:59,780 Nyt tämä näyttää paljon enemmän arvoituksellinen than-- ja minä olen ainoa, joka näkee se-- 875 00:35:59,780 --> 00:36:03,150 tämä linja näyttää paljon enemmän arvoituksellinen sen pitäisi ensi silmäyksellä. 876 00:36:03,150 --> 00:36:04,650 Mutta katsotaanpa kiusaa se erilleen. 877 00:36:04,650 --> 00:36:07,950 >> Vasemmalla puolella, minulla on char * t. 878 00:36:07,950 --> 00:36:13,280 Niin Englanti, aloitamme muotoilla oikea lauseita teknistä ammattikieltä. 879 00:36:13,280 --> 00:36:19,757 Joten tämä on kohdentaa tyyppisenä muuttujana char * nimeltään t. 880 00:36:19,757 --> 00:36:21,090 Nyt, mitä se oikeastaan ​​tarkoittaa? 881 00:36:21,090 --> 00:36:23,881 >> No, se tarkoittaa, mitä olen menossa laittaa tämä muuttuja nimeltään t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Osoitteen merkkiä. 884 00:36:26,402 --> 00:36:28,360 Joten se on vain yksinkertaisempi, järkevämpi tapa 885 00:36:28,360 --> 00:36:29,930 kuvata vasemmalla puolella. 886 00:36:29,930 --> 00:36:32,890 Jotta luodaan tämä jos täällä vain. 887 00:36:32,890 --> 00:36:34,760 Joten oikea puoli, oletettavasti on menossa 888 00:36:34,760 --> 00:36:37,170 myöntää, että isompi kimpale muistia miten? 889 00:36:37,170 --> 00:36:38,340 Joten kiusaa tällä toisistaan. 890 00:36:38,340 --> 00:36:41,131 >> Se on ylivoimainen ensi silmäyksellä, mutta mitä tapahtuu täällä sisällä? 891 00:36:41,131 --> 00:36:43,740 Ensinnäkin siellä malloc, joka on ilmeisesti uusi ystävämme, 892 00:36:43,740 --> 00:36:45,450 "Muisti jakaa." 893 00:36:45,450 --> 00:36:49,560 Joten tämä on argumentti siirrellään siihen, niin se on aika iso argumentti. 894 00:36:49,560 --> 00:36:50,970 Joten kiusaa tällä toisistaan. 895 00:36:50,970 --> 00:36:53,410 >> strlen ja s, edustaa tietenkin sanot-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 Yleisö: merkkien määrä. 898 00:36:55,600 --> 00:36:56,710 DAVID J. MALAN: Just merkkien määrä s. 899 00:36:56,710 --> 00:36:59,040 Joten pituus s, alkuperäisen merkkijonon. 900 00:36:59,040 --> 00:37:00,350 Niin G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 Joten se on luultavasti neljä tässä tapauksessa. 902 00:37:02,320 --> 00:37:05,485 Miksi minä teen +1 jälkeen soittamalla strlen S? 903 00:37:05,485 --> 00:37:06,360 Yleisö: [kuulumaton] 904 00:37:06,360 --> 00:37:07,590 DAVID J. MALAN: Tästä erityistä null merkki. 905 00:37:07,590 --> 00:37:11,260 Jos minulta kysytään mitä pituus Gabe nimi, aion sanoa neljä. 906 00:37:11,260 --> 00:37:14,480 Alla huppu, vaikka, tarvitsen että viides tavu null merkki. 907 00:37:14,480 --> 00:37:16,100 Joten siksi olen tekemässä +1. 908 00:37:16,100 --> 00:37:21,730 >> Nyt vain jos käytät tätä ohjelma tietokoneella muuta kuin sanoa, 909 00:37:21,730 --> 00:37:24,610 CS50 laite, jos koko char 910 00:37:24,610 --> 00:37:26,350 voi olla erilainen omasta computer-- 911 00:37:26,350 --> 00:37:30,590 Osoittautuu, että voin kutsua tätä operaattori sizeof, kysykää tietokone, 912 00:37:30,590 --> 00:37:32,870 mikä on koko char tässä tietokoneessa? 913 00:37:32,870 --> 00:37:37,400 >> Ja kertomalla viidellä tässä esimerkiksi koko nieriä, joka 914 00:37:37,400 --> 00:37:40,440 useimmissa tietokoneissa vain yksi, malloc 915 00:37:40,440 --> 00:37:44,830 aikoo myöntää minulle tämä iso kimpale muistia täällä oikealla. 916 00:37:44,830 --> 00:37:47,140 Ja se tulee return-- se on function-- joten se on 917 00:37:47,140 --> 00:37:48,265 aio palata mitä? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 Yleisö: osoite? 920 00:37:51,830 --> 00:37:53,709 DAVID J. MALAN: osoite, mitä? 921 00:37:53,709 --> 00:37:55,250 Yleisö: muistin se jaetaan? 922 00:37:55,250 --> 00:37:56,450 DAVID J. MALAN: Of muistia se kohdennetaan. 923 00:37:56,450 --> 00:37:59,189 Joten minulla ei ole aavistustakaan, rehellisesti, mihin tämä on menossa päätyä. 924 00:37:59,189 --> 00:38:01,480 Aion ehdottaa, että se tulee päätyvät 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Täysin mielivaltaista, vaan muualla kuin 0x50, 927 00:38:06,009 --> 00:38:08,800 koska käyttöjärjestelmä, mikä Windows ja Mac OS tehdä minulle, on 928 00:38:08,800 --> 00:38:11,230 varmista, että se antaa minua eri paloina muistia. 929 00:38:11,230 --> 00:38:14,210 >> Joten tämä on arvoa, jos tämä kimpale muisti saattaa päätyä. 930 00:38:14,210 --> 00:38:16,060 Joten tämä on mitä päätyy tänne, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Joten nyt selvästi, ymmärrän , että tämä ei ole sama kuin tämä, 933 00:38:21,570 --> 00:38:23,960 koska he osoittaen eri paloina muistia. 934 00:38:23,960 --> 00:38:29,980 Joten jos en nyt itse halua kopioida tätä vuonna, nyt tee Ehdotettu ratkaisu. 935 00:38:29,980 --> 00:38:36,870 >> Mennään vain, luoda silmukka, ja tehdä t kiinnike i saa s kiinnike i. 936 00:38:36,870 --> 00:38:39,760 Koska nyt voin käyttää tämän taulukon kaltainen merkintä, 937 00:38:39,760 --> 00:38:43,390 sillä vaikka malloc hyvin yleisesti jakaa minua muisti, 938 00:38:43,390 --> 00:38:45,290 muisti on vain peräkkäisiä tavuja. 939 00:38:45,290 --> 00:38:47,240 Tavu, tavu, tavu, takaisin takaisin takaisin. 940 00:38:47,240 --> 00:38:50,030 >> Voin varmasti kuin ohjelmoija käsitellä sitä array, joka 941 00:38:50,030 --> 00:38:55,090 tarkoittaa, että voin käyttää tätä vihdoin tuttuja Kaikki merkinnät ovat vain joitakin hakasulkeisiin. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Joten haluan tauko siellä, koska tämä on paljon kerralla, vaikka 944 00:39:00,020 --> 00:39:03,530 vaikka perusajatus kertaus on merkkijono, koko tämän ajan, 945 00:39:03,530 --> 00:39:05,550 ei ole uusi tietotyyppi sinänsä. 946 00:39:05,550 --> 00:39:10,150 Se on vain niin sanottu osoitin, osoitteen luonne, 947 00:39:10,150 --> 00:39:12,650 mikä tarkoittaa vain se numero että ihmisen yleissopimus 948 00:39:12,650 --> 00:39:15,350 meillä on tapana kirjoittaa niin 0x jotain. 949 00:39:15,350 --> 00:39:18,590 >> Mutta se on vain numero, kuten 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 joka sattuu olemaan CS rakennuksen osoite. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Kysyttävää nämä tiedot? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Joo? 955 00:39:25,289 --> 00:39:28,530 >> Yleisö: Miksi tarkista t yhtä nollaamaan? 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. MALAN: Miksi tarkista t yhtä nollaamaan? 957 00:39:30,740 --> 00:39:33,250 Jos luemme documentation-- suuri question-- varten malloc, 958 00:39:33,250 --> 00:39:37,020 se aikoo sanoa sakon tulostaa, joskus malloc saattaa palata null, 959 00:39:37,020 --> 00:39:38,080 kuten GetString. 960 00:39:38,080 --> 00:39:41,820 Ja todellakin, GetString palauttaa null Jos puolestaan ​​malloc palauttaa null, 961 00:39:41,820 --> 00:39:43,130 koska GetString käyttää malloc. 962 00:39:43,130 --> 00:39:46,400 >> Ja se voisi tapahtua, jos OS, Mac OS, Windows riippumatta, on yksinkertaisesti 963 00:39:46,400 --> 00:39:48,130 muisti ei riitä sinulle. 964 00:39:48,130 --> 00:39:49,820 Niin, että mitä siellä tapahtui. 965 00:39:49,820 --> 00:39:52,910 >> Ja anna minun paljastaa yksi asia että voi vain puhaltaa mieltäsi 966 00:39:52,910 --> 00:39:55,100 tai kokonaan olla liian kaukana yli linjan. 967 00:39:55,100 --> 00:39:59,770 Mutta haluan vetää ylös sama silmukka kopiointiin, 968 00:39:59,770 --> 00:40:05,480 joka hetki sitten, takaisinkutsu tätä. t kiinnike i saa s kiinnike i. 969 00:40:05,480 --> 00:40:06,740 >> Mukava ja käyttäjäystävällinen. 970 00:40:06,740 --> 00:40:09,330 Tuntuu Viikko Kaksi uudelleen. 971 00:40:09,330 --> 00:40:14,920 Mutta tämä versio todella voi olla kirjoittaa uudelleen tämä, joka näyttää arvoituksellinen. 972 00:40:14,920 --> 00:40:18,280 Se on tekniikkaa kutsutaan osoittimen aritmeettinen, osoite aritmeettinen. 973 00:40:18,280 --> 00:40:19,600 Mutta miksi tämä toimii? 974 00:40:19,600 --> 00:40:22,220 >> Nyt ärsyttävän, laatijat C päätynyt 975 00:40:22,220 --> 00:40:25,070 * symboli eri tarkoituksiin. 976 00:40:25,070 --> 00:40:29,020 Olemme nähneet sitä käytetään jo kerran, char *, joka tarkoittaa "antaa minulle muuttuja 977 00:40:29,020 --> 00:40:31,210 että menee sisältävät osoitteen merkkiä. " 978 00:40:31,210 --> 00:40:33,990 Joten char * tässä yhteydessä tarkoittaa "anna minulle muuttuja." 979 00:40:33,990 --> 00:40:40,050 >> Valitettavasti, jos käytät * ilman sana sen eteen, kuten nieriä, 980 00:40:40,050 --> 00:40:41,905 se on nyt nimeltään dereference operaattori. 981 00:40:41,905 --> 00:40:43,530 Ja näemme lisää tämän ennen pitkää. 982 00:40:43,530 --> 00:40:44,930 Mutta se vain tarkoittaa "mene sinne." 983 00:40:44,930 --> 00:40:49,070 Se on kuin sanoisi, jos joku ojensi minulle pala paperia "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 jos teen "* 33 Oxford Street," joka tarkoittaa "Mennä tiellä CS rakennukseen." 985 00:40:53,830 --> 00:40:57,220 >> Joten * tarkoittaa vain mennä sinne, jos ei ole sanaa sen edessä. 986 00:40:57,220 --> 00:40:59,100 Joten mikä on t, olla selvillä? 987 00:40:59,100 --> 00:41:03,250 t on osoite kimpale muisti, joka sai takaisin minulle. 988 00:41:03,250 --> 00:41:06,650 s on osoite, mitä, tehdä selväksi, esimerkissä olemme keskustelleet, 989 00:41:06,650 --> 00:41:07,500 on pieniä Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s on osoite of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 Yleisö: merkkijono. 994 00:41:12,460 --> 00:41:14,126 DAVID J. MALAN: Gabe alkuperäinen nimi. 995 00:41:14,126 --> 00:41:16,660 Joten se osoite tämä kimpale muistia. 996 00:41:16,660 --> 00:41:22,220 Joten jos sanon t + minä-- i, huomautus, on vain vanha tuttu. 997 00:41:22,220 --> 00:41:24,770 Se on vain indeksimuuttujaa joka on iteroimalla nollasta ylös 998 00:41:24,770 --> 00:41:26,960 pituuden merkkijonon s. 999 00:41:26,960 --> 00:41:30,367 Joten se tulee olemaan nolla, yksi, sitten kaksi, sitten kolme, sitten neljä. 1000 00:41:30,367 --> 00:41:33,200 Joten koota nämä uudet Naarmunkaltainen palapelin palaset, jos haluatte, 1001 00:41:33,200 --> 00:41:36,140 vaikka jälleen syntaksin on paljon mystistä kuin tyhjästä. 1002 00:41:36,140 --> 00:41:39,522 Joten t on osoitteesi + i ei aio antaa minulle 1003 00:41:39,522 --> 00:41:42,480 numero, koska nämä ovat kaikki numeroita että olemme piirustuksen hex. 1004 00:41:42,480 --> 00:41:43,560 Mutta ne ovat vain numeroita. 1005 00:41:43,560 --> 00:41:49,960 >> Joten jos osoite t sanoimme oli 0x88, mitä 0x88 plus nolla. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Vaikka et ole tyytyväinen kanssa hex vielä arvata. 1008 00:41:53,980 --> 00:41:54,410 >> Yleisö: alkuperäinen. 1009 00:41:54,410 --> 00:41:55,850 >> DAVID J. MALAN: Still 0x88. 1010 00:41:55,850 --> 00:41:58,910 Joten mitä * 0x88 tarkoittaa? 1011 00:41:58,910 --> 00:42:02,670 Se tarkoittaa, "mene sinne", joka tarkoittaa tehokkaasti ", laita sormesi tänne." 1012 00:42:02,670 --> 00:42:06,930 Ja nyt oikealla puolella tätä ilmaisua, * ja sitten parens, 1013 00:42:06,930 --> 00:42:11,586 t + i tarkoittaa s, mikä on käsitellä täällä pikku g. 1014 00:42:11,586 --> 00:42:16,220 s + 0 on, tietenkin, s, mikä s on. 1015 00:42:16,220 --> 00:42:21,230 >> Joten nyt se on * s, joka aivan kuten * 33 Oxford Streetin tarkoittaa mene osoitteeseen 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Joten tässä on tämä sormi, oikea käsi. 1018 00:42:24,170 --> 00:42:26,050 Joten mitä aion kopioida mitä? 1019 00:42:26,050 --> 00:42:30,260 Asia oikealla, joka on Gabe, pikku g täällä, osaksi täällä. 1020 00:42:30,260 --> 00:42:32,750 >> Ja niin vaikutus, että ensimmäinen iterointia silmukan, 1021 00:42:32,750 --> 00:42:36,200 kun ehdotettu, vaikka se näyttää hullu monimutkaisempi kuin mitään 1022 00:42:36,200 --> 00:42:42,110 olemme nähneet ennen, on yksinkertaisesti sanomalla täältä ja kopioi että hahmo täällä. 1023 00:42:42,110 --> 00:42:44,700 Se antaa sinulle kartan molemmissa paikoissa. 1024 00:42:44,700 --> 00:42:46,130 >> Ja näemme paljon enemmän tästä. 1025 00:42:46,130 --> 00:42:50,600 Mutta nyt, toivo on vain käyttöön joitakin näistä perusajatuksia. 1026 00:42:50,600 --> 00:42:53,550 Ja todellakin, katsotaanpa yksi lopullinen ohjelma täältä, 1027 00:42:53,550 --> 00:42:57,480 ja sitten lupasi claymation, joka tekee kaikki kunnossa. 1028 00:42:57,480 --> 00:42:57,980 Kunnossa. 1029 00:42:57,980 --> 00:43:01,680 Joten anna minun avata up-- sinne mennään. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Joten anna minulle-- Palaamme Tämän kuvan ennen pitkää. 1032 00:43:05,440 --> 00:43:08,360 Saanen avata tämän lopullisen esimerkiksi täältä. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Joten tässä on super, super ohjelma, joka saa aikaan 1035 00:43:12,710 --> 00:43:15,050 ei mitään elämässä, joka tekee seuraavaa. 1036 00:43:15,050 --> 00:43:18,740 Ensin kaksi muuttujaa, x ja y, jotka eivät ole numeroita tällä kertaa, 1037 00:43:18,740 --> 00:43:19,240 sinänsä. 1038 00:43:19,240 --> 00:43:20,448 He eivät ole kokonaislukuja, sinänsä. 1039 00:43:20,448 --> 00:43:22,899 Ne ovat ilmeisesti int *. 1040 00:43:22,899 --> 00:43:25,690 Niin juuri kukaan, mitä se tarkoittaa jos tietosi tyyppi, muuttuja, 1041 00:43:25,690 --> 00:43:26,860 on tyyppiä int * tähden? 1042 00:43:26,860 --> 00:43:30,240 Tuo osoite int. 1043 00:43:30,240 --> 00:43:31,990 >> Joten minulla ei ole aavistustakaan, missä se on vielä. 1044 00:43:31,990 --> 00:43:35,150 Se vain tarkoittaa "laittaa, lopulta, osoite int täällä. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, missä se on muisti, osoite sinne. 1046 00:43:38,340 --> 00:43:40,200 Ja sitähän y on olemaan, samoin. 1047 00:43:40,200 --> 00:43:44,920 >> Jos minä nyt sanon x = malloc (sizeof (int)), tämä on hieno tapa sanoa, 1048 00:43:44,920 --> 00:43:49,000 hei käyttöjärjestelmän kautta malloc, anna minulle tarpeeksi muistia koko 1049 00:43:49,000 --> 00:43:52,370 ja int, joka on luultavasti olemaan 32 bittiä tai neljä tavua. 1050 00:43:52,370 --> 00:43:53,680 >> Joten mitä malloc palaa? 1051 00:43:53,680 --> 00:43:55,250 Malloc palauttaa osoitteen. 1052 00:43:55,250 --> 00:43:57,020 Joten mitä tulee varastoidaan x? 1053 00:43:57,020 --> 00:44:00,600 Osoite kimpale muistin, neljä tavua, että malloc 1054 00:44:00,600 --> 00:44:03,360 juuri löytänyt minulle pyytämällä käyttöjärjestelmä. 1055 00:44:03,360 --> 00:44:08,240 >> Nyt välin linja neljä täällä, * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Vain olla selvää, mitä tapahtuu siellä? 1057 00:44:09,990 --> 00:44:11,530 Vasemmalla puolella, * x. 1058 00:44:11,530 --> 00:44:13,610 joka on kuin * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Joten * x tarkoittaa mitä? 1060 00:44:15,523 --> 00:44:16,450 >> Yleisö: Mene. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. MALAN: Mene osoitteeseen. 1062 00:44:17,908 --> 00:44:20,466 Silloin kun kimpale muisti on, siirry siihen. 1063 00:44:20,466 --> 00:44:21,979 Ja laittaa mitä siellä ilmeisesti? 1064 00:44:21,979 --> 00:44:22,520 Yleisö: 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. MALAN: 42. 1066 00:44:23,580 --> 00:44:25,650 Okei, * y, saman ajatuksen. 1067 00:44:25,650 --> 00:44:26,860 Mene osoitteeseen y. 1068 00:44:26,860 --> 00:44:31,740 Laita numero 13 siellä, mutta mikä on y tällä hetkellä? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 Yleisö: Ei ole muisti y. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. MALAN: Ei ei muisti y. 1072 00:44:35,710 --> 00:44:38,215 Joten mitä y luultavasti sisältävät, kuten olemme sanoneet? 1073 00:44:38,215 --> 00:44:38,520 >> Yleisö: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. MALAN: Jotkut roskat arvo. 1075 00:44:39,480 --> 00:44:41,320 Nyt roskat arvo on edelleen numero. 1076 00:44:41,320 --> 00:44:43,160 Se voi silti erehtyä luulemaan osoite. 1077 00:44:43,160 --> 00:44:45,160 Se on kuin joku intiimissä jotain alas, 1078 00:44:45,160 --> 00:44:48,002 ja olen tulkinnut sen tarkoittavan jonkin rakennuksen kadulla. 1079 00:44:48,002 --> 00:44:50,460 Ja jos vain yrittää mennä jonkin rakennuksen et omista, 1080 00:44:50,460 --> 00:44:53,710 tai jotkut kimpale muistia et ole annettu, pahoja asioita voi tapahtua. 1081 00:44:53,710 --> 00:44:57,740 Tietokone saattaa kaatua, tai jokin muu määrittelemätön käytös voi tapahtua. 1082 00:44:57,740 --> 00:45:01,310 >> Niin intro, sitten, että Binky on tämä. 1083 00:45:01,310 --> 00:45:04,290 Muistan vieläkin, 20 Jostain kumman vuotta myöhemmin, 1084 00:45:04,290 --> 00:45:07,200 missä olin, kun sain vihdoin ymmärretty viitteitä. 1085 00:45:07,200 --> 00:45:09,520 >> Toisin sanoen, jos lähteä täältä kolmessa minuutissa 1086 00:45:09,520 --> 00:45:12,170 ja mielestäni ei ymmärtää osoittimia, ymmärtää 1087 00:45:12,170 --> 00:45:14,410 Olen muistetaan 20 vuotta jostain hullu syystä 1088 00:45:14,410 --> 00:45:17,140 milloin ja miksi se lopulta upposi in, istuu minun opetus 1089 00:45:17,140 --> 00:45:19,501 kaveri, Nishat Mehta vuonna takana Eliot ruokasalissa. 1090 00:45:19,501 --> 00:45:21,250 Nyt olen muistanut tämä koska tämä oli 1091 00:45:21,250 --> 00:45:23,920 yksi aiheista, minä vuonna Erityisesti kamppaillut. 1092 00:45:23,920 --> 00:45:26,470 Ja sitten se lopulta napsautetaan, kuten uskallan sanoa paljon aiheita 1093 00:45:26,470 --> 00:45:27,460 lopulta. 1094 00:45:27,460 --> 00:45:32,590 Ja nyt tehdä, että tuntuu kaikki onnellisempia ja sitäkin vakuuttavampi, 1095 00:45:32,590 --> 00:45:35,360 Otetaanpa lopullisen ilmeen meidän kolmen viimeisen minuutin täällä Binky, 1096 00:45:35,360 --> 00:45:37,675 ystävämme, Nick Parlante Stanford. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEOTOISTOSTA] 1099 00:45:41,580 --> 00:45:42,750 >> Hei, Binky. 1100 00:45:42,750 --> 00:45:43,500 Herää! 1101 00:45:43,500 --> 00:45:45,960 On aika osoitin hauskaa. 1102 00:45:45,960 --> 00:45:47,012 >> Mitä se on? 1103 00:45:47,012 --> 00:45:48,723 Oppia viitteitä? 1104 00:45:48,723 --> 00:45:50,580 Voi Goody! 1105 00:45:50,580 --> 00:45:53,563 >> -No, Päästä alkuun, taidamme menossa on pari viitteitä. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Tämä koodi myönnetään kaksi osoittimia, mikä voi viitata kokonaislukuja. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 No, näen kaksi osoitinta, mutta ne eivät näytä osoittavan mitään. 1110 00:46:02,140 --> 00:46:02,980 >> -Näinhän. 1111 00:46:02,980 --> 00:46:05,100 Aluksi osoittimet eivät viittaa mihinkään. 1112 00:46:05,100 --> 00:46:08,030 Mitä he viittaavat kutsutaan pointees, ja ne asetettaisiin n 1113 00:46:08,030 --> 00:46:09,370 erillisessä vaiheessa. 1114 00:46:09,370 --> 00:46:10,220 >> -Voi, Oikea, oikea. 1115 00:46:10,220 --> 00:46:10,950 Tiesin, että. 1116 00:46:10,950 --> 00:46:12,385 Pointees ovat erillisiä. 1117 00:46:12,385 --> 00:46:14,315 Er, joten miten jakaa pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 No, tämä koodi kohdentaa uusi kokonaisluku pointee, 1121 00:46:18,970 --> 00:46:20,950 ja tämä osa sarjaa x osoittamaan sitä. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> Hei, että näyttää paremmalta. 1124 00:46:23,230 --> 00:46:25,060 Tee siitä jotain. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Tulen dereference osoitin X Tallenna numero 42 osaksi pointee. 1127 00:46:30,455 --> 00:46:32,830 Tämän tempun, minä tarvitsen Taikasauva on Dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Your Taikasauva of Dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- se on hienoa. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -Tämä on mitä koodi näyttää. 1134 00:46:41,080 --> 00:46:44,110 Olen juuri perustanut numero, ja [POP] 1135 00:46:44,110 --> 00:46:44,700 >> Hei, katso. 1136 00:46:44,700 --> 00:46:46,140 Siellä se menee. 1137 00:46:46,140 --> 00:46:50,980 >> -Joten Tekee dereference on x seuraa nuolta käyttää sen pointee. 1138 00:46:50,980 --> 00:46:53,160 Tällöin myymälä 42 siellä. 1139 00:46:53,160 --> 00:46:57,710 Hei kokeile sitä tallentaa numeron 13 kautta muille osoitin, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Menen tänne y, ja saada numero 13 perustaa. 1142 00:47:03,270 --> 00:47:07,930 Ja sitten, ottaa sauvaa Dereferencing ja vain [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> -Voi! 1144 00:47:08,960 --> 00:47:09,500 >> -Voi Hei! 1145 00:47:09,500 --> 00:47:11,090 Se ei toimi. 1146 00:47:11,090 --> 00:47:15,630 Sano, Binky, en usko dereferencing y on hyvä idea, koska tiedät, 1147 00:47:15,630 --> 00:47:17,850 perustamalla pointee on erillisessä vaiheessa. 1148 00:47:17,850 --> 00:47:20,450 Ja en usko meidän koskaan tehnyt sitä. 1149 00:47:20,450 --> 00:47:21,480 >> -good Kohta. 1150 00:47:21,480 --> 00:47:21,980 Niin. 1151 00:47:21,980 --> 00:47:25,680 Me jaetaan osoittimen y, mutta me koskaan aseta se osoittamaan pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -very Tarkkaavainen. 1154 00:47:28,616 --> 00:47:30,240 Hei, etsit hyvä siellä, Binky. 1155 00:47:30,240 --> 00:47:33,400 Voitko korjata sen niin, että y pistettä samaan pointee kuin x? 1156 00:47:33,400 --> 00:47:34,000 >> Totta kai. 1157 00:47:34,000 --> 00:47:36,780 Minä käytän taikasauva Pointer Tehtävä. 1158 00:47:36,780 --> 00:47:38,740 >> Onko tuo olemaan ongelma kuin ennen? 1159 00:47:38,740 --> 00:47:39,240 Ei. 1160 00:47:39,240 --> 00:47:40,660 Tämä ei koske pointees. 1161 00:47:40,660 --> 00:47:44,450 Se vain muuttaa yhden osoittimen viittaavat sama asia kuin toinen. 1162 00:47:44,450 --> 00:47:45,450 >> -Voi Näen. 1163 00:47:45,450 --> 00:47:48,200 Nyt y viittaa samaan paikkaan kuin x. 1164 00:47:48,200 --> 00:47:48,910 Niin odota. 1165 00:47:48,910 --> 00:47:49,950 Nyt y on kiinteä. 1166 00:47:49,950 --> 00:47:51,120 Se on pointee. 1167 00:47:51,120 --> 00:47:54,510 Joten voit kokeilla sauvaa Dereferencing jälleen lähettää 13 yli. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Täällä se menee. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> Hei, katso tuota. 1171 00:47:59,340 --> 00:48:00,750 Nyt dereferencing teosten y. 1172 00:48:00,750 --> 00:48:04,991 Ja koska osoittimet jakavat että yksi pointee, he molemmat katso 13. 1173 00:48:04,991 --> 00:48:05,490 Niin. 1174 00:48:05,490 --> 00:48:06,870 Jakaminen riippumatta. 1175 00:48:06,870 --> 00:48:08,820 Joten aiomme vaihtaa paikkaa nyt? 1176 00:48:08,820 --> 00:48:09,440 >> Katsokaa. 1177 00:48:09,440 --> 00:48:10,830 Olemme loppuu aika. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Vain Muistaa kolme osoitinta sääntöjä. 1180 00:48:13,530 --> 00:48:16,560 Number One, perusrakenne on, että sinulla on osoitin, 1181 00:48:16,560 --> 00:48:18,680 ja se osoittaa yli pointee. 1182 00:48:18,680 --> 00:48:20,640 Mutta osoitinta ja pointee ovat erillisiä, 1183 00:48:20,640 --> 00:48:22,610 ja yleinen virhe on perustaa osoitin, 1184 00:48:22,610 --> 00:48:25,000 mutta unohtaa antaa sille pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Number Two, osoitin dereferencing alkaa osoittimen 1186 00:48:28,170 --> 00:48:31,050 ja seuraa sen nuolta yli käyttää sen pointee. 1187 00:48:31,050 --> 00:48:33,400 Kuten me kaikki tiedämme, tämä toimii vain, jos on 1188 00:48:33,400 --> 00:48:36,270 pointee, millaisia saa takaisin Sääntö yksi. 1189 00:48:36,270 --> 00:48:39,000 >> Numero kolme, osoitin toimeksianto kestää yhden osoittimen 1190 00:48:39,000 --> 00:48:42,320 ja muuttaa sen osoittamaan sama pointee kuin toinen osoitin. 1191 00:48:42,320 --> 00:48:44,160 Joten luovutuksen jälkeen, kaksi osoitinta 1192 00:48:44,160 --> 00:48:45,910 tulee osoittaa samaan pointee. 1193 00:48:45,910 --> 00:48:47,990 Joskus sitä kutsutaan jakaminen. 1194 00:48:47,990 --> 00:48:49,740 Ja että kaikki on sitä, todella. 1195 00:48:49,740 --> 00:48:50,277 Bye-bye nyt. 1196 00:48:50,277 --> 00:48:51,110 [END VIDEOTOISTOSTA] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. MALAN: Se on se CS50. 1198 00:48:52,568 --> 00:48:55,110 Nähdään ensi viikolla. 1199 00:48:55,110 --> 00:48:56,064