Davidas Malan: Sveiki, ir Sveiki sugrįžę CS50. Taigi tai yra savaitės keturių pabaiga. Tik vienas skelbimas pirmas. Taigi vadinamoji penktoji pirmadienis artėja ateinantį pirmadienį. Tai galimybė keisti iš SAT / UNSAT su raide klasėje, arba iš laiškas kokybės SAT / UNSAT. Įkyriai, kad procesas tai reikalauja parašas, nes jūs turite užpildyti iš vienos iš šių rožinė pridėti / lašo formos. Kadangi techniškai, palydovinė / UNSAT versija ir raidė kokybės versija turi skirtingas katalogas numerius. Bet ne big deal. Tiesiog ateiti pas mane ar apiplėšti arba Lauren bet kurioje vietoje. Arba rašykite mums, jei jūs neturite natūra popierizmo jums reikia šiandien, ir mes bus tikrai padės jums imtis priežiūra, kad prieš pirmadienį. Viskas gerai, taip ir šiandien - Tiesą sakant, ten iš aidas tiek. Ar mes tonas mane truputi? Gerai. Taigi, šiandien mes pristatome temą žinomas kaip rodyklės. Ir aš pripažinti, kad tai yra vienas iš sudėtingesnės temos, kad mes linkę padengti šioje klasėje, ar tikrai bet įvadinis kursas, kuris naudoja C. Bet imtis savo žodį, ypač jei jūsų protas jaučiasi šiek tiek daugiau smilgos šiandien ir ateinančias savaites. Tai neatspindi jūs gaunate bet ne prastesni tai tiesiog reiškia, kad tai ypač sudėtingas temą kad aš pažadu keletą savaičių taigi, atrodys pernelyg stulbinančiai paprastas retrospektyviai. Aš vis dar prisimenu iki šios dienos. Sėdėjau Elliott valgomajame sėdi šalia mano TF Nishat Mehta, kuris buvo Elliott namo gyventojas. Ir kažkodėl tai tema tiesiog paspaudžia. Kuris yra pasakyti, kad aš taip pat kovojo su juo tam tikrą laiką suma, bet aš darysiu viską, kad būtų išvengta tokių kova su tema, kuri galiausiai yra gana galingas. Tiesą sakant, viena iš temų, mes aptarsime Artimiausiomis savaitėmis į priekį, kad Vertybinių popierių, ir kaip jūs iš tikrųjų galite išnaudoti mašinos būdais kad nebuvo numatyta. Ir tie išnaudojami paprastai klaidų, klaidų rezultatas, kad mes žmonės ne suprasti kai pagrindinės įgyvendinimo Išsamiau, per kuriuos programos bus. Dabar, kad tai atrodo visi patogesnis draugiškas, aš maniau aš žaisti 10 antra Peržiūrėti mažai Claymation skaičius pavadintas Binky, kuris buvo atvežtas į gyvenimą, kaip mūsų draugas Stanfordo universitete, profesorius Nikas parlante. Taigi, leiskite man duoti jums tai kibinimas iš Binky čia. [VIDEO PLAYBACK] -Ei, Binky. Pabuskite. Atėjo laikas rodykle įdomus. -Kas tai? Sužinokite daugiau apie rodykles? O, Goodie. [PABAIGA VIDEO PLAYBACK] Davidas Malan: Tai Stanfordo kompiuterių mokslas. Taigi, daugiau apie tai ateityje. [Plojimai] Davidas Malan: Atsiprašome, Nikas. Taigi priminti, kad paskutinį kartą mes pasibaigė tai tikrai įdomus Įspūdingos filmą , kai ši funkcija tiesiog neveikia. Bent jau intuityviai, ji manė, kaip jis turėtų dirbti. Tiesiog keičiant vertybes dviejų sveikųjų skaičių. Tačiau negalime pamiršti, kad mes atspausdintas iš originalus vertės pagrindinės, vienos ir du, jie vis dar yra vienas ir du ir ne du ir vienas. Taigi leiskite man iš tikrųjų pereiti perkelti į prietaisą. Ir aš parašiau iki skeleto kodo fragmentą į iš anksto čia, kur galiu reikalauti, kad x bus 1, y bus 2. Aš tada spausdinti abiem savo vertės su spausdinimo f. Aš tada prašyti čia, apačioje, kad mes ketiname apsikeitimo juos. Palikau tuščią vietą čia mums užpildykite šiandien vos akimirką. Tada aš ruošiuosi teigti, kad dviejų kintamųjų buvo sukeisti. Tada aš ruošiuosi spausdinti juos iš naujo. Ir todėl tikiuosi, aš turėtumėte matyti 1, 2. 2 1. Tai super paprasta tikslas dabar. Taigi, kaip mes einame apie Swapping du kintamieji? Na, jei aš siūlau čia, kad šie puodeliai gali atstovauti atminties kompiuteryje. Tai keli įkandimai, tai yra dar keli įkandimai. Ar mes savanoris ateiti pradėjimu ir maišyti mums keletą gėrimų, jei pažįstamas? Ateik iki. Koks tavo vardas? JESS: Jess. Davidas Malan: Jess? Nagi aukštyn, Jess. Jei jūs neprieštaraujate, mes turime pradėti "Google" Stiklo jums, kad mes galėtume įamžinti tai. Gerai, stiklo. Filmuoti. Ir gerai, mes esame gerai eiti su Jess čia. Gerai. Malonu jus matyti. Taigi, ką aš norėčiau tai padaryti čia - jei galėtumėte, gana greitai - tiesiog teka mums pusę apelsinų stiklo sulčių ir pusė stiklinė pieno, ty veiksmingai skaičius 1 į vieną puodelį ir 2 kitoje puodelio. Tai bus gera filmuota medžiaga. JESS: Atsiprašau. Davidas Malan: Ne, ne. Tai Gerai. Nice. Gerai, kad mes turime keturis baitus verta apelsinų sulčių. Mes pavadino ją vertę 1. Dabar dar keturi baitai verta pieno. Jį vadiname vertė Vertė 2. Taigi x ir y atitinkamai. Gerai, kad dabar, jei po ranka užduotis - už jus, Jess, priešais visiems savo bendraklasių - yra sukeisti x ir y tokios vertybės kad mes norime, apelsinų sulčių kitas puodelis ir šiame puodelio pieno, kaip galbūt jūs - prieš jūs iš tikrųjų tai - eiti apie tai daro? Gerai, išmintingą sprendimą. Taigi, tau reikia šiek tiek daugiau atminties. Taigi galime skirti laikinas puodelis, jei bus. Ir dabar pereiti prie apsikeitimo x ir y. Puikus. Taigi labai gerai padaryta. Thank you so much, Jess. Prašom. Šiek tiek suvenyrų. Gerai, kad akivaizdu, super paprasta idėja. Visiškai intuityvus, kad mes turime šiek tiek daugiau saugojimo vietos - šioje formoje, puodelis - jei mes iš tikrųjų nori apsikeitimo šiuos du kintamuosius. Taigi galime daryti būtent tai. Čia tarp kur galiu reikalauti aš ketinate daryti kai apsikeičiama, aš eiti į priekį ir paskelbti temp. Ir aš nustatyti, kad jis lygus, tarkim, x. Tada aš ruošiuosi pakeisti vertę x kaip Jess padarė čia pienas ir apelsinų sultys būtų lygus y. Ir aš ruošiuosi pakeisti y būti lygi ne x, nes dabar mes būtume įstrigo apskritimo, o temp. Kur aš laikinai - arba kai Jess laikinai įdėti apelsinų sultis prieš clobbering kad puodelis su pienu. Taigi leiskite man eiti į priekį dabar ir padaryti tai. Tai vadinama noswap.c. O dabar leiskite man paleisti jokio apsikeitimo. Ir iš tiesų matau, jei aš išplėsti langą šiek tiek, kad x 1, y 2. Ir tada x 2, y 1. Tačiau primena, kad pirmadienį mes padarėme dalykų šiek tiek kitaip, kai aš o įgyvendino pagalbininkas funkciją, jei norite, kad iš tikrųjų buvo negaliojantis. Aš pašaukiau jį sukeisti. Aš davė jai du parametrus, ir aš vadinamas juos ir aš juos vadino b. Atvirai kalbant, aš galėčiau jiems skambinti x ir y. Nėra nieko sustabdyti mane nuo daro. Bet aš norėčiau ginčytis tai tada šiek tiek dviprasmiškas. Kadangi prisiminti, pirmadienį, kad mes teigė, kad šie parametrai kopijos vertybių praėjo in Todėl tik sujaukia jūsų protas, manau, jei naudojate lygiai tokie patys kintamieji. Taigi aš, o ne jiems skambinti ir b tik aiškumo. Bet mes galime juos vadinti labiausiai ką mes norime. Ir aš ruošiuosi kopijuoti ir įklijuoti efektyviai tai iš ten kodas žemyn į čia. Nes aš tik pamačiau, kad ji veikia. Štai gana geros formos. Ir aš pakeisti mano x A, mano x kad, mano y b ir mano y b. Taigi, kitaip tariant, patį logika. Lygiai toks pats dalykas, kad Jess padarė. Ir tada vienas dalykas, aš turiu padaryti iki Čia, žinoma, dabar pasinaudoti šia funkcija, arba skambinkite šią funkciją. Taigi, aš kreipsis šią funkciją su dviem įėjimai, x ir y, ir paspauskite Saugoti. Gerai, kad iš esmės tas pats. Tiesą sakant, aš tikriausiai padarė programą be reikalo sudėtingi raštu funkciją, kuri yra tik pradėjimo kai šešių eilučių kodo o aš anksčiau buvo įgyvendinami tai tik trys. Taigi leiskite man eiti į priekį dabar ir perdaryti tai, kad ne swap. Gerai, aš įsukus čia. Tai turėtų būti klaida, kad galbūt pamatyti vis dažniau kaip savo programos gauti daugiau sudėtingas. Bet tai lengva nustatyti. Leiskite pereikite atgal čia. Ir kas Pirma klaida matau? Numanomas deklaracija. Ką tai paprastai rodo? O, aš pamiršau prototipą. Aš pamiršau mokyti kompiliatorių, kad sukeisti ketina egzistuoja, nors jis neegzistuoja pačioje pradžioje programos. Taigi, aš tiesiog ketinate pasakyti negaliojančiu, apsikeitimo, int int b kabliataškis. Taigi, aš nesiruošia reimplement jį. Bet dabar jis atitinka tai, kas čia. Ir pastebėkite, iš kabliataškiu nebuvimas Čia, kuris nėra būtinas, kai įgyvendinti. Taigi leiskite man perdaryti tai, kad ne swap. Daug geriau forma. Pradėti jokio apsikeitimo. Ir damn it. Dabar mes grįžome ten, kur buvome, pirmadienį, kur dalykas nebuvo sukeisti. Ir kas paprastesnis paaiškinimas , kodėl taip yra? Taip? STUDENTŲ: [nesigirdi]. Davidas Malan: Būtent. Taigi ir b yra kopijos x ir y. Ir iš tiesų, bet kuriuo metu jūs buvote telefonu funkciją taip toli, kad eina tokius kintamuosius kaip Ints - kaip apsikeitimo laukia čia - vaikinai buvo einančios kopijos. Dabar tai reiškia, kad reikia šiek tiek laiką, sekundės, už kompiuteris kopijuoti bitai iš vienos kintamasis į kitos bitai. Bet tai dar ne tokia baisi. Bet jie vis dėlto kopiją. Ir todėl dabar, atsižvelgiant į apsikeitimo kontekste Aš esu iš tikrųjų sėkmingai keičiasi A ir B. Tiesą sakant, darykime greitai normalumas patikrinti. Spausdinti f yra% i nauja linija. Ir tegul įjunkite. Dabar padarykime tą patį su b. Ir tegul tą patį padaryti čia. O dabar leiskite man nukopijuoti tuos pačius linijas vėl prie funkcija apačioje po mano trijų eilučių įdomus galėjo įvykdyti ir spausdinti A ir B dar kartą. Taigi dabar padarykime tai, kad ne swap. Leiskite terminalo langą tiek aukštesni, kad mes galime pamatyti daugiau apie tai vienu metu. Ir paleisti jokio apsikeitimo. x 1, y 2. yra 1, b 2. Ir tada, yra 2 b 1. Taigi, ji dirba, kaip Jess padarė čia viduje apsikeitimo. Bet, žinoma, tai neturi jokios įtakos dėl pagrindinėje kintamuosius. Taigi mes matėme apgauti, kai mes gali išspręsti šią problemą, tiesa? Jei esate susiduria su šia įkeltų klausimas, galima tiesiog kamuolio išmušimas iš rankų ir padaryti x ir y, kokios kintamieji vietoj? Jūs galite padaryti juos pasauliniu mastu. Įdėkite juos labai viršuje failą kaip mes padarėme, net 15 minutę. Mes naudojame pasaulinį kintamąjį. Tačiau iš žaidimo 15 kontekste ji protinga turėti pasaulio kintamąjį sudaro valdybą, nes iš 15.C visuma yra viskas apie įgyvendinant šį žaidimą. Štai ką failas yra daryti. Tačiau šiuo atveju čia, aš telefonu funkcija swap. Noriu apsikeitimo dviejų kintamųjų. Ir ji turėtų pradėti jaustis tiesiog per daug jausmingas jei sprendimas visiems mūsų problemų, kai mes paleisti į taikymo sritį klausimai yra padaryti pasauliniu mastu. Kadangi labai greitai mūsų programa ketina tapti gana netvarka. Ir mes padarėme, kad labai taupiai kaip 15.c. rezultatas Tačiau paaiškėja, nėra geriau apskritai. Leiskite man iš tikrųjų eiti atgal ir ištrinti spausdinti F ", tiesiog supaprastinti šį kodą. Ir leiskite man pasiūlyti, kad tai iš tiesų yra blogai. Bet jei aš, o ne pridėti kai žvaigždutes ir žvaigždės, galiu vietoj išjungti šią funkcija į vieną, kad yra iš tikrųjų veikia. Taigi leiskite man grįžti čia ir pripažinti, sakydamas, žvaigždutes visada sunku, todėl aš pasakyti žvaigždes. Aš tiesiog prisipažinti, kad kad vienas. Gerai. Ir dabar, ką aš ketinu daryti vietoj? Taigi, visų pirma, aš ruošiuosi nurodyti kad vietoj artimųjų int į apsikeitimo funkcija, aš vietoj vyksta pasakyti int žvaigždė. Dabar, ką žvaigždučių rodo? Tai yra tai, kad žymeklis, kad sąvoka Binky, Claymation pobūdžio, buvo nuoroda į šiuo metu senumo. Taigi, jei mes sakome, int žvaigždė, prasme tai dabar, kad nesiruošia būti išlaikė savo vertę. Jis nesiruošia būti kopijuojami in Atvirkščiai, adresas bus priimtas in Taigi priminti, kad kompiuterio viduje yra visa krūva atminties, kitaip žinoma kaip RAM. Ir tai RAM yra tiesiog visa krūva baitų. Taigi, jei jūsų Mac arba jūsų kompiuteris turi du gigabaitai, jūs turite 2 milijardas baitų atminties. Dabar galime tik spėti, kad tik kad viskas gražiai ir tvarkingai, mes priskirti adresą - skaičius - kiekvienam RAM baitų kompiuterio. Pats pirmasis baitas tų 2 milijardų per nulį. Kitas vienas baitas numeris vienas, skaičius du, visi On Up būdas, taškas taškas taškų, iki maždaug 2 milijardus. Taigi jūs galite skaičius iš baitų atminties į savo kompiuterį. Taigi galime daryti prielaidą, kad tai, ką mes vadiname adresą. Taigi, kai aš matau int star, kas vyksta būti perduodama į apsikeitimo dabar adresas. Ne jo vertė, bet koks jo pašto adresas, taip sakant - jo vieta RAM. Ir panašiai b, aš ruošiuosi pasakyti tą patį. Žiniasklaida, žvaigždė, b. Kaip panaikinti, techniškai žvaigždės gali eiti kitose vietose. Bet mes standartizuoti žvaigždės Būdama šalia duomenų tipo. Taigi, apsikeitimo parašas dabar reiškia, duok man iš int adresas ir skambučių kad adresas. Ir duok man kitą adresą int ir skambinti, kad Adresas B. Bet dabar mano kodas čia turi pasikeisti. Nes jei aš pareiškiu, int temp - kuris vis dar tipo int - bet aš laikyti tai, kokios vertės? Kad būtų aišku, aš išleisti su kodas, kaip parašyta dabar? Aš išleisti buvimo vietą. Bet aš nerūpi vieta dabar, tiesa? Temp egzistuoja tik Jess "trečią puodelį egzistavo, kokiu tikslu? Norėdami išsaugoti vertę. Pieno ar apelsinų sulčių. Ne iš tikrųjų laikyti adresą nors iš tų dalykų, kurie jaučiasi šiek tiek absurdiškas šiame nekilnojamojo pasaulio kontekste vistiek. Taigi tikrai, ką aš noriu įdėti temp yra ne adresas, bet turinys. Taigi, jei yra, pavyzdžiui, 123 skaičius, tai 123-asis baitų atminties, kad tik būna, kad okupacinė, kad vertė ir būna, kad okupacinė. Jei aš noriu eiti į tą adresą, Aš turiu pasakyti, star. Be to, jei aš buvo pakeisti, kas adresu, Aš nesikeičiu tai pradėti. Jei aš noriu laikyti tai, kas ne vieta su tuo, kas toje vietoje, "B, žvaigždė b žvaigždė. Taigi trumpai tariant, net jei tai ne visai skęsta dar - ir aš ne tikėtis kad būtų taip greitai - suprasti, kad viskas, ką aš darau yra priešdėlį šios žvaigždės į mano kintamųjų, posakis nereikia patraukti vertybes. Nekeiskite vertybes. Bet, o, eikite į šiuos adresus ir gauti vertę. Eiti šiuo adresu ir kaita vertė ten. Taigi dabar leiskite man pereikite atgal į viršų, tik nustatyti šią eilutę čia, pakeisti prototipas varžybų. Bet aš dabar reikia padaryti dar vieną dalyką. Intuityviai, jei aš pasikeitė tipus argumentų, kad apsikeitimo tikisi, ką dar turiu pakeisti savo kodą? Kai aš vadinu apsikeitimo. Nes dabar, ką esu Aš artimųjų apsikeitimo dar? X vertė ir y vertė, arba pienas ir apelsinų sultys. Bet aš nenoriu to daryti. Aš vietoj nori važiuoti, ką? Iš x vieta ir y vieta. Kokie jų pašto adresai, taip sakant. Taigi, norint tai padaryti, ten ampersendas. Ampersand tipo skamba kaip adresą. taip n ampersendas, adresas iš x ir y adresą. Taigi tai sąmoningas, kad mes naudojame jungimo ženklus, kai telefono funkcija, ir žvaigždės, deklaruojant ir kada Įgyvendinant šią funkciją. Ir tiesiog manau ženklui kaip adresas operatorius, ir žvaigždės, kaip ten operatorius - arba, tinkamai dereference operatorius. Štai visai daug žodžių tiesiog pasakyti, kad dabar, tikiuosi, mainai vyksta būti teisingi. Leiskite man eiti į priekį ir padaryti - tegul tikrųjų pervardyti failą, kitaip ši programa vis dar gali būti vadinamas ne sukeisti. Galiu reikalauti, kad mes jį vadiname swap.c dabar. Todėl įsitikinkite, mainytis. Taškų, velniop, apsikeitimo. O dabar iš tiesų, x 1, y 2. Ir tada, x 2, y yra vienas. Na pažiūrėkime, jei mes negalime padaryti šiek tiek skirtingai į tai, kas čia vyksta. Pirma, leiskite man priartinti mūsų piešimo ekranas čia. Ir leiskite man pasiūlyti akimirką - ir kai aš padaryti čia bus kopijuojamos ten dabar - leiskite man pasiūlyti, kad čia visa krūva atminties, arba RAM viduje savo kompiuterį. Ir tai bus įkandimo skaičius, tarkim, 1. Tai bus baitų skaičius 2. Ir aš padaryti visa krūva daugiau, ir tada iš dot dot taškų krūva rodo, kad yra 2 milijardai iš šių dalykų. 4, 5, ir kt. Taigi yra pirmas penkias baitų mano kompiuterio atmintyje. Viskas gerai? Labai nedaugelis iš 2 mlrd. Bet dabar aš ruošiuosi pasiūlyti taip. Aš ruošiuosi pasiūlyti x vyksta laikyti skaičiumi 1, ir y vyksta laikyti numeris 2. Ir leiskite man eiti į priekį dabar ir yra šios vertybės taip. Leiskite tai padaryti taip. Duok man tik vieną sekundę. Vieną sekundę. Gerai. Aš noriu, kad tai šiek tiek - darykime tai dar kartą. Priešingu atveju aš ruošiuosi ir naudojant tie patys numeriai, netyčia, kelis kartus. Taigi tik todėl mes turime skirtingus numerius kalbėti apie, pavadinkime šį baitas skaičius 123, 124, 125, 126, ir taškas taškas taškas. Ir leiskite man teigti dabar, kad aš ruošiuosi įdėti Vertė 1 čia, ir vertė Vertė 2 Čia, kitaip žinoma kaip x ir y. Taigi, jis tiesiog taip atsitinka, kad tai yra x, tai y. Ir tik kai kurių atsitiktinių atsitiktinai, kompiuteris, operacinė sistema, atsitiko įdėti x ne vietoje skaičius 123. Ir y galų gale ne vietoje 124 - damn it. Aš turėjo nustatyti, tai. O vyras, aš tikrai norite tai padaryti? Taip, aš noriu išspręsti šią problemą ir b tinkamai apie tai šiandien. Atsiprašome, new at this. 127, 131, ir aš nenorėjau, kad tai sudėtinga, tačiau kodėl aš pakeisti numeriai ten? Nes aš noriu, kad ints į iš tikrųjų būti keturių baitų. Taigi būkime super analinis apie tai. Taigi, kad jei 1 atsitinka būti sprendžiami 123, 2 bus adresu 127, nes ji tik 4 liūlia toli. Štai ir viskas. Ir mes pamiršti apie visus kiti adresai pasaulyje. Taigi x yra ne vietoje 123 y yra ne vietoje 127. Ir dabar, ką aš iš tikrųjų nori daryti? Kai aš vadinu apsikeitimo dabar kas iš tikrųjų vyksta? Na, kai aš vadinu swap, aš einančios iš x adresą ir y adresą. Taigi, pavyzdžiui, jei šie du gabalai Popieriaus dabar atstovauja du argumentai a ir b apsikeitimo, ką aš ketina rašyti Pirmasis iš jų, kurį aš ruošiuosi skambinti vadina? Būtent, 123. Taigi tai galiu reikalauti yra. Tai parametras. Aš pradėti su x adresą ten. Kas tai? Kas tai? Ne, ne. Tai gerai. Dar gerai, vis dar gera. Taigi tai yra. Ir dabar antrą popieriaus lapo tai bus B, ir ką aš bus raštu tai popieriaus lapas? 127. Taigi vienintelis dalykas, kuris pasikeitė nuo mūsų ankstesnių pasakoti šios istorijos yra , o ne pažodžiui 1 ir 2, aš ketina pereiti į 123 ir 127. Ir aš dabar ketina įgyvendinti šiuos viduje šį langelį, viskas gerai? Taigi, kad juodoji dėžė dabar yra apsikeitimo funkcija. Tuo tarpu, tegul dabar kas nors įgyvendinti apsikeitimo funkcija. Ar kas nors čia norėtų savanoriauti? Ateik iki. Koks tavo vardas? Čarlis. Visos teisės Charlie. Ateik iki. Taigi Čarlis žaisti mūsų juodosios dėžės vaidmuo. Ir Charlie, ką aš norėčiau jums padaryti dabar įgyvendinti apsikeitimo tokiu būdu kad, atsižvelgiant į šios dvi adresai, jūs iš tikrųjų vyksta pakeisti vertes. Ir aš šnabždesys ausies kaip paleisti televizorių čia. Taigi pirmyn, ir jūs juodoji dėžė. Pasiekite ten. Ką verčių matote, ir Kokiomis vertybėmis jūs matote b? CHARLIE: yra 123 ir B 127. Davidas Malan: Gerai, tiksliai. Dabar pristabdyti ten vos akimirką. Pirmas dalykas, kurį jūs ketinate daryti dabar, pagal kodeksą - kuris Aš dabar atsigriebti ekrane - bus skirti tiek tiek atminties vadinamas temp. Taigi, aš ruošiuosi eiti į priekį ir jums, kad atmintį. Taigi tai bus trečiasis kintamasis kad jūs turite prieinamas tu pašaukei temp. Ir ką jūs ketinate rašyti nuo temp popieriaus lapo? CHARLIE: rodykles, tiesa? Davidas Malan: Gerai, gerai ne nebūtinai patarimų. Taigi kodo eilutę, kad aš pabrėžė, dešinėje pusėje, pradėkime ten. Ji sako žvaigždė. Taigi šiuo metu saugoti skaičius 123. Ir tik intuityviai, kas nebuvo žvaigždučių 123 reiškia? Bet konkrečiai, jei yra 123, žvaigždučių tai ką? A vertė. Ar daugiau atsainiai, eikite ten. Taigi leiskite man pasiūlyti, turintis į ranka, eiti į priekį ir gydyti, kad tarsi tai žemėlapis. Ir vaikščioti save per prie kompiuterio atmintis, ir mus rasti kas yra ne vietoje 123. Būtent. Taigi matome ne vietoje 123 yra tai, kas akivaizdu? Gerai, kad tai, kas vertė dabar esate ketina pradėti temp? Būtent. Taigi, eikite į priekį ir daryti. Ir parašykite skaičių 1 ant gabalas popieriaus tai šiuo metu tituluojamas temp. O dabar kitas žingsnis, kad jūs ketinate įgyvendinti bus ką. Na, dešinėje pusėje Kitą eilutę kodo žvaigžde b. B, kursas, parduotuvės adresą. Kuri spręstų 127. Žvaigždžių b tai ką, atsainiai kalbėti? Eiti į tą vietą. Taigi pirmyn ir mus rasti kas ne vietoje 127. Gerai. Žinoma, ne vietoje 127 vis dar vertė 2. Taigi, ką jūs ketinate dabar Laikyti visada kas į vietą? Taigi star reiškia, eikite į vietą a. Kas yra vieta? Būtent. Taigi dabar, jei norite pakeisti kas toje vietoje - Aš eisiu į priekį ir paleisti trintukas čia. O dabar padėkite jį atgal ant šepečio. Kokiu numeriu jūs ketinate rašyti toje tuščioje lango dabar? Būtent. Taigi tai kodo eilutę, turi būti aišku - tegul man pristabdyti kas Čarlio daro ir atkreipti dėmesį į čia, ką jis ką tik padariau, tai rašyti į tą laukelį vietoje 123 vertę, kuri anksčiau buvo ne b. Ir taip mes dabar įgyvendinama iš tikrųjų tai antroje eilutėje kodą. Dabar, deja, yra dar viena eilutė lieka. Dabar, kas yra temp, pažodžiui? Tai akivaizdžiai numeris vienas. Tai nėra adresą. Tai tiesiog skaičius, tarsi iš savaitę vienas kintamasis. Ir dabar, kai jūs sakote žvaigždė b, tai reiškia, eiti į adresų B, kuri yra Žinoma čia. Taigi, kai jūs ten - Aš eisiu į priekį ir ištrinti, kas iš tikrųjų ten - ir ką jūs ketinate rašyti dabar vietos 127? CHARLIE: Temperatūra, kuri yra viena. Davidas Malan: Temperatūra, kuri yra viena. Ir kas atsitiks su temp, galų gale? Na, mes tikrai nežinome. Mes nerūpi. Bet kuriuo metu mes įdiegėme funkciją iki šiol, bet vietiniai kintamieji turite iš tiesų vietos. Ir jie tiesiog išnyksta. Jie regeneruotų veiklos sistema ilgainiui. Taigi faktas, kad temperatūra dar vertė 1 yra tarsi esmės neįdomu mums. Gerai, kad iš plojimų jei galėtume už Čarlis. Labai gerai padaryta. Gerai, tai kas daugiau daro tai reiškia, kad mes galime padaryti? Taigi paaiškėja, kad buvote pasakoti keletą baltos melas gana ilgą laiką. Iš tiesų, paaiškėja, kad eilutę, visą šį laiką, tikrai ne simbolių seka, per se. Jis rūšies yra tai, kad intuityviai. Bet techniškai kalbant, eilutė duomenų tipas, kad mes paskelbėme viduje CS50 biblioteka supaprastinti pasaulį už pirmąsias kelias savaites klasėje. Kas seka tikrai yra adresas iš charakterio kažkur RAM. Eilutė yra tikrai skaičius, pavyzdžiui, 123 arba 127, tai atsitiks paženklina kur eilutė prasideda jūsų kompiuterio atminties. Bet tai neatspindi eilutę, per se, nėra pati. Ir mes matome, tai taip. Leiskite man eiti į priekį ir atverti kai kodas, kuris yra tarp šiandien šaltinio kodo pavyzdžiai. Ir aš ruošiuosi eiti į priekį ir atidaryti iki, tarkim, palyginkite-0.c. Tai Buggy programa, kuri vyksta turi būti įgyvendinamas taip. Pirmas. Aš ruošiuosi ką nors pasakyti. Tada aš ruošiuosi eiti į priekį ir gauti eilutę iš vartotojo toje kitoje eilutėje. Tada aš ruošiuosi pasakyti, kad tai dar kartą. Tada aš ruošiuosi gauti kitą eilutė iš vartotojo. Ir pastebėkite, rodau vieną iš virvelės kintamasis vadinamas s, ir kitas šių stygų į kintamasis vadinamas T. Ir dabar aš ruošiuosi teigti, labai pagrįstai, kad jei ai lygus lygus t, stygos yra tokios pačios. Rašote tą patį. Kita, stygos yra ne tas pats. Galų gale, jei mes įvesti du Ints, du simbolių, dvi plūdes, du dviviečiai, bet kurios duomenų tipai Mes kalbėjome apie iki šiol palyginti jas - Prisimenu, mes labai aiškiai, o atgal kad jums nereikia tai padaryti, nes vieno lygybės ženklas yra žinoma priskyrimo operatorius. Taigi, kad būtų klaida. Mes naudojame vienodą lygybės ženklą, kuris iš tikrųjų palygina dalykų tikrą lygybę. Bet aš teigia tai klaidų. Jeigu aš eiti į priekį ir padaryti palyginti nulis, ir tada nereikia taškas velniop palyginti nulį. Ir aš tipo, tarkim, labas. Ir tada tarkim Sveiki dar kartą. Tiesiog tą patį, kompiuteris teiginių aš įvedėte skirtingus dalykus. Dabar gal aš tiesiog neteisingai įrašytas kažką. Aš įveskite my name šį kartą. Aš turiu galvoje, labas. Sveiki. Tai skiriasi kiekvieną kartą. Na, kodėl taip yra? Kas iš tikrųjų vyksta po kapotu? Na, kas iš tikrųjų vyksta po dangtis yra eilutė tada Įvedžiau tą pirmą kartą, pavyzdžiui yra žodis hello, žinoma. Bet jei mes atstovaujame tai po dangtis, priminti, kad eilutė yra masyve. Ir mes jau sakiau kiek anksčiau. Taigi, jei aš padaryti, kad matrica, kaip šis, aš ketina atstovauti kažką labai panašus į ką mes padarėme prieš akimirką. Ir ten tikrai kažkas Specialusis čia. Ką mes nustatyti buvo Kiekvienos eilutės pabaiga? Taip, tai Backslash nulis, kuris yra tiesiog atstovauti būdas, pažodžiui, 00000000. Aštuoni bitai 0 iš eilės. Aš nežinau, tiesą sakant, kas po to. Tai tik krūva daugiau RAM viduje mano kompiuterį. Bet tai masyvo. Mes kalbėjome apie masyvų anksčiau. Ir mes paprastai kalbėti apie masyvų kaip vieta nuliui, tada vienas, tada du. Bet tai tik dėl patogumo. Ir tai visiškai reliatyvu. Kai jūs iš tikrųjų gauti atmintį nuo kompiuteris, tai, žinoma, bet 2 milijardai kai nelyginis baitų, potencialiai. Taigi tikrai po gaubtu, visą šį laiką, taip. Tai gali labai gerai būti laikiklis nuliui. Bet jei jūs kasti dar giliau po dangtis, tai tikrai spręsti numerio 123. Tai adresas 124. Tai adresas 125. Ir aš ne susukti šį kartą. Tai yra dabar vienas baitų išskyrus dėl kokios priežasties? Kaip didelis yra char? Char yra tik vienas baitas. LC paprastai yra keturi baitai. Štai kodėl aš padariau tai 123, 127, 131 ir kt. Dabar galiu laikyti matematikos paprastesnis ir tiesiog plus 1. Ir tai dabar kas iš tikrųjų vyksta apie po gaubtu. Taigi, kai jūs paskelbti kažką panašaus į tai, eilutę s iš tikrųjų tai yra - it turns out - char žvaigždė. Žvaigždė, žinoma, reiškia adresas, dar žinomas kaip rodyklė. Taigi tai kažką adresą. Kas tai yra adresas? Na - Aš vienintelis, kuris gali pamatyti labai svarbus dalykas, aš padaryti, ar manote, kad Aš padaryti. Taigi eilutė - Liūdniausia yra tai, turiu monitorių teisę ten, kur aš galėjo matyti, kad. Gerai, kad eilutė s kas Skelbiau anksčiau. Tačiau paaiškėja, dėka mažai magija CS50 bibliotekoje, visa tai laiko eilutė pažodžiui buvo char žvaigždė. Žvaigždučių vėlgi reiškia rodyklė ar adresą. Faktas, kad tai gretutines Žodis simbolis reiškia, kad jis adresas simbolį. Taigi, jei gauti eilutę vadinamas, ir aš tipo į H-E-L-L-O, siūlyti dabar ką gauti eilutė pažodžiui buvo grąžinti visi šį kartą, nors mes, o supaprastino pasaulį? Ką gaunate eilutė iš tikrųjų grįžti kaip savo sugrįžimo vertę? 123 Šiuo atveju, pavyzdžiui. Mes anksčiau sakė, kad gauti eilutę tiesiog grąžina eilutę, yra seka simbolių. Bet tai iš balto melo tiek. Būdas gauti eilutę tikrai veikia po kapotu tai gauna eilutė iš vartotojo. Tai plops ženklų, kad Jis ar ji tipų atmintyje. Tai kelia backslash nulį pabaigoje iš tų simbolių seka. Bet tada ką gauti eilutę tiesiog grįžti? Jis tiesiog grąžina adresą pirmųjų baitų RAM, kad jis naudojo tam jėga. Ir it turns out, kad tiesiog grįžti vieno adresas Pirmasis simbolis eilutės, tai yra pakanka rasti visuma eilutę. Kitaip tariant, gauti eilutė neturi grįžti 123 ir 124 ir 125. Ji neturi duoti man ilgai Visų svetainės dalyvių sąrašas baitai, kurie mano eilutė naudoja. Kadangi viena, jie visi atgal atgal. Ir du, remiantis pirmosios adresą, aš gali išsiaiškinti, kur eilutė baigiasi. Kaip? Specialusis null pobūdis, pabaigoje nulį kairiniu pasviruoju brūkšniu. Taigi, kitaip tariant, jei pereisite aplink - viduje kintamųjų - iš char adresas ir jūs prisiimate kad bet kurios eilutės pabaigoje, bet simbolių seka, kaip mes, žmonės manau eilučių, jei manyti, kad bet kurios tokios eilutės nėra pabaigos Backslash nulis, jūs auksinės spalvos. Kadangi jūs visada galite rasti iš eilutės pabaiga. Dabar, kas tikrai tada vyksta apie šią programą? Kodėl ši programa, palyginti-0.c, Buggy? Kas iš tiesų yra lyginami? Taip? STUDENTŲ: [nesigirdi]. Davidas Malan: Būtent. Tai palyginti vietas iš stygų. Taigi, jei vartotojas turi įvesti Apie vieną kartą, kaip aš, atmintis gali baigtis atrodo taip. Tada, jei naudotojas įveda Sveiki dar kartą, bet paskambinus gauti eilutę vėl, c yra ne itin protingas, jei mokyti kad jis būtų protingas rašyti kodą. C - ir kompiuterių apskritai - jei įvesite žodį Sveiki dar kartą, jūs žinote, ką jūs ketinate gauti. Jūs esate tik ketina gauti antrą masyvo atminties, kad taip, atsitinka būti saugoti H-e-L-L-O ir kt. Tai ketiname ieškoti patį mus žmonės, tačiau šis adresas gali būti 123. Tai gali būti tiesiog taip atsitikti, kad operacinė sistema turi kai galima vietos, pavyzdžiui, siekiama vietos - tarkim kažką savavališkai, kaip tai yra vieta 200. Ir tai yra vieta 201. Ir tai yra vieta 202. Mes neturite idėjos, kur, kad yra bus atmintyje. Bet ką tai reiškia, kad tai, kas bus saugomi galiausiai s? Skaičius 123. Kas bus saugomi t, Šiame savavališko pavyzdžiui? Skaičius 200. Ir visa tai reiškia, kad tada, žinoma, 123 nėra lygi 200. Ir taip, tai, jei sąlyga niekada įvertina, kad tiesa. Kadangi GET eilutė naudojant įvairias gabaliukus atminties kiekvieną kartą. Dabar mes matome, tai vėl Kitame pavyzdyje. Leiskite man eiti į priekį ir atverti Kopijuoti 0.c. Galiu reikalauti, kad šis pavyzdys ketina pabandyti - bet nepavyksta - kopijuoti dvi eilutes taip. Aš ruošiuosi ką nors pasakyti vartotojui. Aš tada ketinate gauti eilutė ir vadina jį s. Ir dabar darau šį patikrinimą čia. Mes paminėjo šį, o atgal. Bet kai gali gauti string grįžti NULL, kitas specialus simbolis, arba specialus simbolis tarkim. Jei tai iš atminties. Pavyzdžiui, jei vartotojas yra tikrai yra sunku ir rūšys žiaurus simbolių skaičius ne klaviatūra ir smūgius Enter. Jei tai simbolių skaičius tiesiog negali tilptų RAM kokia beprotiška priežastis, ir gauti eilutė galėtų labai gerai grįžti null. Arba, jei jūsų programa pati daro daug kitų dalykų, ir ten tiesiog Nepakanka atminties GET eilutę būtų sėkminga, ji gali baigtis grįžta null. Bet būkime tiksliau apie tai, kas tai yra. Kas yra S "duomenų tipas tikrai? Char žvaigždė. Taigi paaiškėja, dabar mes galime žievelės parems null sluoksnis. Pasirodo, nulis yra - taip, žinoma specialus simbolis. Bet kas tai yra iš tikrųjų? Tikrai, nulis yra tik simbolis, kad mes žmonės naudoja atstovauti nulis taip pat. Taigi nuo C autorių ir kompiuterių apskritai nusprendė metų , kad jūs žinote, ką. Kodėl mes užtikrinti, kad nė vienas vartotojas duomenys niekada, niekada, niekada saugomi bye nulio? Tiesą sakant, net mano savavališko pavyzdžiui prieš, aš ne pradėti numeravimą baitais nulio. Aš pradėjau viename. Kadangi Aš žinojau, kad žmonės visame pasaulyje nusprendė pasilikti nulis baitų niekieno RAM kaip kažkas ypatinga. Priežastis yra, bet kuriuo metu norite signalas, kad kažkas negerai atsižvelgiant į adresų sugrįžote Null - kitaip žinomas kaip nulio - ir nes žinote, kad nėra teisėtu duomenis adresu nulio, aiškiai tai reiškia, kad klaida. Ir štai kodėl mes, kaip įprasta, patikrinkite, ar for null ir sugrįžimo kažką kaip vienas iš tokių atvejų. Taigi, jei mes pereikite dabar, tai tik tada kai klaidos nebus tikrinamas tik tuo atveju, kažkas negerai su [? gelbėti?] apskritai ir uždarykite programą grąžinant anksti. Ši eilutė dabar galima perrašyti nes tai, o tai reiškia ką? Kairėje pusėje, duok dar rodyklę į simbolį, ir vadina jį t. Ką aš laikyti viduje t, remiantis apie šį vieną eilutę kodo? Aš saugojimo vietą. Tiksliau vieta kad buvo s. Taigi, jei vartotojas turi įvesti labas, ir kad pirmasis Apie atsitinka baigti čia, tada skaičius 123 ketina grįžti iš gauti string ir laikyti - kaip sakėme anksčiau - s. Kai aš dabar deklaruoti dar vieną žymiklį char ir vadina jį t, kas skaičius tiesiog ketina baigti t, atsižvelgiant į istoriją? Taigi 123. Taigi techniškai dabar tiek s, o t yra nukreipta į tikslų patys gabaliukus atminties. Taigi pastebėti tai, ką aš ruošiuosi daryti dabar įrodyti, kad ši programa yra klaidų. Pirmiausia aš ruošiuosi teigti, su Spausdinti f, kapitalizuoti iš eilutės kopija. Tada aš ruošiuosi padaryti šiek tiek Klaidų. Aš ruošiuosi įsitikinti. Leiskite įsitikinkite, kad eilutė t yra jau didesnė už nulį ilgio, taip yra keletas simbolis yra kad iš tikrųjų pasinaudoti. Ir tada jūs tikriausiai pamenate, kad tai iš ankstesnių pavyzdžių. 2 viršutinė - kuris yra ctype.h failas. T laikiklis nulis suteikia man nulis pobūdis styginių t. Ir 2 viršutinė tos pačios vertės, iš kursas, paverčia jį į didžiąsias. Taigi intuityviai, tai pabrėžė linija kodo yra kapitalizuoti pirmas laišką, t. Bet tai ne kapitalizuoti, intuityviai, pirmoji raidė s. Bet jei jūs galvojate į priekį, kas aš esu pamatyti, kai aš paleisti šią programą ir atspausdinti tiek originalus, s, o vadinamoji kopija, t? Jie tikrai bus tas pats. Ir kodėl jie bus vienodi? Jie abu nukreipta į lygiai tas pats dalykas. Taigi galime tai padaryti. Padaryti kopiją nulį. Ji kaupia Gerai. Leiskite man paleisti kopijavimo nulį. Leiskite man įvesti kažką panašaus HELLO visi mažosiomis tada paspauskite "Enter". Ir ji teigia, kad abu originalus ai ir kopija iš tiesų yra identiški. Taigi, kas iš tikrųjų nutiko čia? Leiskite perbraižyti šią nuotrauką tik pasakyti į istoriją šiek tiek kitaip. Kas iš tikrųjų vyksta po dangtis kai aš pareiškiu, kažką panašaus char pradžia s ar seka s Gaunu rodyklę - kuris atsitinka būti keturių baitų į CS50 prietaiso ir kompiuteriniu aikštelė. Ir aš ruošiuosi tai vadiname s. Ir tai šiuo metu turi kai nežinoma vertė. Kai paskelbti kintamąjį, jei sau įdėti vertę ten, kurie žino, kas ten. Tai gali būti kai atsitiktinė seka bitai nuo praėjusių vykdymo. Taigi, kai aš, mano kodo eilutę gausite eilutę, ir tada laikyti grįžti vertė s gauti eilutę kažkaip - ir mes galų gale žievelės atgal kaip gauti string darbai, kažkaip skiria masyvas, kad tikriausiai atrodo kaip šis bitas. H-El-L-L-O Backslash nuliui. Sakykime, kad tai adresas 123 tik pirmas nuoseklumas. Taigi gauti string požiūriu, kaip pabrėžė liniją ten, ji grąžina skaičius sakėme, 123. Taigi, kas iš tikrųjų vyksta viduje yra čia? Na, kas iš tikrųjų vyksta viduje S 123. Bet tiesą sakant, gaunu mažai supainioti visus šiuos adresus, visi šie savavališkai numerius. 123, 124, 127. Taigi, galime iš tikrųjų supaprastinti pasaulis truputį. Kai kalbame apie rodykles, tiesą sakant, į mus žmonės, kurie gi rūpi, kur viskas yra atminties? Tai visiškai savavališkai. Ji ketina priklausys nuo to, kaip kiek RAM vartotojas. Tai vyksta nuo tada, kai tą pačią dieną Paleidus programą, ko gero, ir ką įvesties vartotojas suteikia jums. Mes būstą nesvarbios informacijos. Taigi tegul abstraktus toli ir pasakyti, kad paleidus kodo eilutę, kaip tai, char žvaigždučių ai gauna grąžą vertė get eilutę. Kodėl ne mes, o tiesiog atkreipti ką mes nuolat raginama žymeklį, tarsi tai nukreipta į kažką? Taigi galiu reikalauti, kad dabar s iki yra rodyklė - po kapotu tai adresas. Bet tai tik nukreipta į Pirmas baitas į seka, kad buvo grąžinta. Jei aš dabar grįžti į kodą čia tai, kas vyksta šioje eilutėje? Na, šiuo paryškintos linijos dabar, Aš skelbiantis, matyt, dar kintamasis vadinamas T. Bet tai taip pat rodyklė, todėl aš ruošiuosi piešti, nes, teoriškai, tiksli paties dydžio dėžutę. Ir aš ruošiuosi jį vadiname k. Ir dabar, jei mes einame atgal į kodą dar kartą, kai aš laikyti ų viduje t, ką aš techniškai išleisti viduje t? Na techniškai tai buvo numeris 123. Taigi tikrai turėčiau būti raštu skaičius 123 ten. Bet leiskite jį aukštesnį lygį. t, jei tai tik rodyklė, intuityviai, yra tik tai. Štai ir viskas tai yra saugomi ten. Taigi dabar per pastaruosius įdomių linijų kodo, kai aš iš tikrųjų eiti apie Kapitalizacija nulinės charakterį t, kas vyksta? Na, t laikiklis nulis dabar nukreipta ką simbolis, matyt? Tai nukreipta h. Kadangi T laikiklis nulis - prisimenate, tai yra senas sintaksė. t laikiklis nulis tiesiog reiškia, jei t yra eilutė, t laikiklis nulis reiškia, kad vis nulis požymio stiprumo. Taigi, ką tai iš tikrųjų reiškia tai eiti į šio masyvo - ir taip, tai gali būti 123, tai gali būti 124. Bet visa tai giminaitis, prisiminti. Kai kalbame apie masyvo, mes turime kalbėti apie privalumas santykiniai rodikliai. Ir todėl dabar mes galime tiesiog manyti, kad t laikiklis nulis val. Taigi, jei aš vadinu 2 viršutinę apie tai, ką tai tikrai darote, yra kapitalizuoti mažoji h iki didžiųjų H. Bet, žinoma, kas yra s? Tai nukreipta į tą patį darn eilutę. Taigi visa tai, kad buvo daroma šiame kodekse iki šiol. Taigi, kas tada prasmė? Kaip mes išspręsti šias dvi problemas? Kaip mes, palyginti su faktiniais stygos? Na intuityviai, kaip būtų tu apie palyginant dvi stygos tikrą lygybę? Ką reiškia, jei du stygos yra lygūs? Aišku, ne todėl, kad jų adresai EQUAL atminties, nes tai mažas lygis įgyvendinimas išsamiai. Visi simboliai yra tas pats. Taigi leiskite man pasiūlyti, ir leiskite man pristatyti Į compare.c vienos versijos čia, todėl palyginti-1.c. Leiskite man pasiūlyti, kad mes vis dar gauti rodyklė vadinamas ai, ir laikyti jį grįžti vertę GET eilutę. Leiskite padaryti tą patį su t. Taigi nė vienas iš kodas yra kitoks. Aš ruošiuosi įdėti šiek tiek daugiau klaidų tikrinimas dabar. Taigi dabar, kad mes tarsi lupimasis atgal tai į CS50, kas seka sluoksniai iš tikrųjų yra, mes turime būti daugiau analinis apie tai, kad mes nepiktnaudžiautų negaliojančių verčių, pavyzdžiui, null. Taigi, aš tik ketina patikrinti. Jei ai nėra lygi nuliui ir t nėra lygi nuliui, tai reiškia, kad mes gerai. Paimti eilutę nebuvo susukti gauti viena iš šių eilučių. Ir jūs galite galbūt atspėti dabar, ką nėra STR CMP tikriausiai daryti? Styginių palyginti. Taigi, jei jūs programą Java anksčiau, tai kaip lygus metodas styginių klasės. Bet tiems iš jūsų, kurie nėra užprogramuotas anksčiau, tai tik c funkcija. Taip atsitinka ateiti failą pavadinimu string.h. Štai kur tai deklaruoti. Ir styginių palyginti - Aš iš tikrųjų pamiršti jų naudojimą, bet tai nesvarbu. Prisiminkite, kad mes galime padaryti vyras, išmaišyti palyginti. Ir tai vyksta auklėti "Linux" programuotojai instrukcijos. Ir tai, tiesą sakant, šiek tiek paslaptingas. Bet matau, kad čia, yep. Turiu įtraukti string.h. Ir ji sako, čia pagal aprašymą " styginių palyginti funkcija palygina dvi eilutes S1 ir S2. "ir s1 ir S2, matyt, du argumentai perduoti in Aš tikrai ne prisiminti, kas konstanta yra, bet dabar SKELBIMAS APIE PIRKIMĄ - ir tu gali matyti tai jau kai jūs naudoti žinyno puslapių, jei visa tai - kad char žvaigždė yra tik sinonimas virvele. Taigi ji lygina dvi eilutes, S1 ir S2 ir grąžina sveikąjį skaičių mažiau kaip arba lygi arba didesnė už nulį jei S1 nustatyta, atitinkamai, turi būti mažesnis arba nesutampa, arba būti didesnis negu S2. Tai tiesiog labai sudėtingas būdas pasakyti kad eilutė palyginti grąžą nulis, jei dvi eilutes yra intuityviai identiški, personažas personažas pobūdžio. Ji grąžina neigiamą skaičių, jei ai, pagal abėcėlę, tai turėtų ateiti iki t. Arba grąžina teigiamą skaičių, jei s turėtų ateiti po t abėcėlės tvarka. Taigi šį paprastą funkciją, galėtų Jūs, pavyzdžiui, rūšiuoti visa krūva žodžių? Taigi ši nauja versija, aš ruošiuosi eiti į priekį ir padaryti compare1. Dot velniop palyginti vieną. Aš įvesti Apie visose mažosios. Aš einu įvesti Apie visose mažosiomis dar kartą. Ir laimei, dabar jis supranta, Įvedžiau tą patį. Tuo tarpu, jei aš įvesti HELLO mažesnis atveju ir HELLO didžiąsias raides ir palyginti juos, aš įvedėte skirtingi dalykai. Nes ne tik adresai skirtingi, bet mes palyginti skirtingų simbolių vėl ir vėl. Na eikime ir nustatyti vieną Kita problema dabar. Leiskite man atidaryti po vieną versiją kopija, kuri dabar adresai šis klausimas taip. Ir tai vienas vyksta ieškoti šiek tiek sudėtingesnis. Bet jeigu jūs manote apie tai, kas problema, reikia išspręsti, tikiuosi tai bus aišku, tik akimirką dabar. Taigi, pirmoji eilutė, ženklas pradžia t, iš profanas sąlygomis gali kas nors pasiūlyti ką ši eilutė čia reiškia? Char žvaigždučių t, kas tai daro? Geras. Sukurti rodyklę į kai vieta atmintyje. Ir leiskite man patikslinti jį šiek tiek. Pripažinti kintamąjį, kad bus saugoti adresas kai char atminties, tiesiog būti šiek tiek daugiau tinkamai. Gerai, kad dabar yra dešinėje pusėje, aš niekada mačiau vieną iš šių funkcijų prieš malloc. Bet kas gali tai reiškia? Paskirstymo atminties. Atminties paskirstymas. Taigi paaiškėja, iki šiol mes ne tikrai turėjo galingą būdą klausia operacinę sistemą, duoti man šiek tiek atminties. Atvirkščiai, dabar mes turime funkcija vadinama malloc kad daro būtent tai. Nors tai yra šiek tiek išsiblaškymas dabar, pastebėsite, kad tarp dviejų Skliaustuose tiesiog bus skaičius. Kur aš įvedėte klausimą ženklai gali būti skaičius. Ir šis skaičius reiškia, man 10 baitų. Duok man 20 baitų. Duok man 100 baitų. Ir malloc darys viską, kad paprašyti operacinę sistemą - "Linux", šiuo atveju - Ei, yra jų 100 baitai RAM prieinama? Jei taip, grąžinti tuos baitus man grąžinant iš kurių apie adresą tie baitų, gal? Labai pirmasis. Taigi čia taip pat - ir tai yra vyraujanti C, bet kada jūs susijusius su adresais? Jūs beveik visada susijusios su Pirmasis toks adresas, nesvarbu koks didelis atminties riekė jums yra grąžino, taip sakant. Taigi tegul neria čia. Bandau skirti kaip daug baitų, tiksliai? Na. Styginių ilgis s - tegul padaryti konkretų pavyzdį. Jei s hello, H-El-L-L-O kas eilutės ilgis S, žinoma? Taigi tai penki. Bet aš darau plius 1 apie tai, kodėl? Kodėl aš noriu šešis baitus vietoj penkių? Niekinis pobūdis. Nenoriu palikti išjungti šią Specialusis null pobūdžio. Nes jei aš padaryti Sveiki kopiją ir just do H-El-L-L-O, bet aš ne įdėti kad specialus simbolis, kompiuteris gali neturėti, atsitiktinai, backslash nulio ten mane. Ir todėl, jei aš bandau išsiaiškinti, ilgis kopiją, galiu manyti, kad tai 20 simbolių ilgio, arba milijonų simbolių ilgio, jei aš tiesiog niekada neįvyks paspausti backslash nulį. Taigi mums reikia šešių baitų laikyti H-El-L-L-O Backslash nuliui. Ir tai yra tik būti super analinis. Tarkime, kad aš pamiršti, ką iš char dydis. Mes nuolat sakydamas, kad tai yra vienas baitas. Ir tai paprastai yra. Teoriškai, tai gali būti kažkas skiriasi, kitokią Mac arba kito kompiuterio. Taigi paaiškėja, ten tai operatorius vadinamas sizeof kad jei perduoti jį į pavadinimas Duomenų tipas - kaip char ar int arba float - jis jums pasakys, dinamiškai, kiek baitų char užima apie tai pirma kompiuteris. Taigi tai yra efektyviai tik tarsi sakydamas kartus 1 arba kartų visai nieko. Bet aš darau tai tiesiog būti super analinis, kad tik tuo atveju, char skiriasi kompiuteryje palyginti kasyklos, tokiu būdu matematika visada bus patikrinti. Galiausiai, žemyn čia aš patikrinti null, kuris visada yra gera praktika - vėl bet kuriuo metu mes susiduriame su rodyklėmis. Jei malloc negalėjo duoti me šešių liūlia - tai yra mažai tikėtinas, bet tik tuo atveju - grįžti vieną iš karto. Ir dabar, eiti į priekį ir kopijuoti eilutę taip. Ir tai yra susipažinęs sintaksė, nors kitą vaidmenį. Aš ruošiuosi eiti į priekį ir gauti eilutę ilgis s ir laikyti jį n. Aš tada ketiname pakartoti iš I lygus nulio iki ir įskaitant n, didesnis nei arba lygus. Taigi, kad kiekvienos iteracijos, aš įdėti osios pobūdis s į-osios pobūdis t. Taigi, kas iš tikrųjų vyksta po gaubtas čia? Na, jei tai, pavyzdžiui, yra s - ir aš įvedėte žodžio H-El-L-L-O ir ten Backslash nuliui. Ir vėl, tai yra s nukreipta čia. Ir čia dabar yra t. Ir tai yra nukreipta dabar atminties kopija, tiesa? Malloc davė man visą riekė atmintyje. Aš nežinau, iš pradžių kas bet kurioje iš šių vietų. Taigi, aš ruošiuosi galvoti apie tai, kaip visa krūva klaustukų. Bet kaip tik aš pradedu kilpų nuo nulio toliau aukštyn per iš S, T ilgio laikiklis nulis, ir t laikiklis 1 - ir aš įdėti šią dabar Viršuje - t laikiklis nulis ir s laikiklis nulinės reikšmės kad aš ruošiuosi būti kopijavimo iteracijų h čia, e-L-L-O. Plius, nes aš plius 1 Backslash nuliui. Taigi dabar į palyginti-1.c atveju galų gale, jei aš spausdinti kapitalizacija t, turėtume matyti, kad s nepakito. Leiskite man eiti į priekį dabar ir daryti tai. Taigi, kad Copy1. Dot velniop Copy1. Aš ruošiuosi tipo labas, Enter. Ir dabar pastebėsite, tik kopiją buvo kapitalizuotas. Nes aš tikrai turi du gabaliukus atminties. Deja, jūs galite padaryti kai kurie gana blogai ir gana pavojingų dalykų čia. Leiskite atsigriebti pavyzdį čia dabar, kuri suteikia mums, mažai pavyzdį skirtingos linijos. Taigi tiesiog intuityviai čia, pirmoji eilutė kodo, int žvaigždučių x deklaruoja kintamasis vadinamas x. Ir kas duomenų tipas tos kintamojo? Kas yra duomenų tipas, kad kintamasis? Tai buvo ne Įspūdingos filmą. Duomenų tipas int žvaigždė. Taigi, ką tai reiškia? x bus atmintį int adresą. Paprasta, kaip kad. Y ketinate laikyti adresas int. Kas yra trečioje eilutėje kodo daro ten? Tai paskirstyti kiek baitų, greičiausiai? Keturi. Dėl int dydžio paprastai keturių, malloc keturių suteikia mane parems riekė iš adreso atmintis, iš kurių baitų Pirmasis saugomi dabar x. Dabar mes juda mažai greitai. Žvaigždžių x reiškia ką? Tai reiškia, kad eiti šiuo adresu ir įdėti kokiu numeriu ten? Įdėk numeris 42 ten. Žvaigždžių m reiškia eiti į tai, kas ne y ir įdėti numeris 13 ten. Bet palauk. Kas yra Y šiuo metu? Ką adresas yra m saugoti? Mes nežinome, ar ne? Mes niekada kartą naudojate užduotį operatorius dalyvauja y. Taigi y kaip deklaruojamas antroje eilutėje kodas yra tik keletas šiukšlių vertė, didelis klaustukas taip sakant. Tai gali būti nukreipta atsitiktinai niekam atminties, kuri paprastai yra blogai. Taigi, kuo greičiau pasiektų šį liniją ten, y zvaigzdes lygus 13, kažką blogo, kažkas labai blogai yra apie atsitikti Binky. Taigi pažiūrėkime, ką ketina baigti vyksta binky čia šia minutę ar taip atrodo. [VIDEO PLAYBACK] -Ei, Binky. Pabuskite. Atėjo laikas rodykle įdomus. -Kas tai? Sužinokite daugiau apie rodykles? O, Goodie. -Na, pradėti, manau, mes ketinate reikia keletą patarimų. -Gerai. Šis kodas skiriami du patarimų kuris gali nurodyti sveikaisiais skaičiais. -Gerai, gerai, matau dvi rodykles. Bet jie neatrodo, kad būti nukreipta į ką nors. -Tai tiesa. Iš pradžių patarimų ne pabrėžti, kad nieko. Tai, ką jie atkreipia dėmesį į vadinami Pointees ir nustatyti juos yra atskiras žingsnis. -O, tiesa, tiesa. Aš žinojau, kad. Į Pointees yra atskira. Taigi, kaip jums skirti pointee? -Gerai. Na, šis kodas skiria naują sveikieji skaičiai pointee, ir ši dalis nustato x atkreipti dėmesį į jį. -Ei, tai atrodo geriau. Taigi, kad jis kažką daryti. -Gerai. Aš dereference rodyklė x laikyti skaičius 42 į savo pointee. Už šį triuką, aš reikia mano magija Wand dereferencing. -Jūsų stebuklinga lazdele iš dereferencing? Mm, tai puiku. -Tai kas kodas atrodo. Aš tiesiog sukurti numerį, ir - -Ei, atrodo. Ten ji eina. Daryti ant x taip dereference rodyklė prieiti prie savo pointee. Šiuo atveju saugoti 42 ten. Ei, pabandykite naudoti jį įrašykite šį numerį iš 13 pro kitą žymiklio m. -Gerai. Aš tiesiog eiti per čia y ir gauti skaičius 13 įsteigti. Ir tada imtis Wand dereferencing ir tiesiog - Whoa! -Oh, ei. Tai neveikia. Pasakykite, Binky, aš nemanau, kad dereferencing Y yra gera idėja, nes steigiant pointee yra atskiras žingsnis. Ir aš nemanau, kad mes kada nors padarė. -Hmm. Gera vieta. -Taip, skyrėme žymiklį y. Bet mes niekada nustatyti jį rodytų į pointee. -Hmm. Labai pastabus. -Ei, jūs ieškote geras ten, Binky. Ar galite nustatyti jį taip, kad y punktai tuo pačiu pointee kaip X? -Žinoma. Aš naudoti savo stebuklinga lazdele iš rodyklė užduotį. -Ar tai bus problema kaip ir anksčiau? -Ne. Tai neliečia Pointees. Jis tiesiog keičia vieną žymiklį pažymėti į tą patį, kaip ir kitas. -O, aš matau. Dabar y atkreipia dėmesį į pačioje vietoje kaip ir x. Taigi palaukti. Dabar Y yra fiksuota. Ji pointee. Taigi galite pabandyti lazdelę iš dereferencing vėl siųsti 13 daugiau. -Gerai. Čia eina. -Ei, pažiūrėkit. Dabar dereferencing darbus y. Ir todėl, rodyklės dalintis kad vienas pointee, jie abu pamatyti 13. -Taip. Pasidalyti. Koks skirtumas. Taigi, mes ketiname jungiklių vietas dabar? -O, atrodo. Mes pavėluotai. -Bet - -Tiesiog neužmirškite, tris rodyklė taisykles. Numeris vienas, pagrindinė struktūra yra tai, kad jūs turite rodyklę. Ir ji pažymi perkelti į pointee. Bet rodyklė ir pointee yra atskira. Ir dažna klaida yra sukurti rodyklę, bet pamiršote suteikta pointee. Numeris du, rodyklė dereferencing prasideda į rodyklę ir laikosi rodyklė virš pasiekti savo pointee. Kaip mes visi žinome, tai veikia tik jei yra yra pointee, kuris grįš į Taisyklė numeris vienas. Numeris trys, rodyklė užduotis trunka viena rodyklė ir keičiasi tai, kad rodytų į pats pointee kaip kitą žymiklio. Taigi po perleidimo, dvi rodykles atkreipti dėmesį į tą patį pointee. Kartais tai vadinama pasidalijimo. Ir tai viskas yra į jį, tikrai. Bye bye dabar. [PABAIGA VIDEO PLAYBACK] Davidas Malan: Taigi, daugiau patarimų, daugiau Binky kitą savaitę. Dar pasimatysime pirmadienį.