1 00:00:00,000 --> 00:00:11,242 >> [Musiikki soi] 2 00:00:11,242 --> 00:00:16,630 >> DAVID J. MALAN: Okei tämä on CS50 ja tämä on alku viikon viisi. 3 00:00:16,630 --> 00:00:21,480 Joten tänään, alla oman istuintyynyt, et löydä mitään. 4 00:00:21,480 --> 00:00:24,790 Mutta ennen, sinun pitäisi löytää nämä, pikku Ilmimerkkinä arvostusta 5 00:00:24,790 --> 00:00:26,970 kaikki työ, että laitat peliin viidentoista. 6 00:00:26,970 --> 00:00:30,290 Yksinkertaisesti irrota hieman ympyrä pohja alkaa pelaa 7 00:00:30,290 --> 00:00:31,680 Loput luokassa. 8 00:00:31,680 --> 00:00:38,930 >> Niin muistaa, että tai tietää, että ongelma asetettu neljä, joka meni tänä viikonloppuna, 9 00:00:38,930 --> 00:00:40,340 liittyy kirjallisesti toisen pelin. 10 00:00:40,340 --> 00:00:43,740 Mutta tällä kertaa se liittyy käyttämällä Varsinainen graafinen käyttöliittymä, ei 11 00:00:43,740 --> 00:00:46,310 tekstisisältöä rajapinnoille Game of Viisitoista oli. 12 00:00:46,310 --> 00:00:50,210 Ja peli, joka edessänne, jos et ole vielä nähnyt tätä seuraavaksi, 13 00:00:50,210 --> 00:00:52,310 näyttää vähän jotain tällaista. 14 00:00:52,310 --> 00:00:55,170 Aion mennä minun terminaalin ikkuna täällä GDB. 15 00:00:55,170 --> 00:00:58,600 Ja aion mennä eteenpäin ja ajaa Henkilökunta ratkaisu, joita voi käyttää 16 00:00:58,600 --> 00:01:01,010 suorittamisen jälkeen päivitetty 50 normaalisti. 17 00:01:01,010 --> 00:01:04,090 >> Mutta aion laittaa se hieman Salaus, hieman Pääsiäismuna, 18 00:01:04,090 --> 00:01:08,480 ns God Mode, jonka laittamalla Jumala argv1. 19 00:01:08,480 --> 00:01:12,920 Ja minun täytyy seurata omaa suuntiin, käynnissä se omassa 20 00:01:12,920 --> 00:01:14,220 Harjoitus hakemistoon. 21 00:01:14,220 --> 00:01:19,190 Nyt näet täydellisen version ja peli Breakout. 22 00:01:19,190 --> 00:01:21,090 Itse asiassa tämä ei ole kättä tilassa. 23 00:01:21,090 --> 00:01:24,850 Joten se on todella - 24 00:01:24,850 --> 00:01:26,470 wowed vaikka saatat olla - 25 00:01:26,470 --> 00:01:30,850 melko triviaali toteuttaa Jumalan tilassa Breakout, toisin kuin peli Fifteen, 26 00:01:30,850 --> 00:01:33,590 jonka jotkut teistä ehkä puututtava varten hakkeri painos. 27 00:01:33,590 --> 00:01:37,890 >> Vuonna Breakout riittää Jumalaan tila yksinkertaisesti tehdä mitä, 28 00:01:37,890 --> 00:01:41,220 intuitiivisesti mela? 29 00:01:41,220 --> 00:01:45,630 Vain tehdä sama riippumatta vaaka-asennossa on pallo. 30 00:01:45,630 --> 00:01:49,220 Ja niin kauan kuin teet tämän lockstep jossa pallo liikkuu tämä peli 31 00:01:49,220 --> 00:01:53,100 koskaan, koskaan, koskaan unohda pallo ja voit voittaa joka kerta. 32 00:01:53,100 --> 00:01:55,430 >> Mutta tällä viikolla hakkeri painos siellä on enemmän kuin vain Jumalan tilassa. 33 00:01:55,430 --> 00:01:56,720 On useita muita ominaisuuksia. 34 00:01:56,720 --> 00:01:58,140 Niistä laserit. 35 00:01:58,140 --> 00:02:01,070 Niin, että jos todella kärsimätön sinua voi aloittaa ampuminen alas tiilet 36 00:02:01,070 --> 00:02:02,120 ja muutama muu. 37 00:02:02,120 --> 00:02:04,560 Ja niille teistä, jotka haluat kalibroida standardin vs. hakkeri 38 00:02:04,560 --> 00:02:08,750 painos, näen, että tämän viikon hakkeri painos tarkoituksella on 39 00:02:08,750 --> 00:02:12,830 hieman toteutettavissa vaikkapa kuin Jumala tila oli Game of Viisitoista. 40 00:02:12,830 --> 00:02:15,300 >> Joten jos etsit venyttää ja etsit joitakin ylimääräisiä hauskaa 41 00:02:15,300 --> 00:02:18,400 ominaisuuksia tehdä sukellus jos kiinnostaa. 42 00:02:18,400 --> 00:02:21,280 Nyt käytännössä, saanen yhden asian samoin. 43 00:02:21,280 --> 00:02:24,780 GDB, jonka jotkut teistä ehkä ole vielä kosketti henkilökohtaisesti, joka on hieno. 44 00:02:24,780 --> 00:02:28,530 Mutta nyt on todella aikaa tottua tähän ja mukava tätä työkalua 45 00:02:28,530 --> 00:02:31,510 koska se tekee elämästänne paljon helpompaa, todella. 46 00:02:31,510 --> 00:02:34,900 >> Per Rob luento GDB pari viikko sitten muistaa 47 00:02:34,900 --> 00:02:36,810 että GDB on debuggeri. 48 00:02:36,810 --> 00:02:41,230 Se on työkalu, jonka avulla voit ajaa Ohjelma mutta ajaa se askel askeleelta, rivi 49 00:02:41,230 --> 00:02:45,680 riviltä, ​​jotta voit penkoa, niin että näet asioita tapahtuu, niin 50 00:02:45,680 --> 00:02:47,310 että voit tulostaa muuttujien arvot. 51 00:02:47,310 --> 00:02:50,580 Lyhyesti sanottuna, se antaa sinulle niin paljon enemmän teho kuin printDef tekee. 52 00:02:50,580 --> 00:02:52,900 >> Nyt tosin käyttöliittymä on melko mystistä. 53 00:02:52,900 --> 00:02:55,180 Musta ja valkoinen teksti käyttöliittymä suurimmaksi osaksi. 54 00:02:55,180 --> 00:02:57,400 Komennot ovat hieman kova muistaa aluksi. 55 00:02:57,400 --> 00:03:01,230 Mutta vaikka se saattaa mennä puoli tunti, tunti, esittää, että etukäteen 56 00:03:01,230 --> 00:03:02,940 investointien aikaa siihen, luota minuun. 57 00:03:02,940 --> 00:03:06,440 Varmasti by lukukauden lopussa se säästää voit suuruusluokkaa 58 00:03:06,440 --> 00:03:07,600 aikaa kuin. 59 00:03:07,600 --> 00:03:09,200 >> Joten alkuviikosta sukeltaa 60 00:03:09,200 --> 00:03:13,200 Ja suhteen Breakout, tietää, että olet voi tehdä tätä niin kauan kuin sinulla on 61 00:03:13,200 --> 00:03:18,230 jakelu koodi tai oman koodin käynnissä oman Pst4 hakemistoon. 62 00:03:18,230 --> 00:03:21,680 Tiedä, että voit käyttää GDB. / Purkautuminen. 63 00:03:21,680 --> 00:03:23,490 >> Tämä tulee avaamaan ikkuna näin. 64 00:03:23,490 --> 00:03:25,530 Annan itselleni lisää päätelaitteen ikkunan. 65 00:03:25,530 --> 00:03:27,770 Ja mitä sitten aion mennä eteenpäin ja tehdä, se ei ole vain ajaa sitä. 66 00:03:27,770 --> 00:03:30,690 Aion ensin asettaa taitekohta Recall, jonka avulla voit keskeyttää 67 00:03:30,690 --> 00:03:32,500 suorittamisen tietyssä paikassa. 68 00:03:32,500 --> 00:03:35,750 >> Vain pitää asiat yksinkertaisina aion rikkoa rivillä yksi vain kirjoittamalla 69 00:03:35,750 --> 00:03:37,000 numero yksi. 70 00:03:37,000 --> 00:03:40,080 71 00:03:40,080 --> 00:03:43,250 Saanen todella avata uudelleen tämä ikkuna koska se alkaa 72 00:03:43,250 --> 00:03:45,700 vähän pieni siellä. 73 00:03:45,700 --> 00:03:53,270 Joten mitä olen nyt aikoo tehdä tässä jos avaan minun terminaali-ikkuna. 74 00:03:53,270 --> 00:03:53,910 Tule, sinne siis. 75 00:03:53,910 --> 00:03:59,850 >> Joten nyt jos menen takaisin Dropbox, Pst4 ja ajaa GDB. / purkautuminen tulee, huomaa 76 00:03:59,850 --> 00:04:02,600 Aion rikkoa asettaa taitekohta on linjalla yksi. 77 00:04:02,600 --> 00:04:04,840 Ja nyt aion mennä eteenpäin ja tyyppi ajaa. 78 00:04:04,840 --> 00:04:07,370 Ja kun minä, huomaa mitään näyttää tapahtuvan. 79 00:04:07,370 --> 00:04:08,120 >> Ei ole pop up. 80 00:04:08,120 --> 00:04:09,790 Ei ole graafista käyttöliittymä vielä. 81 00:04:09,790 --> 00:04:13,340 Mutta se on ymmärrettävää, koska olen kirjaimellisesti linjalla yksi minun ohjelma. 82 00:04:13,340 --> 00:04:17,110 Ja huomaa, että olen nopea toimitettu, nyt erityisesti 62, koska kaikki 83 00:04:17,110 --> 00:04:20,600 kamaa päälle tämä tiedosto on asioita, kuten kommentit ja vakioita ja 84 00:04:20,600 --> 00:04:22,460 mielenkiinnotonta kamaa nyt. 85 00:04:22,460 --> 00:04:25,840 >> Joten nyt olen sisällä tärkein, näyttää siltä, ​​rivillä 62. 86 00:04:25,840 --> 00:04:27,960 Ja tämä on juuri jakelu koodia, muistaa. 87 00:04:27,960 --> 00:04:33,810 Jos avaan jopa menemällä vastaavasti minun pudotuslaatikkokansion hakemiston Pst4, 88 00:04:33,810 --> 00:04:35,450 osaksi breakout.c. 89 00:04:35,450 --> 00:04:40,670 Ja jos minä selaa alas ja alas ja alas, ja anna minun mennä eteenpäin ja käynnistä 90 00:04:40,670 --> 00:04:44,990 minun linja numerot. 91 00:04:44,990 --> 00:04:50,300 >> Mitä näen, jos olen selaa linja 62, on juuri linjaa 92 00:04:50,300 --> 00:04:50,910 olemme pysäytetään. 93 00:04:50,910 --> 00:04:53,720 Joten tämä linja täällä, 62, on jos aiomme olla. 94 00:04:53,720 --> 00:04:57,470 Joten nyt GDB, jos menen eteenpäin ja kirjoita nyt seuraava, kirjoita se tulee 95 00:04:57,470 --> 00:04:58,450 suorittamiseen linja. 96 00:04:58,450 --> 00:05:00,610 Ja voila, meillä on ns g ikkuna. 97 00:05:00,610 --> 00:05:02,800 Jos tiedä, mitä GWindow ei, ei hätää. 98 00:05:02,800 --> 00:05:05,740 Spec tutustuttaa sinut sen, koska sekä useita walkthrough videoita 99 00:05:05,740 --> 00:05:06,830 upotettu spec. 100 00:05:06,830 --> 00:05:08,610 >> Mutta nyt tehkäämme tästä hieman mielenkiintoisemman. 101 00:05:08,610 --> 00:05:10,960 Jatkan tätä ikkunaa puolelle hieman. 102 00:05:10,960 --> 00:05:13,480 Haluan tehdä ikkunaa hieman isompi, jotta voin nähdä enemmän. 103 00:05:13,480 --> 00:05:16,140 >> Ja nyt haluan mennä eteenpäin ja tehdä seuraavaksi uudelleen. 104 00:05:16,140 --> 00:05:17,550 Ja on minun tiilet. 105 00:05:17,550 --> 00:05:20,490 Jos kirjoitan seuraavan kerran nyt näen pallo. 106 00:05:20,490 --> 00:05:23,520 Ja jos kirjoitan seuraavan kerran nyt näen meloa. 107 00:05:23,520 --> 00:05:26,690 >> Ja onneksi tämä gedit ei ole todella yhteistyöhaluisia osoittaa minulle 108 00:05:26,690 --> 00:05:27,660 kaikkea haluan. 109 00:05:27,660 --> 00:05:30,820 Mutta nyt jos teen seuraavaksi taas ensi kerran, olen vain 110 00:05:30,820 --> 00:05:32,260 julistaa joitakin muuttujia. 111 00:05:32,260 --> 00:05:34,750 Ja voin tulostaa minkä tahansa nämä kaverit pois. 112 00:05:34,750 --> 00:05:37,170 Tulosta tiilet, tulosteita elämää. 113 00:05:37,170 --> 00:05:39,910 >> Ja nyt, jos olen edelleen tehdä Seuraavaksi huomaat, että otan 114 00:05:39,910 --> 00:05:40,870 sisällä että silmukka. 115 00:05:40,870 --> 00:05:43,380 Mutta koodi tulee suorittaa juuri niin kuin odottaa. 116 00:05:43,380 --> 00:05:45,810 Joten kun lyön tätä toimintoa, odota napsautettavassa, se tulee tehdä 117 00:05:45,810 --> 00:05:46,830 se kirjaimellisesti. 118 00:05:46,830 --> 00:05:48,870 Olen siis näytti menettänyt ohjelmakaudella. 119 00:05:48,870 --> 00:05:50,480 >> GDB ei ole antaa minulle toisen nopeasti. 120 00:05:50,480 --> 00:05:51,500 Mutta ei hätää. 121 00:05:51,500 --> 00:05:53,720 Siirry peliäni, valitse jonnekin. 122 00:05:53,720 --> 00:05:56,270 >> Ja voila, nyt se etenee linja 86. 123 00:05:56,270 --> 00:05:59,460 Joten jälleen, se on korvaamaton, lopulta virheenjäljitykseen ongelmia. 124 00:05:59,460 --> 00:06:03,050 Koska voit kirjaimellisesti astua koodia, tulostaa asioita ja paljon, 125 00:06:03,050 --> 00:06:03,640 paljon enemmän. 126 00:06:03,640 --> 00:06:07,210 Mutta nyt ne työkalut yksin pitäisi saada jo aika pitkälle. 127 00:06:07,210 --> 00:06:10,050 >> Joten olemme tietenkin vilkaisemalla klo Graphics nyt yhtäkkiä. 128 00:06:10,050 --> 00:06:12,350 Ja nyt meidän maailma saa hieman mielenkiintoisempaa. 129 00:06:12,350 --> 00:06:15,680 Ja te tiedätte, ehkä joidenkin videoita verkossa, että meillä on nämä 130 00:06:15,680 --> 00:06:18,280 shortsit, että olet ollut katsomassa osana ongelmaa sarjaa. 131 00:06:18,280 --> 00:06:20,460 >> Ja ne on ammuttu tahallisesti, vasten valkoista taustaa. 132 00:06:20,460 --> 00:06:23,380 Ja jotkut niistä ovat opetus Fellows piirustus joitakin tekstiä 133 00:06:23,380 --> 00:06:25,490 näyttö, joka on päällysti puolella niistä. 134 00:06:25,490 --> 00:06:27,760 Mutta tietenkin, tämä ei ole kovin mielenkiintoinen todellisessa maailmassa. 135 00:06:27,760 --> 00:06:30,520 Tämä on vain luentosali kanssa iso valkokangas ja taustaa. 136 00:06:30,520 --> 00:06:33,330 Ja hämmästyttävä tuotanto joukkue tavallaan ja tekee kaiken kaunis 137 00:06:33,330 --> 00:06:36,620 jälkikäteen rajaamalla ulos tai päällekkäin mitään 138 00:06:36,620 --> 00:06:37,840 me teemme tai emme halua. 139 00:06:37,840 --> 00:06:41,560 >> Nyt vain motivoida tällä viikolla ja todella, missä voit mennä, lopulta 140 00:06:41,560 --> 00:06:42,560 kanssa tietotekniikassa. 141 00:06:42,560 --> 00:06:44,260 Ei juuri kun ongelma asettanut neljä. 142 00:06:44,260 --> 00:06:48,240 Mutta sen jälkeen toisen kurssin tai koko Opetussuunnitelma On hämmästyttävää, mitä voit 143 00:06:48,240 --> 00:06:51,090 tehdä näinä päivinä suhteen grafiikka erityisesti. 144 00:06:51,090 --> 00:06:53,440 >> Jotkut teistä ehkä nähnyt tämän kiertämään verkossa. 145 00:06:53,440 --> 00:06:56,240 Mutta ajattelin näyttää teille, vain pari minuuttia, Esimakua 146 00:06:56,240 --> 00:07:01,890 tietotekniikkaa ja mitä CGI, tietokonegrafiikka voi tehdä näinä päivinä 147 00:07:01,890 --> 00:07:04,510 tuttu laulu ja ehkä elokuva. 148 00:07:04,510 --> 00:07:05,760 >> [MUSIC - LANA DEL RAY, "Nuori ja kaunis] 149 00:07:05,760 --> 00:10:50,270 150 00:10:50,270 --> 00:10:52,470 >> SPEAKER 1: Se on vain hieman hämmästyttävä, ehkä, kuinka 151 00:10:52,470 --> 00:10:52,857 läsnäoleva - 152 00:10:52,857 --> 00:10:57,040 >> [APPLAUSE] 153 00:10:57,040 --> 00:10:59,230 >> SPEAKER 1: Olen juuri ladannut sen. 154 00:10:59,230 --> 00:11:02,920 Mutta se on todella hämmästyttävää, uskoisin, aivan miten läsnäoleva ohjelmistojen ja koodin ja 155 00:11:02,920 --> 00:11:04,230 työkaluja, kuten tämä todella ovat. 156 00:11:04,230 --> 00:11:07,685 Niin, että maku suuntaan jossa voit mennä. 157 00:11:07,685 --> 00:11:10,620 Voi, ei enää Appliance tänään. 158 00:11:10,620 --> 00:11:14,640 No, se on todella traagista ajoitus koska kohta olen vain yrittänyt tehdä. 159 00:11:14,640 --> 00:11:18,670 >> Okei, joten nyt käynnistää Fusion uudelleen. 160 00:11:18,670 --> 00:11:20,800 Muistuta myöhemmin. 161 00:11:20,800 --> 00:11:24,190 Kunnossa, ja sinun pitäisi saanut sähköposti syrjään, jos ei saada 162 00:11:24,190 --> 00:11:25,460 huomaa niin. 163 00:11:25,460 --> 00:11:29,940 Okei, niin muistaa, että viime viikolla aloimme kuori takaisin tämän 164 00:11:29,940 --> 00:11:31,380 joka myöhemmin tunnettiin merkkijono. 165 00:11:31,380 --> 00:11:34,700 >> string muistuttaa tietotyyppi, joka on ilmoitettu CS50 kirjastossa. 166 00:11:34,700 --> 00:11:37,740 Ja se on osa apupyörät että nyt alkaa ottaa pois. 167 00:11:37,740 --> 00:11:41,280 Se oli hyödyllinen käsite varhain. 168 00:11:41,280 --> 00:11:43,750 Mutta nyt se tulee saada lisää kiinnostava ja voimakas 169 00:11:43,750 --> 00:11:48,330 itse nähdä, että alla huppu, merkkijono on vain mitä, ei me sanoimme? 170 00:11:48,330 --> 00:11:50,500 >> Joo, niin se on ns char *. 171 00:11:50,500 --> 00:11:53,860 Ja * siellä tarkoittaa, että on olemassa jonkinlaisen osoitteen mukana. 172 00:11:53,860 --> 00:11:58,690 Ja niin kun sanot char * juuri tarkoittaa muuttujaa, jonka tietotyyppi on 173 00:11:58,690 --> 00:11:59,290 osoitin nyt. 174 00:11:59,290 --> 00:12:01,770 Se, että siellä on tähti siellä vain sitä, että olet julistamisesta 175 00:12:01,770 --> 00:12:03,020 ns osoitin. 176 00:12:03,020 --> 00:12:06,220 Ja että osoitin on menossa ilmeisesti tallentaa osoitteen, ja 177 00:12:06,220 --> 00:12:07,810 Tietenkin merkkiä. 178 00:12:07,810 --> 00:12:08,960 >> Nyt miksi tämä järkevää? 179 00:12:08,960 --> 00:12:11,200 No, mikä on merkkijono alla huppu? 180 00:12:11,200 --> 00:12:15,130 No, jonkin aikaa olemme sanoneet että merkkijono alla huppu on 181 00:12:15,130 --> 00:12:18,460 vain h-e-l-l-o, esimerkiksi. 182 00:12:18,460 --> 00:12:21,585 >> Mutta olemme puhuneet tätä on lähinnä joukko. 183 00:12:21,585 --> 00:12:25,410 Ja Silloin rivin näyttää hieman enemmän kuin tämä, jossa kukin näistä 184 00:12:25,410 --> 00:12:26,460 aloittamisesta purra. 185 00:12:26,460 --> 00:12:28,710 Ja sitten olemme sanoneet, että siellä on jotain erityistä tänne, 186 00:12:28,710 --> 00:12:31,270 kenoviiva 0 tai null terminaattori. 187 00:12:31,270 --> 00:12:35,230 >> Joten kaikki tällä kertaa, täällä on ollut merkkijono. 188 00:12:35,230 --> 00:12:38,320 Mutta oikeasti, merkkijono on todella osoite. 189 00:12:38,320 --> 00:12:43,210 Ja osoitteet, kuten tulemme näkemään, ovat usein etuliite 0x sopimuksen mukaan. 190 00:12:43,210 --> 00:12:44,540 Mitä 0x tarkoittaa? 191 00:12:44,540 --> 00:12:45,970 Tietääkö kukaan? 192 00:12:45,970 --> 00:12:47,320 >> Niin se vain tarkoittaa heksadesimaali. 193 00:12:47,320 --> 00:12:52,360 Joten saatatte muistaa, oikeastaan ​​PST 1, uskon, yksi verryttely 194 00:12:52,360 --> 00:12:55,740 kysymyksiä todella kysyttiin Heksadesimaalilukuja lisäksi 195 00:12:55,740 --> 00:12:57,100 binary ja desimaalin. 196 00:12:57,100 --> 00:13:00,460 Ja motivaatiota on, että heksadesimaalimerkin sinulla on 16 197 00:13:00,460 --> 00:13:01,770 numeroa käytettävissänne. 198 00:13:01,770 --> 00:13:07,900 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, jonka jälkeen by a, b, c, d, e, f. 199 00:13:07,900 --> 00:13:10,430 >> Ja jos lasketaan kaikki ne ylös, saat yhteensä 16. 200 00:13:10,430 --> 00:13:13,200 Joten tämä on vastoin desimaalin, jossa meillä on 10 201 00:13:13,200 --> 00:13:14,690 numeroa, 0 yhdeksään. 202 00:13:14,690 --> 00:13:17,750 Se on toisin binary jos meillä vain on 0 ja 1. 203 00:13:17,750 --> 00:13:21,450 >> Mutta loppujen lopuksi voit vain ovat samat numerot, mutta 204 00:13:21,450 --> 00:13:22,500 hieman eri tavalla. 205 00:13:22,500 --> 00:13:25,840 Ja heksadesimaali on yleistä, koska sillä se kääntyy pois - ja näemme tämän 206 00:13:25,840 --> 00:13:28,790 myöhemmin kurssi - vaikka saamme Web-ohjelmointi yhteydessä 207 00:13:28,790 --> 00:13:32,100 HTML ja värikoodit heksadesimaali on mukavaa. 208 00:13:32,100 --> 00:13:36,390 Koska kunkin numeron, osoittautuu, edustaa neljä bittiä täydellisesti. 209 00:13:36,390 --> 00:13:39,280 Niin se vain eräänlainen linjassa hienosti kuten me lopulta nähdä. 210 00:13:39,280 --> 00:13:44,720 Joten tämä saattaa olla Ox123 tai jotain sellaista, joka merkitsee osoite 123 211 00:13:44,720 --> 00:13:47,050 jonnekin sisällä minun tietokoneen muistiin. 212 00:13:47,050 --> 00:13:50,600 >> Mutta tietenkin joitakin ongelmia koska tämän taustalla 213 00:13:50,600 --> 00:13:51,520 täytäntöönpanoa. 214 00:13:51,520 --> 00:13:55,930 Ja muistaa, että otin puukottaa täytäntöön toimivat näin - 215 00:13:55,930 --> 00:14:00,260 vertaa viiva 0 dot c viime viikolla, että vaikka se näytti kuin se oli 216 00:14:00,260 --> 00:14:04,270 oikea, se ei yksinkertaisesti vastaa kaksi merkkijonoa oikein. 217 00:14:04,270 --> 00:14:07,470 >> Olen heittänyt pois tärkein, ja olen heittänyt pois kommentit vain keskitymme siihen 218 00:14:07,470 --> 00:14:08,970 koodi, joka on kiinnostava täällä. 219 00:14:08,970 --> 00:14:10,660 Ja se on punainen, koska se on buginen. 220 00:14:10,660 --> 00:14:11,670 Mistä syystä? 221 00:14:11,670 --> 00:14:15,890 >> No, huipulla siellä kun julistin merkkijono, mitä todella tapahtuu 222 00:14:15,890 --> 00:14:17,260 alla huppu? 223 00:14:17,260 --> 00:14:19,530 No, anna minun mennä yli seuloa täällä ja piirtää sen. 224 00:14:19,530 --> 00:14:23,230 Niin minä julistan jälleen string s getString. 225 00:14:23,230 --> 00:14:26,640 >> Joten aion mennä eteenpäin nyt ja piirtää s, mitä se todella on. 226 00:14:26,640 --> 00:14:28,590 Se tulee olemaan neliö täällä. 227 00:14:28,590 --> 00:14:30,490 Ja aion vaatia että se on 32 bittiä. 228 00:14:30,490 --> 00:14:32,890 Ainakin se yleensä on, ainakin CS50 229 00:14:32,890 --> 00:14:34,520 laitetta paljon tietokoneita. 230 00:14:34,520 --> 00:14:35,980 Aion kutsua sitä s. 231 00:14:35,980 --> 00:14:39,070 >> Mutta nyt muistaa, että meillä nimeltään getString. 232 00:14:39,070 --> 00:14:41,430 Joten getString palaa, tietenkin merkkijono. 233 00:14:41,430 --> 00:14:45,790 Jos käyttäjä on h-e-l-l-o kirjoita string hei saa palauttaa. 234 00:14:45,790 --> 00:14:51,010 Ja merkkijonon, kuten juuri sanoi, päättyy jonnekin tietokoneen muistiin 235 00:14:51,010 --> 00:14:53,240 kenoviivaan 0 lopussa. 236 00:14:53,240 --> 00:14:56,650 Minä vetää tätä kuin array - tai yhtenäinen alue merkkiä - 237 00:14:56,650 --> 00:14:58,330 että se todella on. 238 00:14:58,330 --> 00:15:01,790 >> Ja nyt, mitä getString todella palaamassa? 239 00:15:01,790 --> 00:15:04,340 Mikä on getString on palaamassa kaikki tällä kertaa? 240 00:15:04,340 --> 00:15:07,520 No, me sanomme, vuonna viikkoa ennen, se palauttaa merkkijonon. 241 00:15:07,520 --> 00:15:10,250 Mutta teknisesti, mitä GetString paluuta ilmeisesti? 242 00:15:10,250 --> 00:15:11,610 >> Yleisö: osoite. 243 00:15:11,610 --> 00:15:12,600 >> SPEAKER 1: osoite. 244 00:15:12,600 --> 00:15:16,630 Erityisesti se palaa osoite ensimmäinen purra, mitä se on. 245 00:15:16,630 --> 00:15:18,830 Sain pitää käyttää yksi, kaksi, kolme koska se on kätevä. 246 00:15:18,830 --> 00:15:21,380 >> Se palauttaa osoitteen ensimmäisen merkin merkkijono. 247 00:15:21,380 --> 00:15:23,510 Ja me sanoi viime viikolla, että joka on riittävä. 248 00:15:23,510 --> 00:15:26,710 Koska emme voi aina selvittää, missä merkkijonon loppuun vain 249 00:15:26,710 --> 00:15:30,150 iteroimalla sen yli, ehkä, jossa on silmukka tai while-silmukka tai jotain 250 00:15:30,150 --> 00:15:34,990 että vain etsivät "kenoviiva 0", erityistä Sentinel luonnetta. 251 00:15:34,990 --> 00:15:37,220 >> Ja sitten me tiedämme, että jono sattuu olemaan pituus - 252 00:15:37,220 --> 00:15:37,980 tässä tapauksessa - 253 00:15:37,980 --> 00:15:38,670 viisi. 254 00:15:38,670 --> 00:15:43,800 Joten teknisesti mitä getString tekee on se palauttaa Ox123 tässä tapauksessa. 255 00:15:43,800 --> 00:15:53,670 Ja teknisesti mitä sitten tapahtuu, on että me tallentaa, sisällä s, Ox123. 256 00:15:53,670 --> 00:15:56,460 Lopussa päivä, vaikka tämä on uusi käsite, osoittimet, he 257 00:15:56,460 --> 00:15:57,350 vain muuttujia. 258 00:15:57,350 --> 00:16:00,440 Mutta he sattuvat tallentaa bittien kollektiivisesti osoite. 259 00:16:00,440 --> 00:16:03,700 Joten teknisesti kaikki ne saa tallennettu s on Ox123. 260 00:16:03,700 --> 00:16:04,680 >> Mutta me ihmiset - 261 00:16:04,680 --> 00:16:06,020 myös tänään eteenpäin - 262 00:16:06,020 --> 00:16:09,290 todella aio hoitaa tyypillisesti mitä todellinen osoite on 263 00:16:09,290 --> 00:16:10,520 Joidenkin kimpale muistia. 264 00:16:10,520 --> 00:16:14,040 Se on vain alhainen yksityiskohtaisesti olla älyllisesti kiinnostava. 265 00:16:14,040 --> 00:16:15,440 Joten aion kumoa tätä. 266 00:16:15,440 --> 00:16:19,810 Ja sen sijaan, enemmän korkean tason, sano että kun me puhumme viitteitä 267 00:16:19,810 --> 00:16:22,170 Aion vain tehdä enemmän käyttäjäystävällinen nuoli, joka välittää 268 00:16:22,170 --> 00:16:26,060 Sama ajatus ja abstraktit pois tiedot siitä, mitä todellinen 269 00:16:26,060 --> 00:16:27,700 taustalla osoite on. 270 00:16:27,700 --> 00:16:33,290 >> Nyt jos palaamme koodin, mikä tapahtui viime viikolla, jos meillä on merkkijono t 271 00:16:33,290 --> 00:16:34,510 vastaa getString? 272 00:16:34,510 --> 00:16:38,630 No, jos minä taas, kirjoita hei tällä kertaa aion saada 273 00:16:38,630 --> 00:16:40,460 toinen murikka muistia. 274 00:16:40,460 --> 00:16:44,820 h-e-l-l-o kenoviivan 0. 275 00:16:44,820 --> 00:16:48,320 >> Mutta koska pyysin getString toisen kerran - 276 00:16:48,320 --> 00:16:51,100 ja tiedän tämän katsot lähdekoodi getString - jopa 277 00:16:51,100 --> 00:16:54,350 vaikka se on sattumaa, että hei oli kirjoitetaan kahdesti, getString ei ole 278 00:16:54,350 --> 00:16:55,890 yrittävät optimoida ja olla fiksu. 279 00:16:55,890 --> 00:16:58,550 Se on vain menossa toiseen kimpale muisti tietokoneeseen, joka on 280 00:16:58,550 --> 00:16:59,640 olemaan toiseen osoitteeseen. 281 00:16:59,640 --> 00:17:02,330 Oletetaan mielivaltaisesti vain sanoa 456. 282 00:17:02,330 --> 00:17:04,079 >> Ja mitä sitten on se aio palata? 283 00:17:04,079 --> 00:17:08,030 Se tulee palauttaa 456 ja tallentaa sen t. 284 00:17:08,030 --> 00:17:12,010 Joten mitä todella tapahtuu, on vasen puoli on minulla on toinen kimpale 285 00:17:12,010 --> 00:17:14,260 muistia, 32 bittiä tyypillisesti. 286 00:17:14,260 --> 00:17:16,720 Ja siellä on menossa Ox456. 287 00:17:16,720 --> 00:17:20,140 Mutta jälleen kerran, en ole kiinnostunut näistä Erityisesti numeroita enää. 288 00:17:20,140 --> 00:17:23,069 Olen juuri menossa abstraktisti piirtää se nuoli. 289 00:17:23,069 --> 00:17:25,202 >> Joten tämä on nyt uusi selitys. 290 00:17:25,202 --> 00:17:28,735 Mutta se on täsmälleen sama ajatus, joka on on tapahtunut koko ajan. 291 00:17:28,735 --> 00:17:33,150 Ja niin syy sitten, että tämä ensimmäinen versio vertaansa buginen 292 00:17:33,150 --> 00:17:34,480 viime viikolla miksi? 293 00:17:34,480 --> 00:17:38,000 Kun teet, jos et vastaa yhtä t mitä sinä todella 294 00:17:38,000 --> 00:17:40,550 alla huppu vertaamalla? 295 00:17:40,550 --> 00:17:41,910 >> Olet verrataan osoitteet. 296 00:17:41,910 --> 00:17:47,950 Ja vain intuitiivisesti, selvästi, Ox123 ei tule yhtä Ox456. 297 00:17:47,950 --> 00:17:49,380 Nuo luvut, ne bitit ovat vain erilaisia. 298 00:17:49,380 --> 00:17:53,220 >> Ja niin johdonmukaisesti, viime viikolla se sanoi kirjoitat eri asioita, vaikka 299 00:17:53,220 --> 00:17:55,360 sanat olivat sanatarkasti sama. 300 00:17:55,360 --> 00:17:58,770 Joten me korjata. 301 00:17:58,770 --> 00:18:00,120 Maallikon termein, mikä oli korjata? 302 00:18:00,120 --> 00:18:02,110 >> Yleisö: Käytä toimintoa. 303 00:18:02,110 --> 00:18:02,870 >> SPEAKER 1: Käytä toimintoa. 304 00:18:02,870 --> 00:18:05,190 Tai tähdet ovat varmasti mukana, vaan käyttää toimintoa tekemään mitä? 305 00:18:05,190 --> 00:18:05,962 >> Yleisö: Voit verrata jouset. 306 00:18:05,962 --> 00:18:07,390 >> Kaiutin 1: Jos haluat vertailla jouset. 307 00:18:07,390 --> 00:18:11,030 Niin perustavanlaatuinen ongelma oli että olin vain harkitsee 308 00:18:11,030 --> 00:18:15,870 laatu jouset määrittelemät vertailu niiden osoitteet. 309 00:18:15,870 --> 00:18:18,540 Ja tietysti se on vain tyhmä nyt kerran ymmärrät mitä tapahtuu 310 00:18:18,540 --> 00:18:19,510 alla huppu. 311 00:18:19,510 --> 00:18:23,270 Todella verrata jouset, onko he yhtä siten, että ihmisen 312 00:18:23,270 --> 00:18:26,680 harkitsisi kaksi merkkijonoa sama meidän täytyy verrata niitä merkin 313 00:18:26,680 --> 00:18:28,070 merkin merkki. 314 00:18:28,070 --> 00:18:30,020 >> Nyt olisin voinut tehdä Tämä erittäin ikävän. 315 00:18:30,020 --> 00:18:32,240 Mutta tuttavallisemmin olemme käyttäen silmukka. 316 00:18:32,240 --> 00:18:36,050 Ja vain verrata s kiinnike i vastaan ​​t kiinnike i. 317 00:18:36,050 --> 00:18:39,590 s kiinnike i + 1 vastaan ​​t kiinnike i plus 1, ja niin edelleen sisällä 318 00:18:39,590 --> 00:18:40,580 jonkinlainen silmukka. 319 00:18:40,580 --> 00:18:44,950 Ja jos olen paikalla tahansa kaksi merkkejä eroavat, tai jos huomaan, että ooh, s on 320 00:18:44,950 --> 00:18:48,410 lyhyempi kuin t tai pidempi kuin t Voin heti sanoa vääriä, 321 00:18:48,410 --> 00:18:49,390 he eivät ole samoja. 322 00:18:49,390 --> 00:18:55,370 >> Mutta jos saan läpi s ja t ja sanoa sama, sama, sama, sama, sama, lopussa 323 00:18:55,370 --> 00:18:58,520 molemmat jouset, voin sanoa totta, ne ovat yhtä. 324 00:18:58,520 --> 00:19:01,040 No, onneksi vuotta sitten joku kirjoitti, että koodi meille. 325 00:19:01,040 --> 00:19:03,790 >> Ja he kutsuivat sitä StrComp jousikvartetille vertailla. 326 00:19:03,790 --> 00:19:11,900 Ja vaikka se on hieman counter intuitiivinen, StrComp palauttaa 0, jos nämä 327 00:19:11,900 --> 00:19:14,520 kaksi merkkijonoa, s ja t ovat samoja. 328 00:19:14,520 --> 00:19:18,090 Mutta se palauttaa negatiivisen arvon, jos s pitäisi tulla ennen t aakkosjärjestykseen tai 329 00:19:18,090 --> 00:19:20,610 positiivinen arvo, jos se olisi tullut Kun t aakkosjärjestyksessä. 330 00:19:20,610 --> 00:19:24,030 >> Joten jos joskus haluat lajitella jotain, käy ilmi, että StrComp on hyödyllistä. 331 00:19:24,030 --> 00:19:26,660 Koska se ei vain sanoa kyllä ​​tai ei, yhtä tai ei. 332 00:19:26,660 --> 00:19:30,440 Se antaa sinulle tunteen tilaus erillaisista voimin. 333 00:19:30,440 --> 00:19:33,770 Joten StrComp, s pilkku t on vastaa 0 tarkoittaa, että 334 00:19:33,770 --> 00:19:35,200 jouset ovat todella yhtä. 335 00:19:35,200 --> 00:19:38,680 Koska kuka kirjoitti tämän toiminnon vuotta sitten oletettavasti käytetään silmukka 336 00:19:38,680 --> 00:19:42,840 tai kun silmukka tai jotain integroida yli merkkiä uudelleen 337 00:19:42,840 --> 00:19:45,270 ja uudestaan ​​ja uudestaan. 338 00:19:45,270 --> 00:19:47,300 >> Mutta ongelma kaksi syntyi täällä. 339 00:19:47,300 --> 00:19:48,750 Tämä oli copy0.c. 340 00:19:48,750 --> 00:19:51,680 Ja kaksi punaista on koska se on puutteellinen. 341 00:19:51,680 --> 00:19:52,800 Ja mitä me teemme täällä? 342 00:19:52,800 --> 00:19:54,310 No, pyysin getString. 343 00:19:54,310 --> 00:19:56,255 Ja minä tallennettu paluu arvo s. 344 00:19:56,255 --> 00:20:00,260 Niin se on aika paljon samaa kuin Tämän yläosa kuvan. 345 00:20:00,260 --> 00:20:01,490 >> Mutta mitä tulee sen jälkeen? 346 00:20:01,490 --> 00:20:04,980 No, anna minun mennä eteenpäin ja päästä eroon ja koko joukko tämän. 347 00:20:04,980 --> 00:20:09,650 Me kelata ajassa, jossa me vain on s, joka on nyt yhdenmukainen 348 00:20:09,650 --> 00:20:10,940 line yksi siellä. 349 00:20:10,940 --> 00:20:11,400 >> I tarkistaa. 350 00:20:11,400 --> 00:20:13,450 Jos s vastaa ollessa 0. 351 00:20:13,450 --> 00:20:18,670 Nyt nopea Sivuhuomautuksena, kun ehkä getString palata 0? 352 00:20:18,670 --> 00:20:19,580 Ei ole tarpeeksi muistia. 353 00:20:19,580 --> 00:20:19,880 Oikea? 354 00:20:19,880 --> 00:20:22,310 >> On harvinaista, että tämä tulee tapahtumaan, varmasti on tietokone, joka on 355 00:20:22,310 --> 00:20:24,740 sai satoja megs tai jopa keikoilla RAM. 356 00:20:24,740 --> 00:20:27,080 Mutta se voisi teoriassa palata 0, varsinkin jos 357 00:20:27,080 --> 00:20:28,080 Käyttäjä ei ole yhteistyöhaluinen. 358 00:20:28,080 --> 00:20:31,640 On tapoja teeskennellä et ole syötetyn mitään ja temppu 359 00:20:31,640 --> 00:20:34,100 GetString palaavak 0 tehokkaasti. 360 00:20:34,100 --> 00:20:35,470 >> Joten se tulee tarkistaa, että. 361 00:20:35,470 --> 00:20:39,430 Koska jos joku teistä ovat alkaneet saada jo, segmentointi viat - 362 00:20:39,430 --> 00:20:42,280 joka on luultavasti ollut lähde Joidenkin turhautumista - 363 00:20:42,280 --> 00:20:46,150 ne ovat lähes aina tulos muistia liittyvästä virheestä. 364 00:20:46,150 --> 00:20:50,440 Jotenkin sekaisin osalta osoitin, vaikka et tiennyt 365 00:20:50,440 --> 00:20:51,530 oli osoitin. 366 00:20:51,530 --> 00:20:55,260 Joten sinulla voisi kiihdyttää segmentointi viat jo viikon käyttävällä 367 00:20:55,260 --> 00:21:02,100 jotain silmukka tai kun silmukka ja array menemällä liian pitkälle 368 00:21:02,100 --> 00:21:05,900 viime rajat joidenkin array, joka voit julistettu viikolla kaksi 369 00:21:05,900 --> 00:21:06,690 erityisesti. 370 00:21:06,690 --> 00:21:09,220 >> Olet ehkä tehnyt sen jopa ongelma asetettu neljä Breakout. 371 00:21:09,220 --> 00:21:12,910 Vaikka et luultavasti ole nähnyt kaikki tähdet jakelu koodi 372 00:21:12,910 --> 00:21:17,410 Breakout, käy ilmi, että nämä GRect ja GOval ja muita vastaavia asioita, 373 00:21:17,410 --> 00:21:19,650 ne ovat todella viitteitä alla huppu. 374 00:21:19,650 --> 00:21:23,430 >> Mutta Stanford, kuten mekin, tavallaan vuotia että yksityiskohtaisesti ainakin kirjastot 375 00:21:23,430 --> 00:21:26,540 varten, aivan kuten me jousikvartetille ja nieriää *. 376 00:21:26,540 --> 00:21:30,060 Mutta GRect ja GOval ja kaikki ne mitä olette tai tulee käyttämään 377 00:21:30,060 --> 00:21:32,630 tällä viikolla ovat viime kädessä muistin osoitteet. 378 00:21:32,630 --> 00:21:33,650 Et vain tiedä sitä. 379 00:21:33,650 --> 00:21:37,240 >> Joten se ei ole yllättävää, ehkä, että saatat kompastua joidenkin 380 00:21:37,240 --> 00:21:38,580 segmentointi viat. 381 00:21:38,580 --> 00:21:41,290 Mutta mitä mielenkiintoista täällä nyt jos sen jälkeen me tarkistaa 0 teemme 382 00:21:41,290 --> 00:21:43,460 string t saa s. 383 00:21:43,460 --> 00:21:44,690 No, anna minun julistaa t. 384 00:21:44,690 --> 00:21:47,730 Aion tehdä sen neliö, 32 bittiä, kutsuvat sitä t. 385 00:21:47,730 --> 00:21:49,740 Ja sitten aion tehdä saa s. 386 00:21:49,740 --> 00:21:51,130 >> No, mitä se tarkoittaa? 387 00:21:51,130 --> 00:21:53,280 No, se on vähän vaikea ajatella siitä kuva viisasta. 388 00:21:53,280 --> 00:21:55,025 Mutta Ajatellaanpa mitä sisällä x? 389 00:21:55,025 --> 00:21:59,430 Mikä on kirjaimellisesti sisälle muuttuja? 390 00:21:59,430 --> 00:22:01,500 Arvo Ox123. 391 00:22:01,500 --> 00:22:05,815 >> Joten kun sanon string t saa s, että vain tarkoittaa kirjaimellisesti ottaa numeron 392 00:22:05,815 --> 00:22:10,070 in s, joka on Ox123 ja laita se Ox123. 393 00:22:10,070 --> 00:22:13,740 Tai kuvallisesti, jos olen sellainen abstrakti pois, että yksityiskohtia se on 394 00:22:13,740 --> 00:22:16,600 vaikutus kirjaimellisesti tekee tämän hyvin. 395 00:22:16,600 --> 00:22:22,110 >> Joten nyt muistelen viime viikolla, kun jatkoimme kapitalistisen T. I 396 00:22:22,110 --> 00:22:23,800 teki T kiinnike 0. 397 00:22:23,800 --> 00:22:27,150 No, T kiinnike 0, vaikka se on osoitin, voit käsitellä sitä ikään kuin 398 00:22:27,150 --> 00:22:29,220 se joukko, jossa neliö kiinnike merkintätapaa. 399 00:22:29,220 --> 00:22:31,550 >> Joten missä on T kiinnike 0? 400 00:22:31,550 --> 00:22:32,990 No, se on h. 401 00:22:32,990 --> 00:22:36,800 Ja niin kun käytämme Koodirivin, kaksi ylempää, joka on, että C type.h 402 00:22:36,800 --> 00:22:38,460 header-tiedosto, sinne se on julistettu. 403 00:22:38,460 --> 00:22:44,410 Olet hyödyntää tätä H. Mutta Tietenkin, että täsmälleen sama h, joka on 404 00:22:44,410 --> 00:22:46,540 sisällä s, niin sanotusti. 405 00:22:46,540 --> 00:22:51,930 Ja nyt olet muuttanut tai aktivoidaan sekä alkuperäisen 406 00:22:51,930 --> 00:22:53,120 ns kopio. 407 00:22:53,120 --> 00:22:56,620 Koska et ole tehnyt kopio siten, että ihminen haluaisi sen olevan. 408 00:22:56,620 --> 00:22:59,710 >> Joten mikä oli korjata täällä, vuonna copy1.c viime viikolla? 409 00:22:59,710 --> 00:23:03,070 410 00:23:03,070 --> 00:23:05,580 Toiminnot, jotta voisimme todella kopioi merkkijono. 411 00:23:05,580 --> 00:23:08,700 Ja pohjimmiltaan, mitä meidän tehdä, jotta kopioida merkkijonon? 412 00:23:08,700 --> 00:23:12,070 >> No, tässä vihreä versio täältä olen aio tehdä sitä kohtalaisen alhainen. 413 00:23:12,070 --> 00:23:14,260 On todella toimii he voisivat auttaa tässä. 414 00:23:14,260 --> 00:23:17,710 Mutta alkeellisinta yksi, ja useimmat tuttu, ainakin pian 415 00:23:17,710 --> 00:23:19,600 tuttu, on seuraava - 416 00:23:19,600 --> 00:23:21,910 niin yksi ensimmäisellä rivillä koodia vihreä nyt. 417 00:23:21,910 --> 00:23:23,970 >> Sain rewrote s char *. 418 00:23:23,970 --> 00:23:25,250 Ei ole toiminnallista ero siellä. 419 00:23:25,250 --> 00:23:28,790 Sain heitti CS50 kirjasto ja Soitan sitä mitä se on, char *. 420 00:23:28,790 --> 00:23:31,640 >> Nyt piste, piste, piste, koska siellä oli Joissakin virheentarkistukset se ei ole 421 00:23:31,640 --> 00:23:33,200 mielenkiintoista puhua uudelleen. 422 00:23:33,200 --> 00:23:34,710 Joten nyt t on ilmoitettu. 423 00:23:34,710 --> 00:23:35,780 Sekin on char *. 424 00:23:35,780 --> 00:23:38,280 Joten piirsin vähän neliö ruutu kuin ennen. 425 00:23:38,280 --> 00:23:41,870 >> Mutta oikealla puolella, malloc, sanoimme on muisti jakaa. 426 00:23:41,870 --> 00:23:44,130 Joten jakaa joitakin murikka muistia. 427 00:23:44,130 --> 00:23:48,830 Ja kuinka monta tavua me oikeastaan haluavat jakaa, se näyttää? 428 00:23:48,830 --> 00:23:50,340 >> No, merkkijonon pituus s. 429 00:23:50,340 --> 00:23:52,310 Joten jos se hei se on olemaan viisi. 430 00:23:52,310 --> 00:23:53,950 Me sanomme h-e-l-l-o. 431 00:23:53,950 --> 00:23:55,090 Joten viisi tavua. 432 00:23:55,090 --> 00:23:57,960 >> Mutta sitten plus 1, miksi 1? 433 00:23:57,960 --> 00:23:58,830 0 luonnetta. 434 00:23:58,830 --> 00:24:03,640 Jos emme jätä tilaa tämän kaveri me vahingossa luoda tilanne 435 00:24:03,640 --> 00:24:05,600 jossa merkkijono on h-e-l-l-o. 436 00:24:05,600 --> 00:24:08,470 Ja sitten seuraavan kerran getString on soitti ja kirjoitan, esimerkiksi 437 00:24:08,470 --> 00:24:14,020 David, D-a-v-i-d, tietokone on menossa ajatella, että s on oikeastaan 438 00:24:14,020 --> 00:24:18,900 h-e-l-l-o-d-a-v-i-d, koska siellä on Ei tauko välillä nuo sanat. 439 00:24:18,900 --> 00:24:19,810 >> Joten me tarvitsemme tauon. 440 00:24:19,810 --> 00:24:20,720 Joten emme halua viisi. 441 00:24:20,720 --> 00:24:22,100 Haluamme kuusi tavua. 442 00:24:22,100 --> 00:24:23,110 >> Ja tavut sanon. 443 00:24:23,110 --> 00:24:25,220 Mutta se on todella aika koko char. 444 00:24:25,220 --> 00:24:28,040 Teknisesti char on lähes aina yhden tavun. 445 00:24:28,040 --> 00:24:31,030 >> Mutta vain tehdä meidän koodi kannettava, niin sanotusti, niin että se toimii 446 00:24:31,030 --> 00:24:33,750 eri tietokoneiden vaikka ne saattavat olla hieman erilainen alla 447 00:24:33,750 --> 00:24:36,590 huppu, aion yleisesti sanoa koko char niin, että 448 00:24:36,590 --> 00:24:37,660 minun koodi aina toimi. 449 00:24:37,660 --> 00:24:40,610 Enkä tarvitse kääntää se vain koska voin päivittää tietokoneeseen tai käytä 450 00:24:40,610 --> 00:24:42,140 hieman eri alustalla. 451 00:24:42,140 --> 00:24:45,300 >> Joten minulla 6 kertaa koko char, joka sattuu olemaan 1. 452 00:24:45,300 --> 00:24:47,440 Joten se tarkoittaa malloc voisi anna minulle kuusi tavua. 453 00:24:47,440 --> 00:24:49,140 Mikä on, että todella tekee? 454 00:24:49,140 --> 00:24:52,810 No, minäpä roll back in time here missä olemme tarina. 455 00:24:52,810 --> 00:24:57,620 >> Joten jos menen takaisin tänne, olen ilmoittanut char * nimeltään t. 456 00:24:57,620 --> 00:25:00,280 Olen nyt nimeltään malloc kuusi tavua. 457 00:25:00,280 --> 00:25:06,400 Ja nyt aion tehdä nämä kuusi tavua kuten array aiemmin. 458 00:25:06,400 --> 00:25:10,570 Mutta en oikeastaan ​​tiedä mitä sisälle array. 459 00:25:10,570 --> 00:25:14,640 >> Jos getopt käy ilmi, että et voi luottaa siihen, että on olemassa jokin 460 00:25:14,640 --> 00:25:15,810 tunnettu arvo siellä. 461 00:25:15,810 --> 00:25:18,400 Se olisi voitu käyttää jotain muuten, jotkut muut, jotkin muut 462 00:25:18,400 --> 00:25:19,630 koodiriviä, että kirjoitit. 463 00:25:19,630 --> 00:25:22,870 Joten me yleensä kutsumme näitä roskat arvot ja piirtää niitä, ehkä, kuten 464 00:25:22,870 --> 00:25:26,170 kysymysmerkkejä, vain osoittaa, että me en tiedä mitä on todella olemassa. 465 00:25:26,170 --> 00:25:30,390 Ja se ei ole iso juttu niin kauan kuin me ovat tarpeeksi älykkäitä korvata ne 466 00:25:30,390 --> 00:25:34,550 roskat arvot numeroita tai merkkiä, että me välitämme. 467 00:25:34,550 --> 00:25:36,340 >> Joten tässä tapauksessa mitä aion tehdä? 468 00:25:36,340 --> 00:25:38,670 No, minun rivi koodia seuraava, minulla on neljä. 469 00:25:38,670 --> 00:25:41,350 int i saada 0, n saa merkkijonon pituus s. 470 00:25:41,350 --> 00:25:42,750 Niin tuttu silmukka. 471 00:25:42,750 --> 00:25:45,875 I on pienempi tai yhtä suuri kuin n, joka on yleensä yli. 472 00:25:45,875 --> 00:25:47,500 >> Mutta tällä kertaa se on tahallista. 473 00:25:47,500 --> 00:25:51,890 I + +, ja sitten yksinkertaisesti tehdä t kiinnike i saa s. 474 00:25:51,890 --> 00:25:56,320 Koska kuvani näyttää tältä at Tällä hetkellä tallennetaan t on 475 00:25:56,320 --> 00:25:59,530 osoite, että satunnaisia ​​kimpale muisti joiden arvot ovat tuntemattomia. 476 00:25:59,530 --> 00:26:03,030 Mutta heti kun minä t kiinnike 0, joka tuo minut tänne. 477 00:26:03,030 --> 00:26:07,430 >> Ja mitä päätyy saada laadittu siellä? 478 00:26:07,430 --> 00:26:08,740 Päädymme laskemisesta h. 479 00:26:08,740 --> 00:26:11,170 Koska se mitä on s kiinnike 0. 480 00:26:11,170 --> 00:26:14,300 Ja sitten sama asia e ja l, ja l, ja o. 481 00:26:14,300 --> 00:26:17,930 >> n, miksi menen läpi suuruudeltaan n? 482 00:26:17,930 --> 00:26:19,200 Koska 0 luonnetta. 483 00:26:19,200 --> 00:26:23,580 Joten vain olla selkeä, niin, jos olen itse poistaa kaiken nämä roskat 484 00:26:23,580 --> 00:26:28,870 arvot ovat ja sitten itse piirtää mitä odottaa, tämä on s kiinnike 1, 2, 485 00:26:28,870 --> 00:26:32,440 3, 4, ja joka on liukuva uusi merkki. 486 00:26:32,440 --> 00:26:36,080 >> Ja nyt jos jatkoimme ohi pisteen piste, piste tässä oikea versio 487 00:26:36,080 --> 00:26:41,930 ja aktivoidut T kiinnike 0 haluan, ja tietenkin hyödyntää juuri tätä 488 00:26:41,930 --> 00:26:47,050 kaveri täällä, mikä käsitteellisesti oli lopulta maalin. 489 00:26:47,050 --> 00:26:48,040 Niin, että kaikki osoitin on. 490 00:26:48,040 --> 00:26:51,430 >> Ja olet käyttänyt niitä viikon nyt yhteydessä jouset. 491 00:26:51,430 --> 00:26:53,530 Mutta alla huppu he hieman monimutkaisempi. 492 00:26:53,530 --> 00:26:57,520 Mutta jos ajattelee niitä tässä kuvallisia muodossa ehdotan, että he 493 00:26:57,520 --> 00:27:01,720 todennäköisesti ole kovin pelottava kuin ne saattaa aluksi tuntua ensi silmäyksellä, 494 00:27:01,720 --> 00:27:04,730 erityisesti tällaisia ​​uusia rakenteita. 495 00:27:04,730 --> 00:27:07,290 Kysyttävää viitteitä, jouset tai merkkiä? 496 00:27:07,290 --> 00:27:07,580 Niin? 497 00:27:07,580 --> 00:27:09,252 >> Yleisö: Voitko mennä takaisin to [kuultavissa]? 498 00:27:09,252 --> 00:27:10,502 >> Kaiutin 1: Toki. 499 00:27:10,502 --> 00:27:14,058 500 00:27:14,058 --> 00:27:19,525 >> Yleisö: Eli miten ihmeessä teidän viimeinen line, sinulla ei ole * t linja 501 00:27:19,525 --> 00:27:21,513 ja * s linjaa? 502 00:27:21,513 --> 00:27:23,004 Eikö sinulla ole viittaus - 503 00:27:23,004 --> 00:27:24,640 >> SPEAKER 1: Ah, todella hyvä kysymys. 504 00:27:24,640 --> 00:27:26,800 Miksi en ole * t ja * s? 505 00:27:26,800 --> 00:27:30,340 Koska lyhyesti, viime viikolla, kuten meidän swap-toiminto, en sanoa, että kun 506 00:27:30,340 --> 00:27:33,350 sinulla osoitin keino joka menet sinne kuten teimme 507 00:27:33,350 --> 00:27:36,590 fyysisesti lavalla, oli todella käyttää tähti operaattori. 508 00:27:36,590 --> 00:27:40,570 >> On käynyt ilmi, että tämä neliön kiinnike merkintätapa on mitä me kutsumme syntaktinen 509 00:27:40,570 --> 00:27:44,190 sokeria, joka on vain seksikäs tapa sanoen se lyhennetty merkintätapa 510 00:27:44,190 --> 00:27:45,950 mitä olet kuvataan. 511 00:27:45,950 --> 00:27:49,385 Mutta se on hieman selkeämpi. 512 00:27:49,385 --> 00:27:53,510 Ja riski tehdä tätä näyttävät enemmän monimutkainen kuin se tarvitsee, 513 00:27:53,510 --> 00:27:56,990 mitä todella tapahtuu täällä on seuraava - 514 00:27:56,990 --> 00:28:01,450 Jos sanon * t se tarkoittaa mennä osoite tallennettu t. 515 00:28:01,450 --> 00:28:04,350 >> Joten kirjaimellisesti, jos t on varastointiin osoite, joka h 516 00:28:04,350 --> 00:28:07,300 aluksi, * t keinoin mennä täällä. 517 00:28:07,300 --> 00:28:10,730 Nyt, mitä t kiinnike 0 tarkoittaa? 518 00:28:10,730 --> 00:28:11,560 Täsmälleen sama asia. 519 00:28:11,560 --> 00:28:13,510 Se on vain hieman enemmän käyttäjän ystävällinen kirjoittaa. 520 00:28:13,510 --> 00:28:14,430 >> Mutta en ole tehnyt vielä. 521 00:28:14,430 --> 00:28:17,800 En voi sanoa * t saa * s. 522 00:28:17,800 --> 00:28:19,440 Koska mitä tekisin niin? 523 00:28:19,440 --> 00:28:22,950 Olisin laskemisesta h, h, h, h, h koko juttu. 524 00:28:22,950 --> 00:28:22,995 Oikea? 525 00:28:22,995 --> 00:28:26,020 >> Koska * t on mennä osoitteeseen t. 526 00:28:26,020 --> 00:28:27,580 Mutta olemme silmukan sisällä. 527 00:28:27,580 --> 00:28:32,150 Ja mitä arvoa olen mukaa, tietenkin jokaisen iteraation? 528 00:28:32,150 --> 00:28:32,690 i. 529 00:28:32,690 --> 00:28:34,590 >> Mutta on mahdollisuus täällä, eikö? 530 00:28:34,590 --> 00:28:37,870 Vaikka tämä tuntuu se alkaa hieman kehittyneempiä 531 00:28:37,870 --> 00:28:40,730 kuin neliön kiinnike merkintätapa olemme käyttäneet jo jonkin aikaa - 532 00:28:40,730 --> 00:28:43,840 haluan Kumoa h muutos siellä - 533 00:28:43,840 --> 00:28:48,870 vaikka tämä on nyt saada hieman harrastaja, perusajatus, jos * t 534 00:28:48,870 --> 00:28:53,630 tarkoittaa tässä ja * t on vain Siirry osoitteeseen t. 535 00:28:53,630 --> 00:28:54,990 >> Mutta mikä oli osoite t? 536 00:28:54,990 --> 00:28:56,850 Määrä pidämme käyttäen? 537 00:28:56,850 --> 00:29:00,540 Kuten Ox456, nyt tuo sen takaisin vain sen vuoksi keskustelua. 538 00:29:00,540 --> 00:29:05,380 No, jos haluan saada aikaa E t string, haluan vain mennä, 539 00:29:05,380 --> 00:29:06,460 olennaisesti, 456. 540 00:29:06,460 --> 00:29:09,230 >> Tai pikemminkin, 457. 541 00:29:09,230 --> 00:29:10,590 Minun täytyy vain lisätä yhden. 542 00:29:10,590 --> 00:29:11,790 Mutta voin tehdä sen? 543 00:29:11,790 --> 00:29:14,680 Koska t, vaikka pidän piirustus se nyt nuoli, se on vain 544 00:29:14,680 --> 00:29:16,570 numero, Ox456. 545 00:29:16,570 --> 00:29:21,400 Ja jos minä lisätä yksi, että vähintään yleensä, jos lisään I, että voin 546 00:29:21,400 --> 00:29:24,350 itse saada tarkalleen missä haluan. 547 00:29:24,350 --> 00:29:26,260 Jos siis itse tehdä tämän - 548 00:29:26,260 --> 00:29:28,970 ja tämä on mitä nyt kutsutaan osoitin aritmeettinen - 549 00:29:28,970 --> 00:29:30,375 Voin poistaa tämän linjan. 550 00:29:30,375 --> 00:29:33,550 Joka on suoraan sanoen mielestäni selkeämpi ja hieman käyttäjäystävällinen lukea. 551 00:29:33,550 --> 00:29:35,970 Mutta tämä ei ole yhtä oikeaa. 552 00:29:35,970 --> 00:29:38,570 >> Tämä koodiriviä nyt käyttää osoitin aritmeettinen. 553 00:29:38,570 --> 00:29:40,920 Se sanoo mennä Seuraavat osoite - 554 00:29:40,920 --> 00:29:44,670 riippumatta alussa t on, joka on t plus i, joka aluksi 555 00:29:44,670 --> 00:29:45,730 on 0, mikä on hienoa. 556 00:29:45,730 --> 00:29:49,280 Koska se tarkoittaa, että alun t plus 1, ja 2, ja 3, ja niin edelleen. 557 00:29:49,280 --> 00:29:51,030 Ja samalla käsitellä s. 558 00:29:51,030 --> 00:29:52,750 >> Joten syntaktista sokeria tähän. 559 00:29:52,750 --> 00:29:55,900 Mutta ymmärtää, mitä todella tapahtuu alla huppu, Väitän, 560 00:29:55,900 --> 00:29:57,410 on todella hyödyllinen ja sinänsä. 561 00:29:57,410 --> 00:30:00,620 Koska se tarkoittaa, nyt siellä ei ole paljon enemmän taikaa tekeillä 562 00:30:00,620 --> 00:30:01,620 alla huppu. 563 00:30:01,620 --> 00:30:03,920 Siellä ei tule olemaan paljon enemmän kerrokset voimme kuori takaisin sinulle. 564 00:30:03,920 --> 00:30:04,810 Tämä on c. 565 00:30:04,810 --> 00:30:06,410 Ja tämä on ohjelmointi. 566 00:30:06,410 --> 00:30:08,002 Todella hyvä kysymys. 567 00:30:08,002 --> 00:30:11,570 >> Okei, joten tämä oli buginen Ohjelma Viittasin aiemmin. 568 00:30:11,570 --> 00:30:12,650 swap oli virheellinen. 569 00:30:12,650 --> 00:30:14,070 Jos ei näytä toimivan. 570 00:30:14,070 --> 00:30:17,390 Muista, että aivan kuten maidon ja appelsiinimehua - jonka aloitin 571 00:30:17,390 --> 00:30:18,660 juominen päivän esittelyn. 572 00:30:18,660 --> 00:30:22,220 Joten aivan kuten appelsiinimehu ja maitoa, meillä ei tarvitse käyttää 573 00:30:22,220 --> 00:30:26,200 väliaikainen muuttuja, tmp, pitää väliaikaisesti, jotta voisimme sitten 574 00:30:26,200 --> 00:30:28,820 muuttaa sen arvoa ja päivitä b. 575 00:30:28,820 --> 00:30:32,870 >> Mutta tämä toiminto, sanoimme, tai tämän ohjelma, jossa tämä toiminto oli 576 00:30:32,870 --> 00:30:35,670 kirjoitettu oli väärä ja virheellinen, miksi? 577 00:30:35,670 --> 00:30:38,870 578 00:30:38,870 --> 00:30:39,090 Kyllä? 579 00:30:39,090 --> 00:30:42,471 >> Yleisö: [kuultavissa]. 580 00:30:42,471 --> 00:30:44,940 >> SPEAKER 1: Aivan, kun soitat swap - 581 00:30:44,940 --> 00:30:47,820 tai yleisemmin, kun soittaa eniten tahansa toiminto - 582 00:30:47,820 --> 00:30:51,210 jos argumentit, jotka toimivat ovat primitiivinen, niin sanotusti, ints ja merkkiä 583 00:30:51,210 --> 00:30:56,740 ja nelinpelin ja kelluu, asioita ilman tähteä, olet ohimennen kopio 584 00:30:56,740 --> 00:30:57,540 argumentti. 585 00:30:57,540 --> 00:31:01,580 Joten jos x on 1 ja y on 2, on menossa on 1 ja b tulee olemaan 2. 586 00:31:01,580 --> 00:31:05,250 Mutta he aikovat olla erilainen paloina bittien eri paloina 587 00:31:05,250 --> 00:31:07,540 muisti, jotka sattuvat olemaan tallentamiseen samoja arvoja. 588 00:31:07,540 --> 00:31:12,160 >> Joten tämä koodi on super täydellinen klo vaihtamalla ja b. 589 00:31:12,160 --> 00:31:13,850 Se ei ole hyvä vaihtokauppa - 590 00:31:13,850 --> 00:31:15,290 viime viikon esimerkki - 591 00:31:15,290 --> 00:31:16,390 x ja y. 592 00:31:16,390 --> 00:31:18,780 Koska uudelleen, he väärässä soveltamisalaan. 593 00:31:18,780 --> 00:31:21,310 >> Nyt, miten voimme edetä vahvistamisesta tästä? 594 00:31:21,310 --> 00:31:23,140 Meidän piti tehdä toiminto näyttää hieman rumempi. 595 00:31:23,140 --> 00:31:25,250 Mutta jälleen kerran, mieti mitä Tämä tarkoittaa vain sitä. 596 00:31:25,250 --> 00:31:27,840 597 00:31:27,840 --> 00:31:31,500 >> Ja oikeastaan ​​haluan, johdonmukaisuuden, muuttaa yhden asian, joten se on identtinen 598 00:31:31,500 --> 00:31:33,200 mitä teimme. 599 00:31:33,200 --> 00:31:35,690 Kuten mainitsin viime viikolla, se ei väliä missä se menee. 600 00:31:35,690 --> 00:31:38,120 Itse asiassa, tyypillisesti voisitte laittaa tähden vieressä muuttujan nimi. 601 00:31:38,120 --> 00:31:40,750 Mutta mielestäni se olisi hieman helpompaa harkitsemaan * vieressä 602 00:31:40,750 --> 00:31:44,910 tietotyyppi siten se osoitin to int tässä tapauksessa. 603 00:31:44,910 --> 00:31:46,270 >> Joten mitä minä teen täällä? 604 00:31:46,270 --> 00:31:49,590 Sanon älä anna minulle int seurasi toinen int, 605 00:31:49,590 --> 00:31:50,810 kutsuen heitä ja b. 606 00:31:50,810 --> 00:31:52,460 Anna minulle osoite int. 607 00:31:52,460 --> 00:31:53,960 Anna minulle osoite toisen int. 608 00:31:53,960 --> 00:31:56,330 Soita osoitteet ja b. 609 00:31:56,330 --> 00:32:00,860 >> Ja sitten käyttää * merkintää alas Alla mennä jokaiseen näistä osoitteista 610 00:32:00,860 --> 00:32:05,290 tarpeen mukaan joko saada tai määrittää sen arvon. 611 00:32:05,290 --> 00:32:07,400 Mutta on poikkeus tästä. 612 00:32:07,400 --> 00:32:11,130 Miksi ei ole * vieressä tmp? 613 00:32:11,130 --> 00:32:15,070 Miksi en tee tätä, esimerkiksi? 614 00:32:15,070 --> 00:32:19,370 Se tuntuu minun pitäisi vain mennä ulos ja korjata koko juttu. 615 00:32:19,370 --> 00:32:19,752 Niin? 616 00:32:19,752 --> 00:32:21,002 >> Yleisö: [kuultavissa]. 617 00:32:21,002 --> 00:32:23,280 618 00:32:23,280 --> 00:32:25,480 >> SPEAKER 1: En ole ilmoittanut TMP jonona. 619 00:32:25,480 --> 00:32:28,830 620 00:32:28,830 --> 00:32:34,950 Joten tämä julistaisi, tässä tapauksessa TMP olevan osoitteen int. 621 00:32:34,950 --> 00:32:37,380 Mutta se ei ole aivan sitä mitä haluan, varten pari syistä. 622 00:32:37,380 --> 00:32:38,616 >> Yleisö: Et halua vaihtaa niitä. 623 00:32:38,616 --> 00:32:41,800 >> SPEAKER 1: Aivan, en halua vaihtaa mitään tmp. tmp on vain 624 00:32:41,800 --> 00:32:42,790 Viikon yksi kamaa. 625 00:32:42,790 --> 00:32:45,150 Haluan vain muuttuja säilyttää joitakin numero. 626 00:32:45,150 --> 00:32:47,330 En edes välitä osoitteet tällä hetkellä. 627 00:32:47,330 --> 00:32:50,530 >> Tarvitsen vain 32 bittiä tai niin tallentaa int. 628 00:32:50,530 --> 00:32:56,690 Ja haluan laittaa ne 32 bittiä mitä ei ole, niin sanotusti, mutta 629 00:32:56,690 --> 00:33:01,260 mitä on, vain olla tarkempi. 630 00:33:01,260 --> 00:33:06,420 Koska jos on osoite, * tarkoittaa mennä sinne ja saada arvon 1. 631 00:33:06,420 --> 00:33:10,560 Esimerkiksi viime viikolla esimerkiksi tai b: n tapauksessa saada arvoa 2. 632 00:33:10,560 --> 00:33:11,750 >> Joten mitä todella tapahtuu? 633 00:33:11,750 --> 00:33:15,070 Saanen piirtää kuvan täällä, että vain erottaa toisistaan ​​osa tänään. 634 00:33:15,070 --> 00:33:18,580 Mutta tämä näkyy edelleen jo jonkin aikaa. 635 00:33:18,580 --> 00:33:22,430 >> Tämä Väitän, mitä tietokoneen muisti näyttää, kun käytät 636 00:33:22,430 --> 00:33:24,060 ohjelma, minkä tahansa ohjelman. 637 00:33:24,060 --> 00:33:28,340 Kun suoritat ohjelman huipulla tietokoneen RAM - niin ajattele 638 00:33:28,340 --> 00:33:33,530 tämän suorakulmion, todella, kuin tietokoneen RAM tai muistia, kaikki 101 639 00:33:33,530 --> 00:33:36,920 miljardia tavua sitä, kaikki kaksi miljardia tavua, kaikki kaksi gigatavua se, 640 00:33:36,920 --> 00:33:39,910 määrästä riippumatta sinulla on, nyt piirtää sen suorakulmio. 641 00:33:39,910 --> 00:33:43,260 Ja väitän, että kun ajat ohjelman kuten Microsoft Word tai Chrome 642 00:33:43,260 --> 00:33:49,220 tai mitään sellaista, bittien Microsoft tai Google kirjoitti - 643 00:33:49,220 --> 00:33:50,910 tapauksissa näiden ohjelmien - 644 00:33:50,910 --> 00:33:54,490 ladataan tietokoneen muistiin jossa he voivat suorittaa lisää 645 00:33:54,490 --> 00:33:57,520 nopeasti ja syötetään CPU, joka on aivot tietokone. 646 00:33:57,520 --> 00:34:00,940 >> Ja TAM ne varastoidaan hyvin top oman ohjelman, niin sanoakseni. 647 00:34:00,940 --> 00:34:03,300 Toisin sanoen, jos tämä on kimpale muistin, kun tuplaklikkaa 648 00:34:03,300 --> 00:34:05,740 Microsoft Word, bitit tulevat pois kiintolevyn. 649 00:34:05,740 --> 00:34:06,680 He saavat ladataan keskusmuistiin. 650 00:34:06,680 --> 00:34:10,330 Ja me työntää niitä huipulla Tämän suorakulmion käsitteellisesti. 651 00:34:10,330 --> 00:34:13,010 >> No, loput muisti on käyttää eri asioita. 652 00:34:13,010 --> 00:34:16,460 Huipulla näet alustaa tiedot ja uninitialize tietoja. 653 00:34:16,460 --> 00:34:20,500 Tämä liittyy siihen, että suurin osa, jossa vakioita tai globaaleja muuttujia 654 00:34:20,500 --> 00:34:21,340 että on arvot. 655 00:34:21,340 --> 00:34:22,980 Mutta enemmän niitä toisen kerran. 656 00:34:22,980 --> 00:34:25,150 >> Sitten on kasa, joka tulemme takaisin. 657 00:34:25,150 --> 00:34:28,420 Mutta alareunassa on osa, joka on erityisesti germane juuri nyt. 658 00:34:28,420 --> 00:34:30,210 Se on ns pino. 659 00:34:30,210 --> 00:34:33,850 Joten aivan kuten useimmissa tahansa D hall täällä kampuksella, sinulla on ne lokerot, jotka 660 00:34:33,850 --> 00:34:37,210 vain pinota päällekkäin, jolloin voit laittaa ruokaa ja vaikka mitä. 661 00:34:37,210 --> 00:34:40,139 Pino tietokonejärjestelmään on hyvin samankaltainen. 662 00:34:40,139 --> 00:34:42,679 Paitsi että tarjotin, koska käytämme ruokasalissa, tietenkin, on tarkoitettu 663 00:34:42,679 --> 00:34:45,710 tehdä asioita tarjottimet tai kehykset - 664 00:34:45,710 --> 00:34:49,469 niin soitamme niistä - tietokoneen muistia käytetään pitämään 665 00:34:49,469 --> 00:34:51,610 muuttujia ja arvoja. 666 00:34:51,610 --> 00:34:53,929 >> Joten mitä todella menee alla huppu? 667 00:34:53,929 --> 00:34:55,820 No, minäpä käännä näytön täällä. 668 00:34:55,820 --> 00:34:58,370 Ja katsotaanpa keskittyä vain alaosa hetkeksi. 669 00:34:58,370 --> 00:35:02,770 Jos tämä on pohjaosa minun tietokoneen muistiin se kääntyy pois, kun 670 00:35:02,770 --> 00:35:05,350 soittaa toiminto tärkein - joka tapahtuu suoraan sanottuna 671 00:35:05,350 --> 00:35:06,950 automaattisesti minulle - 672 00:35:06,950 --> 00:35:10,510 Saan kimpale muistia pohjasta minun RAM niin sanotusti. 673 00:35:10,510 --> 00:35:13,390 Ja tämä on tärkein on paikallisia muuttujia mennä. 674 00:35:13,390 --> 00:35:16,770 Siellä argc ja argv ehkä mennä, ja kaikki muuttujat I 675 00:35:16,770 --> 00:35:18,170 julistaa sisällä tärkein. 676 00:35:18,170 --> 00:35:20,260 He päätyvät alareunassa minun tietokoneen RAM. 677 00:35:20,260 --> 00:35:25,040 >> Oletetaan, että tärkeimmät puhelut toiminto kuten swap, kuten se teki viime viikolla? 678 00:35:25,040 --> 00:35:30,620 No, me lähinnä laittaa uusi lokero, uuden rungon, päälle minun murikka muistia. 679 00:35:30,620 --> 00:35:34,160 Ja aion kuvata tätä kuuluvat swap-toiminto. 680 00:35:34,160 --> 00:35:35,770 >> Nyt mitä sisällä swap? 681 00:35:35,770 --> 00:35:39,240 No, joka perustuu viime viikon ohjelmassa ja yksi Juuri näkemämme ote, 682 00:35:39,240 --> 00:35:46,590 sisällä swap runkoon, tai swap n tarjotin, ovat mitä muuttujia? 683 00:35:46,590 --> 00:35:47,970 No, ja b. 684 00:35:47,970 --> 00:35:51,850 Koska ne olivat sen paikallisen argumentteja, ja kolmas, tmp. 685 00:35:51,850 --> 00:35:54,470 Siis todella, että voisin tehdä tätä hieman puhtaammin. 686 00:35:54,470 --> 00:35:56,680 Anna minun mennä eteenpäin ja kumoa etiketti. 687 00:35:56,680 --> 00:35:58,520 Ja haluan väittävät, että tiedätkö mitä? 688 00:35:58,520 --> 00:36:00,560 >> on todennäköisesti menossa päätyä tänne. 689 00:36:00,560 --> 00:36:02,160 B ehdi tänne. 690 00:36:02,160 --> 00:36:03,810 Ja TMP aikoo päätyä tänne. 691 00:36:03,810 --> 00:36:05,160 Nyt, tilaus saattaa olla hieman erilainen. 692 00:36:05,160 --> 00:36:06,840 Mutta käsitteellisesti tämä on ajatus. 693 00:36:06,840 --> 00:36:11,490 >> Ja vain yhdessä, tämä on mitä soitamme swap rungon tai 694 00:36:11,490 --> 00:36:12,136 ruokailu-sali lokero. 695 00:36:12,136 --> 00:36:13,150 Ja samalla käsitellä tärkeimmät. 696 00:36:13,150 --> 00:36:14,040 Mutta en piirtää sitä. 697 00:36:14,040 --> 00:36:17,810 Mutta siitähän argc ja argv ja kaikki sen paikalliset muuttujat kuten x ja y 698 00:36:17,810 --> 00:36:18,940 voisi olla yhtä hyvin. 699 00:36:18,940 --> 00:36:22,170 >> Joten nyt miettiä, mitä todella tapahtuu kun vuorottelu. 700 00:36:22,170 --> 00:36:26,370 Kun vuorottelu, täytäntöönpanosta koodia Tämän olet ohimennen, että 701 00:36:26,370 --> 00:36:30,670 viallisista versio, ja b ja kopiot x ja y. 702 00:36:30,670 --> 00:36:34,300 Joten jos en nyt kiinnittää tähän ruudulla - 703 00:36:34,300 --> 00:36:36,700 täytyy saada paremmin tämän - 704 00:36:36,700 --> 00:36:40,850 joten tarina Sanoin itselleni oli tässä buginen versio, kun 705 00:36:40,850 --> 00:36:46,130 vuorottelu kulkee kirjaimellisesti ja b kokonaislukuina, mitä todella tapahtuu? 706 00:36:46,130 --> 00:36:48,250 >> No, mitä todella tapahtuu, on tämä. 707 00:36:48,250 --> 00:36:52,850 Anna minun mennä eteenpäin ja kumoa vain selvittää tilaa täällä. 708 00:36:52,850 --> 00:36:54,720 Joten tämä on minun tietokoneen muistiin. 709 00:36:54,720 --> 00:36:57,510 >> Joten jos minulla on esimerkiksi - 710 00:36:57,510 --> 00:36:58,910 todella tehdään se tällä tavalla - 711 00:36:58,910 --> 00:37:02,690 jos Väitän, että tämä on x, tallentamiseen arvo 1 aivan kuten viime viikolla. 712 00:37:02,690 --> 00:37:05,930 Ja tämä on y, varastointi-arvo 2 aivan kuten viime viikolla. 713 00:37:05,930 --> 00:37:11,370 Ja tämä on tärkein, kun vuorottelu, mikä antaa itse pääsy-ja 714 00:37:11,370 --> 00:37:15,150 b ja TMP, aion vaatia, että tämä on, ja tämä on 1. 715 00:37:15,150 --> 00:37:16,080 >> Tämä on b. 716 00:37:16,080 --> 00:37:17,010 Tämä on 2. 717 00:37:17,010 --> 00:37:18,370 Tätä kutsutaan tmp. 718 00:37:18,370 --> 00:37:23,360 >> Ja aluksi se on jonkin verran roskaa arvo kunnes olen itse tallentaa sen, 719 00:37:23,360 --> 00:37:24,450 joka on 1. 720 00:37:24,450 --> 00:37:28,320 Sitten menen eteenpäin ja muuttaa olla mitä? 721 00:37:28,320 --> 00:37:29,720 B: n arvo. 722 00:37:29,720 --> 00:37:31,980 >> Ja nyt minulla on kaksi täällä. 723 00:37:31,980 --> 00:37:34,050 Ja sitten me sanoimme b saa tmp. 724 00:37:34,050 --> 00:37:37,670 Jälleen aivan kuten järki tarkistaa, kolmas koodiriviä täällä on yksinkertaisesti tämä 725 00:37:37,670 --> 00:37:39,440 yksi, b saa tmp. 726 00:37:39,440 --> 00:37:41,730 >> Ja niin lopuksi, mitä teen? 727 00:37:41,730 --> 00:37:46,800 Menen eteenpäin ja muuttaa b olla mitä tahansa arvo tmp on, joka on 1. 728 00:37:46,800 --> 00:37:48,390 En koske TMP uudelleen. 729 00:37:48,390 --> 00:37:54,100 >> Mutta nyt ongelma on niin pian kuin swap palaa, koska se ei ole jakamassa 730 00:37:54,100 --> 00:37:57,540 takaisin jotain arvoa, ei ole paluuta lausuma nimenomaisesti se. 731 00:37:57,540 --> 00:37:59,080 Mitä todella tapahtuu? 732 00:37:59,080 --> 00:38:03,480 No, lähinnä kaikki tämä muisti - 733 00:38:03,480 --> 00:38:07,410 OK, ilmeisesti pyyhekumi tykkää vain yhtä sormea ​​kerrallaan - 734 00:38:07,410 --> 00:38:08,180 katoaa. 735 00:38:08,180 --> 00:38:10,070 >> Nyt todellisuudessa se ei ole menossa minnekään. 736 00:38:10,070 --> 00:38:11,810 Mutta voit ajatella sitä nyt kysymysmerkkejä. 737 00:38:11,810 --> 00:38:14,040 Koska se ei enää käytettäisikään. 738 00:38:14,040 --> 00:38:17,470 Ja mitään ei tehdä näitä arvoja. 739 00:38:17,470 --> 00:38:21,920 >> Joten, jos vihreä versio tämä koodi, mitä sen sijaan ollaan 740 00:38:21,920 --> 00:38:24,640 johdetaan swap? 741 00:38:24,640 --> 00:38:25,770 Joten osoitteet. 742 00:38:25,770 --> 00:38:28,520 Joten osoite, x ja osoite y. 743 00:38:28,520 --> 00:38:35,790 Jos siis uudelleen kertoa tämän tarinan viimeinen aikaa, ja olen itse piirtää swap uudelleen, 744 00:38:35,790 --> 00:38:44,620 mutta viitteitä, tämä on, tämä on b, ja tämä on TMP, mikä on 745 00:38:44,620 --> 00:38:49,080 todella tallennetaan tämän vihreän versio minun koodi, jos olen ohimennen 746 00:38:49,080 --> 00:38:52,110 osoitteissa? 747 00:38:52,110 --> 00:38:53,780 >> Se tulee olemaan osoitin x. 748 00:38:53,780 --> 00:38:54,890 Jotta voisin piirtää nuoli. 749 00:38:54,890 --> 00:38:57,310 Mutta katsotaanpa käyttää samaa mielivaltainen Esimerkiksi kuten aiemmin. 750 00:38:57,310 --> 00:39:01,220 Sanotaan, että tämä on jotain Ox123. 751 00:39:01,220 --> 00:39:04,970 Ja tämä tulee olemaan Ox127 koska se on neljä tavua pois, koska se on 752 00:39:04,970 --> 00:39:07,370 int, joten Ox127. 753 00:39:07,370 --> 00:39:09,080 >> Ja vielä, otan joitakin vapauksia numeroiden kanssa. 754 00:39:09,080 --> 00:39:11,430 Ne ovat paljon pienempiä kuin mitä ne olisivat todella ja eri järjestyksessä. 755 00:39:11,430 --> 00:39:14,350 Mutta se miten kuva on nyt erilainen. 756 00:39:14,350 --> 00:39:19,060 >> Mutta kun käytän tätä vihreää koodia enkä int tmp saada *. 757 00:39:19,060 --> 00:39:25,010 * Keino tehdä seuraavat, ota puuttumaan se on ja mennä sitä, 758 00:39:25,010 --> 00:39:26,190 joka on 1. 759 00:39:26,190 --> 00:39:28,480 Ja sitä minä sitten laittaa tmp. 760 00:39:28,480 --> 00:39:32,480 Samaan aikaan seuraavan rivin koodia täällä * saa b, mitä se tarkoittaa? 761 00:39:32,480 --> 00:39:36,910 >> No, *, joten täältä saa * b, mikä tarkoittaa sinne. 762 00:39:36,910 --> 00:39:39,310 Ja se tarkoittaa laittaa arvoa siellä. 763 00:39:39,310 --> 00:39:43,670 Viimeinen rivi koodia sanoi yksinkertaisesti * b saa tmp. 764 00:39:43,670 --> 00:39:48,900 >> Joten b sanoo mennä sinne ja se korvataan TMP, joka tässä tapauksessa on menossa 765 00:39:48,900 --> 00:39:51,520 on jälleen 1. 766 00:39:51,520 --> 00:39:54,920 Ja siksi vihreä versio meidän koodi toimii, kun taas punainen 767 00:39:54,920 --> 00:39:56,010 versio ei koskaan. 768 00:39:56,010 --> 00:39:59,020 Se kaikki vain pohjimmiltaan kyse siitä, miten muisti on onnistunut ja missä se on 769 00:39:59,020 --> 00:40:02,580 todella laitettu tietokoneen RAM. 770 00:40:02,580 --> 00:40:07,270 Ja nyt se on yksi niistä asioista, että pino ei ole aikaisemmin käytetty. 771 00:40:07,270 --> 00:40:09,225 >> Kysymyksiä layout? 772 00:40:09,225 --> 00:40:10,380 On viitteitä? 773 00:40:10,380 --> 00:40:11,630 Tai swap? 774 00:40:11,630 --> 00:40:13,740 775 00:40:13,740 --> 00:40:17,043 >> Okei, joten malloc, muistaa, teki jotain tällaista. 776 00:40:17,043 --> 00:40:18,260 Tämä oli erittäin yksinkertainen esimerkki. 777 00:40:18,260 --> 00:40:20,550 Ja tämä oli yksi, joka Binky esitteli meidät, vaikkakin varsin 778 00:40:20,550 --> 00:40:21,870 nopeasti, lopussa luokan. 779 00:40:21,870 --> 00:40:24,480 Perhana, siellä mennään taas. 780 00:40:24,480 --> 00:40:28,780 >> Joten muistaa, että tämä oli esimerkki siitä, että Binky esitteli meidät, vaikkakin 781 00:40:28,780 --> 00:40:30,360 jokseenkin nopeasti lopussa luokan. 782 00:40:30,360 --> 00:40:33,640 Ja tässä käytimme malloc todella toisen kerran. 783 00:40:33,640 --> 00:40:37,330 Koska ensimmäistä kertaa käytimme sitä luoda tarpeeksi RAM, käyttää riittävästi RAM 784 00:40:37,330 --> 00:40:38,340 tallentaa merkkijonon. 785 00:40:38,340 --> 00:40:40,250 >> Tällä kertaa Binky pidetään yksinkertaisina. 786 00:40:40,250 --> 00:40:42,465 Joten se tallentaa vain int, ilmeisesti. 787 00:40:42,465 --> 00:40:43,510 Ja se on täysin kunnossa. 788 00:40:43,510 --> 00:40:46,560 Se on vähän outo, suoraan sanottuna, että käyttää malloc jakaa yhden int. 789 00:40:46,560 --> 00:40:50,650 Mutta kohta Nickin claymation oli oikeastaan ​​vain kertoa tarinan siitä, mitä 790 00:40:50,650 --> 00:40:53,830 tapahtuu tai ei tapahdu, kun voit kohdella huonosti muistin. 791 00:40:53,830 --> 00:40:56,520 >> Joten tässä tapauksessa, tämä ohjelma teki muutamia asioita. 792 00:40:56,520 --> 00:41:01,580 Ensimmäisessä tapauksessa täällä, se ilmoittaa osoitin kutsutaan x int. 793 00:41:01,580 --> 00:41:04,480 Sen jälkeen julistaa osoitin kutsutaan y int. 794 00:41:04,480 --> 00:41:06,150 Sen jälkeen myymälää x, mitä? 795 00:41:06,150 --> 00:41:07,110 Joku nyt. 796 00:41:07,110 --> 00:41:09,685 Mikä saa säilyttää x mukaan kolmannella rivillä tätä ohjelmaa? 797 00:41:09,685 --> 00:41:12,380 >> Yleisö: [kuultavissa]. 798 00:41:12,380 --> 00:41:14,130 >> SPEAKER 1: No, ei aivan tavua, per sanoa. 799 00:41:14,130 --> 00:41:16,760 Tarkemmin sanottuna nyt. 800 00:41:16,760 --> 00:41:18,325 Mikä saa säilyttää x? 801 00:41:18,325 --> 00:41:21,000 802 00:41:21,000 --> 00:41:22,060 Osoite, Taisin kuulla sitä. 803 00:41:22,060 --> 00:41:23,570 >> Joten mitä malloc palauttaa? 804 00:41:23,570 --> 00:41:26,030 malloc behaviorally kohdentaa kimpale muisti. 805 00:41:26,030 --> 00:41:27,850 Mutta miten se antaa sinulle pääsyn sen? 806 00:41:27,850 --> 00:41:29,460 Se palauttaa mitä? 807 00:41:29,460 --> 00:41:32,000 Osoite ensimmäinen tavu vuonna kimpale muisti. 808 00:41:32,000 --> 00:41:33,020 >> Nyt tämä on erittäin yksinkertainen. 809 00:41:33,020 --> 00:41:35,380 Se on vain yksi tavu, joka tarkoittaa käsitellä saamme takaisin on 810 00:41:35,380 --> 00:41:37,300 osoite koko juttu. 811 00:41:37,300 --> 00:41:42,070 Joten tallennetaan x sitten on osoite Tämän kimpale muisti. 812 00:41:42,070 --> 00:41:43,400 Samaan aikaan, mitä tapahtuu seuraavaksi? 813 00:41:43,400 --> 00:41:45,890 Joten oikeastaan, mennään eteenpäin ja vetää tätä todella nopeasti. 814 00:41:45,890 --> 00:41:52,490 >> Joten jos menemme yli näytön täällä soitamme tätä int * x ja int * y 815 00:41:52,490 --> 00:41:53,740 aikoo tehdä mitä minulle? 816 00:41:53,740 --> 00:41:58,280 Väitän, että se on juuri menossa tekemään jotain tällaista ja kutsua sitä x, ja 817 00:41:58,280 --> 00:42:00,010 Tämän ja kutsua sitä y. 818 00:42:00,010 --> 00:42:03,110 Samaan aikaan kolmannen rivin koodia on menossa jakaa koko int, 819 00:42:03,110 --> 00:42:06,160 joka sattuu olemaan - pahoillani, jos sanoin yksi ennen Tarkoitin yksi int - 820 00:42:06,160 --> 00:42:08,280 neljä tavua tyypillinen tietokone. 821 00:42:08,280 --> 00:42:09,720 Ainakin CS50 laitteen. 822 00:42:09,720 --> 00:42:11,490 >> Joten tämä tulee kohdentaa se, kuka tietää? 823 00:42:11,490 --> 00:42:12,800 Jossain täällä. 824 00:42:12,800 --> 00:42:15,780 Ja tämä on tallennettu jossain osoite Ox, kuka tietää? 825 00:42:15,780 --> 00:42:18,330 Mutta mitä menossa takaisin on, että osoite. 826 00:42:18,330 --> 00:42:22,270 Mutta me tehdä tätä kuvallisesti kuten juuri nuoli niin. 827 00:42:22,270 --> 00:42:25,430 >> Nyt seuraavalle riville * x saa 42. 828 00:42:25,430 --> 00:42:29,400 Mitä * x tarkoittaa maallikon termein? 829 00:42:29,400 --> 00:42:30,040 Vain mennä sinne. 830 00:42:30,040 --> 00:42:30,960 Mene osoitteeseen. 831 00:42:30,960 --> 00:42:35,900 Tai toisin sanoen, noudata nuoli ja laittaa 42 siellä. 832 00:42:35,900 --> 00:42:38,140 Mutta sitten tapahtui jotain kamalaa to Binky, eikö? 833 00:42:38,140 --> 00:42:43,950 >> Muista, että linja viisi täällä, * y saa 13 todellakin epäonnen luku, 834 00:42:43,950 --> 00:42:44,760 teki sen, mitä meille? 835 00:42:44,760 --> 00:42:47,320 No, * y keinoin mennä sinne. 836 00:42:47,320 --> 00:42:50,460 No, tämä ei ole annettu arvo vielä, eikö? 837 00:42:50,460 --> 00:42:54,090 Koodia ei ole y on alustetaan mitään. 838 00:42:54,090 --> 00:42:56,120 Olimme x alustetaan osoitteeseen. 839 00:42:56,120 --> 00:42:57,640 Mutta y julistettiin ylös. 840 00:42:57,640 --> 00:43:00,250 Mutta sitten puolipiste, ei arvoa todella laittaa se. 841 00:43:00,250 --> 00:43:02,330 Joten se on reilua kutsua tätä roskat arvo. 842 00:43:02,330 --> 00:43:03,430 Kuka tietää, mitä siellä on? 843 00:43:03,430 --> 00:43:07,160 Se on jäänteitä bittien käytettiin joidenkin edellisen rivin koodia 844 00:43:07,160 --> 00:43:08,300 minun ohjelma. 845 00:43:08,300 --> 00:43:13,250 >> Joten jos sanon mennä sinne, tämä on kuin, Minulla ei ole aavistustakaan, missä tämä nuoli on 846 00:43:13,250 --> 00:43:14,490 ehdi. 847 00:43:14,490 --> 00:43:17,720 Ja silloin normaalisti saada segmentointi vika. 848 00:43:17,720 --> 00:43:22,430 Jos vahingossa dereference, niin puhua, tai mene osoitteeseen, joka ei ole 849 00:43:22,430 --> 00:43:25,400 todella oikeutettu osoite, huonoja asioita tapahtuu. 850 00:43:25,400 --> 00:43:27,550 >> Ja se mitä tapahtui ajatella Binky. 851 00:43:27,550 --> 00:43:31,060 Niin muistaa, että tarina, joka Nick oli kertoo täällä oli sama idea kuin mitä 852 00:43:31,060 --> 00:43:34,050 Olen piirretty illuusion liidulla taululle siellä. 853 00:43:34,050 --> 00:43:35,960 X ja Y on ilmoitettu. 854 00:43:35,960 --> 00:43:39,690 >> Sitten jaetaan koko int ja varastoida sitä x. 855 00:43:39,690 --> 00:43:42,130 Sitten seuraava rivi teimme * x. 856 00:43:42,130 --> 00:43:46,070 Tämä oli Nickin taikasauva ja dereferencing. 857 00:43:46,070 --> 00:43:49,780 Että laittaa 42 muisti huomautti x. 858 00:43:49,780 --> 00:43:51,600 >> Mutta tämä on, jos asiat meni pieleen. 859 00:43:51,600 --> 00:43:51,820 Oikea? 860 00:43:51,820 --> 00:43:53,550 Yritimme dereference y. 861 00:43:53,550 --> 00:43:55,620 Mutta y oli joitakin vääriä arvo, eikö? 862 00:43:55,620 --> 00:43:57,720 >> Että nuoli vasenta alakulmaa kulma, ei ole 863 00:43:57,720 --> 00:43:58,950 todella osoittaa mitään. 864 00:43:58,950 --> 00:44:01,520 Se on tavallaan tekee mitä teki tässä hallituksessa. 865 00:44:01,520 --> 00:44:05,900 Niin pahoja asioita tapahtuu, segmentointi vika tai Binky vika tässä tapauksessa. 866 00:44:05,900 --> 00:44:10,800 >> Mutta jos me sitten korjata, että tekemällä x saa y miten tarina muuttuu? 867 00:44:10,800 --> 00:44:15,760 No, jos en x saa y, joka on käytännössä samaa kuin sanomalla 868 00:44:15,760 --> 00:44:19,235 mitä tämä on, Ox-jotain tulee olemaan sama täällä, 869 00:44:19,235 --> 00:44:20,080 Ox-jotain. 870 00:44:20,080 --> 00:44:22,970 Tai kuvallisesti me vetää nuolen. 871 00:44:22,970 --> 00:44:25,530 >> Joten tässä laudalle Binky, kanssa seuraavan rivin 872 00:44:25,530 --> 00:44:28,350 koodi, * y tarkoittaa sinne. 873 00:44:28,350 --> 00:44:29,400 Missä on? 874 00:44:29,400 --> 00:44:30,820 Se tarkoittaa tänne. 875 00:44:30,820 --> 00:44:36,050 >> Ja kun me päivittää sen olevan 13 se vain liittyy menossa ja 876 00:44:36,050 --> 00:44:39,470 kirjallisesti 13 täällä nyt. 877 00:44:39,470 --> 00:44:44,130 Joten ehkä ole täysin suoraviivaista ensi silmäyksellä. 878 00:44:44,130 --> 00:44:47,740 Mutta kertaus ja käyttää samaa ammattikieltä että Binky käytti täällä, niin 879 00:44:47,740 --> 00:44:50,485 kaksi ensimmäistä jakaa viitteitä, x ja y, mutta ei pointees. 880 00:44:50,485 --> 00:44:54,750 Ja pointees ei ole yleisesti käytetty termi. 881 00:44:54,750 --> 00:44:56,120 Mutta osoitin ehdottomasti on. 882 00:44:56,120 --> 00:44:59,200 Mutta se mitä on korostettava AT Binky n nimikkeistön. 883 00:44:59,200 --> 00:45:01,660 >> Tämä seuraava rivi, tietenkin, jakaa int pointee. 884 00:45:01,660 --> 00:45:04,840 Joten kimpale muisti - kuten Piirsin päälleni oikealla puolella - ja joukko 885 00:45:04,840 --> 00:45:06,470 x on yhtä suuri osoittamaan sitä. 886 00:45:06,470 --> 00:45:11,350 Tämä dereferences x tallentaa 42 muistin, että se on suunnattu. 887 00:45:11,350 --> 00:45:13,380 Ja sitten tämä tietysti oli huono asia. 888 00:45:13,380 --> 00:45:15,600 Koska y ei viittaa klo vielä mitään. 889 00:45:15,600 --> 00:45:16,530 Tämä korjaa sen. 890 00:45:16,530 --> 00:45:18,240 Joten tämä on vielä buginen ohjelma. 891 00:45:18,240 --> 00:45:21,580 Juuri siksi olemme puhaltaneet koodia rivi riviltä ja sanoi, no, 892 00:45:21,580 --> 00:45:22,690 anna sen kaatua siellä. 893 00:45:22,690 --> 00:45:23,420 Se on huono asia. 894 00:45:23,420 --> 00:45:26,790 Kertoimet ovat ohjelman juuri menossa keskeyttää kokonaan tuohon linja. 895 00:45:26,790 --> 00:45:30,550 Mutta jos olit poistaa kaatui linja ja korvata sen kaksi viimeistä 896 00:45:30,550 --> 00:45:32,470 Linjoissa annat - 897 00:45:32,470 --> 00:45:35,310 käyttäen osoitin tehtävän - y viitata x kohdaksi t. 898 00:45:35,310 --> 00:45:39,280 Ja sitten dereference y erittäin turvallinen tapa. 899 00:45:39,280 --> 00:45:41,520 >> Joten jos tämä jättää meidät? 900 00:45:41,520 --> 00:45:45,350 No, osoittautuu, että alla huppu vuonna CS50 kirjasto, osoittimet ovat 901 00:45:45,350 --> 00:45:46,320 käytetään koko. 902 00:45:46,320 --> 00:45:48,910 Ja me todella alkaa kuoria takaisin että kerros ennen pitkää. 903 00:45:48,910 --> 00:45:51,740 Mutta se muuttuu myös lauseke jotkut teistä saattavat tuntea, 904 00:45:51,740 --> 00:45:54,580 erityisesti mukavampaa, on todella, että on erittäin suosittu 905 00:45:54,580 --> 00:45:56,390 verkkosivuilla tai ylivuoto, näinä päivinä. 906 00:45:56,390 --> 00:45:58,720 >> Mutta tämä on itse asiassa hyvin tekninen merkitys. 907 00:45:58,720 --> 00:46:00,160 Tiedämme nyt, mitä pino on. 908 00:46:00,160 --> 00:46:02,550 Se on kuin pino tarjottimia sisällä ruokasalissa. 909 00:46:02,550 --> 00:46:05,140 >> Tai sisällä tietokoneen muisti its nämä kehykset 910 00:46:05,140 --> 00:46:06,900 , joita käytetään toimintoja. 911 00:46:06,900 --> 00:46:10,760 No, käy ilmi, että tämän takia hyvin yksinkertainen täytäntöönpano 912 00:46:10,760 --> 00:46:14,970 muistin ja kehykset ns pino, voit itse hallita 913 00:46:14,970 --> 00:46:17,050 tehty atk-järjestelmää melko helposti. 914 00:46:17,050 --> 00:46:22,180 Voit murtautua järjestelmään, jos ihmiset kuten me ole kirjoittanut meidän koodi 915 00:46:22,180 --> 00:46:23,300 erityisen hyvin. 916 00:46:23,300 --> 00:46:26,670 >> Jos ihmiset kuten meistä käyttävät paloina muistia tai käytä ryhmät - 917 00:46:26,670 --> 00:46:27,810 vielä yleisemmin - 918 00:46:27,810 --> 00:46:31,800 mutta joskus unohda tarkistaa rajat meidän array kuten ehkä 919 00:46:31,800 --> 00:46:38,470 on itse joskus, ja iteroidun liian pitkälle ohi lopussa array. 920 00:46:38,470 --> 00:46:40,520 Parhaassa tapauksessa ohjelma saattaa vain kaatua. 921 00:46:40,520 --> 00:46:42,280 Segmentointi vika, jollaisia kiusallista. 922 00:46:42,280 --> 00:46:45,480 Ei suuri, mutta se ei ole välttämättä erittäin huono asia. 923 00:46:45,480 --> 00:46:49,480 >> Mutta jos ohjelma on itse asiassa todellinen käyttäjien tietokoneissa, jos se on käynnissä 924 00:46:49,480 --> 00:46:53,070 verkkosivuilla, että todellinen satunnaisia ​​ihmisiä Internetissä lyövät, kerroit 925 00:46:53,070 --> 00:46:56,690 ihmiset aiheuttaa huonoja asioita koodi on yleensä ole hyvä asia, koska 926 00:46:56,690 --> 00:46:59,930 se merkitsee mahdollisuutta ottaa tietokoneen hallintaansa. 927 00:46:59,930 --> 00:47:01,350 Ja tämä on menossa katsomaan hieman arvoituksellinen. 928 00:47:01,350 --> 00:47:04,570 Mutta ajattelin pelästyttää sinua Viimeinen esimerkki tästä. 929 00:47:04,570 --> 00:47:05,650 >> Tässä esimerkki koodin. 930 00:47:05,650 --> 00:47:07,370 Ja siellä on hyvä Wikipedia artikkeli, joka kävelee 931 00:47:07,370 --> 00:47:08,530 Tämän yksityiskohtaisemmin. 932 00:47:08,530 --> 00:47:13,890 Minulla on tärkein pohjassa kutsumus foo, ohimennen argv 1. 933 00:47:13,890 --> 00:47:15,750 Ja se on vain niin, että voit suorita ohjelma ja siirtää 934 00:47:15,750 --> 00:47:17,080 mielivaltainen tulo. 935 00:47:17,080 --> 00:47:20,180 >> Ja sitten foo on julistettu ylös niin että hyväksytään merkkijono tai enemmän 936 00:47:20,180 --> 00:47:21,700 Juuri, char *. 937 00:47:21,700 --> 00:47:23,860 Sen jälkeen julistaa joukko merkkiä. 938 00:47:23,860 --> 00:47:27,130 Soita se puskuri, yleisemmin, koosta 12. 939 00:47:27,130 --> 00:47:30,900 Joten 12 merkkiä mahtuu sisälle Tämän array kutsutaan c. 940 00:47:30,900 --> 00:47:33,510 >> Ja sitten se käyttää tätä uutta toimintoa, joka on uusi, mutta ei ole vaikea 941 00:47:33,510 --> 00:47:34,930 ymmärtää, muisti kopioida. 942 00:47:34,930 --> 00:47:39,290 Se kopioi muistin baari, joka oli muuttuja aiemmin n riippumatta 943 00:47:39,290 --> 00:47:42,080 Käyttäjä kirjoitetaan argv 1. osaksi c. 944 00:47:42,080 --> 00:47:43,090 Kuinka monta tavua? 945 00:47:43,090 --> 00:47:44,260 Merkkijonon pituus bar. 946 00:47:44,260 --> 00:47:48,380 >> Eli toisin sanoen, jos käyttäjä on h-e-l-l-o enter, merkkijonon pituus 947 00:47:48,380 --> 00:47:49,260 Hello on viisi. 948 00:47:49,260 --> 00:47:52,790 Joten viisi näistä tavua on menossa kopioidaan array nimeltään C, joka 949 00:47:52,790 --> 00:47:54,110 on koko 12. 950 00:47:54,110 --> 00:47:58,710 Mutta mitä käyttäjä on paljon pidempi sana, joka on 13 merkkiä tai 14 951 00:47:58,710 --> 00:48:01,250 merkkiä tai 100 merkkiä tai enemmän? 952 00:48:01,250 --> 00:48:02,660 >> Jos he aikovat mennä? 953 00:48:02,660 --> 00:48:06,090 No, runko, että tarjotin in dining-sali pino, 954 00:48:06,090 --> 00:48:06,930 he aikovat mennä sinne. 955 00:48:06,930 --> 00:48:10,080 Ja se vain menee alkaa päälle muita juttuja, joka on jo 956 00:48:10,080 --> 00:48:12,880 on, että pino, täynnä pino, niin sanoakseni. 957 00:48:12,880 --> 00:48:14,780 >> Joten kuvallisesti, ajattele sitä tällä tavalla. 958 00:48:14,780 --> 00:48:17,970 Tämä on vain värikäs versio kuva olemme piirustus. 959 00:48:17,970 --> 00:48:20,060 Alareunassa, sanokaamme, on tärkein. 960 00:48:20,060 --> 00:48:24,690 Ja päälle, mitä näet nyt on runko, värikoodatut nyt, 961 00:48:24,690 --> 00:48:26,090 funktio foo. 962 00:48:26,090 --> 00:48:30,170 Mutta mitä mielenkiintoista täällä foo on, että täällä on sen runko. 963 00:48:30,170 --> 00:48:32,860 Joten se on laadittu aivan kuten minä teki vaan vaaleansininen. 964 00:48:32,860 --> 00:48:35,220 Ja nyt tämä on c kiinnike 0 menee. 965 00:48:35,220 --> 00:48:37,410 Ja tämä on c kiinnike 11. aikoo päätyä. 966 00:48:37,410 --> 00:48:39,670 >> Toisin sanoen, se sattuu olla edustettuina neliö. 967 00:48:39,670 --> 00:48:42,320 Mutta jos vain pitää plopping tavua alas - tai merkkiä - he aikovat lopettaa 968 00:48:42,320 --> 00:48:46,070 up 0 mitattu kokonaan ylös 11, koska se on 0 indeksoitu. 969 00:48:46,070 --> 00:48:49,170 >> Mutta missä on 13 merkkiä ehdi? 970 00:48:49,170 --> 00:48:50,310 Missä 14th? 971 00:48:50,310 --> 00:48:52,430 Missä 50-merkin ehdi? 972 00:48:52,430 --> 00:48:54,070 >> Se tulee pitää menossa alaspäin. 973 00:48:54,070 --> 00:48:57,350 Sillä vaikka olemme kiinnittäneet kuva pino kasvaa, 974 00:48:57,350 --> 00:48:59,920 osoitteet, se kääntyy pois, mennä pieni osoitteita, pieni 975 00:48:59,920 --> 00:49:01,830 osoittimet, iso osoitteita. 976 00:49:01,830 --> 00:49:03,540 Niin se vain pitää menossa ylös ja ylös. 977 00:49:03,540 --> 00:49:05,660 >> Joten jos käyttäjä on Hei, se on hienoa. 978 00:49:05,660 --> 00:49:08,650 Ei vika, ei ole ongelma, kaikki on turvassa. 979 00:49:08,650 --> 00:49:11,940 Mutta jos käyttäjä on mitä jaamme soita kontradiktorista koodi, jota edustaa 980 00:49:11,940 --> 00:49:16,040 yleiseltä, hyökkäys, hyökkäys, hyökkäys, hyökkäys, mitä voi tapahtua? 981 00:49:16,040 --> 00:49:19,760 >> No, jos kaikki tulo, että käyttäjä kirjoitit ei ole vain ystävällisiä 982 00:49:19,760 --> 00:49:21,540 tai loukkaavaa merkkijono. 983 00:49:21,540 --> 00:49:24,050 Se on oikeastaan ​​merkkijono että jos koottu se, 984 00:49:24,050 --> 00:49:26,050 se todellisuudessa on koodi. 985 00:49:26,050 --> 00:49:29,570 Ehkä se koodi, joka poistaa kaikki tiedostoja kiintolevyllä tai lähettää roskapostia 986 00:49:29,570 --> 00:49:30,810 tai jotain. 987 00:49:30,810 --> 00:49:35,110 Huomaa, että mitä Tärkeintä tässä on, että jos pahis sai onni 988 00:49:35,110 --> 00:49:37,830 korvata punainen kimpale muisti - 989 00:49:37,830 --> 00:49:41,080 jota en piirtää kuvani mutta Tämän Wikipedia kuva täällä on - 990 00:49:41,080 --> 00:49:42,890 sen ns palautusosoite. 991 00:49:42,890 --> 00:49:47,470 >> Kun ruoka palaa, kun swap palaa, miten tietokone tietää mennä 992 00:49:47,470 --> 00:49:49,790 tänne tänne? 993 00:49:49,790 --> 00:49:52,920 Tai Tech segmentin yläpuolella, miten se tietää mennä swap 994 00:49:52,920 --> 00:49:54,870 koodi - 0: n ja 1: n jotka muodostavat swap - 995 00:49:54,870 --> 00:49:56,020 Takaisin? 996 00:49:56,020 --> 00:50:00,450 On ns paluuosoite tallennetaan saman pinokehyksen puolesta 997 00:50:00,450 --> 00:50:02,140 Sama kahvila lokeroon. 998 00:50:02,140 --> 00:50:06,080 >> Joten jos pahis on tarpeeksi fiksu laittaa hyökkäys koodi, hyökkäys koodi, hyökkäys 999 00:50:06,080 --> 00:50:07,960 koodia, ja saada onni - 1000 00:50:07,960 --> 00:50:11,630 usein yrityksen ja erehdyksen kautta - ja korvata, että punainen paluuosoite, 1001 00:50:11,630 --> 00:50:14,360 osoitteen ja huomautus hyvin alkuun. 1002 00:50:14,360 --> 00:50:16,830 Huomaa 0835C080. 1003 00:50:16,830 --> 00:50:20,650 Se on kirjoitettu takaperin ylös varten syistä me ehkä uudelleen. 1004 00:50:20,650 --> 00:50:22,050 Tämä on se numero. 1005 00:50:22,050 --> 00:50:25,790 >> Joten jos pahis saa onni tai on fiksu korvata punainen 1006 00:50:25,790 --> 00:50:29,480 riistää muistia osoite koodi, joka hänellä on jotenkin 1007 00:50:29,480 --> 00:50:34,980 ruiskutetaan tietokoneen, arvaa jonka koodia aiotaan palauttaa 1008 00:50:34,980 --> 00:50:38,260 heti foo tehdään täytäntöönpanosta? 1009 00:50:38,260 --> 00:50:39,440 >> Pahis koodi. 1010 00:50:39,440 --> 00:50:43,610 Joten tämä hyökkäys koodi, AAA, jälleen, ehkä lähettää roskapostia, voi poistaa kaikki tiedostot 1011 00:50:43,610 --> 00:50:44,500 kiintolevylle. 1012 00:50:44,500 --> 00:50:48,740 Mutta sitähän todella pinon ylivuoto on, tai puskurin ylivuoto, tai 1013 00:50:48,740 --> 00:50:51,060 puskurin ylivuoto hyökkäys. 1014 00:50:51,060 --> 00:50:54,400 >> Ja se on uskomattoman, uskomattoman yhteinen Tämän päivän kirjoitettuja ohjelmia 1015 00:50:54,400 --> 00:50:58,220 C, C + +, ja jopa joitakin muita kieliä. 1016 00:50:58,220 --> 00:51:02,275 On pelottavaa huomata, hyvitämme päättyy vitsi. 1017 00:51:02,275 --> 00:51:03,230 >> [Naurua] 1018 00:51:03,230 --> 00:51:04,550 >> Nähdään keskiviikkona. 1019 00:51:04,550 --> 00:51:07,920 1020 00:51:07,920 --> 00:51:10,310 Seuraavassa CS50 - 1021 00:51:10,310 --> 00:51:15,920 Joten olen kaikki ulos levyn lamput tänään, mutta Odota, rasvaton maito, puoli puhelin 1022 00:51:15,920 --> 00:51:17,850 kirja, appelsiinimehua että join tänään. 1023 00:51:17,850 --> 00:51:20,370 1024 00:51:20,370 --> 00:51:22,780 USB-kaapeli, jakoavain. 1025 00:51:22,780 --> 00:51:24,800 >> [Musiikki soi]