1 00:00:00,000 --> 00:00:03,381 >> [Muzikos grojimo] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [Vaizdo įrašų atkūrimas] 4 00:00:11,610 --> 00:00:13,640 >> -Jis Meluoja. 5 00:00:13,640 --> 00:00:14,380 >> -Apie ką? 6 00:00:14,380 --> 00:00:17,182 >> -Nežinau. 7 00:00:17,182 --> 00:00:19,990 >> -Taigi, Ką mes žinome? 8 00:00:19,990 --> 00:00:23,145 >> Išmokėtą sumą 9:15 Ray Santoya buvo bankomato. 9 00:00:23,145 --> 00:00:23,644 -Yeah. 10 00:00:23,644 --> 00:00:27,030 Taigi kyla klausimas, ką buvo jis daro ne 9:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting Į 9 milimetrą į kažką. 12 00:00:29,720 --> 00:00:31,540 Gal jis pamatė snaiperis. 13 00:00:31,540 --> 00:00:33,412 >> OR buvo dirbti su juo. 14 00:00:33,412 --> 00:00:34,340 >> -Wait. 15 00:00:34,340 --> 00:00:36,200 Grįžti vienas. 16 00:00:36,200 --> 00:00:36,975 >> -Ką tu matai? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Bring Veidą iki visą ekraną. 19 00:00:47,805 --> 00:00:48,680 >> -His Akinius. 20 00:00:48,680 --> 00:00:50,060 >> -Yra Šiek atspindys. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Tai Aisiais Nuevitas beisbolo komandos. 23 00:01:02,280 --> 00:01:03,110 Štai jų logotipas. 24 00:01:03,110 --> 00:01:05,820 >> -O Jis kalbėti kas dėvi tą striukę. 25 00:01:05,820 --> 00:01:06,670 >> [PABAIGA PLAYBACK] 26 00:01:06,670 --> 00:01:07,628 >> DAVID Malan: Visos dešinę. 27 00:01:07,628 --> 00:01:11,210 Tai CS50 ir tai yra šiek tiek daugiau iš [nesigirdi], su kuria jūs esate 28 00:01:11,210 --> 00:01:12,890 žymėjimą su problema nustatyti keturi. 29 00:01:12,890 --> 00:01:16,606 Šiandien mes pradedame atrodyti šiek tiek daugiau giliai į šiuos dalykus, vadinamų patarimų, 30 00:01:16,606 --> 00:01:18,480 kuri nors tai gana paslaptinga tema, 31 00:01:18,480 --> 00:01:20,813 paaiškėja, kad ji vyksta būti priemonės, kuriomis mes 32 00:01:20,813 --> 00:01:24,320 gali pradėti statyti ir montavimas daug sudėtingas programas. 33 00:01:24,320 --> 00:01:28,150 Bet mes tai padarėme praėjusiais trečiadienį būdu kai Claymation pirmą. 34 00:01:28,150 --> 00:01:30,190 Taigi, tai, prisiminti, yra Binky ir mes jį naudoti 35 00:01:30,190 --> 00:01:33,148 pažvelgti į programą atrodo, kad ne tikrai nieko daryti įdomu, 36 00:01:33,148 --> 00:01:34,950 bet ji atskleidžia keletą problemų. 37 00:01:34,950 --> 00:01:38,570 Taigi, norint pradėti šiandien, kodėl ne mes vaikščioti greitai per šiuos veiksmus nedaug, 38 00:01:38,570 --> 00:01:41,920 pabandykite atlikti distiliavimą į žmogaus terminuose tiksliai, kas vyksta čia 39 00:01:41,920 --> 00:01:45,410 ir kodėl tai yra blogai, ir tada pereiti ir iš tikrųjų pradėti statyti kažką 40 00:01:45,410 --> 00:01:46,309 su šia technika? 41 00:01:46,309 --> 00:01:48,350 Taigi tai buvo pirmas dvi linijos šią programą 42 00:01:48,350 --> 00:01:51,340 ir profanas sąlygomis, kas yra Šios dvi eilutės daro? 43 00:01:51,340 --> 00:01:55,600 Kažkas, kas yra pagrįstai patogu su tuo, kas deklaruojama ant ekrano? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Kas yra šių dviejų linijų darai? 46 00:02:00,120 --> 00:02:02,070 Tai dar ne viskas, kad skiriasi nuo savaitę vieną, 47 00:02:02,070 --> 00:02:03,611 bet yra keletas naujų ypatingą simbolis. 48 00:02:03,611 --> 00:02:04,152 Taip? 49 00:02:04,152 --> 00:02:05,628 Atgal ten. 50 00:02:05,628 --> 00:02:07,092 >> Auditorija: skelbiu patarimų? 51 00:02:07,092 --> 00:02:08,050 DAVID Malan: Pasakykite naujo? 52 00:02:08,050 --> 00:02:08,860 Auditorija: skelbiu patarimų? 53 00:02:08,860 --> 00:02:11,776 DAVID Malan: deklaruojantys patarimų ir tegul ištobulinti šiek tiek daugiau. 54 00:02:11,776 --> 00:02:14,050 Auditorija: [nesigirdi] adresas x ir tada m. 55 00:02:14,050 --> 00:02:15,300 DAVID Malan: Ir tada spręsti. 56 00:02:15,300 --> 00:02:18,550 Taigi būtent tai, ką mes darome yra mes deklaruojant du kintamuosius. 57 00:02:18,550 --> 00:02:21,252 Šie kintamieji, nors vyksta būti tipo int žvaigždė, kurią 58 00:02:21,252 --> 00:02:23,210 konkrečiau reiškia jie ketina saugoti 59 00:02:23,210 --> 00:02:26,450 iš int adresas atitinkamai, x ir y. 60 00:02:26,450 --> 00:02:27,660 Dabar yra kokių nors reikšmės? 61 00:02:27,660 --> 00:02:32,621 Ar yra kokių nors faktiniai adresai šiose du kintamieji Šiuo metu? 62 00:02:32,621 --> 00:02:33,120 Ne. 63 00:02:33,120 --> 00:02:35,030 Tai tiesiog vadinamosios šiukšlių vertybes. 64 00:02:35,030 --> 00:02:38,120 Jei ne iš tikrųjų priskirti kintamasis, kokia buvo RAM 65 00:02:38,120 --> 00:02:42,224 anksčiau ketina užpildyti nuliais ir tie abu iš šių kintamųjų. 66 00:02:42,224 --> 00:02:44,140 Bet mes dar nežinome ką jie ir tai 67 00:02:44,140 --> 00:02:47,060 bus raktas, kodėl Binky prarado savo galvą praėjusią savaitę. 68 00:02:47,060 --> 00:02:49,980 >> Taigi tai buvo Claymation inkarnacija tai 69 00:02:49,980 --> 00:02:53,580 kuriuo turite tik du kintamuosius, mažai apskrito vienetų molis, 70 00:02:53,580 --> 00:02:57,330 kuriame galima laikyti kintamuosius, bet kaip įpakuotas iki rodyklės rodo, 71 00:02:57,330 --> 00:03:00,640 jie nėra faktiškai nukreipta į bet žinoma per se. 72 00:03:00,640 --> 00:03:03,670 Taigi mes turėjome šią eilutę, ir tai buvo nauja praėjusią savaitę, malloc atminties 73 00:03:03,670 --> 00:03:07,130 paskirstymą, kuris yra tik išgalvotas būdas pasakoja operacinę sistemą, "Linux" 74 00:03:07,130 --> 00:03:09,750 arba "Mac OS arba Windows, ei, duok man šiek tiek atminties, 75 00:03:09,750 --> 00:03:11,780 ir visi jūs turite pasakyti operacinė sistema 76 00:03:11,780 --> 00:03:14,699 yra tai, ką kai klausia jį atmintyje. 77 00:03:14,699 --> 00:03:16,990 Jis nesiruošia rūpintis, ką jūs ketinate daryti su juo, 78 00:03:16,990 --> 00:03:19,786 bet jums reikia pasakyti operacinę Sistema ką būdu malloc. 79 00:03:19,786 --> 00:03:20,286 Taip? 80 00:03:20,286 --> 00:03:21,078 >> Auditorija: Kiek? 81 00:03:21,078 --> 00:03:21,994 DAVID Malan: Kiek? 82 00:03:21,994 --> 00:03:25,280 Kiek bitais, ir taip, šis, vėl, puoselėja pavyzdžiui, yra tiesiog pasakyti, 83 00:03:25,280 --> 00:03:27,360 duoti man int dydį. 84 00:03:27,360 --> 00:03:30,550 Dabar, iš int dydis yra keturi baitai arba 32 bitai. 85 00:03:30,550 --> 00:03:32,850 Taigi tai yra tiesiog būdas sakydamas, ei, operacinė sistema, 86 00:03:32,850 --> 00:03:37,290 duok man keturis baitųatminties kad aš galiu naudoti mano žinioje, 87 00:03:37,290 --> 00:03:40,560 ir konkrečiai, ką malloc grąžinimo atžvilgiu 88 00:03:40,560 --> 00:03:41,795 į tą keturių baitų riekė? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 AUDITORIJA: Adresas? 91 00:03:44,860 --> 00:03:45,901 DAVID Malan: adresas. 92 00:03:45,901 --> 00:03:47,580 Šio keturių baitų riekė adresą. 93 00:03:47,580 --> 00:03:48,190 Būtent. 94 00:03:48,190 --> 00:03:51,430 Ir taip, kad tai, kas saugoma galiausiai X ir tai, kodėl mes darome tikrai ne 95 00:03:51,430 --> 00:03:55,240 rūpintis, ką šis skaičius adresas, ar tai OX1 arba OX2 96 00:03:55,240 --> 00:03:57,110 arba kai paslaptingas šešioliktainis adresą. 97 00:03:57,110 --> 00:03:59,850 Mes tiesiog rūpintis pavaizduotomis piktogramo- kad, kad kintamasis x yra dabar 98 00:03:59,850 --> 00:04:01,630 nukreipta į tą atminties riekė. 99 00:04:01,630 --> 00:04:05,570 Taigi rodyklė reiškia žymeklį, arba Konkrečiau, atminties adresas. 100 00:04:05,570 --> 00:04:09,120 Bet vėl, mes neturime paprastai rūpi kas tie tikrieji adresai. 101 00:04:09,120 --> 00:04:11,780 Dabar, ši eilutė sako kas profanas sąlygomis? 102 00:04:11,780 --> 00:04:14,330 Zodiako x gauna 42 kabliataškį. 103 00:04:14,330 --> 00:04:17,390 Ką tai reiškia? 104 00:04:17,390 --> 00:04:18,200 Nori eiti? 105 00:04:18,200 --> 00:04:20,102 Negalima subraižyti savo kaklą. 106 00:04:20,102 --> 00:04:22,360 >> Auditorija: X adresas yra 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID Malan: X adresas yra 42. 108 00:04:24,300 --> 00:04:25,190 Nevisai. 109 00:04:25,190 --> 00:04:28,485 Taip arti, bet ne visai, nes ten žvaigždė, kad manimi priešdėlį šį x. 110 00:04:28,485 --> 00:04:29,860 Taigi mums reikia keisti truputį. 111 00:04:29,860 --> 00:04:31,032 Taip? 112 00:04:31,032 --> 00:04:36,044 >> Auditorija: vertė, kad rodyklė x yra nukreipta į tai 42. 113 00:04:36,044 --> 00:04:36,710 DAVID Malan: Gerai. 114 00:04:36,710 --> 00:04:40,840 Vertė, kad žymiklis x nukreipta į, tarkim, turi būti 42, 115 00:04:40,840 --> 00:04:44,165 Kitaip tariant, žvaigždė x sako, eikite į kokios adresą 116 00:04:44,165 --> 00:04:48,340 yra x, ar tai 1 Oxford Gatvė arba 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 arba OX1 arba ox33, nepriklausomai nuo kad skaitmeninis adresas yra 118 00:04:51,850 --> 00:04:54,380 žvaigždutė x yra x dereferencing. 119 00:04:54,380 --> 00:04:57,297 Taigi eiti į tą adresą ir tada įdėti skaičių 42 ten. 120 00:04:57,297 --> 00:04:59,380 Taigi, kad būtų lygiavertis būdas pasakyti, kad. 121 00:04:59,380 --> 00:05:01,860 Taigi, kad viskas gerai ir tada mes atstovaujame paveikslėlį 122 00:05:01,860 --> 00:05:05,370 taip, kur mes pridėjome 42 tą keturių riekė 123 00:05:05,370 --> 00:05:09,370 Baitų dešinėje pusėje, bet Ši linija buvo kur viskas nuėjo kreivai 124 00:05:09,370 --> 00:05:11,120 ir Binky galva popped nuo šiuo metu, 125 00:05:11,120 --> 00:05:15,290 nes blogi dalykai atsitiks, kai Jūs dereference šiukšlių vertybių 126 00:05:15,290 --> 00:05:18,210 ar jūs dereference negalioja patarimų ir sakau negalioja 127 00:05:18,210 --> 00:05:21,020 nes šiuo taškas istorija, kas yra viduje y? 128 00:05:21,020 --> 00:05:24,440 Kokia y vertė, pagrįsta apie pastaruosius keletą žingsnių? 129 00:05:24,440 --> 00:05:25,360 Taip? 130 00:05:25,360 --> 00:05:26,115 Kas tai? 131 00:05:26,115 --> 00:05:26,990 >> Auditorija: adresą. 132 00:05:26,990 --> 00:05:28,460 DAVID Malan: adresą. 133 00:05:28,460 --> 00:05:31,910 Tai turi būti adresas bet aš inicializuoti tai? 134 00:05:31,910 --> 00:05:32,800 Taigi turiu dar ne. 135 00:05:32,800 --> 00:05:35,430 Taigi, kas yra žinoma, kad būti ten? 136 00:05:35,430 --> 00:05:37,590 Tai tik keletas šiukšlių vertę. 137 00:05:37,590 --> 00:05:41,500 Tai gali būti bet koks adresas nuo nulio iki 2 mlrd jei turite du koncertai RAM, 138 00:05:41,500 --> 00:05:44,289 arba nuo nulio iki 4 mlrd jei jūs gavo keturis GB RAM. 139 00:05:44,289 --> 00:05:46,080 Tai kai šiukšlių vertė, bet problema yra 140 00:05:46,080 --> 00:05:48,200 kad operacinę sistemą, jei ji nėra jums duota 141 00:05:48,200 --> 00:05:51,140 kad atminties riekė specialiai kad jūs bandote eiti, 142 00:05:51,140 --> 00:05:54,650 tai paprastai vyksta sukelti ką mes matėme, kaip segmentavimo kaltės. 143 00:05:54,650 --> 00:05:57,810 Taigi iš tiesų, nors iš jūsų, kurie turi kovojo ne problemas darbo valandomis 144 00:05:57,810 --> 00:06:00,393 ar problemų, kad daugiau paprastai su bando išsiaiškinti, 145 00:06:00,393 --> 00:06:02,150 segmentacijos kaltė, kad paprastai reiškia 146 00:06:02,150 --> 00:06:05,017 jūs neliesti segmento atminties, kad jums neturėtų būti. 147 00:06:05,017 --> 00:06:07,350 Jūs neliesti atmintį, operacinė sistema turi ne 148 00:06:07,350 --> 00:06:10,450 leido jums liesti, ar tai eidami per toli jūsų masyvo 149 00:06:10,450 --> 00:06:12,870 ar dabar pradeda, ar tai reiškia, kad jūs neliesti 150 00:06:12,870 --> 00:06:14,780 atmintis, tiesiog kai šiukšlių vertę. 151 00:06:14,780 --> 00:06:18,230 >> Tai darydama star x čia rūšiuoti neapibrėžto elgesį. 152 00:06:18,230 --> 00:06:22,030 Jūs niekada neturėtų daryti, nes prieštarauja yra, programa tiesiog vyksta į avariją, 153 00:06:22,030 --> 00:06:24,050 nes jūs sakote, eiti šiuo adresu 154 00:06:24,050 --> 00:06:27,000 ir jūs neturite idėjos, kur kad adresas tikrųjų yra. 155 00:06:27,000 --> 00:06:30,300 Taigi, operacinė sistema yra tikėtina, vyksta į avariją savo programą 156 00:06:30,300 --> 00:06:33,840 kaip rezultatas Ir iš tiesų, tai kas atsitiko ten Binky. 157 00:06:33,840 --> 00:06:37,210 Taigi galiausiai Binky fiksuoto Ši problema su tai. 158 00:06:37,210 --> 00:06:38,909 Taigi šios programos pats buvo klaidingas. 159 00:06:38,909 --> 00:06:41,450 Bet jei jūs tarsi išsiveržia į priekį ir vietoj vykdyti šią eilutę, 160 00:06:41,450 --> 00:06:45,580 Y lygus x tiesiog reiškia, kokia adresas yra: x, taip pat įdėti jį į y. 161 00:06:45,580 --> 00:06:48,740 >> Ir taip su pavaizduotomis piktogramo-, mes atstovavo tai su dviem rodyklėmis 162 00:06:48,740 --> 00:06:51,570 nuo x ir y nukreipta nuo į tą pačią vietą. 163 00:06:51,570 --> 00:06:55,760 Taigi semantiškai, x yra lygi Y nes abu iš tų, 164 00:06:55,760 --> 00:07:00,300 yra tas pats saugoti Adresas, ERGO nukreipta ne 42, 165 00:07:00,300 --> 00:07:04,910 Ir dabar, kai jūs sakote žvaigždę Y, eikite adresu Y, 166 00:07:04,910 --> 00:07:06,790 tai turi įdomų šalutinį poveikį. 167 00:07:06,790 --> 00:07:10,320 Taigi Y adresas yra Tas pats kaip X adresą. 168 00:07:10,320 --> 00:07:15,060 Taigi, jei jūs sakote, eikite adresu į y ir pakeisti reikšmę iki 13, 169 00:07:15,060 --> 00:07:17,140 kas dar veikia? 170 00:07:17,140 --> 00:07:21,100 X D punkto, taip sakant, turėtų būti paveiktas, taip pat. 171 00:07:21,100 --> 00:07:24,340 >> Ir iš tiesų, kaip Nikas atkreipė šią nuotrauką į Claymation buvo būtent tai. 172 00:07:24,340 --> 00:07:28,665 Nors mes sekti rodyklę y, mes galų gale toje pačioje vietoje, 173 00:07:28,665 --> 00:07:32,780 ir todėl, jei mes buvome spausdinti iš x arba Y anketa pointee, 174 00:07:32,780 --> 00:07:35,720 tada mes norėtume pamatyti 13 vertę. 175 00:07:35,720 --> 00:07:37,927 Dabar sakau pointee būti suderinamas su video. 176 00:07:37,927 --> 00:07:39,760 Programuotojai, mano žinios, niekada iš tikrųjų 177 00:07:39,760 --> 00:07:42,460 tark žodį pointee, ta, kuri yra smailu 178 00:07:42,460 --> 00:07:44,650 ne, tačiau siekiant nuoseklumo, su vaizdo, reikia suprasti, 179 00:07:44,650 --> 00:07:47,520 tai visa, kas buvo reiškė tokioje situacijoje. 180 00:07:47,520 --> 00:07:54,190 Todėl bet koks klausimai Claymation ar patarimų ar malloc tik dar? 181 00:07:54,190 --> 00:07:54,850 Nėra? 182 00:07:54,850 --> 00:07:55,470 Gerai. 183 00:07:55,470 --> 00:07:58,560 >> Taigi be papildomų ADO, leiskite pažvelgti 184 00:07:58,560 --> 00:08:00,700 ne, jei tai yra iš tikrųjų buvo naudojamas tam tikrą laiką. 185 00:08:00,700 --> 00:08:03,580 Taigi, mes jau šį CS50 biblioteką kad gavo visus šių funkcijų. 186 00:08:03,580 --> 00:08:06,810 Mes naudojamas GetInt daug, GetString, tikriausiai GetLongLong anksčiau 187 00:08:06,810 --> 00:08:09,840 mano PSet vienas ar taip, bet kas iš tikrųjų vyksta? 188 00:08:09,840 --> 00:08:12,920 Na, tegul priimti greitai pažvelgti po metu programos gaubtu, kad 189 00:08:12,920 --> 00:08:17,017 įkvepia, kodėl mes suteikiame Jums CS50 biblioteka, o iš tikrųjų kaip ir praėjusią savaitę, 190 00:08:17,017 --> 00:08:18,850 mes pradėjome vartoti tiems, mokymo ratams. 191 00:08:18,850 --> 00:08:21,080 Taigi tai dabar rūšiuojami iš Atidarius ką 192 00:08:21,080 --> 00:08:23,690 vyksta jau viduje CS50 bibliotekoje, 193 00:08:23,690 --> 00:08:27,250 nors mes dabar pradės judėti nuo jo daugumai programas. 194 00:08:27,250 --> 00:08:29,460 >> Taigi, tai yra programa, vadinama scanf 0. 195 00:08:29,460 --> 00:08:30,510 Tai itin trumpas. 196 00:08:30,510 --> 00:08:33,909 Jis tiesiog turi šias eilutes, tačiau ji pristato funkcija vadinama scanf 197 00:08:33,909 --> 00:08:36,909 kad mes iš tikrųjų ketiname pamatyti viduje iš CS50 bibliotekoje momentas, 198 00:08:36,909 --> 00:08:38,600 nors šiek tiek kitokia forma. 199 00:08:38,600 --> 00:08:41,330 Taigi ši programa internete 16 yra paskelbti kintamąjį x. 200 00:08:41,330 --> 00:08:43,150 Taigi man keturis baitų int. 201 00:08:43,150 --> 00:08:45,750 Tai buvo pasakoti vartotoją, Taškų prašome, tada 202 00:08:45,750 --> 00:08:49,010 tai yra įdomus linija, kuri iš tikrųjų susieja praėjusią savaitę 203 00:08:49,010 --> 00:08:49,790 ir šis. 204 00:08:49,790 --> 00:08:53,230 Scanf, tada pastebėsite, jis trunka formato eilutę, kaip printf, 205 00:08:53,230 --> 00:08:57,480 % i tai int, ir tada ji užima Antrasis argumentas, kuris atrodo šiek tiek 206 00:08:57,480 --> 00:08:58,260 funky. 207 00:08:58,260 --> 00:09:01,880 Tai Ampersand x, ir prisiminti, mes tik pamačiau šį kartą praeitą savaitę. 208 00:09:01,880 --> 00:09:03,465 Ką Ampersand x atstovauti? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Ką daryti Ampersand C? 211 00:09:08,450 --> 00:09:08,950 Taip? 212 00:09:08,950 --> 00:09:10,024 >> Auditorija: Iš adresą. 213 00:09:10,024 --> 00:09:11,190 DAVID Malan: Iš adresą. 214 00:09:11,190 --> 00:09:13,190 Taigi, tai priešinga Star operatoriaus, 215 00:09:13,190 --> 00:09:17,270 o žvaigždė operatorius sako, eikite į tai adresas, Ampersand operatorius 216 00:09:17,270 --> 00:09:20,280 sako, išsiaiškinti adresas šį kintamąjį, 217 00:09:20,280 --> 00:09:23,530 ir todėl tai yra raktas, nes scanf gyvenimo tikslas 218 00:09:23,530 --> 00:09:26,320 yra nuskaityti vartotojo anketa įvesties iš klaviatūros, 219 00:09:26,320 --> 00:09:29,970 priklausomai ką jis ar ji tipų ir tada skaityti, kad vartotojas indėlį 220 00:09:29,970 --> 00:09:32,970 į kintamąjį, bet mes mačiau per pastarąsias dvi savaites 221 00:09:32,970 --> 00:09:36,080 kad apsikeitimo funkcija, kad mes bandė pastangų įgyvendinti 222 00:09:36,080 --> 00:09:37,110 buvo tiesiog neveikia. 223 00:09:37,110 --> 00:09:42,470 Prisiminkite, kad su apsikeitimo funkcija, jei mes tiesiog pareiškė, A ir B int, 224 00:09:42,470 --> 00:09:47,040 mes sėkmingai apsikeitimo du kintamieji viduje apsikeitimo 225 00:09:47,040 --> 00:09:50,080 tiesiog patinka su pienu ir OL, bet kaip tik apsikeitimo grįžo, 226 00:09:50,080 --> 00:09:55,200 kas buvo su pagarba rezultatas X ir Y pradines reikšmes? 227 00:09:55,200 --> 00:09:55,700 Nieko. 228 00:09:55,700 --> 00:09:56,200 Taip. 229 00:09:56,200 --> 00:09:59,754 Nieko atsitiko, kad laiko, nes apsikeitimo pakeisti tik savo vietos kopijas, 230 00:09:59,754 --> 00:10:01,670 kuris yra pasakyti, visi šį kartą, kai mes 231 00:10:01,670 --> 00:10:04,010 buvo einančios į argumentus funkcijoms, mes 232 00:10:04,010 --> 00:10:05,939 tik artimųjų kopijas šių argumentų. 233 00:10:05,939 --> 00:10:07,980 Tai galite padaryti su tuo ką nori su jais, 234 00:10:07,980 --> 00:10:10,890 bet jie ketina turėti ne Poveikis pradines reikšmes. 235 00:10:10,890 --> 00:10:13,650 Taigi tai yra problemiška, jei jums norite turėti panašaus scanf funkciją 236 00:10:13,650 --> 00:10:17,170 gyvenime, kurio tikslas yra nuskaityti naudotojo įvesties iš klaviatūros 237 00:10:17,170 --> 00:10:22,010 ir tada užpildykite tuščius laukus, taip kalbėti, tai yra, mėgti x kintamasis 238 00:10:22,010 --> 00:10:25,410 vertės, nes jei aš būčiau tiesiog praeiti X scanf, 239 00:10:25,410 --> 00:10:28,790 jei manote, kad praėjusių logika savaitę, scanf gali daryti ką nori 240 00:10:28,790 --> 00:10:33,100 su x kopiją, tačiau jis gali ne nuolat keisti x nebent mes suteikiame 241 00:10:33,100 --> 00:10:37,120 scanf lobių žemėlapį, taip sakant, kur x žymi vietą, kur 242 00:10:37,120 --> 00:10:41,860 mes pereiname į X adresą, kad scanf gali ten ir iš tikrųjų pokytis 243 00:10:41,860 --> 00:10:42,920 X vertė. 244 00:10:42,920 --> 00:10:45,080 Ir taip iš tiesų, visi kad ši programa veikia 245 00:10:45,080 --> 00:10:53,180 jei aš scanf 0, mano šaltinis 5m katalogas, padaryti scanf 0, 246 00:10:53,180 --> 00:10:57,730 dot velniop scanf skaičius Prašome 50, ačiū už 50. 247 00:10:57,730 --> 00:11:01,020 >> Taigi, tai ne visi, kad įdomus, Bet kas iš tiesų vyksta 248 00:11:01,020 --> 00:11:04,820 yra tai, kad kuo greičiau aš vadinu scanf čia X vertę 249 00:11:04,820 --> 00:11:06,410 yra nuolat keičiami. 250 00:11:06,410 --> 00:11:08,335 Dabar tai atrodo gražus ir geras, ir iš tikrųjų, tai 251 00:11:08,335 --> 00:11:11,200 Atrodo mes tikrai nereikia CS50 biblioteka išvis nebėra. 252 00:11:11,200 --> 00:11:13,960 Pavyzdžiui, tegul eina tai dar kartą čia. 253 00:11:13,960 --> 00:11:15,750 Leiskite man vėl jį sekundę. 254 00:11:15,750 --> 00:11:20,600 Pabandykime numerį prašome ir Užuot pasakęs 50, kaip anksčiau, 255 00:11:20,600 --> 00:11:22,810 tegul tiesiog pasakyti "ne". 256 00:11:22,810 --> 00:11:24,000 Gerai, kad yra šiek tiek keista. 257 00:11:24,000 --> 00:11:25,270 GERAI. 258 00:11:25,270 --> 00:11:28,680 Ir tik kai nesąmonė čia. 259 00:11:28,680 --> 00:11:31,170 Taigi, atrodo, kad nėra prie tvarkyti klaidingus situacijas. 260 00:11:31,170 --> 00:11:33,620 Taigi mums reikia minimaliai pradžią pridedant keletą Klaidų tikrinimas 261 00:11:33,620 --> 00:11:37,460 įsitikinti, kad vartotojas turi įvedėte faktinė skaičius kaip 50, 262 00:11:37,460 --> 00:11:40,720 nes matyt rašybos žodžiai nebuvo atpažintas kaip problemiškas, 263 00:11:40,720 --> 00:11:42,020 bet tai tikriausiai turėtų būti. 264 00:11:42,020 --> 00:11:46,450 >> Pažvelkime šioje versijoje dabar tai mano bandymas reimplement GetString. 265 00:11:46,450 --> 00:11:48,437 Jei scanf turi visa tai funkcionalumas pastatytas, 266 00:11:48,437 --> 00:11:51,270 Kodėl mes buvo žymėjimą su jų mokymo ratai kaip GetString? 267 00:11:51,270 --> 00:11:55,450 Na, čia turbūt mano paties paprasta versija GetString 268 00:11:55,450 --> 00:12:00,766 kuriuo prieš savaitę, aš galėjo sakė, duok man eilutę ir ją vadina buferio. 269 00:12:00,766 --> 00:12:03,390 Šiandien aš ruošiuosi pradėti tik sakydamas char žvaigždė, kuris, prisiminti, 270 00:12:03,390 --> 00:12:04,400 tai tik sinonimai. 271 00:12:04,400 --> 00:12:06,629 Jis atrodo baisiau, bet tai lygiai toks pats dalykas. 272 00:12:06,629 --> 00:12:09,420 Taigi man kintama pavadino buferį kad ketina laikyti eilutę, 273 00:12:09,420 --> 00:12:12,780 pasakyti vartotojo eilutę prašome, ir tada, kaip ir anksčiau, 274 00:12:12,780 --> 00:12:17,760 pabandykime skolintis šią pamoką scanf % s šį kartą ir tada pereiti į buferį. 275 00:12:17,760 --> 00:12:19,310 Dabar, greitai normalumas patikrinti. 276 00:12:19,310 --> 00:12:22,120 Kodėl aš nesakau Ženklas buferio šį kartą? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Daro išvadą, ankstesniame pavyzdyje. 279 00:12:26,625 --> 00:12:28,000 Auditorija: Char žvaigždė yra žymeklis. 280 00:12:28,000 --> 00:12:29,920 DAVID Malan: Būtent, nes šiuo metu, char 281 00:12:29,920 --> 00:12:34,080 žvaigždė yra jau žymeklis, adresą, pagal apibrėžimą tos žvaigždės yra ten. 282 00:12:34,080 --> 00:12:37,530 Ir jei scanf tikisi adresą, pakanka tiesiog pereiti į buferį. 283 00:12:37,530 --> 00:12:39,260 Man nereikia sakyti Ampersand buferį. 284 00:12:39,260 --> 00:12:42,177 Dėl smalsu, galite padaryti kažką panašaus į tai. 285 00:12:42,177 --> 00:12:43,510 Būtų turi skirtingą prasmę. 286 00:12:43,510 --> 00:12:47,240 Tai duos jums žymiklį į žymeklis, kuris yra faktiškai 287 00:12:47,240 --> 00:12:50,050 galiojantis dalykas C, tačiau dabar tegul keep it simple 288 00:12:50,050 --> 00:12:51,750 ir išlaikyti istoriją nuoseklūs. 289 00:12:51,750 --> 00:12:54,100 Aš tik ketina pereiti į buferio ir tai teisinga. 290 00:12:54,100 --> 00:12:56,487 Problema, nors tai. 291 00:12:56,487 --> 00:12:58,820 Leiskite man eiti į priekį ir paleisti šį programa, ją sudarant. 292 00:12:58,820 --> 00:13:00,902 Padaryti scanf 1. 293 00:13:00,902 --> 00:13:02,610 Velnias tai, mano kompiliatorius s gaudyti mano klaida. 294 00:13:02,610 --> 00:13:04,090 Duok man vieną sekundę. 295 00:13:04,090 --> 00:13:05,460 Klingsėti. 296 00:13:05,460 --> 00:13:06,990 Tarkime scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 GERAI. 299 00:13:11,380 --> 00:13:12,720 Čia mes eiti. 300 00:13:12,720 --> 00:13:14,280 Man reikia to. 301 00:13:14,280 --> 00:13:16,750 CS50 ID turi įvairių Sąrankos parametrai 302 00:13:16,750 --> 00:13:18,280 kad apsaugoti jus nuo savęs. 303 00:13:18,280 --> 00:13:21,300 Man reikia išjungti tuos, kuriuos veikia klingsėti rankiniu šį kartą. 304 00:13:21,300 --> 00:13:22,140 Taigi styginių prašom. 305 00:13:22,140 --> 00:13:25,560 Aš ruošiuosi eiti į priekį ir įveskite mano mėgstamiausia hello world. 306 00:13:25,560 --> 00:13:26,490 Gerai, null. 307 00:13:26,490 --> 00:13:27,700 Tai ne tai, ką aš įvedėte. 308 00:13:27,700 --> 00:13:29,690 Taigi tai rodo, kažkas yra negerai. 309 00:13:29,690 --> 00:13:33,920 Leiskite man eiti į priekį ir įveskite į tikrai ilgą eilutę. 310 00:13:33,920 --> 00:13:37,210 Ačiū už niekinis ir aš nežinau jei aš ruošiuosi būti suteikta galimybė į avariją ją. 311 00:13:37,210 --> 00:13:40,240 Pabandykime šiek kopiją įklijuokite ir pamatyti, jei tai padeda. 312 00:13:40,240 --> 00:13:43,290 Tiesiog įklijuokite šį daug. 313 00:13:43,290 --> 00:13:47,310 Tai tikrai didesnis styginių nei įprasta. 314 00:13:47,310 --> 00:13:51,450 Leiskite tiesiog tikrai parašyti. 315 00:13:51,450 --> 00:13:51,950 Ne. 316 00:13:51,950 --> 00:13:52,650 Velnias. 317 00:13:52,650 --> 00:13:53,480 Komanda nerastas. 318 00:13:53,480 --> 00:13:54,550 Taigi, kad nesusiję. 319 00:13:54,550 --> 00:13:56,440 Tai todėl, kad aš įterptas blogų ženklų, 320 00:13:56,440 --> 00:13:59,780 bet tai paaiškėja, nesiruošia dirbti. 321 00:13:59,780 --> 00:14:03,510 >> Pabandykime tai dar kartą, nes tai smagiau, jei mes iš tikrųjų katastrofos ją. 322 00:14:03,510 --> 00:14:09,116 Leiskite tipo tai ir dabar, aš ruošiatės kopijuoti tikrai ilgą eilutę 323 00:14:09,116 --> 00:14:10,990 o dabar pažiūrėkime, jei mes gali strigti šį dalyką. 324 00:14:10,990 --> 00:14:14,235 Atkreipkite dėmesį, aš praleisti erdves, naujų linijų ir kabliataškiai 325 00:14:14,235 --> 00:14:16,035 ir visi funky simbolių. 326 00:14:16,035 --> 00:14:16,535 Įveskite. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Ir dabar tinklas tiesiog lėtai. 329 00:14:22,880 --> 00:14:27,460 Laikiau nuspaudę Command-V per ilgas, aiškiai. 330 00:14:27,460 --> 00:14:28,190 Velnias! 331 00:14:28,190 --> 00:14:29,260 Komanda nerastas. 332 00:14:29,260 --> 00:14:29,780 >> GERAI. 333 00:14:29,780 --> 00:14:32,240 Na, taškas yra Vis dėlto taip. 334 00:14:32,240 --> 00:14:36,910 Taigi, kas iš tikrųjų vyksta nuo šios deklaracijos 335 00:14:36,910 --> 00:14:39,240 nuo char žvaigždutėmis buferio on line 16? 336 00:14:39,240 --> 00:14:41,820 Taigi, ką aš gaunu kai aš pareiškiu rodyklę? 337 00:14:41,820 --> 00:14:47,440 Viskas, ką aš gaunu yra keturių baitų vertė vadinamas buferis, bet kas viduje ji 338 00:14:47,440 --> 00:14:49,540 šiuo metu? 339 00:14:49,540 --> 00:14:50,930 Tai tik keletas šiukšlių vertę. 340 00:14:50,930 --> 00:14:54,170 Kadangi bet kuriuo metu galite paskelbti kintamąjį C, tai tik keletas šiukšlių vertė, 341 00:14:54,170 --> 00:14:56,220 ir mes pradedame Kelionės per šį realybės. 342 00:14:56,220 --> 00:14:59,720 Dabar, kai aš sakau scanf, eiti šiuo adresu 343 00:14:59,720 --> 00:15:01,520 ir įdėti bet kokiomis vartotojas įveda į. 344 00:15:01,520 --> 00:15:06,400 Jei vartotojas tipų Sveiki pasaulis, gerai, kur man jį? 345 00:15:06,400 --> 00:15:07,750 Buferis yra šiukšlių vertė. 346 00:15:07,750 --> 00:15:11,510 >> Taigi, kad lyg strėlė kad manimi nukreipta kas žino kur. 347 00:15:11,510 --> 00:15:13,880 Gal tai nukreipta čia mano atmintyje. 348 00:15:13,880 --> 00:15:16,560 Ir todėl, kai vartotojas tipai hello world, 349 00:15:16,560 --> 00:15:22,380 programa bando įdėti styginių hello world Backslash 0 350 00:15:22,380 --> 00:15:23,910 toje atminties riekë. 351 00:15:23,910 --> 00:15:27,070 Bet su didele tikimybe, bet aiškiai ne 100% tikimybė, 352 00:15:27,070 --> 00:15:30,440 kompiuteris ketina tada katastrofos programa, nes tai nėra 353 00:15:30,440 --> 00:15:32,490 Aš atmintis turėtų būti leidžiama liesti. 354 00:15:32,490 --> 00:15:36,330 Taigi, trumpai tariant, ši programa yra trūkumų būtent dėl ​​šios priežasties. 355 00:15:36,330 --> 00:15:38,070 Aš iš esmės ne tai, ką? 356 00:15:38,070 --> 00:15:42,366 Kokių žingsnių aš praleisti, kaip mes praleisti su Binky pirmojo pavyzdžiui? 357 00:15:42,366 --> 00:15:42,866 Taip? 358 00:15:42,866 --> 00:15:43,710 >> Auditorija: Atminties paskirstymas? 359 00:15:43,710 --> 00:15:45,001 >> DAVID Malan: Atminties paskirstymas. 360 00:15:45,001 --> 00:15:48,400 Aš ne iš tikrųjų skiriama bet atminties už tą eilutę. 361 00:15:48,400 --> 00:15:50,270 Taigi, mes galime išspręsti šią problemą įvairiais būdais pora. 362 00:15:50,270 --> 00:15:52,700 Vienas iš jų, galime laikyti jį paprasta ir iš tiesų, dabar jūs esate 363 00:15:52,700 --> 00:15:55,116 ketina pradėti pamatyti išsiliejimo iš tarp to, ką linijų 364 00:15:55,116 --> 00:15:58,520 masyvas yra, kas seka yra, ką char žvaigždė, ką iš simbolių masyvas 365 00:15:58,520 --> 00:15:59,020 yra. 366 00:15:59,020 --> 00:16:02,450 Štai Antrasis pavyzdys įtraukiant styginiams ir įspėjimo 367 00:16:02,450 --> 00:16:05,690 viskas, ką aš padariau on-line 16 yra, vietoj to, suprantama 368 00:16:05,690 --> 00:16:09,530 kad buferis bus char žvaigždė, rodyklė į atminties riekė, 369 00:16:09,530 --> 00:16:14,057 Aš ruošiuosi labai aktyviai duoti aš už 16 simbolių buferis, 370 00:16:14,057 --> 00:16:16,390 ir iš tiesų, jei esate susipažinę su laikotarpiu buferinė, 371 00:16:16,390 --> 00:16:20,570 tikriausiai iš video pasaulyje, kai vaizdo įrašas yra buferinė, buferinė, 372 00:16:20,570 --> 00:16:21,175 buferinė. 373 00:16:21,175 --> 00:16:22,550 Na, koks ryšys čia? 374 00:16:22,550 --> 00:16:24,960 Na, Viduje YouTube ir viduje vaizdo grotuvai 375 00:16:24,960 --> 00:16:27,200 paprastai yra masyvas tai didesnis nei 16. 376 00:16:27,200 --> 00:16:30,340 Tai gali būti dydžio vieno masyvo megabaitą, o gal 10 megabaitų, 377 00:16:30,340 --> 00:16:34,330 ir į tą masyvą daro savo naršyklę atsisiųsti visa krūva baitų, 378 00:16:34,330 --> 00:16:37,500 visa krūva megabaitų vaizdo ir vaizdo grotuvas, 379 00:16:37,500 --> 00:16:40,930 "YouTube" ar kas yra, prasideda skaityti baitų iš šio masyvo, 380 00:16:40,930 --> 00:16:43,530 ir bet kuriuo metu matote Žodis buferinė, buferinė, 381 00:16:43,530 --> 00:16:46,350 tai reiškia, kad žaidėjas turi įgytas iki tos masyvo pabaigos. 382 00:16:46,350 --> 00:16:50,430 Tinklas yra toks lėtas, kad ji turi ne pripildyti masyvo su daugiau baitų 383 00:16:50,430 --> 00:16:55,610 ir taip jūs iš bitai rodyti vartotojui. 384 00:16:55,610 --> 00:16:59,430 >> Taigi buferis yra apt terminas čia, kad tai tik masyvas, iš atminties riekė. 385 00:16:59,430 --> 00:17:02,530 Ir tai ją išspręsti nes ji Pasirodo, 386 00:17:02,530 --> 00:17:07,410 kad jūs galite gydyti masyvus kaip nors jie yra adresai, nors buferis 387 00:17:07,410 --> 00:17:10,710 yra tik simbolis, tai seka simbolių, buferis, 388 00:17:10,710 --> 00:17:14,760 tai naudinga man, programuotojas, galite pereiti savo vardą aplink 389 00:17:14,760 --> 00:17:17,079 taip, tarsi tai būtų žymeklis, kaip nors ji 390 00:17:17,079 --> 00:17:21,000 buvo iš riekė adresas atminties 16 simbolių. 391 00:17:21,000 --> 00:17:24,530 Taigi, kad pasakyti, galiu perduoti scanf tiksliai šis žodis 392 00:17:24,530 --> 00:17:30,670 ir taip dabar, jei aš darau šią programą, padaryti scanf 2, dot velniop scanf 2, 393 00:17:30,670 --> 00:17:35,386 ir įveskite hello world, Įveskite, kad LAIKĄ_ 394 00:17:35,386 --> 00:17:37,590 >> Hmm, kas atsitiko? 395 00:17:37,590 --> 00:17:39,340 Styginių prašom. 396 00:17:39,340 --> 00:17:41,430 Ką man daryti negerai? 397 00:17:41,430 --> 00:17:43,800 Hello world, buferio. 398 00:17:43,800 --> 00:17:44,705 Sveikas Pasauli. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ak, aš žinau, ką tai daro. 401 00:17:49,420 --> 00:17:49,920 GERAI. 402 00:17:49,920 --> 00:17:51,628 Todėl skaityti daugiau iki pirmosios vietos. 403 00:17:51,628 --> 00:17:55,680 Taigi leiskite apgauti tik už momentą ir pasakyti, kad aš tik norėjau tipo kažką 404 00:17:55,680 --> 00:18:01,408 tikrai ilgai, kaip tai yra ilgas sakinys tai vienas, du, tris, keturis, penkis, 405 00:18:01,408 --> 00:18:04,420 šešių, septynių, aštuonių, devynių, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 GERAI. 407 00:18:05,300 --> 00:18:07,600 Tai išties ilgas sakinys. 408 00:18:07,600 --> 00:18:10,710 Taigi šis sakinys yra ilgesnis nei 16 simbolių 409 00:18:10,710 --> 00:18:13,670 ir todėl, kai aš paspauskite Enter kas nutiks? 410 00:18:13,670 --> 00:18:16,940 Na, šiuo atveju iš istorija, aš pareiškė buferis 411 00:18:16,940 --> 00:18:22,190 kad iš tikrųjų yra masyvas 16 simbolių pasiruošę eiti. 412 00:18:22,190 --> 00:18:27,426 Taigi, vienas, du, tris, keturis, penkis, šeši, septynių, aštuonių, devynių, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 Taigi 16 simbolių, o dabar, kai aš skaityti kažką panašaus tai ilgas 415 00:18:34,410 --> 00:18:43,950 sakinys, kas nutiks yra kad aš ruošiuosi skaityti tai ilgas 416 00:18:43,950 --> 00:18:49,660 S-E-N-t-E-N-C-E, sakinys. 417 00:18:49,660 --> 00:18:52,270 >> Taigi tai yra sąmoningai blogas dalykas, kad aš 418 00:18:52,270 --> 00:18:55,060 laikyti raštu už ribos mano masyvas, 419 00:18:55,060 --> 00:18:56,660 už mano buferio ribų. 420 00:18:56,660 --> 00:19:00,100 Galėčiau gauti pasisekė ir programa bus nuolat veikia, o ne rūpintis, 421 00:19:00,100 --> 00:19:03,450 bet apskritai, tai bus iš tiesų katastrofos mano programa, 422 00:19:03,450 --> 00:19:06,440 ir tai yra klaida mano kodą momentą aš žingsnis 423 00:19:06,440 --> 00:19:08,576 už ribų tos masyvas, nes aš 424 00:19:08,576 --> 00:19:10,450 nežinau, jei tai nebūtinai vyksta į avariją 425 00:19:10,450 --> 00:19:12,120 arba, jei aš tik ketina gauti pasisekė. 426 00:19:12,120 --> 00:19:15,750 Taigi tai yra problemiškas, nes Šiuo atveju, tai atrodo, kad dirbti 427 00:19:15,750 --> 00:19:20,931 ir tegul Patiria likimą čia, nors IDE atrodo toleruoti gana didelis 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Čia mes eiti. 430 00:19:22,040 --> 00:19:23,240 Galiausiai. 431 00:19:23,240 --> 00:19:26,470 Taigi, aš tik viena, kad galima pamatyti tai. 432 00:19:26,470 --> 00:19:29,630 Taigi aš tiesiog turėjo įdomus rašyti daug iš tikrai ilgą faktinio frazės 433 00:19:29,630 --> 00:19:32,800 kad ji tikrai viršijo 16 baitų, nes aš 434 00:19:32,800 --> 00:19:38,050 įvedėte šio crazy ilgą multi-line Frazė, tada pastebėsite, kas atsitiko. 435 00:19:38,050 --> 00:19:41,110 Programa bandė spausdinant ir tada gavo segmentavimo kaltės 436 00:19:41,110 --> 00:19:44,430 ir segmentavimo gedimai yra tada, kai kažkas panašaus į tai atsitinka 437 00:19:44,430 --> 00:19:47,650 ir operacinė sistema sako Ne, negali liesti, kad atmintį. 438 00:19:47,650 --> 00:19:49,570 Mes ketiname nužudyti apskritai programa. 439 00:19:49,570 --> 00:19:51,180 >> Taigi, tai, atrodo problematiškas. 440 00:19:51,180 --> 00:19:54,540 Aš pagerino programą, pagal kurią bent jau šiek tiek atminties, 441 00:19:54,540 --> 00:19:58,000 bet tai atrodytų apriboti funkcija GetString kad gauti 442 00:19:58,000 --> 00:20:00,780 įsipareigojimų kai kurių baigtinio ilgio 16. 443 00:20:00,780 --> 00:20:04,200 Taigi, jei norite paremti ilgiau sakiniai kaip 16 simbolių, 444 00:20:04,200 --> 00:20:04,880 Ka tu darai? 445 00:20:04,880 --> 00:20:07,970 Na, galite padidinti dydis buferio iki 32 446 00:20:07,970 --> 00:20:09,190 arba kad atrodo rūšies trumpas. 447 00:20:09,190 --> 00:20:12,260 Kodėl mes tiesiog padaryti tai 1000, bet stumti atgal. 448 00:20:12,260 --> 00:20:17,100 Koks atsakymas intuityviai iš tik išvengti šios problemos, darant 449 00:20:17,100 --> 00:20:20,660 mano buferio didesnis, kaip ir 1000 simbolių? 450 00:20:20,660 --> 00:20:23,470 Įgyvendinant GetString šį būdą. 451 00:20:23,470 --> 00:20:27,130 Kas gerai ar blogai čia? 452 00:20:27,130 --> 00:20:28,033 Taip? 453 00:20:28,033 --> 00:20:30,574 Auditorija: Jei įpareigoti iki daug erdvės ir jums nereikia naudoti jį, 454 00:20:30,574 --> 00:20:33,500 galite ne perskirstyti tą erdvę. 455 00:20:33,500 --> 00:20:34,500 DAVID Malan: Absoliučiai. 456 00:20:34,500 --> 00:20:38,480 Tai išlaidavimas, kiek, jei ne iš tikrųjų reikia 900 šių baitų 457 00:20:38,480 --> 00:20:41,057 Ir dar jūs prašydama 1000 iš viso vistiek, 458 00:20:41,057 --> 00:20:44,140 jūs tik vartoja daugiau atmintis vartotojo kompiuteryje, nei jums reikia, 459 00:20:44,140 --> 00:20:45,740 ir po to, kai visi, kai kurie iš Jūs jau susidūrė 460 00:20:45,740 --> 00:20:47,620 gyvenime, kad, kai esate veikia daug programų 461 00:20:47,620 --> 00:20:50,470 ir jie valgo daug atminties, Tai iš tiesų gali įtakoti rezultatus 462 00:20:50,470 --> 00:20:52,220 ir vartotojas patirtis ant kompiuterio. 463 00:20:52,220 --> 00:20:56,090 Taigi, kad tipo tingus sprendimas, tikrai, ir atvirkščiai, 464 00:20:56,090 --> 00:21:00,140 tai ne tik išlaidavimas, kokia problema vis dar išlieka, net jei aš padaryti, kad mano buferis 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 Taip? 467 00:21:02,600 --> 00:21:04,475 >> Auditorija: Styga ilgis 1001. 468 00:21:04,475 --> 00:21:05,350 DAVID Malan: Būtent. 469 00:21:05,350 --> 00:21:08,280 Jei jūsų eilutė ilgis 1001, Jūs turite tą patį problemą, 470 00:21:08,280 --> 00:21:10,705 ir mano argumentas, aš norėčiau tik tada padaryti jį 2000, 471 00:21:10,705 --> 00:21:12,830 bet jūs neturite žinoti iš anksto, kaip didelis jis turėtų būti, 472 00:21:12,830 --> 00:21:16,890 ir dar, aš turiu surinkti mano programa Prieš leisdami žmonėms naudoti ir parsisiųsti 473 00:21:16,890 --> 00:21:17,390 tai. 474 00:21:17,390 --> 00:21:21,490 Taigi tai yra būtent natūra Daiktai kad CS50 biblioteka bando 475 00:21:21,490 --> 00:21:24,750 padėti mums, ir mes tik žvilgsnis į kai kuriuos pagrindinės įgyvendinimo 476 00:21:24,750 --> 00:21:29,790 čia, bet tai yra CS50 taškas C. Tai yra failas, kad buvo ant CS50 IDE 477 00:21:29,790 --> 00:21:31,420 Visos šios savaites, kad jūs jau naudojate. 478 00:21:31,420 --> 00:21:34,280 Tai iš anksto parengta ir jūs buvo naudojant jį automatiškai 479 00:21:34,280 --> 00:21:38,780 pagal pobūdį turintys brūkšnys L CS50 vėliava klingsėti, 480 00:21:38,780 --> 00:21:42,300 bet jei aš slinkite žemyn per visus šios funkcijos, čia GetString, 481 00:21:42,300 --> 00:21:44,636 ir tiesiog suteikti jums skonis, kas vyksta, 482 00:21:44,636 --> 00:21:46,760 Paimkime greitai pažvelgti į santykinis sudėtingumas. 483 00:21:46,760 --> 00:21:48,870 Tai ne super ilgai funkcija, tačiau mes ne 484 00:21:48,870 --> 00:21:52,530 turi galvoti visi sunkiai apie kaip eiti apie tai, kaip stygos. 485 00:21:52,530 --> 00:21:55,660 >> Taigi čia mano buferio ir aš matyt inicijuoti jį null. 486 00:21:55,660 --> 00:21:57,990 Tai, žinoma, yra tas pats, kaip char žvaigždė, 487 00:21:57,990 --> 00:22:00,585 bet aš nusprendė Įgyvendinant CS50 biblioteką 488 00:22:00,585 --> 00:22:02,460 kad jei mes ketiname būti visiškai dinamiškas, 489 00:22:02,460 --> 00:22:05,770 Aš nežinau, iš anksto, kaip didelis ir string vartotojai ketinate norite gauti. 490 00:22:05,770 --> 00:22:08,140 Taigi, aš ruošiuosi pradėti tik su tuščiu eilutę 491 00:22:08,140 --> 00:22:11,507 ir aš ruošiuosi kurti kiek atminties, kaip man reikia, kad tilptų vartotojo eilutę 492 00:22:11,507 --> 00:22:13,340 ir jei aš neturiu pakankamai, aš ruošiuosi paprašyti 493 00:22:13,340 --> 00:22:15,010 operacinę sistemą daugiau atminties. 494 00:22:15,010 --> 00:22:17,510 Aš ruošiuosi perkelti savo eilutę į didesnį riekė atminties 495 00:22:17,510 --> 00:22:21,847 ir aš ruošiuosi išleisti arba atlaisvinti nepakankamai didelė riekė atminties 496 00:22:21,847 --> 00:22:23,680 ir mes tik ketina tai padaryti keletą kartų. 497 00:22:23,680 --> 00:22:25,570 >> Taigi greitas žvilgsnis, čia tiesiog kintamasis 498 00:22:25,570 --> 00:22:28,780 , su kuriuo aš ruošiuosi sekti iš savo buferio talpos. 499 00:22:28,780 --> 00:22:30,071 Kiek baitų galiu tinka? 500 00:22:30,071 --> 00:22:32,070 Štai kintamasis n su kurį aš ruošiuosi laikyti 501 00:22:32,070 --> 00:22:36,200 kelio nuo to, kiek baitų yra iš tikrųjų buferis, arba kad vartotojas atspausdintos. 502 00:22:36,200 --> 00:22:39,900 Jei nemačiau prieš tai, jums gali nurodyti, kad, kaip int kintamasis 503 00:22:39,900 --> 00:22:46,370 yra nepasirašytas, kuris, kaip rodo pavadinimas, reiškia, kad jis ne neigiamas, ir kodėl 504 00:22:46,370 --> 00:22:50,590 Aš kada nori vargintis nurodant kad int yra ne tik int, 505 00:22:50,590 --> 00:22:52,540 bet tai nepasirašytas int? 506 00:22:52,540 --> 00:22:55,064 Tai ne neigiamas int. 507 00:22:55,064 --> 00:22:56,355 Ką [nesigirdi] reiškia? 508 00:22:56,355 --> 00:22:58,910 >> AUDITORIJA: tai aprašant sumą atminties, kuri gali būti [nebegirdėtumėte]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID Malan: Taip. 510 00:22:59,660 --> 00:23:03,710 Taigi, jei aš sakau, nepasirašytas, iš tikrųjų tai yra suteikiant Jums vieną tiek papildomo atminties 511 00:23:03,710 --> 00:23:07,440 ir atrodo, rūšies kvailas, bet jei jūs turi vieną tiek papildomos atminties, kad 512 00:23:07,440 --> 00:23:09,940 reiškia, kad turite dvigubai daugiau vertės galite atstovauti 513 00:23:09,940 --> 00:23:11,570 nes gali būti 0 arba 1. 514 00:23:11,570 --> 00:23:14,660 Taigi pagal nutylėjimą, int gali būti maždaug neigiamas 2 mlrd visą kelią 515 00:23:14,660 --> 00:23:16,030 iki teigiamo 2 mlrd. 516 00:23:16,030 --> 00:23:18,540 Tai yra didelis asortimentas, tačiau tai dar kokios išlaidavimas 517 00:23:18,540 --> 00:23:21,280 Jei rūpi tik dydžiai, kurie tiesiog intuityviai 518 00:23:21,280 --> 00:23:24,620 turėtų būti ne neigiamas arba teigiamas arba 0, gerai tada, 519 00:23:24,620 --> 00:23:28,884 kodėl jūs eikvoti 2 mlrd Galimos reikšmės neigiamų skaičių 520 00:23:28,884 --> 00:23:30,300 jei jūs niekada juos naudoti? 521 00:23:30,300 --> 00:23:35,350 Taigi, sakydamas, nepasirašytas, dabar mano int gali būti tarp 0 ir maždaug 4 mlrd. 522 00:23:35,350 --> 00:23:39,280 >> Taigi čia tik int C priežasčių mes ne gauti į tik dabar taip 523 00:23:39,280 --> 00:23:42,280 kodėl tai int vietoj iš medžio anglies, bet čia yra 524 00:23:42,280 --> 00:23:44,630 tai, ką ketina Svarbiausios įjungtas ir kai kurie iš jūsų 525 00:23:44,630 --> 00:23:48,340 gali būti naudojant, pavyzdžiui, fgetc funkcija net PSet keturių 526 00:23:48,340 --> 00:23:51,580 arba vėliau, matysime ją vėl problemos nustatyti penki, 527 00:23:51,580 --> 00:23:55,410 fgetc yra gražus, nes kaip pavadinimas rūšies, rūšiuoti arcanely rodo, 528 00:23:55,410 --> 00:23:57,940 tai funkcija, kuri gauna simbolį ir taip, 529 00:23:57,940 --> 00:24:00,690 kas iš esmės skiriasi apie tai, ką mes darome, yra GetString 530 00:24:00,690 --> 00:24:03,110 yra mes ne naudojant scanf tuo pačiu būdu,. 531 00:24:03,110 --> 00:24:07,550 Mes tiesiog šliaužti palei žingsnis po žingsnio per kokia vartotojas įvedėte, 532 00:24:07,550 --> 00:24:10,970 nes mes visada galime skirti vieną char, todėl visada galime saugiai 533 00:24:10,970 --> 00:24:15,599 atrodo vienu char vienu metu, ir magija pradeda atsitikti čia. 534 00:24:15,599 --> 00:24:17,890 Aš ruošiuosi slinkite žemyn viduryje šios funkcijos 535 00:24:17,890 --> 00:24:20,360 tik trumpai pristatyti šią funkciją. 536 00:24:20,360 --> 00:24:22,670 Panašiai kaip ten malloc funkcija, yra 537 00:24:22,670 --> 00:24:27,740 realloc funkcija, kur realloc leidžia jums perskirstyti iš atminties riekė 538 00:24:27,740 --> 00:24:29,570 ir kad ji didesnė arba mažesnė. 539 00:24:29,570 --> 00:24:33,060 Taigi ilga istorija trumpa ir iš mano rankos banga šiandien, 540 00:24:33,060 --> 00:24:35,620 žinau, kad tai, ką GetString daro tai tarsi 541 00:24:35,620 --> 00:24:39,720 apie stebuklingai auga arba mažėja buferį kaip vartotojas 542 00:24:39,720 --> 00:24:41,440 tipai jo eilutę. 543 00:24:41,440 --> 00:24:43,962 >> Taigi, jei vartotojas įveda trumpas eilutė, šis kodas 544 00:24:43,962 --> 00:24:45,920 tik skiria pakankamai atminties, kad tilptų eilutę. 545 00:24:45,920 --> 00:24:48,086 Jei vartotojas išlaiko rašyti kaip aš tai padariau vėl ir vėl 546 00:24:48,086 --> 00:24:50,330 ir vėl, gerai, jei buferis s pradžių tai didelis 547 00:24:50,330 --> 00:24:53,310 ir programa supranta, kad palauk, aš iš vietos, 548 00:24:53,310 --> 00:24:55,410 jis ketina padvigubinti buferinio dydis 549 00:24:55,410 --> 00:24:59,110 ir tada dvigubai buferio dydį ir kodas, kuris veikia padvigubinti, 550 00:24:59,110 --> 00:25:03,170 jei pažvelgsime į tai čia, tai tiesiog tai protingas vieno įdėklas. 551 00:25:03,170 --> 00:25:06,830 Jūs galite ne pastebėjau šį sintaksė anksčiau, bet jei tu sakai žvaigždė lygu, 552 00:25:06,830 --> 00:25:10,470 tai tas pats, kaip sakydamas pajėgumo kartus 2. 553 00:25:10,470 --> 00:25:13,390 Taigi jis tiesiog išlaiko dvigubai buferinio talpa 554 00:25:13,390 --> 00:25:17,480 ir tada pasakoja realloc duoti Pati, kad daug daugiau atminties. 555 00:25:17,480 --> 00:25:19,720 >> Dabar, kaip panaikinti, kad yra kitas funkcijas čia 556 00:25:19,720 --> 00:25:23,680 kad mes ne žiūrėti į bet išsamiai išskyrus parodyti GetInt, 557 00:25:23,680 --> 00:25:26,150 mes naudojame GetString į GetInt. 558 00:25:26,150 --> 00:25:28,192 Mes tikriname, jog tai ne niekinis, kuris, prisiminti, 559 00:25:28,192 --> 00:25:30,400 yra speciali reikšmė, reiškia kažkas negerai. 560 00:25:30,400 --> 00:25:31,233 Mes iš atminties. 561 00:25:31,233 --> 00:25:32,310 Geriau patikrinti, kad. 562 00:25:32,310 --> 00:25:33,710 Ir mes grąžinti sarginio vertę. 563 00:25:33,710 --> 00:25:37,850 Bet aš atidėti į kaip į komentarus kodėl tada mes naudojame šią scanf pusbrolis 564 00:25:37,850 --> 00:25:42,100 vadinamas sscanf ir paaiškėja, kad sscanf arba styginių scanf, 565 00:25:42,100 --> 00:25:45,310 leidžia jums pažvelgti linijos atrodo, kad vartotojas įvedėte ir jums 566 00:25:45,310 --> 00:25:49,610 analizuoti iš esmės, ir ką aš daro čia aš sakau sscanf, 567 00:25:49,610 --> 00:25:54,440 analizuoti nepriklausomai vartotojas turi įvestas ir įsitikinkite% i, 568 00:25:54,440 --> 00:25:59,250 yra sveikasis skaičius, į jį, ir mes nebus patekti į šiandien tiksliai, kodėl ten taip pat 569 00:25:59,250 --> 00:26:03,760 A% c čia, bet trumpai tariant leidžia mus aptikti, jei vartotojas atspausdintos 570 00:26:03,760 --> 00:26:06,050 kažkuo netikru po skaičiaus. 571 00:26:06,050 --> 00:26:11,766 Taigi dėl to, kad GetInt ir GetString lieps pakartoti, pakartoti, bandykite dar kartą 572 00:26:11,766 --> 00:26:13,640 yra todėl, kad visi kad mus kodas parašiau, 573 00:26:13,640 --> 00:26:17,900 tai tipo Pažvelgus į vartotojo įvestį norint įsitikinti, ar tai visiškai skaitmeninė 574 00:26:17,900 --> 00:26:21,700 ar tai tikrasis slankiojo taškų vertė ar panašiai, 575 00:26:21,700 --> 00:26:24,233 Priklausomai nuo to, vertę funkcionuoti jūs naudojate. 576 00:26:24,233 --> 00:26:25,060 >> FIU. 577 00:26:25,060 --> 00:26:25,710 GERAI. 578 00:26:25,710 --> 00:26:27,592 Tai buvo kąsnis bet esmė čia yra 579 00:26:27,592 --> 00:26:29,550 kad priežastis, kodėl mes turėjome šių mokymo ratai 580 00:26:29,550 --> 00:26:32,880 yra todėl, kad žemiausiu lygiu, Yra tik tiek daug dalykų, kad 581 00:26:32,880 --> 00:26:35,674 gali suklysti, kad mes norėjome į Preemptively rankena 582 00:26:35,674 --> 00:26:38,090 tie dalykai tikrai gali Ankstyviausi savaites klasės, 583 00:26:38,090 --> 00:26:42,230 bet dabar su PSet keturių ir penkių PSet ir už matysite, kad tai daugiau pas 584 00:26:42,230 --> 00:26:45,570 Jūs taip pat esate pajėgesnės išspręsti šias problemas rūšių 585 00:26:45,570 --> 00:26:47,180 patys. 586 00:26:47,180 --> 00:26:51,770 Bet kokie GetString ar GetInt klausimų? 587 00:26:51,770 --> 00:26:52,630 Taip? 588 00:26:52,630 --> 00:26:55,130 >> Auditorija: Kodėl jūs dvigubai buferinio talpa 589 00:26:55,130 --> 00:26:57,630 o ne tik didinti tai pagal tikslią sumą? 590 00:26:57,630 --> 00:26:58,100 >> DAVID Malan: Geras klausimas. 591 00:26:58,100 --> 00:27:00,474 Kodėl mes dvigubai pajėgumus buferio, o ne 592 00:27:00,474 --> 00:27:02,800 tiesiog jį didinti kai kurios pastovios vertės? 593 00:27:02,800 --> 00:27:03,900 Tai buvo dizaino sprendimas a. 594 00:27:03,900 --> 00:27:08,590 Mes tiesiog nusprendė, kad, nes jis linkęs būti šiek tiek brangesnis laiko protinga paklausti 595 00:27:08,590 --> 00:27:10,440 operacinė sistema atminties, mes ne 596 00:27:10,440 --> 00:27:13,210 norite baigti patekti į už didelių stygos situacija 597 00:27:13,210 --> 00:27:14,960 kad mes klausia vėl ir vėl OS 598 00:27:14,960 --> 00:27:17,500 ir vėl ir vėl greitai vieną atminties. 599 00:27:17,500 --> 00:27:20,387 Taigi mes tiesiog nusprendė, šiek tiek savavališkai, bet mes tikimės, kad pagrįstai, 600 00:27:20,387 --> 00:27:22,720 kad, žinote, ką, tegul bandyti gauti prieš save 601 00:27:22,720 --> 00:27:25,520 ir tiesiog laikyti jį taip, kad dvigubai mes sumažinti kartų kiekį 602 00:27:25,520 --> 00:27:29,010 mes turime skambinti malloc arba realloc, tačiau bendras sprendimas 603 00:27:29,010 --> 00:27:31,820 skambinti žinant nėra ką vartotojai gali norėti įvesti. 604 00:27:31,820 --> 00:27:33,600 Abu būdai gali būti ginčytina. 605 00:27:33,600 --> 00:27:35,430 Tikriausiai gerai. 606 00:27:35,430 --> 00:27:39,240 >> Taigi leiskite pažvelgti pora kitų šalutinių poveikių, atminties, 607 00:27:39,240 --> 00:27:41,610 dalykų, kurie gali suklysti ir priemonės, kurias galite 608 00:27:41,610 --> 00:27:43,880 naudoti sugauti šių klaidų rūšių. 609 00:27:43,880 --> 00:27:47,800 Pasirodo, visi jūs, nors check50 nepasakė jums, kiek, 610 00:27:47,800 --> 00:27:50,050 buvo raštu Buggy kodas nes savaitę vieną, 611 00:27:50,050 --> 00:27:53,630 net jei visi check50 testai praėjo, ir net jei jūs ir jūsų TF 612 00:27:53,630 --> 00:27:56,010 yra super įsitikinę, kad Jūsų kodas veikia kaip numatyta. 613 00:27:56,010 --> 00:27:59,190 Jūsų kodas buvo Buggy arba ydingas tuo, kad jus visus, 614 00:27:59,190 --> 00:28:02,540 naudodami CS50 biblioteką, buvo nesandarus atmintį. 615 00:28:02,540 --> 00:28:06,040 Jūs buvote klausia operacinės sistemos už atminties dauguma programų 616 00:28:06,040 --> 00:28:08,850 parašiau, bet jūs niekada iš tikrųjų atidavė jį atgal. 617 00:28:08,850 --> 00:28:12,110 Jūs vadinamas GetString ir GetInt ir GetFloat, 618 00:28:12,110 --> 00:28:15,270 bet su GetString, jūs niekada vadinamas unGetString arba suteikti 619 00:28:15,270 --> 00:28:19,890 Styginių Atgal ar pan, bet mes matėme kad GetString daro paskirstyti atmintį 620 00:28:19,890 --> 00:28:22,810 būdu malloc ar tai funkcija realloc, kuri yra tik 621 00:28:22,810 --> 00:28:25,670 labai panaši dvasia, ir dar, mes buvome 622 00:28:25,670 --> 00:28:28,629 klausia operacinę sistemą atmintis ir atminties vėl ir vėl 623 00:28:28,629 --> 00:28:29,670 bet niekada duoti atgal. 624 00:28:29,670 --> 00:28:33,550 >> Dabar, kaip panaikinti, ji Pasirodo, kad kai programa uždaroma, visi atmintyje 625 00:28:33,550 --> 00:28:34,870 automatiškai išlaisvinti. 626 00:28:34,870 --> 00:28:36,150 Taigi tai nebuvo didžiulis spręsti. 627 00:28:36,150 --> 00:28:38,590 Jis nesiruošia pertrauka IDE arba lėtai dalykų žemyn, 628 00:28:38,590 --> 00:28:40,670 Bet kai programos padaryti paprastai ištekėti atminties 629 00:28:40,670 --> 00:28:42,170 ir jie veikia ilgą laiką. 630 00:28:42,170 --> 00:28:45,640 Jeigu jūs kada nors matė kvailas Little paplūdimio kamuolys Mac OS arba smėlio laikrodis 631 00:28:45,640 --> 00:28:51,160 Windows, kur jis rūšies lėtėja ar galvoju ar mąstymas 632 00:28:51,160 --> 00:28:53,770 arba tiesiog tikrai prasideda sulėtės iki nuskaitymo, 633 00:28:53,770 --> 00:28:56,960 tai labai galėtų būti iš atminties nutekėjimas rezultatas. 634 00:28:56,960 --> 00:28:59,970 Programuotojai rašę programinė įranga, jūs naudojate 635 00:28:59,970 --> 00:29:03,570 paprašyti operacinės sistemos atminties kas kelias minutes, kas valandą. 636 00:29:03,570 --> 00:29:05,570 Bet jei naudojatės programine įranga, net jei tai 637 00:29:05,570 --> 00:29:08,680 sumažintas kompiuteryje valandų ar dienų pabaigos, 638 00:29:08,680 --> 00:29:11,980 Jums gali būti užduoti daugiau ir daugiau atmintis ir niekada iš tikrųjų jį naudoti 639 00:29:11,980 --> 00:29:15,180 ir kad jūsų kodas gali būti arba programos gali būti nesandarus atmintį, 640 00:29:15,180 --> 00:29:18,350 o jeigu pradėsite ištekėti atmintį, ten mažiau atminties kitoms programoms, 641 00:29:18,350 --> 00:29:21,220 ir poveikis yra lėtai viską žemyn. 642 00:29:21,220 --> 00:29:23,600 >> Dabar, tai yra toli viena žvėriškiausius programos 643 00:29:23,600 --> 00:29:26,350 Jūs turėsite galimybes paleisti CS50 tiek 644 00:29:26,350 --> 00:29:31,650 nes jo produkcija yra dar ezoterinių nei Zaszczękać s arba padaryti arba kurios nors komandą 645 00:29:31,650 --> 00:29:35,930 line programos mes paleisti anksčiau, bet Laimei, įdėta į savo produkcijos 646 00:29:35,930 --> 00:29:39,810 yra keletas patarimų, kurie itin naudinga bus naudinga arba dėl PSet keturių 647 00:29:39,810 --> 00:29:41,510 ar tikrai PSet penki. 648 00:29:41,510 --> 00:29:44,250 Taigi Valgrind yra įrankis kuris gali būti naudojamas ieškoti 649 00:29:44,250 --> 00:29:46,930 atminties nutekėjimas į savo programą. 650 00:29:46,930 --> 00:29:48,570 Tai gana paprasta paleisti. 651 00:29:48,570 --> 00:29:51,420 Jūs paleisti Valgrind ir tada, net nors tai šiek tiek daugiažodis, 652 00:29:51,420 --> 00:29:54,440 brūkšnys brūkšnys nuotėkio patikrinimas lygus pilnas, tada dot 653 00:29:54,440 --> 00:29:56,320 velniop ir jūsų programos pavadinimas. 654 00:29:56,320 --> 00:30:00,010 Taigi Valgrind bus paleisti programą ir pačioje pabaigoje jūsų programos 655 00:30:00,010 --> 00:30:02,240 veikia prieš jį meta ir suteikia jums kitą eilutę, 656 00:30:02,240 --> 00:30:04,980 jis ketina analizuoti savo programa, o tai jau veikia 657 00:30:04,980 --> 00:30:07,740 ir pasakyti tu ištekėti bet atmintis ir dar geriau, 658 00:30:07,740 --> 00:30:10,610 tu paliesti atmintį, nebuvo priklauso jums? 659 00:30:10,610 --> 00:30:13,700 Ji negali sugauti viską, bet tai gana gerai traukiantis daugelį dalykų. 660 00:30:13,700 --> 00:30:19,700 >> Taigi čia rasite mano Pabėgęs pavyzdys Ši programa, Pabėgęs Valgrind, 661 00:30:19,700 --> 00:30:21,470 dėl programos, vadinamos atminties, ir aš ruošiuosi 662 00:30:21,470 --> 00:30:24,730 išryškinti linijas, kurios yra galiausiai įdomūs mums. 663 00:30:24,730 --> 00:30:27,690 Taigi ten net daugiau ramiai kad aš išbraukta iš skaidrę. 664 00:30:27,690 --> 00:30:30,930 Bet tegul tik pamatyti, kas tai Programa yra pajėgi mums. 665 00:30:30,930 --> 00:30:34,800 Tai gali mums dalykus kaip negaliojantis rašyti dydžio 4 d. 666 00:30:34,800 --> 00:30:38,020 Kitaip tariant, jei jūs liečiate atmintį, ypač į jo 4 baitų atminties 667 00:30:38,020 --> 00:30:40,350 kad jums neturėtų būti, Valgrind galiu pasakyti, kad. 668 00:30:40,350 --> 00:30:41,660 Neteisingas Parašyti dydžio 4 d. 669 00:30:41,660 --> 00:30:43,640 Jūs palietė keturi baitai kad jums neturėtų būti. 670 00:30:43,640 --> 00:30:44,840 Kur tu tai padaryti? 671 00:30:44,840 --> 00:30:45,900 Tai yra grožis. 672 00:30:45,900 --> 00:30:50,000 Atminties taškas c linija 21 yra ten, kur įsukus ir tai, kodėl tai naudinga. 673 00:30:50,000 --> 00:30:53,410 Panašiai kaip GDB, ji gali padėti Jus atkreipti faktine klaida. 674 00:30:53,410 --> 00:30:57,170 >> Dabar tai vienas šiek tiek daugiau daugiažodis, jei ne paini. 675 00:30:57,170 --> 00:31:01,307 40 baitų 1 blokus yra tikrai prarado nuostolių įrašo 1 iš 1. 676 00:31:01,307 --> 00:31:02,140 Ką tai reiškia? 677 00:31:02,140 --> 00:31:05,920 Na, tai tiesiog reiškia, kad jūs paprašė 40 baitų, ir jūs niekada atgal. 678 00:31:05,920 --> 00:31:08,930 Jūs vadinamas malloc ar jūs vadinamas GetString ir operacinė sistema 679 00:31:08,930 --> 00:31:12,450 davė jums 40 baitų, tačiau jūs niekada išlaisvino arba išleistas tą atmintį, 680 00:31:12,450 --> 00:31:15,400 ir būtų teisinga, mes niekada rodo jums, kaip duoti atgal atmintį. 681 00:31:15,400 --> 00:31:17,910 Pasirodo, ten super paprasta funkcija vadinama nemokama. 682 00:31:17,910 --> 00:31:21,170 Mano vienas argumentas, dalykas norite nemokamai arba duoti atgal, 683 00:31:21,170 --> 00:31:23,430 bet 40 baitų, matyt, Šioje programoje 684 00:31:23,430 --> 00:31:27,300 buvo prarasta eilutėje 20 atminties dot C. 685 00:31:27,300 --> 00:31:28,650 >> Taigi pažiūrėkime šią programą. 686 00:31:28,650 --> 00:31:31,020 Tai itin nenaudingas. 687 00:31:31,020 --> 00:31:33,980 Tai tik parodo, Tai ypač klaida. 688 00:31:33,980 --> 00:31:34,920 Taigi leiskite pažvelgti. 689 00:31:34,920 --> 00:31:39,920 Čia yra pagrindiniai ir svarbiausi, pranešimo, skambučiai funkcija vadinama F ir tada vėl. 690 00:31:39,920 --> 00:31:41,550 Taigi ne visi, kad įdomus. 691 00:31:41,550 --> 00:31:42,664 Ką f daryti? 692 00:31:42,664 --> 00:31:44,330 Atkreipkite dėmesį, aš ne nerimauti su prototipu. 693 00:31:44,330 --> 00:31:46,520 Norėjau išlaikyti kodą kuo mažesnis. 694 00:31:46,520 --> 00:31:49,530 Taigi aš įdėti f aukščiau pagrindinis ir tai gerai, žinoma, 695 00:31:49,530 --> 00:31:51,500 trumpiems programų, kaip šis. 696 00:31:51,500 --> 00:31:56,910 Taigi f negrąžina nieko ir nėra nesiima nieko, tačiau ji tai padaryti. 697 00:31:56,910 --> 00:31:59,620 Jis pareiškia, panašiai kaip į Binky pavyzdžiui, 698 00:31:59,620 --> 00:32:02,682 rodyklė vadinamas x, vyksta saugoti į int adresą. 699 00:32:02,682 --> 00:32:03,890 Štai kairėje pusėje. 700 00:32:03,890 --> 00:32:07,230 Anglų kalba, kas yra dešinioji pusė daro? 701 00:32:07,230 --> 00:32:09,770 Kiekvienas? 702 00:32:09,770 --> 00:32:13,665 Kas tai daro už mus? 703 00:32:13,665 --> 00:32:14,651 Taip? 704 00:32:14,651 --> 00:32:16,623 >> Auditorija: [nesigirdi] kartus daugiau int dydis 705 00:32:16,623 --> 00:32:19,175 kuris yra 10 kartų, kad [nesigirdi] 706 00:32:19,175 --> 00:32:20,800 DAVID Malan: Geras ir leiskite man apibendrinti. 707 00:32:20,800 --> 00:32:25,480 Taigi skirti pakankamai vietos 10 sveikieji skaičiai arba 10, kas iš int dydis, 708 00:32:25,480 --> 00:32:29,340 tai keturi baitai, todėl 10 kartų 4 yra 40, taip, kad dešinėje pusėje, kad aš 709 00:32:29,340 --> 00:32:33,930 Pažymėtas yra duoti man 40 baitų ir saugoti pirmojo baito adresą 710 00:32:33,930 --> 00:32:34,940 į x. 711 00:32:34,940 --> 00:32:38,380 Ir dabar pagaliau ir čia, kur Ši programa yra Buggy, kas 712 00:32:38,380 --> 00:32:41,540 negerai su linija 21, remiantis šia logika? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Kas negerai su linija 21? 715 00:32:46,280 --> 00:32:46,780 Taip? 716 00:32:46,780 --> 00:32:49,550 Auditorija: Jūs negalite rodiklis į X [nesigirdi]. 717 00:32:49,550 --> 00:32:50,300 DAVID Malan: Taip. 718 00:32:50,300 --> 00:32:52,270 Aš ne rodiklis į x patinka. 719 00:32:52,270 --> 00:32:53,850 Taigi sintaksiškai, kad viskas OK. 720 00:32:53,850 --> 00:32:56,990 Kas yra graži, panašiai kaip jums gali gydyti masyvo vardą 721 00:32:56,990 --> 00:33:01,080 taip, tarsi tai rodyklė, panašiai galite gydyti žymeklį kaip nors tai 722 00:33:01,080 --> 00:33:06,425 masyvas, todėl galiu sintaksiškai sako x laikiklis kažką x laikiklis i 723 00:33:06,425 --> 00:33:07,800 bet 10 yra problemiškas. 724 00:33:07,800 --> 00:33:09,096 Kodėl? 725 00:33:09,096 --> 00:33:10,910 >> Auditorija: Nes tai ne viduje. 726 00:33:10,910 --> 00:33:12,390 >> DAVID Malan: Tai ne viduje, kad atminties riekė. 727 00:33:12,390 --> 00:33:15,306 Kas yra didžiausia vertė turėčiau būti išleisti tose laužtiniuose skliaustuose? 728 00:33:15,306 --> 00:33:16,870 9, 0 iki 9. 729 00:33:16,870 --> 00:33:18,160 Dėl nulinio indeksavimo. 730 00:33:18,160 --> 00:33:20,190 Taigi 0 iki 9 būtų gerai. 731 00:33:20,190 --> 00:33:23,960 Laikiklis 10 nėra gera ir bet, prisiminti, nors kiekvieną kartą 732 00:33:23,960 --> 00:33:27,017 Man atrodo, kad pabandyti padaryti CS50 IDE Crash įvesdami fiktyviais vertybių, 733 00:33:27,017 --> 00:33:29,100 ji ne visada bendradarbiauti, Ir iš tiesų, dažnai 734 00:33:29,100 --> 00:33:31,460 gauti pasisekė tik todėl, kad operacinė sistema nėra 735 00:33:31,460 --> 00:33:35,467 pastebėsite, kad jūs vis tiek šiek tiek praeiti šiek tiek riekė atminties, 736 00:33:35,467 --> 00:33:38,300 nes liko per techniškai Jūsų segmentas, tačiau daugiau apie tai 737 00:33:38,300 --> 00:33:40,940 į operacinių sistemų klasės, ir taip kažkas panašaus į tai 738 00:33:40,940 --> 00:33:43,000 gali labai lengvai neatskleistos. 739 00:33:43,000 --> 00:33:48,120 Jūsų programa manimi niekada į avariją nuosekliai, bet gal kai kurį laiką. 740 00:33:48,120 --> 00:33:50,610 >> Ir taip pabandykime Valgrind apie tai, ir čia 741 00:33:50,610 --> 00:33:52,870 kur mes gauti užvaldo iki išėjimo trumpam. 742 00:33:52,870 --> 00:34:00,810 Todėl įsitikinkite, atminties Valgrind nuotėkio patikrinimas lygus visą dot velniop atmintį. 743 00:34:00,810 --> 00:34:03,040 Ir štai kodėl aš pažadu tai sukrėsti. 744 00:34:03,040 --> 00:34:05,700 Štai ką Valgrind, štai ką programuotojas, keletą metų ago- 745 00:34:05,700 --> 00:34:08,469 nusprendžiau, kad būtų gera idėja už produkcijos atrodyti. 746 00:34:08,469 --> 00:34:09,750 Taigi leiskite prasmės tai. 747 00:34:09,750 --> 00:34:13,120 Taigi, visi ant kairiosios rankos būdas pusė be priežasties 748 00:34:13,120 --> 00:34:16,620 yra procesas ID programos mes tiesiog paleisti, unikalų identifikatorių 749 00:34:16,620 --> 00:34:18,030 programai, mes tiesiog pritrūko. 750 00:34:18,030 --> 00:34:19,738 Mes panaikinome, kad nuo skaidrių, tačiau 751 00:34:19,738 --> 00:34:22,190 yra naudingos informacijos čia. 752 00:34:22,190 --> 00:34:24,684 >> Leiskite slinkite iki pat viršaus. 753 00:34:24,684 --> 00:34:25,600 Štai kur mes pradėjome. 754 00:34:25,600 --> 00:34:27,040 Taigi, tai ne visi, kad daug produkcijos. 755 00:34:27,040 --> 00:34:30,429 Štai, kad negalioja rašymo 4 dydis on line 21. 756 00:34:30,429 --> 00:34:31,760 Na, kas buvo linija 21? 757 00:34:31,760 --> 00:34:34,500 21 linija buvo tiksliai tai ir prasminga 758 00:34:34,500 --> 00:34:37,290 kad aš tinkamai formoje raštu 4 baitų, nes aš 759 00:34:37,290 --> 00:34:40,389 bando įdėti šią sveikasis skaičius, kuris gali būti bet kas, 760 00:34:40,389 --> 00:34:42,370 tai tiesiog atsitinka būti nulis, bet aš bandau 761 00:34:42,370 --> 00:34:44,940 įdėti ją iš vietos, kuris nepriklauso man. 762 00:34:44,940 --> 00:34:50,900 Be to, čia apačioje, 40 baitų vienas blokai yra tikrai prarado įrašo 1 d. 763 00:34:50,900 --> 00:34:56,500 Tai todėl, kad kai aš skambinti malloc čia, aš niekada iš tikrųjų laisvos atminties. 764 00:34:56,500 --> 00:34:58,140 >> Taigi, kaip mes galime išspręsti šią problemą? 765 00:34:58,140 --> 00:35:02,970 Leiskite man eiti į priekį ir būti šiek tiek saugiau ir daryti 9 ten ir leiskite man čia nemokamai x. 766 00:35:02,970 --> 00:35:04,820 Tai yra naujas funkcija šiandien. 767 00:35:04,820 --> 00:35:11,520 Jei aš dabar pakartotas padaryti atminties dot velniop, Bėkim Valgrind jį dar kartą, 768 00:35:11,520 --> 00:35:14,990 padidinti mano langą ir paspauskite "Enter". 769 00:35:14,990 --> 00:35:16,900 Dabar, tai gerai. 770 00:35:16,900 --> 00:35:19,590 Jie palaidoti gerą naujieną visose šio išėjimo. 771 00:35:19,590 --> 00:35:20,810 Visi Heap blokai buvo nemokamai. 772 00:35:20,810 --> 00:35:23,604 Mes grįžti į ką krūvą yra, bet nėra nuotėkio yra įmanoma. 773 00:35:23,604 --> 00:35:25,520 Taigi tai yra tik dar vienas įrankis jūsų įrankių rinkinys 774 00:35:25,520 --> 00:35:30,220 su kuria jūs galite pradėti Rasti dabar klaidų, pavyzdžiui, kad. 775 00:35:30,220 --> 00:35:34,532 >> Bet pažiūrėkime, ką daugiau gali suklysti čia. 776 00:35:34,532 --> 00:35:38,890 Leiskite pereiti dabar iš tikrųjų išspręsti problemą. 777 00:35:38,890 --> 00:35:42,440 Kaip panaikinti, jei tai bus atleisti šiek tiek supainioti ar įtampos, 778 00:35:42,440 --> 00:35:43,430 tai dabar juokinga. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Taip. 781 00:35:46,900 --> 00:35:49,040 Tai gana gerai. 782 00:35:49,040 --> 00:35:50,890 Kadangi rodyklės yra adresai ir adresai 783 00:35:50,890 --> 00:35:53,098 paprastai pagal susitarimą parašyta šešioliktainėje. 784 00:35:53,098 --> 00:35:54,650 Cha, cha, tai juokinga dabar. 785 00:35:54,650 --> 00:35:58,390 Šiaip ar taip, tad dabar iš tikrųjų išspręsti problemą. 786 00:35:58,390 --> 00:36:00,840 Tai buvo super, Super žemo lygio iki šiol, 787 00:36:00,840 --> 00:36:03,950 ir mes iš tikrųjų galime padaryti naudinga ką su šių žemo lygio detalių. 788 00:36:03,950 --> 00:36:06,710 >> Taigi, mes pristatė keletą savaičių prieš iš masyvo sąvoka. 789 00:36:06,710 --> 00:36:09,177 Masyvas buvo gražus, nes sunku išvalyti mūsų kodą 790 00:36:09,177 --> 00:36:11,760 nes jei mes norėjome parašyti Programa su keliais studentais 791 00:36:11,760 --> 00:36:15,270 arba kelis pavadinimus ir namų bendrabučiuose ir kolegijų ir visa tai, 792 00:36:15,270 --> 00:36:19,430 galėtume laikyti viskas daugiau švariai viduje masyvą. 793 00:36:19,430 --> 00:36:23,039 Bet siūlyti Viena neigiama masyvo šiol. 794 00:36:23,039 --> 00:36:26,080 Net jei jūs nepatyrė patys programoje, tiesiog instinktyviai, 795 00:36:26,080 --> 00:36:30,870 kas yra blogas dalykas apie masyvą, galbūt? 796 00:36:30,870 --> 00:36:32,337 Girdžiu kai ūžia. 797 00:36:32,337 --> 00:36:34,170 Auditorija: Sunku pakeisti dydį. 798 00:36:34,170 --> 00:36:36,128 DAVID Malan: Sunku pakeisti dydį. 799 00:36:36,128 --> 00:36:38,660 Jūs negalite keisti dydį masyvo, iš tiesų, per se, 800 00:36:38,660 --> 00:36:43,040 C Galite skirti kitą masyvą, perkelti viską iš senojo 801 00:36:43,040 --> 00:36:45,380 į naują, o dabar turėti tam tikrą papildomą erdvę, 802 00:36:45,380 --> 00:36:47,469 bet tai nepatinka kalba kaip Java ar Python 803 00:36:47,469 --> 00:36:49,760 arba bet kitas numeris kalbos, su kuriomis kai kurie iš jūsų 804 00:36:49,760 --> 00:36:52,070 gali būti susipažinę kur jus gali tiesiog laikyti pridedant dalykų 805 00:36:52,070 --> 00:36:53,930 znudzenia į masyvą pabaigoje. 806 00:36:53,930 --> 00:36:57,880 Kai jūs turite iš masyvo dydis 6, tai yra jos dydis, 807 00:36:57,880 --> 00:37:01,970 ir tiek daug, kaip idėja anksčiau turintys tam tikro dydžio buferį, 808 00:37:01,970 --> 00:37:05,940 jūs turite atspėti iš vartų kokio dydžio norite, kad ji būtų? 809 00:37:05,940 --> 00:37:07,880 Jei atspėti per didelis, jūs eikvoti vietos. 810 00:37:07,880 --> 00:37:10,950 Jei galite atspėti, per mažas, jums gali ne aukštesnėje, kad duomenys, bent 811 00:37:10,950 --> 00:37:12,940 be daug darbo. 812 00:37:12,940 --> 00:37:18,180 >> Taigi, šiandien, dėka patarimų, mes galime pradėti susiuvimo kartu savo užsakymą 813 00:37:18,180 --> 00:37:20,989 duomenų struktūros ir Faktas, čia yra kažkas 814 00:37:20,989 --> 00:37:23,030 kad atrodo šiek tiek daugiau paslaptingas iš pirmo žvilgsnio, 815 00:37:23,030 --> 00:37:26,440 bet tai, ką mes vadiname susijęs sąrašas, o jo vardas rūšies apibendrina 816 00:37:26,440 --> 00:37:26,940 tai. 817 00:37:26,940 --> 00:37:29,550 Tai iš numerių sąrašas, arba Šiuo atveju, skaičių, sąrašas 818 00:37:29,550 --> 00:37:33,480 bet tai gali būti nieko sąrašas, tačiau tai tarpusavyje susiję būdu rodyklėmis, 819 00:37:33,480 --> 00:37:36,380 ir tik spėti su tuo, ką technika 820 00:37:36,380 --> 00:37:38,310 mes ketiname turėti dygsnio kartu, 821 00:37:38,310 --> 00:37:42,540 tarsi pūsti su sriegiu, susijusiantrosios sąrašai stačiakampiai čia? 822 00:37:42,540 --> 00:37:43,936 Jos numerius? 823 00:37:43,936 --> 00:37:45,560 Koks pagrindinis kalbos funkcija? 824 00:37:45,560 --> 00:37:46,350 >> Auditorija: Rodyklė. 825 00:37:46,350 --> 00:37:47,308 >> DAVID Malan: Rodyklė. 826 00:37:47,308 --> 00:37:51,700 Taigi, kiekvienas iš šių rodyklėmis čia reiškia rodyklė ar tiesiog adresą. 827 00:37:51,700 --> 00:37:54,590 Taigi, kitaip tariant, jei aš noriu saugoti numerių sąrašą, 828 00:37:54,590 --> 00:37:59,040 Aš negaliu tiesiog laikyti jį, jei noriu gebėjimas augti ir trauktis 829 00:37:59,040 --> 00:38:00,990 mano duomenų struktūra masyve. 830 00:38:00,990 --> 00:38:03,000 Taigi man reikia turėti šiek tiek pažangiau, 831 00:38:03,000 --> 00:38:05,720 bet pastebėsite, kad tai nuotrauka rūšies rodo 832 00:38:05,720 --> 00:38:08,650 kad jei jūs ką tik gavo mažai temas jungiantis viską kartu, 833 00:38:08,650 --> 00:38:13,100 tikriausiai ne tai, kad sunku padaryti vietos tarp du iš šių stačiakampių 834 00:38:13,100 --> 00:38:16,750 arba du iš šių mazgų, nes mes pradėsime vadindamas juos, įdėti naują mazgo, 835 00:38:16,750 --> 00:38:19,547 ir tada su kai naują temą, tiesiog griovys tris mazgus kartu, 836 00:38:19,547 --> 00:38:22,880 pirmasis, paskutinis, ir vienas, kad jūs tiesiog įkištas į vidurį. 837 00:38:22,880 --> 00:38:26,000 >> Ir iš tiesų susiję sąrašas skirtingai masyvo, yra dinamiškas. 838 00:38:26,000 --> 00:38:27,840 Jis gali augti, ir ji gali trauktis, ir jūs neturite 839 00:38:27,840 --> 00:38:32,434 turite žinoti, ar rūpintis iš anksto how daug duomenų, jūs ketinate būti saugoti, 840 00:38:32,434 --> 00:38:35,600 tačiau ji Pasirodo, turime būti šiek tiek atsargūs, apie tai, kaip įgyvendinti tai. 841 00:38:35,600 --> 00:38:39,070 Taigi, pirmiausia aptarkime, kaip mes įgyvendinti vienas iš šių mažai stačiakampių. 842 00:38:39,070 --> 00:38:40,690 Tai lengva įgyvendinti int. 843 00:38:40,690 --> 00:38:44,000 Jūs tiesiog pasakyti int n ir tada jūs gaunate 4 baitų int, 844 00:38:44,000 --> 00:38:49,089 bet kaip man gauti int, vadina jį n ir tada žymeklis, tegul jį vadina toliau. 845 00:38:49,089 --> 00:38:50,880 Mes galime skambinti šių viskas ką mes norime 846 00:38:50,880 --> 00:38:53,590 bet man reikia pasirinktinį duomenų struktūrą. 847 00:38:53,590 --> 00:38:54,257 Taip? 848 00:38:54,257 --> 00:38:57,020 >> Auditorija: Ženklas [nesigirdi]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID Malan: Taigi Ampersand mes naudojame gauti iš mazgo adresą potencialiai. 850 00:39:00,940 --> 00:39:02,740 Bet mes turime kitą bruožas C, kad 851 00:39:02,740 --> 00:39:06,700 suteikti man galimybę sukurti Šis paprotys stačiakampis, šis paprotys 852 00:39:06,700 --> 00:39:08,919 kintamasis, jei bus, atmintyje. 853 00:39:08,919 --> 00:39:09,710 AUDITORIJA: a konstrukto. 854 00:39:09,710 --> 00:39:10,626 DAVID Malan: a konstrukto. 855 00:39:10,626 --> 00:39:14,310 Prisiminkite, iš praeitą savaitę, mes pristatėme konstrukto, tai gana paprasta raktažodžių 856 00:39:14,310 --> 00:39:16,254 kuri leidžia mums padaryti tokius dalykus. 857 00:39:16,254 --> 00:39:18,420 C neatėjo su duomenų struktūra vadinama studentas. 858 00:39:18,420 --> 00:39:22,190 Jis ateina su int ir float ir char ir pavyzdžiui, bet jis nėra ateis su studentas, 859 00:39:22,190 --> 00:39:26,750 bet mes galime sukurti studentas duomenų tipą, studentas struktūra, su šiuo sintaksę 860 00:39:26,750 --> 00:39:27,250 čia. 861 00:39:27,250 --> 00:39:28,350 Ir jūs pamatysite tai vėl ir vėl. 862 00:39:28,350 --> 00:39:30,426 Taigi nesijaudinkite įsiminti žodžius, 863 00:39:30,426 --> 00:39:33,300 bet raktinis žodis, svarbu yra tik faktas, kad mes sakėme konstrukto 864 00:39:33,300 --> 00:39:37,590 ir tada mes pavadino jį studentas ir viduje studento buvo pavadinimas ir namo 865 00:39:37,590 --> 00:39:39,390 arba akademika arba panašiai. 866 00:39:39,390 --> 00:39:41,980 >> Ir todėl dabar ir šiandien, tegul pasiūlo tai. 867 00:39:41,980 --> 00:39:45,240 Aš pridėjo kelis žodžius, bet jei aš noriu įgyvendinti šį stačiakampį, kad yra 868 00:39:45,240 --> 00:39:48,440 gavo tiek int ir A žymeklis, jūs žinote, ką aš 869 00:39:48,440 --> 00:39:51,540 ketina paskelbti konstrukto vadinamas mazgas. 870 00:39:51,540 --> 00:39:55,630 Aš taip pat, viduje ji, ketina pasakyti kad mazgas, tai stačiakampis, yra int 871 00:39:55,630 --> 00:39:59,730 ir mes jį vadiname n ir jis turi kitą žymeklį. 872 00:39:59,730 --> 00:40:02,540 Ir tai yra šiek tiek daugiažodis, bet jei jūs manote apie tai, 873 00:40:02,540 --> 00:40:07,300 rodykles, kurios buvo paveikslėlyje prieš momentas yra tai, kokie duomenys tipą? 874 00:40:07,300 --> 00:40:12,330 Kur kiekvienas iš tų strėlių yra nukreipta kokio tipo duomenų struktūrą? 875 00:40:12,330 --> 00:40:14,332 Tai ne nukreipta tik į per se tarpt. 876 00:40:14,332 --> 00:40:16,165 Tai nukreipta į Visa stačiakampio dalykas 877 00:40:16,165 --> 00:40:18,720 ir kad stačiakampio dalykas, sakėme, yra vadinamas mazgas. 878 00:40:18,720 --> 00:40:21,720 Ir todėl mes natūra turi rekursyviai apibrėžti tai toks 879 00:40:21,720 --> 00:40:26,270 kad mazgas, tarkim, bus pateikta int vadinamas n 880 00:40:26,270 --> 00:40:31,070 ir rodyklė vadinamas šalia ir tipo duomenų struktūrą, į kurią 881 00:40:31,070 --> 00:40:35,770 kad žymiklis taškai, matyt, bus konstrukto mazgas. 882 00:40:35,770 --> 00:40:41,550 >> Taigi tai yra annoyingly daugiažodis ir tiesiog būti pedantiškas, 883 00:40:41,550 --> 00:40:44,100 priežastis, kodėl mes negalime tiesiog pasakyti tai, kuris atvirai 884 00:40:44,100 --> 00:40:46,860 atrodo daug labiau skaitoma, yra todėl, kad priminti, kad C skaityti 885 00:40:46,860 --> 00:40:48,710 viskas iš viršaus į apačią, iš kairės į dešinę. 886 00:40:48,710 --> 00:40:54,120 Tai ne, kol mes gauti kabliataškį kad raktažodis mazgas iš tikrųjų egzistuoja. 887 00:40:54,120 --> 00:40:57,980 Taigi, jei norime, kad šis rūšiuoti cikliška nuoroda viduje duomenų 888 00:40:57,980 --> 00:41:02,120 struktūra, turime tai padaryti, kur mes sakome struct mazgas viršuje, kuris 889 00:41:02,120 --> 00:41:06,770 suteikia mums ilgesnį kelią aprašyti tai dalykas, tada viduje sakome struct mazgas, 890 00:41:06,770 --> 00:41:09,560 ir tada, per paskutinę linija mes sakome, gerai, C, beje, 891 00:41:09,560 --> 00:41:12,060 tiesiog paskambinkite visą šį nusispjauti dalykas mazgas ir sustabdyti 892 00:41:12,060 --> 00:41:14,360 naudojant raktažodžių konstrukto apskritai. 893 00:41:14,360 --> 00:41:18,030 Taigi tai yra tiesiog tarsi sintaksinis Pavyko, kad galiausiai leidžia mums sukurti 894 00:41:18,030 --> 00:41:21,370 kažkas, kad atrodo lygiai taip, kaip šis. 895 00:41:21,370 --> 00:41:25,010 >> Taigi, jei mes manome, dabar mes galime įgyvendinti šį dalyką C, 896 00:41:25,010 --> 00:41:28,040 Kaip mes iš tikrųjų pradėti važiuojantiems tai? 897 00:41:28,040 --> 00:41:32,360 Na, tiesą sakant, visi mes turime padaryti, tai pakartoti iš kairės į dešinę ir tik 898 00:41:32,360 --> 00:41:35,960 rūšies įdėkite mazgų arba ištrinti mazgai arba ieškokite dalykų, kur mes norime, 899 00:41:35,960 --> 00:41:39,560 bet tai padaryti, eikime į priekį ir padaryti viskas šiek tiek daugiau nekilnojamojo nes tai 900 00:41:39,560 --> 00:41:42,560 buvo super žemo lygio iki šiol. 901 00:41:42,560 --> 00:41:45,700 Ar kas nors tiesiog patinka būti pirmas? 902 00:41:45,700 --> 00:41:46,200 GERAI. 903 00:41:46,200 --> 00:41:47,092 Nagi iki. 904 00:41:47,092 --> 00:41:47,800 Koks tavo vardas? 905 00:41:47,800 --> 00:41:48,499 >> David: Davidas. 906 00:41:48,499 --> 00:41:49,290 DAVID Malan: Davidas. 907 00:41:49,290 --> 00:41:49,998 Malonu susipažinti. 908 00:41:49,998 --> 00:41:50,960 Aš irgi. 909 00:41:50,960 --> 00:41:52,450 Gerai. 910 00:41:52,450 --> 00:41:53,990 Ir mes turime skaičių "9". 911 00:41:53,990 --> 00:41:55,240 Ne taip gerai, kaip pirmą kartą, galbūt. 912 00:41:55,240 --> 00:41:56,430 Gerai, numeris 9. 913 00:41:56,430 --> 00:41:59,667 Skaičius 17, prašom. 914 00:41:59,667 --> 00:42:01,000 Leiskite man grįžti šiek tiek toliau. 915 00:42:01,000 --> 00:42:03,980 Numeris 22, prašome ir kaip apie toliau atgal 916 00:42:03,980 --> 00:42:06,344 jei matau, bet rankas su visais šviesos ar ne. 917 00:42:06,344 --> 00:42:08,010 Kažkas yra savanoriškai teisę ten. 918 00:42:08,010 --> 00:42:08,968 Ar norite sugalvoti? 919 00:42:08,968 --> 00:42:10,450 Jūsų dilbio yra prievarta einame. 920 00:42:10,450 --> 00:42:12,340 Gerai, 17. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 yra leistis. 923 00:42:15,120 --> 00:42:18,450 Ar kas nors patinka forcefully-- Nagi iki. 924 00:42:18,450 --> 00:42:21,030 Faktinė savanoris. 925 00:42:21,030 --> 00:42:23,330 >> Taigi, labai greitai, jei vaikinai gali organizuoti 926 00:42:23,330 --> 00:42:26,550 patys tiesiog patinka ant ekrano mazgų. 927 00:42:26,550 --> 00:42:27,510 Ačiū. 928 00:42:27,510 --> 00:42:29,234 Ir jums bus 26. 929 00:42:29,234 --> 00:42:30,650 Visos teisės ir greitas pristatymas. 930 00:42:30,650 --> 00:42:32,139 Taigi, aš Dovydas ir jūs taip pat? 931 00:42:32,139 --> 00:42:32,680 David: Davidas. 932 00:42:32,680 --> 00:42:33,721 DAVID Malan: Ir jūs esate? 933 00:42:33,721 --> 00:42:34,229 JAKE: Jake. 934 00:42:34,229 --> 00:42:34,729 SUE: teistis. 935 00:42:34,729 --> 00:42:35,229 Alex: Alex. 936 00:42:35,229 --> 00:42:36,475 RAPHAEL: Rafaelis. 937 00:42:36,475 --> 00:42:37,100 TAYLOR: Taylor. 938 00:42:37,100 --> 00:42:37,466 DAVID Malan: Taylor. 939 00:42:37,466 --> 00:42:37,590 Puikus. 940 00:42:37,590 --> 00:42:39,810 Taigi tai yra mūsų savanoriai Šiandien ir eiti į priekį 941 00:42:39,810 --> 00:42:43,090 ir perkelti šiek tiek, kad taip, ir tiesiog eiti į priekį ir išlaikyti 942 00:42:43,090 --> 00:42:47,024 turintis savo numerius, jūs esate arba jūsų Pirmasis ženklas ir naudojant savo kairę ranką, 943 00:42:47,024 --> 00:42:48,940 eiti į priekį ir tik įgyvendinti Šios rodyklės, tik 944 00:42:48,940 --> 00:42:51,360 taip, kad jūsų kairė ranka yra tiesiog nukreipta į ką reikėtų atkreipti 945 00:42:51,360 --> 00:42:54,610 ne, ir suteikti sau šiek tiek, kad kambarys mes galime vizualiai pamatyti savo ginklus iš tikrųjų 946 00:42:54,610 --> 00:42:58,120 rodomasis, ir jūs galite tiesiog nurodyti Rūšiuoti ne žemės yra gerai. 947 00:42:58,120 --> 00:43:03,040 >> Taigi čia mes turime susietą sąrašą vieną, du, tris, keturis, penkis mazgai pradžių, 948 00:43:03,040 --> 00:43:05,860 ir pastebėsite, mes turime tai ypatinga rodyklė pradžioje kas manimi 949 00:43:05,860 --> 00:43:09,770 raktas, nes mes turime sekti visos ilgis sąrašą kažkaip. 950 00:43:09,770 --> 00:43:13,590 Šie vaikinai, nors jie paliko į dešinę, atgal atgal į atmintį, 951 00:43:13,590 --> 00:43:15,950 jie iš tikrųjų gali būti bet kur Į kompiuterio atmintį. 952 00:43:15,950 --> 00:43:18,240 Taigi šie vaikinai gali būti stovi bet kur ant stadijoje 953 00:43:18,240 --> 00:43:20,960 ir tai gerai, tol, kol jie tikrųjų nukreipta į vienas nuo kito, 954 00:43:20,960 --> 00:43:22,770 bet kad viskas švarus ir paprastas, mes 955 00:43:22,770 --> 00:43:25,728 tiesiog atkreipti juos kairės į dešinę, kaip tai, bet ten gali būti masyvūs spragos 956 00:43:25,728 --> 00:43:26,790 tarp tų mazgų. 957 00:43:26,790 --> 00:43:30,710 >> Dabar, jei aš noriu, kad iš tikrųjų įterpti keletą nauja vertė, eikime į priekį ir tai padaryti. 958 00:43:30,710 --> 00:43:33,720 Turime galimybę dabar pasirinkti kitą mazgą. 959 00:43:33,720 --> 00:43:39,820 Pasakykite, pradėkime ne su mallocing 55. 960 00:43:39,820 --> 00:43:41,320 Ar kas nors protas yra malloc? 961 00:43:41,320 --> 00:43:42,280 Gerai, nagi iki. 962 00:43:42,280 --> 00:43:42,992 Koks tavo vardas? 963 00:43:42,992 --> 00:43:43,700 VAIVORYKŠTĖ: Rainbow. 964 00:43:43,700 --> 00:43:44,050 DAVID Malan: Rainbow? 965 00:43:44,050 --> 00:43:44,810 Gerai. 966 00:43:44,810 --> 00:43:46,600 Malloc vaivorykštė. 967 00:43:46,600 --> 00:43:47,450 Nagi iki. 968 00:43:47,450 --> 00:43:51,610 Taigi dabar mes turime savęs paklausti, algoritmiškai, kur mes galime įdėti 55. 969 00:43:51,610 --> 00:43:53,610 Taigi, visi iš mūsų žino, Akivaizdu, kur ji tikriausiai 970 00:43:53,610 --> 00:43:55,401 priklauso, jei mes bandome išlaikyti šią rūšiuojami 971 00:43:55,401 --> 00:43:58,299 ir jei jus vaikinai gali užtrukti vieną žingsnis atgal, kad mes neturime nukristi 972 00:43:58,299 --> 00:43:59,590 etapas, kad būtų puiku. 973 00:43:59,590 --> 00:44:01,420 Taigi iš tikrųjų Rainbow, pradėti iš naujo čia su manimi, 974 00:44:01,420 --> 00:44:04,200 nes mes, kaip kompiuteryje gali dabar matyti tik vieną kintamąjį vienu metu. 975 00:44:04,200 --> 00:44:05,190 Taigi, jei tai yra pirmasis mazgas. 976 00:44:05,190 --> 00:44:07,160 Atkreipkite dėmesį, kad jis nėra mazgas, jis tiesiog rodyklė, 977 00:44:07,160 --> 00:44:10,270 ir tai, kodėl jis sudarytas, kad būtų tik rodykle dydis, o ne 978 00:44:10,270 --> 00:44:11,780 vienas iš tų visiškai stačiakampių. 979 00:44:11,780 --> 00:44:16,650 Taigi mes ketiname patikrinti kiekvieną iteracijos yra 55 mažiau nei 9? 980 00:44:16,650 --> 00:44:17,150 Ne. 981 00:44:17,150 --> 00:44:19,060 Ar 55 mažiau nei 17? 982 00:44:19,060 --> 00:44:19,720 Ne. 983 00:44:19,720 --> 00:44:20,800 Mažiau nei 22? 984 00:44:20,800 --> 00:44:22,020 Mažiau nei 26? 985 00:44:22,020 --> 00:44:23,390 Mažiau nei 34? 986 00:44:23,390 --> 00:44:25,890 Ir todėl dabar, žinoma, Vaivorykštinis priklauso pabaigoje. 987 00:44:25,890 --> 00:44:27,270 Taigi, kad būtų aišku, ir kas buvo jūsų vardas Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID Malan: Taigi tarp Taylor kairė ranka ir Rainbow rankos čia, 990 00:44:32,510 --> 00:44:38,324 kurio ranką reikia atkreipti ne ką siekiant įterpti 55 į šį sąrašą? 991 00:44:38,324 --> 00:44:39,240 Ką turime daryti? 992 00:44:39,240 --> 00:44:39,700 Taip? 993 00:44:39,700 --> 00:44:41,140 >> Auditorija: Taylor ranka reikia atkreipti į kairę. 994 00:44:41,140 --> 00:44:41,680 >> DAVID Malan: Būtent. 995 00:44:41,680 --> 00:44:43,800 Taigi įterpiant mazgas į sąrašo pabaigoje 996 00:44:43,800 --> 00:44:47,140 yra gana paprasta, nes Taylor tik turi į tašką, kuris vietoj žemės 997 00:44:47,140 --> 00:44:49,640 ar mes jį vadiname niekinis, niekinis yra tarsi nesant 998 00:44:49,640 --> 00:44:51,640 iš rodyklę arba speciali nulis žymeklis, esate 999 00:44:51,640 --> 00:44:53,740 ketina atkreipti jūsų kairėje rankų Rainbow ir tada vaivorykštė, 1000 00:44:53,740 --> 00:44:55,910 Kur reikia kaire ranka tikriausiai taškas? 1001 00:44:55,910 --> 00:44:56,570 Žemyn. 1002 00:44:56,570 --> 00:45:00,140 Tai nėra gerai, jei jos ranka yra tarsi nukreipta ne čia arba tarsi bet 1003 00:45:00,140 --> 00:45:00,640 kurlink. 1004 00:45:00,640 --> 00:45:02,407 Kad būtų laikomas šiukšlių vertė, 1005 00:45:02,407 --> 00:45:04,240 bet jei ji atkreipia dėmesį į kai žinoma vertė, mes 1006 00:45:04,240 --> 00:45:07,360 vadina jį nulinis arba niekinis, kad viskas OK nes mes turime į šį terminą 1007 00:45:07,360 --> 00:45:09,390 ir mes žinome, sąrašas dabar yra baigtas. 1008 00:45:09,390 --> 00:45:11,550 >> Taigi, kas kita gana paprastas atvejis? 1009 00:45:11,550 --> 00:45:13,125 Gal mes malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Nagi iki. 1011 00:45:14,010 --> 00:45:14,782 Koks tavo vardas? 1012 00:45:14,782 --> 00:45:15,490 TIFFANY: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID Malan: Aš atsiprašau? 1014 00:45:16,000 --> 00:45:16,470 TIFFANY: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID Malan: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Gerai. 1017 00:45:17,110 --> 00:45:19,071 Tiffany buvo malloced su verte 5. 1018 00:45:19,071 --> 00:45:19,570 Nagi iki. 1019 00:45:19,570 --> 00:45:23,820 Tai vienas gana lengva per daug, bet aptarkime Užsakyti operacijų metu. 1020 00:45:23,820 --> 00:45:25,820 Tai buvo gana lengva su Taylor pabaigoje. 1021 00:45:25,820 --> 00:45:30,302 Numeris 5 yra žinoma mažiau nei 9, ir todėl mes turime Dovydą, turime Tiffany, 1022 00:45:30,302 --> 00:45:31,260 ir kas buvo tavo vardas? 1023 00:45:31,260 --> 00:45:31,680 >> JAKE: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID Malan: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake, o Davidas. 1026 00:45:34,300 --> 00:45:36,580 Kieno ranka turėtų būti atnaujintas pirmas? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Ką norite daryti čia? 1029 00:45:40,590 --> 00:45:45,244 Yra pora galimų būdų, tačiau ten taip pat viena ar daugiau neteisingų būdų. 1030 00:45:45,244 --> 00:45:46,620 >> Auditorija: Pradėti su kairiausias. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID Malan: Pradėti su kairiausias. 1032 00:45:47,800 --> 00:45:49,008 Kas kairiausias čia tada? 1033 00:45:49,008 --> 00:45:49,700 Auditorija: Pirma. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID Malan: Gerai. 1035 00:45:50,366 --> 00:45:53,781 Taigi pradėti pirmas ir kur tu norite atnaujinti Dovydo rankas, kad būtų? 1036 00:45:53,781 --> 00:45:54,780 Auditorija: Link 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID Malan: Gerai. 1038 00:45:55,446 --> 00:45:59,026 Dovydas punktas penkių arba Tiffany čia ir dabar? 1039 00:45:59,026 --> 00:46:01,072 >> Auditorija: Tiffany atkreipia dėmesį į 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID Malan: Puikiai, išskyrus Binky s galva tiesiog rūšies nukrito, tiesa? 1041 00:46:04,030 --> 00:46:06,820 Nes tai, kas yra negerai su Ši nuotrauka pažodžiui? 1042 00:46:06,820 --> 00:46:08,070 Auditorija: Nieko nukreipta. 1043 00:46:08,070 --> 00:46:09,945 DAVID Malan: Nieko nukreipta į Jake dabar. 1044 00:46:09,945 --> 00:46:13,360 Mes tiesiog našlaičiais 9 ir 17, ir mes tiesiog 1045 00:46:13,360 --> 00:46:18,450 nutekėjo visą šį atminties, nes iki atnaujinti Dovydo ranką pirma, tai 1046 00:46:18,450 --> 00:46:21,660 gerai, kiek tai teisingai nukreipta į Tiffany dabar 1047 00:46:21,660 --> 00:46:25,410 bet jei niekas turėjo Prognozavimo atkreipti ne Jake, 1048 00:46:25,410 --> 00:46:27,490 tada mes pamečiau visuma šio sąrašo. 1049 00:46:27,490 --> 00:46:28,200 Taigi leiskite atšaukti. 1050 00:46:28,200 --> 00:46:30,950 Taigi, tai buvo geras dalykas kelionę per bet tegul ištaisyti dabar. 1051 00:46:30,950 --> 00:46:33,624 Ką turėtume daryti pirmiausia vietoj? 1052 00:46:33,624 --> 00:46:34,124 Taip? 1053 00:46:34,124 --> 00:46:35,791 >> Auditorija: Tiffany turėtų būti nukreiptas į 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID Malan: aš negaliu gauti, kad šalia jūsų. 1055 00:46:37,582 --> 00:46:38,720 Kas turėtų būti nukreiptas į 9? 1056 00:46:38,720 --> 00:46:39,220 >> Auditorija: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID Malan: Visos dešinę. 1058 00:46:39,390 --> 00:46:41,200 Taigi Tiffany pirmiausia turėtų taško, esančio 9. 1059 00:46:41,200 --> 00:46:43,550 Taigi Tiffany turėtų imtis tapačiu vertės 1060 00:46:43,550 --> 00:46:45,820 Dovydui, kuris, atrodo, nereikalingas akimirką, 1061 00:46:45,820 --> 00:46:48,820 bet tai gerai, nes dabar antra žingsnis, mes galime atnaujinti Dovydo ranka 1062 00:46:48,820 --> 00:46:52,680 atkreipti Tiffany, ir tada, jei Mes tiesiog rūšies švarus things up 1063 00:46:52,680 --> 00:46:55,740 taip, tarsi tai rūšies pavasario-kaip, Dabar tai teisingas įterpimas. 1064 00:46:55,740 --> 00:46:56,700 Taigi puikus. 1065 00:46:56,700 --> 00:46:57,970 Taigi dabar mes beveik ten. 1066 00:46:57,970 --> 00:47:01,075 Leiskite įdėkite vieną galutinį vertė kaip vertės 20. 1067 00:47:01,075 --> 00:47:03,010 Jei galėtume malloc vieną galutinį savanoriu? 1068 00:47:03,010 --> 00:47:04,140 Nagi iki. 1069 00:47:04,140 --> 00:47:06,224 Taigi tai viena yra šiek tiek daugiau sudėtinga. 1070 00:47:06,224 --> 00:47:08,390 Bet iš tikrųjų, kodas mes raštu, nors žodžiu, 1071 00:47:08,390 --> 00:47:10,610 yra kaip turintys krūva informacija, jei sąlygos dabar, tiesa? 1072 00:47:10,610 --> 00:47:12,318 Mes turėjome būklę tikrinti, ar jis priklauso 1073 00:47:12,318 --> 00:47:13,840 pabaigoje, o gal pradžioje. 1074 00:47:13,840 --> 00:47:15,940 Mes turime tam tikrą kilpą natūra rasti viduryje vietoje. 1075 00:47:15,940 --> 00:47:17,400 Taigi padarykime, kad su tuo, kas yra tavo vardas? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Erikas. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID Malan: Erikas? 1078 00:47:18,340 --> 00:47:18,660 Erikas. 1079 00:47:18,660 --> 00:47:19,368 Malonu susipažinti. 1080 00:47:19,368 --> 00:47:20,490 Taigi, mes turime 20. 1081 00:47:20,490 --> 00:47:21,220 Mažiau nei penkias? 1082 00:47:21,220 --> 00:47:21,530 Ne. 1083 00:47:21,530 --> 00:47:22,160 Mažiau nei devynios? 1084 00:47:22,160 --> 00:47:22,410 Ne. 1085 00:47:22,410 --> 00:47:23,050 Mažiau nei 17? 1086 00:47:23,050 --> 00:47:23,550 Ne. 1087 00:47:23,550 --> 00:47:23,740 GERAI. 1088 00:47:23,740 --> 00:47:25,701 Jis priklauso čia ir jūsų vardai vėl esame? 1089 00:47:25,701 --> 00:47:26,200 SUE: teistis. 1090 00:47:26,200 --> 00:47:26,880 DAVID Malan: teistis. 1091 00:47:26,880 --> 00:47:27,379 Alex: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID Malan: teistis, Aleksas, ir? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Erikas. 1094 00:47:29,290 --> 00:47:30,120 DAVID Malan: Erikas. 1095 00:47:30,120 --> 00:47:32,140 Kieno rankas reikia norint atnaujinti pirmiausia? 1096 00:47:32,140 --> 00:47:32,930 >> Auditorija: Erikas. 1097 00:47:32,930 --> 00:47:33,429 GERAI. 1098 00:47:33,429 --> 00:47:35,200 Taigi Eric turėtų atkreipti ne kur? 1099 00:47:35,200 --> 00:47:35,930 Šiuo 22. 1100 00:47:35,930 --> 00:47:36,430 Geras. 1101 00:47:36,430 --> 00:47:38,180 Ir dabar kas toliau? 1102 00:47:38,180 --> 00:47:40,800 Teistis tada gali atkreipti Eric Ir dabar, jei jus vaikinai tiesiog 1103 00:47:40,800 --> 00:47:44,077 padaryti šiek tiek kambarį, kuris yra gerai vizualiai, o dabar mes padarėme įtraukimui. 1104 00:47:44,077 --> 00:47:47,160 Taigi leiskite dabar mano klausimą, bet Thank you so much už mūsų savanoriams. 1105 00:47:47,160 --> 00:47:48,090 Labai gerai padaryta. 1106 00:47:48,090 --> 00:47:50,831 Galite išsaugoti tuos, jei jums patinka. 1107 00:47:50,831 --> 00:47:54,140 Ir mes turime gražių atsisveikinimo dovaną, jeigu kiekvienas norėtumėte imtis streso kamuolio. 1108 00:47:54,140 --> 00:47:56,030 Leiskite perduoti šią žemyn. 1109 00:47:56,030 --> 00:47:58,430 Taigi, kas yra tai Takeaway? 1110 00:47:58,430 --> 00:48:02,430 Tai gali būti nuostabi tiek, kiek turime dabar 1111 00:48:02,430 --> 00:48:06,360 pristatė alternatyvą į masyvo, kuris yra ne taip apsiriboja 1112 00:48:06,360 --> 00:48:07,780 prie kai kurių fiksuoto dydžio masyvo. 1113 00:48:07,780 --> 00:48:09,380 Jie gali augti dinamiškai. 1114 00:48:09,380 --> 00:48:13,220 >> Tačiau daug, kaip mes matėme savaites praeitis, mes niekada nieko nemokamai, 1115 00:48:13,220 --> 00:48:15,740 kaip tikrai ten kompromisas čia. 1116 00:48:15,740 --> 00:48:18,890 Taigi su susieto nelyginant sąrašas, tai dinamiškumas? 1117 00:48:18,890 --> 00:48:21,590 Šis gebėjimas augti ir atvirai, mes galėjo padaryti ištrinti 1118 00:48:21,590 --> 00:48:23,570 ir mes galime trauktis, kiek reikia. 1119 00:48:23,570 --> 00:48:24,710 Kokią kainą mes mokėti? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Dvigubai daugiau erdvės, visų pirma. 1122 00:48:30,340 --> 00:48:34,010 Jei pažvelgti į paveikslėlį, nebėra aš saugoti sveikųjų skaičių, sąrašą. 1123 00:48:34,010 --> 00:48:36,740 Aš saugodami sąrašą sveikieji skaičiai plius patarimų. 1124 00:48:36,740 --> 00:48:38,240 Taigi, aš dvigubai erdvės dydį. 1125 00:48:38,240 --> 00:48:40,740 Dabar, gal tai nėra tokia baisi 4 baitai, 8 baitai, 1126 00:48:40,740 --> 00:48:43,160 bet jis tikrai galėtų pridėti iki didelių duomenų rinkinių. 1127 00:48:43,160 --> 00:48:45,570 Kas kita neigiama? 1128 00:48:45,570 --> 00:48:46,070 Taip? 1129 00:48:46,070 --> 00:48:48,010 >> Auditorija: Turime feed juos vieną po kito. 1130 00:48:48,010 --> 00:48:48,760 DAVID Malan: Taip. 1131 00:48:48,760 --> 00:48:50,260 Mes turime išanalizuoti juos vieną po kito. 1132 00:48:50,260 --> 00:48:53,860 Jūs žinote, ką mes metė Tai super patogi funkcija kvadratinių laikikliu 1133 00:48:53,860 --> 00:48:57,240 notacija daugiau tinkamai žinomas kaip laisvą prieigą, 1134 00:48:57,240 --> 00:48:59,280 kur mes galime tiesiog šokinėti atskiram elemento 1135 00:48:59,280 --> 00:49:01,470 bet dabar, jei aš vis dar turėjo Mano savanoriai čia, 1136 00:49:01,470 --> 00:49:04,660 jei aš norėjau rasti numeris 22, aš negaliu tiesiog 1137 00:49:04,660 --> 00:49:06,620 peršokti į laikiklis kažkas kažką. 1138 00:49:06,620 --> 00:49:10,530 Turiu atrodo per sąrašą, daug kaip mūsų ieškojimų pavyzdžių tiesiškai, 1139 00:49:10,530 --> 00:49:12,260 rasti numeris 22. 1140 00:49:12,260 --> 00:49:14,340 Taigi mes, atrodo, kad ji sumokėjo kainą ten. 1141 00:49:14,340 --> 00:49:16,430 Bet mes vis dėlto gali išspręsti kitas problemas. 1142 00:49:16,430 --> 00:49:18,587 >> Tiesą sakant, leiskite man pristatyti tik su vizualizacijomis pora. 1143 00:49:18,587 --> 00:49:20,920 Taigi, jei jūs buvote iki Mather valgomajame neseniai, 1144 00:49:20,920 --> 00:49:23,320 jums priminti, kad jų kaminai padėklai, kaip šis, 1145 00:49:23,320 --> 00:49:26,300 mes pasiskolino iš jų Annenberg prieš klasę. 1146 00:49:26,300 --> 00:49:28,930 Taigi šis padėklai kamino, nors, atvaizduoja iš tikrųjų 1147 00:49:28,930 --> 00:49:30,860 iš kompiuterių mokslo duomenų struktūros. 1148 00:49:30,860 --> 00:49:32,910 Yra duomenų struktūra kompiuterių mokslo 1149 00:49:32,910 --> 00:49:38,010 žinomas kaip kamino, kuris labai gražiai skolina pati tiksliai tai vizualiai. 1150 00:49:38,010 --> 00:49:41,380 Taigi, jei kiekviena iš šių padėklai yra ne dėklas bet kaip skaičių ir aš norėjau 1151 00:49:41,380 --> 00:49:45,010 saugoti numerius, aš gali įdėti vieną žemyn čia 1152 00:49:45,010 --> 00:49:48,320 ir galėčiau įdėti kitą žemyn čia ir toliau krauti numerius 1153 00:49:48,320 --> 00:49:53,180 ant vienas kito, ir kas potencialiai naudinga apie tai 1154 00:49:53,180 --> 00:49:55,450 yra tai, kad koks POVEIKIS Šio duomenų struktūros? 1155 00:49:55,450 --> 00:49:58,045 Kuris numeris galiu ištraukti Pirmasis Patogiausia? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 Patys neseniai vienas įdėti ten. 1158 00:50:03,030 --> 00:50:06,430 >> Taigi tai yra tai, ką mes vadiname į kompiuteris mokslui LIFO duomenų struktūra. 1159 00:50:06,430 --> 00:50:08,070 Paskutinis in, first out. 1160 00:50:08,070 --> 00:50:10,800 Ir mes pamatysime prieš ilgas, kodėl kuri gali būti naudinga, bet dabar, 1161 00:50:10,800 --> 00:50:12,200 tiesiog mano turtą. 1162 00:50:12,200 --> 00:50:15,158 Ir tai tipo kvaila, jei jūs manote apie tai, kaip valgykla daro. 1163 00:50:15,158 --> 00:50:17,910 Kiekvieną kartą, kai jie švarūs padėklai ir įdėti šviežių tuos ant viršaus, 1164 00:50:17,910 --> 00:50:22,160 Jūs galite turėti anksčiau švarus bet galiausiai labai purvinas ir dulkėtas 1165 00:50:22,160 --> 00:50:24,360 dėklas pačioje apačioje Jei niekada iš tikrųjų 1166 00:50:24,360 --> 00:50:26,820 patekti į apačioje, kad kamino, nes jums tiesiog 1167 00:50:26,820 --> 00:50:29,380 išlaikyti išleisti naujas ir švarios tie ant jo. 1168 00:50:29,380 --> 00:50:31,840 Tas pats gali atsitikti prekybos centre taip pat. 1169 00:50:31,840 --> 00:50:35,450 Jei turite vitrinos pieno ir kiekvieną kartą CVS 1170 00:50:35,450 --> 00:50:37,610 ar tas, kas gauna daugiau pieno, jūs tiesiog įgrūsti pieneliu 1171 00:50:37,610 --> 00:50:39,880 Jūs jau turite nugaros ir sudėsite naujus priekyje, 1172 00:50:39,880 --> 00:50:43,088 jūs ketinate turėti keletas gana bjaurus pieno ties duomenų struktūros pabaigoje, 1173 00:50:43,088 --> 00:50:46,390 nes jis visada apačioje arba analogiškai tai visada gale. 1174 00:50:46,390 --> 00:50:50,407 >> Tačiau yra ir kitas būdas galvoti apie rikiuojasi duomenis ir, pavyzdžiui, šis. 1175 00:50:50,407 --> 00:50:53,490 Jei esate vienas iš tų žmonių, kurie sako, kad patinka išsirikiuoti už Apple parduotuvėse 1176 00:50:53,490 --> 00:50:55,610 kai naujas produktas yra , jūs tikriausiai 1177 00:50:55,610 --> 00:50:58,780 nenaudojate dėklo duomenis struktūra, nes jus 1178 00:50:58,780 --> 00:51:03,070 būtų atstumti ir visi kiti, kas yra rikiuojasi įsigyti tam tikrą naują žaislą. 1179 00:51:03,070 --> 00:51:06,610 Atvirkščiai, jūs tikriausiai naudojate kokios duomenų struktūros 1180 00:51:06,610 --> 00:51:10,050 ar kokios sistemos realiame pasaulyje? 1181 00:51:10,050 --> 00:51:13,493 Tikimės, kad tai linija, ar daugiau tinkamai arba daugiau britų pavyzdžiui, eilėje. 1182 00:51:13,493 --> 00:51:17,700 Ir it turns out eilėje taip pat yra duomenų struktūra kompiuterių mokslo, 1183 00:51:17,700 --> 00:51:19,700 bet eilėje yra labai skiriasi nuosavybė. 1184 00:51:19,700 --> 00:51:20,820 Tai ne LIFO. 1185 00:51:20,820 --> 00:51:21,990 Paskutinis in, first out. 1186 00:51:21,990 --> 00:51:22,800 Neduok Dieve. 1187 00:51:22,800 --> 00:51:24,280 Tai ne FIFO. 1188 00:51:24,280 --> 00:51:26,110 First in, first out. 1189 00:51:26,110 --> 00:51:27,970 Ir tai yra geras dalykas už teisingumo "labui 1190 00:51:27,970 --> 00:51:30,428 tikrai, kai jūs pamušalas iki super anksti ryte. 1191 00:51:30,428 --> 00:51:33,400 Jei ten Pirma, jūs norite išeiti pirmas, taip pat. 1192 00:51:33,400 --> 00:51:35,880 >> Ir taip visų šių duomenų struktūros, eilės ir kaminai 1193 00:51:35,880 --> 00:51:39,220 ir kekių kitiems, paaiškėja, jums gali galvoti apie tai, kaip tik masyvą. 1194 00:51:39,220 --> 00:51:41,820 Tai yra masyvas, gal fiksuoto dydžio 4, bet tai reikia 1195 00:51:41,820 --> 00:51:44,990 būti natūra malonu, jei galėtume tiesiog krūva padėklai beveik be galo aukštas, jei mes 1196 00:51:44,990 --> 00:51:46,780 turi, kad daugelis padėklai arba numerius. 1197 00:51:46,780 --> 00:51:48,840 Tai gal mes norime naudoti susietą sąrašą čia 1198 00:51:48,840 --> 00:51:51,800 bet kompromisas bus potencialiai kad mums reikia daugiau atminties, 1199 00:51:51,800 --> 00:51:55,930 užtrunka šiek tiek daugiau laiko, bet mes nereikia apriboti kamino aukštis, 1200 00:51:55,930 --> 00:51:59,550 panašiai kaip Mather anketa vitrinos gali apriboti dydį rietuvės, 1201 00:51:59,550 --> 00:52:03,117 ir taip tai yra dizaino sprendimai ar variantų mums galiausiai. 1202 00:52:03,117 --> 00:52:04,950 Taigi su šiais duomenimis struktūros, mes pradėjome 1203 00:52:04,950 --> 00:52:09,360 matau nauja viršutinė kainos ribas potencialiai apie tai, kas anksčiau buvo super greitai, 1204 00:52:09,360 --> 00:52:11,260 ir kur mes paliksime ne šiandien, ir kai 1205 00:52:11,260 --> 00:52:13,200 mes tikimės gauti yra trečiadienį, mes 1206 00:52:13,200 --> 00:52:15,740 pradėti pažvelgti į duomenų struktūra, kuri leidžia mums ieškoti 1207 00:52:15,740 --> 00:52:18,260 per duomenimis Prisijungti pabaigos laiką dar kartą. 1208 00:52:18,260 --> 00:52:21,470 Ir mes matėme, kad prisimenate, nulinės savaitę ir vienas su dvejetainiu paieškos ar takoskyros 1209 00:52:21,470 --> 00:52:22,180 ir valdyk. 1210 00:52:22,180 --> 00:52:26,240 Jis grįžta ir dar geriau, Gralis šiam trečiadienį 1211 00:52:26,240 --> 00:52:29,510 bus sugalvoti duomenų struktūra, kuri veikia tikrai 1212 00:52:29,510 --> 00:52:32,070 arba teoriškai pastovus laikas, kuriuo 1213 00:52:32,070 --> 00:52:34,760 nesvarbu, kiek milijonus ar milijardus dalykų 1214 00:52:34,760 --> 00:52:38,470 turime duomenų struktūros, ji bus imtis mums pastovų laiką, o gal vienas žingsnis 1215 00:52:38,470 --> 00:52:41,387 arba du žingsniai arba 10 žingsnių, bet nuolatiniai numeriai žingsnių 1216 00:52:41,387 --> 00:52:42,970 ieškoti per tą duomenų struktūros. 1217 00:52:42,970 --> 00:52:46,300 Tai iš tiesų bus Gralis bet daugiau apie tai trečiadienį. 1218 00:52:46,300 --> 00:52:49,045 Žiūrėti ya tada. 1219 00:52:49,045 --> 00:52:53,704 >> [Muzikos grojimo] 1220 00:52:53,704 --> 00:56:08,448