1 00:00:00,000 --> 00:00:11,242 >> [Muusika mängib] 2 00:00:11,242 --> 00:00:16,630 >> DAVID J. Malan: Olgu see CS50 ja see on algus nädalal viis. 3 00:00:16,630 --> 00:00:21,480 Nii et täna alla oma istmepadjad, te ei leia midagi. 4 00:00:21,480 --> 00:00:24,790 Kuid eelkõige, siis tuleb leida need, väike märgiks meie tunnustust 5 00:00:24,790 --> 00:00:26,970 kõik tööd, et paned Mängu viieteistkümne. 6 00:00:26,970 --> 00:00:30,290 Lihtsalt eemalda väike ring alt alustada mängimist 7 00:00:30,290 --> 00:00:31,680 ülejäänud klassile. 8 00:00:31,680 --> 00:00:38,930 >> Nii tuletavad meelde, või tead, et probleem määrata neli, mis läks sel nädalavahetusel, 9 00:00:38,930 --> 00:00:40,340 hõlmab kirjalikult teise mängu. 10 00:00:40,340 --> 00:00:43,740 Aga seekord see hõlmab kasutades tegeliku graafilise kasutajaliidese, ei 11 00:00:43,740 --> 00:00:46,310 tekstiline liides nagu Mäng viieteistkümne oli. 12 00:00:46,310 --> 00:00:50,210 Ja mäng, mis meid ees ootab sind, kui olete seni näinud järgmisena 13 00:00:50,210 --> 00:00:52,310 tundub natuke midagi sellist. 14 00:00:52,310 --> 00:00:55,170 Ma lähen minema mu terminal aken siin GDB. 15 00:00:55,170 --> 00:00:58,600 Ja ma lähen edasi minna ja käivitada personal lahendus, mida saab kasutada 16 00:00:58,600 --> 00:01:01,010 pärast töötab uuendus 50, nagu tavaliselt. 17 00:01:01,010 --> 00:01:04,090 >> Aga ma lähen panna see veidi saladus režiimis veidi lihavõttemuna 18 00:01:04,090 --> 00:01:08,480 niinimetatud Jumala režiimi poolt pannes Jumala argv1. 19 00:01:08,480 --> 00:01:12,920 Ja ma pean järgima oma suunas, töötab see minu oma 20 00:01:12,920 --> 00:01:14,220 probleem määratud kataloog. 21 00:01:14,220 --> 00:01:19,190 Nüüd näed täisversioon on mäng Breakout. 22 00:01:19,190 --> 00:01:21,090 Tegelikult ei ole see-käed režiimis. 23 00:01:21,090 --> 00:01:24,850 Nii et see on tegelikult - 24 00:01:24,850 --> 00:01:26,470 wowed kuigi võite olla - 25 00:01:26,470 --> 00:01:30,850 üsna triviaalne rakendada Jumala režiimi Breakout erinevalt Game viieteistkümne, 26 00:01:30,850 --> 00:01:33,590 mis mõned teist võib-olla tegeleda jaoks häkker väljaanne. 27 00:01:33,590 --> 00:01:37,890 >> In Breakout piisab Jumalasse mode lihtsalt seda, mida, 28 00:01:37,890 --> 00:01:41,220 intuitiivselt koos mõla? 29 00:01:41,220 --> 00:01:45,630 Lihtsalt see on võrdne, olenemata horisontaalasendis on mänguajast. 30 00:01:45,630 --> 00:01:49,220 Ja nii kaua, kui te seda teha lockstep palli liigub see mäng 31 00:01:49,220 --> 00:01:53,100 kunagi, kunagi, kunagi ei pane palli ja sa võidad iga kord. 32 00:01:53,100 --> 00:01:55,430 >> Aga sel nädalal häkker väljaanne seal on rohkem kui lihtsalt Jumal režiimis. 33 00:01:55,430 --> 00:01:56,720 Seal on mitmeid teisi funktsioone. 34 00:01:56,720 --> 00:01:58,140 Neist laserid. 35 00:01:58,140 --> 00:02:01,070 Nii et kui sa tõesti kärsitu te saab alustada shooting kehtestatakse tellised 36 00:02:01,070 --> 00:02:02,120 ja mõned teised. 37 00:02:02,120 --> 00:02:04,560 Ja neile, kes tahaks kalibreerida standard versus häkker 38 00:02:04,560 --> 00:02:08,750 väljaanne, ma näen, et sel nädalal Häkker väljaanne tahtlikult on 39 00:02:08,750 --> 00:02:12,830 natuke rohkem sooritatav, ütleme, kui Jumal režiim oli mäng Viisteist. 40 00:02:12,830 --> 00:02:15,300 >> Nii et kui te otsite venitada ja otsite mõningaid täiendavaid lõbus 41 00:02:15,300 --> 00:02:18,400 tunnused ei sukelduda kui huvi. 42 00:02:18,400 --> 00:02:21,280 Nüüd enam praktiliselt, lubage mul juhtida välja üks asi samuti. 43 00:02:21,280 --> 00:02:24,780 GDB, mis mõned teist ei pruugi olla veel puudutanud isiklikult, mis on hea. 44 00:02:24,780 --> 00:02:28,530 Aga nüüd on tõesti aega harjuda sellele ja mugav selle tööriistaga 45 00:02:28,530 --> 00:02:31,510 sest see teeb teie elu palju lihtsam, tõesti. 46 00:02:31,510 --> 00:02:34,900 >> Per Rob loeng GDB paar nädalat tagasi, meenutavad 47 00:02:34,900 --> 00:02:36,810 et GDB on silur. 48 00:02:36,810 --> 00:02:41,230 See on vahend, mis võimaldab teil näidata oma programmi, kuid kasutada seda samm-sammult, line 49 00:02:41,230 --> 00:02:45,680 realt, nii et saate tuhnima, nii et sa näed asju juhtub nii, 50 00:02:45,680 --> 00:02:47,310 et saad välja printida väärtused muutujatele. 51 00:02:47,310 --> 00:02:50,580 Lühidalt, see annab sulle nii palju energiat kui printDef teeb. 52 00:02:50,580 --> 00:02:52,900 >> Nüüd küll liides on üsna kauge. 53 00:02:52,900 --> 00:02:55,180 Must-valge teksti liides enamasti. 54 00:02:55,180 --> 00:02:57,400 Käsud on mõnevõrra raske meelde jäävad. 55 00:02:57,400 --> 00:03:01,230 Aga kuigi see võib teid pool tund, tund, panna, et kohe algul 56 00:03:01,230 --> 00:03:02,940 investeeringu aega arvesse seda, usu mind. 57 00:03:02,940 --> 00:03:06,440 Kindlasti poolt semestri lõpuks ta päästab sa suurusjärgus rohkem 58 00:03:06,440 --> 00:03:07,600 aega kui. 59 00:03:07,600 --> 00:03:09,200 >> Nii varakult nädal sukelduda sisse 60 00:03:09,200 --> 00:03:13,200 Ja nii Breakout, tean, et sa seda teha nii kaua, kui teil on 61 00:03:13,200 --> 00:03:18,230 jaotus kood või oma koodi käimas oma PST4 kataloog. 62 00:03:18,230 --> 00:03:21,680 Tea, et sa võid joosta gdb. / Breakout. 63 00:03:21,680 --> 00:03:23,490 >> See saab avada aken niimoodi. 64 00:03:23,490 --> 00:03:25,530 Annan ennast rohkem ning terminali aknas. 65 00:03:25,530 --> 00:03:27,770 Ja siis ma lähen edasi minna ja teha, see ei ole lihtsalt käivitada. 66 00:03:27,770 --> 00:03:30,690 Ma lähen kõigepealt kehtestada murdepunkt Meenuta, mis võimaldab teil pausi 67 00:03:30,690 --> 00:03:32,500 täitmist konkreetses kohas. 68 00:03:32,500 --> 00:03:35,750 >> Lihtsalt, et hoida asjad lihtsad Ma lähen murda real üks lihtsalt kirjutades 69 00:03:35,750 --> 00:03:37,000 number üks. 70 00:03:37,000 --> 00:03:40,080 71 00:03:40,080 --> 00:03:43,250 Lubage mul tegelikult uuesti avada see aken sest see muutub 72 00:03:43,250 --> 00:03:45,700 natuke väike seal. 73 00:03:45,700 --> 00:03:53,270 Niisiis, mida ma nüüd teen siin kui ma avada oma terminali akna. 74 00:03:53,270 --> 00:03:53,910 Tule, seal läheme. 75 00:03:53,910 --> 00:03:59,850 >> Nüüd, kui ma lähen tagasi dropbox, PST4 ja joosta gdb. / Breakout sisestada teate 76 00:03:59,850 --> 00:04:02,600 Ma lähen murdma seada murdepunkt real üks. 77 00:04:02,600 --> 00:04:04,840 Ja nüüd ma lähen ees ja tüüp joosta. 78 00:04:04,840 --> 00:04:07,370 Ja kui ma seda teen, märkate midagi tundub juhtuda. 79 00:04:07,370 --> 00:04:08,120 >> Ei ole pop üles. 80 00:04:08,120 --> 00:04:09,790 Ei ole graafiline kasutajaliides veel. 81 00:04:09,790 --> 00:04:13,340 Aga see on mõistetav, sest ma olen sõna otseses mõttes real üks minu programmi. 82 00:04:13,340 --> 00:04:17,110 Ja teate, et ma olen kiire edastamise eriti nüüd, et 62, sest kõik 83 00:04:17,110 --> 00:04:20,600 stuff ülaosas see fail on asjad kommentaarid ja konstandid ja 84 00:04:20,600 --> 00:04:22,460 ebahuvitav stuff nüüd. 85 00:04:22,460 --> 00:04:25,840 >> Nüüd ma olen sees peamine, tundub, real 62. 86 00:04:25,840 --> 00:04:27,960 Ja see on vaid jaotus kood, tagasivõtmist. 87 00:04:27,960 --> 00:04:33,810 Kui ma avada see üles minnes samamoodi minu rippmenüüst kasti kataloog sisse PST4, 88 00:04:33,810 --> 00:04:35,450 arvesse breakout.c. 89 00:04:35,450 --> 00:04:40,670 Ja kui ma kerige alla ja alla, ja andke minna ja lülitage 90 00:04:40,670 --> 00:04:44,990 minu rida numbreid. 91 00:04:44,990 --> 00:04:50,300 >> Mida ma näen, kui ma kerige liin 62, on täpselt see joon, mis 92 00:04:50,300 --> 00:04:50,910 oleme peatatud poolt. 93 00:04:50,910 --> 00:04:53,720 Nii et see rida siin, 62, on kus me parasjagu olema. 94 00:04:53,720 --> 00:04:57,470 Nüüd on GDB, kui ma minna ja kirjuta nüüd järgmine, sisesta see läheb 95 00:04:57,470 --> 00:04:58,450 täitma, et liin. 96 00:04:58,450 --> 00:05:00,610 Ja voila, meil niinimetatud g akna. 97 00:05:00,610 --> 00:05:02,800 Kui võõras mida GWindow on, ärge muretsege. 98 00:05:02,800 --> 00:05:05,740 Spec tutvustab teile seda, kui samuti mitmed ülevaadet videod 99 00:05:05,740 --> 00:05:06,830 varjatud spec. 100 00:05:06,830 --> 00:05:08,610 >> Aga nüüd teeme seda veidi põnevamaks. 101 00:05:08,610 --> 00:05:10,960 Lubage mul liikuda see aken üle kõrvale natuke. 102 00:05:10,960 --> 00:05:13,480 Las ma teen akna veidi suurem nii et ma ei näe enam. 103 00:05:13,480 --> 00:05:16,140 >> Ja nüüd lubage mul minna ja teha järgmisena uuesti. 104 00:05:16,140 --> 00:05:17,550 Ja seal on mu tellised. 105 00:05:17,550 --> 00:05:20,490 Kui ma tüüp järgmine kord nüüd näen palli. 106 00:05:20,490 --> 00:05:23,520 Ja kui ma kirjuta järgmine kord nüüd näen mõla. 107 00:05:23,520 --> 00:05:26,690 >> Ja õnneks see gedit ei ole tõesti koostööd, näidates mulle 108 00:05:26,690 --> 00:05:27,660 kõik, mida ma tahan. 109 00:05:27,660 --> 00:05:30,820 Aga nüüd, kui ma järgmine kord, Järgmine kord, ma olen lihtsalt 110 00:05:30,820 --> 00:05:32,260 kinnitati, et mõned muutujad. 111 00:05:32,260 --> 00:05:34,750 Ja ma ei saa trükkida ükskõik need kutid välja. 112 00:05:34,750 --> 00:05:37,170 Prindi tellised, prints elu. 113 00:05:37,170 --> 00:05:39,910 >> Ja nüüd, kui ma jätkuvalt tegema Järgmiseks märkate, et ma tulen 114 00:05:39,910 --> 00:05:40,870 sees, et loop. 115 00:05:40,870 --> 00:05:43,380 Aga kood läheb täita täpselt nii, nagu ma oodata. 116 00:05:43,380 --> 00:05:45,810 Nii et kui ma tabanud seda funktsiooni, oodake jaoks Vajuta, et see saab teha 117 00:05:45,810 --> 00:05:46,830 Ta sõna otseses mõttes, et. 118 00:05:46,830 --> 00:05:48,870 Nii et ma tundus, et on kaotanud kontrolli programmi üle. 119 00:05:48,870 --> 00:05:50,480 >> GDB ei anna mulle veel kiire. 120 00:05:50,480 --> 00:05:51,500 Aga ärge muretsege. 121 00:05:51,500 --> 00:05:53,720 Mine minu mäng, kliki kusagil. 122 00:05:53,720 --> 00:05:56,270 >> Ja voila, nüüd suundub line 86. 123 00:05:56,270 --> 00:05:59,460 Nii et taas, see on hindamatu lõppkokkuvõttes silumiseks probleeme. 124 00:05:59,460 --> 00:06:03,050 Kuna saate sõna otseses mõttes samm teel oma koodi, print asjad ja palju, 125 00:06:03,050 --> 00:06:03,640 palju, palju muud. 126 00:06:03,640 --> 00:06:07,210 Aga nüüd, need vahendid üksi peaks sulle päris palju. 127 00:06:07,210 --> 00:06:10,050 >> Nii et me oleme loomulikult võttes pilk kell Graphics nüüd, äkki. 128 00:06:10,050 --> 00:06:12,350 Ja nüüd meie maailm muutub vähe põnevamaks. 129 00:06:12,350 --> 00:06:15,680 Ja sa tead, võib-olla mõnest videod veebis, et meil on need 130 00:06:15,680 --> 00:06:18,280 lühikesed püksid, mida olen jälginud osana probleem komplekti. 131 00:06:18,280 --> 00:06:20,460 >> Ja nad on tulistati sihilikult, valgel taustal. 132 00:06:20,460 --> 00:06:23,380 Ja mõned neist on õpetamise Fellows joonistus mõned teksti 133 00:06:23,380 --> 00:06:25,490 ekraan, mis on dubleerivad küljel neid. 134 00:06:25,490 --> 00:06:27,760 Aga muidugi, see ei ole kõik, et huvitav reaalses maailmas. 135 00:06:27,760 --> 00:06:30,520 See on lihtsalt saalis koos suur valge ekraan ja taustaks. 136 00:06:30,520 --> 00:06:33,330 Ja meie hämmastav tootmise meeskond sorteeri ning teeb kõik ilus 137 00:06:33,330 --> 00:06:36,620 pärast tegelikult koristuse läbi või kattes midagi 138 00:06:36,620 --> 00:06:37,840 me teeme või ei taha. 139 00:06:37,840 --> 00:06:41,560 >> Nüüd lihtsalt motiveerida sel nädalal ja tõesti, kus võid minna, lõpuks, 140 00:06:41,560 --> 00:06:42,560 koos arvutiteadus. 141 00:06:42,560 --> 00:06:44,260 Mitte ainult pärast probleemi, neli. 142 00:06:44,260 --> 00:06:48,240 Aga pärast teise kursuse või kogu Õppekava see on hämmastav, mida saate 143 00:06:48,240 --> 00:06:51,090 teha nendel päevadel poolest graafika eriti. 144 00:06:51,090 --> 00:06:53,440 >> Mõned võite näinud seda voolab ümber online. 145 00:06:53,440 --> 00:06:56,240 Aga ma mõtlesin, et ma näitan sulle, vaid paar minutit, pilguheit mida 146 00:06:56,240 --> 00:07:01,890 infotehnoloogia ja mida CGI, arvutigraafika saab teha nendel päevadel 147 00:07:01,890 --> 00:07:04,510 tuttava laulu ja võib-olla filmis. 148 00:07:04,510 --> 00:07:05,760 >> [MUSIC - LANA DEL RAY, "Noor ja ilus] 149 00:07:05,760 --> 00:10:50,270 150 00:10:50,270 --> 00:10:52,470 >> SPEAKER 1: See on lihtsalt natuke hämmastav, ehk kuidas 151 00:10:52,470 --> 00:10:52,857 kõikjal - 152 00:10:52,857 --> 00:10:57,040 >> [APLAUS] 153 00:10:57,040 --> 00:10:59,230 >> SPEAKER 1: Ma lihtsalt alla laadinud. 154 00:10:59,230 --> 00:11:02,920 Aga see on tõesti hämmastav, ma arvan, just kuidas kõikjal tarkvara ja kood ning 155 00:11:02,920 --> 00:11:04,230 vahendeid, nagu see tegelikult on. 156 00:11:04,230 --> 00:11:07,685 Nii et maitse suunas kus saab minna. 157 00:11:07,685 --> 00:11:10,620 Oh, ei rohkem Appliance täna. 158 00:11:10,620 --> 00:11:14,640 Noh, see on tegelikult traagiline ajastus antud hetkel ma lihtsalt püüdnud teha. 159 00:11:14,640 --> 00:11:18,670 >> Olgu, lähme käivitada Fusion uuesti. 160 00:11:18,670 --> 00:11:20,800 Tuleta mulle hiljem meelde. 161 00:11:20,800 --> 00:11:24,190 Olgu, ja sa oleks saanud emaili kõrvale kui sa ei saada 162 00:11:24,190 --> 00:11:25,460 teate sellist. 163 00:11:25,460 --> 00:11:29,940 Olgu, meelde tuletada, et eelmisel nädalal hakkasime Tõmmake see 164 00:11:29,940 --> 00:11:31,380 hiljem tuntud kui string. 165 00:11:31,380 --> 00:11:34,700 >> string meenutab andmetüüp, mis on deklareeritud CS50 raamatukogu. 166 00:11:34,700 --> 00:11:37,740 Ja see osa koolitusest veljed mis hakkab nüüd startida. 167 00:11:37,740 --> 00:11:41,280 See oli kasulik mõiste varakult. 168 00:11:41,280 --> 00:11:43,750 Aga nüüd see läheb aina rohkem huvitav ja võimsam 169 00:11:43,750 --> 00:11:48,330 tegelikult näha, et all kapuuts, string on just see, kas me ütlesime? 170 00:11:48,330 --> 00:11:50,500 >> Jah, nii see on nn char *. 171 00:11:50,500 --> 00:11:53,860 Ja * seal tähendab, et seal on mingi aadress kaasatud. 172 00:11:53,860 --> 00:11:58,690 Ja kui te ütlete, char * sa tähenda ainult muutuja, mille andmetüüp on 173 00:11:58,690 --> 00:11:59,290 pointer nüüd. 174 00:11:59,290 --> 00:12:01,770 Asjaolu, et seal on täht seal tähendab lihtsalt, et teil on, mis kuulutab 175 00:12:01,770 --> 00:12:03,020 niinimetatud pointer. 176 00:12:03,020 --> 00:12:06,220 Ja et osuti läheb ilmselt salvestada aadressi, on 177 00:12:06,220 --> 00:12:07,810 Loomulikult char. 178 00:12:07,810 --> 00:12:08,960 >> Nüüd miks seda mõtet? 179 00:12:08,960 --> 00:12:11,200 Noh, mis on string all kapuuts? 180 00:12:11,200 --> 00:12:15,130 Noh, juba mõnda aega oleme rääkinud et string all kapuuts 181 00:12:15,130 --> 00:12:18,460 lihtsalt h-e-l-l-o, näiteks. 182 00:12:18,460 --> 00:12:21,585 >> Aga oleme rääkinud seda on sisuliselt massiivi. 183 00:12:21,585 --> 00:12:25,410 Ja array siis vaadata veidi rohkem nagu see, kus iga 184 00:12:25,410 --> 00:12:26,460 asumist hammustada. 185 00:12:26,460 --> 00:12:28,710 Ja siis me oleme öelnud, et seal on midagi erilist siia tagasi, 186 00:12:28,710 --> 00:12:31,270 Kenoviiva 0 või null terminaator. 187 00:12:31,270 --> 00:12:35,230 >> Nii et kõik see aeg, see siin on string. 188 00:12:35,230 --> 00:12:38,320 Aga tõesti, string tegelikult aadress. 189 00:12:38,320 --> 00:12:43,210 Ja aadressid, nagu me näeme, on sageli prefiksiga 0x kokkuleppeliselt. 190 00:12:43,210 --> 00:12:44,540 Mis 0x tähistamiseks? 191 00:12:44,540 --> 00:12:45,970 Kas keegi teab? 192 00:12:45,970 --> 00:12:47,320 >> Nii et see tähendab lihtsalt, kuueteistkümnendsüsteemis. 193 00:12:47,320 --> 00:12:52,360 Nii võite meenutada, tegelikult PST 1, ma usun, üks soojenduseks 194 00:12:52,360 --> 00:12:55,740 küsimused tegelikult küsiti heksadesimaalilukuja lisaks 195 00:12:55,740 --> 00:12:57,100 binaarsed ja kohaga. 196 00:12:57,100 --> 00:13:00,460 Ja motivatsioon on see, et koos kuueteistkümnendsüsteemis olete 16 197 00:13:00,460 --> 00:13:01,770 numbrit teie käsutuses. 198 00:13:01,770 --> 00:13:07,900 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, millele järgneb poolt, b, c, d, e, f. 199 00:13:07,900 --> 00:13:10,430 >> Ja kui loete kõik need üles, sa saad kokku 16. 200 00:13:10,430 --> 00:13:13,200 Nii et see on erinevalt kohaga, kus meil on 10 201 00:13:13,200 --> 00:13:14,690 numbrit, 0 kuni üheksa. 202 00:13:14,690 --> 00:13:17,750 See on erinevalt binaarne kus meil on lihtsalt 0 ja 1 vahel. 203 00:13:17,750 --> 00:13:21,450 >> Aga lõpus päeval saad lihtsalt esindavad samu numbreid, kuid 204 00:13:21,450 --> 00:13:22,500 mõnevõrra erinevalt. 205 00:13:22,500 --> 00:13:25,840 Ja kuueteistkümnendsüsteemis on levinud, sest nagu selgub - ja me näeme seda 206 00:13:25,840 --> 00:13:28,790 hiljem muidugi - isegi kui me veebi programmeerimine kontekstis 207 00:13:28,790 --> 00:13:32,100 HTML ja värvikoodidega, kuueteistkümnendsüsteemis on kena. 208 00:13:32,100 --> 00:13:36,390 Sest iga numbri, selgub, esindab neli bitti suurepäraselt. 209 00:13:36,390 --> 00:13:39,280 Nii see lihtsalt selline read kenasti kui me lõpuks näha. 210 00:13:39,280 --> 00:13:44,720 Nii et see võib olla Ox123 või midagi sellist, mis tähistab aadress 123 211 00:13:44,720 --> 00:13:47,050 Sisimas minu arvuti mällu. 212 00:13:47,050 --> 00:13:50,600 >> Aga muidugi, mõned probleemid sest selle aluseks olevad 213 00:13:50,600 --> 00:13:51,520 rakendamist. 214 00:13:51,520 --> 00:13:55,930 Ja meenutada, et võtsin torkehaav at rakendatakse funktsiooni niimoodi - 215 00:13:55,930 --> 00:14:00,260 võrrelda kriips 0 dot c eelmisel nädalal, et kuigi see nägi välja nagu see oli 216 00:14:00,260 --> 00:14:04,270 õige, see lihtsalt ei saa võrrelda kaks stringi õigesti. 217 00:14:04,270 --> 00:14:07,470 >> Olen visata peamine, ja ma olen visanud ära kommentaarid lihtsalt keskenduda 218 00:14:07,470 --> 00:14:08,970 kood, mis on huvi siin. 219 00:14:08,970 --> 00:14:10,660 Ja see on punane, sest see on lollakas. 220 00:14:10,660 --> 00:14:11,670 Mis põhjusel? 221 00:14:11,670 --> 00:14:15,890 >> Noh, ülaosas seal kui ma kuulutatud string, mis tegelikult toimub 222 00:14:15,890 --> 00:14:17,260 all kapuuts? 223 00:14:17,260 --> 00:14:19,530 Noh, lase mul minna üle sõeluda siin ja juhtida seda. 224 00:14:19,530 --> 00:14:23,230 Nii et ma kuulutatud jällegi string s getString. 225 00:14:23,230 --> 00:14:26,640 >> Ma lähen edasi minna nüüd ja juhtida s, mida see tegelikult on. 226 00:14:26,640 --> 00:14:28,590 See saab olema ruut siin. 227 00:14:28,590 --> 00:14:30,490 Ja ma väita, et see on 32 bitti. 228 00:14:30,490 --> 00:14:32,890 Vähemalt see tavaliselt on, vähemalt CS50 229 00:14:32,890 --> 00:14:34,520 Seadme palju arvuteid. 230 00:14:34,520 --> 00:14:35,980 Ma kutsun seda s. 231 00:14:35,980 --> 00:14:39,070 >> Aga nüüd meelde tuletada, et me nimetatakse getString. 232 00:14:39,070 --> 00:14:41,430 Nii getString naaseb, muidugi string. 233 00:14:41,430 --> 00:14:45,790 Kui kasutaja liigid h-e-l-l-o sisestada string Tema saab tagastada. 234 00:14:45,790 --> 00:14:51,010 Ja see string, kui me just ütles, lõpeb kuskil arvuti mällu 235 00:14:51,010 --> 00:14:53,240 längkriipsuga 0 lõpus. 236 00:14:53,240 --> 00:14:56,650 Ma joonistan selle nagu massiivi - või külgnevas ploki tähtedega - 237 00:14:56,650 --> 00:14:58,330 et see tegelikult on. 238 00:14:58,330 --> 00:15:01,790 >> Ja nüüd, mis on getString tegelikult tagasi? 239 00:15:01,790 --> 00:15:04,340 Mis on getString on tagasi kõik see aeg? 240 00:15:04,340 --> 00:15:07,520 Noh, ütleme, et nädala jooksul enne, ta tagastab stringi. 241 00:15:07,520 --> 00:15:10,250 Aga tehniliselt, mida teeb GetString tagasi ilmselt? 242 00:15:10,250 --> 00:15:11,610 >> Publik: aadress. 243 00:15:11,610 --> 00:15:12,600 >> SPEAKER 1: aadress. 244 00:15:12,600 --> 00:15:16,630 Täpsemalt siis tagastab aadress Kõige esimene hammustus, mis see on. 245 00:15:16,630 --> 00:15:18,830 Ma muudkui kasutades üks, kaks, kolm sest see on mugav. 246 00:15:18,830 --> 00:15:21,380 >> Ta naaseb aadressi esimene märgi string. 247 00:15:21,380 --> 00:15:23,510 Ja me ütles eelmisel nädalal, et mis on piisav. 248 00:15:23,510 --> 00:15:26,710 Kuna meil on alati võimalik aru saada, kus stringi lõppu lihtsalt 249 00:15:26,710 --> 00:15:30,150 iterating üle, võib-olla koos jaoks loop või samas loop või midagi sellist 250 00:15:30,150 --> 00:15:34,990 et lihtsalt otsin "Kenoviiva 0", eriline valvur iseloomu. 251 00:15:34,990 --> 00:15:37,220 >> Ja siis me teame, et string juhtub olema pikkus - 252 00:15:37,220 --> 00:15:37,980 sel juhul - 253 00:15:37,980 --> 00:15:38,670 viis. 254 00:15:38,670 --> 00:15:43,800 Nii tehniliselt mida getString ei on ta naaseb Ox123 käesolevas asjas. 255 00:15:43,800 --> 00:15:53,670 Ja tehniliselt mis siis juhtub, on et me salvestada, sees s, Ox123. 256 00:15:53,670 --> 00:15:56,460 Lõpus päeval, kuigi see on uus mõiste, viiteid, et nad on 257 00:15:56,460 --> 00:15:57,350 lihtsalt muutujad. 258 00:15:57,350 --> 00:16:00,440 Aga need juhtuvad salvestada bitti, mis kollektiivselt esindama aadress. 259 00:16:00,440 --> 00:16:03,700 Nii tehniliselt kõik need saab salvestatud s on Ox123. 260 00:16:03,700 --> 00:16:04,680 >> Aga me inimestel - 261 00:16:04,680 --> 00:16:06,020 sealhulgas täna edasi - 262 00:16:06,020 --> 00:16:09,290 tõesti ei kavatse hooli, tavaliselt, milline tegelik aadress on 263 00:16:09,290 --> 00:16:10,520 mõne tüki mälu. 264 00:16:10,520 --> 00:16:14,040 See on lihtsalt madal üksikasjalikult olema intellektuaalselt huvitav. 265 00:16:14,040 --> 00:16:15,440 Nii et ma lähen tagasi võtta seda. 266 00:16:15,440 --> 00:16:19,810 Ja selle asemel, rohkem kõrge tase, lihtsalt öelda, et kui me räägime viiteid 267 00:16:19,810 --> 00:16:22,170 Ma lihtsalt teha rohkem kasutajasõbralik nool, mis annab edasi 268 00:16:22,170 --> 00:16:26,060 Sama idee ja teesid ära andmed, mida tegelikult 269 00:16:26,060 --> 00:16:27,700 aluseks aadress. 270 00:16:27,700 --> 00:16:33,290 >> Nüüd kui me läheme tagasi kood, mida juhtus eelmisel nädalal, kui meil on string t 271 00:16:33,290 --> 00:16:34,510 võrdub getString? 272 00:16:34,510 --> 00:16:38,630 Noh, kui ma jälle kirjuta tere seekord ma lähen 273 00:16:38,630 --> 00:16:40,460 teise tüki mälu. 274 00:16:40,460 --> 00:16:44,820 h-e-l-l-o Kenoviiva 0. 275 00:16:44,820 --> 00:16:48,320 >> Aga kuna ma helistasin getString teine ​​kord - 276 00:16:48,320 --> 00:16:51,100 ja ma tean, et see vaatlemisel lähtekoodi getString - isegi 277 00:16:51,100 --> 00:16:54,350 kuigi see on kokkusattumus, et Tema oli kirjutada kaks korda, getString ei ole 278 00:16:54,350 --> 00:16:55,890 läheb püüdma optimeerida ja olla tark. 279 00:16:55,890 --> 00:16:58,550 See on lihtsalt hakka teise tüki mälu arvuti, mis on 280 00:16:58,550 --> 00:16:59,640 saab olema teine ​​aadress. 281 00:16:59,640 --> 00:17:02,330 Olgem omavoliliselt öelda 456. 282 00:17:02,330 --> 00:17:04,079 >> Ja siis see läheb tagasi? 283 00:17:04,079 --> 00:17:08,030 See läheb tagasi 456 ja hoidke seda t. 284 00:17:08,030 --> 00:17:12,010 Mis siis tegelikult toimub, on Vasakul pool on mul teine ​​patakas 285 00:17:12,010 --> 00:17:14,260 mälu, 32 bitti tavaliselt. 286 00:17:14,260 --> 00:17:16,720 Ja seal on minemas Ox456. 287 00:17:16,720 --> 00:17:20,140 Aga jälle, ma ei ole huvitatud nende eriti numbreid enam. 288 00:17:20,140 --> 00:17:23,069 Ma lihtsalt abstraktselt joonistada nagu nool. 289 00:17:23,069 --> 00:17:25,202 >> Nii et see on nüüd uus selgitus. 290 00:17:25,202 --> 00:17:28,735 Aga see on täpselt sama mõte, mis on juhtunud kogu selle aja. 291 00:17:28,735 --> 00:17:33,150 Ja nii põhjus siis, et see esimene versioon võrdlusrežiim oli lollakas 292 00:17:33,150 --> 00:17:34,480 viimane nädal on miks? 293 00:17:34,480 --> 00:17:38,000 Kui te seda teete, kui s võrdub võrdub t mida sa tõeliselt 294 00:17:38,000 --> 00:17:40,550 all kapuuts võrrelda? 295 00:17:40,550 --> 00:17:41,910 >> Sa võrdled aadresse. 296 00:17:41,910 --> 00:17:47,950 Ja just intuitiivselt selge, Ox123 ei kavatse võrdne Ox456. 297 00:17:47,950 --> 00:17:49,380 Need numbrid, need bitti on lihtsalt erinevad. 298 00:17:49,380 --> 00:17:53,220 >> Ja nii järjepidevalt, eelmisel nädalal ta ütles kirjutad erinevaid asju, isegi kui 299 00:17:53,220 --> 00:17:55,360 sõnad olid sõna-sõnalt sama. 300 00:17:55,360 --> 00:17:58,770 Nii et me määrata see. 301 00:17:58,770 --> 00:18:00,120 In üldarusaadavat mõttes, mis oli määrata? 302 00:18:00,120 --> 00:18:02,110 >> Publik: Kasutage funktsiooni. 303 00:18:02,110 --> 00:18:02,870 >> SPEAKER 1: kasutage funktsiooni. 304 00:18:02,870 --> 00:18:05,190 Või tähed on kindlasti kaasatud kuid kasutada funktsioon teha mida? 305 00:18:05,190 --> 00:18:05,962 >> Publik: Et võrrelda stringe. 306 00:18:05,962 --> 00:18:07,390 >> SPEAKER 1: Kui soovite võrrelda stringe. 307 00:18:07,390 --> 00:18:11,030 Seega põhiprobleem oli siin et ma just arvestades 308 00:18:11,030 --> 00:18:15,870 kvaliteeti stringid kindlaks võrreldes nende aadressid. 309 00:18:15,870 --> 00:18:18,540 Ja ilmselt see on lihtsalt loll nüüd kord saate aru, mis toimub 310 00:18:18,540 --> 00:18:19,510 all kapuuts. 311 00:18:19,510 --> 00:18:23,270 Et tõeliselt võrrelda stringe, kas nad võrdsed nii, et inimeste 312 00:18:23,270 --> 00:18:26,680 kaaluks kaks stringid on võrdsed meil on vaja võrrelda neid tegelane 313 00:18:26,680 --> 00:18:28,070 tegelane iseloomu. 314 00:18:28,070 --> 00:18:30,020 >> Nüüd ma oleks võinud teha see väga igavalt. 315 00:18:30,020 --> 00:18:32,240 Aga lähedalt, et me oleme kasutades jaoks silmus. 316 00:18:32,240 --> 00:18:36,050 Ja lihtsalt võrrelda s sulg i vastu t sulg i. 317 00:18:36,050 --> 00:18:39,590 s sulg i pluss 1 vastu t sulg i pluss 1, ja nii edasi, sees 318 00:18:39,590 --> 00:18:40,580 mingi loop. 319 00:18:40,580 --> 00:18:44,950 Ja kui ma kohapeal kõik kaks märki, mis erinevad või kui ma mõistan, et ooh, s 320 00:18:44,950 --> 00:18:48,410 lühem kui t või enam kui t Võin kohe öelda vale, 321 00:18:48,410 --> 00:18:49,390 nad ei ole sama. 322 00:18:49,390 --> 00:18:55,370 >> Aga kui ma saan läbi s ja t ning öelda sama, sama, samasugune, sama, sama, lõpuks 323 00:18:55,370 --> 00:18:58,520 kumbagi, ma ei saa öelda, Tõsi, nad on võrdsed. 324 00:18:58,520 --> 00:19:01,040 Noh, õnneks aastat tagasi keegi kirjutas, et kood meile. 325 00:19:01,040 --> 00:19:03,790 >> Ja nad kutsusid seda StrComp keelpilliorkestrile võrrelda. 326 00:19:03,790 --> 00:19:11,900 Ja kuigi see on natuke counter intuitiivne, StrComp 0, kui need 327 00:19:11,900 --> 00:19:14,520 kaks stringid, s ja t on samad. 328 00:19:14,520 --> 00:19:18,090 Aga ta naaseb negatiivne väärtus, kui s peaks tulema enne t tähestikuliselt või 329 00:19:18,090 --> 00:19:20,610 positiivne väärtus, kui see peaks tulema pärast t tähestikulises järjekorras. 330 00:19:20,610 --> 00:19:24,030 >> Nii et kui sa kunagi tahad sortida midagi, selgub, et StrComp on kasulik. 331 00:19:24,030 --> 00:19:26,660 Sest see ei ole lihtsalt öelda, jah või ei, võrdsed või mitte. 332 00:19:26,660 --> 00:19:30,440 See annab teile tunde tellimine meeldib sõnastik väest. 333 00:19:30,440 --> 00:19:33,770 Nii StrComp, s koma t võrdub võrdub 0 tähendab, et 334 00:19:33,770 --> 00:19:35,200 stringid on tõesti võrdne. 335 00:19:35,200 --> 00:19:38,680 Sest kes iganes kirjutas selle funktsiooni aastat tagasi ilmselt kasutada silmus 336 00:19:38,680 --> 00:19:42,840 või samas loop või midagi sellist integreerida üle tähemärki uuesti 337 00:19:42,840 --> 00:19:45,270 ja uuesti ja uuesti. 338 00:19:45,270 --> 00:19:47,300 >> Kuid probleem tekkis, siin. 339 00:19:47,300 --> 00:19:48,750 See oli copy0.c. 340 00:19:48,750 --> 00:19:51,680 Ja kaks punast on kuna see on vigane. 341 00:19:51,680 --> 00:19:52,800 Ja mida me siin teeme? 342 00:19:52,800 --> 00:19:54,310 Noh, esiteks ma helistasin getString. 343 00:19:54,310 --> 00:19:56,255 Ja ma hoida tagasi väärtuse s. 344 00:19:56,255 --> 00:20:00,260 Nii et on päris palju sama kui see top osa pildist. 345 00:20:00,260 --> 00:20:01,490 >> Aga mis saab pärast seda? 346 00:20:01,490 --> 00:20:04,980 Noh, lubage mul minna ja vabaneda on terve hunnik seda. 347 00:20:04,980 --> 00:20:09,650 Me kerida ajas, kus me lihtsalt on s, mis on nüüd kooskõlas 348 00:20:09,650 --> 00:20:10,940 line üks seal. 349 00:20:10,940 --> 00:20:11,400 >> Ma saan vaadata. 350 00:20:11,400 --> 00:20:13,450 Kui s võrdub võrdub 0. 351 00:20:13,450 --> 00:20:18,670 Nüüd kiire pool tähele, kui võib getString tagasi 0? 352 00:20:18,670 --> 00:20:19,580 Seal ei ole piisavalt mälu. 353 00:20:19,580 --> 00:20:19,880 Õigus? 354 00:20:19,880 --> 00:20:22,310 >> See on haruldane, et see juhtub, kindlasti on arvuti, mis on 355 00:20:22,310 --> 00:20:24,740 sai sadu megs või isegi kontserti RAM. 356 00:20:24,740 --> 00:20:27,080 Aga see võib teoreetiliselt tagasi 0, eriti kui 357 00:20:27,080 --> 00:20:28,080 kasutaja ei tee koostööd. 358 00:20:28,080 --> 00:20:31,640 On viise, kuidas teeselda nagu sa ei ole ümbritsevat midagi ja trikk 359 00:20:31,640 --> 00:20:34,100 GetString sisse tagasi 0 tõhusalt. 360 00:20:34,100 --> 00:20:35,470 >> Nii see läheb, et kontrollida seda. 361 00:20:35,470 --> 00:20:39,430 Sest kui keegi teist on hakanud saada, juba killustatust rikked - 362 00:20:39,430 --> 00:20:42,280 oli ilmselt allikas mõned pettumust - 363 00:20:42,280 --> 00:20:46,150 need on peaaegu alati tingitud mälu seotud viga. 364 00:20:46,150 --> 00:20:50,440 Kuidagi sa sassis seoses pointer, isegi kui sa ei saa aru, 365 00:20:50,440 --> 00:20:51,530 oli osuti. 366 00:20:51,530 --> 00:20:55,260 Nii et sa oleks võinud esile killustatust rikked juba nädal üks kasutades 367 00:20:55,260 --> 00:21:02,100 midagi silmus või kui loop ja massiivi läheb liiga kaugele 368 00:21:02,100 --> 00:21:05,900 Viimase piire mõned massiivi sa kuulutatud nädal kaks 369 00:21:05,900 --> 00:21:06,690 eriti. 370 00:21:06,690 --> 00:21:09,220 >> Te olete teinud seda isegi probleem seatud neli koos Breakout. 371 00:21:09,220 --> 00:21:12,910 Kuigi sa ilmselt ei ole näinud ühtegi tähte jaotus kood 372 00:21:12,910 --> 00:21:17,410 Breakout, selgub, et need GRect ja GOval ja muud sellised asjad, 373 00:21:17,410 --> 00:21:19,650 need on tegelikult osuti all kapuuts. 374 00:21:19,650 --> 00:21:23,430 >> Aga Stanford, nagu meie, justkui varjab et detail vähemalt raamatukogud 375 00:21:23,430 --> 00:21:26,540 eesmärkidel, palju nagu meie keelpilliorkestrile ja char *. 376 00:21:26,540 --> 00:21:30,060 Aga GRect ja GOval ja kõik need See, mida te olete või kasutad 377 00:21:30,060 --> 00:21:32,630 Sel nädalal on lõpuks mälu aadresse. 378 00:21:32,630 --> 00:21:33,650 Sa lihtsalt ei tea seda. 379 00:21:33,650 --> 00:21:37,240 >> Seega ei ole üllatav, siis võib-olla et sa võiksid komistada mõned 380 00:21:37,240 --> 00:21:38,580 killustatust viga. 381 00:21:38,580 --> 00:21:41,290 Aga mis on huvitav siin nüüd, kui pärast me kontrollida 0 teeme 382 00:21:41,290 --> 00:21:43,460 string t saab s. 383 00:21:43,460 --> 00:21:44,690 Noh, las ma kuulutada t. 384 00:21:44,690 --> 00:21:47,730 Ma joonistan selle nii kandiline, 32 bitti, nimetame seda t. 385 00:21:47,730 --> 00:21:49,740 Ja siis ma lähen tegema, saab s. 386 00:21:49,740 --> 00:21:51,130 >> Noh, mida see tähendab? 387 00:21:51,130 --> 00:21:53,280 Noh, see on natuke raske mõelda umbes see pilt tark. 388 00:21:53,280 --> 00:21:55,025 Aga mõtleme mis seal sees on x? 389 00:21:55,025 --> 00:21:59,430 Mis on sõna otseses mõttes sees muutuja? 390 00:21:59,430 --> 00:22:01,500 Väärtus Ox123. 391 00:22:01,500 --> 00:22:05,815 >> Nii et kui ma ütlen string t saab s, et lihtsalt sõnalt tähendab võtta number 392 00:22:05,815 --> 00:22:10,070 s, mis on Ox123 ja pane see Ox123. 393 00:22:10,070 --> 00:22:13,740 Või piltlikult, kui ma mingi abstraktne eemale detail see on 394 00:22:13,740 --> 00:22:16,600 mõju sõna otseses mõttes teed see samuti. 395 00:22:16,600 --> 00:22:22,110 >> Nüüd, arvan, et tagasi eelmisel nädalal, kui lähtusime kapitalistlikust T. I 396 00:22:22,110 --> 00:22:23,800 tegin T sulg 0. 397 00:22:23,800 --> 00:22:27,150 Noh, T sulg 0, kuigi see on pointer, saate seda ravida küll 398 00:22:27,150 --> 00:22:29,220 see on massiiv, nelinurkse sulg märke. 399 00:22:29,220 --> 00:22:31,550 >> Nii et kui on T sulg 0? 400 00:22:31,550 --> 00:22:32,990 Noh, see on h. 401 00:22:32,990 --> 00:22:36,800 Ja nii, kui me kasutame, et rida koodi, kaks ülemist, mis on, et c type.h 402 00:22:36,800 --> 00:22:38,460 header fail, see on kui see on deklareeritud. 403 00:22:38,460 --> 00:22:44,410 Sa ära see H. Kuid Muidugi, see on sama täpne h, mis on 404 00:22:44,410 --> 00:22:46,540 sees s, nii rääkida. 405 00:22:46,540 --> 00:22:51,930 Ja nüüd, kui olete muutnud või kapitaliseeritud nii originaal ja 406 00:22:51,930 --> 00:22:53,120 niinimetatud koopia. 407 00:22:53,120 --> 00:22:56,620 Sest sa ei saa teha koopia nii, et inimene tahaks seda. 408 00:22:56,620 --> 00:22:59,710 >> Mis siis oli fix siin aastal copy1.c eelmisel nädalal? 409 00:22:59,710 --> 00:23:03,070 410 00:23:03,070 --> 00:23:05,580 Funktsioonid, et me saaksime tegelikult kopeerida string. 411 00:23:05,580 --> 00:23:08,700 Ja põhimõtteliselt, mida me vajame teha selleks, et kopeerida string? 412 00:23:08,700 --> 00:23:12,070 >> Noh, see roheline versioon siin ma olen teen seda üsna madalal tasemel. 413 00:23:12,070 --> 00:23:14,260 Seal on tegelikult funktsioonid nad võiksid aidata. 414 00:23:14,260 --> 00:23:17,710 Kuid kõige elementaarsem üks, ja kõige tuttav, vähemalt, varsti 415 00:23:17,710 --> 00:23:19,600 meile tuttavad, on järgmine - 416 00:23:19,600 --> 00:23:21,910 nii et üks on esimene rida koodi roheline nüüd. 417 00:23:21,910 --> 00:23:23,970 >> Ma lihtsalt kirjutasin s kui char *. 418 00:23:23,970 --> 00:23:25,250 Ei ole funktsionaalne vahe seal. 419 00:23:25,250 --> 00:23:28,790 Ma just viskasin ära CS50 raamatukogu ja Ma kutsun seda, mis see on, char *. 420 00:23:28,790 --> 00:23:31,640 >> Nüüd dot, dot, dot, sest seal oli mõned vigade kontrolli, et see pole 421 00:23:31,640 --> 00:23:33,200 huvitav rääkida uuesti. 422 00:23:33,200 --> 00:23:34,710 Nüüd t deklareeritakse. 423 00:23:34,710 --> 00:23:35,780 See on ka char *. 424 00:23:35,780 --> 00:23:38,280 Nii et ma joonistasin natuke ruudu ekraan nagu enne. 425 00:23:38,280 --> 00:23:41,870 >> Aga paremal servas, malloc, me öelda, on mälu eraldada. 426 00:23:41,870 --> 00:23:44,130 Nii eraldada mingi tüki mälu. 427 00:23:44,130 --> 00:23:48,830 Ja kui palju baite me tegelikult tahan jagada, see tundub? 428 00:23:48,830 --> 00:23:50,340 >> Noh, string pikkusega s. 429 00:23:50,340 --> 00:23:52,310 Nii et kui see on Tema see on saab olema viis. 430 00:23:52,310 --> 00:23:53,950 Me ütleme h-e-l-l-o. 431 00:23:53,950 --> 00:23:55,090 Nii viis baiti. 432 00:23:55,090 --> 00:23:57,960 >> Aga siis pluss 1, miks 1? 433 00:23:57,960 --> 00:23:58,830 0 iseloomu. 434 00:23:58,830 --> 00:24:03,640 Kui me ei jätaks seda meest me võib kogemata tekitada olukorra, 435 00:24:03,640 --> 00:24:05,600 kui string on h-e-l-l-o. 436 00:24:05,600 --> 00:24:08,470 Ja siis järgmine kord getString on kutsutud ja ma kirjutada, näiteks, 437 00:24:08,470 --> 00:24:14,020 David, D-a-v-i-d, arvuti läheb arvan, et s on tegelikult 438 00:24:14,020 --> 00:24:18,900 h-e-l-l-o-d-a-v-i-d, sest seal on ei murda vahel need sõnad. 439 00:24:18,900 --> 00:24:19,810 >> Seega on meil vaja, et murda. 440 00:24:19,810 --> 00:24:20,720 Nii et me ei taha, et viis. 441 00:24:20,720 --> 00:24:22,100 Tahame kuus baiti. 442 00:24:22,100 --> 00:24:23,110 >> Ja bytes ma ütlen. 443 00:24:23,110 --> 00:24:25,220 Aga see on tõesti aeg suurus char. 444 00:24:25,220 --> 00:24:28,040 Tehniliselt char on peaaegu alati ühe baidi. 445 00:24:28,040 --> 00:24:31,030 >> Aga et meie kood kaasaskantav, nii rääkida, nii et see töötab 446 00:24:31,030 --> 00:24:33,750 erinevates arvutites kuigi need võivad olla mõnevõrra erinev all 447 00:24:33,750 --> 00:24:36,590 kapuuts, ma lähen üldiselt öelda suurus char nii et 448 00:24:36,590 --> 00:24:37,660 minu kood alati tööd. 449 00:24:37,660 --> 00:24:40,610 Ja ma ei pea kompileeri see lihtsalt sest ma saan uuendada oma arvuti või kasutada 450 00:24:40,610 --> 00:24:42,140 mõned erinevad platvormi. 451 00:24:42,140 --> 00:24:45,300 >> Nii et ma sain 6 korda suurem char, mis juhtub olema 1. 452 00:24:45,300 --> 00:24:47,440 Nii et see tähendab malloc võiks anna mulle kuus baiti. 453 00:24:47,440 --> 00:24:49,140 Mis on see, et tegelikult teeb? 454 00:24:49,140 --> 00:24:52,810 Noh, las ma rulli tagasi ajas siin et kui meil on lugu. 455 00:24:52,810 --> 00:24:57,620 >> Nii et kui ma lähen tagasi siin, ma kuulutatud char * nimetatakse t. 456 00:24:57,620 --> 00:25:00,280 Olen nüüdsest malloc kuus baiti. 457 00:25:00,280 --> 00:25:06,400 Ja nüüd ma lähen juhtida neid kuus bytes nagu massiivi varem. 458 00:25:06,400 --> 00:25:10,570 Aga ma tegelikult ei tea, mis on sees see massiiv. 459 00:25:10,570 --> 00:25:14,640 >> Kui teil mälu eraldada selgub, et sa ei saa usaldada, et seal on mõned 460 00:25:14,640 --> 00:25:15,810 teadaolev väärtus on. 461 00:25:15,810 --> 00:25:18,400 Ta oleks võinud kasutada midagi veel mõned muud ülesanded, mõned muud 462 00:25:18,400 --> 00:25:19,630 rida koodi, mis sa kirjutasid. 463 00:25:19,630 --> 00:25:22,870 Nii me tavaliselt nimetame neid prügi väärtused ja juhtida neid, võib-olla, kui 464 00:25:22,870 --> 00:25:26,170 küsimärke, vaid viitab sellele, et me ei tea, mis see tegelikult on. 465 00:25:26,170 --> 00:25:30,390 Ja see ei ole suur asi, nii kaua, kui me on piisavalt targad, et kirjutada need 466 00:25:30,390 --> 00:25:34,550 prügi väärtused numbrite või tähemärki, et me hoolime. 467 00:25:34,550 --> 00:25:36,340 >> Nii et kui see, mida ma teen? 468 00:25:36,340 --> 00:25:38,670 Noh, minu rida koodi Järgmine, mul on neli. 469 00:25:38,670 --> 00:25:41,350 int i saada 0, n saab string pikkusega s. 470 00:25:41,350 --> 00:25:42,750 Nii tuttav jaoks silmus. 471 00:25:42,750 --> 00:25:45,875 Mul on väiksem või võrdne n, mis tavaliselt on suurem. 472 00:25:45,875 --> 00:25:47,500 >> Kuid seekord on see tahtlik. 473 00:25:47,500 --> 00:25:51,890 I + +, ja siis ma lihtsalt teha t sulg i saab s. 474 00:25:51,890 --> 00:25:56,320 Sest minu pilt näeb välja selline kell Sel hetkel, salvestada t 475 00:25:56,320 --> 00:25:59,530 aadress, et juhuslik tüki mälu kelle väärtused on teada. 476 00:25:59,530 --> 00:26:03,030 Aga niipea, kui ma t sulg 0, mis paneb mind siia. 477 00:26:03,030 --> 00:26:07,430 >> Ja mis jõuab üha tõmmatud on? 478 00:26:07,430 --> 00:26:08,740 Me lõpetame laskmise h. 479 00:26:08,740 --> 00:26:11,170 Sest see, mis seal s sulg 0. 480 00:26:11,170 --> 00:26:14,300 Ja siis sama asi e, ja l, ning l ja o. 481 00:26:14,300 --> 00:26:17,930 >> n, miks ma minema läbi võrdne n? 482 00:26:17,930 --> 00:26:19,200 Kuna 0 iseloomu. 483 00:26:19,200 --> 00:26:23,580 Nii lihtsalt, et oleks selge, siis, kui ma tegelikult kustutada olenemata nende prügi 484 00:26:23,580 --> 00:26:28,870 väärtused ja siis tegelikult juhtida ma ootan, et see on s sulg 1, 2, 485 00:26:28,870 --> 00:26:32,440 3, 4, pluss see on trailing uus tegelane. 486 00:26:32,440 --> 00:26:36,080 >> Ja nüüd kui me jätkame mööda dot, dot, dot selle õige versioon 487 00:26:36,080 --> 00:26:41,930 ja kapitaliseeritud t sulg 0 Tahaksin kohta Loomulikult tuleb ära ainult selle 488 00:26:41,930 --> 00:26:47,050 kutt, mis kontseptuaalselt oli lõpuks sihile. 489 00:26:47,050 --> 00:26:48,040 Nii et kõik on kursor. 490 00:26:48,040 --> 00:26:51,430 >> Ja olete kasutanud neid mitu nädalat nüüd kontekstis stringe. 491 00:26:51,430 --> 00:26:53,530 Aga all kapuuts nad veidi keerulisem. 492 00:26:53,530 --> 00:26:57,520 Aga kui sa arvad neid selles pildilise vormi teen ettepaneku, et nad on 493 00:26:57,520 --> 00:27:01,720 Tõenäoliselt ei ole kõik nii hirmutav kui nad Esialgu võib tunduda esmapilgul 494 00:27:01,720 --> 00:27:04,730 eriti selliste uute süntaks. 495 00:27:04,730 --> 00:27:07,290 Kõik küsimused on suunanäitajaks, stringid, või sümbolit? 496 00:27:07,290 --> 00:27:07,580 Jah? 497 00:27:07,580 --> 00:27:09,252 >> Publik: Kas sa lähed tagasi et [kuuldamatu]? 498 00:27:09,252 --> 00:27:10,502 >> SPEAKER 1: Muidugi. 499 00:27:10,502 --> 00:27:14,058 500 00:27:14,058 --> 00:27:19,525 >> Publik: Niisiis, kuidas tulla oma väga viimane line, sa ei pea * t line 501 00:27:19,525 --> 00:27:21,513 ja * s rida? 502 00:27:21,513 --> 00:27:23,004 Kas sul pole viidet - 503 00:27:23,004 --> 00:27:24,640 >> SPEAKER 1: Ah, tõesti hea küsimus. 504 00:27:24,640 --> 00:27:26,800 Miks ma ei ole * t ja a * s? 505 00:27:26,800 --> 00:27:30,340 Sest lühidalt, eelmisel nädalal, nagu meie swap funktsiooni, ma ütlen, et kui 506 00:27:30,340 --> 00:27:33,350 sul pointer vahendid, mis sa sinna minna, kui me tegime 507 00:27:33,350 --> 00:27:36,590 füüsiliselt laval, oli tegelikult kasutage tärni operaator. 508 00:27:36,590 --> 00:27:40,570 >> Selgub, et see ruut-sulg märke on see, mida me kutsume süntaktiline 509 00:27:40,570 --> 00:27:44,190 suhkur, mis on lihtsalt seksikas viis öeldes, et see on stenografist märke 510 00:27:44,190 --> 00:27:45,950 täpselt, mida sa kirjeldad alla. 511 00:27:45,950 --> 00:27:49,385 Aga see on natuke rohkem intuitiivne. 512 00:27:49,385 --> 00:27:53,510 Ja oht muuta see tunduda keerulisem kui see peaks olema, 513 00:27:53,510 --> 00:27:56,990 Mis tegelikult toimub siin on järgmine - 514 00:27:56,990 --> 00:28:01,450 Kui ma ütlen * t see tähendab, minna aadress salvestatakse t. 515 00:28:01,450 --> 00:28:04,350 >> Nii sõna otseses mõttes, kui t on hoidmiseks aadress, et h 516 00:28:04,350 --> 00:28:07,300 Algselt * t vahenditega minna siin. 517 00:28:07,300 --> 00:28:10,730 Nüüd, mida see t sulg 0 tähendab? 518 00:28:10,730 --> 00:28:11,560 Sama täpne asi. 519 00:28:11,560 --> 00:28:13,510 See on lihtsalt natuke rohkem kasutaja sõbralik kirjutada. 520 00:28:13,510 --> 00:28:14,430 >> Aga ma pole seda veel teinud. 521 00:28:14,430 --> 00:28:17,800 Ma ei saa lihtsalt öelda * t läheb * s. 522 00:28:17,800 --> 00:28:19,440 Sest mida ma tegema siis? 523 00:28:19,440 --> 00:28:22,950 Ma oleksin hakanud h, h, h, h, h kogu asi. 524 00:28:22,950 --> 00:28:22,995 Õigus? 525 00:28:22,995 --> 00:28:26,020 >> Sest * t on minna aadressile t. 526 00:28:26,020 --> 00:28:27,580 Aga me oleme sees loop. 527 00:28:27,580 --> 00:28:32,150 Ja mis raha ma incrementing, Loomulikult on iga iteratsiooni? 528 00:28:32,150 --> 00:28:32,690 i. 529 00:28:32,690 --> 00:28:34,590 >> Aga seal on võimalus siin, eks? 530 00:28:34,590 --> 00:28:37,870 Isegi kui see tundub nagu see muutub veidi keerukamate 531 00:28:37,870 --> 00:28:40,730 kui ruudu-sulg märke Me kasutasime mõnda aega - 532 00:28:40,730 --> 00:28:43,840 andke mulle undo minu h muutus seal - 533 00:28:43,840 --> 00:28:48,870 kuigi see on nüüd muutub vähe Kasvataja, põhiidee, kui * t 534 00:28:48,870 --> 00:28:53,630 tähendab siin ja * t on lihtsalt minge aadressile t. 535 00:28:53,630 --> 00:28:54,990 >> Aga mis oli aadressi t? 536 00:28:54,990 --> 00:28:56,850 Number hoiame kasutades? 537 00:28:56,850 --> 00:29:00,540 Nagu Ox456, toome selle tagasi lihtsalt huvides arutelu. 538 00:29:00,540 --> 00:29:05,380 Noh, kui ma tahan saada on e sisse t string, ma tahan minna, 539 00:29:05,380 --> 00:29:06,460 sisuliselt 456. 540 00:29:06,460 --> 00:29:09,230 >> Või õigemini, 457. 541 00:29:09,230 --> 00:29:10,590 Ma lihtsalt vaja lisada üks. 542 00:29:10,590 --> 00:29:11,790 Aga ma ei saa seda teha, eks? 543 00:29:11,790 --> 00:29:14,680 Kuna t, kuigi ma hoida joonistus see nüüd nagu nool, see on lihtsalt 544 00:29:14,680 --> 00:29:16,570 number, Ox456. 545 00:29:16,570 --> 00:29:21,400 Ja kui lisada üks selle või rohkem üldiselt, kui ma lisan ma selle saan 546 00:29:21,400 --> 00:29:24,350 tegelikult saada täpselt, kus ma tahan. 547 00:29:24,350 --> 00:29:26,260 Nii et kui ma tegelikult seda teha - 548 00:29:26,260 --> 00:29:28,970 ja see on see, mida nüüd nimetatakse pointer aritmeetika - 549 00:29:28,970 --> 00:29:30,375 Ma ei eemalda seda joont. 550 00:29:30,375 --> 00:29:33,550 Mis on ausalt öeldes ma arvan, selgem ja natuke rohkem kasutajasõbralikumaks lugeda. 551 00:29:33,550 --> 00:29:35,970 Aga see ei ole vähem õige. 552 00:29:35,970 --> 00:29:38,570 >> See koodirida nüüd kasutab pointer aritmeetika. 553 00:29:38,570 --> 00:29:40,920 Ta ütleb minna aadressil - 554 00:29:40,920 --> 00:29:44,670 olenemata algust t on, mis on t pluss i, mis algselt 555 00:29:44,670 --> 00:29:45,730 on 0, mis on suurepärane. 556 00:29:45,730 --> 00:29:49,280 Sest see tähendab, et alguses t pluss 1 pluss 2 pluss 3, ja nii edasi. 557 00:29:49,280 --> 00:29:51,030 Ja sama tegelema s. 558 00:29:51,030 --> 00:29:52,750 >> Nii süntaktiline suhkru eest. 559 00:29:52,750 --> 00:29:55,900 Aga mõista, mis tegelikult toimub all kapuuts, ma väidan, 560 00:29:55,900 --> 00:29:57,410 on tegelikult kasulik ja iseenesest. 561 00:29:57,410 --> 00:30:00,620 Sest see tähendab, nüüd seal ei ole palju magic toimub 562 00:30:00,620 --> 00:30:01,620 all kapuuts. 563 00:30:01,620 --> 00:30:03,920 Seal ei kavatse olla palju rohkem kihti, et saame Tõmmake teile. 564 00:30:03,920 --> 00:30:04,810 See on c. 565 00:30:04,810 --> 00:30:06,410 Ja see on programmeerimine. 566 00:30:06,410 --> 00:30:08,002 Tõesti hea küsimus. 567 00:30:08,002 --> 00:30:11,570 >> Olgu, see oli see, et lollakas programm, millele ma viitasin varem. 568 00:30:11,570 --> 00:30:12,650 swap oli vigane. 569 00:30:12,650 --> 00:30:14,070 Kui ei tundu töö. 570 00:30:14,070 --> 00:30:17,390 Tuletame meelde, et just nagu koos piima ja apelsinimahl - mis ma alustasin 571 00:30:17,390 --> 00:30:18,660 joomine tänane meeleavaldus. 572 00:30:18,660 --> 00:30:22,220 Nii lihtsalt nagu apelsinimahl ja piim, me ei pea kasutama 573 00:30:22,220 --> 00:30:26,200 ajutise muutuja, tmp, korraldada ajutiselt, nii et me võiksime siis 574 00:30:26,200 --> 00:30:28,820 selle väärtuse muutmiseks ja seejärel ajakohastada b. 575 00:30:28,820 --> 00:30:32,870 >> Kuid see funktsioon, me ütlesime, või selle programmi, milles see funktsioon oli 576 00:30:32,870 --> 00:30:35,670 kirjutatud oli vale ja vigane, siis miks? 577 00:30:35,670 --> 00:30:38,870 578 00:30:38,870 --> 00:30:39,090 Jah? 579 00:30:39,090 --> 00:30:42,471 >> Publik: [kuuldamatu]. 580 00:30:42,471 --> 00:30:44,940 >> SPEAKER 1: Täpselt, kui helistate swap - 581 00:30:44,940 --> 00:30:47,820 või üldisemalt kui helistada kõige tahes funktsioon - 582 00:30:47,820 --> 00:30:51,210 Kui argumente, et funktsioon on primitiivne, niiöelda ints ja tähed 583 00:30:51,210 --> 00:30:56,740 ja kahekohalised ja ujukite, asjad ilma tähed, mida läbides koopia 584 00:30:56,740 --> 00:30:57,540 argument. 585 00:30:57,540 --> 00:31:01,580 Nii et kui x oli 1 ja y oli 2, läheb olema 1 ja b saab olema 2. 586 00:31:01,580 --> 00:31:05,250 Aga nad ei kavatse olla erinev tükkideks bittide erinevaid tükke 587 00:31:05,250 --> 00:31:07,540 mälu, mis juhtub olema ladustamiseks identsed väärtused. 588 00:31:07,540 --> 00:31:12,160 >> Nii et see kood on super täiuslik kell vahetada ja b. 589 00:31:12,160 --> 00:31:13,850 See ei ole hea vahetada - 590 00:31:13,850 --> 00:31:15,290 eelmisel nädalal näiteks - 591 00:31:15,290 --> 00:31:16,390 x ja y. 592 00:31:16,390 --> 00:31:18,780 Kuna uuesti, nad vales ulatus. 593 00:31:18,780 --> 00:31:21,310 >> Nüüd, kuidas me edasi minna, millega määratakse kindlaks seda? 594 00:31:21,310 --> 00:31:23,140 Pidime tegema funktsioon vaadata veidi koledam. 595 00:31:23,140 --> 00:31:25,250 Aga jälle, kaaluma, milliseid tähendab see lihtsalt seda. 596 00:31:25,250 --> 00:31:27,840 597 00:31:27,840 --> 00:31:31,500 >> Ja tegelikult, las ma, järjepidevuse, muuta ühe asja nii, et see on identne 598 00:31:31,500 --> 00:31:33,200 mida me tegime. 599 00:31:33,200 --> 00:31:35,690 Nagu mainisin eelmisel nädalal, see ei oluline, kus see läheb. 600 00:31:35,690 --> 00:31:38,120 Tegelikult, tavaliselt te paneks star kõrval muutuja nimi. 601 00:31:38,120 --> 00:31:40,750 Aga ma arvan, et see oleks veidi lihtsam kaaluda * kõrval 602 00:31:40,750 --> 00:31:44,910 andmetüüp nii see pointer et int käesolevas asjas. 603 00:31:44,910 --> 00:31:46,270 >> Nii et mida ma siin teen? 604 00:31:46,270 --> 00:31:49,590 Ma ütlen ei anna mulle int järgneb teine ​​int, 605 00:31:49,590 --> 00:31:50,810 kutsudes neid ja b. 606 00:31:50,810 --> 00:31:52,460 Anna mulle aadress int. 607 00:31:52,460 --> 00:31:53,960 Anna mulle aadress teise int. 608 00:31:53,960 --> 00:31:56,330 Helista neile, aadressid ja b. 609 00:31:56,330 --> 00:32:00,860 >> Ja siis kasutades * märke maha alla, minge kõik need aadressid 610 00:32:00,860 --> 00:32:05,290 kui on vaja kas saan või määrata selle väärtus. 611 00:32:05,290 --> 00:32:07,400 Aga on siin erandiks. 612 00:32:07,400 --> 00:32:11,130 Miks ma ei ole * kõrval tmp? 613 00:32:11,130 --> 00:32:15,070 Miks ma ei tohi seda teha, näiteks? 614 00:32:15,070 --> 00:32:19,370 Tundub nagu ma peaks lihtsalt minema välja ja parandada kogu asi. 615 00:32:19,370 --> 00:32:19,752 Jah? 616 00:32:19,752 --> 00:32:21,002 >> Publik: [kuuldamatu]. 617 00:32:21,002 --> 00:32:23,280 618 00:32:23,280 --> 00:32:25,480 >> SPEAKER 1: Ma ei ole kuulutatud tmp kui string. 619 00:32:25,480 --> 00:32:28,830 620 00:32:28,830 --> 00:32:34,950 Nii et see oleks tunnistada, et käesolevas asjas, tmp olema aadress int. 621 00:32:34,950 --> 00:32:37,380 Aga see ei ole päris see, mida ma tahan, jaoks paar põhjust. 622 00:32:37,380 --> 00:32:38,616 >> Publik: Sa ei taha, et vahetada neid. 623 00:32:38,616 --> 00:32:41,800 >> SPEAKER 1: Täpselt, ma ei taha, et vahetada midagi tmp. tmp on lihtsalt 624 00:32:41,800 --> 00:32:42,790 nädal üks värk. 625 00:32:42,790 --> 00:32:45,150 Kõik, mida ma tahan on muutuja salvestada mõned number. 626 00:32:45,150 --> 00:32:47,330 Ma isegi ei hooli aadressid praegusel hetkel. 627 00:32:47,330 --> 00:32:50,530 >> Ma vajan 32 bitti või nii et hoidke int. 628 00:32:50,530 --> 00:32:56,690 Ja ma tahan, et panna need 32 bitti mis iganes ei ole, nii et rääkida, kuid 629 00:32:56,690 --> 00:33:01,260 mis on, lihtsalt olla täpsem. 630 00:33:01,260 --> 00:33:06,420 Sest kui on aadress, * tähendab minna ja saada väärtus 1. 631 00:33:06,420 --> 00:33:10,560 Näiteks eelmisel nädalal näiteks või b juhtum, saada väärtus 2. 632 00:33:10,560 --> 00:33:11,750 >> Mis siis tegelikult toimub? 633 00:33:11,750 --> 00:33:15,070 Las ma joonistan pildi siia, mis ainult tease peale osa täna. 634 00:33:15,070 --> 00:33:18,580 Aga see ilmuvad jätkuvalt juba mõnda aega. 635 00:33:18,580 --> 00:33:22,430 >> See, ma väita, on see, mida arvuti mälu välja näeb, kui sa jooksed 636 00:33:22,430 --> 00:33:24,060 programm, mis tahes programmi. 637 00:33:24,060 --> 00:33:28,340 Kui te käivitate programmi ülaservas arvuti RAM - seega mõtle 638 00:33:28,340 --> 00:33:33,530 see ristkülik, nii tõesti kui teie arvuti RAM või mälu, kõik 101 639 00:33:33,530 --> 00:33:36,920 miljard baiti see kõik kaks miljardit baiti, kõik kaks gigabaiti see, 640 00:33:36,920 --> 00:33:39,910 olenemata kogusest teil on, Joonistame seda ristkülikut. 641 00:33:39,910 --> 00:33:43,260 Ja ma väita, et kui sa jooksed programm nagu Microsoft Word või Chrome 642 00:33:43,260 --> 00:33:49,220 või midagi sellist, bitti, mis Microsoft või Google kirjutas - 643 00:33:49,220 --> 00:33:50,910 juhtudel nendest programmidest - 644 00:33:50,910 --> 00:33:54,490 laetakse arvuti mälu kus neid on võimalik täita rohkem 645 00:33:54,490 --> 00:33:57,520 kiiresti ja söödetakse CPU, mis on arvuti aju. 646 00:33:57,520 --> 00:34:00,940 >> Ja TAM nad ladustada väga peal oma programmi, nii rääkida. 647 00:34:00,940 --> 00:34:03,300 Teisisõnu, kui see on tüki mälu, kui te topeltklõps 648 00:34:03,300 --> 00:34:05,740 Microsoft Word, bits tulema välja kõvaketas. 649 00:34:05,740 --> 00:34:06,680 Nad saavad laaditud RAM. 650 00:34:06,680 --> 00:34:10,330 Ja me pista neid ülaservas Selle ristküliku kontseptuaalselt. 651 00:34:10,330 --> 00:34:13,010 >> Noh, ülejäänud oma mälu kasutatakse erinevaid asju. 652 00:34:13,010 --> 00:34:16,460 Tipus näed initsialiseerida andmed ja lähtestamise andmed. 653 00:34:16,460 --> 00:34:20,500 See on, mida teha, on suures osas, kus konstandid või globaalsed muutujad 654 00:34:20,500 --> 00:34:21,340 et on väärtusi. 655 00:34:21,340 --> 00:34:22,980 Aga rohkem on neid veel kord. 656 00:34:22,980 --> 00:34:25,150 >> Siis on hunnik, mis me tuleme tagasi. 657 00:34:25,150 --> 00:34:28,420 Aga allosas on osa, mis on eriti Sobiv kohe. 658 00:34:28,420 --> 00:34:30,210 See on nn stack. 659 00:34:30,210 --> 00:34:33,850 Nii nagu ka kõige tahes D saal siin campus, teil on neid plaate, mis 660 00:34:33,850 --> 00:34:37,210 lihtsalt korstna peal üksteist, mil võite panna toit ja tühi-tähi. 661 00:34:37,210 --> 00:34:40,139 Korstnat arvutisüsteemi on väga sarnane. 662 00:34:40,139 --> 00:34:42,679 Välja arvatud et salve, kui me kasutame söögisaal, muidugi, on mõeldud 663 00:34:42,679 --> 00:34:45,710 teha asju kandikud või raamid - 664 00:34:45,710 --> 00:34:49,469 kui me kutsume neid - in arvuti mälu hoidmiseks kasutatud 665 00:34:49,469 --> 00:34:51,610 muutujad ja väärtused. 666 00:34:51,610 --> 00:34:53,929 >> Mis siis tegelikult läheb edasi all kapuuts? 667 00:34:53,929 --> 00:34:55,820 Noh, las ma flip üle et ekraan siin. 668 00:34:55,820 --> 00:34:58,370 Ja olgem keskenduda just alumine osa hetkeks. 669 00:34:58,370 --> 00:35:02,770 Kui see on alumise osa minu arvuti mällu selgub, kui ma 670 00:35:02,770 --> 00:35:05,350 helistada funktsioon main - mis juhtub, ausalt, 671 00:35:05,350 --> 00:35:06,950 automaatselt minu jaoks - 672 00:35:06,950 --> 00:35:10,510 Ma saan tüki mälu alt mu RAM nii rääkida. 673 00:35:10,510 --> 00:35:13,390 Ja see on koht, kus peamine on kohalikud muutujad minema. 674 00:35:13,390 --> 00:35:16,770 See on koht, kus argc ja argv võibolla minna ja kõik muutujad I 675 00:35:16,770 --> 00:35:18,170 kuulutada sees peamine. 676 00:35:18,170 --> 00:35:20,260 Nad lõpuks allosas minu arvuti RAM. 677 00:35:20,260 --> 00:35:25,040 >> Nüüd oletame, et peamised kõned funktsiooni nagu swap, nagu ta tegi eelmisel nädalal? 678 00:35:25,040 --> 00:35:30,620 Noh, me põhiliselt panna uus plaat, uus raam, peale minu tüki mälu. 679 00:35:30,620 --> 00:35:34,160 Ja ma kirjeldada seda kui kuuluvate swap funktsiooni. 680 00:35:34,160 --> 00:35:35,770 >> Nüüd sellest, mis seal sees on swap? 681 00:35:35,770 --> 00:35:39,240 Noh, mis põhinevad eelmise nädala programm ja üks me just nägin väljavõte, 682 00:35:39,240 --> 00:35:46,590 sees swap raami, või Swapi salve, on see, mis muutujad? 683 00:35:46,590 --> 00:35:47,970 Noh, ja b. 684 00:35:47,970 --> 00:35:51,850 Kuna need olid tema kohalike argumendid, pluss kolmandik tmp. 685 00:35:51,850 --> 00:35:54,470 Nii et tõesti, ma võin selle joonistada veidi puhtamalt. 686 00:35:54,470 --> 00:35:56,680 Lubage mul minna ja undo etiketti. 687 00:35:56,680 --> 00:35:58,520 Ja las ma väita, et sa tead, mida? 688 00:35:58,520 --> 00:36:00,560 >> ilmselt läheb lõpuks siin. 689 00:36:00,560 --> 00:36:02,160 B läheb lõpuks siin. 690 00:36:02,160 --> 00:36:03,810 Ja tmp lõppeb siin. 691 00:36:03,810 --> 00:36:05,160 Nüüd tellimine võib olla veidi erinev. 692 00:36:05,160 --> 00:36:06,840 Aga põhimõtteliselt on see idee. 693 00:36:06,840 --> 00:36:11,490 >> Ja just kollektiivselt on see, mida me kutsume swap raami või 694 00:36:11,490 --> 00:36:12,136 Toitlustus-hall salve. 695 00:36:12,136 --> 00:36:13,150 Ja sama tegelema peamine. 696 00:36:13,150 --> 00:36:14,040 Aga ma ei tõmmata seda. 697 00:36:14,040 --> 00:36:17,810 Aga see on, kus argc ja argv ja iga tema kohalikud muutujad nagu x ja y 698 00:36:17,810 --> 00:36:18,940 võib olla samuti. 699 00:36:18,940 --> 00:36:22,170 >> Nüüd kaaluma, mis tegelikult toimub Helistades swap. 700 00:36:22,170 --> 00:36:26,370 Kui helistate swap, täidesaatva kood nagu see, et sa möödaminnes, et 701 00:36:26,370 --> 00:36:30,670 lollakas versioon, ja b kui koopiaid x ja y. 702 00:36:30,670 --> 00:36:34,300 Nii et kui ma nüüd seda joonistada ekraanil - 703 00:36:34,300 --> 00:36:36,700 sain saada paremini see - 704 00:36:36,700 --> 00:36:40,850 Nii et lugu ma ütlen, et mina oli see lollakas versioon, kui me 705 00:36:40,850 --> 00:36:46,130 helistada swap kulgeb sõnalt ja b nagu täisarvud, mis tegelikult toimub? 706 00:36:46,130 --> 00:36:48,250 >> Noh, mis tegelikult juhtub, on see. 707 00:36:48,250 --> 00:36:52,850 Lubage mul minna ja undo lihtsalt koristama natuke ruumi. 708 00:36:52,850 --> 00:36:54,720 Nii et see on minu arvuti mällu. 709 00:36:54,720 --> 00:36:57,510 >> Nii et kui mul on näiteks - 710 00:36:57,510 --> 00:36:58,910 tegelikult teeme seda niimoodi - 711 00:36:58,910 --> 00:37:02,690 kui ma väita, et see on x, hoidmine väärtus 1 nagu eelmisel nädalal. 712 00:37:02,690 --> 00:37:05,930 Ja see on y, hoidmine väärtust 2 Nii nagu eelmisel nädalal. 713 00:37:05,930 --> 00:37:11,370 Ja see on peamine, kui ma kutsun swap, andes ise juurdepääsu ja 714 00:37:11,370 --> 00:37:15,150 b ja tmp, ma väita, et see on ja see on 1. 715 00:37:15,150 --> 00:37:16,080 >> See on b. 716 00:37:16,080 --> 00:37:17,010 See on 2. 717 00:37:17,010 --> 00:37:18,370 Seda nimetatakse tmp. 718 00:37:18,370 --> 00:37:23,360 >> Ja esialgu, see on mingi prügi väärtus kuni ma tegelikult salvestada see, 719 00:37:23,360 --> 00:37:24,450 mis on 1. 720 00:37:24,450 --> 00:37:28,320 Siis minna ja muuta et mida? 721 00:37:28,320 --> 00:37:29,720 B väärtust. 722 00:37:29,720 --> 00:37:31,980 >> Ja nüüd on mul kaks siin. 723 00:37:31,980 --> 00:37:34,050 Ja siis me ütlesime b saab tmp. 724 00:37:34,050 --> 00:37:37,670 Jällegi, nagu meelerahu kontrollima kolmas koodirida siin on lihtsalt see 725 00:37:37,670 --> 00:37:39,440 üks, b saab tmp. 726 00:37:39,440 --> 00:37:41,730 >> Ja nii lõpuks, mida ma pean tegema? 727 00:37:41,730 --> 00:37:46,800 Ma minna ja muuta b olla mis iganes väärtus tmp on, mis on 1. 728 00:37:46,800 --> 00:37:48,390 Ma ei puutu tmp uuesti. 729 00:37:48,390 --> 00:37:54,100 >> Aga nüüd, probleem on kiiresti swap tulu, sest see ei ole üleandmine 730 00:37:54,100 --> 00:37:57,540 tagasi mõned väärtus, ei ole tagasi avalduses selgesõnaliselt seda. 731 00:37:57,540 --> 00:37:59,080 Mis tegelikult toimub? 732 00:37:59,080 --> 00:38:03,480 Noh, põhiliselt see kõik mälu - 733 00:38:03,480 --> 00:38:07,410 OK, ilmselt kustutuskumm meeldib ainult ühe sõrmega korraga - 734 00:38:07,410 --> 00:38:08,180 kaob. 735 00:38:08,180 --> 00:38:10,070 >> Nüüd tegelikult see ei ole lähe kuhugi. 736 00:38:10,070 --> 00:38:11,810 Aga sa ei mõtle seda nüüd küsimärgid. 737 00:38:11,810 --> 00:38:14,040 Sest see ei ole enam tegelikult kasutatakse. 738 00:38:14,040 --> 00:38:17,470 Ja midagi ei tehta nende väärtused. 739 00:38:17,470 --> 00:38:21,920 >> Seega juhul, kui roheline versioon seda koodi, mis selle asemel on olla 740 00:38:21,920 --> 00:38:24,640 läks swap? 741 00:38:24,640 --> 00:38:25,770 Nii käsitleb. 742 00:38:25,770 --> 00:38:28,520 Nii aadress x ja aadress y. 743 00:38:28,520 --> 00:38:35,790 Nii et kui me uuesti öelda selle loo viimane aeg, ja ma tegelikult teha swap jälle 744 00:38:35,790 --> 00:38:44,620 kuid suunanäitajaks, see on, seda on b ja see on tmp, mis on 745 00:38:44,620 --> 00:38:49,080 tegelikult salvestatud käesolevas rohelises versioon minu kood, kui ma panen 746 00:38:49,080 --> 00:38:52,110 aadressides? 747 00:38:52,110 --> 00:38:53,780 >> See saab olema kursor x. 748 00:38:53,780 --> 00:38:54,890 Nii et ma võiks teha nool. 749 00:38:54,890 --> 00:38:57,310 Kuid olgem kasutada sama meelevaldne Näiteks kui enne. 750 00:38:57,310 --> 00:39:01,220 Ütleme, et see on midagi Ox123. 751 00:39:01,220 --> 00:39:04,970 Ja see saab olema Ox127 sest see on neli baiti ära, sest see on 752 00:39:04,970 --> 00:39:07,370 int, nii Ox127. 753 00:39:07,370 --> 00:39:09,080 >> Ja veel, ma võtan mõned vabadused numbrid. 754 00:39:09,080 --> 00:39:11,430 Nad on palju väiksemad kui nad oleksid tegelikult ja erinevas järjekorras. 755 00:39:11,430 --> 00:39:14,350 Aga see, kuidas pilt on nüüd teistsugune. 756 00:39:14,350 --> 00:39:19,060 >> Aga kui ma seda roheline kood ja ma int tmp saada *. 757 00:39:19,060 --> 00:39:25,010 * Abil teha järgmist võtma tegeleda, et see sisse ja minna seda, 758 00:39:25,010 --> 00:39:26,190 mis on 1. 759 00:39:26,190 --> 00:39:28,480 Ja see, mida ma siis panna tmp. 760 00:39:28,480 --> 00:39:32,480 Vahepeal järgmise koodirida siin, * saab b, mida see tähendab? 761 00:39:32,480 --> 00:39:36,910 >> Noh, *, et minna siin saab * b, mis tähendab minna. 762 00:39:36,910 --> 00:39:39,310 Ja see tähendab, et panna raha sinna. 763 00:39:39,310 --> 00:39:43,670 Lõpuks viimane rida koodi lihtsalt ütles * b saab tmp. 764 00:39:43,670 --> 00:39:48,900 >> Niisiis b ütleb minna ja asendada selle tmp, mis sel juhul läheb 765 00:39:48,900 --> 00:39:51,520 olema jällegi 1. 766 00:39:51,520 --> 00:39:54,920 Ja see on põhjus, miks roheline versioon Meie kood töötab, samas kui punane 767 00:39:54,920 --> 00:39:56,010 versioon ei ole kunagi teinud. 768 00:39:56,010 --> 00:39:59,020 See kõik lihtsalt taandub kuidas mälu haldab ja kus see on 769 00:39:59,020 --> 00:40:02,580 tegelikult panna oma arvuti RAM. 770 00:40:02,580 --> 00:40:07,270 Ja nüüd, see on üks neist asjadest, et stack on kasutatud. 771 00:40:07,270 --> 00:40:09,225 >> Küsimused paigutus? 772 00:40:09,225 --> 00:40:10,380 On viiteid? 773 00:40:10,380 --> 00:40:11,630 Või swap? 774 00:40:11,630 --> 00:40:13,740 775 00:40:13,740 --> 00:40:17,043 >> Olgu, malloc, mäletate, tegin midagi sellist. 776 00:40:17,043 --> 00:40:18,260 See oli super lihtne näide. 777 00:40:18,260 --> 00:40:20,550 Ja see oli üks, mis Binky tutvustas meile küll üsna 778 00:40:20,550 --> 00:40:21,870 kiiresti, lõpus klassi. 779 00:40:21,870 --> 00:40:24,480 Kurat, seal jälle pihta. 780 00:40:24,480 --> 00:40:28,780 >> Nii meelde, et see oli näiteks, et Binky tutvustas meile, ehkki 781 00:40:28,780 --> 00:40:30,360 mõnevõrra kiiremini lõpus klassi. 782 00:40:30,360 --> 00:40:33,640 Ja siin me kasutada malloc tõesti teist korda. 783 00:40:33,640 --> 00:40:37,330 Sest kui me esimest korda seda kasutanud luua piisavalt RAM, eraldama piisavalt RAM 784 00:40:37,330 --> 00:40:38,340 salvestada string. 785 00:40:38,340 --> 00:40:40,250 >> Seekord Binky hoida see lihtne. 786 00:40:40,250 --> 00:40:42,465 Nii et see on salvestada ainult int, ilmselt. 787 00:40:42,465 --> 00:40:43,510 Ja see on täiesti korras. 788 00:40:43,510 --> 00:40:46,560 See on natuke imelik, öeldes, et kasutada malloc eraldada üks int. 789 00:40:46,560 --> 00:40:50,650 Aga koht Nicki claymation oli tõesti ainult öelda lugu mis 790 00:40:50,650 --> 00:40:53,830 juhtub või ei juhtu, kui sa valesti kohelda mälu. 791 00:40:53,830 --> 00:40:56,520 >> Nii et kui see programm tegin mõned asjad. 792 00:40:56,520 --> 00:41:01,580 Esimesel juhul, kuulutab pointer nimega x int. 793 00:41:01,580 --> 00:41:04,480 Seejärel teatab pointer kutsutakse y int. 794 00:41:04,480 --> 00:41:06,150 Seejärel kauplust x, siis mida? 795 00:41:06,150 --> 00:41:07,110 Keegi teine ​​nüüd. 796 00:41:07,110 --> 00:41:09,685 Mis saab salvestatud x järgi Kolmandas reas on see programm? 797 00:41:09,685 --> 00:41:12,380 >> Publik: [kuuldamatu]. 798 00:41:12,380 --> 00:41:14,130 >> SPEAKER 1: Noh, mitte päris bytes kohta öelda. 799 00:41:14,130 --> 00:41:16,760 Täpsemalt nüüd. 800 00:41:16,760 --> 00:41:18,325 Mis saab salvestatud x? 801 00:41:18,325 --> 00:41:21,000 802 00:41:21,000 --> 00:41:22,060 Aadress, ma arvan, et ma kuulsin seda. 803 00:41:22,060 --> 00:41:23,570 >> Mis siis malloc tagasi? 804 00:41:23,570 --> 00:41:26,030 malloc käitumuslikult eraldab tüki mälu. 805 00:41:26,030 --> 00:41:27,850 Aga kuidas see annab teile juurdepääsu on? 806 00:41:27,850 --> 00:41:29,460 Ta naaseb mida? 807 00:41:29,460 --> 00:41:32,000 Aadress esimene bait aastal tüki mälu. 808 00:41:32,000 --> 00:41:33,020 >> Nüüd on see super lihtne. 809 00:41:33,020 --> 00:41:35,380 See on lihtsalt üks bait, mis tähendab, käsitleda me saada tagasi on 810 00:41:35,380 --> 00:41:37,300 aadress kogu asi. 811 00:41:37,300 --> 00:41:42,070 Nii hoitakse x on siis aadress selle tüki mälu. 812 00:41:42,070 --> 00:41:43,400 Vahepeal mis järgmisena juhtub? 813 00:41:43,400 --> 00:41:45,890 Nii tegelikult, lähme edasi ja joonistada välja reaalne kiire. 814 00:41:45,890 --> 00:41:52,490 >> Nii et kui me läheme üle ekraani siin ja me mängime seda läbi int * x ja int * y 815 00:41:52,490 --> 00:41:53,740 läheb seda, mida minu jaoks? 816 00:41:53,740 --> 00:41:58,280 Väidan, et see on lihtsalt kavatse teha midagi sellist ja kutsuvad seda x ja 817 00:41:58,280 --> 00:42:00,010 seda ja kutsume seda y. 818 00:42:00,010 --> 00:42:03,110 Vahepeal kolmas rida koodi on läheb eraldada suurus int, 819 00:42:03,110 --> 00:42:06,160 mis juhtub olema - vabandan, kui ma ütlesin üks enne ma mõtlesin üks int - 820 00:42:06,160 --> 00:42:08,280 neli baiti tüüpiline arvuti. 821 00:42:08,280 --> 00:42:09,720 Vähemalt CS50 aparaat. 822 00:42:09,720 --> 00:42:11,490 >> Nii see läheb eraldada see, kes teab? 823 00:42:11,490 --> 00:42:12,800 Kusagil siin. 824 00:42:12,800 --> 00:42:15,780 Ja see on salvestatud mõned aadress Ox, kes teab? 825 00:42:15,780 --> 00:42:18,330 Aga mis toimub, et saada tagasi on see, et aadress. 826 00:42:18,330 --> 00:42:22,270 Aga me teha seda piltlikult kui lihtsalt nool niimoodi. 827 00:42:22,270 --> 00:42:25,430 >> Nüüd järgmine rida * x saab 42. 828 00:42:25,430 --> 00:42:29,400 Mis * x tähendab üldarusaadavat mõttes? 829 00:42:29,400 --> 00:42:30,040 Just sinna minna. 830 00:42:30,040 --> 00:42:30,960 Mine sellele aadressile. 831 00:42:30,960 --> 00:42:35,900 Ehk teisisõnu, järgige nool ja pane 42 seal. 832 00:42:35,900 --> 00:42:38,140 Aga siis midagi halba juhtunud et Binky, eks? 833 00:42:38,140 --> 00:42:43,950 >> Tuletame meelde, et line viis siin, * y muutub 13, tõepoolest õnnetu number, 834 00:42:43,950 --> 00:42:44,760 tegin seda, mida meie jaoks? 835 00:42:44,760 --> 00:42:47,320 Noh, * y vahenditega minna. 836 00:42:47,320 --> 00:42:50,460 Noh, see ei ole antud väärtus veel, eks? 837 00:42:50,460 --> 00:42:54,090 Kood ei ole y on vormindatud midagi. 838 00:42:54,090 --> 00:42:56,120 Olime x Alglaaditakse et aadress. 839 00:42:56,120 --> 00:42:57,640 Aga y kuulutati up top. 840 00:42:57,640 --> 00:43:00,250 Aga siis semikoolon, mingit väärtust tegelikult panna see. 841 00:43:00,250 --> 00:43:02,330 Nii et see on õiglane, et nimetame seda prügi väärtus. 842 00:43:02,330 --> 00:43:03,430 Kes teab, mis seal on? 843 00:43:03,430 --> 00:43:07,160 See on jäänuseid bitti, mida kasutati mõned eelmine rida koodi 844 00:43:07,160 --> 00:43:08,300 minu programmi. 845 00:43:08,300 --> 00:43:13,250 >> Nii et kui ma ütlen minna, see on nagu, Mul pole aimugi, kus see nool 846 00:43:13,250 --> 00:43:14,490 läheb lõpuks. 847 00:43:14,490 --> 00:43:17,720 Ja see, kui sa tavaliselt saada killustatust süü. 848 00:43:17,720 --> 00:43:22,430 Kui te kogemata endid, nii et rääkida või minge aadressile see pole 849 00:43:22,430 --> 00:43:25,400 tegelikult õigustatud aadress, halbu asju juhtuda. 850 00:43:25,400 --> 00:43:27,550 >> Ja see on täpselt see, mis juhtus mõelda Binky. 851 00:43:27,550 --> 00:43:31,060 Nii meenutavad, et lugu, mis Nick oli räägib siin oli sama idee, mida 852 00:43:31,060 --> 00:43:34,050 Olen tõmmata illusiooni kriit pardal olemas. 853 00:43:34,050 --> 00:43:35,960 X ja Y on deklareeritud. 854 00:43:35,960 --> 00:43:39,690 >> Siis jaotatakse suuruse int ja hoidnud seda x. 855 00:43:39,690 --> 00:43:42,130 Siis järgmine rida tegime * x. 856 00:43:42,130 --> 00:43:46,070 See oli Nick võlukepiga ning viite mahavõtmine. 857 00:43:46,070 --> 00:43:49,780 See pani 42 mällu märkis x. 858 00:43:49,780 --> 00:43:51,600 >> Aga see on koht, kus asjad läks kohutavalt valesti. 859 00:43:51,600 --> 00:43:51,820 Õigus? 860 00:43:51,820 --> 00:43:53,550 Oleme püüdnud endid y. 861 00:43:53,550 --> 00:43:55,620 Aga y olid mõned võlts raha, eks? 862 00:43:55,620 --> 00:43:57,720 >> See noolega vasakpoolne nurgas, ei ole 863 00:43:57,720 --> 00:43:58,950 tegelikult osutab midagi. 864 00:43:58,950 --> 00:44:01,520 See on omamoodi seda, mida ma tegin siin laual. 865 00:44:01,520 --> 00:44:05,900 Nii halbu asju juhtuda, segmenteerimine süü või Binky süü, et käesolevas asjas. 866 00:44:05,900 --> 00:44:10,800 >> Aga kui me seejärel määrata, et seda tehes x muutub y kuidas lugu muutus? 867 00:44:10,800 --> 00:44:15,760 Noh, kui ma x muutub y, see on tõhusalt sama öelda 868 00:44:15,760 --> 00:44:19,235 mis iganes see on, Ox-midagi saab olema sama siin, 869 00:44:19,235 --> 00:44:20,080 Ox-midagi. 870 00:44:20,080 --> 00:44:22,970 Või piltlikult me ​​juhtida noolt. 871 00:44:22,970 --> 00:44:25,530 >> Nii et siin laual Binky, ning järgmine rida 872 00:44:25,530 --> 00:44:28,350 kood, * y tähendab minna. 873 00:44:28,350 --> 00:44:29,400 Kus on seal? 874 00:44:29,400 --> 00:44:30,820 See tähendab, et üle siin. 875 00:44:30,820 --> 00:44:36,050 >> Ja kui me uuendada, et see on 13 see lihtsalt tähendab enamat ja 876 00:44:36,050 --> 00:44:39,470 kirjalikult 13 siin. 877 00:44:39,470 --> 00:44:44,130 Nii et ehk ei ole täielikult lihtne esimesel pilgul. 878 00:44:44,130 --> 00:44:47,740 Aga veel kord ja kasutada sama kõnepruuki et Binky kasutas siin, nii 879 00:44:47,740 --> 00:44:50,485 Esimese kahe eraldada suunanäitajaks, x ja y, kuid ei pointees. 880 00:44:50,485 --> 00:44:54,750 Ja pointees ei ole üldiselt kasutatav termin. 881 00:44:54,750 --> 00:44:56,120 Aga pointer absoluutselt on. 882 00:44:56,120 --> 00:44:59,200 Aga see on see, mis kuramuse märkis kell on Binky on nomenklatuur. 883 00:44:59,200 --> 00:45:01,660 >> See järgmise rea, muidugi, eraldab int pointee. 884 00:45:01,660 --> 00:45:04,840 Nii tüki mälu - nagu ma joonistasin üle edasi paremal seal - ja komplekt 885 00:45:04,840 --> 00:45:06,470 x võrdub mõtet. 886 00:45:06,470 --> 00:45:11,350 See dereferences x salvestada 42 mälu, et see osutavad. 887 00:45:11,350 --> 00:45:13,380 Ja siis see on muidugi oli halb. 888 00:45:13,380 --> 00:45:15,600 Kuna y ei juhtides juures veel midagi. 889 00:45:15,600 --> 00:45:16,530 See fikseerib ta. 890 00:45:16,530 --> 00:45:18,240 Nii et see on ikka lollakas programmi. 891 00:45:18,240 --> 00:45:21,580 Tulime puhub läbi koodi rida realt ja ütles, oh well, 892 00:45:21,580 --> 00:45:22,690 lase tal krahhi seal. 893 00:45:22,690 --> 00:45:23,420 See on halb asi. 894 00:45:23,420 --> 00:45:26,790 Koefitsiendid on programmi lihtsalt läheb katkestada kokku sel line. 895 00:45:26,790 --> 00:45:30,550 Aga kui sa olid eemaldada avariijärgne rida ja asendada see kahe viimase 896 00:45:30,550 --> 00:45:32,470 read on sulle anda - 897 00:45:32,470 --> 00:45:35,310 kasutades pointer loovutamine - y käsk x on punkt t. 898 00:45:35,310 --> 00:45:39,280 Ja siis endid y väga ohutult. 899 00:45:39,280 --> 00:45:41,520 >> Nii et kui see jäta meid? 900 00:45:41,520 --> 00:45:45,350 Noh, selgub, et selle all kapuuts aastal CS50 raamatukogu osuti on 901 00:45:45,350 --> 00:45:46,320 kasutatakse kogu. 902 00:45:46,320 --> 00:45:48,910 Ja me tegelikult hakata koor tagasi, et kiht enne pikk. 903 00:45:48,910 --> 00:45:51,740 Aga selgub ka, mõiste, mis Mõned võite olla tuttav, 904 00:45:51,740 --> 00:45:54,580 eriti mugavamaks, on tegelikult see, et väga populaarne 905 00:45:54,580 --> 00:45:56,390 kodulehel või virna ületäitumise, nendel päevadel. 906 00:45:56,390 --> 00:45:58,720 >> Aga see on tegelikult väga tehniline tähendus. 907 00:45:58,720 --> 00:46:00,160 Me teame nüüd, mida pinu. 908 00:46:00,160 --> 00:46:02,550 See on nagu virna plaate sees söögisaal. 909 00:46:02,550 --> 00:46:05,140 >> Või sees arvuti mälu its nende raamid 910 00:46:05,140 --> 00:46:06,900 mis kasutavad funktsioonid. 911 00:46:06,900 --> 00:46:10,760 Noh, selgub, et selle tõttu väga lihtne rakendamine 912 00:46:10,760 --> 00:46:14,970 mälu ja raamid nn korstnat, saab tegelikult võtta kontrolli 913 00:46:14,970 --> 00:46:17,050 arvutisüsteemi, üsna kergesti. 914 00:46:17,050 --> 00:46:22,180 Võite sissemurdmist süsteemi kui inimesed nagu meil ei ole kirjutanud meie kood 915 00:46:22,180 --> 00:46:23,300 eriti hästi. 916 00:46:23,300 --> 00:46:26,670 >> Kui inimestele meeldib meile kasutada tükkideks mälu või kasutada massiivid - 917 00:46:26,670 --> 00:46:27,810 veelgi sagedamini - 918 00:46:27,810 --> 00:46:31,800 kuid mõnikord unustage vaadata piirid meie massiivi kui võiks 919 00:46:31,800 --> 00:46:38,470 on ennast mõnikord, mida arutati liiga kaugele minevikku lõpus massiivi. 920 00:46:38,470 --> 00:46:40,520 Parimal juhul oma programmi võib lihtsalt krahhi. 921 00:46:40,520 --> 00:46:42,280 Segmenteerimine süü, kind piinlik. 922 00:46:42,280 --> 00:46:45,480 Ole suur, kuid see ei ole tingimata väga halb. 923 00:46:45,480 --> 00:46:49,480 >> Aga kui teie programm on tegelikult reaalne kasutajate arvutites, kui see töötab 924 00:46:49,480 --> 00:46:53,070 kodulehel, et tegelikult juhuslikult inimesi Internetis on pihta, lastes 925 00:46:53,070 --> 00:46:56,690 inimesed esile halba oma koodi üldiselt ei ole hea asi, sest 926 00:46:56,690 --> 00:46:59,930 tähendab see võimalust teha kontrolli arvuti. 927 00:46:59,930 --> 00:47:01,350 Ja see läheb otsima veidi segasena. 928 00:47:01,350 --> 00:47:04,570 Aga ma mõtlesin, et ma hirmutada teid see viimane näide. 929 00:47:04,570 --> 00:47:05,650 >> Siin on näide koodi. 930 00:47:05,650 --> 00:47:07,370 Ja seal on hea Wikipedia artikkel, mis jalutab läbi 931 00:47:07,370 --> 00:47:08,530 seda üksikasjalikumalt. 932 00:47:08,530 --> 00:47:13,890 Mul on peamine põhjale calling suva, mis kulgeb argv 1. 933 00:47:13,890 --> 00:47:15,750 Ja see on lihtsalt nii, et saate käivitage programm ja sooritama 934 00:47:15,750 --> 00:47:17,080 suvalise sisendi. 935 00:47:17,080 --> 00:47:20,180 >> Ja siis suva on kuulutatud üleval kui vastu string, või rohkem 936 00:47:20,180 --> 00:47:21,700 täpselt, char *. 937 00:47:21,700 --> 00:47:23,860 Seejärel teatab array tähemärki. 938 00:47:23,860 --> 00:47:27,130 Kõne see puhver üldisemalt suurus 12. 939 00:47:27,130 --> 00:47:30,900 Seega 12 tähemärki mahub sees selle massiivi nimega c. 940 00:47:30,900 --> 00:47:33,510 >> Ja siis ta kasutab seda uut funktsiooni, , mis on uus, kuid ei ole raske 941 00:47:33,510 --> 00:47:34,930 aru, mälu koopia. 942 00:47:34,930 --> 00:47:39,290 See kopeerib mälu baar, mis oli muutuja varem n, olenemata 943 00:47:39,290 --> 00:47:42,080 kasutaja tipitud argv 1 c alla. 944 00:47:42,080 --> 00:47:43,090 Mitu baiti? 945 00:47:43,090 --> 00:47:44,260 String pikkusega riba. 946 00:47:44,260 --> 00:47:48,380 >> Nii teisisõnu, kui kasutaja liigid h-e-l-l-o enter, stringi pikkus 947 00:47:48,380 --> 00:47:49,260 Hello on viis. 948 00:47:49,260 --> 00:47:52,790 Nii viis nende bytes ei hakka kopeeritakse massiivi nimega c, mis 949 00:47:52,790 --> 00:47:54,110 on suurus 12. 950 00:47:54,110 --> 00:47:58,710 Aga milline kasutaja liigid palju kauem Sõna, mis on 13 märki või 14 951 00:47:58,710 --> 00:48:01,250 märgid või 100 tähemärki või rohkem? 952 00:48:01,250 --> 00:48:02,660 >> Kuhu nad lähevad minema? 953 00:48:02,660 --> 00:48:06,090 Noh, et raam, et salve söögisaalis-hall korstnat 954 00:48:06,090 --> 00:48:06,930 nad ei kavatse sinna minna. 955 00:48:06,930 --> 00:48:10,080 Ja see on ainult kavatse alustada kirjutades muid asju, mis on juba 956 00:48:10,080 --> 00:48:12,880 selle korstna täis stack nii rääkida. 957 00:48:12,880 --> 00:48:14,780 >> Nii piltlikult, mõtle seda nii. 958 00:48:14,780 --> 00:48:17,970 See on lihtsalt värviline versioon Pildil oleme juhtinud. 959 00:48:17,970 --> 00:48:20,060 Allosas, oletame, on peamine. 960 00:48:20,060 --> 00:48:24,690 Ja peal, mida te näete nüüd on raami värv kodeeritud Nüüd, 961 00:48:24,690 --> 00:48:26,090 funktsioon nimega foo. 962 00:48:26,090 --> 00:48:30,170 Aga mis on huvitav siin umbes suva, et siin on oma raami. 963 00:48:30,170 --> 00:48:32,860 Nii, et see välja nagu ma tegin vaid helesinine. 964 00:48:32,860 --> 00:48:35,220 Ja nüüd on see, kus c sulg 0 läheb. 965 00:48:35,220 --> 00:48:37,410 Ja see on koht, kus c sulg 11 läheb lõpuks. 966 00:48:37,410 --> 00:48:39,670 >> Teisisõnu, see juhtub olla esindatud ruut. 967 00:48:39,670 --> 00:48:42,320 Aga kui sa muudkui plopping baiti maha - või sümbolit - nad ei kavatse lõpetada 968 00:48:42,320 --> 00:48:46,070 üles asukoha 0 kogu tee üles 11 sest see on 0 indekseeritud. 969 00:48:46,070 --> 00:48:49,170 >> Aga kus on 13 märk läheb lõpuks? 970 00:48:49,170 --> 00:48:50,310 Kus on 14.? 971 00:48:50,310 --> 00:48:52,430 Kus on 50. iseloomu läheb lõpuks? 972 00:48:52,430 --> 00:48:54,070 >> See saab hoida allakäik. 973 00:48:54,070 --> 00:48:57,350 Sest kuigi me oleme tõmmatud pilt stack kasvab, 974 00:48:57,350 --> 00:48:59,920 aadressid, selgub, lähevad väike aadresse väike 975 00:48:59,920 --> 00:49:01,830 suunanäitajaks, et suur aadresse. 976 00:49:01,830 --> 00:49:03,540 Nii see lihtsalt hoiab läheb üles ja üles. 977 00:49:03,540 --> 00:49:05,660 >> Nii et kui kasutaja liigid Tere, see on tore. 978 00:49:05,660 --> 00:49:08,650 No viga, pole probleemi, kõik on ohutu. 979 00:49:08,650 --> 00:49:11,940 Aga kui kasutaja liigid, mida me tulen helistada võistleva kood esindajad 980 00:49:11,940 --> 00:49:16,040 üldnimetusega, rünnak, rünnak, rünnak, rünnak, mis võib juhtuda? 981 00:49:16,040 --> 00:49:19,760 >> Noh, kui kõik sisend, et kasutaja kirjutada ei ole lihtsalt mingi sõbralik 982 00:49:19,760 --> 00:49:21,540 või solvava tähekombinatsiooni. 983 00:49:21,540 --> 00:49:24,050 See on tegelikult märgijada et kui koostatakse see, 984 00:49:24,050 --> 00:49:26,050 see tegelikult on kood. 985 00:49:26,050 --> 00:49:29,570 Võibolla on see kood, mis kustutab kõik faili kõvakettale või saadab rämpsposti 986 00:49:29,570 --> 00:49:30,810 või midagi sellist. 987 00:49:30,810 --> 00:49:35,110 Pange tähele, et see, mis on võti on selles, et kui paha poiss sai õnn 988 00:49:35,110 --> 00:49:37,830 kirjutatakse punase tüki mälu - 989 00:49:37,830 --> 00:49:41,080 mida ma ei joonistanud minu pilt, vaid see Wikipedia pilt on siin - 990 00:49:41,080 --> 00:49:42,890 selle nn saatja aadress. 991 00:49:42,890 --> 00:49:47,470 >> Kui toit naaseb, kui swap naaseb, kuidas arvuti teame minna 992 00:49:47,470 --> 00:49:49,790 siin on siin all? 993 00:49:49,790 --> 00:49:52,920 Või tech segment kuni eespool kuidas see tead minna swap 994 00:49:52,920 --> 00:49:54,870 kood - 0-ja 1 aasta et kirjutada swap - 995 00:49:54,870 --> 00:49:56,020 Tagasi? 996 00:49:56,020 --> 00:50:00,450 Seal on nn saatja aadress salvestatakse sama freimi kohta 997 00:50:00,450 --> 00:50:02,140 samas kohvikus salve. 998 00:50:02,140 --> 00:50:06,080 >> Nii et kui paha poiss on nii tark, et pane rünnaku kood, rünnak kood, rünnak 999 00:50:06,080 --> 00:50:07,960 kood ja saada õnn - 1000 00:50:07,960 --> 00:50:11,630 sageli katse-eksituse teel - et kirjutada, et punane saatja aadress, 1001 00:50:11,630 --> 00:50:14,360 koos aadress ja teave väga top. 1002 00:50:14,360 --> 00:50:16,830 Teade 0835C080. 1003 00:50:16,830 --> 00:50:20,650 See on kirjutatud tagurpidi up top põhjustel me võib-olla uuesti. 1004 00:50:20,650 --> 00:50:22,050 See on see number. 1005 00:50:22,050 --> 00:50:25,790 >> Nii et kui paha poiss muutub õnn või on piisavalt targad, et kirjutada punane 1006 00:50:25,790 --> 00:50:29,480 riba mälu aadress kood, mis tal kuidagi 1007 00:50:29,480 --> 00:50:34,980 pritsitakse arvuti vist kelle kood läheb tagastatakse 1008 00:50:34,980 --> 00:50:38,260 niipea kui foo tehakse täidesaatva? 1009 00:50:38,260 --> 00:50:39,440 >> Paha koodi. 1010 00:50:39,440 --> 00:50:43,610 Nii et see rünnak kood, AAA jällegi võib saata rämpsposti, võib kustutada kõik failid 1011 00:50:43,610 --> 00:50:44,500 kõvakettal. 1012 00:50:44,500 --> 00:50:48,740 Aga see on see, mida tõeliselt stack overflow on või puhvri ületäitumise, või 1013 00:50:48,740 --> 00:50:51,060 buffer overflow rünnak. 1014 00:50:51,060 --> 00:50:54,400 >> Ja see on uskumatult, uskumatult levinud see päev, kus programmid on kirjutatud 1015 00:50:54,400 --> 00:50:58,220 C, C + +, ja isegi mõned muus keeles. 1016 00:50:58,220 --> 00:51:02,275 Selle hirmutav tähele, me lõpeb nali. 1017 00:51:02,275 --> 00:51:03,230 >> [Naer] 1018 00:51:03,230 --> 00:51:04,550 >> Näeme kolmapäeval. 1019 00:51:04,550 --> 00:51:07,920 1020 00:51:07,920 --> 00:51:10,310 Järgmise CS50 - 1021 00:51:10,310 --> 00:51:15,920 Nii et ma olen kõik välja disk lambid täna vaid oota, rasvavaba piima, pool telefoni 1022 00:51:15,920 --> 00:51:17,850 raamat, apelsinimahl et ma jõin täna. 1023 00:51:17,850 --> 00:51:20,370 1024 00:51:20,370 --> 00:51:22,780 USB kaabel, mutrivõti. 1025 00:51:22,780 --> 00:51:24,800 >> [Muusika mängib]