1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [4 savaitė, Tęsinys] 2 00:00:02,310 --> 00:00:04,240 [David J. Malan - Harvardo universiteto] 3 00:00:04,240 --> 00:00:07,290 [Tai CS50. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> Tai CS50, o tai yra 4 savaitės pabaigos. 5 00:00:11,290 --> 00:00:14,030 Taigi gerų naujienų ir blogų naujienų. 6 00:00:14,030 --> 00:00:26,240 Ne paskaita pirmadienį, jokių problemų kitą savaitę. [Studentai Dopingowanie] 7 00:00:26,240 --> 00:00:28,680 Jūs nesiruošia patinka, kur tai vyksta. 8 00:00:28,680 --> 00:00:31,590 Bet mes turime tai, o ne kitą trečiadienį, 9 00:00:31,590 --> 00:00:37,740 , o taip pat už mokymo programos 1 penktadienis paskaitą kitą penktadienį, kad mes galime likti ant bėgių. 10 00:00:37,740 --> 00:00:40,580 Bet viskas bus nufilmuotas, kaip įprasta, todėl ne nerimauti. 11 00:00:40,580 --> 00:00:44,100 >> Ir atsižvelgiant viktorina 0, ką mes padarysime, link savaitės pabaigos 12 00:00:44,100 --> 00:00:47,140 rašyti aikštyno Tinklapis cs50.net paaiškinimas 13 00:00:47,140 --> 00:00:50,160 kokios rūšies lūkesčių jūs turėtumėte turėti, kai jis ateina į pirmą viktorinos. 14 00:00:50,160 --> 00:00:55,100 Apskritai, tai bus daug pasirinkimo, tiesa klaidingas, trumpas atsakymas, trumpi kodavimo problemos. 15 00:00:55,100 --> 00:00:57,360 Jūs esate nesiruošia, galima tikėtis įgyvendinti ekvivalento 16 00:00:57,360 --> 00:01:00,030 problema, kad galėtumėte pamatyti ant pset, dėl kurių turite kompiuterį 17 00:01:00,030 --> 00:01:03,240 Debugger ir panašiai, bet ten bus mažos kodavimo problemos. 18 00:01:03,240 --> 00:01:06,900 >> Ir iš tiesų, geriausias vadovas, ką CS50 viktorinos jausmą yra tarsi 19 00:01:06,900 --> 00:01:09,180 , tai eikite į cs50.net, eikite į viktorinos nuorodą, 20 00:01:09,180 --> 00:01:11,920 ir jūs galite pamatyti verta viktorinos Pastaruosius kelerius metus. 21 00:01:11,920 --> 00:01:16,600 Tiesiog suprasti, kad mokymo programos ne visada buvo tas pats per metus. 22 00:01:16,600 --> 00:01:18,510 Kartais mes, kartais atimti, 23 00:01:18,510 --> 00:01:20,670 taigi jei tam tikrą temą vienoje iš tų senų viktorinos 24 00:01:20,670 --> 00:01:25,380 kad jūs neturite idėjos, ką jis kalbėti apie, tai, kad mes jį padengti 25 00:01:25,380 --> 00:01:27,210 arba, kad mes ne jį padengti. 26 00:01:27,210 --> 00:01:31,110 , Bet ir nuomonių forma, šį sekmadienį, pirmadienį, ir antradienį 27 00:01:31,110 --> 00:01:34,770 taip pat kurso pasaulyje sesijos apžvalgos sekmadienio naktį - 28 00:01:34,770 --> 00:01:37,500 laikas ir vieta bus paskelbta kurso puslapyje - 29 00:01:37,500 --> 00:01:40,120 jūs visi turite galimybę peržiūrėti kurso mokymo bičiuliais 30 00:01:40,120 --> 00:01:44,830 šiais metais medžiaga, tiek iš atskirų sekcijų ir kaip visą klasę, 31 00:01:44,830 --> 00:01:48,400 ir tiems, bus filmuojamas, kaip įprasta, taip pat. 32 00:01:48,400 --> 00:01:53,380 >> Gerai. Taigi, be tolesnio ceremonija, vienas komentaras apie praeiti / nesugeba ir pridėti / drop. 33 00:01:53,380 --> 00:01:57,980 Tu gali matyti savo užrašus praeitą naktį, ir tai tikrai tik keletas papildomo užtikrinimo 34 00:01:57,980 --> 00:02:01,250 kad, jei esate tarp tų, ypač mažiau patogūs ar kažkur tarp 35 00:02:01,250 --> 00:02:04,870 ir jūs jaučiatės tik šiek tiek virš galvos, 36 00:02:04,870 --> 00:02:08,430 suprasti, kad iš tikrųjų yra visai normalu, ir ten daug paramos struktūra, 37 00:02:08,430 --> 00:02:13,530 iš kurių vienas biuro darbo valandomis ketina pagerinti dar labiau per mano elektroninio pašto paskutinę naktį, 38 00:02:13,530 --> 00:02:16,520 ir suprasti, taip pat, kad kaip Pass / nesugeba panašaus į tai klasei 39 00:02:16,520 --> 00:02:21,540 tikrai reiškia kaip mechanizmo imtis kraštą, kaip šis, 40 00:02:21,540 --> 00:02:24,200 kad dar kartą, jei jūs išleidžiate tuos 10, 15, 20 valandų 41 00:02:24,200 --> 00:02:28,160 tiesiog bando gauti šiek tiek pset dirbti, ir jūs žinote, esate 90-95%, kaip yra 42 00:02:28,160 --> 00:02:32,100 , bet jūs negalite rasti šiek tiek velniškai klaidą, praeiti / nesugeba modelį, tai tarsi gerai. 43 00:02:32,100 --> 00:02:36,230 >> Idėja yra tai, kad su šiuo mechanizmu galite tada eikite sutelkti dėmesį į savo kitų psets 44 00:02:36,230 --> 00:02:39,530 ar miegoti ar kokia ji yra, kad jūs norite sutelkti dėmesį į šiuos uždavinius. 45 00:02:39,530 --> 00:02:43,390 Taigi suprantame, kad turite iki ateinančiais antradienis - techniškai 5. pirmadienis, 46 00:02:43,390 --> 00:02:50,840 bet tai šventė, todėl ateinančiais antradienis - pereiti nuo verčių atitikimo / neatitikimo surūšiuoti arba atvirkščiai. 47 00:02:50,840 --> 00:02:54,450 Ir jei jūs tikrai bedugnės ir galvoja bus atsisakyta visiškai, 48 00:02:54,450 --> 00:02:56,440 sugauti mane po paskaitos ar Drop me a note. 49 00:02:56,440 --> 00:02:59,990 Mes norėtume bent Čate prieš pateikiant pasiūlymą Atleisti. 50 00:02:59,990 --> 00:03:03,470 Gerai. Taigi mes pradėjome mokymo ratams paskutinį kartą. 51 00:03:03,470 --> 00:03:06,030 Visų pirma, mes sutelktas į eilutę. 52 00:03:06,030 --> 00:03:09,740 Eilutė yra kažkas, kad deklaruoti į CS50 bibliotekoje, 53 00:03:09,740 --> 00:03:14,340 tame faile vadinamas cs50.h pradėsime pažvelgti į šią savaitę ir kitą. 54 00:03:14,340 --> 00:03:17,250 Tačiau eilutė yra tikrai tik kažkas supaprastinimas 55 00:03:17,250 --> 00:03:20,980 tai šiek tiek daugiau arcanely kaip char *. 56 00:03:20,980 --> 00:03:24,090 Char mes esate susipažinę su. Tai tik vienas simbolis. 57 00:03:24,090 --> 00:03:28,010 Bet * pirmadienio žymimas ką? >> [Studentas] rodyklė. 58 00:03:28,010 --> 00:03:31,290 Rodyklę. Ir kas rodyklė? >> [Studentas] adresas. 59 00:03:31,290 --> 00:03:33,420 >> Tai, pavyzdžiui, adresą, ATMINTIES VIETA. 60 00:03:33,420 --> 00:03:35,910 Kas yra adresas arba vieta arba atminties? 61 00:03:35,910 --> 00:03:40,290 Vėlgi, visi iš mūsų turi nešiojamuosius kompiuterius koncertą ar 2 GB RAM, labiausiai tikėtina, šių dienų, 62 00:03:40,290 --> 00:03:44,160 ir tai reiškia, kad turite milijardą arba 2 mlrd. atminties baitų verta. 63 00:03:44,160 --> 00:03:46,240 Ir tai tikrai ne klausimas, ką jis fiziškai atrodo, 64 00:03:46,240 --> 00:03:51,220 bet tikėjimu, kad jūs galite sunumeruoti visi atskirų baitų, kad jūsų nešiojamasis kompiuteris turi 65 00:03:51,220 --> 00:03:54,580 0 baitų, tai yra 1 baitas, tai yra baitas 2 mlrd. 66 00:03:54,580 --> 00:03:56,100 ir tai, ką kompiuteris. 67 00:03:56,100 --> 00:04:00,030 Kai jums skirti vietos vieną požymį, pavyzdžiui, 68 00:04:00,030 --> 00:04:02,480 jis akivaizdžiai turi gyventi kažkur jūsų kompiuterio atmintyje, 69 00:04:02,480 --> 00:04:05,860 o gal tai ne baitų skaičius 12.345 70 00:04:05,860 --> 00:04:08,470 ir kad turi būti kažkur čia, jūsų kompiuterio atminties. 71 00:04:08,470 --> 00:04:12,630 Ir adresas, tada šio pobūdžio yra 12345. 72 00:04:12,630 --> 00:04:16,140 >> Dabar, savaitę 0 per dabar iki šiol, mes tikrai ne slaugomi 73 00:04:16,140 --> 00:04:19,170 kur yra saugomi atminties dalykų, nes mes paprastai naudoti simbolius, 74 00:04:19,170 --> 00:04:22,540 kintamieji, masyvai, kad iš tikrųjų gauti mūsų duomenų. 75 00:04:22,540 --> 00:04:24,950 Bet nuo pirmadienio o juo labiau šiandien, jūs dabar ketinate turėti 76 00:04:24,950 --> 00:04:27,710 tuo labiau išraiškingas programų rašymo galimybes su 77 00:04:27,710 --> 00:04:31,330 tikrai manipuliuoti kompiuterio atmintį, tačiau jums atrodo tinkama, 78 00:04:31,330 --> 00:04:33,720 ir geriems tikslams, ir blogų, 79 00:04:33,720 --> 00:04:39,620 klaidų yra labai dažnas rezultatas šiuo mokymosi šią medžiagą. 80 00:04:39,620 --> 00:04:42,460 Bet ką iš tikrųjų reiškia būti char *? 81 00:04:42,460 --> 00:04:46,140 Leiskite eiti į priekį atgal - ir mes grįžti į Binky, kaip buvo žadėta šiandien. 82 00:04:46,140 --> 00:04:48,670 Eikime paprastas pavyzdys čia. 83 00:04:48,670 --> 00:04:53,060 Leiskite man išsaugoti šį failą kaip compare.c, ir leiskite man tiesiog gauti tam tikrą šabloną kodą čia 84 00:04:53,060 --> 00:05:00,490 taip stdio.h, leiskite man atsiduoti apima cs50.h. Aš padidinti ten. 85 00:05:00,490 --> 00:05:05,850 Leiskite man pradėti rašyti pagrindinio int main (void), o dabar aš noriu padaryti kažką panašaus į tai: 86 00:05:05,850 --> 00:05:13,520 printf ("Duok man eilutę:") ir tada aš būsiu naudoti string ai gauna GetString 87 00:05:13,520 --> 00:05:16,750 gauti eilutę iš vartotojo, tada aš ruošiuosi paprašyti vartotoją vienas kitą. 88 00:05:16,750 --> 00:05:21,870 ("Duok man dar vieną eilutę:") ir aš ruošiuosi paprašyti juos per GetString gauti, kad. 89 00:05:21,870 --> 00:05:27,020 Aš jį vadiname t, nes t ateina po s ir s yra gražus pavadinimas eilutę, jei ji gana bendrinis. 90 00:05:27,020 --> 00:05:30,030 Taigi GetString, ir dabar aš tiesiog noriu daryti normalumas patikrinti ir aš norėčiau pasakyti, 91 00:05:30,030 --> 00:05:39,770 jei (-ai == t), tada aš tik ketina pranešti vartotojui printf ("Jūs įvedėte tą patį \ n"); 92 00:05:39,770 --> 00:05:45,520 nors aš ruošiuosi atsispausdinti kažką panašaus ("Jūs įvedėte kažką kitą! \ n") 93 00:05:45,520 --> 00:05:48,460 ar kokia bausmė bus. Taigi kažkas panašaus. 94 00:05:48,460 --> 00:05:52,200 Tada, kaip įprasta, aš sugrįšiu 0, kuris tiesiog reiškė, kad nieko blogo negali atsitikti, 95 00:05:52,200 --> 00:05:54,400 ir aš ruošiuosi eiti į priekį ir sukompiliuoti ir paleisti šią programą. 96 00:05:54,400 --> 00:05:56,540 >> Tačiau pirmadienį nubėgome šią programą, 97 00:05:56,540 --> 00:06:00,420 ir iš tikrųjų buvo pasakyta, kad Hello neatliekamas hello and goodbye nėra sudie. 98 00:06:00,420 --> 00:06:03,140 Elgesys, mes matėme, buvo šiek tiek daugiau kaip šis. 99 00:06:03,140 --> 00:06:11,450 Leiskite man eiti į savo šaltinio katalogą, padidinti čia ir darykime, kad palyginti. 100 00:06:11,450 --> 00:06:14,570 Parengė gerai. Aš bėgsiu palyginti. Duok man eilutę: Hello. 101 00:06:14,570 --> 00:06:16,300 Duok man dar vieną eilutę: Hello. 102 00:06:16,300 --> 00:06:18,000 Jūs įvedėte kažką kitą! 103 00:06:18,000 --> 00:06:22,650 Na, leiskite man pabandyti kažką paprasčiau, pavyzdžiui, 50, 50. Jūs įvedėte kažką kitą! 104 00:06:22,650 --> 00:06:25,740 hi, hi. Taigi aišku, kažkas vyksta čia. 105 00:06:25,740 --> 00:06:28,440 Bet kas buvo paaiškinimas, kodėl? 106 00:06:28,440 --> 00:06:33,850 Matyt, 12 linija yra visiškai asocialių. 107 00:06:34,300 --> 00:06:39,430 , Kas yra pagrindinė problema čia? Taip. >> [Studentas] Tai palyginti adresus. 108 00:06:39,430 --> 00:06:41,850 Taip, tiksliai. Tai tikrai lyginant adresus 109 00:06:41,850 --> 00:06:44,580 hello and HELLO yra saugomi. 110 00:06:44,580 --> 00:06:48,290 Tai ne lyginant raides HELLO vėl ir vėl, 111 00:06:48,290 --> 00:06:52,370 nes tai, kas iš tikrųjų nutiko, visą šį laiką mes naudoju GetString 112 00:06:52,370 --> 00:06:56,130 Ši lenta yra vėl mūsų kompiuterio atminties, 113 00:06:56,130 --> 00:07:00,100 ir tarkim aš vadinu GetString po skelbiantis kintamųjų s. 114 00:07:00,100 --> 00:07:01,930 Ką mano atmintis atrodo? 115 00:07:01,930 --> 00:07:07,070 Tegul savavališkai sako, kad ai atrodo taip. Tai kvadratas. 116 00:07:07,070 --> 00:07:09,040 Ir gana daug, bet kuriuo metu, aš sudarytas iš atminties gabalas ekrane 117 00:07:09,040 --> 00:07:12,860 jei tai 32 bitų, aš buvo piešimo kvadratų, pavyzdžiui, tai, nes iš tikrųjų prietaiso, 118 00:07:12,860 --> 00:07:17,380 rodyklė, adresas, yra 32 bitai. Tai tas pats kaip int. 119 00:07:17,380 --> 00:07:19,420 , Kurie gali skirtis priklausomai nuo kompiuterio sistemos. 120 00:07:19,420 --> 00:07:24,630 Tie iš jūsų, kurie miglotai susipažinęs su tuo, kad jūsų Mac arba PC 64 bitų, 121 00:07:24,630 --> 00:07:28,120 kad iš tikrųjų reiškia, kad kompiuteris naudoja 64-bitų patarimų, 122 00:07:28,120 --> 00:07:33,730 64-bitų adresus ir tarp tos upsides jūsų kompiuteriuose 123 00:07:33,730 --> 00:07:35,560 gali turėti daug daugiau RAM nei pasekėjai. 124 00:07:35,560 --> 00:07:39,240 Trumpai tariant, atgal į tą dieną, kai tik kompiuteriuose naudojamas 32 bitų 125 00:07:39,240 --> 00:07:42,740 atstovauti adresus, didžiausias baitų skaičius, gali kilti 126 00:07:42,740 --> 00:07:46,280 šiuo atveju buvo tai, ką, jei turite 32 bitų? 127 00:07:46,280 --> 00:07:49,590 SO 4 mlrd., Į dešinę, nes 2 iki 32 yra 4 mlrd. 128 00:07:49,590 --> 00:07:51,370 Šis skaičius buvo pasikartojančių kursuose. 129 00:07:51,370 --> 00:07:55,240 >> Taigi, jei turite tik 32 bitų, didžiausias skaičius, kurį galima suskaičiuoti iki maždaug 4 mlrd. 130 00:07:55,240 --> 00:07:58,750 Bet tai buvo pagrindinis apribojimas kompiuterius, kol prieš keletą metų 131 00:07:58,750 --> 00:08:01,180 nes jei jūs galite tik tikėtis tokio pat aukščio kaip 4 mlrd. 132 00:08:01,180 --> 00:08:05,270 nesvarbu, jei jūs perkate 8 GB RAM arba net 5 GB RAM; 133 00:08:05,270 --> 00:08:07,780 jūs negalite tikėtis, kad didelis, todėl jis buvo nenaudingas. 134 00:08:07,780 --> 00:08:11,430 Galima tik pasiekti pirmuosius 3 ar 4 gigabaitų kompiuterio atmintyje. 135 00:08:11,430 --> 00:08:14,410 Kad mažiau klausimas dabar, ir jūs galite nusipirkti MacBook Pros ir Dells 136 00:08:14,410 --> 00:08:17,680 8 GB RAM ar net daugiau šių dienų. 137 00:08:17,680 --> 00:08:24,100 Bet jei aš skirti tiesiog šioje programoje rodyklę, žymeklis, vadinamas s 138 00:08:24,100 --> 00:08:28,370 ji gali atrodyti ekrane, nes iš tiesų mes turime žievelės atgal šio sluoksnio. 139 00:08:28,370 --> 00:08:33,520 Aš nuolat sakau eilutę, bet pirmadienį, eilutė yra tikrai char *, 140 00:08:33,520 --> 00:08:35,590 kokio nors pobūdžio adresas. 141 00:08:35,590 --> 00:08:39,280 Todėl galime imtis, kad mokymo ratas išjungti, net jei mes ir toliau naudojant GetString dabar. 142 00:08:39,280 --> 00:08:42,600 Taigi, aš pareiškė, ai, ir tai yra daug atminties, 32 bitų riekė. 143 00:08:42,600 --> 00:08:47,370 Kas čia atmintyje pagal nutylėjimą? >> [Nesigirdi studentas atsakas] 144 00:08:47,370 --> 00:08:50,040 Kas tai? >> [Studentas] šiukšlių. >> Šiukšlių. Tiksliai. 145 00:08:50,040 --> 00:08:54,610 Jei jūs programuotojas nereikia įdėti vertę į kintamąjį, kuris žino, kas tai yra? 146 00:08:54,610 --> 00:08:57,990 Kartais jums pasisekė ir tai 0, kuris yra tipo gražiu, švariu numatytąją vertę, 147 00:08:57,990 --> 00:09:00,310 bet kaip matėme Pirmadienis, kartais tai visiška nesąmonė, 148 00:09:00,310 --> 00:09:04,130 tikrai didelis teigiamas ar neigiamas sveikasis skaičius, iš kur atėjo? 149 00:09:05,350 --> 00:09:07,010 Taip. >> [Studentas] funkcija anksčiau. >> Taip. 150 00:09:07,010 --> 00:09:10,170 >> Dažnai funkcija, kuri gavo iki šiol, nes prisiminti, 151 00:09:10,170 --> 00:09:13,920 kaip jūs vadinate atminties funkcijas, kurių jos imasi vis daugiau ir daugiau vietos iš apačios į viršų, 152 00:09:13,920 --> 00:09:17,040 ir kuo greičiau funkcija grąžina gauna pakartotinai naudoti, kad atmintis 153 00:09:17,040 --> 00:09:20,890 iškviečiamas kitas vaikinas, kuris naudoja savo patį atminties gabalas. 154 00:09:20,890 --> 00:09:23,450 Ir jei jūs jau palikote šiukšlių ten, ankstesnes reikšmes, 155 00:09:23,450 --> 00:09:28,190 mes galime klaida s kaip turintis tam tikrą vertę tada, kai tikrai mes neskirti nieko ten. 156 00:09:28,190 --> 00:09:30,960 Taigi, mūsų RAM šiuo metu atrodo taip. 157 00:09:30,960 --> 00:09:36,030 Dabar dešinėje pusėje linijos 7 mes kuriam skambinate GetString 158 00:09:36,030 --> 00:09:40,150 , kuriame mes jau darome dabar savaites, bet kas yra GetString tikrai daro? 159 00:09:40,150 --> 00:09:43,350 GetString parašė CS50 personalo yra šiek tiek protingas 160 00:09:43,350 --> 00:09:46,500 kad kuo greičiau vartotojas pradeda įvesdami raktai ir hitai Įveskite 161 00:09:46,500 --> 00:09:50,010 GetString skaičiai iš kiek klavišų paspaudimus Ar vartotojas nukentėjo, 162 00:09:50,010 --> 00:09:53,360 kiek simbolių aš turiu skirti RAM. 163 00:09:53,360 --> 00:09:55,660 Ir kur, kad RAM ateina, kas žino? 164 00:09:55,660 --> 00:09:58,930 Ji turi būti kažkur kompiuterio 2 GB arba Papuošalą atminties. 165 00:09:58,930 --> 00:10:05,200 Bet tarkime, kad kompiuteris čia rasti vietos žodžio HELLO. 166 00:10:05,200 --> 00:10:08,710 Žodis Įvedžiau H E-L-L-O. 167 00:10:08,710 --> 00:10:13,510 Ir, jei mes atkreipiame tai simbolių seka, mes galime padaryti tai, kaip šis. 168 00:10:13,510 --> 00:10:17,860 Bet man reikia daryti 1 papildomą dalyką. Nuo ko priklauso bet C eilutės pabaigos? 169 00:10:17,860 --> 00:10:20,710 Null charakteris, kurią mes rašome \ 0. 170 00:10:20,710 --> 00:10:23,980 Tai techniškai skaičius 0, bet Backslash daro viską, kad aiškiau 171 00:10:23,980 --> 00:10:28,150 , kad tai yra tiesiog skaičius 0, sveikasis skaičius 0; 172 00:10:28,150 --> 00:10:32,440 tai ne, pavyzdžiui, kotiravimu Unquote 0, kad galite įvesti ne klaviatūra. 173 00:10:32,440 --> 00:10:33,940 Taigi tai yra HELLO. 174 00:10:33,940 --> 00:10:36,350 >> Ir ką mes sakome, pirmadienį, kad, kaip GetString funkcija 175 00:10:36,350 --> 00:10:39,580 yra iš tikrųjų grįžta visas šias savaites? 176 00:10:39,580 --> 00:10:43,960 Jis negrįžta per se eilutę, nes tai nėra tikrai turi prasmę 177 00:10:43,960 --> 00:10:47,710 nes stygos nėra. Jie tarsi gamyba CS50 bibliotekoje. 178 00:10:47,710 --> 00:10:51,300 Kas yra tikrai eilutė, daugiau techniškai? >> [Studentas] Tai pirmasis simbolis. 179 00:10:51,300 --> 00:10:55,950 Tiksliai. Tai paprasčiausiai pirmą pobūdžio adresas, kad vartotojas turi įvesti. 180 00:10:55,950 --> 00:11:02,810 Taigi jei mano žodis HELLO baigiasi jį baitų skaičius 123 ir tada baitų skaičius 124, 181 00:11:02,810 --> 00:11:08,320 125, 126, ir tt, jei aš tiesiog mano baitų skaičius nuo 0 iki 182 00:11:08,320 --> 00:11:12,650 , kas iš tiesų GetString grįžta, yra tiesiog skaičius 123. 183 00:11:12,650 --> 00:11:19,270 Taigi, ką gauna įdėti s yra skaičius 123, o ne Raidė H, nėra žodžio Sveiki, 184 00:11:19,270 --> 00:11:23,130 tiesiog adresas, kuriuo galiu rasti pirmąją raidę HELLO. 185 00:11:23,130 --> 00:11:26,500 Bet tai nereiškia, atrodo pakankamai. Aš paklausiau jūsų eilutę, o ne charakterį. 186 00:11:26,500 --> 00:11:32,970 Taigi, kaip mes arba "pranešė, kad Ello ateiti kartu su H tipo? 187 00:11:35,760 --> 00:11:37,460 Kas susitarimo ir mes turime? Taip. 188 00:11:37,460 --> 00:11:40,100 [Studentas] Jis saugo pasakoja rasti šiek tiek daugiau simbolių. >> Būtent. 189 00:11:40,100 --> 00:11:44,570 >> Yra toks "žmogus-kompiuteris sutartį, pagal kurią, kai susiduriame su Styga, 190 00:11:44,570 --> 00:11:49,410 kitaip žinomas dabar char žvaigždžių, jūs tiesiog turite išsiaiškinti, 191 00:11:49,410 --> 00:11:54,350 kur visų gyvenimo eilutės pabaigoje yra tikrai tik iteravimu per jį už linijos, 192 00:11:54,350 --> 00:11:57,820 while cikle, nepriklausomai, kad kai jums rasti eilutės pabaigos 193 00:11:57,820 --> 00:12:02,160 dabar galima daryti išvadą, kad, oh, visą žodį HELLO. 194 00:12:02,160 --> 00:12:04,820 Tiems iš jūsų, iš anksto programavimo patirtis gali žinoti, "Java" 195 00:12:04,820 --> 00:12:09,880 galite tiesiog paskambinti. ilgis ir kitomis kalbomis galite skambinti ilgį arba panašų. 196 00:12:09,880 --> 00:12:14,060 Tai todėl, kad daug kalbų, ypač dalykų vadinama objektinės kalbos, 197 00:12:14,060 --> 00:12:18,580 ko nors ilgis yra natūra aplieti viduje pačių duomenų gabalas, 198 00:12:18,580 --> 00:12:24,000 daug, kaip mes aplieti ID ir pavadinimus ir namų viduje pirmadienį studentas. 199 00:12:24,000 --> 00:12:28,700 Bet C yra daug žemesnio lygio. Nėra objektai ar klasės, jei jūs girdėjote šias sąlygas prieš. 200 00:12:28,700 --> 00:12:31,490 Viskas, ką jums iš tiesų yra atminties adresai. 201 00:12:31,490 --> 00:12:35,540 Taigi tai yra tarsi senamadiškas būdas atstovaujanti įdomių duomenų struktūras. 202 00:12:35,540 --> 00:12:38,760 Turite pradžios vertę, pavyzdžiui, pirmojo pobūdžio adresą 203 00:12:38,760 --> 00:12:42,340 ir tada tiesiog kai kurie vienašaliai, kad visi sutinka laikytis. 204 00:12:42,340 --> 00:12:46,420 Taigi, kaip yra įgyvendinama eilutės ilgis, mes siūlome? 205 00:12:46,420 --> 00:12:51,360 Strlen, strlen, kai kurie iš jūsų jau naudojami kelis kartus. Tai gana paprasta, tiesa? 206 00:12:51,360 --> 00:12:53,060 Tai lyg 2 eilučių kodo. 207 00:12:53,060 --> 00:12:56,140 Tai gana daug už tam tikra kilpa, o gal su papildomu vietos kintamąjį. 208 00:12:56,140 --> 00:13:00,540 Bet strlen tiesiog turi imtis žymiklį ir tada pradėti ieškoti \ 0. 209 00:13:00,540 --> 00:13:05,190 >> Ir kuo greičiau tokį, koks jis, jis gali grąžinti ėmėsi veiksmų, kad ji toje eilutėje skaičių. 210 00:13:05,190 --> 00:13:07,150 Taigi galime daryti išvadą, iš to, kas vyksta šalia. 211 00:13:07,150 --> 00:13:11,850 Tarkim, aš pareiškiu, t, kaip aš padariau 10 eilutės. 212 00:13:11,850 --> 00:13:14,280 Tai kai šiukšlių vertė. Kas žino iš pradžių? 213 00:13:14,280 --> 00:13:18,490 Bet 10 eilutėje dešinėje pusėje vadinu GetString vėl. 214 00:13:18,490 --> 00:13:20,050 Kas žino, kur tai baigiasi? 215 00:13:20,050 --> 00:13:23,830 Tegul savavališkai teigia, kad operacinė sistema rasti vietos tai būdas per čia. 216 00:13:23,830 --> 00:13:28,610 Aš atsitikti, kad atsitiktinai vėl įveskite H-e-L-L-O, 217 00:13:28,610 --> 00:13:31,260 ir taip galima padaryti tos pačios rūšies vaizdą. 218 00:13:31,260 --> 00:13:34,290 Bet tai, kad aš atkuriamas šią nuotrauką tyčinio 219 00:13:34,290 --> 00:13:37,720 nes tai yra skiriasi HELLO nei šis. 220 00:13:37,720 --> 00:13:43,920 Taigi čia, tai gali būti vieta 456, tai 457, ir tt. 221 00:13:43,920 --> 00:13:47,170 Taigi, ką gauna įdėti, kur kažkada buvo klaustukas? 222 00:13:47,170 --> 00:13:50,190 Šiuo atveju 456. 223 00:13:50,190 --> 00:13:53,540 Mes skinti šiuos numerius savavališkai, nes tikrai po to, kai šiandien 224 00:13:53,540 --> 00:13:57,110 mes neketiname rūpintis tiek daug apie ką nieko adresas. 225 00:13:57,110 --> 00:14:02,690 Visi, mums rūpi, kad mes galime išsiaiškinti kai kurių duomenų lapo adresą, kaip HELLO. 226 00:14:02,690 --> 00:14:07,100 >> Taigi tikrai, ką dauguma žmonių informatikos, kai kalbame apie atminties adresai 227 00:14:07,100 --> 00:14:10,210 ir kalbėti apie rodykles konkrečiau, 228 00:14:10,210 --> 00:14:14,220 o ne vargintis suprasti, 123 - who cares, kur iš tikrųjų yra ši medžiaga, 229 00:14:14,220 --> 00:14:17,440 mes tiesiog žinome, kad tai yra tam tikru skaitmeninis adresas - 230 00:14:17,440 --> 00:14:22,180 mes supaprastinti pasaulį ir tiesiog pasakyti, kad ai yra nukreipta į šio pobūdžio 231 00:14:22,180 --> 00:14:25,080 ir t yra nukreipta į šio pobūdžio. 232 00:14:25,080 --> 00:14:27,430 Ir tai, kad ji rodyklė yra gana sąmoningas 233 00:14:27,430 --> 00:14:31,610 nes tiesiog dabar s nukreipta į H ir t yra nukreipta kitame H 234 00:14:31,610 --> 00:14:34,720 , nes bent dienos pabaigoje, ji nesvarbu koks adresas, 235 00:14:34,720 --> 00:14:40,240 bet tai tikrai svarbu, kad mes turime galimybę pareikšti, kad kai kodo fragmentą adresą su. 236 00:14:40,240 --> 00:14:42,730 Mes tikrai ne tik dar manipuliavo šiuos adresus 237 00:14:42,730 --> 00:14:47,770 todėl mes pamatyti, kur mes galime įsikišti ir rūšiuoti, ką papildyta nuorodomis, 238 00:14:47,770 --> 00:14:52,030 bet ir dabar atitinka 12 pažodžiui Kokios vertybės yra palyginti 239 00:14:52,030 --> 00:14:55,500 atsižvelgiant į šios linijos 12 istorija? 240 00:14:56,570 --> 00:15:01,290 Mes sakome, yra 123 lygus lygus 456? Ir tai tikrai ne tas atvejis. 241 00:15:01,290 --> 00:15:05,320 Ir net konceptualiai, tai rodyklė yra tikrai ne tas pats, kaip ir 242 00:15:05,320 --> 00:15:09,500 nes jūs vadinamas GetString du kartus, o GetString nesistengia būti itin protingas, 243 00:15:09,500 --> 00:15:12,470 jis nesistengia suvokti, oi, įvedėte HELLO prieš 5 minutes; 244 00:15:12,470 --> 00:15:15,090 leiskite man duoti jums tą patį žymiklį, kaip aš jums davė prieš, 245 00:15:15,090 --> 00:15:18,450 jis tiesiog paskirsto atmintį kiekvieną kartą, kai jį vadiname naują riekė. 246 00:15:18,450 --> 00:15:20,350 >> Taigi, kaip mes galime išspręsti šią problemą? 247 00:15:20,350 --> 00:15:24,270 Jei aukštesnio lygio Noriu palyginti eilutes Sveiki ir HELLO - 248 00:15:24,270 --> 00:15:28,680 Man nerūpi, apie rodykles, kaip aš galiu eiti apie atsakant į klausimą, 249 00:15:28,680 --> 00:15:31,980 vartotojo įveskite tą patį? Tai, kas būtina? Taip. 250 00:15:31,980 --> 00:15:35,200 [Studentas] Naudokite funkciją. >> Galiu naudoti funkciją out of the box. 251 00:15:35,200 --> 00:15:38,170 Aš galiu naudoti funkcija vadinama strcmp, s-t-r-c-m, p-, 252 00:15:38,170 --> 00:15:41,190 tik sutrumpinta versija pasakyti eilutė palyginti. 253 00:15:41,190 --> 00:15:45,070 Ir jei mes einame į, pavyzdžiui, palyginti 2, kuri yra viena iš šiandienos dalomoji medžiaga, 254 00:15:45,070 --> 00:15:46,690 Aš lygiai taip pat. 255 00:15:46,690 --> 00:15:51,750 Aš nuolat visa kita iš 1 eilutę žemyn iki 26, arba tiek, 256 00:15:51,750 --> 00:15:54,360 ir dabar pastebėsite, ši dalis tik šiek tiek pasikeitė. 257 00:15:54,360 --> 00:15:57,690 Ignoruoti for a moment, 28 eilutę ir sutelkti dėmesį tik į šį vieną. 258 00:15:57,690 --> 00:16:00,410 Ką mes sakome, pirmadienis g lyginimas? 259 00:16:00,410 --> 00:16:05,200 Jis tvarko 2 patarimų, S ir T procesą, šiuo atveju, 260 00:16:05,200 --> 00:16:08,480 tarsi beveik savo pirštą ant tų 2 raides, 261 00:16:08,480 --> 00:16:11,530 ir tai, ką jis turi padaryti, tai kažkas panašaus į while cikle ar už linijos, 262 00:16:11,530 --> 00:16:16,050 ir ji sako, tai yra tas pats? Jei taip, tai juda pirštais arba rodykles į priekį. 263 00:16:16,050 --> 00:16:17,970 Ar tai tas pats, tai tas pats, tai tas pats, 264 00:16:17,970 --> 00:16:22,710 tai tas pats, tai tas pats? Ir ooh, aš ne eilutės pabaigos S ir T. 265 00:16:22,710 --> 00:16:26,780 Neradau jokių prieštaravimų. Taip, šios eilutės yra tokios pačios. 266 00:16:26,780 --> 00:16:31,940 Ir ką g palyginti grąžinti, jei 2 eilutės yra tokios pačios, matyt? Nuliui. 267 00:16:31,940 --> 00:16:35,900 Taigi 0 yra geras šiuo atveju, nes jei ji grąžina -1 arba +1 268 00:16:35,900 --> 00:16:40,560 tai reiškia, kad ai tiesiog atsitinka prieš t abėcėlę arba po t. 269 00:16:40,560 --> 00:16:43,760 Ir kodėl tai būtų naudinga turėti funkciją, kuri jums pasakys, styginių ateina prieš 270 00:16:43,760 --> 00:16:46,720 arba po žodyne? 271 00:16:46,720 --> 00:16:48,740 [Studentas] Paieška. >> Paieška ir rūšiavimas. 272 00:16:48,740 --> 00:16:51,730 >> Todėl jūs galite daryti tokius dalykus, kaip dvejetainis paieškos ar burbulas rūšiuoti arba sujungti rūšiuoti 273 00:16:51,730 --> 00:16:53,230 kur jūs turite palyginti dalykų. 274 00:16:53,230 --> 00:16:56,420 Iki šiol mes natūra sumažinti kai kampus ir tik kalbėjo apie rūšiavimas 275 00:16:56,420 --> 00:16:59,430 skaičių, nes tai malonu ir lengva kalbėti, 276 00:16:59,430 --> 00:17:02,430 bet tu tikrai gali palyginti eilutes, obuolių ir bananų, 277 00:17:02,430 --> 00:17:05,349 nes jei "Apple" yra žinoma, kad prieš bananų, panašiai, 278 00:17:05,349 --> 00:17:09,319 galite perkelti eilutes aplink atmintyje kaip Rob su Merge sort vaizdo 279 00:17:09,319 --> 00:17:15,880 ir mes čia ant scenos atrankos rūšiuoti, įterpimo rūšiuoti ir burbulas rūšiuoti. 280 00:17:15,880 --> 00:17:18,710 Taigi, kur dar galime į tai? Pabandykime tai. 281 00:17:18,710 --> 00:17:23,980 Leiskite tarsi pamiršti, kad pamoką for a moment, ir pabandyti ir kopijuoti 1.c, atlikite šiuos veiksmus. 282 00:17:23,980 --> 00:17:26,800 Atitinka 21, aš sakau ką nors atspausdinti, 283 00:17:26,800 --> 00:17:28,520 tada gaunu eilutę nuo vartotojo, 284 00:17:28,520 --> 00:17:30,690 tada aš patikrinti. 285 00:17:30,690 --> 00:17:33,620 Mes tikrai ne Dotarłeś į šio įpročio dar, bet tegul dabar tai padaryti. 286 00:17:33,620 --> 00:17:40,990 Leiskite faktiškai žievelės atgal šio sluoksnio. Tai tikrai char *. Šis vaikinas yra tikrai char *. 287 00:17:40,990 --> 00:17:45,690 Taigi, ką tai reiškia, turi būti patikrinti, jei s == NULL? 288 00:17:45,690 --> 00:17:48,380 Pasirodo, kad kai skambinate kaip GetString funkciją 289 00:17:48,380 --> 00:17:51,540 arba apskritai tiesiog paprašykite kompiuterį duoti jums šiek tiek atminties, 290 00:17:51,540 --> 00:17:53,030 kažkas gali suklysti. 291 00:17:53,030 --> 00:17:56,630 Jums gali būti crazy, ir paklausti kompiuterį terabaito atminties 292 00:17:56,630 --> 00:18:01,780 prašo trilijonų baitų atminties, kad tiesiog neegzistuoja kompiuterio, 293 00:18:01,780 --> 00:18:05,130 bet GetString ir kitas funkcijas reikia šiek tiek šaukiantį į kelią 294 00:18:05,130 --> 00:18:06,820 jei jūs paprašė per daug. 295 00:18:06,820 --> 00:18:10,450 Ir būdas GetString tai daro tai, jei jūs paprašė daugiau atminties 296 00:18:10,450 --> 00:18:14,250 nei yra kompiuteryje, net jei tai super, super maža tikimybė 297 00:18:14,250 --> 00:18:17,730 nes nė vienas iš mūsų ketinate tipo trilijoną simbolių ir tada paspauskite Enter, 298 00:18:17,730 --> 00:18:21,980 bet maža tikimybė, tačiau ji gali būti, aš vis tiek noriu patikrinti, ar jį tik tuo atveju, 299 00:18:21,980 --> 00:18:26,120 ir ypatingą vertę, kad GetString, atsakymas, ir kitos funkcijos grąžina 300 00:18:26,120 --> 00:18:30,630 jei kažkas negerai yra NULL visais dangteliais. 301 00:18:30,630 --> 00:18:36,520 >> Ir, kas yra NULL? NULL, tiesiog taip atsitinka, atstovauti rodyklę. Tai atminties adresas 0. 302 00:18:36,520 --> 00:18:40,800 Pasaulis nusprendė, kad savavališkai, jei tai mano kompiuterio atminties - žinote, ką? - 303 00:18:40,800 --> 00:18:46,260 mes ketiname pavogti tik 1 baitas kiekvieno kompiuterio atmintyje, ir tai yra vieta, 0. 304 00:18:46,260 --> 00:18:49,560 Mes ketiname suteikti jai NULL slapyvardį, ir mes ketiname pažadėti 305 00:18:49,560 --> 00:18:52,660 kad mes niekada iš tikrųjų pateikė realius duomenis 306 00:18:52,660 --> 00:18:56,770 nes mes tiesiog savavališkai reikia ypatingą vertę, 0, dar žinomas kaip NULL, 307 00:18:56,770 --> 00:19:00,230 , kad galėtume klykauti vartotojams, jei kažkas negerai. 308 00:19:00,230 --> 00:19:03,590 Priešingu atveju jums gali nežinoti nėra 0 reiškia, įdėti ką nors čia 309 00:19:03,590 --> 00:19:05,490 ar tai reiškia, kažkas negerai? 310 00:19:05,490 --> 00:19:09,190 Mes visi sutinkame, kad NULL reiškia nieko buvo grąžintas, 311 00:19:09,190 --> 00:19:11,700 jokio realaus adresas buvo grąžintas. 312 00:19:11,700 --> 00:19:15,210 Dabar, čia aš tiesiog priimti savo žmogaus konvencijos I return 1 iš pagrindinės 313 00:19:15,210 --> 00:19:17,040 jei kažkas negerai. 314 00:19:17,040 --> 00:19:20,650 Tai todėl, kad pagrindinis sugrįžimas konvencija turėtų grįžti 0, jei geras, 315 00:19:20,650 --> 00:19:22,990 1 ar kokios nors kitos vertė, jei blogai. 316 00:19:22,990 --> 00:19:28,200 Bet GetString ir bet kokia funkcija, kuri pasiūlymai atminties grąžina NULL, jei kas nors blogai. 317 00:19:28,200 --> 00:19:33,480 >> Gerai. Taigi, deja, 27 eilutėje, nors tai yra super paprasta, visiškai nepavyksta nukopijuoti eilutę. 318 00:19:33,480 --> 00:19:35,740 Kodėl? Mes galime pamatyti, tai taip. 319 00:19:35,740 --> 00:19:40,120 Aš teigdamas, atitinka 27 s kopiją ir pavadino jį t. 320 00:19:40,120 --> 00:19:45,790 Todėl aš nesu klausia vartotojui 2 stygos šį kartą, aš tiesiog pasakyti, s vertę 321 00:19:45,790 --> 00:19:47,870 turėtų būti t, taip pat. 322 00:19:47,870 --> 00:19:52,890 Taigi dabar tiesiog parodyti, kaip tai yra skaldytų, atitinka 29 tolimesnė ką aš darau? 323 00:19:52,890 --> 00:19:56,980 Pirmiausia aš patikrinti, jei t ilgis yra didesnis už 0. 324 00:19:56,980 --> 00:19:59,330 Yra ten kokį nors tekstą. Vartotojas turi įvesti ką nors in 325 00:19:59,330 --> 00:20:03,410 Kas yra eilutė 32 veikia, matyt? 326 00:20:03,410 --> 00:20:08,910 [Nesigirdi studentas atsakas] >> Teisė. Galite rūšies daryti išvadą, kad tai iš to, ką aš pasakiau tai daro. 327 00:20:08,910 --> 00:20:13,200 , Tačiau techniniu požiūriu, kas tai daro? t [0] yra kas? 328 00:20:13,200 --> 00:20:15,140 [Studentas] 0. charakterį. >> [Malan] 0. pobūdis. 329 00:20:15,140 --> 00:20:19,620 , Arba daugiau žmonių, pavyzdžiui, pirmasis simbolis t, kas tai bebūtų, H gal šiuo atveju. 330 00:20:19,620 --> 00:20:24,990 Ir toupper ką ji sako. Kapitalizuoja 0. pobūdį, t, ir pakeičia jį. 331 00:20:24,990 --> 00:20:28,430 Taigi, tai reiškia, kad imtis 0. charakterį t, kad jis didžiąsias, 332 00:20:28,430 --> 00:20:30,320 ir padėkite jį atgal toje pačioje vietoje. 333 00:20:30,320 --> 00:20:35,540 Taigi, jei aš tipo hello mažosiomis raidėmis, tai turėtų pakeisti mažosiomis h kapitalo H. 334 00:20:35,540 --> 00:20:41,400 Tačiau problema yra ta, kad eilutes 35 ir 36, ką aš apie tai padaryti yra atsispausdinti mums ir t. 335 00:20:41,400 --> 00:20:43,120 Ir kas tavo nuojauta? 336 00:20:43,120 --> 00:20:47,250 Ką aš iš tikrųjų ketiname pamatyti, jei aš įvedėte hello mažosiomis? 337 00:20:47,250 --> 00:20:52,280 Tai, kas vyksta norint atspausdinti? >> [Nesigirdi studentas atsakas] >> Kas tai? 338 00:20:52,280 --> 00:20:58,360 [Studentas] Big H ir poilsio mažas. >> Didelis H ir poilsio mažas, dėl kurių, s arba t? 339 00:20:58,360 --> 00:21:03,170 [Studentas] Tiek. >> Tiek. Tiksliai. Taigi pažiūrėkime, kas čia vyksta. 340 00:21:03,170 --> 00:21:08,380 >> Leiskite man eiti į priekį, ir kaupti šią. Tai Copy1, todėl įsitikinkite, Copy1. Gerai. 341 00:21:08,380 --> 00:21:14,840 Artinti Leiskite man eiti į priekį ir paleisti Copy1, įveskite Pasakykite ką nors: Apie mažosiomis raidėmis. 342 00:21:14,840 --> 00:21:19,570 Kapitalizuojamos kopiją, tačiau jis akivaizdžiai kapitalizuojamos originalus, taip pat, 343 00:21:19,570 --> 00:21:22,070 nes tai, kas dabar vyksta šioje istorijoje? 344 00:21:22,070 --> 00:21:27,030 Atitinka 27 aš ne iš tikrųjų atrodo, kad reikia nukopijuoti eilutę, 345 00:21:27,030 --> 00:21:30,450 bet net jei jums galėjo intuityviai tikėjosi, kad tuo atveju, 346 00:21:30,450 --> 00:21:33,680 , jei jūs manote apie šį paveikslėlį, kas iš tikrųjų aš padariau? 347 00:21:33,680 --> 00:21:35,410 Paveikslo pusė yra ta pati. 348 00:21:35,410 --> 00:21:39,390 Taigi leiskite įvirsta laiku, kad t dar neegzistuoja istorija. 349 00:21:39,390 --> 00:21:43,160 S gali egzistuoti į istoriją, bet tegul mažosiomis Apie šį kartą. 350 00:21:43,160 --> 00:21:46,710 Taigi, leiskite man nustatyti, ką aš įvedėte. 351 00:21:46,710 --> 00:21:51,280 Šiuo atveju čia mes turime h-e-l-l-o. 352 00:21:51,280 --> 00:21:58,050 Mes pavaizduoti ją kaip simbolių seką, čia įdėti savo separatorius linijas ir mano \ 0. 353 00:21:58,050 --> 00:22:05,980 Taigi tai yra, kur mes esame, kuo greičiau line 1 24-ish, duoti ar priimti, įvykdė. 354 00:22:05,980 --> 00:22:07,800 Tai vaizdas mano atmintyje. 355 00:22:07,800 --> 00:22:10,800 Kai gaunu 27 eilutėje, kas atsitiks? 356 00:22:10,800 --> 00:22:14,730 Kaip ir anksčiau, man žymeklį, kurį aš atkreipti šioje aikštėje. 357 00:22:14,730 --> 00:22:19,740 Tai vadinama k. Ir kas jo reikšmė pagal nutylėjimą? Kas žino? Kai šiukšlių vertė. 358 00:22:19,740 --> 00:22:22,060 >> Taigi aš abstrakti, kad toli kaip klaustuko. 359 00:22:22,060 --> 00:22:27,670 Ir kuo greičiau vykdo 27 linijos dešinėje pusėje, kas aš išleisti viduje t? 360 00:22:27,670 --> 00:22:30,770 Tas pats dalykas, kad s. 361 00:22:30,770 --> 00:22:34,120 For a moment, todėl, jei mes pašalinti šį imti rodyklės kryptimi ir sakome: 362 00:22:34,120 --> 00:22:40,330 oh, tai atminties apkrova adresas 123, kai jūs sakote, t gauna s, kabliataškiu, 363 00:22:40,330 --> 00:22:42,700 jūs tiesiog išleisti 123 čia. 364 00:22:42,700 --> 00:22:45,200 Dabar, jei mes rūšies supaprastinti mūsų pasaulį vėl su paveikslėliais, 365 00:22:45,200 --> 00:22:48,750 tai, ką jūs tikrai padaryti ką tik pridėjo dar rodyklę į jūsų pasaulį 366 00:22:48,750 --> 00:22:52,910 nukreipta iš t toje pačioje tiksliai eilutę. 367 00:22:52,910 --> 00:22:59,730 Taigi, kai atitinka 31 ir 32 aš iš tikrųjų eiti apie besikeičiančius t [0] 368 00:22:59,730 --> 00:23:05,580 kas yra t [0] matyt tapatinama su dabar? [0] 369 00:23:05,580 --> 00:23:07,030 Taigi, kad visa tai vyksta. 370 00:23:07,030 --> 00:23:09,900 Ir nors tai tarsi jaučiasi šiek tiek žemo lygio ir slaptas 371 00:23:09,900 --> 00:23:12,760 ir tai tarsi jaučiasi galbūt intuityviai tai turėjo būti tik dirbo - 372 00:23:12,760 --> 00:23:15,410 Aš padariau kopijas dalykų anksčiau, ir tai tik dirbo 373 00:23:15,410 --> 00:23:18,590 jei jūs iš tikrųjų galvoja apie tai, ką eilutė tikrai yra, tai char *. 374 00:23:18,590 --> 00:23:21,700 Na, kas tai yra? Tai kai kurių charakterio adresas. 375 00:23:21,700 --> 00:23:24,930 Tada galbūt tai suteikia daugiau prasmės, kad bandant kažką daryti 376 00:23:24,930 --> 00:23:29,220 super atrodytų, paprastas, kaip šis, visi jūs darote, yra kopijavimo atminties adresas. 377 00:23:29,220 --> 00:23:32,530 Esate ne iš tikrųjų nieko daryti su styginių. 378 00:23:32,530 --> 00:23:37,500 Taigi, net jei jūs neturite idėjos, kaip jums būtų išspręsti šią problemą kode, 379 00:23:37,500 --> 00:23:45,080 aukšto lygio, konceptualiai, ką mes turime padaryti, siekiant, kad ta kopija s, matyt? 380 00:23:46,670 --> 00:23:48,820 Taip. >> [Studentas] Duok jai naują vietą? >> Būtent. 381 00:23:48,820 --> 00:23:50,800 >> Mes turime duoti T naują vietą. 382 00:23:50,800 --> 00:23:55,230 Mums reikia kažkaip sukurti pasaulį, kuriame mes gauti naują atminties riekė, 383 00:23:55,230 --> 00:24:00,090 tik siekiant aiškumo, aš atkreipti tiesiai po šį vieną, bet ji nebūtinai turi būti ten. 384 00:24:00,090 --> 00:24:04,880 Tačiau jis turi būti to paties dydžio, todėl aš padaryti šias vertikalias linijas toje pačioje vietoje. 385 00:24:04,880 --> 00:24:09,720 Tai gerai, jei tai yra visi šiukšlių pradžių. Kas žino, kas ten buvo? 386 00:24:09,720 --> 00:24:13,850 1 etapo rezultatai yra going to turi būti duoti man tiek daug atminties, kaip man reikia 387 00:24:13,850 --> 00:24:18,630 kad tilptų Hello kopiją, tada išsiaiškinti,, kaip kopijuoti h čia, čia e 388 00:24:18,630 --> 00:24:20,390 l čia, ir taip toliau. 389 00:24:20,390 --> 00:24:24,880 Bet tai jau turėtų jaustis šiek tiek akivaizdu, net jei kai kurios detalės dar yra abstraktus. 390 00:24:24,880 --> 00:24:28,690 Norėdami kopijuoti šią eilutę į tai, tai tik už linijos arba while cikle 391 00:24:28,690 --> 00:24:31,580 ar kažkas, su kuria jūs tapti labiau susipažinę. 392 00:24:31,580 --> 00:24:35,970 Taigi, pabandykime tai. Tegul man eiti į copy2.c. 393 00:24:35,970 --> 00:24:43,270 Į copy2.c turime beveik tą pačią programą, išskyrus 27 eilutėje. 394 00:24:43,270 --> 00:24:47,260 Ji atrodo šiek tiek sudėtinga, bet jei mes ją padalyti Kuskas, 395 00:24:47,260 --> 00:24:48,950 kairėje pusėje yra tas pats. 396 00:24:48,950 --> 00:24:52,790 Char * t sukuria atmintyje, nors šis dalykas su klaustuku 397 00:24:52,790 --> 00:24:54,680 nes mes neįsivaizduoju, ką ten pagal nutylėjimą. 398 00:24:54,680 --> 00:24:57,920 Dešinėje pusėje mes dabar pradedame naują funkciją, malloc, 399 00:24:57,920 --> 00:25:00,640 už atminties skirti, duok man atmintį, 400 00:25:00,640 --> 00:25:06,900 ir matyt, kiek argumentų, kaip daug dalykų viduje skliausteliuose? 401 00:25:09,660 --> 00:25:12,130 Aš girdėjau murmėjimą 1 ir 2, bet jis yra tik 1. 402 00:25:12,130 --> 00:25:15,320 Yra ne kablelis, kuris reiškia, kad yra tik 1 dalykas skliausteliuose. 403 00:25:15,320 --> 00:25:17,720 Nors yra kitų skliaustus, leiskite man pabrėžti, 404 00:25:17,720 --> 00:25:21,460 , kas viduje atokiausių skliausteliuose, ir tai tik išraiška: 405 00:25:21,460 --> 00:25:25,880 (Strlen (-ai) + 1) * sizeof (char). 406 00:25:25,880 --> 00:25:29,190 Taigi, jei mes iš tikrųjų manau, kad tai per, tai sako duok man s ilgis. 407 00:25:29,190 --> 00:25:34,440 Kodėl aš, nors ant ilgio pridedant 1? >> [Nesigirdi studentas atsakas] 408 00:25:34,440 --> 00:25:40,200 Tiksliai. Mums reikia vietos šis vaikinas už uodegos, šeštoji simbolių, kurie neturi anglų kalboje 409 00:25:40,200 --> 00:25:42,250 bet turi specialų programinį prasmę. 410 00:25:42,250 --> 00:25:46,800 >> Taigi, mes turime a + 1 už tai, nes strlen grįžta žmonių lūkesčiai ilgio, 411 00:25:46,800 --> 00:25:50,890 Apie arba 5, tai nėra suteikti jums papildomą null charakterį. 412 00:25:50,890 --> 00:25:52,980 Taigi, aš rankiniu būdu įtraukti + 1. 413 00:25:52,980 --> 00:25:56,060 Ir tada tai, * dydis (char), mes dar nematėte anksčiau. 414 00:25:56,060 --> 00:25:57,480 Tai nėra techniškai funkcija. 415 00:25:57,480 --> 00:26:04,150 Tai specialus raktinis žodis, kad tik jums pasakys, kokio dydžio yra kai kurių duomenų tipo kompiuteryje 416 00:26:04,150 --> 00:26:06,980 nes iš tikrųjų, kai kurie iš mūsų 32-bit kompiuterius. 417 00:26:06,980 --> 00:26:10,900 Turiu gana seną kompiuterį namuose, ir jis naudoja tik 32 bitų atstovauti patarimų. 418 00:26:10,900 --> 00:26:13,900 Ir todėl, jei aš padariau duomenų tipą, dydį, jis gali būti 32 bitų. 419 00:26:13,900 --> 00:26:18,300 Bet jei aš naudoju savo naują išgalvotas kompiuterį, aš galėtų gauti 64 bitų reikšmę 420 00:26:18,300 --> 00:26:20,510 kažką panašaus adresą. 421 00:26:20,510 --> 00:26:25,400 Taigi šiuo atveju, tiesiog super saugus, mes neketiname į kietąjį kodas kažką panašaus - 422 00:26:25,400 --> 00:26:28,740 gerai, kas yra char pagal tai, ką mes iki šiol buvo pasakyta dydis? 423 00:26:28,740 --> 00:26:34,450 Mes beveik sakė žodžiu, kad ji yra 1 baitas, ir kad gana daug visur. 424 00:26:34,450 --> 00:26:37,000 Bet vėl, prielaidos yra linkę būti blogai. 425 00:26:37,000 --> 00:26:40,850 Jie veda į Buggy programinės įrangos, jei žmonės savo programinę įrangą į būdų, kaip neketino. 426 00:26:40,850 --> 00:26:44,750 Todėl galime Anotacija toli ir tik daugiau bendrine pasakyti 427 00:26:44,750 --> 00:26:46,830 Man reikia tai daug atminties gabaliukus 428 00:26:46,830 --> 00:26:50,210 ir kiekvienas atminties riekė pobūdžio dydžio turėtų būti lygiavertis, 429 00:26:50,210 --> 00:26:54,870 , kuris iš tikrųjų yra lygi šiuo atveju 1, bet tai labiau bendro pobūdžio būdas raštu jį. 430 00:26:54,870 --> 00:27:00,460 Taigi, jei žodis yra Apie, kiek baitų malloc matyt skirti Apie? 431 00:27:00,460 --> 00:27:04,980 [Studentas] Šeši. >> Šeši. Tiksliai taip, kaip daugelis, kaip mes turime klaustukų ekrane. 432 00:27:04,980 --> 00:27:07,800 Ir tada imtis atspėti dabar remiasi savo supratimą apie GetString 433 00:27:07,800 --> 00:27:12,790 ką malloc tikriausiai grįžti? >> [Studentas] adresas. 434 00:27:12,790 --> 00:27:17,020 Koks adresas? Pirmojo atminties riekė. 435 00:27:17,020 --> 00:27:20,670 >> Mes neturime jokio supratimo, kas ten, nes kai kitas funkcijas, 436 00:27:20,670 --> 00:27:23,010 galėjo būti naudojant šią atmintį anksčiau. 437 00:27:23,010 --> 00:27:28,380 Tačiau, malloc, kaip GetString, grąžina adresą pirmojo baito atminties 438 00:27:28,380 --> 00:27:30,540 kad ji atidėta. 439 00:27:30,540 --> 00:27:38,380 Tačiau tai, kas ji nėra, tai užpildyti šį lauką tuščią įžambiuoju kairiniu brūkšniu null pobūdžio 440 00:27:38,380 --> 00:27:43,030 nes paaiškėja, galite naudoti malloc skirti nieko: int, stygos, masyvus, 441 00:27:43,030 --> 00:27:45,700 plūdes, studentų struktūros. 442 00:27:45,700 --> 00:27:47,750 Galite naudoti malloc visiškai bendrine. 443 00:27:47,750 --> 00:27:51,470 Ji nerūpi ar turi žinoti, ką jūs skiriant atminties. 444 00:27:51,470 --> 00:27:55,810 Taigi būtų įžūlu malloc įdėti \ 0 445 00:27:55,810 --> 00:27:58,340 kiekvienas atminties riekė pabaigos ji suteikia jums 446 00:27:58,340 --> 00:28:02,620 nes tai \ 0 dalykas yra tik styginiams konvencija. 447 00:28:02,620 --> 00:28:06,310 Jis nėra naudojamas int, tai nėra naudojamos plūdės, tai ne studentams. 448 00:28:06,310 --> 00:28:11,730 Ir taip su malloc kabliuko, kad sunkumai yra visiškai jums programuotojas 449 00:28:11,730 --> 00:28:16,790 prisiminti, kiek baitų skiriama, o ne kada nors naudoti už linijos 450 00:28:16,790 --> 00:28:21,570 o linijos ir eiti pro riekė jums suteikta atminties ribos. 451 00:28:21,570 --> 00:28:23,540 Kitaip tariant, kuo greičiau paskirstyti atmintį, 452 00:28:23,540 --> 00:28:28,510 negali reikalauti, kad operacinę sistemą, oi, beje, kaip didelis atminties riekė buvo? 453 00:28:28,510 --> 00:28:32,080 Tai visiškai iki jums prisiminti, jei jums reikia, kad vertę. 454 00:28:32,080 --> 00:28:34,330 >> Taigi pažiūrėkime, kaip pradėti naudoti šią atmintį. 455 00:28:34,330 --> 00:28:38,430 Atsižvelgiant į 28 ir 29 kodėl aš tai daryti? 456 00:28:39,850 --> 00:28:42,260 Tik viso normalumas patikrinti. 457 00:28:42,260 --> 00:28:45,110 Tik tuo atveju, kažkas negerai, aš prašau nors crazy suma atminties 458 00:28:45,110 --> 00:28:48,690 ar aš turiu tiek daug dalykų veikia kompiuteryje, kad tiesiog nėra pakankamai atminties, 459 00:28:48,690 --> 00:28:51,780 kažką panašaus, kad aš bent norite patikrinti for null. 460 00:28:51,780 --> 00:28:55,260 Iš tiesų, dauguma kompiuterių duos jums iliuziją, kad kiekviena programa 461 00:28:55,260 --> 00:28:57,080 galite naudoti visas savo atminties, 462 00:28:57,080 --> 00:29:00,740 tačiau net ir taip, jei vartotojas įveda į šiek tiek beprotiškai ilgą eilutę gal, nes jie blogiukas 463 00:29:00,740 --> 00:29:03,440 ir jie iš tikrųjų bando katastrofos savo programą arba nulaužti į jį, 464 00:29:03,440 --> 00:29:07,300 norite bent patikrinti grąžinimo vertę malloc ir ar ji yra lygi NULL. 465 00:29:07,300 --> 00:29:11,630 Ir jei jis, tegul tiesiog mesti dabar, nes aš nežinau, ką daryti tokiu atveju. 466 00:29:11,630 --> 00:29:13,950 Kaip nukopijuoti eilutę? Yra keletas būdų, kaip tai padaryti. 467 00:29:13,950 --> 00:29:18,850 Yra g kopijuoti C funkcijas, bet tai super paprasta, mums tai padaryti senamadiškas būdas. 468 00:29:18,850 --> 00:29:23,110 >> Pirmiausia leiskite man išsiaiškinti, kas s ilgis yra. 469 00:29:23,110 --> 00:29:26,930 Aš galėjo įdėti šią nuorodą į kilpą, bet, o aš tiesiog įdėti jį čia dėl aiškumo. 470 00:29:26,930 --> 00:29:30,610 Taigi n dabar saugo pradinės eilutės ilgį, kuris, matyt, 5. 471 00:29:30,610 --> 00:29:35,290 Tada mano Loop aš iteravimu nuo 0 iki n, 472 00:29:35,290 --> 00:29:40,940 ir kiekvienos iteracijos aš pradėti s [i] viduje t [i]. 473 00:29:40,940 --> 00:29:45,060 Todėl tai, ką aš reiškė, su mano 2 pirštais, nukreiptos stygos prieš. 474 00:29:45,060 --> 00:29:49,260 Kaip for ciklas kartojasi, kaip šis, aš ruošiuosi reikia nukopijuoti h į čia, 475 00:29:49,260 --> 00:29:52,890 e į čia, l čia, nes tai yra, tai yra t. 476 00:29:52,890 --> 00:29:58,770 Ir tada galiausiai, line 35, kodėl aš tai padaryti? 477 00:29:58,770 --> 00:30:03,770 Man reikia įsitikinti, kad aš baigiasi eilutės t. 478 00:30:03,770 --> 00:30:06,170 Ir aš jį šiuo būdu būti itin aiškus. 479 00:30:06,170 --> 00:30:09,510 Bet pasiūlyti, ką nors, jei galėtumėte, įvairių būdų tai padaryti. 480 00:30:09,510 --> 00:30:13,930 Aš tikrai nereikia line 35. Yra dar vienas būdas tai padaryti. 481 00:30:13,930 --> 00:30:18,880 Taip. >> [Nesigirdi studentas atsakas] >> Pasakyk tai garsiau. 482 00:30:18,880 --> 00:30:20,960 [Studentas] Mažiau nei arba lygu. >> Būtent. 483 00:30:20,960 --> 00:30:24,450 Galėtume tiesiog pasakyti mažesnis arba lygus n, kuris apskritai buvo blogai 484 00:30:24,450 --> 00:30:28,190 nes beveik visada, kai mes einame į lygus dalykas mes skaičiavimo 485 00:30:28,190 --> 00:30:30,000 mes einame 1 žingsnį per toli. 486 00:30:30,000 --> 00:30:32,170 Bet atsiminkite, kiek baitų mes skirti? 487 00:30:32,170 --> 00:30:37,210 Skyrėme strlen s, taigi 5 + 1 už iš viso 6. 488 00:30:37,210 --> 00:30:39,980 Taigi šiuo atveju, mes galime padaryti kažką panašaus į tai 489 00:30:39,980 --> 00:30:46,450 todėl, kad mes kopijuojant ne tik Apie bet ir \ 0 pačioje pabaigoje. 490 00:30:46,450 --> 00:30:49,860 Be to, mes galime naudoti funkcija vadinama, g kopija, strcpy 491 00:30:49,860 --> 00:30:51,700 bet kad nebūtų beveik taip smagu. 492 00:30:51,700 --> 00:30:54,000 Bet tai viskas, ji po gaubtu. 493 00:30:54,000 --> 00:30:56,050 Tada galiausiai, mes darome tą patį, kaip ir anksčiau. 494 00:30:56,050 --> 00:31:01,620 Galiu pasinaudoti t ir tada aš tvirtina, kad pradinis atrodo ir kopija atrodo, kad. 495 00:31:01,620 --> 00:31:08,570 Taigi, pabandykime tai dabar. Leiskite man eiti čia. Padaryti copy2. Mes padidinti ir paleisti copy2. 496 00:31:08,570 --> 00:31:13,840 Aš ruošiuosi įvesti hello mažosiomis raidėmis, ir iš tiesų aš gausiu mažosiomis hello kaip originalas 497 00:31:13,840 --> 00:31:16,930 tačiau kapitalas Hello kopijos. 498 00:31:16,930 --> 00:31:20,300 Bet aš ne padaryti tik dar. 1 paskutinis dalykas, man reikia padaryti čia. 499 00:31:20,300 --> 00:31:28,000 46 ir 47 yra aiškiai atlaisvinti atminties, bet ką tai iš tikrųjų reiškia? 500 00:31:28,000 --> 00:31:33,250 Ką aš darau, ar manote, paskambinus linija 46 ir 47 linijos? 501 00:31:33,250 --> 00:31:38,900 Kokį poveikį tai turi bendro? Taip. 502 00:31:38,900 --> 00:31:43,140 [Nesigirdi studentas atsakas] >> Taip. 503 00:31:43,140 --> 00:31:46,380 >> Jūs tiesiog pasako, kad operacinės sistemos, ei, ačiū už šios atminties. 504 00:31:46,380 --> 00:31:48,320 Dabar galite naudoti ją kažkam kitam. 505 00:31:48,320 --> 00:31:50,790 Ir štai puikus pavyzdys, šiukšlių vertybių. 506 00:31:50,790 --> 00:31:55,430 Aš tiesiog naudoti šią atminties užrašyti žodį hello 2 vietose, 507 00:31:55,430 --> 00:31:57,490 čia, čia, čia, ir čia. 508 00:31:57,490 --> 00:32:00,910 Taigi tai yra h-e-l-l-o-\ 0. 509 00:32:00,910 --> 00:32:06,960 Bet tada aš skambinti linija 46 ir 47 linijos, ir jūs žinote, kas jose vyksta paveikslėlio? 510 00:32:06,960 --> 00:32:10,010 Tiesą sakant, palauk, šis vaizdas yra senas. 511 00:32:10,010 --> 00:32:12,550 Kai mes darome kopiją, šis vaikinas yra iš tikrųjų nukreipta čia, 512 00:32:12,550 --> 00:32:16,110 tad pašalinti numerius ir tiesiog abstrakti toli, kaip mūsų rodyklėmis vėl. 513 00:32:16,110 --> 00:32:19,370 Tai, kas vyksta šioje nuotraukoje, kai aš skambinti nemokamai? 514 00:32:19,370 --> 00:32:22,750 [Nesigirdi studentas atsakas] >> Net. 515 00:32:22,750 --> 00:32:29,510 Jei aš vadinu nemokamai S ir T - tipo triukas klausimą - šį paveiksliuką nėra keisti 516 00:32:29,510 --> 00:32:33,880 nes paskambinus s ir raginama t tik pasakoja operacinę sistemą, 517 00:32:33,880 --> 00:32:39,010 Ei, jūs galite naudoti šią atminties dar kartą, bet tai nekeičia, tai nulis 518 00:32:39,010 --> 00:32:41,840 specialus simbolis arba kai, ji negali pakeisti tai, 519 00:32:41,840 --> 00:32:47,350 jis nekeičia h arba e arba L arba L arba THE O kas nors kitas bet kurios vietos. 520 00:32:47,350 --> 00:32:51,610 Paveikslėlio, kuo greičiau skambinti nemokamai, niekas nesikeičia. 521 00:32:51,610 --> 00:32:56,570 Ir jame slypi šiukšlių vertybių kilmę, nes, jei aš vėliau šioje programoje 522 00:32:56,570 --> 00:33:01,010 paklausti operacinę sistemą daugiau atminties su GetString ar malloc ar kažką panašaus, kad 523 00:33:01,010 --> 00:33:04,900 ir operacinė sistema sako, tikrai, aš turiu 12 baitų atminties, tik atsiradusiomis 524 00:33:04,900 --> 00:33:08,080 jomis naudotis, ką jūs ketinate būti perduotas? 525 00:33:08,080 --> 00:33:10,830 Jūs ketinate būti perduotas iš atminties riekė, kad mes paprastai atkreipti 526 00:33:10,830 --> 00:33:13,700 su klaustukais, bet kas yra tie klaustukai? 527 00:33:13,700 --> 00:33:17,000 Jie atsitikti, kad h-e-l-l-o, h-e-l-l-o. 528 00:33:17,000 --> 00:33:20,940 Tai yra mūsų nauji šiukšlių vertes kuo greičiau atlaisvinti, kad atmintis. 529 00:33:20,940 --> 00:33:22,750 >> Yra realus pasaulis potekstė čia. 530 00:33:22,750 --> 00:33:24,720 Tai atsitinka su RAM, tačiau jūsų kompiuteryje 531 00:33:24,720 --> 00:33:26,720 iš tikrųjų tą patį diską. 532 00:33:26,720 --> 00:33:30,620 Mes kalbame apie tai, ypač su būsimu problemą, kad pagrindinis dėmesys skiriamas ekspertizės. 533 00:33:30,620 --> 00:33:36,170 Bet kas iš tikrųjų vyksta, jei turite kokių nors jautrią finansinę failą darbalaukyje, 534 00:33:36,170 --> 00:33:39,600 arba kai paviršutiniškas JPEG ir vilkite jį į savo krepšio, 535 00:33:39,600 --> 00:33:44,390 kas atsitinka, kai jūs vilkite jį į šiukšlių dėžę ar "Recycle Bin"? 536 00:33:44,390 --> 00:33:47,240 Žinai, ką aš kalbu apie. [Juokas] 537 00:33:47,240 --> 00:33:52,370 Kas atsitinka, kai jūs tempia, kad įrodymai, į jūsų šiukšlinę ar šiukšliadėžės? 538 00:33:52,370 --> 00:33:55,920 [Nesigirdi studentas atsakas] 539 00:33:55,920 --> 00:33:58,000 Gerai, todėl atsargūs. Kas atsitinka, kai jūs darote, kad? 540 00:33:58,000 --> 00:34:01,030 Trumpas atsakymas yra nieko, tiesa? 541 00:34:01,030 --> 00:34:04,790 Paviršutiniškas arba jautrus byla vis dar tik sėdi ten kažkur kietajame diske. 542 00:34:04,790 --> 00:34:07,940 Daugelis iš mūsų bent jau sužinojau kietąjį būdu, kad jums reikia išvalyti šiukšles 543 00:34:07,940 --> 00:34:10,429 ar jūsų šiukšlinę, kad iš tikrųjų ištrinti failus. 544 00:34:10,429 --> 00:34:13,440 Ir iš tiesų, kai jūs dešiniuoju pelės mygtuku spustelėkite arba kontroliuoti savo krepšio, spustelėkite 545 00:34:13,440 --> 00:34:15,580 arba pasirinkti failą, Empty Trash ar whatever 546 00:34:15,580 --> 00:34:21,420 ir jūs iš tikrųjų ištuštinti šiukšlinės ar šiukšlinę, kas iš tikrųjų vyksta tada šioje nuotraukoje? 547 00:34:22,810 --> 00:34:25,969 Daugiau nieko. Todėl nieko iš tikrųjų vyksta diske. 548 00:34:25,969 --> 00:34:30,880 >> Ir jei mes tik laikinai nutolti ir rašyti - I'll tiesiog naudoti tai atgal. 549 00:34:30,880 --> 00:34:34,639 Taigi, dabar istorija keičiasi iš atminties, kur yra programos veikia 550 00:34:34,639 --> 00:34:39,250 o jūs naudojate juos į diską, kuris yra, kai jie yra saugomi ilgą laiką 551 00:34:39,250 --> 00:34:42,920 net tada, kai galios išeina, dabar - ir mes grįžti į tai ateityje - 552 00:34:42,920 --> 00:34:46,380 tegul tiesiog apsimesti, kad tai rodo, jūsų kompiuterio kietojo disko viduje 553 00:34:46,380 --> 00:34:50,110 , nes atgal per dieną, jie turi būti apskrito diskai, panašiai kaip diskeliai. 554 00:34:50,110 --> 00:34:55,130 Taigi, jei jūs turite kai slapta "Excel" failą, ji gali imtis šią atminties riekė 555 00:34:55,130 --> 00:34:59,770 kompiuterio diske, ir aš tik piešimo pati savavališką 1s ir 0s. 556 00:34:59,770 --> 00:35:03,970 Kai jūs vilkite failą, pavyzdžiui, kad į jūsų šiukšliadėžę ar šiukšlinę, 557 00:35:03,970 --> 00:35:07,750 tiesiog nieko neįvyksta, nes "Apple" ir "Microsoft" tiesiog nusprendė 558 00:35:07,750 --> 00:35:10,450 šiukšliadėžės ir šiukšlinę yra tikrai tik laikinas vietos rezervavimo ženklas. 559 00:35:10,450 --> 00:35:14,710 Gal pagaliau OS bus tuščias tai už jus, bet paprastai, jis nedaro nieko, 560 00:35:14,710 --> 00:35:17,090 bent tol, kol jūs tikrai mažai vietos. 561 00:35:17,090 --> 00:35:20,870 >> Tačiau, kai jūs einate į tuščią šiukšlių arba tuščias šiukšlinę, 562 00:35:20,870 --> 00:35:23,460 panašiai, nieko neįvyksta į šį paveikslėlį. 563 00:35:23,460 --> 00:35:28,590 Visa tai atsitiks, tai kitoje kompiuterio vietoje, yra kažkoks lentelės. 564 00:35:28,590 --> 00:35:35,400 Tai tarsi šiek tiek apgauti lapo, sako, kad, tarkim, resume.doc, 565 00:35:35,400 --> 00:35:40,920 todėl savo CV "Microsoft Word" failą kietajame diske 123 vietoje gyventi, 566 00:35:40,920 --> 00:35:43,710 ne atminties, o ne RAM, bet kietajame diske, 567 00:35:43,710 --> 00:35:49,050 ir jūsų apytikrės JPEG gyvena 456, ir jūsų "Excel" failų gyvena 789 ar kur. 568 00:35:49,050 --> 00:35:53,640 Jei norite ištrinti failus iš tikrųjų ištuštinti šiukšlinę, ar "Recycle Bin", 569 00:35:53,640 --> 00:35:59,530 šį paveiksliuką nesikeičia. 0s ir 1s kietajame diske neturi eiti bet kur. 570 00:35:59,530 --> 00:36:03,930 Tačiau šioje lentelėje, tai šiek tiek duomenų bazės rūšių, pasikeičia. 571 00:36:03,930 --> 00:36:08,750 Jei norite ištrinti savo CV, tai kaip nors failas yra ištrintas, tam tikra prasme, 572 00:36:08,750 --> 00:36:12,790 bet visi kompiuteris pamiršti, kur gyvena tas dalykas ant jūsų standžiojo disko. 573 00:36:12,790 --> 00:36:17,870 0s ir 1s, kad rašyti savo CV ar bet kurį iš šių kitų failų yra vis dar nepaliestas. 574 00:36:17,870 --> 00:36:21,960 >> Taigi, jei jūs tai padarė netyčia, dar ne nulis tikimybė 575 00:36:21,960 --> 00:36:25,800 kad jūs galite atgauti savo duomenis, naudojant Norton Utilities ar tam tikrą komercinę programinę įrangą 576 00:36:25,800 --> 00:36:29,810 kurių gyvenimo tikslas yra rasti 0s ir 1s, kurie tarsi našlaičiai, 577 00:36:29,810 --> 00:36:33,300 pamiršote čia, bet paliko čia, kad jūs galite gauti savo duomenis atgal. 578 00:36:33,300 --> 00:36:38,410 Ar teismo tyrėjai su policija ar FTB iš tikrųjų kietąjį diską 579 00:36:38,410 --> 00:36:42,550 0s ir 1s, kad atrodo kaip JPEG, atrodo Excel failus modelius iš tikrųjų atrodo, 580 00:36:42,550 --> 00:36:46,400 ir atkurti juos, kad taip, net jei kompiuteris pamiršo juos ten. 581 00:36:46,400 --> 00:36:49,820 Taigi vienintelis būdas tikrai ištrinti duomenis, nes mes aptarsime ateityje, 582 00:36:49,820 --> 00:36:54,190 krūmų arba nuvalykite failą arba kietajame diske - 583 00:36:54,190 --> 00:36:56,540 Jūs tikrai negali atsikratyti 0s ir 1s 584 00:36:56,540 --> 00:36:59,440 nes kitaip jums reikia pradėti su gigabaitų kietąjį diską 585 00:36:59,440 --> 00:37:02,380 ir norite baigti su megabaitą kietąjį diską, jei jūs nuolat buvo ištrinti, 586 00:37:02,380 --> 00:37:04,380 pažodžiui, 0s ir 1s. 587 00:37:04,380 --> 00:37:06,310 Taigi, ką jūs darytumėte, jei tikrai nori padengti savo dainos 588 00:37:06,310 --> 00:37:10,510 ir pagrindinė problema yra ta, kad vis dar 0s ir 1s diske? 589 00:37:10,510 --> 00:37:14,930 Aš matau, kad kas nors gesticulating, kad jums būtų fiziškai pertrauka prietaisą. , Kad bus dirbti. 590 00:37:14,930 --> 00:37:19,600 [Juokas] Bet jei tai tipo brangios tirpalo, kas būtų labiau pagrįsta? 591 00:37:19,600 --> 00:37:23,270 Taip. >> [Studentas] perrašyti juos. >> Perrašyti juos su tuo, ką? >> [Studentas] Kiti duomenys. 592 00:37:23,270 --> 00:37:29,070 Kiti duomenys. Jūs galite tiesiog perrašyti savo diską su 0s ar 1s ar visų 0s, visi 1s. 593 00:37:29,070 --> 00:37:31,230 >> Ir kad iš tikrųjų tai, ką kai kurie programinės įrangos ar. 594 00:37:31,230 --> 00:37:33,570 Jūs galite įsigyti programinės įrangos ar net gauti nemokamą programinę įrangą, 595 00:37:33,570 --> 00:37:36,610 ir net pastatytas mažiau, Windows, Mac OS šių dienų, 596 00:37:36,610 --> 00:37:38,660 yra galimybė saugiai ištrinti. 597 00:37:38,660 --> 00:37:41,960 Tiesą sakant, jei norite viso nuotekų namuose šiandien, jei turite "Mac", tai padaryti, 598 00:37:41,960 --> 00:37:45,740 jei jūs turite kai savo krepšio stuff, jūs galite padaryti, Secure Empty Trash 599 00:37:45,740 --> 00:37:47,610 , kuri veikia lygiai taip pat. 600 00:37:47,610 --> 00:37:53,350 , O ne tik ištrinti failus čia, tai nereiškia ištrinti 0s ir 1s, 601 00:37:53,350 --> 00:38:01,240 o jis tiesiog keičia juos visus, pavyzdžiui, 0s ir taškas, taškas, tašku. 602 00:38:01,240 --> 00:38:05,330 Taigi vienas iš Jūsų būsimų psets tikrai bus tyčia atkurti duomenis - 603 00:38:05,330 --> 00:38:08,430 nuotraukos, kad mes atlikome žmonių, vietų ir daiktų miesteliu 604 00:38:08,430 --> 00:38:12,810 , dėl kurių mes padaryti teismo ekspertizės vaizdą iš skaitmeninio fotoaparato atminties kortelės, 605 00:38:12,810 --> 00:38:17,120 kuris yra lygiai toks pats idėja - ir jūs turite būti ginčijamas, iš tikrųjų rasti 606 00:38:17,120 --> 00:38:20,160 modeliai,, kurios atstovauja JPEG kietajame diske, 607 00:38:20,160 --> 00:38:23,610 toks, koks buvęs jo studentas, kurio laišką aš perskaičiau prieš kelias savaites 608 00:38:23,610 --> 00:38:25,860 susigrąžinti savo sesers nuotraukas. 609 00:38:25,860 --> 00:38:30,300 Kodėl mes 5 minučių pertrauką čia, ir mes pergrupuoti su daugiau atminties. 610 00:38:33,030 --> 00:38:38,610 Taigi čia yra, kai ko gauti šiek tiek proto-lenkimo, tačiau tai yra labai galingas žingsnis 611 00:38:38,610 --> 00:38:40,480 link suprasti visa tai daugiau. 612 00:38:40,480 --> 00:38:42,900 Čia yra programa, vadinama pointers.c. 613 00:38:42,900 --> 00:38:45,430 Jis yra vienas iš šiandienos mėginio kodą. 614 00:38:45,430 --> 00:38:51,280 Atkreipkite dėmesį, kad pirmųjų eilučių, 19 per 22, visa, ką mes darome, yra kažkas panašaus GetString 615 00:38:51,280 --> 00:38:54,460 ir grąžinimo adresas, ją saugoti s. 616 00:38:54,460 --> 00:38:58,380 Nuo šiol už pset net 3, jei norite, bet pset 4 ir 617 00:38:58,380 --> 00:39:01,030 kur jūs galite pradėti imtis šių mokymo ratams sau, 618 00:39:01,030 --> 00:39:04,030 nėra jokios priežasties, apsimesti, kad stygos nebeegzistuoja. 619 00:39:04,030 --> 00:39:07,030 Tai tikrai gerai, tiesiog pradėti sakydamas char *. 620 00:39:07,030 --> 00:39:12,610 >> Kaip panaikinti, interneto nuorodas ir knygų galite dažnai pamatyti žvaigždę šalia kintamojo. 621 00:39:12,610 --> 00:39:15,600 Galbūt net pamatyti erdves aplink abiejų pusių. 622 00:39:15,600 --> 00:39:17,680 Visiems tiems, funkciniu požiūriu yra teisingi. 623 00:39:17,680 --> 00:39:21,180 Nes dabar, nors mes standartizuoti šiuo požiūriu, kad super aišku 624 00:39:21,180 --> 00:39:24,000 kad char * yra tarsi sakydamas simbolių žymeklį. 625 00:39:24,000 --> 00:39:25,680 Kad yra duomenų tipas. 626 00:39:25,680 --> 00:39:28,730 Ir tada kintamojo vardas yra s šiuo atveju. 627 00:39:28,730 --> 00:39:31,180 Taigi, mes Dotarłeś eilutę ir mes pavadino ji s. 628 00:39:31,180 --> 00:39:35,180 Ir tada žemyn čia pastebėti, kad aš darau iš tikrųjų šiek tiek gudrybės. 629 00:39:35,180 --> 00:39:39,080 Tai vadinama rodyklė aritmetiką, kuri yra tarsi super paprasta. 630 00:39:39,080 --> 00:39:41,790 Tai tiesiog reiškia, pridėti ir atimti skaičius rodykles. 631 00:39:41,790 --> 00:39:43,660 Bet tai iš tiesų veikia. 632 00:39:43,660 --> 00:39:49,170 Ši programa, matyt, spausdina styginių s 1 charakterį vieną eilutę, pavyzdžiui, kad galutinis rezultatas - 633 00:39:49,170 --> 00:39:54,920 Tik taip mes galime sugadinti, kur tai vyksta, kad patarimų, vykdykite nurodymus, leiskite man padidinti. 634 00:39:54,920 --> 00:39:58,940 Dabar leiskite man tipo kažką panašaus HELLO ir tipas Enter 635 00:39:58,940 --> 00:40:01,080 ir jis spausdina 1 požymį už linijos. 636 00:40:01,080 --> 00:40:04,730 Iki tol, kol prieš antrą, mes padarėme tai su kvadratiniu kronšteino notacijos. 637 00:40:04,730 --> 00:40:09,760 Mes norime turėti linijos ir mes norime padaryti printf s [i] ir mes norime padaryti, kad vėl ir vėl ir vėl 638 00:40:09,760 --> 00:40:11,950 kairinį pasvirąjį brūkšnį n prie kiekvienos eilutės gale. 639 00:40:11,950 --> 00:40:16,800 Tačiau ši programa yra skirtinga. Ši programa naudoja, pažodžiui, aritmetinis. 640 00:40:16,800 --> 00:40:18,860 Taigi, kas čia vyksta? 641 00:40:18,860 --> 00:40:24,720 Visų pirma, kol šis ciklas netgi vykdo, ką, tiesiog, kad būtų aišku, yra iš tikrųjų? 642 00:40:24,720 --> 00:40:27,270 S? >> [Studentas] adresas. >> Adresas. 643 00:40:27,270 --> 00:40:32,980 >> Ir tai adresas, Hello, šio žodžio pirmas simbolis, kuris yra h. 644 00:40:32,980 --> 00:40:37,370 Taigi s, šiuo konkrečiu pavyzdžiu, h adresas. 645 00:40:37,370 --> 00:40:41,850 Taigi, ką tai reiškia, tai padaryti s + i? 646 00:40:41,850 --> 00:40:46,280 Na, aš prasideda 0, už linijos. Mes padarėme, kad daug kartų. 647 00:40:46,280 --> 00:40:49,760 I ketinate eiti į eilutės ilgis, matyt. 648 00:40:49,760 --> 00:40:53,950 Pirmajam iteracijos procesui šio ciklo Taigi, aš, žinoma, 0. 649 00:40:53,950 --> 00:41:01,740 Taigi, šis posakis sako s + i - o, ai +0- kad akivaizdžiai tiesiog ai. 650 00:41:01,740 --> 00:41:04,320 Taigi, kas yra * čia? 651 00:41:04,320 --> 00:41:08,530 Dabar mes naudojame žvaigždė šiek tiek kitaip. 652 00:41:08,530 --> 00:41:13,080 Leiskite man eiti į priekį ir atsikratyti t, nes mes kalbame apie s t ir kopijas. 653 00:41:13,080 --> 00:41:15,540 Dabar mes tiesiog norime papasakoti istoriją, įtraukiant s. 654 00:41:15,540 --> 00:41:20,090 Ir taip šiuo metu, po to, kai tipo String, kad mūsų pasaulis atrodo gana, kaip ji tai padarė prieš 655 00:41:20,090 --> 00:41:26,630 tiesiog ai saugoti H adresą ir apskritai nukreipta į eilutę hello. 656 00:41:26,630 --> 00:41:33,170 Jeigu aš dabar liniją, pavyzdžiui, * (s + i), galime pabandyti šį variantą. 657 00:41:33,170 --> 00:41:40,140 Taigi * (s + i). Leiskite man supaprastinti, nes tai yra 0, todėl tai yra * (-ai +0). 658 00:41:40,140 --> 00:41:43,790 Na, palauk. Toliau supaprastinti. Tai * (s). 659 00:41:43,790 --> 00:41:47,020 Na, dabar skliausteliai yra kind of stupid, todėl dabar galime tik padaryti * s. 660 00:41:47,020 --> 00:41:50,540 Taigi pirmajam iteracijos procesui šio ciklo, kad linija bus paryškinta, 26, 661 00:41:50,540 --> 00:41:53,650 yra beveik atitinka spausdinimo. 662 00:41:53,650 --> 00:41:56,040 Kas yra duomenų tipas * s? 663 00:41:56,040 --> 00:42:00,770 Šiame kontekste, nes žvaigždė atsitinka būti šalia pačiai s, 664 00:42:00,770 --> 00:42:04,930 bet tiksliau, nes mes nebėra skelbiantis s, 665 00:42:04,930 --> 00:42:09,730 mes ne sukurti kintamąjį nebėra, yra ne 26 eilutėje char * paminėjimas, 666 00:42:09,730 --> 00:42:14,280 ten neužsimenama raktažodį eilutę, mes tik naudojant kintamasis vadinamas ai, 667 00:42:14,280 --> 00:42:19,650 paaiškėja, žvaigždė dabar yra šiek tiek kitoks ir, žinoma, painu prasmę. 668 00:42:19,650 --> 00:42:26,590 * Čia reiškia eiti į s adresą ir spausdinti viską, kas ten. 669 00:42:26,590 --> 00:42:33,750 Taigi s čia * s - tarsi Chutes ir kopėčios, atlikite rodyklę - čia. 670 00:42:33,750 --> 00:42:35,850 Taigi tai yra * s. 671 00:42:35,850 --> 00:42:39,060 >> Taigi, ką bus atspausdintas pirmajam iteracijos procesui tos linijos 26 linijos? 672 00:42:39,060 --> 00:42:42,170 Aš atsispausdinti% C, kuris yra vietos rezervavimo ženklo simbolį, 673 00:42:42,170 --> 00:42:48,520 \ n naujoje eilutėje. * (S + i), kur i yra elektronų, 0 yra tik tai. 674 00:42:48,520 --> 00:42:53,670 Taigi, kas char aš įdėti į% c? H. 675 00:42:53,670 --> 00:42:56,900 Į kitą iteracijos kilpos - jūs tikriausiai galite pamatyti, kur tai vyksta - 676 00:42:56,900 --> 00:43:01,350 kito pakartojimo i akivaizdžiai 1, todėl tai reiškia, s +1, 677 00:43:01,350 --> 00:43:05,580 Ir dabar aš reikia skliausteliuose, nes dabar žvaigždė turi pasakyti 678 00:43:05,580 --> 00:43:08,620 eiti į atminties adresą S +1. 679 00:43:08,620 --> 00:43:14,170 Kas yra? Tegul įvirsta metu ir pasakyti, dabar yra tokia rodyklė nėra iš tikrųjų daro mums jokių malonių. 680 00:43:14,170 --> 00:43:18,450 Tegul tiksliau pasakyti, kad tai saugoti numeris 123 681 00:43:18,450 --> 00:43:25,110 , nes šios eilutės pradžia hello, this is adresas 123, tai 124, ir tt. 682 00:43:25,110 --> 00:43:30,550 Taigi antrajame iteracijos, kai aš sakau S +1, tai tarsi sakydamas, 123 1, 683 00:43:30,550 --> 00:43:35,340 kitaip žinomas kaip 124, tai kas char bus atspausdintas dėl antrosios iteracijos? 684 00:43:35,340 --> 00:43:37,850 E 124 atminties adresą. 685 00:43:37,850 --> 00:43:44,440 Tada + vėl 125, 126, 127, ir šis ciklas laimei sustoja, kol mes gauti čia 686 00:43:44,440 --> 00:43:49,040 nes aš naudoju strlen įsitikinti, kad aš nesiskaito per didelis. 687 00:43:49,040 --> 00:43:50,810 Taip, kad taip pat yra. 688 00:43:50,810 --> 00:43:55,000 Vėlgi, tai yra tiesiog taip, lyg mes padarė prieš savaitę. 689 00:43:55,000 --> 00:43:59,200 Leiskite man rašyti jį ant linijos žemiau nors nenorime daryti abu. 690 00:43:59,200 --> 00:44:02,500 Tai yra identiška dabar. 691 00:44:02,500 --> 00:44:08,310 >> Taigi, nors s eilutę, kaip mes pavadino jį savaites, s tikrai char *. 692 00:44:08,310 --> 00:44:13,270 Taigi, jei norime būti super analinis, tai tikrai tinkamai rašyti specifiką 693 00:44:13,270 --> 00:44:17,490 ith vietą naudojant šias skaitines adresai ir ši žvaigždė operatorius 694 00:44:17,490 --> 00:44:20,470 bet atvirai kalbant, tai yra tik tiek daug švaresnis. Taigi, tai nėra blogai. 695 00:44:20,470 --> 00:44:26,720 Jokios priežasties nustoti daryti 27 eilutėje čia, bet 26 yra praktiškai tas pats, 696 00:44:26,720 --> 00:44:31,570 ir tai praktiškai tas pats, lygiai priežasčių, kad mes buvo aptarti iki šiol. 697 00:44:31,570 --> 00:44:33,650 Ir galiausiai, 29 yra tiesiog gera praktika. 698 00:44:33,650 --> 00:44:38,420 Skambinimas s reiškia, kad dabar jūs suteikiant atmintį, GetString davė jums 699 00:44:38,420 --> 00:44:41,630 , nes vėl, kaip jau minėjau, pirmadienis, GetString savaites 700 00:44:41,630 --> 00:44:44,180 buvo įvesti klaidą į savo kodą. 701 00:44:44,180 --> 00:44:46,490 Jūsų kodas savaites turėjo Atminties nutekėjimas 702 00:44:46,490 --> 00:44:49,970 , pagal kurią jūs jau klausia GetString atminties, bet jūs niekada nebuvo suteikiant jai atgal. 703 00:44:49,970 --> 00:44:53,410 Ir tai buvo sąmoningai pasirinko mus pedagogiškai 704 00:44:53,410 --> 00:44:55,880 nes ji tiesiog per daug galvoti apie tai iš anksto. 705 00:44:55,880 --> 00:44:57,710 Bet dabar mums reikia daugiau simetrija. 706 00:44:57,710 --> 00:45:00,830 Jei paklausite kompiuterio atminties, kaip už GetString atveju, 707 00:45:00,830 --> 00:45:02,820 kaip yra šiuo atveju, matyt, malloc, 708 00:45:02,820 --> 00:45:07,970 dabar jūs turite 4 tolyn pset taip pat nemokamai visi tokie atminties. 709 00:45:07,970 --> 00:45:11,650 Atkreipkite dėmesį, tai skiriasi nuo sakydamas, int n. 710 00:45:11,650 --> 00:45:15,040 Jums nereikia atlaisvinti, nes tu negali paskambinti GetString 711 00:45:15,040 --> 00:45:16,890 ir tu negali paskambinti malloc. 712 00:45:16,890 --> 00:45:20,610 >> Ir net, jei paragino GetInt kaip mes galų gale pamatyti, 713 00:45:20,610 --> 00:45:25,520 GetInt nepriskiria atminties jums, nes jūs iš tikrųjų galite aplenkti sveikieji skaičiai 714 00:45:25,520 --> 00:45:29,430 plūdės ir simbolių, tik taip, kaip mes buvo padaryti per kelias savaites. 715 00:45:29,430 --> 00:45:33,960 Stygos, nors yra ypatingas, nes tikrai jie kelių simbolių sąryšis. 716 00:45:33,960 --> 00:45:37,450 Taigi jie tiesiog skiriasi nuo simbolių ir plūdes ir int ir pan. 717 00:45:37,450 --> 00:45:39,980 Bet mes grįžti, kad iki kol. 718 00:45:39,980 --> 00:45:44,920 Kokių nors klausimų, tada šios rodyklės pradžioje? Taip. 719 00:45:44,920 --> 00:45:49,690 [Nesigirdi studentas klausimas] 720 00:45:49,690 --> 00:45:51,440 Ah, labai geras klausimas. 721 00:45:51,440 --> 00:45:55,790 Vienas iš nedaugelio dalykų, C iš tiesų daro už jus, kuri yra patogi, 722 00:45:55,790 --> 00:46:00,110 tai skaičiai, kokio dydžio yra duomenų tipo 723 00:46:00,110 --> 00:46:03,060 ir tada toks dauginimosi jums. 724 00:46:03,060 --> 00:46:06,610 Simbolių atveju tai nesvarbu, nes beveik visada char yra 1 baitas, 725 00:46:06,610 --> 00:46:08,150 todėl tai tiesiog veikia. 726 00:46:08,150 --> 00:46:11,220 Tačiau diskusijos dėlei, jei jūs iš tikrųjų spausdinimo sveikieji skaičiai 727 00:46:11,220 --> 00:46:15,500 ir jūs bandėte spausdinti kai vertė, kuri buvo nukreipta į sveikasis skaičius, 728 00:46:15,500 --> 00:46:20,720 panašiai nebūtų reikia padaryti + 4 * aš tiesiog nes int yra 4 baitų. 729 00:46:20,720 --> 00:46:25,780 Rodyklė aritmetinis reiškia, kad C ir sudarytojas padaryti viską, kad jums matematikos. 730 00:46:25,780 --> 00:46:29,190 Viskas, ką jums rūpi, yra rūšies žmogiškąja prasme skaičiavimas. Taip. 731 00:46:29,190 --> 00:46:35,200 [Studentas] Jei paskelbti eilutę viduje už linijos, jūs turite išlaisvinti jį vėliau? 732 00:46:35,200 --> 00:46:36,760 Geras klausimas. 733 00:46:36,760 --> 00:46:41,390 >> Jei deklaruojamas eilutės viduje už linijos, jums reikia atlaisvinti jį vėliau? 734 00:46:41,390 --> 00:46:47,520 Jums reikia tik laisvos atminties, kad jums skirti su GetString arba su malloc. 735 00:46:47,520 --> 00:46:53,110 Taigi, jei jūs tiesiog pasakyti kažką panašaus - leiskite man įdėti garbanotas petnešos dabar, todėl visi kodas yra susijusi. 736 00:46:53,110 --> 00:46:58,580 Jei jums padarė kažką, nors ir buggily, panašaus į tai, char * t = s, 737 00:46:58,580 --> 00:47:03,450 jums nereikia t nemokamai, nes t nebuvo jokios malloc ar GetString paminėti. 738 00:47:03,450 --> 00:47:08,960 Tačiau jeigu tu tai padarei, GetString, tada taip, jūs turės nemokamai t. 739 00:47:08,960 --> 00:47:14,350 Ir iš tiesų, jūsų vienintelis šansas tai padaryti dabar šio ciklo viduje, tuo pačiu klausimu taikymo sritį 740 00:47:14,350 --> 00:47:16,060 kad mes aptarėme anksčiau. 741 00:47:16,060 --> 00:47:18,830 Kitaip norite būti paskirstant atmintį, skiriant atmintį, skiriant atmintį, 742 00:47:18,830 --> 00:47:21,230 ir programos pabaigoje, todėl, kad jūs ne tos linijos, 743 00:47:21,230 --> 00:47:24,240 t nėra, bet jūs niekada sakė operacinę sistemą 744 00:47:24,240 --> 00:47:26,750 , kad jums nereikia, kad atminties nebėra. 745 00:47:26,750 --> 00:47:30,430 Ir prieš ilgas, 4 ar 5 pset mes išmokyti jus su programa, vadinama Valgrind 746 00:47:30,430 --> 00:47:34,160 kuris yra panašus dvasios GDB, kad jis gavo šiek tiek paslaptingą sąsaja, 747 00:47:34,160 --> 00:47:35,750 , tačiau jo gyvenimo tikslas yra padėti jums. 748 00:47:35,750 --> 00:47:39,380 Ir Valgrind yra programa, kad ateityje ieškoti savo programas 749 00:47:39,380 --> 00:47:42,550 ieško atminties nutekėjimas, ar iš GetString ar malloc 750 00:47:42,550 --> 00:47:47,800 mes pradėsime, tuo labiau, kaip mes sustabdyti naudojant CS50 biblioteką kiek. 751 00:47:47,800 --> 00:47:53,030 Mes pagaliau turėti žodyno rūšiuoti ir psichikos modelio teorijos Rūšiuoti pagal 752 00:47:53,030 --> 00:47:55,170 su kuriuo būtų galima išspręsti šią skaldytų programą. 753 00:47:55,170 --> 00:47:59,410 >> Taigi, šio skaldytų programos, apsikeitimo viduje apsikeitimo sandorio, 754 00:47:59,410 --> 00:48:05,280 bet ji niekada faktiškai dirbtų pagrindinis, nes pagrindinis vyko X ir Y priminti, 755 00:48:05,280 --> 00:48:07,260 ir tie, buvo priimtas vertybėmis, taip sakant. 756 00:48:07,260 --> 00:48:09,330 Jų kopijos buvo sukeisti. 757 00:48:09,330 --> 00:48:12,520 Apsikeitimo sandorio pabaigoje, a ir b punktai iš tiesų buvo keičiamasi, 758 00:48:12,520 --> 00:48:16,120 x ir y, kaip aptarėme pirmadienį, tačiau, žinoma, nebuvo. 759 00:48:16,120 --> 00:48:19,940 Taigi siūlau žalias čia, kad iš tikrųjų tai yra sprendimas. 760 00:48:19,940 --> 00:48:22,640 Ir iš tikrųjų, leiskite man perkelti savo žvaigždės tiesiog turi būti suderinti 761 00:48:22,640 --> 00:48:24,440 dar kartą, nors funkciškai tai nesvarbu. 762 00:48:24,440 --> 00:48:28,730 Ateityje savaites mes paaiškinti, kada ir kodėl tai yra svarbu. 763 00:48:28,730 --> 00:48:30,600 Taigi, žalia spalva dabar yra sprendimas. 764 00:48:30,600 --> 00:48:33,700 Atvirai kalbant, tai atrodo visai daug Mesjė, nes turiu visus šių žvaigždžių. 765 00:48:33,700 --> 00:48:35,380 Leiskite man atkreipti dėmesį į vieną dalyką. 766 00:48:35,380 --> 00:48:40,040 Viršutinėje eilutėje čia, kur ji sako, int * ir int * b 767 00:48:40,040 --> 00:48:42,820 yra iš esmės daro tą patį, kaip visada. 768 00:48:42,820 --> 00:48:47,070 Jis yra skelbiantis 2 argumentų ar parametrai sukeisti, 769 00:48:47,070 --> 00:48:49,940 iš kurių pirmasis yra int rodyklė vadinama, 770 00:48:49,940 --> 00:48:53,100 antruoju yra int rodyklė, pavadintą "B. 771 00:48:53,100 --> 00:48:55,770 Vienintelis dalykas, kad naujo šiuo metu yra tai, kad yra žvaigždė. 772 00:48:55,770 --> 00:48:59,340 >> Ką tai reiškia? Nėra int b ne int. 773 00:48:59,340 --> 00:49:04,100 Yra int adresas ir b yra kitu int adresas. 774 00:49:04,100 --> 00:49:06,980 Žemyn čia, tai ten, kur aš pripažinti, C gauna painu. 775 00:49:06,980 --> 00:49:09,790 Dabar mes naudojant žvaigždę, bet ji turi kitokią prasmę šiame kontekste. 776 00:49:09,790 --> 00:49:13,150 Nes mes nėra skelbiama patarimų, nes mes esame čia, 777 00:49:13,150 --> 00:49:15,500 čia mes dereferencing dalykų. 778 00:49:15,500 --> 00:49:21,520 Taigi techniškai šiame kontekste pirmojo, antrojo ir trečiojo linija viduje apsikeitimo žvaigždė 779 00:49:21,520 --> 00:49:24,560 yra dereference operatorius, kuris tiesiog reiškia, kad ten eiti. 780 00:49:24,560 --> 00:49:27,400 Taigi tiesiog kaip mano pirštas po rodyklę, jei norite h, 781 00:49:27,400 --> 00:49:31,100 * Reiškia eiti tuo adresu ir rasti man int, kad ten. 782 00:49:31,100 --> 00:49:34,250 * B reiškia eiti į adresą ir perduoti man, kas ten. 783 00:49:34,250 --> 00:49:40,730 Taigi leiskite vėl įtraukti paveikslėlį pirmadienis dabar naudoja krūvą kadrų, 784 00:49:40,730 --> 00:49:43,130 apačioje iš kurių vienas bus pagrindinis, 785 00:49:43,130 --> 00:49:47,600 viršutinė iš kurių vienas bus apsikeitimo, 786 00:49:47,600 --> 00:49:50,880 taip, kad mūsų pasaulis atrodo, kaip ir pirmadienį, kaip šis. 787 00:49:50,880 --> 00:49:53,620 Čia yra atminties riekė, kad pagrindinis ketinate naudoti. 788 00:49:53,620 --> 00:49:56,520 >> Prisiminkite, nuo pirmadienio, kad programa tik 2 kintamuosius, 789 00:49:56,520 --> 00:50:01,930 vienas vadinamas X ir vienas vadinamas y, ir aš įdėti skaičiais 1 ir 2 ten. 790 00:50:01,930 --> 00:50:06,580 Dabar, kai aš skambinti apsikeitimo kaip aš pirmadienį, 791 00:50:06,580 --> 00:50:11,000 anksčiau, kai aš raudoną versiją šios programos, kurios atrodo taip, 792 00:50:11,000 --> 00:50:17,470 Aš turiu 2 parametrus a ir b, ir ką mes rašome čia ir čia? 793 00:50:17,470 --> 00:50:21,160 Tik 1 ir 2, tiesiog kopijuoja x ir y. 794 00:50:21,160 --> 00:50:23,070 Šiandien mes turime tai pakeisti. 795 00:50:23,070 --> 00:50:28,510 Šiandien vietoj einančios į int a ir b mes ketiname pereiti per 2 adresus. 796 00:50:28,510 --> 00:50:34,290 Šie adresai atsitikti taip, kad rodytų į int, tačiau šie adresai yra ne int. 797 00:50:34,290 --> 00:50:37,330 Jie yra adresai. Tai tarsi pašto adresą vietoj. 798 00:50:37,330 --> 00:50:40,580 Taigi, dabar mes turime tiesiog suteikti sau šiek tiek daugiau informacijos apie ekrano. 799 00:50:40,580 --> 00:50:43,250 Tai mano kompiuterio atminties, kaip jis buvo visą dieną. 800 00:50:43,250 --> 00:50:45,120 Dabar mums reikia šiek tiek savavališkas numeravimo schemą. 801 00:50:45,120 --> 00:50:50,580 Taigi, tegul tiesiog pasakyti, tiesiog atsitiktinai, kad tai yra atminties adresas 123, 124. 802 00:50:50,580 --> 00:50:55,660 Tegul tiesiog pasakyti, tai yra 125, tai 126, ir tt, bet tai visiškai savavališkai. 803 00:50:55,660 --> 00:50:58,590 Mes tiesiog reikia šiek tiek numeravimo schemą mano atmintyje. 804 00:50:58,590 --> 00:51:04,030 Kad dabar, kai aš iš tikrųjų pereina x ir y, aš nesiruošia važiuoti, x ir y; 805 00:51:04,030 --> 00:51:08,400 Aš ruošiuosi perduoti pašto adresą, taip sakant, x ir y 806 00:51:08,400 --> 00:51:11,870 kad čia ir čia pasireiškia saugomi ne 1 ir 2, 807 00:51:11,870 --> 00:51:16,030 bet jei jūs galite matyti mano mažas tekstas, kas bus priimtas čia ir čia? 808 00:51:16,030 --> 00:51:23,340 [Nesigirdi studentas atsakas] >> Taip. 123 bus įdėti čia ir 124 bus įdėti čia. 809 00:51:23,340 --> 00:51:28,910 >> Dabar, nes aš naudojamas žvaigždė šiame pirmajame linijos kelią iki čia viršuje, 810 00:51:28,910 --> 00:51:34,340 mano programa, tiesiog žino, kad 123 ir 124, nors jie akivaizdžiai sveikieji skaičiai 811 00:51:34,340 --> 00:51:40,160 , kad bet koks žmogus gali pastebėti, jie turėtų būti aiškinama, adresai, skaitmeniniai adresai. 812 00:51:40,160 --> 00:51:43,250 Jie nėra ir patys int, jie adresai, 813 00:51:43,250 --> 00:51:46,120 ir kad todėl, kad aš aiškiai įdėti į žvaigždes. 814 00:51:46,120 --> 00:51:51,360 Taigi dabar mano pirmojo, antrojo ir trečiojo linija, tai kodas, kas atsitinka, čia? 815 00:51:51,360 --> 00:51:53,380 Leiskite atkreipti paveikslėlio poilsio. 816 00:51:53,380 --> 00:51:56,980 TVP yra tik, kaip jis buvo pirmadienį. Nieko ypatingo apie tmp. 817 00:51:56,980 --> 00:52:03,060 Jis yra vos vietos 32 bitų kintamasis, ir viduje, kad aš, matyt, laikyti * vertę. 818 00:52:03,060 --> 00:52:08,580 Dabar, jei aš ką tik pasakė tmp =, kas galėtų jį sudėjau? >> [Studentas] 123. 819 00:52:08,580 --> 00:52:10,370 123. Bet tai ne tai, ką aš darau. 820 00:52:10,370 --> 00:52:13,670 Aš sakau tmp = *. Žvaigždučių reiškia ten. 821 00:52:13,670 --> 00:52:19,370 Taigi čia yra, 123. Kaip aš galiu eiti? Apsimesti, kaip rodyklė. 822 00:52:19,370 --> 00:52:24,460 Na, tai yra, 1. Taigi, ką gauna saugomi tmp matyt? Tik 1. 823 00:52:24,460 --> 00:52:29,620 Taigi, kitaip tariant, tmp * a * priemonė nurodytu adresu, kad šiuo metu, 824 00:52:29,620 --> 00:52:31,320 , kuri, matyt, 123. 825 00:52:31,320 --> 00:52:33,910 >> Gerai, čia yra 123 vietoje, matau skaičių 1, 826 00:52:33,910 --> 00:52:35,670 todėl aš įdėti skaitmeniu "1". 827 00:52:35,670 --> 00:52:39,020 Dabar ką man daryti 2 eilutėje, * = * b? 828 00:52:39,020 --> 00:52:44,570 Tai viena yra šiek tiek daugiau dalyvauja, nes dabar, kas yra? Tai 123. 829 00:52:44,570 --> 00:52:50,220 Taigi * yra kur? Ten, kur aš anksčiau. Taigi eikite ten. Gerai. 830 00:52:50,220 --> 00:52:53,420 Dabar, galiausiai, ir galiausiai tai bus pradėti prasmės, tikiuosi, 831 00:52:53,420 --> 00:53:00,280 * B tai, kas b? 124. Taigi man reikia eiti ten, kuris yra 2. 832 00:53:00,280 --> 00:53:03,430 Taigi, ką aš įdėti, kur? 833 00:53:03,430 --> 00:53:10,100 2 eina į čia,, nes * b eina į *. Taigi aš tai padaryti. 834 00:53:10,100 --> 00:53:13,120 Ir jau galite pamatyti, gal, kad mes tiek daug arčiau 835 00:53:13,120 --> 00:53:17,710 sprendžiant šį kvailas, paprasta problema teisingai pirmą kartą 836 00:53:17,710 --> 00:53:20,920 nes dabar mes vis dar turime X atsiminimai, 837 00:53:20,920 --> 00:53:23,230 mes turime 2 kopijas, tiesa, y, 838 00:53:23,230 --> 00:53:25,850 bet 3 eilutė, dabar sako, * b. 839 00:53:25,850 --> 00:53:31,080 Taigi čia b. * B reiškia eiti ten. Taigi, kur yra vieta 124? 840 00:53:31,080 --> 00:53:35,560 Tai matyt čia. Taigi, ką aš galiu įdėti čia? Akivaizdu, kad tmp. 841 00:53:35,560 --> 00:53:39,600 Taigi, dabar aš tai padaryti. Taigi, aš turiu čia 1 ir 2 čia. 842 00:53:39,600 --> 00:53:43,560 Ir dabar, ką apie visa tai, 123, 124, ir 1? 843 00:53:43,560 --> 00:53:47,910 Kuo greičiau apsikeitimo grįžta, ši atmintis yra taip gerai, kaip prarado 844 00:53:47,910 --> 00:53:51,070 nes kuo greičiau apsikeitimo grąža, operacinė sistema 845 00:53:51,070 --> 00:53:54,190 yra laisvai naudoti, kad atmintis vėl ateityje. 846 00:53:54,190 --> 00:53:58,870 Tik pagrindinės atminties šitą vadinamąjį kamino apačioje lazdelės aplink. 847 00:53:58,870 --> 00:54:01,470 >> Ir taip mes pagaliau dabar darbinė versija. 848 00:54:01,470 --> 00:54:06,310 Leiskite man eiti į swap.c, ir pastebite tokius dalykus. 849 00:54:06,310 --> 00:54:11,280 Tuo programos viršuje Aš pasikeitė mano prototipas int * ir int * b. 850 00:54:11,280 --> 00:54:15,000 Taigi vienintelis dalykas, aš pakeičiau į eiti, kuris buvo blogai, nuo raudonos į žalią, kuris yra geras, 851 00:54:15,000 --> 00:54:17,350 Aš pridėjo šias žvaigždes šiandien. 852 00:54:17,350 --> 00:54:21,520 Bet tada žemyn čia apsikeitimo save aš turėjau kopijuoti, įklijuoti, kas buvo tik ant skaidrės. 853 00:54:21,520 --> 00:54:24,140 Turiu žvaigždė čia, žvaigždė čia - kuris atitinka prototipą 854 00:54:24,140 --> 00:54:27,930 ir tada visi iš šių dalykų dabar žvaigždės išskyrus tmp 855 00:54:27,930 --> 00:54:30,680 nes laikino kintamojo naudojimas, nieko naujo ten. 856 00:54:30,680 --> 00:54:33,040 Aš tiesiog reikia laikinąjį saugojimą int. 857 00:54:33,040 --> 00:54:34,820 Taigi, mes nereikia žvaigždę. 858 00:54:34,820 --> 00:54:39,310 Mes tiesiog reikia žvaigždutę, taip, kad mes galime kirsti tokio savavališko ribų 859 00:54:39,310 --> 00:54:42,900 tarp šių 2 kadrų mano kompiuterio atmintyje. 860 00:54:42,900 --> 00:54:45,630 Tačiau paskutinis dalykas yra pakeisti, ir jums gali tekti prabėgomis tai jau. 861 00:54:45,630 --> 00:54:48,810 Kas kita linija yra akivaizdžiai skiriasi dabar? >> [Studentas] ir x. 862 00:54:48,810 --> 00:54:53,270 >> Taip, kad 25 yra paskutinė eilutė kodo Man reikia pakeisti, kad tai veiktų. 863 00:54:53,270 --> 00:54:58,360 Prieš savaitę ir net pirmadienį linija 25 atrodė taip, apsikeitimo X ir Y 864 00:54:58,360 --> 00:55:02,020 ir tai buvo tiesiog neveikia, nes jei pasakysi apsikeitimo (x, y) 865 00:55:02,020 --> 00:55:05,660 duodate Sukeisti x ir y kopijas, tada jis daro savo dalyką, 866 00:55:05,660 --> 00:55:09,080 , bet jūs niekada iš tikrųjų keičiasi x ir y pati. 867 00:55:09,080 --> 00:55:12,880 Taigi, net jei jūs niekada matė šį simbolį prieš kodą ampersend 868 00:55:12,880 --> 00:55:15,860 tiesiog atspėti. Ką Ampersand padaryti, matyt? 869 00:55:15,860 --> 00:55:17,890 [Studentas] mano adresą. >> Mano adresą. 870 00:55:17,890 --> 00:55:21,160 Taigi Ampersand sako duok man x adresą. 871 00:55:21,160 --> 00:55:25,590 Kas žino, kur ji yra? Taip atsitinka, turi būti 123. Man tai nerūpi. Tik duok man x adresą. 872 00:55:25,590 --> 00:55:28,340 & Y reiškia, kad duoti man y adresą. 873 00:55:28,340 --> 00:55:34,450 Ir tuo momentu, istorija yra puikiai suderinamas su nuotrauka atkreipė metu senumo. 874 00:55:34,450 --> 00:55:38,310 >> Taigi, aš pripažinti, patarimų, tikrai už mane, kai aš pirmą kartą pradėjo mokytis tai, 875 00:55:38,310 --> 00:55:40,570 buvo tikrai vienas iš sudėtingiausių dalykų, wrap savo mintis aplink. 876 00:55:40,570 --> 00:55:43,760 Bet suprantame, ypač, nes mes nuolat žaisti su šių rūšių dalykų, 877 00:55:43,760 --> 00:55:48,030 jei jūs ją padalyti šių super paprasta rūšies intelektualiai neįdomu problemas 878 00:55:48,030 --> 00:55:52,270 tiesiog perkelti numerius aplink, atsakymą į daug painiavos su rodyklės 879 00:55:52,270 --> 00:55:56,590 tikrai galima gauti iš šių pagrindinių mechanikos. 880 00:55:56,590 --> 00:55:59,070 Štai adresas. Eiti su žvaigždutėmis. 881 00:55:59,070 --> 00:56:03,830 Arba atvirkščiai, čia ampersendo. Išsiaiškinti, ką adresas iš tiesų yra. 882 00:56:03,830 --> 00:56:06,270 Gerai. 883 00:56:06,270 --> 00:56:09,000 Taigi, jeigu yra visos šios atminties iš? 884 00:56:09,000 --> 00:56:12,360 Mes atkreipė šį paveiksliuką porą kartų, ir aš nuolat perspektyvus, mes grįžti į ją, 885 00:56:12,360 --> 00:56:14,920 bet čia yra kompiuterio atmintyje atstovavimas 886 00:56:14,920 --> 00:56:17,420 , kad šiek tiek daugiau ženklinami nei mūsų lentos, čia yra. 887 00:56:17,420 --> 00:56:21,590 Teksto segmento viršuje parodo, ką su savo programą? 888 00:56:21,590 --> 00:56:26,090 [Nesigirdi studentas atsakas] >> Atsiprašome? Pakartosiu dar kartą. 889 00:56:26,090 --> 00:56:28,660 [Studentas] Tikrasis programa. >> Faktinis programa. 890 00:56:28,660 --> 00:56:32,430 >> Taigi 0s ir 1s, kad jūs turite surinkti po raštu C kodą, o paskui Apsukite metalinis garsas 891 00:56:32,430 --> 00:56:35,910 ir 0s ir 1s baigiasi gauti sukišti į atmintį 892 00:56:35,910 --> 00:56:38,570 nes, kai jūs dukart spustelėkite piktogramą jūsų Mac arba PC 893 00:56:38,570 --> 00:56:43,010 arba paleisti komandą kaip Mario jūsų greitai, jūsų 0s ir 1s iš disko 894 00:56:43,010 --> 00:56:45,700 gauti pakrautas į atmintį taip, kad kompiuteris gali jais manipuliuoti 895 00:56:45,700 --> 00:56:47,540 ir vykdyti juos greičiau. 896 00:56:47,540 --> 00:56:50,880 Taigi inicializuoti duomenų ir niezainicjowanymi duomenų, mes ne kalbėti daug apie tuos, 897 00:56:50,880 --> 00:56:52,420 bet tie, kurie tik visuotiniai kintamieji. 898 00:56:52,420 --> 00:56:54,710 Inicializuoti - globalių kintamųjų, kad jums davė vertybes; 899 00:56:54,710 --> 00:56:59,300 niezainicjowanymi - globalių kintamųjų, kad tu negali dar duoti vertybes. 900 00:56:59,300 --> 00:57:01,900 Tada yra šios aplinkos kintamieji, kuriuos aš visiškai WAVE savo jėgas, 901 00:57:01,900 --> 00:57:04,860 bet jie ten ir kad parduotuvėse dalykų, pavyzdžiui, savo vartotojo vardą 902 00:57:04,860 --> 00:57:08,090 ir kitos rūšies žemesnio lygio informacijos. 903 00:57:08,090 --> 00:57:12,880 Bet juiciest vienetų savo atminties išdėstymo yra šis dalykas, vadinamas kamino ir krūvos. 904 00:57:12,880 --> 00:57:17,470 Kamino vėl, viskas būtų aišku, yra atminties, kuri naudojama, kai yra vadinamas funkcijos, 905 00:57:17,470 --> 00:57:19,710 kai yra vietos kintamieji 906 00:57:19,710 --> 00:57:22,120 ir kai yra parametrai apdalytas. 907 00:57:22,120 --> 00:57:24,490 Visa tai vyksta ant klojinio. 908 00:57:24,490 --> 00:57:29,570 Krūvos mes ne kalbėjo apie tai, bet atspėti, kuris naudoja krūvą. 909 00:57:31,120 --> 00:57:32,690 Tiesiog skiriasi riekė atminties. 910 00:57:32,690 --> 00:57:36,620 Taip atsitinka, turi būti sudarytas čia, viršuje, bet tai savavališkai vaizdinę konvencija. 911 00:57:36,620 --> 00:57:41,670 Kas, matyt, buvo naudojant atminties iš krūvos savaites? 912 00:57:41,670 --> 00:57:44,830 Tai techniškai jums, bet netiesiogiai. >> [Studentas] GetString. 913 00:57:44,830 --> 00:57:47,950 GetString ir malloc. Taigi čia yra esminis skirtumas. 914 00:57:47,950 --> 00:57:51,300 >> Jūs žinote, per pastaruosius keletą savaičių, kad jei jums reikia atminties, tiesiog paskelbti kintamąjį. 915 00:57:51,300 --> 00:57:54,560 Jei jums reikia daug atminties, paskelbti masyvą, tiesiai iš savo funkciją. 916 00:57:54,560 --> 00:57:59,620 Bet mes nuolat susiduria su problema yra, jei jūs deklaruoti kintamuosius vietoje viduje funkcijų, 917 00:57:59,620 --> 00:58:05,340 kuo greičiau funkcija grąžina, kas atsitiks su atminties ir šių kintamųjų? 918 00:58:05,340 --> 00:58:09,620 Tiesiog tarsi nebėra tavo, tiesa? Jis tiesiog dingsta tarsi konceptualiai. 919 00:58:09,620 --> 00:58:13,950 Jis vis dar fiziškai yra, be abejo, bet tai nebėra jūsų teisė naudotis. 920 00:58:13,950 --> 00:58:17,160 Tai, žinoma, sudėtinga, jei norite rašyti gyvenimo funkcijas 921 00:58:17,160 --> 00:58:20,440 kad iš tikrųjų paskirstyti atmintį ir nepasiduokite jį grąžinti nedelsiant. 922 00:58:20,440 --> 00:58:24,180 Byla punktas: GetString gyvenimo tikslas, neturi iš anksto idėja 923 00:58:24,180 --> 00:58:26,390 kaip didelis aš norėčiau įveskite klaviatūros eilutę, 924 00:58:26,390 --> 00:58:30,390 bet jis gavo, kad būtų galima paskirstyti atmintį turėti Dovydą arba Hello 925 00:58:30,390 --> 00:58:32,860 arba visą esė, kurią vartotojas galėtų įvedėte. 926 00:58:32,860 --> 00:58:35,280 Taigi buvo naudojant malloc GetString. 927 00:58:35,280 --> 00:58:38,910 Malloc todėl turi būti ne kamino; 928 00:58:38,910 --> 00:58:40,770 vietoj to naudoti šį dalyką, vadinamą krūvos. 929 00:58:40,770 --> 00:58:44,430 Nėra nieko skiriasi apie atminties. Tai ne greičiau arba lėčiau ar ko nors panašaus. 930 00:58:44,430 --> 00:58:46,570 Tai tiesiog fiziškai kitoje vietoje. 931 00:58:46,570 --> 00:58:50,120 >> Tačiau ši taisyklė yra, kad krūvos atminties, kuri skirta 932 00:58:50,120 --> 00:58:56,180 niekada nebus atimta iš jūsų, kol jūs vadinate - spėti - nemokamai. 933 00:58:56,180 --> 00:59:00,510 Priešingai, bet koks atminties jūs paprašykite kamino tiesiog deklaruojant masyvą 934 00:59:00,510 --> 00:59:03,320 arba paskelbiama, kintamąjį, kaip mes buvo padaryti per kelias savaites, 935 00:59:03,320 --> 00:59:05,640 kad pagal nutylėjimą baigiasi kamino. 936 00:59:05,640 --> 00:59:09,550 Ir kad puikiai veikia 90% laiko, bet tų retesnių kartų 937 00:59:09,550 --> 00:59:12,470 ten, kur norite paskirstyti atmintį ir laikyti jį aplink, 938 00:59:12,470 --> 00:59:14,730 tada jums reikia naudoti kaip malloc funkciją. 939 00:59:14,730 --> 00:59:19,370 Ar mes turime naudoti funkciją kaip GetString, o tai savo ruožtu naudoja malloc. 940 00:59:19,370 --> 00:59:23,300 Pažiūrėkime, tais atvejais, kai tai gali sugriauti ir tada už Binky žvilgtelėti. 941 00:59:23,300 --> 00:59:25,820 Sugrįšiu, kad ateityje. 942 00:59:25,820 --> 00:59:29,270 Čia yra super paprasta programa, kuri per pirmuosius 2 eilučių ką daro? 943 00:59:29,270 --> 00:59:33,460 Anglų kalba, ką šie pirmieji 2 eilučių kodo padaryti viduje pagrindinis? 944 00:59:33,460 --> 00:59:35,600 [Nesigirdi studentas atsakas] 945 00:59:35,600 --> 00:59:37,880 Atsargūs. Jis nesuteikia man X arba Y adresą. 946 00:59:37,880 --> 00:59:41,840 [Studentas] Duoda patarimų int. >> Gerai. Duok man 2 rodykles iki sveikųjų skaičių. 947 00:59:41,840 --> 00:59:45,130 Kitaip tariant, duok man 2 gabaliukus atminties, kad aš nuolat brėžinys šiandien 948 00:59:45,130 --> 00:59:46,950 nors aš ištrinami, tai dabar, kvadratų. 949 00:59:46,950 --> 00:59:50,000 Duok man 2 gabaliukus atminties, vienas vadinamas x, vienas vadinamas Y - 950 00:59:50,000 --> 00:59:54,320 anksčiau aš ragino juos s ir t - ir kas yra tos atminties riekė tipas? 951 00:59:54,320 --> 00:59:57,160 Ji ketina saugoti adresą. 952 00:59:57,160 --> 00:59:59,110 Tai tipo int *. 953 00:59:59,110 --> 01:00:01,630 >> Taigi int adresas galų gale gyventi x, 954 01:00:01,630 --> 01:00:03,860 int adresas galų gale gyventi y, 955 01:00:03,860 --> 01:00:08,460 bet iš pradžių, kas viduje X ir Y? Kas žino? Šiukšlių vertybės. 956 01:00:08,460 --> 01:00:10,180 Tai neturi nieko daryti su rodykles. 957 01:00:10,180 --> 01:00:12,720 Jei mes ne įdėti ką nors ten, kurie žino, kas iš tikrųjų yra? 958 01:00:12,720 --> 01:00:18,950 Dabar, x. Kas vyksta čia? Tai yra teisėtas dabar nes x yra rodyklė. Tai int *. 959 01:00:18,950 --> 01:00:21,870 Taigi, tai reiškia, kad aš galiu įdėti trigubas kai atminties riekė adresą. 960 01:00:21,870 --> 01:00:25,120 Ką malloc grįžti? Tobula, bet ji grąžina adresus, 961 01:00:25,120 --> 01:00:28,510 pirmojo baito visą riekė atminties adresas. 962 01:00:28,510 --> 01:00:31,140 Kiek baitų tai, matyt, skyrimą, pavyzdžiui, į prietaisą? 963 01:00:31,140 --> 01:00:33,510 Kas yra int dydis? 4. 964 01:00:33,510 --> 01:00:36,600 Jei manote, kad atgal 1 savaitę, tai nėra itin svarbu visada prisiminti, kad, 965 01:00:36,600 --> 01:00:38,870 tačiau šiuo atveju tai naudinga žinoti, 4 baitai. 966 01:00:38,870 --> 01:00:41,770 Todėl tai skiriant krūvos 4 baitų 967 01:00:41,770 --> 01:00:46,110 ir jis grąžina pirmąjį adresą man savavališkai. 968 01:00:46,110 --> 01:00:47,700 Dabar, kas yra x darai? 969 01:00:47,700 --> 01:00:52,200 * X = 42 ką daro? 970 01:00:52,200 --> 01:00:57,150 Jeigu Šiuo istorija X, kuris atrodo taip, su kai kurių šiukšlių vertės, 971 01:00:57,150 --> 01:01:04,120 tai dabar y su kai kurių šiukšlių vertės, dabar 3 eilutę aš skiriama 4 baitai. 972 01:01:04,120 --> 01:01:06,950 Šį paveiksliuką iš esmės atrodo taip. 973 01:01:06,950 --> 01:01:12,010 Arba, tiksliau, jei tai yra savavališkas adresas 123, tai yra tai, kas dabar atrodo, mūsų istorija. 974 01:01:12,010 --> 01:01:23,940 * X = 42 dabar reiškia ką? Tai reiškia, kad eiti į adresų 123 ir įdėti, kurios numeris 42 ten. 975 01:01:23,940 --> 01:01:26,220 Man nereikia daryti šias eilutes, nes mes ne daro eilutes. 976 01:01:26,220 --> 01:01:29,480 >> Aš turėjo tik parašyta tai, kaip šis, ir tik demonstravimo labui, 977 01:01:29,480 --> 01:01:33,240 42 kaip int rūšies užima daug vietos, 4 baitai. 978 01:01:33,240 --> 01:01:35,960 Taigi, kad tai, kas nutiko ten, bet dabar yra problema. 979 01:01:35,960 --> 01:01:40,580 * Y = 13. Kas nutiks? 980 01:01:40,580 --> 01:01:46,470 Problema yra * y mūsų supaprastinta pasaulyje tiesiog reiškia eiti į Y adresą. 981 01:01:46,470 --> 01:01:48,590 Kas y? Tai kai šiukšlių vertė. 982 01:01:48,590 --> 01:01:53,150 Taigi, galime daryti prielaidą, kad, kad šiukšlės vertė yra 5551212, kažkas crazy, kaip kad. 983 01:01:53,150 --> 01:01:56,750 * Y reiškia eiti spręsti 5.551.212. 984 01:01:56,750 --> 01:02:00,450 Tai kaip čia. Jis neegzistuoja, pavyzdžiui. 985 01:02:00,450 --> 01:02:05,310 Taigi * y gauna 13 reiškia, kad aš bando atkreipti 13 čia. Ji neegzistuoja. 986 01:02:05,310 --> 01:02:08,790 Aš viršijo lentos segmentą. Ką aš gausiu? 987 01:02:08,790 --> 01:02:14,930 Kad paslaptingas pranešimą segmentavimo kaltės, nes aš bandau įdėti atminties 988 01:02:14,930 --> 01:02:19,470 kaip 13 toje pačioje vietoje, kuris neegzistuoja. 989 01:02:19,470 --> 01:02:23,900 Kitos programos gali dirbti gerai, tačiau iki kol šiuo klausimu nėra. 990 01:02:23,900 --> 01:02:25,350 Taigi pabandykime papasakoti šią istoriją. 991 01:02:25,350 --> 01:02:27,830 Mes grįžti į, kad, kai mes kalbėjome apie šešioliktainį. 992 01:02:27,830 --> 01:02:30,290 Grįžkime ir sudaryti su šiuo dalykas vadinamas Binky, 993 01:02:30,290 --> 01:02:33,710 išėmimas iš apyvartos yra Stanfordo profesorius sėdi namie žaisti su Claymation, 994 01:02:33,710 --> 01:02:36,380 papasakoti istoriją lygiai tos pačios programos. 995 01:02:36,380 --> 01:02:40,580 Tai tiesiog apie 3 minučių ilgio. Čia mes turime Binky. 996 01:02:40,580 --> 01:02:45,030 [Vyriška garsiakalbis video] Ei Binky, pabusti. Atėjo laikas rodykliniams įdomus. 997 01:02:45,030 --> 01:02:50,080 [Binky] Kas tai? Sužinokite daugiau apie rodykles? Oh, geruolis! 998 01:02:50,080 --> 01:02:53,700 [Vyriška garsiakalbis] Na, pradėti, aš manau, mes ketiname reikia keletą patarimų. 999 01:02:53,700 --> 01:02:57,890 >> [Binky] Gerai. Šis kodas skiria 2 patarimų, kurie gali nurodyti sveikaisiais skaičiais. 1000 01:02:57,890 --> 01:03:02,220 [Vyriška garsiakalbis] Gerai. Na, aš žr. 2 patarimų, bet jie neatrodo, kad būti nukreipta į ką nors. 1001 01:03:02,220 --> 01:03:05,550 [Binky] Tai tiesa. Iš pradžių, rodyklės nesudaro nieko. 1002 01:03:05,550 --> 01:03:09,270 Jie atkreipia dėmesį į tai, ką yra vadinami Pointees ir nustatyti juos, yra atskiras žingsnis. 1003 01:03:09,270 --> 01:03:12,330 [Vyriška garsiakalbis] O, teisė, teisė. Aš tai žinojau. Atskiras Pointees yra. 1004 01:03:12,330 --> 01:03:15,630 Er, taip, kaip jūs skirti pointee? 1005 01:03:15,630 --> 01:03:21,510 [Binky] Gerai. Šis kodas skiria naują sveikasis skaičius pointee, ir ši dalis nustato x atkreipti į jį. 1006 01:03:21,510 --> 01:03:23,500 [Vyriška garsiakalbis] Ei, atrodo geriau. 1007 01:03:23,500 --> 01:03:26,030 Todėl, kad jis kažką daryti. >> [Binky] Gerai. 1008 01:03:26,030 --> 01:03:30,300 Aš dereference žymiklį x įrašykite šį numerį iš 42 į savo pointee. 1009 01:03:30,300 --> 01:03:34,410 Už šį triuką man reikės savo stebuklinga lazdele dereferencing. 1010 01:03:34,410 --> 01:03:38,610 [Vyriška garsiakalbis] Jūsų stebuklinga lazdele dereferencing? Tai puiku. 1011 01:03:38,610 --> 01:03:44,230 [Binky] Tai ką kodas išvaizda. Aš tiesiog sukurti skaičių ir ... [Pokštelėjimas] 1012 01:03:44,230 --> 01:03:46,100 [Vyriška garsiakalbis] Ei atrodo, kad jis eina. 1013 01:03:46,100 --> 01:03:50,990 Taip daro dereference x, taip rodyklę ir atidarykite savo pointee 1014 01:03:50,990 --> 01:03:53,230 šiuo atveju laikyti 42 ten. 1015 01:03:53,230 --> 01:03:57,630 Ei, pabandykite naudojant jį įrašykite šį numerį iš 13 per kitą rodyklė, y. 1016 01:03:57,630 --> 01:04:03,250 [Binky] Gerai. Aš tiesiog eiti per y ir gauti skaičius 13 1017 01:04:03,250 --> 01:04:08,360 ir lazdelę dereferencing ir tik tada imtis ... [Šurmuliuos garsas] Oho! 1018 01:04:08,360 --> 01:04:10,980 [Vyriška garsiakalbis] Oh hey, tai nepadėjo. 1019 01:04:10,980 --> 01:04:14,870 >> Pasakykite, Binky, aš nemanau, kad dereferencing y gera idėja 1020 01:04:14,870 --> 01:04:17,880 ,, nes įsteigti pointee atskiras žingsnis 1021 01:04:17,880 --> 01:04:19,850 ir aš nemanau, kad mes kada nors padarė. 1022 01:04:19,850 --> 01:04:21,770 [Binky] Hmm, gera vieta. 1023 01:04:21,770 --> 01:04:26,640 [Vyriška garsiakalbis] Taip. Skyrėme žymiklį y bet mes niekada atkreipti į pointee. 1024 01:04:26,640 --> 01:04:28,780 [Binky] Hmm, labai pastabus. 1025 01:04:28,780 --> 01:04:30,690 [Vyriška garsiakalbis] Ei, jūs ieškote gero ten, Binky. 1026 01:04:30,690 --> 01:04:34,160 Galite nustatyti jį taip, kad y atkreipia dėmesį į tą patį pointee kaip X? >> [Binky] Žinoma. 1027 01:04:34,160 --> 01:04:37,100 Aš naudoti savo stebuklinga lazdele Marker perleidimo. 1028 01:04:37,100 --> 01:04:39,070 [Vyriška garsiakalbis] Ar tai bus problema, kaip ir anksčiau? 1029 01:04:39,070 --> 01:04:40,840 [Binky] Ne, tai neliečia Pointees. 1030 01:04:40,840 --> 01:04:44,780 Jis tiesiog keičia vieną žymiklį, kad rodytų į tą patį, kaip ir kitas. [Pokštelėjimas] 1031 01:04:44,780 --> 01:04:48,570 [Vyriška garsiakalbis] Oi, aš matau. Dabar y atkreipia dėmesį į tą pačią vietą kaip x. 1032 01:04:48,570 --> 01:04:51,140 Todėl laukti. Dabar y yra fiksuotas. Ji turi pointee. 1033 01:04:51,140 --> 01:04:54,520 Taigi, galite pabandyti vėl dereferencing siųsti 13 per lazdelę. 1034 01:04:54,520 --> 01:04:58,130 [Binky] Uh, gerai. Čia eina. [Pokštelėjimas] 1035 01:04:58,130 --> 01:05:01,250 [Vyriška garsiakalbis] Ei, pažiūrėkit. Dabar dereferencing darbus y. 1036 01:05:01,250 --> 01:05:05,200 Ir,, nes rodykles dalinasi, kad vienas pointee, jie abu pamatyti 13. 1037 01:05:05,200 --> 01:05:06,910 [Binky] Taip, dalijimasis. Koks skirtumas. 1038 01:05:06,910 --> 01:05:08,880 >> Taigi, mes ketiname pereiti vietas dabar? 1039 01:05:08,880 --> 01:05:11,420 [Vyriška garsiakalbis] O atrodo, mes pavėluotai. >> [Binky] Bet - 1040 01:05:11,420 --> 01:05:13,880 [Vyriška garsiakalbis] Tiesiog neužmirškite, 3 rodyklę taisykles. 1041 01:05:13,880 --> 01:05:18,630 Numeris 1, pagrindinės struktūros, kad jūs turite rodyklę ir pasuksite jį į pointee. 1042 01:05:18,630 --> 01:05:23,120 Bet rodyklė ir pointee yra atskiras ir dažna klaida yra sukurti rodyklę 1043 01:05:23,120 --> 01:05:25,680 bet pamiršti suteikti jai pointee. 1044 01:05:25,680 --> 01:05:29,580 Numeris 2, rodyklė dereferencing prasideda žymeklis ir taip savo rodyklę per 1045 01:05:29,580 --> 01:05:31,060 atidarykite savo pointee. 1046 01:05:31,060 --> 01:05:34,340 Kaip mes visi žinome, tai veikia tik jei yra pointee, 1047 01:05:34,340 --> 01:05:36,460 kokios grįš taisyklė numeris 1. 1048 01:05:36,460 --> 01:05:39,870 Numeris 3, rodyklė nublokštų vieną žymiklį ir pakeičia jį 1049 01:05:39,870 --> 01:05:42,390 atkreipti dėmesį į tos pačios, kaip ir kitas rodyklė pointee. 1050 01:05:42,390 --> 01:05:45,890 Taigi, po užduoties, 2 rodykles nurodyti su tuo pačiu pointee. 1051 01:05:45,890 --> 01:05:47,800 Kartais tai vadinama pasidalijimas. 1052 01:05:47,800 --> 01:05:50,910 >> Ir kad viskas yra į jį tikrai. Čučumuiža dabar. 1053 01:05:50,910 --> 01:05:55,840 Tai Binky. Tai CS50. Mes Pasimatysime kitą savaitę. [Plojimai] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]