1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:11,261 [Muzikos grojimo] 3 00:00:11,261 --> 00:00:12,640 >> David J. Malan: Gerai. 4 00:00:12,640 --> 00:00:14,525 Tai CS50. 5 00:00:14,525 --> 00:00:16,009 Ir tai yra 5 savaitės pradžia. 6 00:00:16,009 --> 00:00:18,050 Ir kaip jūs galbūt jau pastebėjote, kai medžiagos 7 00:00:18,050 --> 00:00:21,050 vis tiek daugiau sudėtinga, šiek tiek tankesnis. 8 00:00:21,050 --> 00:00:24,560 >> Ir tai labai lengva, ypač jei Jūs buvote šio įpročio tam tikrą laiką, 9 00:00:24,560 --> 00:00:28,600 būti bando rašinėti žemyn dauguma ką mes darome, mes norim pasakyti klasėje. 10 00:00:28,600 --> 00:00:31,626 Tačiau suprantame, kad nėra gero idealus pedagoginis požiūris 11 00:00:31,626 --> 00:00:34,250 mokymosi tokia medžiaga, ir medžiaga apskritai. 12 00:00:34,250 --> 00:00:37,250 Ir todėl mes džiaugiamės galėdami pranešame, kad CS50 nuosavą Gheng 13 00:00:37,250 --> 00:00:39,780 Gong pradėjo rengti kanoninė rinkinys pastabos 14 00:00:39,780 --> 00:00:42,100 už kursą, viltis kuris yra tai, kad, viena, tai 15 00:00:42,100 --> 00:00:44,030 ne tik kaip nuoroda ir išteklių 16 00:00:44,030 --> 00:00:47,410 peržiūrint medžiagą ir vyksta atgal per medžiaga, kuri gali turėti 17 00:00:47,410 --> 00:00:51,230 pabėgo jums pirmą kartą aplink, bet taip pat, kad jūsų vadovai gali būti daugiau 18 00:00:51,230 --> 00:00:53,740 iki ne žemyn, kai jį ateina laikas į paskaitą, 19 00:00:53,740 --> 00:00:56,960 taip, kad jums gali užsiimti daugiau rūpestingai, kaip 20 00:00:56,960 --> 00:00:59,170 ne daugiau scribbly. 21 00:00:59,170 --> 00:01:02,510 >> Turint tai sakė, ką jūs rasite ant svetainė yra tokie dokumentai kaip šis. 22 00:01:02,510 --> 00:01:04,660 Ir pranešimas, viršuje kairėje, ten ne tik turinyje, 23 00:01:04,660 --> 00:01:06,920 bet ir laiko kodai, iš karto šokti jus 24 00:01:06,920 --> 00:01:09,077 į atitinkamą dalį į vaizdo internete. 25 00:01:09,077 --> 00:01:11,410 Ir kas Chang čia padarė yra, iš esmės, dokumentais 26 00:01:11,410 --> 00:01:13,340 kas atsitiko tai pirma paskaita. 27 00:01:13,340 --> 00:01:16,370 Ir daugelis iš paskaitų yra jau yra internete dabar su šiuo URL. 28 00:01:16,370 --> 00:01:20,110 Ir mes toliau rašyti likusią iš tų, kurią šios savaitės pabaigoje, 29 00:01:20,110 --> 00:01:22,380 todėl nereikia pasinaudoti šia išteklių. 30 00:01:22,380 --> 00:01:25,740 >> Taigi be tolesnio ceremonija, mes pradėjome žievelės atgal 31 00:01:25,740 --> 00:01:28,180 sluoksnis, kuris buvo styginių tam tikrą laiką. 32 00:01:28,180 --> 00:01:30,670 Ir ką mes galime pasakyti eilutę iš tikrųjų yra paskutinė savaitė? 33 00:01:30,670 --> 00:01:31,720 34 00:01:31,720 --> 00:01:32,900 Taigi char žvaigždė. 35 00:01:32,900 --> 00:01:34,900 Ir char žvaigždė, gerai, ką Ar tai iš tikrųjų reiškia? 36 00:01:34,900 --> 00:01:37,150 Na, visa tai laikas, jei mes buvo raginama funkciją, 37 00:01:37,150 --> 00:01:40,450 kaip getString ir saugojimas Vadinamasis grąža 38 00:01:40,450 --> 00:01:42,910 vertė getString į variable-- ji vadinama 39 00:01:42,910 --> 00:01:47,721 s tipas string-- mes buvo raštu kodo eilutę ten anksčiau. 40 00:01:47,721 --> 00:01:49,970 Ir tai tik tada, kai matau mano rašysenos čia padidintos 41 00:01:49,970 --> 00:01:51,930 man suvokti, kaip žiaurią tai. 42 00:01:51,930 --> 00:01:54,180 >> Tačiau, tarkime, kad dešinėje pusėje 43 00:01:54,180 --> 00:01:57,070 yra, vis tiek protingas vaizdavimas, kas 44 00:01:57,070 --> 00:01:58,880 vyksta jau visa tai laikas su getString. 45 00:01:58,880 --> 00:02:00,380 getString, žinoma, gauna eilutę. 46 00:02:00,380 --> 00:02:01,691 Bet ką tai iš tikrųjų reiškia? 47 00:02:01,691 --> 00:02:04,190 Tai reiškia, kad jis gauna iš riekė atmintis iš operacinės sistemos 48 00:02:04,190 --> 00:02:06,040 paskambinę funkciją, vadinamą malloc. 49 00:02:06,040 --> 00:02:07,390 Bet daugiau apie tai vėliau. 50 00:02:07,390 --> 00:02:09,139 Ir tada jis užpildo kad atminties riekė 51 00:02:09,139 --> 00:02:11,764 su raidėmis vartotojas įvestas, po, žinoma, 52 00:02:11,764 --> 00:02:14,800 null charakterio bruožų ar Backslash nulis pačioje pabaigoje. 53 00:02:14,800 --> 00:02:18,280 >> Tuo tarpu kairėje pusėje Šios istorijos, visą šį laiką, 54 00:02:18,280 --> 00:02:20,850 mes jau paskelbti kintamąjį, kaip s. 55 00:02:20,850 --> 00:02:24,770 Ir, kad kintamasis yra tai, ką dabar pradės skambinti žymeklį. 56 00:02:24,770 --> 00:02:29,190 Tai ne viduje, kuri lange mes įdėti eilutę, Daven per se, 57 00:02:29,190 --> 00:02:32,550 o mes įdėti toje aikštėje laukelio kairėje, ką tiksliai? 58 00:02:32,550 --> 00:02:34,890 59 00:02:34,890 --> 00:02:35,390 Taip? 60 00:02:35,390 --> 00:02:37,118 >> PUBLIKA: iš adresą kur jis yra atmintyje. 61 00:02:37,118 --> 00:02:38,118 >> David J. Malan: Būtent. 62 00:02:38,118 --> 00:02:40,690 Kur Daven adresas yra atmintyje. 63 00:02:40,690 --> 00:02:44,650 Ir ne ten, kur visi Daven yra, per se, bet specialiai adresas 64 00:02:44,650 --> 00:02:45,150 ką? 65 00:02:45,150 --> 00:02:46,311 66 00:02:46,311 --> 00:02:46,810 Taip? 67 00:02:46,810 --> 00:02:47,460 >> PUBLIKA: pirmasis simbolis. 68 00:02:47,460 --> 00:02:50,209 >> David J. Malan: pirmasis simbolis į Daven, kuris šiuo atveju, 69 00:02:50,209 --> 00:02:53,820 Aš pasiūliau buvo savavališkai ir nerealiai 1, OX1, 70 00:02:53,820 --> 00:02:55,910 kuris tiesiog reiškia, šešioliktainis skaičius 1. 71 00:02:55,910 --> 00:02:57,993 Bet tai tikriausiai bus būti žymiai didesnis skaičius 72 00:02:57,993 --> 00:03:01,260 kad mes galime padaryti su 0x kaip priešdėlis, 73 00:03:01,260 --> 00:03:02,806 atstovaujanti šešioliktainis charakterį. 74 00:03:02,806 --> 00:03:05,930 Ir todėl, kad mums nereikia žinoti, kur iš Daven simbolių poilsio 75 00:03:05,930 --> 00:03:09,860 yra, nes tai, ką paprastas dizainas sprendimas, kuris buvo priimtas prieš daugelį metų? 76 00:03:09,860 --> 00:03:10,548 Taip? 77 00:03:10,548 --> 00:03:11,651 >> PUBLIKA: Kairinis pasvirasis brūkšnys 0. 78 00:03:11,651 --> 00:03:12,900 David J. Malan: Taip, tiksliai. 79 00:03:12,900 --> 00:03:18,100 Backslash 0 leidžia jums, nors ir linijinis laikas, neigia eilutę, 80 00:03:18,100 --> 00:03:20,400 vaikščioti iš kairės į dešinę, su pasiūlymu dėl kilpa, ar laiko 81 00:03:20,400 --> 00:03:22,608 kilpa, ar kažkas panašaus , kad ir nustatyti, oi, čia 82 00:03:22,608 --> 00:03:24,751 yra šios konkrečios eilutės pabaigos. 83 00:03:24,751 --> 00:03:27,000 Taigi tik su adresu Styga pradžia 84 00:03:27,000 --> 00:03:30,290 mes galime prieiti prie visumos tai, nes visa tai, o, 85 00:03:30,290 --> 00:03:32,030 Styga neseniai buvo char žvaigždė. 86 00:03:32,030 --> 00:03:36,370 >> Taigi, tai tikrai gerai, ir toliau naudoti CS50 biblioteka ir tai abstrakcija, 87 00:03:36,370 --> 00:03:38,440 taip sakant, bet mes pradeda rodyti tiksliai 88 00:03:38,440 --> 00:03:41,230 tai, kas jau vyksta po visą šį laiką. 89 00:03:41,230 --> 00:03:45,260 Taigi jums gali prisiminti šį pavyzdį, taip pat nuo paskutinio karto, palyginti 0, 90 00:03:45,260 --> 00:03:47,300 kuris iš tikrųjų nebuvo palyginti. 91 00:03:47,300 --> 00:03:49,070 Bet mes pradėjome spręsti tai. 92 00:03:49,070 --> 00:03:52,020 >> Bet, kaip galbūt kvalifikacijos, galėčiau sudominti žmogų 93 00:03:52,020 --> 00:03:54,261 rausva dramblys šiandien taip pat padarė Chang? 94 00:03:54,261 --> 00:03:55,760 Kaip apie jus prieš? [Nesigirdi]. 95 00:03:55,760 --> 00:03:56,660 Nagi iki. 96 00:03:56,660 --> 00:03:58,740 >> Ir tuo tarpu, kaip sugalvoti, tegul 97 00:03:58,740 --> 00:04:01,670 apsvarstyti ir tik akimirką, ką šis kodas buvo iš tikrųjų daro. 98 00:04:01,670 --> 00:04:04,917 Tai skelbiantis du kintamuosius iki viršuje, s ir t, ir raginama getString. 99 00:04:04,917 --> 00:04:08,250 Tai nėra labai patogus programa, nes jis negali pasakyti, ką daryti. 100 00:04:08,250 --> 00:04:10,541 Bet tegul tiesiog manyti, kad mes sutelkiant dėmesį į sultingas dalis. 101 00:04:10,541 --> 00:04:14,470 Ir tada mes, jei s lygi lygi t, jis turėtų pasakyti printf, 102 00:04:14,470 --> 00:04:16,170 Jūs įvedėte tą patį. 103 00:04:16,170 --> 00:04:16,670 Sveiki. 104 00:04:16,670 --> 00:04:17,050 Koks tavo vardas? 105 00:04:17,050 --> 00:04:17,779 >> Janelle: Janelle. 106 00:04:17,779 --> 00:04:19,529 David J. Malan: Janelle, nice to meet you. 107 00:04:19,529 --> 00:04:21,800 Taigi jūsų uždavinys ne ranka už šį dramblį 108 00:04:21,800 --> 00:04:25,230 yra pirmasis atkreipti mums, kas paveikslėlį kuriai atstovauja tiems pirmieji du 109 00:04:25,230 --> 00:04:25,970 linijos. 110 00:04:25,970 --> 00:04:28,139 Taigi s ir t, gali būti atstovaujama, kaip ekrane? 111 00:04:28,139 --> 00:04:30,680 Ir jūs galite tiesiog atkreipti jį su pirštu į šį dideliame ekrane. 112 00:04:30,680 --> 00:04:31,780 113 00:04:31,780 --> 00:04:34,510 >> Taigi, čia yra dvi puses į kiekvienas šios lygties pusėje. 114 00:04:34,510 --> 00:04:37,760 Taigi, čia yra s į kairę, ir tada getString dešinėje. 115 00:04:37,760 --> 00:04:40,540 Ir tada ten t kairėje, ir tada getString dešinėje. 116 00:04:40,540 --> 00:04:42,630 Taigi, kaip gali mes pradėti piešimo vaizdą, kad 117 00:04:42,630 --> 00:04:46,340 atstovauja tai, kas vyksta čia iš atminties, būtų jums pasakyti? 118 00:04:46,340 --> 00:04:49,150 Ir leiskite man jums paaiškinti ką jūs darote, kaip jūs einate. 119 00:04:49,150 --> 00:04:49,820 >> Janelle: Gerai. 120 00:04:49,820 --> 00:04:58,890 Na, visų pirma, būtų prašoma jums gauti įvesties eilutę. 121 00:04:58,890 --> 00:05:00,439 Ir tai store-- oh, atsiprašau. 122 00:05:00,439 --> 00:05:01,230 David J. Malan: Gerai. 123 00:05:01,230 --> 00:05:01,730 Geras. 124 00:05:01,730 --> 00:05:03,330 Ir tai vadinama tai, ką? 125 00:05:03,330 --> 00:05:03,950 O, gerai. 126 00:05:03,950 --> 00:05:04,450 Tęsk. 127 00:05:04,450 --> 00:05:05,575 Aš nenorėjau nutraukti. 128 00:05:05,575 --> 00:05:07,060 Janelle: Atsiprašome. 129 00:05:07,060 --> 00:05:14,237 Taigi būtų įvesties jį į adresas of-- nežinote. 130 00:05:14,237 --> 00:05:17,320 Aš negaliu tiksliai prisiminti skaičių, bet aš manau, kad buvo pradėti su 0. 131 00:05:17,320 --> 00:05:18,420 >> David J. Malan: Tai viskas gerai, nes aš padariau numerius iki, 132 00:05:18,420 --> 00:05:19,650 todėl nėra teisingas atsakymas. 133 00:05:19,650 --> 00:05:22,105 >> Janelle: Pradedant nuo 0 lanko. 134 00:05:22,105 --> 00:05:24,000 >> David J. Malan: Gerai, kad elementas 0. 135 00:05:24,000 --> 00:05:24,765 Žinoma. 136 00:05:24,765 --> 00:05:28,295 >> Janelle: Ir tada, jei buvo kaip tik dviejų letter-- 137 00:05:28,295 --> 00:05:30,496 >> David J. Malan: Gerai, su Jumis. 138 00:05:30,496 --> 00:05:33,629 >> Janelle: Taigi elementas 0, ir tada elementas 1 arba elementas 2. 139 00:05:33,629 --> 00:05:36,670 David J. Malan: Ir kuris gabalas nuotrauka tu pieši dabar? 140 00:05:36,670 --> 00:05:37,690 Kvietimas getString? 141 00:05:37,690 --> 00:05:38,830 Arba s deklaracija? 142 00:05:38,830 --> 00:05:42,890 >> Janelle: deklaracija S, manau. 143 00:05:42,890 --> 00:05:45,980 Oi, getString, nes tai būti įvedamas į kiekvieną [? plotas. ?] 144 00:05:45,980 --> 00:05:46,510 >> David J. Malan: Geras. 145 00:05:46,510 --> 00:05:47,051 Būtent. 146 00:05:47,051 --> 00:05:49,300 Nors tai veiksmingai grąžina masyvo, prisiminti, 147 00:05:49,300 --> 00:05:53,300 kai mes grįžti eilutę, galime rodyklė į tą eilutę, naudojant 01 ir 2. 148 00:05:53,300 --> 00:05:56,180 Techniškai, tai yra tikriausiai atstovaujamos atskirų adresai, 149 00:05:56,180 --> 00:05:57,100 bet tai gerai. 150 00:05:57,100 --> 00:06:00,170 >> Taigi tarkime, jei aš galiu tik greitai perduoti, kur mes nerašomas 151 00:06:00,170 --> 00:06:04,320 paskutinį kartą, jei vienas iš stygos buvo g B LT, 152 00:06:04,320 --> 00:06:10,337 Kairinis pasvirasis brūkšnys 0, tokiu būdu atstovauja Gabe s įėjimas, kaip gali mes atstovaujame ai dabar? 153 00:06:10,337 --> 00:06:12,670 Jei tai atmintis, kuri yra buvo grąžinta getString? 154 00:06:12,670 --> 00:06:14,415 155 00:06:14,415 --> 00:06:17,610 >> Janelle: Ar tai būtų atstovaujamos lanku? 156 00:06:17,610 --> 00:06:18,750 >> David J. Malan: Pagal lanku? 157 00:06:18,750 --> 00:06:19,130 Na, ne. 158 00:06:19,130 --> 00:06:21,171 Leiskite tik pasakyti, pavaizduotomis piktogramo-, leiskite man tiesiog eiti į priekį 159 00:06:21,171 --> 00:06:25,710 ir pasiūlyti, kad, jei tai ai, tai yra gražinama reikšmė getString. 160 00:06:25,710 --> 00:06:29,482 Ir jūs atkreipė tai, kaip 0, 1, 2, kuris yra visiškai pagrįsta, nes mes 161 00:06:29,482 --> 00:06:30,940 gali indeksuoti į eilutę, kaip toks. 162 00:06:30,940 --> 00:06:33,340 Bet tiesiog, kad būtų suderinama su paskutinį kartą, leiskite man eiti į priekį 163 00:06:33,340 --> 00:06:37,310 ir savavališkai pasiūlyti, kad šis yra adresas 1, tai adresas 2 164 00:06:37,310 --> 00:06:39,597 tai adresas 3, ir taip toliau. 165 00:06:39,597 --> 00:06:41,430 Ir taip, tiesiog super aišku, kas vyksta 166 00:06:41,430 --> 00:06:44,580 eiti į s kaip kad rezultatas Pirmoji eilutė kodo pasakytumėte? 167 00:06:44,580 --> 00:06:45,420 >> Janelle: Adresas 1? 168 00:06:45,420 --> 00:06:46,420 >> David J. Malan: Būtent. 169 00:06:46,420 --> 00:06:47,190 Taigi spręsti 0x1. 170 00:06:47,190 --> 00:06:48,220 171 00:06:48,220 --> 00:06:51,230 Ir tuo tarpu, leiskite man eiti į priekį ir dubliuoti daug ką padarei 172 00:06:51,230 --> 00:06:52,740 ir įdėti savo paties k čia. 173 00:06:52,740 --> 00:06:56,340 Jei aš būčiau įveskite Gabe vėl, antrą kartą, 174 00:06:56,340 --> 00:07:01,530 , kai pasirodys su getString, kur, Žinoma, yra gabe ketinate eiti? 175 00:07:01,530 --> 00:07:02,280 Na, presumably-- 176 00:07:02,280 --> 00:07:04,935 177 00:07:04,935 --> 00:07:05,975 >> Janelle: Kaip čia? 178 00:07:05,975 --> 00:07:06,850 David J. Malan: Taip. 179 00:07:06,850 --> 00:07:08,516 Janelle: Arba jis taip pat tų pačių langelių? 180 00:07:08,516 --> 00:07:11,940 David J. Malan: Leiskite pasiūlyti, taip, tiksliai, todėl šių papildomų dėžės. 181 00:07:11,940 --> 00:07:15,230 Bet kas raktas dabar yra tai, kad net nors aš sudarytas jie gana arti 182 00:07:15,230 --> 00:07:18,650 together-- 0x1, tai yra 0x2-- iš tikrųjų, 183 00:07:18,650 --> 00:07:25,750 tai dabar gali būti adresas 0x10, Pavyzdžiui, ir 0x11, ir 0x12, 184 00:07:25,750 --> 00:07:26,870 ir kt. 185 00:07:26,870 --> 00:07:29,955 Ir taip, jei tai toks atvejis, tai, kas vyksta, kad galų gale čia t? 186 00:07:29,955 --> 00:07:30,830 >> Janelle: 0x10? 187 00:07:30,830 --> 00:07:31,830 David J. Malan: Būtent. 188 00:07:31,830 --> 00:07:33,180 Taigi 0x10. 189 00:07:33,180 --> 00:07:34,570 Ir todėl dabar, paskutinis klausimas. 190 00:07:34,570 --> 00:07:37,510 Jūs, iki šiol teko dirbti Sunkiausia drambliui iki šiol. 191 00:07:37,510 --> 00:07:42,650 Iki šiol, jei aš atsigriebti kodą vėl, kai aš padaryti, atsižvelgiant trijų, 192 00:07:42,650 --> 00:07:47,630 jei s lygus lygus k, ką aš iš tikrųjų lygindami, kad mes sudarytas čia? 193 00:07:47,630 --> 00:07:49,271 >> Janelle: Du adresai? 194 00:07:49,271 --> 00:07:50,270 David J. Malan: Būtent. 195 00:07:50,270 --> 00:07:53,350 Taigi aš sakau yra S lygi lygi t? 196 00:07:53,350 --> 00:07:56,210 Kitaip tariant, yra 1 lygi lygi 10? 197 00:07:56,210 --> 00:07:59,710 Ir, žinoma, Akivaizdus atsakymas dabar yra, ne. 198 00:07:59,710 --> 00:08:02,920 Ir taip ši programa yra galiausiai ketinate spausdinti, ką pasakytumėte? 199 00:08:02,920 --> 00:08:05,770 200 00:08:05,770 --> 00:08:08,405 >> Janelle: Ar tai būtų, Jūs įvedėte tą patį? 201 00:08:08,405 --> 00:08:11,446 >> David J. Malan: Taigi, jei s yra 1 ir t yra 10? 202 00:08:11,446 --> 00:08:13,320 >> Janelle: Jūs įvedėte skirtingus dalykus. 203 00:08:13,320 --> 00:08:13,570 >> David J. Malan: Būtent. 204 00:08:13,570 --> 00:08:14,480 Jūs įvedėte skirtingus dalykus. 205 00:08:14,480 --> 00:08:14,850 Viskas gerai. 206 00:08:14,850 --> 00:08:16,714 Taigi plojimų, jei galėtume, čia. 207 00:08:16,714 --> 00:08:17,214 [Plojimai] 208 00:08:17,214 --> 00:08:17,708 Tai buvo skausminga. 209 00:08:17,708 --> 00:08:18,208 Aš žinau. 210 00:08:18,208 --> 00:08:19,684 Gražiai padaryta. 211 00:08:19,684 --> 00:08:24,690 Taigi dabar galime pamatyti, jei mes negalime erzinti išskyrus ką nustatyti buvo. 212 00:08:24,690 --> 00:08:28,040 Ir, žinoma, kai mes fiksavome this-- kuri dabar aš atstovauju green-- 213 00:08:28,040 --> 00:08:29,690 mes padarėme keletą patobulinimų pora čia. 214 00:08:29,690 --> 00:08:32,409 Pirma, tik kaip sveiko proto Tikrinti, aš pirmą kartą patikrinti 215 00:08:32,409 --> 00:08:35,110 jei s lygi niekinis ir t lygi null. 216 00:08:35,110 --> 00:08:39,440 Ir tiesiog, kad būtų aišku, atveju gali būti s arba t niekinis kodą panašaus? 217 00:08:39,440 --> 00:08:43,140 218 00:08:43,140 --> 00:08:44,490 Kai gali s ar t yra niekinis. 219 00:08:44,490 --> 00:08:44,990 Taip? 220 00:08:44,990 --> 00:08:45,990 >> PUBLIKA: [nesigirdi]. 221 00:08:45,990 --> 00:08:49,490 222 00:08:49,490 --> 00:08:50,510 >> David J. Malan: Būtent. 223 00:08:50,510 --> 00:08:52,840 Jei eilutė, vartotojas įvedėte yra per ilgas 224 00:08:52,840 --> 00:08:56,140 kad tilptų į atmintį, arba kai keista kampe atvejis, kaip kad, 225 00:08:56,140 --> 00:08:59,010 getString, kaip matysime, pažodžiui Šiandien savo dokumentus, 226 00:08:59,010 --> 00:09:02,330 sako, kad ji grįš null kaip ypatingą sarginių vertė, 227 00:09:02,330 --> 00:09:05,417 ar tiesiog tarsi specialus simbolis tai reiškia, kad kažkas negerai. 228 00:09:05,417 --> 00:09:07,500 Taigi, mes norime patikrinti kad, nes paaiškėja, 229 00:09:07,500 --> 00:09:09,720 kad niekinis yra labai pavojinga vertė. 230 00:09:09,720 --> 00:09:14,250 >> Dažnai, jei bandysite daryti kažką null apimantis function-- perduoti ją 231 00:09:14,250 --> 00:09:17,470 kaip indėlį, už instance-- šią funkciją gali labai bus katastrofos ir su juo, 232 00:09:17,470 --> 00:09:19,090 imtis žemyn visą savo programą. 233 00:09:19,090 --> 00:09:22,570 Taigi ši trečioji linija dabar yra tiesiog sveikas protas patikrinti, klaidų tikrinimas, jei bus. 234 00:09:22,570 --> 00:09:25,450 Štai geras įprotis dabar mums patekti į bet kuriuo metu mes 235 00:09:25,450 --> 00:09:28,050 pabandykite naudoti vertę, kuri potencialiai gali būti niekinis. 236 00:09:28,050 --> 00:09:32,000 >> Dabar, ketvirtoje eilutėje čia "Jei strcmp (s, t)," gerai, 237 00:09:32,000 --> 00:09:33,180 kas tai omenyje? 238 00:09:33,180 --> 00:09:36,750 Na, mes sakėme, tai buvo labai trumpai pavadinta funkcija styginių palyginimas. 239 00:09:36,750 --> 00:09:40,370 Ir jos gyvenimo tikslas yra palyginti jo pirmasis argumentas prieš jį, antra, 240 00:09:40,370 --> 00:09:44,640 bet ne pagal jų adresus, kaip mes netyčia padarė akimirka 241 00:09:44,640 --> 00:09:48,270 prieš su raudona kodą, tačiau o palyginti šių dviejų 242 00:09:48,270 --> 00:09:53,210 virvelės žmogiškai intuityvus būdas, lyginant, prieš tai tai, 243 00:09:53,210 --> 00:09:56,690 prieš tai, prieš tai, ir tada sustabdyti, jeigu ir kai vienas 244 00:09:56,690 --> 00:09:59,590 arba abu mano pirštus hitai Atgal nerijos velniop 0. 245 00:09:59,590 --> 00:10:04,530 Taigi kažkas metų prieš įgyvendinama strcmp įgyvendinti mums funkcionalumas 246 00:10:04,530 --> 00:10:08,890 kad mes tikėjomės mes Dotarłeś tiesiog lyginant du paprastus vertybes. 247 00:10:08,890 --> 00:10:14,929 >> Dabar atvirai, aš nuolat piešinį visų šių įvairių skaičių. 248 00:10:14,929 --> 00:10:17,470 Tačiau realybė yra, aš buvau ateityje jie iki visą laiką. 249 00:10:17,470 --> 00:10:19,580 Ir todėl leiskite man tiesiog eiti į priekį ir rašinėti tai iš 250 00:10:19,580 --> 00:10:23,100 padaryti tašką, kad tuo tikslu dienos ir juda į priekį, 251 00:10:23,100 --> 00:10:30,160 mes ne iš tikrųjų vyksta rūpintis kas kreipiasi viskas yra iš tikrųjų 252 00:10:30,160 --> 00:10:30,790 atmintyje. 253 00:10:30,790 --> 00:10:34,320 Taigi, aš nesiruošia daryti tai rūšių skaičių tiek daug daugiau, 254 00:10:34,320 --> 00:10:38,970 Aš tiesiog abstrakti tai toli šiek tiek daugiau draugiškas su vos strėlių. 255 00:10:38,970 --> 00:10:42,060 >> Kitaip tariant, jei s žymeklis, gerai, tegul tiesiog piešti, pažodžiui, 256 00:10:42,060 --> 00:10:45,430 kaip rodykle, rodykle iš sau ką nors kita, 257 00:10:45,430 --> 00:10:48,280 , o ne nerimauti per daug apie Šių adresų individualiųjų požymių 258 00:10:48,280 --> 00:10:49,910 kuris, vėlgi, aš vistiek. 259 00:10:49,910 --> 00:10:52,680 Bet mes pamatysime tuos adresus, kartais, kai derinimo kodą. 260 00:10:52,680 --> 00:10:56,450 >> Dabar tuo tarpu, ši programa čia pataisymai, žinoma, 261 00:10:56,450 --> 00:10:58,720 kad lyginant problema šios dvi eilutės. 262 00:10:58,720 --> 00:11:00,260 Bet mes įvažiavo į kitą problemą. 263 00:11:00,260 --> 00:11:03,180 Tai buvo iš kopijos programuoti paskutinį kartą, 264 00:11:03,180 --> 00:11:06,880 , pagal kurią, aš bandžiau pasinaudoti tiesiog Pirmasis simbolis eilutę. 265 00:11:06,880 --> 00:11:09,620 Bet tai, kas buvo simptomas mes matėme paskutinį kartą, kai 266 00:11:09,620 --> 00:11:14,150 vartotojas įvedėte vertė, kaip Gabe mažosiomis raidėmis, nes s, 267 00:11:14,150 --> 00:11:19,310 tada mes priskirti s į t, kaip trečioje eilutėje ten, 268 00:11:19,310 --> 00:11:22,900 ir tada aš bandžiau pasinaudoti t laikiklį 0? 269 00:11:22,900 --> 00:11:25,950 Koks buvo poveikis keičiasi t laikiklį 0 čia? 270 00:11:25,950 --> 00:11:27,150 >> PUBLIKA: Jis pakeitė s. 271 00:11:27,150 --> 00:11:29,360 >> David J. Malan: Taip, Aš pakeičiau s, taip pat. 272 00:11:29,360 --> 00:11:31,050 Nes tai, kas buvo iš tiesų vyksta? 273 00:11:31,050 --> 00:11:34,130 Na, leiskite man pamatyti, jei aš galiu išvalyti iki šio paveikslėlyje, taip. 274 00:11:34,130 --> 00:11:41,390 >> Jei s, vėlgi, žodis g A, B, E, Backslash, 0 ir S 275 00:11:41,390 --> 00:11:44,084 mes toliau kuriame kaip dėžutėje čia, bet ne daugiau adresai. 276 00:11:44,084 --> 00:11:45,250 Leiskite nebedaryti dalykų. 277 00:11:45,250 --> 00:11:47,510 Leiskite tiesiog atkreipti paveikslėlį supaprastinti pasaulį. 278 00:11:47,510 --> 00:11:52,640 >> Kai aš pareiškiu, k su styginių t, , kuris sukuria tą atminties riekė. 279 00:11:52,640 --> 00:11:55,850 Aikštė atsitinka būti 32 bitai daugelyje kompiuterių. 280 00:11:55,850 --> 00:11:59,530 Iš tiesų, jei jūs kada nors girdėjote apie kompiuteris turintis 32 bitų architektūrą, 281 00:11:59,530 --> 00:12:03,000 tikrai išgalvotas kalbėti, kad tik reiškia, kad jis naudoja 32 bitų adresus. 282 00:12:03,000 --> 00:12:05,370 Ir kaip techninė žemę, jei jūs kada nors susimąstėte, 283 00:12:05,370 --> 00:12:09,630 kodėl vyresnio amžiaus kompiuteriai, jei jums iš tikrųjų bandė sriuba juos su daug RAM, 284 00:12:09,630 --> 00:12:12,360 gali turėti tik daugiausiai keturių gigabaitų RAM, 285 00:12:12,360 --> 00:12:14,860 gerai, kad dėl to, pažodžiui, jūsų senas kompiuteris galėtų tik 286 00:12:14,860 --> 00:12:17,250 skaičius toks didelis, kaip 4 Milijardas 4 milijardas baitų, 287 00:12:17,250 --> 00:12:20,590 nes ji buvo naudojant 32-bitų numeriai adresus. 288 00:12:20,590 --> 00:12:23,260 >> Tačiau bet kuriuo atveju, tai Pavyzdžiui, istorija daug paprastesnis. 289 00:12:23,260 --> 00:12:27,250 t yra tik dar vienas žymeklis, arba tikrai char žvaigždė, taip pat žinomas kaip styga. 290 00:12:27,250 --> 00:12:30,860 Ir kaip aš noriu atnaujinti šį paveiksliuką dabar su tuo antroje eilutėje kodą 291 00:12:30,860 --> 00:12:31,950 po taškelio, dot, dot? 292 00:12:31,950 --> 00:12:35,845 Kai aš styginių t lygi ai kabliataškį, kaip tai vaizdas pasikeis? 293 00:12:35,845 --> 00:12:37,500 294 00:12:37,500 --> 00:12:38,000 Taip? 295 00:12:38,000 --> 00:12:38,916 >> PUBLIKA: [nesigirdi]. 296 00:12:38,916 --> 00:12:41,087 297 00:12:41,087 --> 00:12:42,020 >> David J. Malan: Taip. 298 00:12:42,020 --> 00:12:42,600 Būtent. 299 00:12:42,600 --> 00:12:45,620 Aš tiesiog įdėti rodyklę nuo t dėžutė tuo pačiu adresu, 300 00:12:45,620 --> 00:12:47,570 pati pirmoji raidė išvedė. 301 00:12:47,570 --> 00:12:50,850 Arba techniškai, jei tai vaikinas vis dar buvo ne 0x1, 302 00:12:50,850 --> 00:12:53,052 tai kaip nors turėjau 0x1 čia ir 0x1 čia. 303 00:12:53,052 --> 00:12:54,760 Bet vėl, who cares apie adresus? 304 00:12:54,760 --> 00:12:56,345 Tai tiesiog idėja, kad dabar svarbiausia. 305 00:12:56,345 --> 00:12:57,720 Taigi, tai yra tai, kas vyksta čia. 306 00:12:57,720 --> 00:13:02,690 Taigi, žinoma, jei jūs darote t laikiklio 0, kuris yra masyvas žymėjimas, 307 00:13:02,690 --> 00:13:05,650 iš course-- ir atvirai, tai atrodo kaip ten masyvas per čia 308 00:13:05,650 --> 00:13:07,340 bet dabar ten tai keistai dalykas. 309 00:13:07,340 --> 00:13:11,160 Žinokite, kad programavimo kalba, C suteikia jums šią funkciją, 310 00:13:11,160 --> 00:13:14,650 , pagal kurią, net jei t yra žymeklis, arba s žymeklis, 311 00:13:14,650 --> 00:13:18,050 Jūs vis dar galite naudoti, kad susipažinę, patogus kvadratinių laikiklis 312 00:13:18,050 --> 00:13:22,520 notacijos eiti į pirmąjį elementą, arba antrasis elementas, arba bet koks elementas, 313 00:13:22,520 --> 00:13:26,130 kad žymeklis būtų nukreipta į, nes, matyt, ją 314 00:13:26,130 --> 00:13:29,410 yra, kaip šiuo atveju, nukreipta į tam tikrą masyvo. 315 00:13:29,410 --> 00:13:30,340 >> Taigi, kaip mes išspręsti šią problemą? 316 00:13:30,340 --> 00:13:33,660 Atvirai kalbant, tai yra, kai jis gavo tiek absoliuti iš pirmo žvilgsnio. 317 00:13:33,660 --> 00:13:35,340 Bet čia yra nauja ir patobulinta versija. 318 00:13:35,340 --> 00:13:37,460 >> Taigi, pirmiausia, aš gaunu atsikratyti CS50 bibliotekoje, 319 00:13:37,460 --> 00:13:41,170 tik atskleisti, kad S yra tikrai char žvaigždė, tiesiog sinonimas. 320 00:13:41,170 --> 00:13:43,540 Ir t pat char žvaigždė. 321 00:13:43,540 --> 00:13:48,290 Bet tai, kas vyksta ant dešinioji pusė tos linijos 322 00:13:48,290 --> 00:13:49,970 kur t yra priskiriama vertė? 323 00:13:49,970 --> 00:13:50,790 >> Kas yra malloc? 324 00:13:50,790 --> 00:13:51,630 Ką tai strlen? 325 00:13:51,630 --> 00:13:52,547 Kas yra sizeof (char)? 326 00:13:52,547 --> 00:13:54,380 Kodėl gi tai daro linija atrodo taip sudėtinga? 327 00:13:54,380 --> 00:13:55,713 Kas tai daro aukšto lygio? 328 00:13:55,713 --> 00:13:56,482 329 00:13:56,482 --> 00:13:57,440 Kas tai saugoti t? 330 00:13:57,440 --> 00:13:58,646 Taip? 331 00:13:58,646 --> 00:14:01,104 PUBLIKA: Tai paskirstant tam tikras atminties. 332 00:14:01,104 --> 00:14:03,032 Tai saugoti, manau, raidės [nesigirdi]. 333 00:14:03,032 --> 00:14:04,032 >> David J. Malan: Perfect. 334 00:14:04,032 --> 00:14:04,540 Puikiai. 335 00:14:04,540 --> 00:14:06,650 Tai paskirstant tam tikras suma atminties 336 00:14:06,650 --> 00:14:08,940 laikyti, matyt, ateities raides. 337 00:14:08,940 --> 00:14:11,310 Ir visų pirma, malloc Todėl grįžimas ką? 338 00:14:11,310 --> 00:14:13,114 339 00:14:13,114 --> 00:14:14,851 >> PUBLIKA: Grįžtant prie [nesigirdi]? 340 00:14:14,851 --> 00:14:15,850 David J. Malan: Būtent. 341 00:14:15,850 --> 00:14:18,850 Grįžtant prie tos atminties adresą, kuris yra išgalvotas būdas pasakyti, 342 00:14:18,850 --> 00:14:21,640 grąžina adresą Pirmas baitas tos atminties. 343 00:14:21,640 --> 00:14:25,460 Pareiga yra man prisiminti kiek atminties aš iš tikrųjų 344 00:14:25,460 --> 00:14:27,140 paskirstyti ar prašoma malloc už. 345 00:14:27,140 --> 00:14:28,384 >> Dabar, kiek tai yra? 346 00:14:28,384 --> 00:14:30,550 Na, nors ten iš skliausteliuose daug čia 347 00:14:30,550 --> 00:14:32,970 malloc trunka tik vieną argumentą. 348 00:14:32,970 --> 00:14:37,250 Ir aš nurodant strlen iš S, todėl suteikti man kaip ir daugelis baitai, nes yra s, 349 00:14:37,250 --> 00:14:37,800 bet ir pridėti vieną. 350 00:14:37,800 --> 00:14:38,300 Kodėl? 351 00:14:38,300 --> 00:14:39,030 352 00:14:39,030 --> 00:14:39,530 Taip? 353 00:14:39,530 --> 00:14:40,840 >> PUBLIKA: Backslash 0. 354 00:14:40,840 --> 00:14:41,840 David J. Malan: Būtent. 355 00:14:41,840 --> 00:14:43,423 Mes turime padaryti šiek tiek namų ruošos. 356 00:14:43,423 --> 00:14:45,970 Taigi nes ten Backslash 0, mes norime geriau prisiminti. 357 00:14:45,970 --> 00:14:47,310 Priešingu atveju, mes ketiname sukurti eilutę, kuri 358 00:14:47,310 --> 00:14:49,170 neturi tokios specialios terminatorius. 359 00:14:49,170 --> 00:14:52,640 >> Tuo tarpu, tiesiog super analinis, turiu sizeof (char), 360 00:14:52,640 --> 00:14:55,730 tik tuo atveju, kažkas eina My kodas ne ant CS50 prietaiso, 361 00:14:55,730 --> 00:14:58,220 bet gal skirtingų kompiuterių iš viso, kur simbolių 362 00:14:58,220 --> 00:15:01,470 yra vienas baitas, pagal susitarimą, bet du baitų, ar kažkas daugiau nei tai. 363 00:15:01,470 --> 00:15:04,490 Tai tiesiog super, super nelinkęs klaidų. 364 00:15:04,490 --> 00:15:06,940 Nors, iš tikrųjų, tai greičiausiai bus 1. 365 00:15:06,940 --> 00:15:11,490 >> Dabar, tuo tarpu, aš einu į priekį ir kopijuoti eilutė, t laikiklis i lygi t laikiklis s. 366 00:15:11,490 --> 00:15:14,962 Ir aš atidėti iki praėjusios savaitės kodo pamatyti, kas vyksta. 367 00:15:14,962 --> 00:15:17,670 Bet svarbiausia Takeaway, ir Priežastis, kodėl aš įdėti kodą dabar žalia, 368 00:15:17,670 --> 00:15:22,520 yra todėl, kad tą pačią paskutinę eilutę, t laikiklis 0 lygi toupper, 369 00:15:22,520 --> 00:15:25,230 turi įsigaliojo Kapitalizacija kuris seka? 370 00:15:25,230 --> 00:15:26,960 t / ar s? 371 00:15:26,960 --> 00:15:29,280 372 00:15:29,280 --> 00:15:30,580 Tai paskutinė eilutė kodą. 373 00:15:30,580 --> 00:15:32,930 374 00:15:32,930 --> 00:15:35,560 >> Tiesiog t, nes tai, kas atsitiko ir šį kartą, 375 00:15:35,560 --> 00:15:41,500 jei aš šiek tiek anuliuoti, kad paskutinis žingsnis, kas atsitiko, kai aš skambinti malloc, 376 00:15:41,500 --> 00:15:45,380 Aš iš esmės gauti atminties riekė tai yra tokio pat dydžio kaip originalas, 377 00:15:45,380 --> 00:15:47,020 nes tai aritmetinis aš. 378 00:15:47,020 --> 00:15:50,920 Aš saugojimo t adresą tos atminties riekė. 379 00:15:50,920 --> 00:15:53,370 Nors tai atrodo gražiai ir graži, gražus ir tuščias, 380 00:15:53,370 --> 00:15:56,882 Realybė yra ten, ką mes išlaikyti skambina, šiukšlių vertybes čia. 381 00:15:56,882 --> 00:15:59,340 Tai atminties riekė might labai gerai buvo naudojamas anksčiau, 382 00:15:59,340 --> 00:16:00,940 kelias sekundes, prieš kelias minutes. 383 00:16:00,940 --> 00:16:04,410 Taigi gali visiškai būti numeriai arba raidės ten, tiesiog atsitiktinai. 384 00:16:04,410 --> 00:16:08,580 Bet jie negalioja, kol aš aš užpildyti šią atminties riekė 385 00:16:08,580 --> 00:16:12,510 su realiais simboliais, kaip aš padaryti, kad už linijos ten. 386 00:16:12,510 --> 00:16:13,180 Visa tiesa? 387 00:16:13,180 --> 00:16:16,180 >> Taigi, dabar, iš kulminacija šie trys pavyzdžiai 388 00:16:16,180 --> 00:16:20,730 kad buvo, atrodytų, skaldytų paskutinį kartą, tai Sukeisti pavyzdys, ši funkcija 389 00:16:20,730 --> 00:16:23,670 dirbo ta prasme, kad jis pavertė a ir b. 390 00:16:23,670 --> 00:16:25,620 Bet tai nepadėjo kokiu kitu prasme? 391 00:16:25,620 --> 00:16:27,616 392 00:16:27,616 --> 00:16:28,614 Taip? 393 00:16:28,614 --> 00:16:29,612 >> PUBLIKA: [nesigirdi]. 394 00:16:29,612 --> 00:16:35,600 395 00:16:35,600 --> 00:16:36,700 >> David J. Malan: Būtent. 396 00:16:36,700 --> 00:16:39,530 Jei aš būčiau skambinti šią funkciją iš another-- pavyzdžiui, 397 00:16:39,530 --> 00:16:42,870 nuo panašaus pagrindinis, kur funkcija Turiu kintamasis, x ir y, kaip I 398 00:16:42,870 --> 00:16:46,160 padarė praėjusią savaitę, pats kodas, ir aš pereiti į x ir y 399 00:16:46,160 --> 00:16:49,860 Sukeisti ir tada skambinti Swap-- tai, Žinoma, yra teisinga versija 400 00:16:49,860 --> 00:16:52,220 yra tai, ką mes apie see-- ji neveikia. 401 00:16:52,220 --> 00:16:53,770 Taigi, kas yra pataisyti? 402 00:16:53,770 --> 00:16:56,850 >> Na, taip, tiesiog, kad būtų aišku, leiskite man eiti į priekį 403 00:16:56,850 --> 00:17:05,450 and-- duoti man vieną antra čia ir pamatyti jei aš galiu parodyti jums naujausia, kuris 404 00:17:05,450 --> 00:17:12,464 bus in-- pažiūrėkime, jei galiu rasti tai realus fast-- Gerai, [nesigirdi]. 405 00:17:12,464 --> 00:17:18,440 406 00:17:18,440 --> 00:17:19,240 Gerai, ten yra. 407 00:17:19,240 --> 00:17:21,000 Taigi ignoruoti komandas aš tiesiog rašyti. 408 00:17:21,000 --> 00:17:23,780 Noriu gauti ne paskutinės minutės pavyzdys 409 00:17:23,780 --> 00:17:27,960 nuo paskutinio karto, o dabar vadinama ne Sukeisti ryšius. 410 00:17:27,960 --> 00:17:30,200 >> Taigi ne Sukeisti kur mes baigėte paskutinį kartą, 411 00:17:30,200 --> 00:17:32,930 , pagal kurią, aš inicializuoti x 1 ir y 2. 412 00:17:32,930 --> 00:17:35,840 Aš tada skambinti Sukeisti, einančios į 1 ir 2. 413 00:17:35,840 --> 00:17:37,930 Ir tada ši funkcija dirbo tam tikra prasme, 414 00:17:37,930 --> 00:17:40,750 tačiau ji neturėjo nuolatinės Poveikis x ir y. 415 00:17:40,750 --> 00:17:45,430 Taigi po ranka klausimas, kaip dabar mes iš tikrųjų išspręsti šią problemą? 416 00:17:45,430 --> 00:17:47,820 Kas yra po ranka sprendimas? 417 00:17:47,820 --> 00:17:53,150 >> Na, swap.c, kuris yra naujas ir šiandien, pastebėsite skirtumus pora. 418 00:17:53,150 --> 00:17:54,700 x ir y yra tas pats. 419 00:17:54,700 --> 00:17:57,250 Bet kas yra aiškiai skiriasi apie 25 eilutėje? 420 00:17:57,250 --> 00:17:58,880 421 00:17:58,880 --> 00:18:01,715 Kas naujo ten, jei jūs žinote, kaip ji atrodė prieš sekundę? 422 00:18:01,715 --> 00:18:02,565 >> PUBLIKA: [nesigirdi]. 423 00:18:02,565 --> 00:18:03,440 >> David J. Malan: Taip. 424 00:18:03,440 --> 00:18:06,680 Taigi jungimo simboliai yra naujasis kūrinys sintaksė ne tik šioje programoje, 425 00:18:06,680 --> 00:18:08,560 bet ir apskritai CS50. 426 00:18:08,560 --> 00:18:10,680 Iki šiol, aš nemanau, kad mes matėme jokių pavyzdžių 427 00:18:10,680 --> 00:18:14,070 ar tikrai kalbėjo apie juos bet detalė, išskyrus, galbūt, Preemptively 428 00:18:14,070 --> 00:18:16,467 skyriuje, kaip tai ampersand. 429 00:18:16,467 --> 00:18:19,300 Na, it turns out ampersand yra vienas paskutinių gabalų naujos sintaksės 430 00:18:19,300 --> 00:18:20,174 mes ketiname mokytis. 431 00:18:20,174 --> 00:18:23,500 Visa tai reiškia, adresas tikru kintamuoju. 432 00:18:23,500 --> 00:18:25,070 Tuo, ką adreso x gyventi? 433 00:18:25,070 --> 00:18:26,510 Bet kas adreso y gyventi? 434 00:18:26,510 --> 00:18:28,700 Nes jei pagrindinė problema prieš 435 00:18:28,700 --> 00:18:32,970 buvo, kad x ir y gauna naudos iš kopijos, ką tikrai nori daryti 436 00:18:32,970 --> 00:18:38,780 yra suteikti Sukeisti su panašiu lobis žemėlapis, kuris veda ten, kur x ir y, faktiškai 437 00:18:38,780 --> 00:18:41,910 yra RAM, kad Sukeisti galite sekti, kad žemėlapį 438 00:18:41,910 --> 00:18:47,760 ir eiti ten, kur x ir y žymi vietoje ir pakeisti faktines reikšmes 1 ir 2 439 00:18:47,760 --> 00:18:48,270 ten. 440 00:18:48,270 --> 00:18:50,710 >> Taigi Sukeisti reikia šiek tiek pakeisti taip pat. 441 00:18:50,710 --> 00:18:53,760 Ir iš pirmo žvilgsnio, tai gali atrodo šiek tiek panašus į char žvaigždė. 442 00:18:53,760 --> 00:18:54,850 Ir iš tiesų jis yra. 443 00:18:54,850 --> 00:18:59,635 Taigi yra rodyklė, kokio tipo duomenis, remiantis šio paryškintos dalis? 444 00:18:59,635 --> 00:19:00,810 445 00:19:00,810 --> 00:19:01,620 Taigi, tai vid. 446 00:19:01,620 --> 00:19:04,880 >> Taigi nebėra int tai iš int adresas. 447 00:19:04,880 --> 00:19:07,910 Ir panašiai, b dabar vyksta būti iš int adresas. 448 00:19:07,910 --> 00:19:12,470 Taigi, kai aš dabar vadiname Sukeisti iš esmės, Nesiruošiu duoti SWAP 1 ir 2 dalys. 449 00:19:12,470 --> 00:19:15,540 Aš ruošiuosi duoti jį kaip Jaučio kažkas ir Jaučio kažkas, 450 00:19:15,540 --> 00:19:19,820 du adresai, kurie bus sukelti Sukeisti jų faktinį vietose 451 00:19:19,820 --> 00:19:21,310 Mano kompiuteris atmintyje. 452 00:19:21,310 --> 00:19:25,580 >> Taigi dabar, mano likusi įgyvendinimas reikia keisti tad. 453 00:19:25,580 --> 00:19:28,650 Kas akivaizdžiai skiriasi dabar šių trijų eilučių kodo? 454 00:19:28,650 --> 00:19:31,350 Yra suknisti kompai žvaigždutės visi visur, viskas gerai? 455 00:19:31,350 --> 00:19:33,014 Taigi, kas čia vyksta? 456 00:19:33,014 --> 00:19:33,514 Taip? 457 00:19:33,514 --> 00:19:35,055 >> PUBLIKA: Tai akivaizdžiai [nesigirdi]. 458 00:19:35,055 --> 00:19:36,832 459 00:19:36,832 --> 00:19:37,990 >> David J. Malan: Būtent. 460 00:19:37,990 --> 00:19:41,560 Taigi šiuo context-- ir tai buvo ne dizainas sprendimas geriausias, tiesa, 461 00:19:41,560 --> 00:19:42,530 prieš metus. 462 00:19:42,530 --> 00:19:45,110 Šiame kontekste, kur Jums tereikia žvaigždė, 463 00:19:45,110 --> 00:19:48,240 ir jūs neturite duomenų tipą, kaip int, nedelsiant į kairę, 464 00:19:48,240 --> 00:19:53,146 o tu turi vienodą ženklą, aiškiai, Šiame kontekste, kai jūs sakote, žvaigždė, 465 00:19:53,146 --> 00:19:56,980 tai reiškia, kad eiti į adresas tai yra. 466 00:19:56,980 --> 00:19:58,870 Sekite lobių žemėlapį, taip sakant. 467 00:19:58,870 --> 00:20:01,720 >> Ir tuo tarpu, pagal 37, tai reiškia tą patį. 468 00:20:01,720 --> 00:20:05,460 Eiti į adresų a ir įdėti ką ten? 469 00:20:05,460 --> 00:20:09,520 Nepriklausomai yra vieta, b nurodo. 470 00:20:09,520 --> 00:20:10,980 Kitaip tariant, eiti į b. 471 00:20:10,980 --> 00:20:12,130 Gauk šią vertę. 472 00:20:12,130 --> 00:20:15,620 Eiti į, o už lygūs pasirašyti, priskyrimo operatorių, 473 00:20:15,620 --> 00:20:17,010 įdėti šią vertę ten. 474 00:20:17,010 --> 00:20:19,272 >> Panašiai, int temp yra tik vid. 475 00:20:19,272 --> 00:20:20,730 Nieko reikia keisti apie temp. 476 00:20:20,730 --> 00:20:24,810 Tai tiesiog atsarginis stiklas Annenberg dėl tam tikrų pieno ir apelsinų sulčių. 477 00:20:24,810 --> 00:20:27,630 Bet aš reikia pasakyti, eikite į b. 478 00:20:27,630 --> 00:20:31,449 Eiti į tą paskirties vietą ir įdėti vertę temp ten. 479 00:20:31,449 --> 00:20:32,490 Taigi, kas vyksta tada? 480 00:20:32,490 --> 00:20:36,540 Kai aš iš tikrųjų skambinti Sukeisti šį kartą, jei šis pirmasis padėklas čia atstovauja Main, 481 00:20:36,540 --> 00:20:42,270 tai antras dėklas atstovauja Sukeisti, kai Galiu perduoti Ženklas x ir y ampersand 482 00:20:42,270 --> 00:20:47,150 iš Pagrindinė Sukeisti, tiesiog, kad būtų aišku, kas tai yra kamino rėmas priimanti? 483 00:20:47,150 --> 00:20:48,700 484 00:20:48,700 --> 00:20:49,200 Taip? 485 00:20:49,200 --> 00:20:50,180 >> PUBLIKA: [nesigirdi]. 486 00:20:50,180 --> 00:20:51,180 David J. Malan: Būtent. 487 00:20:51,180 --> 00:20:53,129 X adresas ir y adresas. 488 00:20:53,129 --> 00:20:55,170 Ir jūs galite galvoti apie tai kaip pašto adresais. 489 00:20:55,170 --> 00:20:58,772 33 Oxford Street ir 35 Oxford Street, ir jūs 490 00:20:58,772 --> 00:21:01,230 norite perkelti du pastatai kad yra ne tose vietose. 491 00:21:01,230 --> 00:21:04,680 >> Tai tarsi juokinga idėja, bet tai viskas, ką mes vadiname adresą. 492 00:21:04,680 --> 00:21:07,000 Kur pasaulyje galima jums rasti šiuos du int? 493 00:21:07,000 --> 00:21:09,470 Kur pasaulyje galima rasti tuos du pastatus? 494 00:21:09,470 --> 00:21:15,170 Taigi, jei pagaliau, po visą šį laiką aš eiti į šiandienos kodo ir kaupia 495 00:21:15,170 --> 00:21:22,110 Apsikeitimo sandorių ir paleisti ./swap, galiausiai, už Pirmą kartą mes iš tikrųjų matyti, kad 496 00:21:22,110 --> 00:21:25,330 mano vertybės yra iš tiesų Sėkmingai pavertė. 497 00:21:25,330 --> 00:21:30,860 Ir dabar, mes netgi galite imtis dėmesį tai, tarkim, gdb. 498 00:21:30,860 --> 00:21:32,740 >> Taigi leiskite man eiti į tą patį failą. 499 00:21:32,740 --> 00:21:35,010 Leiskite man eiti į priekį ir paleisti gdb apie ./swap. 500 00:21:35,010 --> 00:21:36,590 501 00:21:36,590 --> 00:21:40,547 Ir dabar, Swap, aš ruošiuosi eiti į priekį ir nustatyti lūžio tašką Maino. 502 00:21:40,547 --> 00:21:42,630 Ir dabar aš ruošiuosi eiti į priekį ir paleisti programą. 503 00:21:42,630 --> 00:21:45,810 Ir dabar mes matome savo kodą pristabdoma tos linijos. 504 00:21:45,810 --> 00:21:48,330 >> Jei aš einu į priekį ir spausdinti x, ką turėčiau pamatyti čia? 505 00:21:48,330 --> 00:21:49,314 506 00:21:49,314 --> 00:21:49,980 Tai klausimas. 507 00:21:49,980 --> 00:21:51,030 508 00:21:51,030 --> 00:21:51,530 Pasakykite, kad dar kartą? 509 00:21:51,530 --> 00:21:52,295 >> PUBLIKA: [nesigirdi]. 510 00:21:52,295 --> 00:21:53,910 >> David J. Malan: Taigi atsitiktiniai skaičiai, gal. 511 00:21:53,910 --> 00:21:56,010 Gal man pasisekė, ir tai gražus ir paprastas, kaip ir 0. 512 00:21:56,010 --> 00:21:57,230 Bet gal tai kai atsitiktinių skaičių. 513 00:21:57,230 --> 00:21:58,090 Šiuo atveju, aš laimingas. 514 00:21:58,090 --> 00:21:59,030 Jis tiesiog taip atsitinka, kad būtų 0. 515 00:21:59,030 --> 00:22:00,780 Bet tai iš tiesų laimė, nes ne tik aš 516 00:22:00,780 --> 00:22:06,280 įrašykite kitą, ir tada spausdinti x yra, kad linija kodą, linija 19, buvo įvykdytas. 517 00:22:06,280 --> 00:22:10,942 >> Tuo tarpu, jei aš tipo šalia ir vėl dabar atsispausdinti y, aš ruošiuosi pamatyti 2. 518 00:22:10,942 --> 00:22:13,900 Dabar, jei aš tipo šalia, jis ketina gauti šiek tiek klaidina, nes dabar, 519 00:22:13,900 --> 00:22:17,250 printf ketina pasirodyti ekranas, kaip jis tai padarė. x yra 1. 520 00:22:17,250 --> 00:22:18,606 >> Leiskite tai padaryti dar kartą. 521 00:22:18,606 --> 00:22:20,480 O dabar, štai kur viskas pasidaro įdomu. 522 00:22:20,480 --> 00:22:21,580 523 00:22:21,580 --> 00:22:26,580 Prieš aš vadinu Sukeisti ar net žingsnį į jį, tegul šiek tiek žvilgtelėti. 524 00:22:26,580 --> 00:22:28,980 x yra, vėlgi, 1. 525 00:22:28,980 --> 00:22:33,240 Y yra, žinoma, greitai normalumas Tikrinti, 2, todėl nėra sunku ten. 526 00:22:33,240 --> 00:22:35,740 Bet kas yra ampersand x? 527 00:22:35,740 --> 00:22:36,760 528 00:22:36,760 --> 00:22:39,350 Atsakymas, tai rūšies funky ieško. 529 00:22:39,350 --> 00:22:43,500 Bet int žvaigždė skliausteliuose yra tik GDP būdas pasakyti tai adresą. 530 00:22:43,500 --> 00:22:48,290 Tai ne int, tai rodyklė į int, arba kitaip žinomas kaip adresą. 531 00:22:48,290 --> 00:22:49,742 >> Kas tai yra beprotiškas dalykas? 532 00:22:49,742 --> 00:22:51,825 Mes niekada kažką labai patiko, kad prieš. 533 00:22:51,825 --> 00:22:53,650 534 00:22:53,650 --> 00:22:58,120 Taigi tai yra mano kompiuteryje adresas atmintis kur x atsitinka gyventi. 535 00:22:58,120 --> 00:22:59,040 Tai Jaučio kažkas. 536 00:22:59,040 --> 00:23:01,290 Ir tai, tiesą sakant, kodėl Aš pradėjau rengti rodykles, 537 00:23:01,290 --> 00:23:03,340 vietoj skaičiaus, nes kas tikrai rūpi 538 00:23:03,340 --> 00:23:06,890 kad jūsų int yra ypač adresas tai, kad didelis. 539 00:23:06,890 --> 00:23:12,160 Bet bffff0c4, visa tai yra iš tiesų šešioliktainius skaitmenis, 540 00:23:12,160 --> 00:23:13,720 kuris yra 0 per f. 541 00:23:13,720 --> 00:23:16,590 >> Taigi mes neketiname sustoti per ilgai ką tie dalykai yra. 542 00:23:16,590 --> 00:23:19,400 Bet jei aš atsispausdinti y, Žinoma, aš matau 2. 543 00:23:19,400 --> 00:23:22,440 Bet ampersand m, matau šį adresą. 544 00:23:22,440 --> 00:23:26,527 Ir pranešimas, už smalsus, kaip toli vienas nuo kito, yra x ir y? 545 00:23:26,527 --> 00:23:27,985 Galite ignoruoti dauguma adresą. 546 00:23:27,985 --> 00:23:29,330 547 00:23:29,330 --> 00:23:29,920 Keturi baitai. 548 00:23:29,920 --> 00:23:33,510 Ir tai atitinka mūsų anksčiau teigia, kad tai, kaip didelis yra int? 549 00:23:33,510 --> 00:23:34,130 Keturi baitai. 550 00:23:34,130 --> 00:23:37,420 Taigi atrodo, kad viskas rikiuojasi gražiai, kaip galite tikėtis, atmintyje. 551 00:23:37,420 --> 00:23:40,010 >> Taigi dabar galime tik pirmyn į šio straipsnio pabaigoje. 552 00:23:40,010 --> 00:23:43,290 Vykime į priekį ir įveskite žingsnį, pasinerti į Swap funkcija. 553 00:23:43,290 --> 00:23:46,880 Dabar pastebėsite, jei aš tipo, tai identiškas x adresą. 554 00:23:46,880 --> 00:23:52,130 Jei aš B tipo, tai vienodi į y adresą. 555 00:23:52,130 --> 00:23:57,020 Taigi, ką turėčiau pamatyti, jei aš sako, eikite adresu yra? 556 00:23:57,020 --> 00:23:58,120 Taigi spausdinti žvaigždė. 557 00:23:58,120 --> 00:24:00,130 Taigi žvaigždė reiškia eiti ten, šiame kontekste. 558 00:24:00,130 --> 00:24:02,730 Ženklas reiškia tai, kas iš adresas. 559 00:24:02,730 --> 00:24:05,000 Taigi žvaigždute priemones 1. 560 00:24:05,000 --> 00:24:09,590 Ir spausdinimo žvaigždė b suteikia man 2. 561 00:24:09,590 --> 00:24:15,750 >> Ir leiskite man manyti, bent jau šiuo metu, kad bent kodas, 562 00:24:15,750 --> 00:24:18,950 pajamos vykdyti, dabar gali būti motyvuotas per tokiu būdu. 563 00:24:18,950 --> 00:24:21,150 Bet mes peržiūrėti šią idėją prieš ilgas. 564 00:24:21,150 --> 00:24:23,850 Taigi šis Sukeisti versija dabar teisinga ir leidžia 565 00:24:23,850 --> 00:24:26,650 mums apsikeitimo šį konkretų duomenų tipą. 566 00:24:26,650 --> 00:24:29,120 >> Taigi bet kokie klausimai tada Swap? 567 00:24:29,120 --> 00:24:29,890 Dėl žvaigždė? 568 00:24:29,890 --> 00:24:30,690 Dėl adreso? 569 00:24:30,690 --> 00:24:33,270 Ir jūs pamatysite, su problema nustatyti 4, rūšiuoti, 570 00:24:33,270 --> 00:24:37,310 bet problema nustatyti 5, tikrai, kaip jie viskas yra naudinga ir gauti daug daugiau 571 00:24:37,310 --> 00:24:39,584 patogu su jais, kaip rezultatas. 572 00:24:39,584 --> 00:24:40,430 Nieko ne visi? 573 00:24:40,430 --> 00:24:40,930 Viskas gerai. 574 00:24:40,930 --> 00:24:44,350 Taigi malloc, vėlgi, ši funkcija kad tik skiria atminties, atminties 575 00:24:44,350 --> 00:24:45,330 paskirstymas. 576 00:24:45,330 --> 00:24:47,024 Ir kodėl tai yra naudinga? 577 00:24:47,024 --> 00:24:48,940 Na, visa tai laikas, jūs jau naudojate malloc. 578 00:24:48,940 --> 00:24:52,230 Jei manote, kad dabar, kaip getString darbus, matyt, tai 579 00:24:52,230 --> 00:24:56,140 klausia ką nors iš riekė atminties, kada vartotojas įveda eilutę 580 00:24:56,140 --> 00:24:59,040 į, nes mes tikrai nežinojo, kaip CS50 darbuotojų, 581 00:24:59,040 --> 00:25:02,710 kaip didelis tuos stygos, kad žmonės ketina įvesti gali būti. 582 00:25:02,710 --> 00:25:07,910 >> Taigi leiskite, kad pirmą kartą, pradėti Nulupkite Kaip veikia CS50 biblioteka darbai, 583 00:25:07,910 --> 00:25:10,990 būdu iš pavyzdžių pora kad nuves mus ten. 584 00:25:10,990 --> 00:25:15,300 Taigi, jei aš atverti gedit ir atverti scanf 0, 585 00:25:15,300 --> 00:25:17,055 mes ketiname pamatyti šį kodą. 586 00:25:17,055 --> 00:25:18,720 587 00:25:18,720 --> 00:25:23,530 Scanf 0, galima rasti už svetainės Šiandien yra gana keletą eilučių kodo 588 00:25:23,530 --> 00:25:25,351 čia 14 per 20. 589 00:25:25,351 --> 00:25:26,600 Ir pažiūrėkime, ką jis daro. 590 00:25:26,600 --> 00:25:28,920 Jis pareiškia, int, vadinamas x. 591 00:25:28,920 --> 00:25:30,850 Ji sako kažką panašaus skaičius prašom. 592 00:25:30,850 --> 00:25:33,940 Ir dabar ji sako, scanf% i & x. 593 00:25:33,940 --> 00:25:35,620 Taigi, čia yra naujų dalykų krūva ten. 594 00:25:35,620 --> 00:25:38,420 >> Bet scanf, galite rūšies galvoti iš kaip printf priešingai. 595 00:25:38,420 --> 00:25:40,090 printf, žinoma, grafika ekrane. 596 00:25:40,090 --> 00:25:44,410 scanf tarsi skenuoja nuo vartotojo klaviatūra kažkas jis ar ji įvedėte. 597 00:25:44,410 --> 00:25:46,550 >> % I kaip printf. 598 00:25:46,550 --> 00:25:49,410 Tai reiškia, tikėtis vartotojas tipo int. 599 00:25:49,410 --> 00:25:52,820 Ir dabar, kodėl manote, kad aš gali būti perduoti scanf & X? 600 00:25:52,820 --> 00:25:54,030 601 00:25:54,030 --> 00:25:57,770 Jei į gyvenimą scanf tikslas yra gauti kažką iš vartotojo, 602 00:25:57,770 --> 00:26:02,480 kas yra prasmė perduoti ją, ir x, o dabar? 603 00:26:02,480 --> 00:26:02,980 Taip? 604 00:26:02,980 --> 00:26:03,896 >> PUBLIKA: [nesigirdi]. 605 00:26:03,896 --> 00:26:05,540 606 00:26:05,540 --> 00:26:06,540 David J. Malan: Būtent. 607 00:26:06,540 --> 00:26:12,900 Nepriklausomai I žmogaus, įveskite, mano indėlis ketina būti išsaugotas toje vietoje. 608 00:26:12,900 --> 00:26:17,660 Tai nėra pakankamai, primename, kad tik pereiti į x, nes mes matėme jau, 609 00:26:17,660 --> 00:26:21,630 bet kuriuo metu jums praeiti tik žalio kintamasis, kaip int, prie kai kurių kitų funkcijų, 610 00:26:21,630 --> 00:26:25,640 Žinoma, ji gali pakeisti, kad kintamasis, bet ne visam laikui. 611 00:26:25,640 --> 00:26:27,360 Ji negali turėti įtakos pagrindinis poveikis. 612 00:26:27,360 --> 00:26:29,420 Tai gali pakeisti tik savo vietinį kopiją. 613 00:26:29,420 --> 00:26:32,560 Bet jei, vietoj to, jums nereikia man tikrąjį int, 614 00:26:32,560 --> 00:26:36,640 bet jūs man nurodymus kad int, aš dabar yra scanf, 615 00:26:36,640 --> 00:26:41,050 žinoma, aš galiu sekti, kad spręsti ir įdėti numerį ten 616 00:26:41,050 --> 00:26:43,280 todėl jūs turite prieigą prie jo taip pat. 617 00:26:43,280 --> 00:26:45,120 >> Taigi, kai aš paleisti šią programą, pažiūrėkime. 618 00:26:45,120 --> 00:26:49,660 Padaryti scanf 0 dot velniop, scanf 0. 619 00:26:49,660 --> 00:26:54,030 Ir jei aš dabar tipo numerį kaip 50 Ačiū už 50. 620 00:26:54,030 --> 00:26:58,150 Jeigu aš dabar įveskite panašaus skaičių neigiamas 1, už neigiamas 1. 621 00:26:58,150 --> 00:27:04,200 Aš dabar tipo numerio kaip 1,5, hm. 622 00:27:04,200 --> 00:27:06,030 Kodėl mano programa ignoruoja mane? 623 00:27:06,030 --> 00:27:07,300 624 00:27:07,300 --> 00:27:09,880 Na, nes tiesiog pasakiau tai tikėtis int tik. 625 00:27:09,880 --> 00:27:10,380 Viskas gerai. 626 00:27:10,380 --> 00:27:11,630 Štai viena versija apie tai. 627 00:27:11,630 --> 00:27:16,600 Paimkime dalykų vienu žingsniu ir siūlyti, kad tai nėra gerai. 628 00:27:16,600 --> 00:27:20,530 Ir čia slypi labai paprastą pavyzdį kaip mes galime pradėti rašyti kodą 629 00:27:20,530 --> 00:27:24,450 kad kiti žmonės gali išnaudoti arba kompromisą, darant blogus dalykus. 630 00:27:24,450 --> 00:27:28,336 Taigi linija 16, toks panašus dvasia, kad anksčiau, 631 00:27:28,336 --> 00:27:29,960 bet aš ne dėl jo int šį kartą. 632 00:27:29,960 --> 00:27:32,970 Aš paskelbti ją char žvaigždė, taip pat žinomas kaip eilutę. 633 00:27:32,970 --> 00:27:35,190 >> Bet ką tai iš tikrųjų reiškia? 634 00:27:35,190 --> 00:27:38,790 Taigi, jei aš neturiu nurodyti address-- ir Aš vadiname tai savavališkai, buferis, 635 00:27:38,790 --> 00:27:43,370 bet aš negalėjau skambinti ji s, kad būtų simple-- ir tada aš tai padaryti, paaiškinkite man, 636 00:27:43,370 --> 00:27:48,630 jei remiantis ankstesnių galėtumėte, logika, kas scanf daro pagal 18, 637 00:27:48,630 --> 00:27:55,000 jei perdavimą% s ir buferio, kuris yra adresas? 638 00:27:55,000 --> 00:27:58,210 Kas yra scanf, jei taikoma tiksli pati logika kaip versijoje 0, 639 00:27:58,210 --> 00:28:00,640 einu bandyti daryti čia, kai vartotojas įveda kažkas? 640 00:28:00,640 --> 00:28:02,630 641 00:28:02,630 --> 00:28:03,409 Taip? 642 00:28:03,409 --> 00:28:04,407 >> PUBLIKA: [nesigirdi]. 643 00:28:04,407 --> 00:28:07,401 644 00:28:07,401 --> 00:28:08,890 >> David J. Malan: Būtent. 645 00:28:08,890 --> 00:28:11,577 Scanf iki logika anksčiau, ketina imtis eilutę 646 00:28:11,577 --> 00:28:13,410 kad žmogaus įvedėte in-- tai dabar seka, 647 00:28:13,410 --> 00:28:15,790 tai ne skaičius, matyt, jei jis ar ji cooperates-- 648 00:28:15,790 --> 00:28:19,310 ir jis ketina bandyti įdėti, kad styginių atmintyje ne kokios adresą 649 00:28:19,310 --> 00:28:20,340 buferis nurodyta. 650 00:28:20,340 --> 00:28:23,870 Ir tai yra puiku, nes buferis iš tikrųjų reiškia būti adresas. 651 00:28:23,870 --> 00:28:30,470 >> Bet aš teigia, ši programa yra Buggy labai rimtas būdas, nes tai, ką vertės yra 652 00:28:30,470 --> 00:28:31,330 buferio pagal nutylėjimą? 653 00:28:31,330 --> 00:28:33,380 654 00:28:33,380 --> 00:28:34,790 Ką aš inicializuoti į? 655 00:28:34,790 --> 00:28:35,770 Kas riekė atminties? 656 00:28:35,770 --> 00:28:37,480 657 00:28:37,480 --> 00:28:38,620 Aš neturiu, tiesa? 658 00:28:38,620 --> 00:28:42,265 >> Taigi, nors aš skiriamos char žvaigždė, kad manimi nebėra vadinamas s 659 00:28:42,265 --> 00:28:48,030 tai vietoj vadinamas, buffer-- taip tegul atkreipti kintamojo vardą 660 00:28:48,030 --> 00:28:53,380 dabar kaip buffer-- jei aš ne vadinamas getString arba malloc čia 661 00:28:53,380 --> 00:28:56,030 kad iš esmės reiškia, kad buferis yra tik keletas šiukšlių vertė. 662 00:28:56,030 --> 00:28:57,030 >> Dabar ką tai reiškia? 663 00:28:57,030 --> 00:29:00,220 Tai reiškia, kad aš sakiau scanf tikėtis iš vartotojo eilutę. 664 00:29:00,220 --> 00:29:01,300 Ir žinote ką? 665 00:29:01,300 --> 00:29:03,883 Nepriklausomai šis dalykas yra nukreipta to-- ir piešiu klaustuką, 666 00:29:03,883 --> 00:29:07,060 bet iš tikrųjų, tai bus kažkas panašaus OX1, 2, 3, tiesa? 667 00:29:07,060 --> 00:29:10,730 Tai kai fiktyvus vertė, kad tik atsitinka, kad ten iš anksčiau. 668 00:29:10,730 --> 00:29:13,440 Taigi Kitaip tariant, tai tarsi buferis yra tik 669 00:29:13,440 --> 00:29:16,180 nukreipta į kažką atmintyje. 670 00:29:16,180 --> 00:29:17,610 Aš neįsivaizduoju, ką. 671 00:29:17,610 --> 00:29:24,130 >> Taigi, jei aš tipo Gabe dabar vyksta pabandyti įdėti G-a-b-e / 0 ten. 672 00:29:24,130 --> 00:29:25,530 Bet kas žino, kas tai yra? 673 00:29:25,530 --> 00:29:27,480 Ir praeityje, bet kartą mes bandėme paliesti 674 00:29:27,480 --> 00:29:29,770 atmintis, kuris nepriklauso mus, kas įvyko? 675 00:29:29,770 --> 00:29:31,020 676 00:29:31,020 --> 00:29:32,870 Arba beveik kiekvieną kartą. 677 00:29:32,870 --> 00:29:34,310 Segmentavimas kaltė, tiesa? 678 00:29:34,310 --> 00:29:37,829 >> Tai rodyklė, aš neįsivaizduoju, kur jis nukreipta. tai tik keletas atsitiktinių vertė. 679 00:29:37,829 --> 00:29:40,370 Ir, žinoma, jei jūs interpretuoti Atsitiktinis dydis, adresą, 680 00:29:40,370 --> 00:29:42,610 jūs ketinate eiti į kai atsitiktinė vieta. 681 00:29:42,610 --> 00:29:46,810 Taigi gabe tiesų gali avarijos mano programa šiuo atveju čia. 682 00:29:46,810 --> 00:29:50,600 >> Taigi, ką mes galime padaryti, kad beveik taip blogai? 683 00:29:50,600 --> 00:29:52,660 Apsvarstykite šį trečiasis ir galutinis pavyzdys scanf. 684 00:29:52,660 --> 00:29:53,890 685 00:29:53,890 --> 00:29:56,870 Ši versija yra geriau kokia prasme? 686 00:29:56,870 --> 00:29:57,990 687 00:29:57,990 --> 00:30:01,400 Jei esate patenkintas ankstesnė problema, tai yra geriau. 688 00:30:01,400 --> 00:30:02,250 Kodėl? 689 00:30:02,250 --> 00:30:03,250 >> PUBLIKA: [nesigirdi]. 690 00:30:03,250 --> 00:30:06,235 691 00:30:06,235 --> 00:30:07,110 David J. Malan: Geras. 692 00:30:07,110 --> 00:30:09,970 Taigi šis atvejis atitinka 16 yra geriau, ta prasme, 693 00:30:09,970 --> 00:30:12,030 kad mes aiškiai skiriant šiek tiek atminties. 694 00:30:12,030 --> 00:30:14,190 Mes ne naudojant malloc, mes naudojame savaitę 2 695 00:30:14,190 --> 00:30:16,060 požiūris tiesiog skelbiantis masyvą. 696 00:30:16,060 --> 00:30:18,130 Ir mes sakėme anksčiau, kad eilutė yra tik simbolių masyvas, 697 00:30:18,130 --> 00:30:19,690 todėl tai yra visiškai teisėta. 698 00:30:19,690 --> 00:30:22,910 Bet tai, žinoma, kaip Jūs dėmesį, kad fiksuoto dydžio, 16. 699 00:30:22,910 --> 00:30:25,440 >> Taigi ši programa yra visiškai saugus, jei aš tipo 700 00:30:25,440 --> 00:30:29,760 vienu ženklų eilutes, du charakteris stygos, 15 simbolių sekas. 701 00:30:29,760 --> 00:30:34,970 Bet kaip tik aš pradedu rašyti 16, 17, 18, 1000 charakterio stygos, 702 00:30:34,970 --> 00:30:37,390 kur yra ta eilutė ketina baigti? 703 00:30:37,390 --> 00:30:39,570 Jis ketina baigti iš dalies čia. 704 00:30:39,570 --> 00:30:42,820 Bet tada, kas žino, ką dar yra už ribų 705 00:30:42,820 --> 00:30:44,270 Šio ypač masyvo? 706 00:30:44,270 --> 00:30:48,015 >> Tai tarsi aš paskelbė 16 langelius čia. 707 00:30:48,015 --> 00:30:49,300 708 00:30:49,300 --> 00:30:52,690 Taigi, o ne atkreipti dėmesį visų 16, mes tiesiog apsimesti, kad aš sudarytas 16. 709 00:30:52,690 --> 00:30:56,540 Bet jei aš tada bandykite skaityti eilutę kad daug ilgiau, kaip 50 simbolių, 710 00:30:56,540 --> 00:31:01,270 Aš ruošiuosi pradėti naudoti a, b, c, d, x, y, z. 711 00:31:01,270 --> 00:31:04,916 Ir tai turbūt kai kurios kitos atminties segmentą 712 00:31:04,916 --> 00:31:06,790 kad, vėlgi, gali sukelti mano programa į avariją, 713 00:31:06,790 --> 00:31:10,600 nes aš neprašė nieko daugiau nei tik 16 baitų. 714 00:31:10,600 --> 00:31:12,260 >> Taigi, kas rūpi? 715 00:31:12,260 --> 00:31:13,880 Na, čia CS50 biblioteka. 716 00:31:13,880 --> 00:31:17,220 Ir dauguma tai tik kaip instrukcijų iki viršaus. 717 00:31:17,220 --> 00:31:21,670 CS50 biblioteka, visą šį laiką, turėjo šią eilutę, atitinkančią 52. 718 00:31:21,670 --> 00:31:23,680 Mes matėme Typedef arba pamatysite Typedef 719 00:31:23,680 --> 00:31:27,930 į pset 4, kuri tiesiog sukuria sinonimas, kai char žvaigždė gali būti daugiau 720 00:31:27,930 --> 00:31:29,290 tiesiog vadinama eilutę. 721 00:31:29,290 --> 00:31:31,540 Taigi, tai yra vienas iš Keletas mokymo ratai 722 00:31:31,540 --> 00:31:34,120 mes naudojamas slaptai po gaubtu. 723 00:31:34,120 --> 00:31:36,490 >> Tuo tarpu, čia yra funkcija, getchar. 724 00:31:36,490 --> 00:31:38,190 Dabar, matyt, nėra kūno į jį. 725 00:31:38,190 --> 00:31:40,273 Ir iš tiesų, jei aš nuolat slinkimo, aš ne iš tikrųjų 726 00:31:40,273 --> 00:31:42,080 matyti jokių diegimo Šių funkcijų. 727 00:31:42,080 --> 00:31:43,140 728 00:31:43,140 --> 00:31:45,516 Kaip sveiko proto patikrinti, kodėl taip yra? 729 00:31:45,516 --> 00:31:46,795 >> PUBLIKA: [nesigirdi]. 730 00:31:46,795 --> 00:31:47,670 David J. Malan: Taip. 731 00:31:47,670 --> 00:31:48,950 Taigi tai yra failo antraštės. 732 00:31:48,950 --> 00:31:52,520 Ir header failuose yra prototipus, plius kai kurių kitų dalykų, atrodo, 733 00:31:52,520 --> 00:31:53,780 kaip tikrų tipų. 734 00:31:53,780 --> 00:31:56,910 Bet CS50.c, kuri mes niekada davė jums atvirai, 735 00:31:56,910 --> 00:32:02,100 bet buvo ir CS50 prietaiso visi šį kartą, giliai viduje jos aplankus, 736 00:32:02,100 --> 00:32:04,990 pastebėsite, kad ten visa krūva funkcijų čia. 737 00:32:04,990 --> 00:32:06,720 >> Iš tiesų, tegul slinkite žemyn. 738 00:32:06,720 --> 00:32:08,810 Leiskite ignoruoti dauguma jų dabar. 739 00:32:08,810 --> 00:32:12,670 Bet pereikite getInt ir pamatyti, kaip getInt veikia. 740 00:32:12,670 --> 00:32:13,890 Taigi čia yra getInt. 741 00:32:13,890 --> 00:32:17,727 Ir jei jūs kada nors tikrai rūpinosi, kaip gauti int veikia, čia yra jo dokumentai. 742 00:32:17,727 --> 00:32:19,560 Ir tarp dalykų, ji sako, tai jums pasakys, 743 00:32:19,560 --> 00:32:21,340 ką ji gali grįžti dydžių verčių skalės. 744 00:32:21,340 --> 00:32:24,400 Tai iš esmės neigiama 2 mlrd teigiamas 2 mlrd, suteikti arba užtrukti. 745 00:32:24,400 --> 00:32:26,420 >> Ir it turns out, visa tai laikas, nors mes niekada 746 00:32:26,420 --> 00:32:28,570 buvo patikrinti jį, jei kas nors negerai, 747 00:32:28,570 --> 00:32:30,680 paaiškėja, kad visi šį kartą, getInt turi 748 00:32:30,680 --> 00:32:33,600 buvo grįžta ypatingą pastovus, o ne niekinis, 749 00:32:33,600 --> 00:32:36,760 o int_max, kuris yra Tiesiog programuotojas konvencija. 750 00:32:36,760 --> 00:32:38,846 Tai reiškia, kad čia yra ypatinga vertybė. 751 00:32:38,846 --> 00:32:41,470 Įsitikinkite, kad patikrinti, ar tai tik jei kas nors negerai. 752 00:32:41,470 --> 00:32:43,261 Bet mes niekada nesiteikė su, kad iki šiol 753 00:32:43,261 --> 00:32:45,200 nes vėl, tai yra skirtas supaprastinti. 754 00:32:45,200 --> 00:32:46,950 >> Bet kaip getInt gauti įgyvendinama? 755 00:32:46,950 --> 00:32:48,450 Na, vienas, jis nesiima jokių argumentų. 756 00:32:48,450 --> 00:32:49,390 Mes žinome, kad. 757 00:32:49,390 --> 00:32:50,820 Ji grąžina int. 758 00:32:50,820 --> 00:32:51,950 Mes žinome, kad. 759 00:32:51,950 --> 00:32:54,460 Taigi, kaip jis veikia po gaubtu? 760 00:32:54,460 --> 00:32:58,290 >> Taigi ten, matyt, begalinis kilpa, bent vienas pasirodymas. 761 00:32:58,290 --> 00:33:00,290 Atkreipkite dėmesį, kad mes naudojame getString. 762 00:33:00,290 --> 00:33:04,000 Štai įdomus. getInt ragina mūsų funkcija, getString. 763 00:33:04,000 --> 00:33:05,645 O dabar, kodėl galėtų tai būti atvejis? 764 00:33:05,645 --> 00:33:07,400 765 00:33:07,400 --> 00:33:09,842 Kodėl aš yra gynybinė čia atitinka 165? 766 00:33:09,842 --> 00:33:11,390 767 00:33:11,390 --> 00:33:15,639 Kas gali atsitikti linija 164, tiesiog, kad būtų aišku? 768 00:33:15,639 --> 00:33:16,930 Tai tas pats atsakymas kaip ir anksčiau. 769 00:33:16,930 --> 00:33:18,660 770 00:33:18,660 --> 00:33:20,089 Gali būti tik iš atminties. 771 00:33:20,089 --> 00:33:23,130 Kažkas negerai su getString, mes turime gebėti dirbti, kad. 772 00:33:23,130 --> 00:33:27,070 Ir priežastis, kodėl aš negrįžta null yra kad techniškai, NULL rodyklė. 773 00:33:27,070 --> 00:33:29,120 getInt turi grąžinti int. 774 00:33:29,120 --> 00:33:31,060 Taigi aš savavališkai nusprendė iš esmės, 775 00:33:31,060 --> 00:33:34,600 kad 2 mlrd, suteikti arba užtrukti, vyksta būti ypatinga vertę, kad aš niekada negali 776 00:33:34,600 --> 00:33:35,970 faktiškai gauti iš naudotojo. 777 00:33:35,970 --> 00:33:39,930 Tai tiesiog viena vertė Aš ruošiuosi atliekų atstovauti klaidos kodą. 778 00:33:39,930 --> 00:33:41,540 >> Taigi, dabar, ko gauti šiek tiek fantazijos. 779 00:33:41,540 --> 00:33:44,670 Ir tai ne visai tas pats funkcija kaip ir anksčiau, bet tai labai panašūs. 780 00:33:44,670 --> 00:33:50,120 Taigi pastebėsite, aš pareiškiu čia, linija 172, tiek int n ir char c. 781 00:33:50,120 --> 00:33:53,600 Ir tada aš naudoju šį funky linija, sscanf, kuris paaiškėja, 782 00:33:53,600 --> 00:33:55,990 nenuskaito iš klaviatūros eilutę. 783 00:33:55,990 --> 00:33:59,226 Ji stovi esamą eilutę, vartotojas jau įvedėte. 784 00:33:59,226 --> 00:34:02,100 Taigi, aš jau vadinamas getString, kuris tai turiu atmintyje eilutę. 785 00:34:02,100 --> 00:34:05,020 sscanf yra tai, ką norite skambinti parserem funkciją. 786 00:34:05,020 --> 00:34:07,760 Ji žiūri į eilutę aš įvestas, charakterį pobūdžio, 787 00:34:07,760 --> 00:34:09,250 ir daro kažką naudingo. 788 00:34:09,250 --> 00:34:10,969 Tai eilutė yra saugomi linijos. 789 00:34:10,969 --> 00:34:13,560 Ir aš žinau, kad tik vyksta atsarginę kopiją čia ir sako, oi, gerai, 790 00:34:13,560 --> 00:34:15,143 Aš pašaukiau jį ne s tai laikas, bet linija. 791 00:34:15,143 --> 00:34:15,989 792 00:34:15,989 --> 00:34:18,080 >> Ir dabar tai yra šiek tiek kitoks. 793 00:34:18,080 --> 00:34:22,480 Bet tai iš esmės reiškia, dėl priežasčių, mes šiek tiek bangų mūsų rankas šiandien, 794 00:34:22,480 --> 00:34:26,070 kad mes Tikriname pamatyti, jei vartotojas turi įvesti 795 00:34:26,070 --> 00:34:29,909 ir int, o gal dar charakteris. 796 00:34:29,909 --> 00:34:33,610 Jei vartotojas įvedėte int, tai bus saugomi n, nes aš 797 00:34:33,610 --> 00:34:36,739 artimųjų tai pagal adresą, nauja triukas mes matėme šiandien. 798 00:34:36,739 --> 00:34:41,570 Jei vartotojas taip pat įvestas Panašiai 123x, kad x 799 00:34:41,570 --> 00:34:45,060 ketina baigti raidė simbolių c. 800 00:34:45,060 --> 00:34:48,739 >> Dabar paaiškėja, kad sscanf man pasakys, protingai, 801 00:34:48,739 --> 00:34:54,750 kiek kintamieji buvo sscanf sėkmingai galėtų užpildyti. 802 00:34:54,750 --> 00:34:58,770 Taigi pagal šią logiką, jei funkcija Aš įgyvendinančius getInt, 803 00:34:58,770 --> 00:35:00,900 bet aš patikrinti, potencialiai vartotojui 804 00:35:00,900 --> 00:35:04,190 į įvedėte int Po kažkas, 805 00:35:04,190 --> 00:35:08,580 ką aš noriu sscanf s Grąžina reikšmę tikrai turi būti? 806 00:35:08,580 --> 00:35:10,950 Jei tikslas yra gauti tik nuo naudotojo int? 807 00:35:10,950 --> 00:35:13,980 808 00:35:13,980 --> 00:35:19,300 >> Taigi, jei sscanf grąžą 2, ką tai reiškia? 809 00:35:19,300 --> 00:35:21,660 Vartotojas turi įvesti kažkas panašaus, tiesiog, 810 00:35:21,660 --> 00:35:24,770 123x, kuris yra tiesiog nesąmonė. 811 00:35:24,770 --> 00:35:27,490 Tai klaida sąlyga, ir Noriu patikrinti, kad. 812 00:35:27,490 --> 00:35:32,960 >> Taigi, jei vartotojas įveda tai, kurią tai logika, ką sscanf grįžti, 813 00:35:32,960 --> 00:35:33,740 Ar galėtumėte pasakyti? 814 00:35:33,740 --> 00:35:35,070 815 00:35:35,070 --> 00:35:39,130 Taigi jis ketina grįžti 2, nes 123 ketina eiti čia 816 00:35:39,130 --> 00:35:41,580 ir x ketina baigti čia. 817 00:35:41,580 --> 00:35:43,970 Bet aš nenoriu x gauti užpildyti. 818 00:35:43,970 --> 00:35:48,580 Noriu sscanf tik pavyks pildymo pirma jos kintamųjų. 819 00:35:48,580 --> 00:35:52,490 Ir taip tai kodėl aš nori sscanf grąžinti 1. 820 00:35:52,490 --> 00:35:55,750 >> Ir jei tai virš galvos šiek tiek šiuo metu, tai visiškai gerai. 821 00:35:55,750 --> 00:36:00,030 Suprantu, nors, kad viena iš vertės getInt ir getString 822 00:36:00,030 --> 00:36:03,630 yra tai, kad mes darome su velniais tikrinti, kaip šis, kad daug klaidų 823 00:36:03,630 --> 00:36:07,130 , kad iki šiol, galite gana daug įrašykite nieko klaviatūroje, 824 00:36:07,130 --> 00:36:08,490 ir mes sugauti jį. 825 00:36:08,490 --> 00:36:10,592 Ir mes tikrai, darbuotojai, tikrai ne 826 00:36:10,592 --> 00:36:13,300 būti iš Bug šaltinis jūsų programa, nes mes gintis 827 00:36:13,300 --> 00:36:16,270 tikrinti visas kvailas dalykų, kad vartotojas gali padaryti, 828 00:36:16,270 --> 00:36:18,900 kaip rašyti eilutę, kai jūs tikrai norėjo int. 829 00:36:18,900 --> 00:36:21,350 Taigi now-- mes ateiti atgal į tai prieš long-- 830 00:36:21,350 --> 00:36:23,710 bet visą šį laiką, getString ir getInt turi 831 00:36:23,710 --> 00:36:29,950 buvo po kapotu, naudojant šį Pagrindinė idėja adresai atmintyje. 832 00:36:29,950 --> 00:36:32,580 >> Taigi dabar padarykime dalykus tiek patogesnis. 833 00:36:32,580 --> 00:36:38,740 Kaip Jūs galbūt žinote, iš Binky paskutinio LAIKĄ_ jei mano pelė bus cooperate-- taip 834 00:36:38,740 --> 00:36:42,560 mes turėjome šį kodą, kuris tiesą sakant, yra gana absurdiškas. 835 00:36:42,560 --> 00:36:45,330 Šis kodas pasiekia nieko naudinga, bet ji buvo pavyzdys 836 00:36:45,330 --> 00:36:48,330 kad profesorius Parlante naudojamas siekiant atstovauti 837 00:36:48,330 --> 00:36:51,840 kas vyksta programa, apimanti atmintį. 838 00:36:51,840 --> 00:36:54,850 >> Taigi leiskite atpasakoti tai istorija super trumpai. 839 00:36:54,850 --> 00:36:58,720 Šios pirmos dvi eilutės, visų Anglų, daryti tai, ką pasakytumėte? 840 00:36:58,720 --> 00:37:01,230 841 00:37:01,230 --> 00:37:05,430 Tiesiog pagrįstai žmogaus, tačiau šiek tiek techniniai terminai, imtis Pabandyti. 842 00:37:05,430 --> 00:37:06,346 PUBLIKA: [nesigirdi]. 843 00:37:06,346 --> 00:37:07,705 844 00:37:07,705 --> 00:37:11,080 >> David J. Malan: Gerai, jūs steigimo adresus savo x ir y kintamųjų. 845 00:37:11,080 --> 00:37:15,520 Ne visai, nes x ir y yra ne kintamieji tradicine prasme. 846 00:37:15,520 --> 00:37:18,054 x ir y yra adresai arba bus saugomi adresą. 847 00:37:18,054 --> 00:37:19,220 Taigi pabandykime dar kartą. 848 00:37:19,220 --> 00:37:21,010 Ne blogas pradžia, nors. 849 00:37:21,010 --> 00:37:21,510 Taip? 850 00:37:21,510 --> 00:37:22,426 >> PUBLIKA: [nesigirdi]. 851 00:37:22,426 --> 00:37:23,966 852 00:37:23,966 --> 00:37:24,840 David J. Malan: Geras. 853 00:37:24,840 --> 00:37:26,173 Aš manau, kad tai šiek tiek švaresnis. 854 00:37:26,173 --> 00:37:28,630 Deklaruojančiojo dvi rodykles, du sveikieji skaičiai. 855 00:37:28,630 --> 00:37:30,150 Ir mes vadindami juos X ir Y. 856 00:37:30,150 --> 00:37:32,790 Arba, jei mes buvome atkreipti tai kaip paveikslėlyje, vėlgi, 857 00:37:32,790 --> 00:37:36,410 prisiminti paprasčiausiai, kad visi mes darome su šia pirmoje eilutėje 858 00:37:36,410 --> 00:37:39,690 rengia langelį, kaip tai, su tam tikru šiukšlių vertė jį, 859 00:37:39,690 --> 00:37:41,920 ir pavadino jį X, ir tada kitą kaip šis langelis, 860 00:37:41,920 --> 00:37:43,880 su tam tikru šiukšlių vertę joje, vadindami jį m. 861 00:37:43,880 --> 00:37:45,810 Mes paskelbė du rodykles, kad galiausiai 862 00:37:45,810 --> 00:37:47,860 bus saugomi iš int adresą. 863 00:37:47,860 --> 00:37:49,170 Taigi, kad viskas ten. 864 00:37:49,170 --> 00:37:53,290 >> Taigi, kai Binky tai padarė, molis tiesiog atrodė taip. 865 00:37:53,290 --> 00:37:55,350 Ir Nikas tiesiog rūšies suvynioti rodykles, 866 00:37:55,350 --> 00:37:57,590 tarsi jie nėra nukreipta niekur visų pirma, todėl, kad jie tiesiog 867 00:37:57,590 --> 00:37:58,250 Šiukšlių vertės. 868 00:37:58,250 --> 00:38:01,670 Jie nėra aiškiai inicializuoti bet visų pirma. 869 00:38:01,670 --> 00:38:03,980 >> Dabar kitas linija kodas, prisiminti, buvo tai. 870 00:38:03,980 --> 00:38:07,510 Taigi pagrįstai patogus, bet šiek tiek techninės anglų, 871 00:38:07,510 --> 00:38:09,790 kas tai yra iš kodas darai linija? 872 00:38:09,790 --> 00:38:10,391 Taip? 873 00:38:10,391 --> 00:38:11,333 >> PUBLIKA: [nesigirdi]. 874 00:38:11,333 --> 00:38:12,746 875 00:38:12,746 --> 00:38:13,950 >> David J. Malan: Perfect. 876 00:38:13,950 --> 00:38:17,016 Tai paskirstant riekė atminties tai iš int dydis. 877 00:38:17,016 --> 00:38:18,140 Ir tai pusė atsakymo. 878 00:38:18,140 --> 00:38:20,056 Jūs atsakė teisę pusė išraiška. 879 00:38:20,056 --> 00:38:22,473 Kas vyksta dėl Kairėje pusėje lygybės ženklą? 880 00:38:22,473 --> 00:38:22,972 Taip? 881 00:38:22,972 --> 00:38:24,814 PUBLIKA: ir priskiria tai kintamojo x? 882 00:38:24,814 --> 00:38:27,690 >> David J. Malan: ir priskiria tai kintamojo x. 883 00:38:27,690 --> 00:38:31,650 Taigi, norint Priminti, dešinėje pusėje skiria pakankamai atminties saugoti int. 884 00:38:31,650 --> 00:38:34,150 Bet malloc specialiai grąžina adresą 885 00:38:34,150 --> 00:38:37,270 tos atminties riekė, kuri jūs tiesiog pasiūlė pasireiškia saugomi x. 886 00:38:37,270 --> 00:38:42,560 >> Taigi, ką Nikas padarė paskutinį kartą su Binky yra jis tempia, kad žymiklį out, molis, 887 00:38:42,560 --> 00:38:46,820 atkreipti dabar balto riekė atminties kad yra lygi int dydis. 888 00:38:46,820 --> 00:38:49,360 Ir iš tiesų, tai reiškia, atstovauti keturi baitai. 889 00:38:49,360 --> 00:38:55,310 >> Dabar, kitą eilutę kodo tai padarė, žvaigždutė x gauna 42. 890 00:38:55,310 --> 00:38:58,530 Taigi 42 yra paprasta ant dešinioji pusė, gyvenimo prasmė. 891 00:38:58,530 --> 00:39:00,500 Kairėje pusėje, žvaigždutė x reiškia ką? 892 00:39:00,500 --> 00:39:01,600 893 00:39:01,600 --> 00:39:03,280 Tai taip pat gali turėti gone-- kad viskas OK. 894 00:39:03,280 --> 00:39:04,220 Gerai. 895 00:39:04,220 --> 00:39:06,875 >> PUBLIKA: Iš esmės, eikite į [nesigirdi] 896 00:39:06,875 --> 00:39:07,750 David J. Malan: Geras. 897 00:39:07,750 --> 00:39:08,760 PUBLIKA: [nesigirdi]. 898 00:39:08,760 --> 00:39:09,760 David J. Malan: Būtent. 899 00:39:09,760 --> 00:39:11,979 Kairėje pusėje reiškia eiti į x. 900 00:39:11,979 --> 00:39:12,520 x yra adresas. 901 00:39:12,520 --> 00:39:15,520 Tai tarsi 33 Oxford Street, arba OX1. 902 00:39:15,520 --> 00:39:18,690 Ir žvaigždė x reiškia eiti į, kad spręsti ir įdėti ką ten? 903 00:39:18,690 --> 00:39:19,520 42. 904 00:39:19,520 --> 00:39:21,290 >> Taigi iš tiesų, tai būtent tai, ką Nikas padarė. 905 00:39:21,290 --> 00:39:23,740 Jis pradėjo su BY, iš esmės, psichiškai 906 00:39:23,740 --> 00:39:26,270 nukreipta į pirštą x, po rodykle 907 00:39:26,270 --> 00:39:30,670 baltojo laukelį dešinėje pusė, ir pradėti šį numerį 42 ten. 908 00:39:30,670 --> 00:39:34,120 Bet tada viskas gavo mažai pavojinga, tiesa? 909 00:39:34,120 --> 00:39:35,860 Binky yra apie prarasti galvą. 910 00:39:35,860 --> 00:39:39,465 >> Žvaigždžių y lygus 13, nepasisekimas, tai ką? 911 00:39:39,465 --> 00:39:43,620 Taigi y zvaigzdes priemonė eiti į adreso y. 912 00:39:43,620 --> 00:39:45,630 Bet kas yra Y adresas? 913 00:39:45,630 --> 00:39:47,899 914 00:39:47,899 --> 00:39:49,440 Gerai, tai šiukšlių vertė, tiesa? 915 00:39:49,440 --> 00:39:50,800 Aš patraukė jį kaip klaustuko. 916 00:39:50,800 --> 00:39:54,850 Nikas patraukė jį kaip susilankstyti iki rodyklės. 917 00:39:54,850 --> 00:39:59,600 Ir kuo greičiau, kaip jūs bandote daryti y zvaigzdes, sakydamas ten, 918 00:39:59,600 --> 00:40:03,872 bet nėra teisėtas adresas, tai kai fiktyvus vieta, 919 00:40:03,872 --> 00:40:05,080 Programa vyksta į avariją. 920 00:40:05,080 --> 00:40:08,580 Ir Binky galva vyksta nulėkti čia, kaip tai įvyko. 921 00:40:08,580 --> 00:40:12,130 >> Taigi, galų gale, šios programos buvo tik iš fiksuoto trūkumas. 922 00:40:12,130 --> 00:40:13,540 Tai buvo Buggy programa. 923 00:40:13,540 --> 00:40:14,760 Ir tai reikia nustatyti. 924 00:40:14,760 --> 00:40:18,260 Ir vienintelis būdas, tikrai, siekiant ją išspręsti būtų, pavyzdžiui, ši eilutė, 925 00:40:18,260 --> 00:40:21,010 kurį mes net ne gauti, nes programa sudužo per anksti. 926 00:40:21,010 --> 00:40:26,170 Bet jei mes išspręsti šią problemą, ką poveikis daro daro y lygios x turi? 927 00:40:26,170 --> 00:40:30,010 Na, ji iš esmės nurodo y ne kokia x vertė yra nukreipta ne. 928 00:40:30,010 --> 00:40:32,430 >> Taigi Nikas istorija, arba Binky istorija, tiek 929 00:40:32,430 --> 00:40:34,640 x ir y buvo nukreipta į baltos riekė atminties, 930 00:40:34,640 --> 00:40:38,300 kad, galiausiai, kai jums tai y zvaigzdes lygi 13 kartą, 931 00:40:38,300 --> 00:40:43,080 jūs galų gale išleisti 13 tinkama vieta. 932 00:40:43,080 --> 00:40:47,640 Taigi visų šių linijų puikiai teisėtas, išskyrus šį vieną, 933 00:40:47,640 --> 00:40:51,730 kai tai atsitiko prieš jus faktiškai suteiktas y šiek tiek vertę. 934 00:40:51,730 --> 00:40:54,290 >> Dabar, laimei, jūs ne turi samprotauti per visus 935 00:40:54,290 --> 00:40:56,560 iš šių klausimų rūšių apie savo. 936 00:40:56,560 --> 00:40:59,310 Leiskite man eiti į priekį ir atidaryti iki terminalo lange čia 937 00:40:59,310 --> 00:41:03,050 ir atverti, nes tik šiuo metu, super trumpas programa, kuri 938 00:41:03,050 --> 00:41:04,360 taip pat yra tarsi beprasmiška. 939 00:41:04,360 --> 00:41:05,152 Tai negraži. 940 00:41:05,152 --> 00:41:06,610 Jis neturi pasiekti nieko naudingo. 941 00:41:06,610 --> 00:41:10,180 Bet tai įrodyti klausimus atminties, todėl galime pažvelgti. 942 00:41:10,180 --> 00:41:11,830 >> Pagrindinis, super paprasta. 943 00:41:11,830 --> 00:41:14,830 Tai, matyt, vadina funkciją, f, tada grąžina 0. 944 00:41:14,830 --> 00:41:16,310 Tai tipo sunku netvarka tai padaryti. 945 00:41:16,310 --> 00:41:18,540 Taigi pagrindinis yra gana gera, iki šiol. 946 00:41:18,540 --> 00:41:20,100 >> Taigi f yra problemiškas. 947 00:41:20,100 --> 00:41:22,120 Ir tik neišleido daug pastangų į pavadinti jį 948 00:41:22,120 --> 00:41:23,990 čia laikyti ant kodas dėmesio. 949 00:41:23,990 --> 00:41:25,740 f turi dvi linijas. 950 00:41:25,740 --> 00:41:27,610 Ir pažiūrėkime, kas dabar vyksta. 951 00:41:27,610 --> 00:41:29,840 Taigi, viena vertus, here-- ir leiskite man padaryti 952 00:41:29,840 --> 00:41:32,680 tai atitinka ankstesnių example-- viena vertus, 953 00:41:32,680 --> 00:41:35,830 Kairėje pusėje yra daryti tai, ką, angliškai? 954 00:41:35,830 --> 00:41:36,493 Tai is-- 955 00:41:36,493 --> 00:41:37,701 PUBLIKA: Sukurti rodyklę. 956 00:41:37,701 --> 00:41:40,830 David J. Malan: Sukurti rodyklę int ir raginama ją x. 957 00:41:40,830 --> 00:41:43,789 Taigi tai sukurti vieną iš šių langelių Aš nuolat piešimo ant jutiklinio ekrano. 958 00:41:43,789 --> 00:41:45,913 Ir dabar, ant dešinėje pusė, malloc, žinoma, 959 00:41:45,913 --> 00:41:47,420 yra skiriančio atminties riekė. 960 00:41:47,420 --> 00:41:49,989 Ir tiesiog, kad būtų aišku, kaip Kiek atminties yra tai, matyt, 961 00:41:49,989 --> 00:41:52,030 skyrimą, jei jūs tiesiog rūšies padaryti matematiką čia? 962 00:41:52,030 --> 00:41:53,200 963 00:41:53,200 --> 00:41:54,040 >> Taigi, tai 40 baitų. 964 00:41:54,040 --> 00:41:57,400 Ir aš žinau, kad tik todėl, kad aš žinau, int ant CS50 prietaisą, bent jau 965 00:41:57,400 --> 00:41:58,060 yra keturi baitai. 966 00:41:58,060 --> 00:41:59,610 Taigi 10 kartų 4 40. 967 00:41:59,610 --> 00:42:04,924 Taigi, tai yra saugoti yra x, adresas pirmojo iš 40 int, kad 968 00:42:04,924 --> 00:42:07,340 buvo paskirstytos vietos atgal, atgal, atgal, į nugarą. 969 00:42:07,340 --> 00:42:08,470 >> Ir tai, ką raktas apie malloc. 970 00:42:08,470 --> 00:42:11,261 Ji neatsižvelgia į mažai atminties čia šiek tiek čia, tiek čia. 971 00:42:11,261 --> 00:42:14,220 Jis suteikia jums vieną riekė atminties, Kaimynystėje nuo veiklos 972 00:42:14,220 --> 00:42:15,240 sistema. 973 00:42:15,240 --> 00:42:18,500 >> Dabar, ką apie tai, x laikiklis 10 lygi 0? 974 00:42:18,500 --> 00:42:19,470 Savavališkas linija kodą. 975 00:42:19,470 --> 00:42:21,100 Jis neturi pasiekti nieko naudingo. 976 00:42:21,100 --> 00:42:26,128 Tačiau įdomu tai, nes x laikiklis 10--? 977 00:42:26,128 --> 00:42:26,628 Taip? 978 00:42:26,628 --> 00:42:27,912 >> PUBLIKA: [nesigirdi]? 979 00:42:27,912 --> 00:42:30,500 >> David J. Malan: x laikiklis 10 neturi būti tuščias. 980 00:42:30,500 --> 00:42:35,070 Null detalė tik ateina į žaidimą su stygos, ne iš eilutės pabaigos. 981 00:42:35,070 --> 00:42:36,700 Bet gera mintis. 982 00:42:36,700 --> 00:42:39,615 >> Kaip didelis yra šis masyvas, net nors aš skyrė 40 baitų? 983 00:42:39,615 --> 00:42:42,560 984 00:42:42,560 --> 00:42:43,690 Tai 0 per devynių, tiesa? 985 00:42:43,690 --> 00:42:45,120 Tai 10 ints, iš viso. 986 00:42:45,120 --> 00:42:48,790 40 baitų, tačiau 10 ints, indeksuojami 0 per 0. 987 00:42:48,790 --> 00:42:50,930 >> Taigi, kas yra, kad x laikiklis 10? 988 00:42:50,930 --> 00:42:53,090 Tai tikrai kai nežinoma šiukšlių vertė. 989 00:42:53,090 --> 00:42:54,780 Tai atmintis, kuri nepriklauso man. 990 00:42:54,780 --> 00:42:59,650 Aš neturėtų būti neliesti, kad baitų skaičius 41, 42, 43, 44. 991 00:42:59,650 --> 00:43:01,420 Aš ruošiuosi šiek tiek per toli. 992 00:43:01,420 --> 00:43:04,490 >> Ir iš tiesų, jei aš paleisti šią programa, ji gali labai gerai avariją. 993 00:43:04,490 --> 00:43:05,790 Bet kartais, mes gauti pasisekė. 994 00:43:05,790 --> 00:43:07,706 Ir taip tik parodyti this-- ir atvirai, 995 00:43:07,706 --> 00:43:11,000 Jūs niekada nežinote, prieš jus do it-- Bėkim tai. 996 00:43:11,000 --> 00:43:12,480 Tai iš tikrųjų nebuvo avariją. 997 00:43:12,480 --> 00:43:15,032 >> Bet jei aš tai pakeisti, ir Pavyzdžiui, kad bus kaip 1000, 998 00:43:15,032 --> 00:43:16,740 kad tai tikrai sąmoningas, pažiūrėkime, 999 00:43:16,740 --> 00:43:18,710 jei mes galime gauti jį katastrofos šį kartą. 1000 00:43:18,710 --> 00:43:20,070 Gerai, jis nebuvo avariją. 1001 00:43:20,070 --> 00:43:22,600 Kaip apie 100,000? 1002 00:43:22,600 --> 00:43:25,000 Leiskite perdaryti jį, o dabar iš naujo paleisti jį. 1003 00:43:25,000 --> 00:43:25,500 Gerai. 1004 00:43:25,500 --> 00:43:25,960 Phew. 1005 00:43:25,960 --> 00:43:26,460 Viskas gerai. 1006 00:43:26,460 --> 00:43:29,090 Taigi, matyt, vėlgi, tai segmentai atminties, taip sakant, 1007 00:43:29,090 --> 00:43:32,660 yra pakankamai didelis, todėl mes galime gauti pasisekė vėl ir vėl. 1008 00:43:32,660 --> 00:43:36,510 Bet galų gale, kai gausite juokinga ir tikrai eiti toli ekrane, 1009 00:43:36,510 --> 00:43:39,120 Palietus atmintį, kad tikrai, tikrai nepriklauso jums. 1010 00:43:39,120 --> 00:43:40,870 >> Bet tiesą sakant, tai rūšių vabalų vyksta 1011 00:43:40,870 --> 00:43:43,020 būti sunkiau ir sunkiau išsiaiškinti savo. 1012 00:43:43,020 --> 00:43:47,880 Bet laimei, kaip programuotojai, mes turime įrankiai, kurie leidžia mums tai padaryti už mus. 1013 00:43:47,880 --> 00:43:50,140 Taigi, tai, ko gero, vienas iš ugliest programas, 1014 00:43:50,140 --> 00:43:52,060 net bjauresnis nei GDB produkcijos. 1015 00:43:52,060 --> 00:43:55,670 Bet ji visada turi liniją arba du, kad yra super naudinga. 1016 00:43:55,670 --> 00:44:00,310 >> Valgrind yra programa, kuri padeda jūs ne debug programą, per se, 1017 00:44:00,310 --> 00:44:03,500 bet rasite atmintis susijusi problemos, ypač. 1018 00:44:03,500 --> 00:44:07,590 Jis bus automatiškai paleisti savo kodą Jūs ir surasti bent dviejų dalykų. 1019 00:44:07,590 --> 00:44:10,680 Vienas iš jų, tu kažką atsitiktinis, kaip touch atminties 1020 00:44:10,680 --> 00:44:11,980 kad ne priklauso jums? 1021 00:44:11,980 --> 00:44:13,590 Tai padės jums rasti tuos atvejus. 1022 00:44:13,590 --> 00:44:15,710 >> Ir du, tai padės jums rasti kažką, vadinamą 1023 00:44:15,710 --> 00:44:19,270 Atminties nutekėjimas, kurią mes visiškai ignoruojamas, naiviai, 1024 00:44:19,270 --> 00:44:21,380 tam tikrą laiką ir palaimingai. 1025 00:44:21,380 --> 00:44:23,140 Bet pasirodo, visi šį kartą, kai 1026 00:44:23,140 --> 00:44:26,620 jūs vadinamas getString į tiek daug iš mūsų programų, 1027 00:44:26,620 --> 00:44:28,930 Jūs esate klausia operacinės sistema atmintyje, 1028 00:44:28,930 --> 00:44:32,070 bet turite atsiminimai kada nors suteikiant jai 1029 00:44:32,070 --> 00:44:36,169 atgal, daro NEPASK arba nemokamai, kaip tai vadinama. 1030 00:44:36,169 --> 00:44:37,960 Ne, nes mes niekada paprašė tai padaryti. 1031 00:44:37,960 --> 00:44:41,250 >> Bet visa tai laikas, programos rašote C 1032 00:44:41,250 --> 00:44:43,800 buvo nesandarus atminties, klausia operacinės 1033 00:44:43,800 --> 00:44:46,190 sistema vis labiau ir labiau atminties styginiams ir Papuošalą, 1034 00:44:46,190 --> 00:44:47,870 bet niekada atiduodami jį atgal. 1035 00:44:47,870 --> 00:44:50,080 Ir dabar tai yra šiek tiek iš supaprastinimas, 1036 00:44:50,080 --> 00:44:53,550 Bet jei jūs kada nors paleisti Mac arba Jūsų kompiuteris gana ilgą laiką, atidarymo 1037 00:44:53,550 --> 00:44:55,790 daug programų, gal uždarymo programoms, 1038 00:44:55,790 --> 00:44:57,795 ir nors jūsų kompiuteris nėra sudužo, 1039 00:44:57,795 --> 00:45:01,690 tai vis tiek daug lėtesnis, kaip nors, tai tikrai 1040 00:45:01,690 --> 00:45:04,290 naudojant daug atminties arba ištekliai, nors, 1041 00:45:04,290 --> 00:45:06,070 jei nesate net neliesti klaviatūra, 1042 00:45:06,070 --> 00:45:10,430 kad galėtų be-- bet ne always-- galėtų būti, kad programos jūs naudojate 1043 00:45:10,430 --> 00:45:11,920 pačios turi Atminties nutekėjimas. 1044 00:45:11,920 --> 00:45:15,645 Ir jie nuolat klausia OS daugiau ir daugiau atminties, tačiau pamiršta apie tai, 1045 00:45:15,645 --> 00:45:18,470 nėra faktiškai naudojant jį, bet Todėl atsižvelgiant atmintį toli 1046 00:45:18,470 --> 00:45:20,500 iš kitų programų, kurios gali norėti jį. 1047 00:45:20,500 --> 00:45:23,940 Štai bendras paaiškinimas. 1048 00:45:23,940 --> 00:45:25,940 Dabar čia, kur Valgrind s produkcija yra visiškai 1049 00:45:25,940 --> 00:45:29,290 žiaurią tiems mažiau ir patogesnis panašūs. 1050 00:45:29,290 --> 00:45:32,690 Bet įdomu Daiktai yra teisinga čia. 1051 00:45:32,690 --> 00:45:37,060 Jis pasakojo neteisingą rašyti apie dydis keturių atsitiks šioje programoje, 1052 00:45:37,060 --> 00:45:40,640 visų pirma, iš memory.c 21 eilutėje. 1053 00:45:40,640 --> 00:45:45,450 >> Jei aš einu į liniją 21, hm, ten iš tikrųjų yra negaliojantis rašymo dydžio keturių. 1054 00:45:45,450 --> 00:45:46,250 Kodėl dydis keturių? 1055 00:45:46,250 --> 00:45:49,500 Na, tai number-- ir gali būti anything-- yra vid. 1056 00:45:49,500 --> 00:45:50,450 Taigi tai keturi baitai. 1057 00:45:50,450 --> 00:45:52,550 Taigi, aš išleisti keturi baitai kur jie nepriklauso. 1058 00:45:52,550 --> 00:45:55,080 Štai ką Valgrind iš tikrųjų man sako. 1059 00:45:55,080 --> 00:45:57,600 Be to, ji taip pat bus pasakykite man, kaip matysime, 1060 00:45:57,600 --> 00:46:01,490 kaip paleisti tai būsimo pset, jei ir kai jūs nutekėjo atminties, kuri iš tiesų 1061 00:46:01,490 --> 00:46:05,300 Turiu, nes aš vadinamas malloc, bet aš ne iš tikrųjų 1062 00:46:05,300 --> 00:46:08,010 vadinamas, šiuo atveju, nemokamai, kurią mes galų gale pamatyti 1063 00:46:08,010 --> 00:46:09,830 yra malloc priešais. 1064 00:46:09,830 --> 00:46:10,860 1065 00:46:10,860 --> 00:46:12,930 >> Taigi, dabar, manau, galutinį pavyzdį. 1066 00:46:12,930 --> 00:46:14,050 1067 00:46:14,050 --> 00:46:16,690 Taigi, tai viena yra šiek tiek daugiau paslaptinga, bet tai galbūt 1068 00:46:16,690 --> 00:46:19,180 Didžiausia priežastis, kad Būkite atsargūs su atmintim, 1069 00:46:19,180 --> 00:46:24,490 ir todėl, kad daug programų, ir / arba interneto serverių, net iki šios dienos, 1070 00:46:24,490 --> 00:46:28,200 perėmė blogi vaikinai kažkur internete, kurie yra vienaip ar kitaip 1071 00:46:28,200 --> 00:46:33,390 siųsti netikrą paketus į serverį bando sukompromituoti savo sąskaitas, 1072 00:46:33,390 --> 00:46:36,420 arba imtis savo duomenis, arba tiesiog paprastai perimti mašina. 1073 00:46:36,420 --> 00:46:38,910 Buferio perpildymas, kaip pavadinimas rodo, priemonės 1074 00:46:38,910 --> 00:46:40,740 perpildyta ne int, bet buferio. 1075 00:46:40,740 --> 00:46:43,490 Ir buferis yra tik išgalvotas būdas pasakyti, kad tai atminties krūva. 1076 00:46:43,490 --> 00:46:46,710 >> Ir iš tiesų, aš vadinamas styginių prieš buferį, o ne s. 1077 00:46:46,710 --> 00:46:49,234 Nes jei tai buferis, kaip "YouTube" prasme, 1078 00:46:49,234 --> 00:46:52,400 arba bet kuriuo metu žiūrite vaizdo įrašą, jūs galėjote pastebėti žodį buferio, 1079 00:46:52,400 --> 00:46:53,040 taškas, taškas, taškas. 1080 00:46:53,040 --> 00:46:54,240 Tai neįtikėtinai erzina. 1081 00:46:54,240 --> 00:46:55,990 Ir tai tik reiškia, kad jūsų vaizdo grotuvas 1082 00:46:55,990 --> 00:46:58,710 bando atsisiųsti daug baitų, daug baitų 1083 00:46:58,710 --> 00:47:00,170 iš iš interneto video. 1084 00:47:00,170 --> 00:47:02,920 Bet tai lėtas, todėl jis bando atsisiųsti iš jų krūva 1085 00:47:02,920 --> 00:47:06,430 užpildyti buferio, konteinerį, kad turite pakankamai baitų, kad ji gali tada 1086 00:47:06,430 --> 00:47:09,174 parodyti jums video, be pristabdę nuolat. 1087 00:47:09,174 --> 00:47:11,340 Tačiau it turns out, jūs galite turi buferį į tai didelis. 1088 00:47:11,340 --> 00:47:15,710 Bet pabandykite įdėti tai daug duomenų jis, ir labai blogi dalykai gali atsitikti. 1089 00:47:15,710 --> 00:47:22,780 Taigi, pavyzdžiui, pažvelkime tai galutinis kibinimas kaip pavyzdys. 1090 00:47:22,780 --> 00:47:24,720 Tai dar viena programa kad, iš pirmo žvilgsnio, 1091 00:47:24,720 --> 00:47:26,540 nieko super naudingo nedaro. 1092 00:47:26,540 --> 00:47:29,590 Jis gavo Pagrindinė funkcija kad prašo šią funkciją, f. 1093 00:47:29,590 --> 00:47:36,640 Ir, kad funkcija f, čia turi char masyvas, vadinamas C dydžio 12. 1094 00:47:36,640 --> 00:47:39,340 Ir tada ji naudojant šią nauja funkcija vadinama strncpy. 1095 00:47:39,340 --> 00:47:40,430 1096 00:47:40,430 --> 00:47:45,190 >> Pasirodo, kad su šia paprasta, paprasta linija kodą, vos dvi eilutės, 1097 00:47:45,190 --> 00:47:49,130 mes padarėme visą savo programą, , todėl visos mano kompiuteryje, 1098 00:47:49,130 --> 00:47:54,000 ir mano vartotojo sąskaita, ir mano kietajame vairuoti potencialiai pažeidžiamas visiems 1099 00:47:54,000 --> 00:47:58,170 kas žino, ir yra pakankamai gera paleisti ši programa su tam tikra komandų eilutės 1100 00:47:58,170 --> 00:47:58,900 argumentas. 1101 00:47:58,900 --> 00:48:03,400 Kitaip tariant, jei tai blogas vaikinas kelia viduje argvargv [1] įvesdami 1102 00:48:03,400 --> 00:48:08,750 prie klaviatūros labai specialiai meistriškai eilutė, o ne abc, 123, bet iš esmės, 1103 00:48:08,750 --> 00:48:15,180 dvejetainiai simboliai, atspindintys vykdomąjį kodas, programa, kad jis ar ji parašė, 1104 00:48:15,180 --> 00:48:19,190 su šia paprasta programa, kuri yra atstovas tūkstančių programų 1105 00:48:19,190 --> 00:48:23,610 kad yra panašiai pažeidžiamos, Manyti, jis ar ji galiausiai gali ištrinti visus 1106 00:48:23,610 --> 00:48:26,680 ant mano kietajame diske failus, gauti mirksi eilutę taip, kad jis arba ji gali 1107 00:48:26,680 --> 00:48:30,170 įrašykite komandas savo, pašto visus failus į save. 1108 00:48:30,170 --> 00:48:34,660 Viskas, ką galiu padaryti, jis ar ji gali daryti su šiuo kodu. 1109 00:48:34,660 --> 00:48:36,575 >> Mes ne visai tai išspręsti dar. 1110 00:48:36,575 --> 00:48:38,700 Ir iš tiesų, jis ketina įtraukti šiek tiek vaizdą 1111 00:48:38,700 --> 00:48:41,470 kaip šis, kurį mes netrukus suprasti visi geriau. 1112 00:48:41,470 --> 00:48:44,480 Tačiau šiandien, tegul baigiasi kas, tikiuosi, šiek tiek daugiau 1113 00:48:44,480 --> 00:48:48,360 suprantama XKCD pokštas, kol mes vėl kitą kartą. 1114 00:48:48,360 --> 00:48:51,100 1115 00:48:51,100 --> 00:48:51,600 Viskas gerai. 1116 00:48:51,600 --> 00:48:53,446 Pasimatysime trečiadienį. 1117 00:48:53,446 --> 00:48:54,754 >> [Muzikos grojimo] 1118 00:48:54,754 --> 00:48:57,790 >> GARSIAKALBIS: Ir dabar, giliai mintys, pagal Daven Farnham. 1119 00:48:57,790 --> 00:49:00,890 1120 00:49:00,890 --> 00:49:04,770 Atmintis yra tarsi šokinėja į į krūvą auksiniai lapai ant sekmadienio popietę. 1121 00:49:04,770 --> 00:49:09,000 Vėjas pučia, supimas savo hair-- oh, aš praleisti dienas, when-- 1122 00:49:09,000 --> 00:49:11,100 1123 00:49:11,100 --> 00:49:12,650 >> [Juokas] 1124 00:49:12,650 --> 00:49:13,750