JASON Hirschhorn: Sveiki A5, visi. Turime įdomių savaitę prieš mus, daugiausia, nes yra tiek daug naujų susiduria šiame kambaryje. Tai nuostabu. Jus daug yra čia atsitiktinai, tai dar geriau. Taigi tikiuosi jums išlaikyti sutikote su mumis. Šią savaitę mes ketiname išleisti Skyriaus urmu rengiant viktoriną. Taigi pagal mūsų darbotvarkę, mes ketiname kalbėti tiek apie išteklių klasės, bet ir viktorinos, tada vėl praleisti klasės kalbėti urmu apie klausimus. Kai baigsime atsakyti savo klausimų, arba jei jūsų klausimai natūraliai veda į tam tikrą kodavimo, aš turi pavyzdžių problemas iš kontrolinius anksčiau, kad mes užkoduoti gyventi skyriuje kartu, kad taip pat auklėti kai kurie kiti geros temos padengti. Taigi, pirma, kaip mes išgyveno už pastaruosius porą savaičių jums priminti, vaikinai, yra išteklių tona rasti šiuo metu. Daugelis iš jų bus neįtikėtinai naudinga Jums, kaip jūs ir toliau studijuoti viktorina 0, nes tai antradienio popietę. Taigi jums visiems buvo mokosi šiek tiek. Yra paskaita pažymi ir šaltinis kodą, kurį turėtų tikrai patikrinti. Žiūrėti šortai. Patikrinkite study.cs50.net. Ir tada, išvardytos toliau, ir šis skaičius kitų išteklių. Vėlgi, viktorina 0 rytoj ne 01:00. Jei to nepadarėte, patikrinkite pro Apie Viktorina 0 dokumento aikštyno puslapis išsiaiškinti kur jūs vartojate viktorinoje. Viktorina prasideda 01:10 ir baigiasi 70 minučių vėliau. Taigi, jei jums parodyti po 01:10, esate ketina gauti, kad daug mažiau minučių nei 70 dalyvauti viktorinoje. Todėl įsitikinkite, kad jūs ten laiku. Jei esate studentas arba plėtinys turi keletas kitų tyrimų aspektus, ji gali būti ne 01:00 rytoj. Bet vėl, patikrinkite Apie Viktorina 0 dokumentuoti įsitikinti, kad jūs žinote, kai jūs vartojate viktorinoje. Parašiau 75 minučių čia. Manau, kad tai tiesa, o ne 70. Ji apima visą medžiagą iš savaitę 0 su praėjusia savaite paskaitą trečiadienį. Ir vėl už šį testą, už tai dokumentas, galite gauti vieną iš abiejų pusių ir 8 1/2 iki 11 popieriaus lapo, kad jūs gaunate naudoti kaip užrašų metu viktorinoje. Daugelis žmonių, jei ne dauguma žmonių, turi Nustatyta, kad vienas labiausiai naudingas būdas studijuoti viktorinoje yra kad tyrimo lape vienas Obliavimo, jų pačių. Taigi, pažvelgti į pastaruosius tie jei mačiau praeities tie. Užmegzti ryšius su draugais pamatyti, kas jie išleisti jų. Bet rankas žemyn, geriausias būdas galite Tyrimas yra eiti per viską ir Kainuos žemyn, kas turėtų ar neturėtų negali priklausyti nuo to lapo popierius, nes tai tik tikrai naudingas būdas jums įsitikinti, jūs ketinate per viską ir kai su juo supažindinti. Dauguma žmonių, matome, nors jie buvo popieriaus lapas sėdi dešinėje šalia jų ant viktorina neišjunkite į jį, nes, vėlgi, kad labai procesas vyksta per informacijos padėjo jiems išmokti. Ar kas nors turi kokių nors klausimų, apie viktorina 0? Ar visiems - Nesiruošiu daryti rankos pakėlimu. Nieko tokio. Aš buvau ketinate paklausti, kas pradėjo studijuoti. Bet aš nenoriu, kad jus visi jie pakelti savo rankas. Taigi, kaip ir sakiau - taip, AVI, eiti į priekį. AVI: Kas būtų naudingas dalykas įdėti į vieną gaviklio? STUDENTAS: Tai priklauso nuo jūsų. JASON Hirschhorn: Gauni naudoti savo sprendimą. Naudingų dalykų įdėti į vieną gaviklio, Jei esate supainioti apie didįjį O Runtime skirtingų tipų paieškas ir rūšių, įdėti, kad ten patogu frantas diagrama. Tokiu būdu, jei esate paprašė, kad viktorina, jums nereikia bandyti skaičius it out ar priežastis per runtime. Jūs galite tiesiog nukopijuokite jį žemyn. Jei pažvelgti į viktorinos praeityje, nes daugeliui kartus, ten veikia laiko klausimus. Taigi, kad būtų iš geras pavyzdys dalykas įdėti į vieną gaviklio jūsų. Kiti gerų dalykų, kurie buvo pateikti, jei esate supainioti apie tai, kaip deklaruoti funkcija ar ką skirtingų dalių funkcija deklaracija yra, rašykite kad ten, bendrinis versija ir tada gal pavyzdys. Jei esate supainioti apie rodykles, kaip rodyklės darbas schema turbūt tikrai naudinga. Jei esate supainioti apie rekursijos, A imties rekursinį funkcija yra taip pat galėtų tapti tikrai naudinga. Ar tai duoti jums keletą idėjų? AVI: Jūs turite suprasti, Visa kaupimas procesas, kaip kaip kad visi darbai? JASON Hirschhorn: Viskas kad buvo taikoma galėtų parodyti ant viktorina. Klausimai - bet vėlgi, kai viskas bus įvertintas labai, nei kiti. Kai kurie dalykai turi sugalvoti naujo ir vėl klasėje, į paskaita ir pjūvių. Kiti dalykai turi ne sugalvoti, kad dažnai. Mes daug kalbėjomės apie # include ir -L kas nors ir ką tie reiškia rengimo procesas. Mes daug kalbėjomės apie GDB, kabintis, šios skirtingos vėliavos, kad mes naudojame, kai mes kompiliuoti kažką, o ką make15, pavyzdžiui, tikrai tai ir tikrai veikia. Mes ne kalbėti daug apie kiekvienas žingsnis rengimo procesas. Mes vis dar kalbėjome apie tai. Taigi, tai dar kažkas, kad jūs turėtų būti susipažinę su. Bet vėl, mes neketiname būti - dalykų, kurie ateina dažniau klasėje Labiau tikėtina, kad sugalvoti daugiau dažnai ir būti griežčiau įvertintomis remiantis viktorina. Cool. Visi kiti klausimai apie viktorina 0? Gerai, kad aš įdėti sąrašą temos lenta. Aš nuėjau per mokymo programas. Aš nuėjau per peržiūros atkarpoje nuo praeitą naktį ir tos skaidres sugalvoti su neišsamų temų sąrašą kad mes, kuriems iki šiol CS50 ir dalykų, kurie gali ant viktorina. Taigi, aš nesiruošia eiti per kiekvienas iš jų. Tai užtruktų daug daugiau laikas, nei turime dabar. Bet aš tai čia tikiuosi stumtelėti jūsų atminties, kad tai, kas gali arba negali būti susipažinę su jumis. Ir aš norėčiau praleisti didžiąją skyriuje atsakyti į jūsų klausimus apie Šios temos, temos, šios gairės netaikomos. Mes galime parašyti pseudo kodą. Mes galime parašyti tikrą kodą siekiant užtikrinti, kad jūs - Galiu atsakyti į jūsų klausimą ir padėti visi iš esmės suprasti daug iš šių temų, todėl jūs jausitės pasirengęs ir patogiai vyksta į viktorina rytoj. Taigi skaityti daugiau sąrašą. Jūs tikiuosi ateiti į skyrių su kai kuriais klausimais taip pat. Kai būsite pasirengę, pakelkite ranką ir mes pradėti. Turėkite omenyje, kad jūsų klausimus, nėra kvailų klausimų. Girdėjome, kad daug. Ir jūsų klausimus, aš esu pasiruošęs statyti, daug kitų žmonių ir sėdi čia ir žiūrėti internete turi taip pat. Taigi, galite tik padėti žmonėms, klausinėti. Marcus. MARCUS: tarp kamino ir krūvos, ten preliminariai skirtos dalis atminties, kuri yra apibrėžiama kaip tai yra kamino ar krūvą? Arba, kaip tai veikia, tiksliai? JASON Hirschhorn: Didysis klausimas. Aš einu atgal atsekti truputį. Ar visiems - prašome būti sąžiningas čia. Aš žinau, aš prašau jus pakelti savo ranka priešais savo bendraamžių. Tačiau yra žmonių, kurie jaučiasi nepatogu su kamino ir krūvos ir norėčiau eiti per, kad ir ką tie reiškia? Pakelkite rankas, jei: - Gerai. Ačiū. Taigi, mes ketiname eiti per kaminą ir krūva tikrai greitai ir tada perkelti į atsakyti į jūsų klausimą. Taigi, jei mes atkreipti dėmesį į langelį atstovauti atminties į kompiuterį, kas yra keletas dalykų, kad pereiti į šį langelį? Pagrindinis. Pagrindinė funkcija. Kur pagrindinis eiti? STUDENTAS: [nesigirdi]. JASON Hirschhorn: todėl mes įdėti pagrindinis čia. Kas dar eina į šį laukelį? STUDENTAS: funkcijos, kad jūs vadinate. JASON Hirschhorn: funkcijos , kurį mes vadiname. Ir kur jie keliauja? STUDENTAS: Į kaminą. JASON Hirschhorn: Jie eiti į kaminą. Taigi, mes ketiname tai vadina dalykas žemyn čia kamino. Ir iki viršaus, mes turime krūvą. Taigi atmintis yra ne langas, kaip šis. Bet ji iš tikrųjų yra gana panašūs. Tai bus dėžių daug daugiau ir daugiau, priklausomai nuo to, kaip didelis savo kompiuteris yra arba, kaip didelis jūsų atmintis. Tuo citata-citatos "iš apačios" yra kaminas. Ir yra keletas dalykų, kad eiti į kaminą. Ir tie, priklauso nuo funkcijų jūs turite savo kodą. Jūs visada turi vieną funkciją savo kodas vadinamas pagrindinis, todėl visada skyriuje žemyn čia kamino skirtas pagrindinis. Šie kamino sekcijos vadinami kamino rėmai. Kai Jūs skambinate kitą funkciją, tarkim pagrindinis ragina dvejetainis paieškos funkcija, mes įdėti kitą rėmą ant kamino. Tiksliau, mes ketiname paaukoti atminties riekė ant mūsų kompiuteriui laikyti dvejetainis paieškos s vietos kintamieji ir paleisti dvejetainis paieška kodas. Taigi mes vadiname binarinę paiešką. Šiuo atminties riekė, mes ketiname saugoti savo vietos kintamieji. Mes ketiname saugoti savo printf skambučius. Kad ir kas nutiktų, kad funkcija yra bus saugomi teisę ten. Dvejetainė paieška ketina vykdyti. Ji ketina baigti vykdymą. Kas yra C žodis, kuris ženklina kad funkcija turi užbaigti jo vykdymą? STUDENTAS: Atgal. JASON Hirschhorn: Grįžti. Taigi, jei matote grąžinimo pareiškimą, funkciniai galai kai jis hitai kad. Taigi, dvejetainis paieškos bus hit savo pelną. Šis atminties dalis bus iš esmės būti atlaisvinti. Ir pagrindinis sugrįš į vykdymą. Taigi pagrindinis sustos ten, kur buvo, skambučių Dvejetainė paieška, kažkiek grąžos vertę, ir toliau vykdo. Tai kamino rėmas išnyks. Jei mes vadiname rekursinį funkciją, kuri yra funkcija, kuri vadina save per ir daugiau, mes galime gauti, - sako mes padarė binarinę paiešką rekursyviai. Mes galime gauti dvejetainis paieškos versiją vieną, Dvejetainė paieška du, dvejetainis paieškos trijų, dvejetainis paieškos keturių, Dvejetainė paieška penki. Ir tai galutinis dvejetainis paieškos penkių bus hit pagrindą, ir kamino rėmai grįžti ir laikyti uždarymą kol mes grįžti į pagrindinį. Mes galime eiti per rekursijos į šiek tiek. Bet visa tai pasakyti, jei esate skambina keletą funkcijų vienu metu, ten bus kelių kamino Rėmelio kamino. Kaupas, kita vertus, iki čia nėra funkcijas, ne lokalūs kintamieji. Tai dinamiškai paskirstoma kintamieji. Taigi tai yra kintamieji, kurie gali būti inicializuoti arba pagrindinis ar veikti, kad pagrindiniai skambučius. Bet savo kodą, jie gali būti inicializuoti. Ir inicijuoti dinamiškai skiriama kintama. Ką funkcija C mes naudojame? STUDENTAS: malloc. JASON Hirschhorn: malloc. Jūs vadinate malloc. Gauni atminties vietos. Ir kad atminties vietos yra krūvos. Ir kad atminties erdvė lieka ten kol skambinti nemokamai. Taigi dinamiškai priskirti kintamieji krūva egzistuos tol, kol jums norime, kad jie egzistuoja, ir jie nebus išeiti, kol jums aiškiai pasakykite jiems eiti šalin. Jūs galite kurti juos vieną funkciją. Ši funkcija yra kaminas rėmas išnyks. Bet, kad kintamasis vis dar egzistuoja krūvą, kol jis atleidžiamas, potencialiai pagal funkciją, vadinamą Dvejetainė paieška ar whatever. Taigi tos krūvos kintamieji ten taip ilgai, kaip norite juos ten pasilikti. Ir jie gauna įdėti čia. Ir tada šalia vienas gauna įdėti ten. Jie gaunu užpildyti, ir jie ten pasilikti, kol skambinti nemokamai. Ir iš esmės, krūvos ir kamino, gauti Marcus klausimą, auga vienas link kito. Ir jei jie paleisti į vienas kitą, jūs sunaudota visą atmintį savo kompiuteris, ir jūsų programa bus mesti nes jūs neturite daugiau atminties palikta naudoti. Tarp jų yra potencialiai kitų dalykų. Tačiau šio kurso taikymo sritį, jums nereikia nerimauti, kad. Taigi, tai buvo atsakymas į jūsų klausimą. Nesijaudinkite dėl to. Bet tai buvo seniai atsakyta. Viskas, ką jums reikia žinoti krūvos ir kamino bus - vienas pradeda apačioje. Kamino nėra. Krūvą tai ten. Jie augs arčiau vienas kito. Ir jei jie paliesti, tai problema. Jūs bėgo iš atminties. Bet taip pat, be to, žinoti, kur jie, kas yra saugoma, tiek kamino ir krūvą. Curtis. CURTIS: Kai jie susiduria, yra tai, kad kamino perpildymo? JASON Hirschhorn: Kai jie susiduria, tai nėra nepakeliama. Kamino perpildymo yra skirtingas sritis kad mes galime eiti per, jei norite. Gerai, mes grįžti į tą, kuris šiek tiek. STUDENTAS: Kas žodis vadinamas kai jie nukentėjo vienas kitą, kamino ir krūva? JASON Hirschhorn: Nes dabar, nesijaudinkite. Tiesiog žinau - Aš atsakyti į šį klausimą po klasę. Jei jie paleisti į kitą, jums pritrūko iš atminties, nes ten yra ne daugiau vietos ten. STUDENTAS: Atsiprašome, kas seg kaltės? JASON Hirschhorn: segmentas gedimas gali būti raginama - tai priklauso nuo to, kodėl SEG kaltės yra vadinamas. Kartais jūsų kamino perpildymo, jis bus pasakyti seg kaltės kaip klaidos. STUDENTAS: Ką apie dereferencing null kintamasis? Ar tai seg kaltės? JASON Hirschhorn: Dereferencing null rodyklė - Gerai, kad jei turite rodyklę, kad jūs prilyginta nuliui, patarimų, išėmimą iš apyvartos, parduotuvė atminties adresai kaip savo vertybes. Ir nulinis žymeklis yra iš esmės saugoti 0, 0-oji spręsti šiuo kintamuoju. Taigi 0x, 0, 0, 0, 0, ir tt. Kad 0-oji adresas atminties, kuri nėra mūsų nuotrauką, tai ten kažkur, tai saugomos už kompiuterį. Mes neleidžiama liesti. Taigi, jei jūsų programos vykdymo, jei kažkas bando eiti į atmintį adresas 0, jis žino, kad kad yra paliktas tuščias. Ji žino, nieko turėtų būti ten. Taigi, jei jūs bandote ir naudoti kažką ten ir kažką gydyti, kaip ten ar bando eiti į tą vietą, jūs ketina gauti seg kaltės ar klaidos. Ar tai atsakymas į jūsų klausimą? Ir dabar mes grįžti kamino perpildymo. Daiktai kamino, kaip jus vaikinai mačiau anksčiau, - tegul atkreipti close sudarytas iš kamino rėmo. Ar visi gali pamatyti, kad? Taigi, mes turime stack frame. Mes taupymo masyvą ir kaip vietos kintamasis šią funkciją. Taigi sako, kad mūsų masyvas turi penkis taškus. Visi šie penki bus saugomi toje kamino rėmo. Jei mes pradedame rašyti už Ribas šio masyvo - todėl, jei mes pradėti rašyti į, tarkim, kad tai 0. Tie penki indeksai mūsų masyvo. Jei mes pradedame rašyti į 5, indeksą, kuris mes neturime, kai mes turime masyvo dydis 5, pradėsime rašyti į 6 puslapis, 7, 8, 9, mes galime gauti kamino Perpildyta klaida. Apskritai, tai ne - jūs tikriausiai gausite į bėdą jei jūs einate per vieną. Bet apskritai, gausite į dauguma problemų, jei jūs einate per kurį daug ir jums eiti taip toli, per parašykite per grąžinimo adresas, kad funkcija, kuri yra įsikūrusi apačios kamino rėmo. Kadangi, tiesa? Jūs - ir - atsiprašau. Ne ", nes į dešinę." Į kaminą rėmo, turite jūsų vietos kintamieji. Pačioje apačioje kaminą rėmas yra atgalinis adresas. Štai kur funkcija eina, kai jis baigėsi. Ir jei jūs įrašysite, kad grįžti adresas, tada, kai tai kamino rėmas, kai jūs einate per kaminą rėmo ir vykdant kiekvieną eilutę, jūs ketina eiti į savo naują atgalinį adresą tai ten parašyta, o ne Tikrasis vienas. Ir tai, kaip mes matėme kai saugumo pažeidimai gali atsitikti su kompiuteriu. Taigi nepakeliama, trumpai tariant, yra tada, kai jūs perrašyti dalį kamino jums turėtų naudoti, vietos kintamasis jums turėtų naudoti, ir ypač, kai jūs pradedate perrašyti svarbių dalykų, pavyzdžiui, grįžti adresą. Ir tai, kai jūs gaunate klaidos pranešimą. O gal net galima pradėti net rašyti į - pasakyti, dvejetainis paieškos buvo tiesiai virš pagrindinis. Jei perrašė daug, jums galėtų rašyti į pagrindinį. Bet apskritai, jūs gaunate klaidos prieš tada, nes kompiuteris žino Jūs darote tai, ką neturėtų daryti. Taip. STUDENTAS: Koks skirtumas tarp kamino perpildymo ir buferio? JASON Hirschhorn: Buferio yra daugiau bendrinis tipas ką aš ką tik aprašytos. STUDENTAS: Taigi nepakeliama yra pavyzdys buferio. JASON Hirschhorn: Būtent. Tai masyvas mes galime galvoti, kaip buferis, už ką vidun erdvė Tai kamino buferio. Galėtume turėti krūvos buferio perpildymą. Jei ten buvo buferis, kuris yra dažnai yra masyvas krūvą, ir mes perrašė tas ribas, tuomet mes turėti krūvos buferio perpildymą. Ir po šio kurso taikymo sritį, jie aptiko šiek tiek kitaip. Kompiliatorius turi ypatingą būdai aptikti kiekvieną. Bet buferio yra bendresnio pobūdžio tipo ką aš aprašyti, kuris buvo kamino buferio. Ar, kad atsakyti į jūsų klausimą? Saldus. Yra dar kitų klausimų, susijusių į kaminą arba krūvą? Taip. STUDENTAS: Aš žinau, jūs turite laisvų stygų nes jie į krūvą ir jūs nenorite, kad ištekėti atmintį. Bet jūs turite išlaisvinti globalių kintamųjų ir stuff like that? Ar jie automatiškai paleistas? JASON Hirschhorn: Geras klausimas. Taigi CS50.H, mes sukursime tai, ką Jums vadinamas eilutę. Eilutė yra tikrai tai, ką? STUDENTAS: Char žvaigždė. JASON Hirschhorn: char žvaigždė, žymeklis į simbolį, rodyklė į simbolių masyvas. Štai ką eilutė. Taigi mums reikia atlaisvinti jį, nes getstring, kuriuos mes naudojome daug - string pavadinimas yra getstring - kad mallocs mums šiek tiek apie atmintį užversti ir tada grąžina rodyklę į Pirmasis požymis, kad eilutę, char žvaigždė. Taigi, neva, jei nebuvo raštu nemokamai bet savo stygos kad jūs vadinamas iki šiol, jūs turite buvo nesandarus šiek tiek atminties. Žinoma, mes ne kalbėjo apie tai, kad niekas manimi Dotarłeś rūpesčių daro. Tačiau ateityje, taip. Kai Jūs skambinate getstring, jūs mallocing šiek tiek erdvės krūvą. Ir jei jums nereikia skambinti nemokamai vėliau, kad eilutę, turite atminties nutekėjimas. Kad atsakyti į jūsų klausimą? Taip STUDENTAS: Taigi, kaip tai padaryti, mes naudojame nemokamai tiesiai prieš mainais? Kaip, pagal taikymo sritį, manau, jei mes sakome, pavyzdžiui, int pagrindinis, per apimtis kodo, kad yra per tuos garbanotas petnešos, tiesiai prieš - jūs žinote, kur norite paprastai įdėti grąžą. Ar jūs įtraukėte nemokamai prieš tai? JASON Hirschhorn: Taigi, jūs galite įdėti nemokamai kur norite įdėti nemokamai. Nes tai yra dinamiškai paskirstoma kintamieji, nes jie gali gyventi ne dėl ypač taikymo sritį funkcija, jei Jūs skambinate malloc į atskiras funkcija, pavyzdžiui, getstring, galite skambinti nemokamai pagrindinis. Jums nereikia vadinti į konkrečios funkcijos kur malloc vadinamas. Bet jums reikia jį pavadinti prieš pagrindinius pajamų. Ir tai tikrai priklauso. Tai priklauso nuo to, kodėl jūs malloced kad vietos į pirmąją vietą. Kai kurie žmonės vadina atlaisvinti gana greitai. Kai kurie žmonės negali skambinti nemokamai iki jų programos pabaiga. Ir jie bus eiti per ir nemokamai viskas. Tai priklauso nuo to, kodėl jūs vadinamas malloc. STUDENTAS: O ką jūs pasakytumėte jei vadinamas naudojimo getstring? Jūs norite pasakyti, be ko? JASON Hirschhorn: Taigi už sintaksė nemokamai yra tiesiog nemokama, atviro skliaustas, netoli skliaustas, o rodyklės pavadinimas. Taigi, jei jums reikia parašyti styginių pavadinimas yra getstring, galite įdėti pavadinimą čia. Štai iš rodyklės pavadinimas. Ir tai žino nemokamai, kad atmintį. STUDENTAS: Taigi, kai jis išlaisvina, kad atmintyje, rodyklė vis dar atkreipia dėmesį į tą vietą, atmintyje? Arba yra žymeklis ir ištuštinti adresas, kad ji nurodo. JASON Hirschhorn: Turėtume stengtis, kad. Turėtume kodas,. Leiskite grįžti, kai mes gauti kodavimo, ir tegul kodas,. Ir jei jūs norite išsiaiškinti atsakymą to, Jūs taip pat galite kodas, tuo pačiu metu. Bet tai didelis klausimas. STUDENTAS: Ar įmanoma nemokama kažkas per anksti? Taigi, jūs vis dar reikia jūsų programoje, ir jums išlaisvinti, kad atminties? JASON Hirschhorn: Taip. Tai įmanoma, jei nemokamai kažkas ir tada ją vėl naudoti, jums paleisti į klaidos. Bet tai jums, nes jūs išlaisvino kažkas ir tada pavadino jį vėliau. Taigi, tai buvo programuotojas klaida. Bet taip. Jūs galite rašyti kad. Bet daugiau klausimų dėl - Taip. STUDENTAS: Taigi, jei jūs turėjo tik išlaisvinti jį apskritai prieš Programa baigiasi, ar tai reiškia, jei Programa baigiasi ir jūs neturite atlaisvinti jį, kad atmintis vis dar skiriama? JASON Hirschhorn: Jei jūsų programa baigiasi ir jūs pamiršti nemokamai kažką, tada kad atmintis buvo skirta per Jūsų programos gyvenime. Kai jūsų programa užsidaro visiškai kad atmintis nesiruošia pasilikti ten amžinai. Kompiuteris yra pakankamai protingas, kad žinotų kad kai programa uždaroma, ji turi atsikratyti visų atmintyje, kad buvo susijęs su ta programa. Tačiau, yra įrankių, galite paleisti dėl programos, siekiant nustatyti, ar, kai programa baigta, Jūs pamiršote atlaisvinti šiek tiek atminties. Ir kito problema nustatyti, kur jūs naudojate malloc ir naudojant patarimų, jums bus rodomi tai programą į savo programą pamatyti, jei, kai pagrindiniai grįžta, jūs turėjote kai dalykų, kurie buvo likę unfreed. Taigi jie nesiruošia likti malloced amžinai kompiuterio. Tai būtų išlaidavimas, nes labai greitai, kompiuteriai būtų paleisti iš atminties. Bet jei jie paleisti iki savo pabaigos programuoti ir jie nėra atskirti ir savo Programa išeina, kad vis dar problema kad ši priemonė padės spręsti. STUDENTAS: Ar tai Valgrind? JASON Hirschhorn: Tai vadinamas Valgrind. Ir jums bus - STUDENTAS: Bet mes neturime žinoti kad viktorina, nors? Aš turiu galvoje, jis kalbėjo apie šiek tiek į paskaitą. JASON Hirschhorn: Taigi Valgrind yra tos įrankio pavadinimas. Žinant, ką jis daro, yra pakankamai viktorinoje. Bet jūs ne naudoti jį dar ant savo problema nustatyti, nes mes neturėjome problema rinkinys, kuris aiškiai sprendžiami su malloc ar jūs naudojate malloc. Taigi jūs turite nenaudojama Valgrind dar. Bet jūs naudosite jį anksčiau o ne vėliau. STUDENTAS: Ar galite tai pakartoti kas Valgrind yra? JASON Hirschhorn: Atsiprašome? STUDENTAS: Ar galite tai pakartoti, ką iš Valgring tikslas? JASON Hirschhorn: Valgrind yra pavadinimas - kaip GDB padeda jums derinti savo programas, Valgrind padeda jums išsiaiškinti, ar dalykų nebuvo paleistas kai jūsų programa uždaroma. Taigi jums paleisti jį į savo programą. Ir jūsų programa išeina, ir ji pasakys Jūsų programa, vadinama malloc tai daug kartus to daug baitų, ir jūs tik vadinamas nemokamai tai daug kartų. Ir todėl jums paliko šių daug baitų be išlaisvinti. Arba ji pasakys jūs išlaisvino viską. Geras darbas. STUDENTAS: Gerai. Ir tai vadinama Valgring? JASON Hirschhorn: V-L-G R I N-D. STUDENTAS: klausimas apie rodykles. Taigi sako, kad jūs n žvaigždė X reiškia kažką. O tai reiškia, kad ir kokia jūs pateikėte yra tai, kad tai, kas buvo įdėti viduje Kas yra X nurodydama, arba X žymeklis? JASON Hirschhorn: Ar galite pakartoti klausimą? Galime padaryti, o jūs pasakyti? STUDENTAS: viktorinoje, iš tikrųjų, tas, kurį pasiuntė mus, tai buvo, pavyzdžiui, char žvaigždučių tiesa Lygu CS50 akmenis, tiesa? Taigi ar tai reiškia, kad ši CS50 uolienos yra tai, kas tiesa yra nukreipta? JASON Hirschhorn: Taigi jūs kalbate apie char žvaigždė eilutę, kaip kad veikia? Taip. Gerai. Leiskite atkreipti tai čia. [PUSĖ POKALBIS] JASON Hirschhorn: Taigi šis kintamasis bus tipo char žvaigždė. Kaip didelis yra kintamasis Tipo char žvaigždė? Kiek baitų? Studentai: keturi. JASON Hirschhorn: Tai keturių baitų. Kiek teisės yra kintamasis tipas int žvaigždė? Studentai: keturi. JASON Hirschhorn: keturi baitai. Jei tai žymeklis, tada jis visada yra keturi baitai, nes rodyklės, jų vertė yra atminties adresą. Ir atminties adresai apie CS50 Prietaisas yra keturių baitų ilgio. Taigi, kai mes vadiname getstring, arba, kai mes tarkim, stringname lygios, tada kabutes įdėti eilutę, mes dedame - gerai, kad šiek tiek kitoks. Mes tai getstring kaip pvz. Arba char žvaigždė kažkas lygi eilutę. Atsiprašome, duok man pavyzdį kad jūs perskaitėte? STUDENTAS: char žvaigždė tiesa Lygu "CS50 akmenys" į kabutes. JASON Hirschhorn: Taigi ši žvaigždė, tai mes tai vadiname kintamojo X mūsų bendrieji tikslai. Mes sukūrėme kintamąjį pavadinimu x. Tai tipo char žvaigždė. Tai rodyklė į seriją simbolių. Taigi, čia apačioje - Taigi, tai yra, kaip tai būtų dirbti atmintyje. Tai būtų laikyti atminties adresą. Būtų nelaikykite atminties adresą Pirmasis simbolis masyve. Ir tada, kai jūs po žymeklis, galėtumėte gauti pirmąjį simbolį. Ir jei jūs skaitote šį dalyką kaip eilutę, jūsų kompiuteris yra protingas Pakanka žinoti, skaityti visą šį dalyką kol ji gauna neigiamą reakciją 0. Bet jei jūs skaitote jai simbolį laikas, todėl jūs iteravimu per šios eilutės, tada jums bus tik skaityti charakteris metu, kol gausite Backslash 0. Kad neatsakyti savo klausimas, nors. STUDENTAS: Taip, bet jūs turite ne malloced kad erdvė dar už tą rodyklę. JASON Hirschhorn: Taigi, aš nesu visiškai tikras, jūs žiūrite į ką, nes aš ne padaryti šį testą. Tai turėjo būti naudinga išteklių iš kito TF. Jei kuriate STRING kamino ar vietos kintamąjį, jis bus tiesiog masyvas mokesčius, o ne paprastai char žvaigždė nukreipta į kita eilutė. Bet aš nežinau. Tai galėtų būti rodyklė į kitą STRING kamino taip pat. Taip. STUDENTAS: Aš žinau, kad jūs turite paskirstyti atmintį, jei žymeklis gauti pareiškė viduje kitos funkcijos. Ar jums reikia padaryti tą patį, jei tai deklaruoja viduje pagrindinis, jūs naudojate jį viduje pagrindinis? JASON Hirschhorn: Taip taip. Galite paskelbti žymeklį į bet atminties adresas atminties. Jis gali būti atminties adresas vietos kintamasis, nors dažnai, žmonės nenori paskelbti atminties adresai vietos kintamuosius, nes jie eiti toli kartą, kad funkcija grąžina, kuris Štai kodėl mes paprastai malloc dalykų. Bet taip, galima deklaruoti rodyklę suteikia kitam vietiniam kintamąjį. Tai tiesiog paprastai nėra daroma. Bet aš galiu pažvelgti į tai žiūrėti specifinis dalykas po klasę. Taip. STUDENTAS: Manau, kad tai yra tarsi kas manimi prašoma. Tai atrodo keista, kad būtų Inicijuojama rodyklė ne taip adresas, bet tai, ką atrodo vertę. Atrodo CS50 yra tai, kas viduje dalykas yra pabrėžė ir ne faktinis adresas, tiesa? JASON Hirschhorn: Štai ne tas atvejis, nors. Tai nėra tai, kas vyksta. Kai paskelbti char žvaigždė tai adresas atmintyje. Rodykles visas atminties adresai nukreipta į ką nors kita. Kad kažkas gali būti kamino, bet beveik visada yra krūvos, kaip mes pamatysime ji naudojama. Bet stringname Lygu dvigubo citata "Getstring", mes matome, kad ir mes gali peržiūrėti, kad ir kodas,. getstring eilutė nebus išsaugotas kad kintamasis, ar kokia eilutė pavadinimas nėra išsaugomas tuo, kad kintamasis, nes tai ne kaip patarimų dirbti. Ar tai prasminga? STUDENTAS: Taip. JASON Hirschhorn: Gerai. Tikimės, kad nebuvo paini visiems. Bet jei jis buvo, mes galime pažvelgti į jį dar kartą į šiek tiek, nes mes iš tikrųjų ketiname koduoti kažką, kad bus tikiuosi dirbti su eilučių ir padės jums jaustis patogiau su jais. Visi kiti su šiuo klausimu susijusį temos arba kitos temos, kurios Aš įdėti atgal į viršų? Ir - dabar. Taip, Alden. ALDEN: Taigi tai yra visiškai nesusiję, bet mes galime tiesiog eiti per tikrai greitai ką reikia žinoti apie tarp 32 ir skirtumas 64 bitų mašina? JASON Hirschhorn: Taip. Taigi 32 bitai yra kiek baitų? ALDEN: Tai keturių baitų. JASON Hirschhorn: Tai keturių baitų. Ir 64 bitai yra kiek baitų? STUDENTAS: Aštuoni. JASON Hirschhorn: aštuoni baitai. Taigi dar kartą, aštuoni bitai yra vienas baitas. Jūsų CS50 prietaisas 32 bitų mašina. Taigi atminties adresai keturių baitų ilgio. Yra 2 iki 32 atminties adresai. Nuo 0 iki 2 iki 32 minus 1. Ir aš nesu teigiamas, tačiau tai tikriausiai, ką jums reikia apimtis žinau, už 32-bitų mašina, kad atmintis adresai, vėlgi, keturių baitų ilgio, ir tai didžiausia suma atminties adresus. Be to, duomenų tipai - tai gali būti kažkas toks gerai, kad yra verta paminėti. Iš duomenų tipo dydis priklauso nuo mašina dirbate su. Taigi char, vienas simbolis, kaip daug baitų apie mūsų CS50 prietaiso? Vienas baitas. Ir tai tikrai vienas baitas kaip gerai 64 bitų kompiuteryje. Ir dauguma duomenų tipai yra tas pats numeris baitų abiejų mašinų. Tačiau kai kurie duomenų tipai bus kitoks abiejų mašinų. Taigi, kad būtų potencialiai Vienintelis dalykas, ką jums reikia žinoti. Bet net ir tai, manau, yra už ribų - Aš beveik teigiamas, jei pažvelgti atgal senas viktorinos, ji sako, prisiimti dėl kodavimo problemas jūs per 32 bitų mašina. Bet yra, kad eiti kartu su, kad Jei esate suinteresuoti, yra duomenų tipai, kurie yra tos pačios dydis ant visų mašinų. Jei mačiau kažką panašaus uint32_t, jums gali arba ne mačiau, kad. Tai duomenų tipas. Tai sako, kad 32 bitai nesvarbu ką aparatas tai yra. Taigi, kai žmonės rašo Nešiojamasis kodas, jie tikriausiai nebus panaudoti Ints. Jie, o ne naudoti šiuos kitus duomenis rūšys, kad jie žino, bus tas pats dydis apie kiekvieną mašiną. Madhu. Madhu: turėjau klausimų dėl rengimo procesas. Taigi, jei norite rašyti programą, kuri naudoja kaip CS50 ar kažką biblioteka pavyzdžiui, kad aš žinau, kad biblioteka turi, tam tikru momentu, būti surinkti ir susieti in Bet kiek tai atsitiks per Jūsų programos kompiliavimas? Kokia šios bibliotekos procesą atsiranda tada, kai esate rengiant savo programą? JASON Hirschhorn: Taigi eikime per Paprastai šio proceso etapai. Jūs rašote savo. C failą. Jūsų. C faile # include savo header bibliotekos, pavyzdžiui, cs50.h. Ką reiškia, kad aštrus yra linija daryti, kad jūsų programa? Akchar. AKCHAR: Ji priduria, prototipų importas iš antraštės funkcijos bylos bibliotekose. JASON Hirschhorn: Būtent. Ji priduria, šiuos funkcinius prototipus Jūsų kodas. Taigi, jei jūsų kodas yra rengiami ankstyvosiose stadijose, kompiliatorius žino kad tikrai egzistuoja šios funkcijos, ir kad kažkur jie buvo nustatyti. Į. H bylos neapima apibrėžimai šių funkcijų ar kaip jie faktiškai dirba. Cs50.h tiesiog yra kažkas, kad sako getstring yra realus dalykas, kad gali atsitikti. Ir standardio.h sako printf yra realus dalykas, kuris gali atsitikti. Taigi jūsų C kalbos su šiuo klausimu. Antraštė failas paleidžiama virto kai Mašininio skaitymo kodas, kuris galiausiai bus paverstas dvejetainiu kodas, 0 "ir" 1-aisiais. Ir tai kodas, kuris galiausiai paleidžiama vykdyti. -L CS50 linija - pavyzdžiui, kai rašote Zaszczękać - ir tada yra-l CS50, rašote, kad in Ir pamatysite, kad. Kai rašote, kad, jums matyti, kad linija čia. Ir mes matome, kad per sekundę, kai mes kodą arba vėliau, kai mes kodu. Bet tai-l CS50 linija daro kažką šiek tiek kitoks, nei # include cs50.h. Ką tai-l CS50 linija daryti? Avi? AVI: Aš noriu pasakyti, kad jis susieja su funkcija biblioteka skambinti, kaip Õ. failus. JASON Hirschhorn: Taigi labai arti, jei ne vietoje-ant. -L CS50 mano dvejetainis failas ir susilieja su jūsų dvejetainis failas. Taigi cs50.h, nėra jokio lūžis cs50.h iš C kalbos į dvejetainį kas vieną kartą jis naudojamas. Tai būtų kvaila, nes tai Būtų prarasta daug laiko. Taigi jis jau buvo sudarytas ir kreipėsi į vykdomąjį. Ir dabar jis bus sujungtos su failo pabaigoje. Taigi tie 1-ųjų ir 0 s vyksta sujungti su jūsų tie ir 0 s pabaigoje. Taigi, dabar jūs iš tikrųjų turi faktinį 1 "ir" 0 yra, kad nustatyti, kaip getstring, Pavyzdžiui, darbų, arba kaip printf, pavyzdžiui, veikia. Ir daugiau informacijos, ten trumpas kompiliatoriai, kad Nate suteikia, kad jūs turėtumėte patikrinti, kad eina per šiuos žingsnius. Bet - Taip. STUDENTAS: Ar jie visada o bylos. kai jie bibliotekoje forma, pasirengusi būti sujungti, susieti - kaip jie dvejetainiu kodu? JASON Hirschhorn: Gerai. Kas - STUDENTAS: Ar tai visuomet taikytina bibliotekos, kai jūs juos susieti? JASON Hirschhorn: Taip. Taigi čia. Ai failai, kurie bus mašina kodas, kuris taip pat bus paslaptingas jums. Jums nereikia nerimauti juos. Bet apskritai, taip, jie bus būti. O failai pasiruošę eiti. STUDENTAS: Taigi, kai jūs laivo į biblioteka, jūs tik laivas . h. O? Jūs neturite pervežti. C arba. Ai. JASON Hirschhorn: Taigi - ir tai yra šiame trumpame, taip pat, jei ši informacija atrodo, kad ateina tiek greitai. Bet apie kompiliatorius trumpas kalbama apie tai, taip pat. Kai laivas yra biblioteka, jei laivas . h failo antraštės, tie funkcija prototipai ir 1-ųjų ir 0 ųjų, tai viskas, ką reikia pateikti. Jums nereikia pateikti kaip funkcija veikia,. c failas. Nes abstrakcijos taškas, arba API punkto, šiuo SPL punktas Stanfordo nešiojamų biblioteka, tai Jums nereikės nerimauti apie tai, kaip nauja GRect veikia, arba kaip perkelti darbus, arba kaip pridėti darbus. Viskas, ką jums reikia žinoti yra tai, kad priedas yra funkcija, galite naudoti, ir ji tai daro. Taigi jūs tikrai nereikia žinoti, kaip tai parašyta C. Jums tereikia žinau, čia yra funkcijos, ką jie padaryti, ir čia yra 1 "ir" 0 s kai tikrai norite juos naudoti. Cool. Bet daugiau klausimų dėl kompiliatorius ar kitos temos, ant lentos? STUDENTAS: Turiu klausimą, įgyvendinant rekursinių funkcijas. Klausimas apie rekursijos. Aš turėjau jausmą, kad būtų sugalvoti. Tad greitai pereiti rekursija su konkrečių Pavyzdžiui, faktorinė funkcija. Kadangi tai yra pavyzdys, dažnai ateina arba naudojamas iliustruoti rekursija. Taigi "4!" suprantama kaip 4 faktorialas. Ir ką 4 faktorialas reiškia? Ką tai padaryti? Kaip jūs apskaičiuoti 4 faktorialas? 4 kartus 3 kartus 2 kartus 1. Taigi dar vienas būdas parašyti 4 faktorialas yra parašyti tai. 4 kartus 3 faktorialas. Kadangi 3 faktorialas yra 3 kartus 2 kartus 1. Taigi 4 kartus 3 faktorialas yra 4 kartus 3 kartus 2 kartus 1. Tai kodėl faktorialas yra puikus kandidatas rekursijos, nes tai aišku, kad yra kažkas, kad atsitinka vėl ir vėl ir vėl į mažesnis skaičius dalykų iki jums pasiekti pabaigos. Kada jūs pasieksite 1, 1 faktorialas yra 1. Jūs negalite eiti daug toliau. 0 faktorialas taip pat apibrėžiamas kaip 1. Taigi, kai jūs gaunate į 1 arba 0, jūs pabaigoje, ir jūs galite pradėti eiti atgal į viršų. Taigi, jei mes norėjome parašyti rekursyvūs funkcija apskaičiuoti faktorialas, mes ketiname rašyti kai Pseudocode už tai dabar. Prieš mes rašome, kad Pseudocode - Aš duosiu jums, vaikinai, pora minučių rašyti pseudo kodą arba tiesiog galvoti apie tai - yra du dalykai, kas grįžtamojo funkcija turi. Kas yra tie du dalykai? LIZDAS: Jis turi vadintis. JASON Hirschhorn: Nojus? Oh, Džekas. Eiti į priekį. LIZDAS: Jis turi vadintis. JASON Hirschhorn: Taigi grįžtamojo funkcija turi rekursinį skambutį, skambinti sau. Tai viena. Ir kas kitas dalykas? LIZDAS: bazinį scenarijų. JASON Hirschhorn: bazinį scenarijų. Bazinį scenarijų yra čia, kai mes sustoti. Taigi jūsų funkcija pasireiškia vadinamas. Bazinį scenarijų ateina pirmiausia. Jūs norite žinoti, jei jūs pabaigoje. Ir, jei esate ne pabaigoje, jūs padaryti savo grįžtamojo skambutį. Ir jūs einate per šią funkciją vėl, patikrinti savo pagrindinę bylą dar kartą. Jei nesate pabaigos, jūs padaryti kitas grįžtamojo ryšio, ir tt, ir tt. Štai kodėl rekursyvūs funkcijos visada reikia tų bazinių atvejus ir tuos, rekursyvūs skambučiai. Jei jūs neturite rekursinį skambutį, jis nebūtų grįžtamojo funkcija. Jeigu tu negali turėti pagrindą, eitum amžinai ir nebūtų pabaiga. Ir bazinį scenarijų visada ateina pirmas, nes jūs visada norite patikrinti jei esate pabaigoje pirmasis. Taigi, kol mes ką nors Pseudocode, kodėl nėra išgėrėte per minutę galvoti apie kaip grįžtamojo faktorialas funkcija būtų parašyta? Taip pat, kaip daugelis, kaip jūs darote, rašymas tai ant popieriaus lapo ką jūs ketinate turi padaryti viktorina rytoj. Taigi tikriausiai gera praktika, kad tikras kodas rašote ant popieriaus lapo - ar jūs galite padaryti, kad. Jūs žinote, kur yra kabliataškiais. Jūs prisimenate sintaksę. Kadangi jūs negalite turėti sudarytojas pasakyti padarė klaidą. Be to, palei tas linijas, rytoj, kai Jūs kodavimo problemų, jei skubėjome už laiką, arba jei esate labai painioti, kaip jūs turėtų parašyti konkretų dalyką c, tai būtų Pienākties galite rašyti pseudo kodą arba rašyti komentarus taip pat. Nes ten yra dalinis kreditas daug dėl viktorinos klausimus. Taigi jums gali būti skubėjome, arba gali tiesiog būti painiojama. Rašymas pastabų ar pseudo-kodas dažnai būdų, kad jūs gali gauti dalinį kreditą. Taigi nereikia palikti kažką Blankas ant viktorina. Nėra jokių nuobaudos išleidimą dalykų in Iš tiesų, įgyvendinant pseudo kodu, arba komentarai ketina padėti rūšiuotojas išsiaiškinti, ar jūs iš tikrųjų žinote, ką jūs kalbate apie, o gal apdovanojimą jūs kai dalinis kredito už tai. Taip pat palei tas linijas, rašyti aiškiai. Jei mes negalime tikrai tai, ką rašote, mes neketiname skambinti jums vidurnaktį rytoj išsiaiškinti iš ką parašė. Mes tik ketina kilimo taškų. Rašyti aiškiai, kad mes galime išgirsti, arba, tiksliau, mes galime skaityti, ką parašė. Ir jei jis sako du sakinius, nereikia rašyti pastraipą. Vadovaukitės instrukcijomis. Rašykite aiškiai. Ir parašyti tuos komentarus arba Pseudocode už klausimus, kurie galėtų sudarymą dalinis kredito. Gerai, eikime faktorialas. Taigi, mes turime funkciją faktorialas. Jei aš būčiau iš tikrųjų rašau tai C, ką man reikia daryti, prieš pavadinimą iš funkcijos? Grįžimo tipo, kuris, šiuo atveju, mes suteiksime jai int. Ir tada viduje garbanotas petnešos, yra kas vyksta viduje garbanotas petnešos funkcija? STUDENTAI: Argumentų tipas. JASON Hirschhorn: Jos argumentai. Taigi faktorinė tikriausiai imtis argumentą. Tai tikriausiai tik priimti vieną argumentą. Ir mes pasakyti, kad priimsime sveikasis skaičius vadinamas x. Ir vėl, kai rašote apie prototipą funkcija arba raštu funkciją savo kodą prieš apibrėžiant tai, tu parašyti duomenų tipą ir pavadinimą kad kintamasis tik tą funkciją. Taigi, jūs galite praeiti šiek numerį į tai funkcija, tai bus vadinama x viduje. Mes turime Faktorinė funkciją. Mums reikia dviejų dalykų, pagrindinis bylą ir grįžtamojo skambutis. Kas yra bazė dėklas faktorialas? Kažkas, kas ją parašė, ir kuris turi ne kalbėjau dar, kas yra bazė dėklas faktorialas? STUDENTAS: Jei n yra mažesnis nei 2, grįžkite 1. JASON Hirschhorn: Jei n yra mažiau nei 2, grąžina 1. Man patinka, kad, nes tai rūpinasi 0 ir 1. Taigi mes padarysime x <2, grįžkite 1. Jei mes gauti išlaikė 0, jei mes praėjo 1, ši funkcija bus nedelsiant grąžinti 1. Jei mes gauti išlaikė kai skaičius didesnis nei arba lygus 2, mes ketiname turime rekursinį skambutį. Ir taip, kaip yra, kad vyksta į darbą? Ar kažkas, kas dirbo tai kuris nekalbėjo dar man rekursywny skambučių šiai funkcijai į Pseudocode? Jei mes gauti išlaikė iš skaičiaus x ir tai didesnis nei 2, tai, ką mes norime daryti? Mes taip pat turime pavyzdys parašyta pusė, kuri gali suteikti jums užuominą. STUDENTAS: Call x kartų faktorialas X minus 1? JASON Hirschhorn: Būtent teisus. Mes ketiname grįžti x kartų X minus 1 faktorialas. Ir, nors aš rašiau daugiau, Iš esmės, ką jūs sakėte, anglų, tai faktorinė funkcija gaus vadinamas dar kartą. Tai bus atlikti ant x minus 1. Tai bus grįžti su kai sveikojo skaičiaus, ir tada jis bus padauginti šių dviejų kartu, ir ši vertė bus grįžo į ką tai pavadino faktorialas funkcija, kuri gali būti kitas atvejis tai faktorinė funkcija. Taigi, kad yra iš rekursinis pavyzdys funkcija, labai paprasta grįžtamojo funkcija. Tačiau daugelis iš jų bus kaip šis. Jei norite gerą rekursyvūs iššūkis viktorinoje, pabandykite kodavimo Dvejetainė paieška rekursyviai. Nes jei tu binarinę paiešką problema nustatyti trys, tikriausiai tai padarė keletą kartų per while cikle. Tačiau ji taip pat gali būti parašytas rekursyviai. Jūs ketinate reikia parašyti savo atskiras funkcija, kuri trunka keletą skirtingų komandų eilutės argumentai - arba ne komandinės eilutės argumentai, kai skirtingų tiesiog reguliariai argumentai. Bet jūs galite rašyti dvejetainius paiešką rekursyviai taip pat. STUDENTAS: Taigi jums gali taip pat parašyta, vietoj x minus 1, jūs Taip pat galėjo būti parašyta x minuso minusas, ar galima turėti parašyta minus minus x. Galite tiesiog paaiškinti labai greitai, kodėl tų būtų skirtingi dalykai, kaip kas skirtumas yra tarp x minus minus ir minus minus x? JASON Hirschhorn: Ne, aš ne ruošiuosi eiti į tą. Bet aš kalbėti su jumis apie tai, kai klasė. x minus minus minus minus x Mažėja x iki 1. Bet jie tai daro šiek tiek kitaip. Bet aš nenoriu eiti į tą. Kiti klausimai apie rekursijos ar ši funkcija? Tai tikrai nėra net Pseudocode. Tai iš esmės yra kodas C galėtumėte rašyti už tai. Gerai, visi kiti klausimai apie temas čia? Taip. STUDENTAS: Aš greitai suniokota slankiojo kablelio ir tikslumas. JASON Hirschhorn: Plaukiojantis taškas ir tikslumo. Ar kas nors tikrai greitai duoti man suniokota slankiojo kablelio ir tikslumas? Jūs visi turėjo tai padaryti dėl savo problema nustatyti, todėl jūs viską susipažinęs su juo. O gal ne visi iš jūsų. Anyone? Duok man prasidėjo nuo namų. Slankiojo kablelio ir tikslumas. Kas yra problema? Taip. Viktorija? Vanessa: Vanessa. JASON Hirschhorn: Vanessa. Atsiprašau. VANESSA: Yra tik ribotas skaičius numerių, kurie gali būti atstovaujama nes jūs esate, mūsų atveju, 32 bitų sistema. Taigi, jūs tipo turi padaryti kai kuriuos numerius. JASON Hirschhorn: Štai visiškai teisus. Yra tik tam tikras skaičiai, kurie gali būti atstovaujami. Jei daugintis du labai daug, ji gali ištekėti sumą erdvių turite atstovauti sveikasis skaičius. Štai kodėl kartais mes naudojame ilgai ilgai, o ne int. Kad turi daugiau erdvės. Tai gali turėti didesnį skaičių. Slankiojo kablelio tikslumo turi daryti su kad, bet taip pat turi daryti su Faktas, kad dešimtainiai skaičiai yra ne visada atstovauja. Atsiprašau. Leiskite įdėti šią atsargines kopijas. Dešimtainis skaičius 1,0 ne visada atstovaujama kaip galima tikėtis, 1,000000000. Tai kartais atstovavo 1,000000001 0,999999999 arba. Tai gali būti net 89 įmestas ten kažkur. Taigi tie dešimtainiai skaičiai yra ne atstovaujama tiksliai taip, kaip tai darytumėte tikėtis, kad jie atstovauja. Taigi problema nustatyti - tai buvo du? - problema nustatyti du, kur mes nagrinėjo slankiojo kablelio skaičiai, kai norėjome jiems atstovauti, ką mes norėjome jiems atstovauti, skaičius centus, arba centų skaičius, mes jas padaugina iš 100. Mes suapvalinti juos. Ir tada mes išjungti viską už kablelio. Tai buvo užtikrinti, kad jie būtų faktiškai lygūs, ką mes norėjome jiems prilygti. Nes kai jūs imtis ko nors, kad yra plaukti ir paversti jį int, jūs išjungti viską į dešinę iš kablelio. Nes ten kai slankiojo kablelio netikslumai, 100,000, gali būti atstovavo 99,999999999. Ir jei jūs tiesiog išjungti viską teisę iš karto, jūs ketinate gauti neteisingą numerį. Taip. STUDENTAS: turėjau klausimas apie liejimo. Kokia tvarka jis atsiranda? Jei norite padaryti, plūdė, skliausteliuose, 1 skirstomi 10, jis daro 1, padalytą iš 10, tada gauti 0,1, tada pasukite tai į avansinę? JASON Hirschhorn: Jei plūduriuoti 1, padalytą iš 10 - STUDENTAS: Taip, ir Tada lygu - gerai, tai paprastai būtų jį lygūs - Taip. Jūs norite įsitikinti, kad plūdė, tiesa? JASON Hirschhorn: Gerai, kad mes ketiname naudoti, kad Segue į suprasti, į šiuos klausimus per kodavimas. Kadangi jūs tikriausiai turite daug šios minutės klausimus ir geras būdas jas išspręsti yra per kodavimo. Taigi, mes ketiname koduoti tai dabar, ir tada mes ketiname grįžti ir kodą klausimą, į kurį turėjo. Taigi, pirmoji eilutė - Aš neturėčiau parašiau jį - kas Pirmas dalykas, mes norime padaryti, kai mes atverti naują failą gedit? STUDENTAS: Įtraukti. JASON Hirschhorn: Įtraukti ką? STUDENTAS: CS50 biblioteka. JASON Hirschhorn: Gerai. Ką dar turėtume būti? Mes tik ketiname patikrinti, kas atsitinka, kai jums mesti kažką plūdės. Bet ką mes turime būti, jei mes ketina parašyti C programa? STUDENTAS: Standartinio I / O. JASON Hirschhorn: stdio.h. Mes iš tikrųjų nereikia, nes tai programa, cs50.h, nors tai visada naudinga įtraukti. Bet mes visada turime stdio.h. STUDENTAS: Kai kodavimas C? JASON Hirschhorn: Kai kodavimas C. Taigi aš jį išsaugoti kaip šis. C failas. Aš kažkiek gražus sintaksės. Parašiau tuštumą viduje pagrindinis. Ką negaliojančiu reiškia? STUDENTAS: nesiima jokių komandinės eilutės argumentai. JASON Hirschhorn: Void priemonėmis, tai atveju, pagrindinis ne imtis bet komandinės eilutės argumentai. Kitais atvejais ji reiškia, kad funkcija neatsižvelgiama komandinės eilutės argumentai. Arba funkciją, jeigu aš būčiau rašyti tuštumą Pagrindinis (tuščia), kad pasakytų pagrindinius ųjų negrįžta nieko. Taigi klaidinga tiesiog reiškia nieko. Ką man rašyti, jei aš buvo imtis komandinės eilutės argumentai? STUDENTŲ int lankas c eilutė lankas v JASON Hirschhorn int argc styginių argv. Ar tai tiesa? STUDENTAS: Tai char žvaigždė argv skliausteliuose. JASON Hirschhorn: Taigi jums gali rašyti styginių argv skliausteliuose ar char žvaigždė argv skliausteliuose, bet jums reikia laikiklius. Kadangi argv yra masyvas eilučių, prisiminti. Tai ne tik vienas eilutė. Taigi styginių argv yra čia manimi viena eilutė vadinama argv. Styginių argv skliausteliuose yra, čia Stygų masyvas. Taigi int argc styginių argv laikikliai būtų kažkas, kad aš tikriausiai rašyti. Taigi jūs norite sutaupyti sveikasis skaičius? STUDENTAS: Taip, sveikas. Arba plūdės. JASON Hirschhorn: Be plūdės? Kaip, plūdė x lygus 1, padalytą iš 10. JASON Hirschhorn: Gerai. Kaip aš galiu atsispausdinti plaukioja printf? Ką? STUDENTAS:% f. JASON Hirschhorn:% f. Kas sveikas? d arba i. Kas seka? STUDENTAS: s. JASON Hirschhorn: s. Kaip aš galiu gauti naują eilutę? STUDENTAS: ukośnikiem n. JASON Hirschhorn: Ką aš galiu grąžinti jeigu pagrindinis veikia teisingai? STUDENTAS: 0. Ar man reikia parašyti, kad linija, nors? STUDENTAS: Ne Gerai, mes ne rašyti, tada. Ar visi gali skaityti, kad? Jis atrodo šiek tiek mažas. Ar visi gali matyti, ar turėtų Aš jį didesnis? Manau, fotoaparato, mes pasirūpinsime, tai šiek tiek didesni, nors. JASON Hirschhorn: Jei aš noriu išjungti šią . C failą į vykdomąjį, ką aš rašau? STUDENTAS: Padaryti testą. JASON Hirschhorn: Atsiprašome? STUDENTAS: Padaryti testą. JASON Hirschhorn: Padaryti testą. Mes kalbame apie ši eilutė anksčiau. Žvangėjimas. Kas Zaszczękać? Iš kompiliatoriaus pavadinimas. Kas tai linija? STUDENTAS: Nustato jį naudoti iš GDB. JASON Hirschhorn: Komplektai tai iki naudojimo GDB. Ši eilutė, kas tai? STUDENTAS: Išeitinis kodas. JASON Hirschhorn: Štai šaltinio failas,. c failas. Ką šios dvi linijos daryti? Ar šie du ne linijos. STUDENTAS: IT pavadinimai tai išbandyti. JASON Hirschhorn: Taigi brūkšnys o sako, pavadinti jį skirtingai. Ir čia jūs skambinate jį testas. Jeigu aš neturiu, kad, kas tai pavadinti tai? STUDENTAS: a.out. JASON Hirschhorn: a.out. Ką tai padaryti? STUDENTAS: Nuorodos matematikos biblioteką. JASON Hirschhorn: Tai nuorodos į matematikos biblioteką. Mes neįtraukė matematikos biblioteką, tačiau nes tai taip įprasta, jie jau parašyta makiažo visada yra matematikos biblioteka. Ir be to, tai apima CS50 biblioteka. Gerai, kad, jei mes sąrašą, dabar mes turime vykdomąjį vadinamas testas. Jį vykdyti, rašau testą. Matau, kad mano slankiojo kablelio, kaip ir tikėtasi, lygi 0. Ar tai - taip - STUDENTAS: Tada, jei jūs įtraukėte plūduriuoti dabar kaip jums mesti jį kaip plūdė - JASON Hirschhorn: Cast 1 avansinę? STUDENTAS: Ne, mesti visą dalyką - taip. Jei ką tik padarė, kad būtų , kad padaryti tai 0,1? JASON Hirschhorn: Gerai, kad tikrai greitai, 1, padalytą iš 10, jie yra sveikieji skaičiai skaidomos. Taigi, kai jūs padalinti sveikieji skaičiai, jie 0, ir Jūs sutaupysite, kad 0 yra plūduriuoti, nes velniop yra tik sveikasis skaičius pasidalijimas. Taigi dabar mes tekinimo kažką į avansinę. Pažiūrėkime, kas atsitiks. Mes padarysime testą. Taigi dabar mes matome, kad velniop nebuvo sveikasis skaičius pasidalijimas, buvo plūduriuojančius taškas padalinys. Nes vienas iš jos argumentų buvo įmesti į avansinę. Taigi, dabar jis buvo sakydamas, kad šis lapelis padalinys, kaip mes susiduriame su plaukiojantieji taškų, o ne skaičiais. Ir taip mes gauti atsakymą mes tikimės. Pažiūrėkime, kas atsitiks - Oi. Jei aš norėjau spausdinti daugiau dešimtųjų dėmės, kaip galėčiau tai padaryti? STUDENTAS: taškas taškas f, ar kaip daugelis dešimtųjų tikslumu, kiek norite. JASON Hirschhorn: Taigi, aš spausdinti 10 tūkstantųjų dėmės. Ir dabar mes matome, mes vis kažkokiam keistam dalykų. Ir grįžta į savo klausimą apie slankaus kablelio nepatikslinus. Yra keistai stuff saugomi čia. Gerai, ar tai atsakyti į jūsų klausimą? Ką dar tu nori koduoti greitai? STUDENTAS: Aš tik norėjau pamatyti, ar ne, jei atlaisvinti šiek tiek rodyklė, ar kad žymeklis dar buvo saugomi tai, ką jis buvo adresas nukreipta į anksčiau. JASON Hirschhorn: Gerai, todėl galime tai padaryti. Char žvaigždė PTR, tai sukuria kintamąjį vadinama PTR tipo char žvaigždė. Kaip parašyti malloc? Alden? ALDEN: Tiesiog malloc. Bet tada ji turi būti dydžio ir Šiuo atveju, manau, norite būti nukreipta į char. Taigi būčiau char. JASON Hirschhorn: Gerai, kad daugiau bendrine, viduje - tegul redaguoti. Viduje malloc, norite numerį baitų krūvą. Apskritai, ką mes matėme, kad mes darote, yra mes ketiname malloc stygos, pavyzdžiui, ar matricos sveikieji skaičiai. Taigi, jei norime 10 sveikieji skaičiai, arba 10 simbolių, 10 duos mums 10. Ir tada dydis simbolių duos mums, kad simbolių dydžio, kuris šiuo atveju yra 1 baitas. Gauname 10 baitų. Jeigu mes buvo rašyti dydis int, kad duos mums 40 baitų. Taigi daugiau bendrine, viduje malloc yra baitų skaičius, kurį norite. Tokiu atveju, mes vis 1 baitas. Kuris atrodo keistai naudoti iš malloc, bet mūsų tikslai turi prasmę. Taigi kad. Mes ketiname skambinti nemokamai. Mes atsikratyti juo, ir mes naudojame PTR dar kartą. Ir ką jūs norite patikrinti? STUDENTAS: Aš tik norėjau patikrinti, ar ar ne ten buvo kas nors viduje ji. JASON Hirschhorn: Taigi, ar jis atkreipė dėmesį į ką nors? STUDENTAS: Taip, tiksliai, ar jis vis dar turėjo atminties adresą. JASON Hirschhorn: Taigi jūs norite patikrinti PTR vertę? STUDENTAS: Taip, tiksliai. JASON Hirschhorn: Ką aš rašau čia jei noriu patikrinti vertę punktas - kas yra, Jordanija sakė, vertė? Arba kas yra saugoma viduje PTR? STUDENTAS: atminties adresą. JASON Hirschhorn: atminties adresą. Taigi, jei aš rašau tik tai, jis bus duoti man PTR vertę. Ir kaip aš galiu atsispausdinti atminties adresas? Kas formato eilutę už atminties adresą? STUDENTAS:% p. JASON Hirschhorn:% p. % S eilutės. % P rodyklė. Ar tai tiesa? Tai yra teisinga. Taigi PTR Lygu - ji vis dar turi kažką į jį. Tai turbūt daugiau Įdomus klausimas. Ką tai linija daryti? STUDENTAS: SEG gedimus. JASON Hirschhorn: Kas? STUDENTAS: Manau, kad tai SEG gedimus. JASON Hirschhorn: Hm? STUDENTAS: Manau, jis bus seg kaltės. JASON Hirschhorn: Taigi ši eilutė iš kodas, star PTR, ką nėra žvaigždė reiškia? STUDENTAS: turinys. JASON Hirschhorn: Taip. Eiti į gauti turinį. Taigi, tai bus eiti į atmintį spręsti ten ir man, kad. Aš% C čia, nes yra ženklai saugomi ten. Taigi, mes ketiname eiti į tą adreso mes tik pamačiau - ar tai turbūt bus šiek tiek skiriasi tai kartą, kai mes paleisti programą. Bet mes eisime šiuo adresu kuri mes žinome, vis dar egzistuoja ir pamatyti, kas ten. Taigi nebuvo SEG kaltės. Jis tiesiog nedavė mums nieko. Tai gali iš tikrųjų davė mums kažkas, mes tiesiog negalime matyti. Ir grįžta į šią idėją - ir mes nesiruošia gauti per daug į tai, nes tai ne tik apimtis šiuo metu. Bet mes kalbėjome apie čia, jei mes peržengė masyvo ribų pagal 1, mes gali ne gauti į bėdą. Kartais, kai jūs tiesiog eiti išjungti 1, darai kažką blogo, ir jūs galėtų gauti į bėdą. Bet jūs ne visada gauti į bėdą. Tai priklauso nuo to, kiek blogas dalykas, kurį tai, kad jūs ketinate gauti į bėdą. Kuris yra ne pasakyti, kad per daug jausmingas su savo kodą. Tačiau reikia pasakyti, programa nebus visada mesti rūkyti, net jei jūs einate kažkur Jūs nesate turėjo eiti. Geras pavyzdys, kad yra daug " žmonių savo problemą nustatyti 3, kuris buvo 15, nepatikrino Ribas lenta. Taigi, jūs žiūrite į kairę, pažvelgė į teisė, pažvelgė į viršų, pažvelgė į apačią. Bet tu negali patikrinti, ar viršų buvo faktiškai bus ant lentos. Ir žmonių, kurie padarė, kad daug ir Paaiškėjo, kad jų programa dirbo puikiai, nes kai ta lenta buvo saugomas atmintyje, jei atėjo vienas virš jos ar patikrino, kad atmintis adresas, nebuvo nieko ypač siaubingas apie tai, kad jūsų programa nebuvo ketina klykauti ne jums. Bet mes vis dar kilimo taškų, jei tu negali patikrinti, kad, nes jums darė kažką jums nebuvo turėtų daryti, ir jūs galite turėti Dotarłeś į bėdą. Šansų yra, nors, tikriausiai ne. Taigi tai rodo, kad, taip, mes vis dar galite eiti į jį. Ir mes ne gauti į problemų šiuo atveju. Jei mes bandėme padaryti skaityti sekantis 100 simbolių, mes norime tikriausiai gauti į bėdą. Ir jūs galite užkoduoti svarstymą kitame 100 ženklai, jei norite, atlikdami kai tarsi už linijos. Taip. STUDENTAS: Kadangi mes buvo suteiktas, kad erdvė tikroji vertė, nebūtume iš tikrųjų galės pamatyti nieko. Jei mes stengiamės ją nustatant, kad lygus kaip C ar kažką? JASON Hirschhorn: Didysis klausimas. Kaip man nustatyti tą vertę - ką eilutėje kodas man rašyti linija septynių daryti tai, ką jūs pasakėte? STUDENTAS: Žvaigždžių PTR Lygu vieno citata pabaigoje c viengubas kabutes. JASON Hirschhorn: Štai išleidimą pobūdį, c, toje vietoje, nes vėl, kad žvaigždė reiškia eiti ten. Ir kai naudojamas ant kairės pusės priskyrimo operatorius, kuris lygus pasirašyti, mes neketiname gauti, kad vertė tiek daug, kaip nustatyti šią vertę. Dabar pažiūrėkime, kas atsitiks. Mes įdėti kažką ten ir ji ten buvo. Mes raginome nemokamai. Kai kurie dalykai tikriausiai atsitiko į krūvą. Taigi, tai ne ten nebėra. Bet vėl, mes ne gauti problemų dėl ten eiti. Darau tai iš kodo iliustruoti kad iš jų daug klausimus, kad jūs turite, jie tikrai įdomu atsakymus daug laiko. Ir jie tikrai geri klausimai. Ir jūs galite suprasti juos ant savo, jei, pavyzdžiui, mes ne skyriuje. Taip. STUDENTAS: Kadangi jūs nesiunčia žymeklis visur, jums reikia naudoti malloc? JASON Hirschhorn: Taigi tai nueina savo pradinį klausimą. [? ?] Ar tai tik vietinis kintamasis? Malloc čia yra ne tai, kad įtikinamos. Iš malloc naudojimas čia nėra kad įtikinamų nes tai tik vietos kintamąjį. STUDENTAS: Taigi galima padaryti char žvaigždučių PTR Lygu labas? JASON Hirschhorn: oh. Taigi, mes ketiname dabar grįžti savo pradinį klausimą. Manau, kad jums buvo nepatenkinti mano atsakymą. Gerai? Kaip tai? STUDENTAS: Taip. Palaukti. JASON Hirschhorn: O kur norite spausdinti? Taigi mes atsispausdinti panašaus eilutę? STUDENTAS: Įdomu. JASON Hirschhorn: Taigi tai sako, kad tai argumentas turi simbolio tipą. Taigi tai turėtų būti ženklas. STUDENTAS: Tiesiog mano pirmasis. JASON Hirschhorn: Taigi šis yra tai, ką minėjau anksčiau. Kaip ir sakiau, tai ne saugoti Styga viduje kintamojo žymeklis. Tai saugoti - STUDENTAS: pirmoji reikšmė į eilutę. JASON Hirschhorn: Kreipinys Pirmoji vertė eilutę. Jeigu mes buvo išspausdinti šį, mes gauti vertę viduje rodyklė. Ir mes pamatysime tai, tiesą sakant, atminties adresas. Ar tai prasminga? Atsiprašau. Palaukite, ar tai atsakyti į jūsų klausimas, nors? STUDENTAS: Taip. JASON Hirschhorn: Šis kodas linija sukurti eilutę ir tada kitą kintantis žymeklis, kad manimi nukreipta į tą eilutę, kad masyvo. Taip. STUDENTAS: Taigi, jei mes nuėjome vieną atminties spręsti toliau, tai mes gauname h? Ji buvo saugomas kaip eilutė? JASON Hirschhorn: Kaip, mes padarėme - todėl tai yra naudinga daryti. Tai kablelio aritmetiką, kurį vaikinai matęs ir turėtų būti gana patogiai. Tai yra panašus į raštu - jei mes rašyti šią kodo eilutę, mes matėme masyvo notacijos anksčiau. Tai turėtų suteikti mums sekundę vertė šio masyvo, h. Jei mes tai padarė, tai taip pat turėtų suteikti mums antras vertė tame masyve. Kadangi tai vyksta ne atmintyje adresas, pirmas dalykas, tačiau atminties adresas dalykas viena puse. Ir tada žvaigždučių operatorius dereferences kad žymeklis. Ir vėl, pažiūrėkime. Mes gauname h dar kartą. STUDENTAS: Ką tiksliai reiškia dereference reiškia? JASON Hirschhorn: Dereference yra išgalvotas žodis, eiti. Eiti į, kad ir gauti, kas ten yra dereference rodykle. Tai tik išgalvotas žodis, kad. STUDENTAS: Jei mes norėjome spausdinti visa eilutė, mes galėtume padaryti ampersand rodyklę? JASON Hirschhorn: Gerai, mes esame ketina pristabdyti čia. Mes ketiname baigti čia. Ženklas suteikia jums adresą vieta, todėl, kai jūs darote ampersendas iš kintamasis, jis suteiks jums adresą kur, kad kintamasis yra saugomi. Ženklas rodyklė duos jums adresas PTR kur PTR atmintyje. Mes neketiname eiti su šiuo pavyzdžiu. Galite išsiaiškinti jų viskas savo. Bet vėl, tai gali būti net besiribojančiu tiek už jos ribų, ką jums reikia žinoti Šio laikotarpio vidurio apimtis - ar tai viktorina, o. Atsiprašau. Mes ketiname judėti į priekį, nes aš norėčiau patinka daryti vieną kodavimo problema prieš laikas baigėsi. Ir mes ketiname kodą, ką aš manau yra įdomiausi iš jų pavyzdžiai, atoi. Taigi, tai buvo ant klausimas viktorina prieš dvejus metus. Ir aš turiu jį ant lentos čia. Žmonės klausė dėl viktorinos - jie buvo suteikta šiek tiek daugiau tesxt į klausimas, bet aš pašalinta tekstas, nes jis buvo nereikalingas mūsų tikslams dabar. Tai buvo tik kai fonas apie tai, kas atoi padarė. Bet jūs visi žinote, ir yra labai susipažinęs su atoi. Aš siūlau jums koduoti tai ant popieriaus lapo. Aš taip pat rekomenduojame naudoti strategiją kad mes jau dingo per mūsų skyriuje daug. Pirma, įsitikinkite, kad jums suprasti kas atoi daro. Nupieškite paveikslą arba sugalvoti kai psichikos įvaizdį jai galvą. Toliau surašyti Pseudocode už tai. Dėl viktorina, jei visi jums yra Pseudocode, bent jau įdėti kažką žemyn. Ir tada map kad Pseudocode ant C. Jei turite čekį Pseudocode, kaip patikrinti, ar kažkas yra 1, kad žemėlapiai ant jei būklė ir kt. Ir, pagaliau, koduoti C programa Taigi, grįžti į atoi ir imtis penkias minutes koduoti tai ant lapo popieriaus, kuris yra tikriausiai apie daug laiko jūs imtis viktorina kodas atoi. Penkerių iki 15 minučių, nuo penkerių iki 12, nuo penkių iki 10 minučių, yra apie sumą laiko norite praleisti apie tai klausimas viktorinoje. Taigi imtis penkias minutes dabar, prašau. O jei turite kokių nors klausimų, kelti ranka ir aš ateiti aplink. [ŠALUTINIS POKALBIAI] JASON Hirschhorn: Gerai, kad tai buvo penkios minutės. Tai turbūt buvo apie sumą laiko jūs išleidžiate, kad viktorina, gal žemos tuo metu. Mes Priminti į šiek tiek. Pradėkime kodavimo tai. Ir jei mes negalime gauti visą kelią, į tai atsakymus ir tai viktorina klausimas yra, vėl, Fall 2011, kai šis klausimas atsirado viktorinos. Ir tai buvo verta aštuonių taškų į viktorinos tada. Aštuoni taškai yra ant aukšto pabaigos suma kiekis kažkas yra verta. Dauguma klausimų yra intervale iš 5:59 kiekis. Taigi tai yra sunkiau klausimas, tikrai. Ar kas nors get me prasidėjo? Apskritai, ką mes ketiname nori daryti su šiais veikti atoi logiškai? Ką mes norime padaryti? Taigi, mes ketiname rašyti kai Pseudocode. STUDENTAS: konvertuoti simbolius į sveikųjų skaičių. JASON Hirschhorn: konvertuoti simbolius į sveikųjų skaičių. Gerai. Taigi, kiek simbolių yra mes reikės eiti per? STUDENTAS: Visi iš jų. STUDENTAS: Visi ženklai į eilutę. JASON Hirschhorn: Visi simbolių eilutės. Taigi, jei mes norėjome eiti per kiekvieną simbolis eilutę, kas yra dalykas C matėme, kad leido mums pereiti per kiekvieną simbolis eilutės? STUDENTAI: už linijos. JASON Hirschhorn: už linijos. Taigi, mes ketiname kilpa per kiekvienas personažas s. Tada ką mes ketiname norite daryti kai mes gauname tam tikrą charakterį? Pasakykite, mes gauti išlaikė 90. Mes gauname 9. Tai simbolis. Ką mes norime daryti su kad charakteris 9? STUDENTAS: Atimti iš charakterio 0? STUDENTAS: Pridėti 0? JASON Hirschhorn: Atimti jis iš charakterio 0? STUDENTAS: Taip. JASON Hirschhorn: Kodėl norite padaryti, kad? STUDENTAS: [nesigirdi] vertė. Jo int vertė. JASON Hirschhorn: Gerai, kad mes simbolis 9, atimti ją iš simbolis 0 gauti Tikrasis sveikas 9. Saldus. Ir kaip jūs žinote, kad charakterį 9 atėmus 0 personažas yra 9? Kas diagramos tu pažvelgti? STUDENTAS: Yra logiškai devyni vietos tarp 9 ir 0. Arba galite pažvelgti į ASCII lentelėje. JASON Hirschhorn: ASCII lentelę. Bet taip, jūs teisingai, taip pat. Taigi mes atimti 0. Taigi dabar mes turime sveikąjį skaičių 9. Ir ką mes norime daryti su tuo? Jei mes turime 90, tai pirmas sveikasis skaičius mes, ką mes norime daryti? STUDENTAS: aš įdėti laikiną sveikojo skaičiaus masyvas, atlikite matematika jai vėliau, kad jis taptų pabaigos. JASON Hirschhorn: Gerai. STUDENTAS: Galite pradėti pabaigoje masyvo ir tada judėti į priekį taip kad kiekvieną kartą jums judėti į priekį, jūs padauginkite jį iš 10. JASON Hirschhorn: Gerai. Tai skamba kaip gana įtikinamų idėja. Mes galime pradėti mūsų masyvo pabaigos, ir mes galime naudoti strleng. Mes galime naudoti strleng čia. Mes gauti mūsų eilutės ilgis. Mes pradedame pabaigoje. Ir + pirmasis, mes tiesiog imtis, kad sveikas, o gal mes sukurti kaip nauja sveikasis kintamasis iki viršaus, kur mes saugoti viską. Taigi mes kilpa per kiekvieną s char nuo nugaros į priekį, mes atimti 0, ir tada mes jį, ir, priklausomai nuo kur ji yra, mes padauginkite jį pagal 10 galios. Nes pirmasis, ką mes daugintis dešinė charakterį? STUDENTAS: 10 iki 0. JASON Hirschhorn: 10 iki 0. Ką mes daugintis antras Dešinę požymis? STUDENTAS: [nesigirdi]. JASON Hirschhorn: Kas? STUDENTAS: 10 prie 1. JASON Hirschhorn: 10 prie 1. Trečiųjų dešinė charakterį? STUDENTAS: 10 prie 2. JASON Hirschhorn: 10 prie 2. STUDENTAS: Atsiprašau, aš nesuprantu ką mes darome čia. JASON Hirschhorn: Gerai, eikime atgal, tada. Taigi, mes ketiname gauti praėjo eilutę. Kadangi mes raštu atoi. Taigi, mes gauname praėjo eilutę. Pasakykite, mes vis praėjo į eilutę 90. Pirmas dalykas, mes ketiname padaryti, tai nustatyti nauja sveikasis kintamasis, kad mes tik ketina sukurti kaip mūsų naują sveikojo skaičiaus. Štai ką mes ketiname grįžti pabaigoje. Mums reikia eiti per kiekvieną pobūdžio eilutė, nes mes nusprendėme, kad mes turime paliesti kiekvieną ir tada įdėti į mūsų naują sveikojo skaičiaus. Bet mes negalime tiesiog pridėkite jį kaip skaičius. Mes galime ne tik imtis 9 ir pridėti 9 mūsų sveikojo skaičiaus. Tai priklauso nuo to, kokią vietą jis yra eilutės. Mes ketiname reikia padauginti tai pagal 10 galios. Nes tai, kaip pagrindas 10 kūriniai. Taigi, mes ketiname gauti faktinis simbolis arba faktinis sveikas skaičius, atėmus charakterį 0 nuo charakterio 9 kaip mes padarėme su atimant simbolių kapitalui, iš kokia charakteris mes turėjome vienoje iš šios problemos. Taigi mes iš tikrųjų gauti skaičių nuo 0 iki 9 išsaugotas kaip realusis skaičius, ir mes padauginkite jį iš 10 galios priklausomai kur mes esame eilutę. Ir tada mes ketiname pridėti jį atgal į į mūsų naują kintamąjį. Taigi, kas tai atrodys būtų būti - mes atkreipti čia. Jei mes gauti išlaikė į eilutę 90 - STUDENTAS: [nesigirdi]. JASON Hirschhorn: Bet atoi trunka eilutę. Taigi, mes ketiname eiti per valda. Mes gauti išlaikė iš 90. Mes einame iš nugaros į priekį. Mes priimame 0. STUDENTAS: atsiprašau. Gal tai kvaila. Jei mes vis praėjo eilutę, kodėl 90, ką mes gauti praėjo? Kadangi 90 yra sveikasis skaičius. JASON Hirschhorn: Kadangi atoi trunka seka ir paverčia jį į sveikojo skaičiaus atstovavimas tą eilutę. Tačiau eilutė 90 nėra sveikasis skaičius 90 arba skaičius 90. Eilutė 90 yra dviejų masyvas arba trys simboliai, o, 9 pobūdis, 0 pobūdžio, ir Backslash 0 simbolis. Ir mes rašome atoi nes, Pavyzdžiui, kai jūs imtis komandą linija argumentas, ir jis išsaugotas argv, jis išsaugotas kaip eilutę. Bet jei norite gydyti jį kaip skaičius, jums reikia jį konvertuoti į Tikrasis sveikasis skaičius. Kuris mes padarėme vieną iš mūsų problema rinkinių. Kurį mes padarėme skaičiaus mūsų probleminių rinkinių. Kiekvienas, kuris paėmė sveikasis skaičius kaip komandų eilutės argumentas. Štai kodėl mūsų atoi funkcija mano eilutę. Taigi dar kartą, mūsų pavyzdyje, mes ketina imtis naujausia. Mes ketiname atimti simbolį 0 iš jos, nes personažai 0 atimama iš charakterio 0 suteikia jums faktinis skaičius 0, pagal ASCII matematikos, kad mes darome. Kadangi simboliai atstovavo kitoks nei jų tikrasis - pobūdis, pavyzdžiui, mažosiomis raidėmis 97. Tai ne - Oi! Tai ne ką būtų galima tikėtis ji būtų, 0, pvz. Taigi jūs turite atimti simbolių gauti 0. Taigi, mes ketiname tai padaryti čia gauti realų skaičių. Ir tada mes ketiname padauginkite jį iš 10 galia, priklausomai nuo to, kur jis yra eilutė, o tada imtis, kad ir įdėti jį į mūsų vietą užimantis kintantis, todėl mes galime sugalvoti mūsų galutinis nauja sveikasis skaičius. Ar tai prasminga visiems? Taigi mes neketiname koduoti tai dabar, nes mes vis trūksta laiko. Atsiprašau už to laiko. Bet tai, kas, tikiuosi, jūs taip gebėti daryti Viktorinos - ne labai jau gauti šią Pseudocode rašyti. Ir tada, jei mes buvome rašyti Pseudocode, iš tikrųjų, mes galime tai padaryti gana greitai. Kiekvienas komentarus linija mes rašėme čia verčia apie viena linija C kodą. Skelbiantis naują kintamąjį, raštu kilpa, kai atimtis, kai daugyba, o kai užduotis. Mes tikriausiai taip pat nori parašyti grąžinimo liniją. Mes taip pat gali įdėti kai kurie čia patikrinimus. Taip. STUDENTAS: Taigi mes galime gydyti ai kaip faktinio eilutės? Nes aš žinau, tai tik adresas. Kaip, kaip jūs gauti ilgis eilutė yra pabuvoję? JASON Hirschhorn: Taigi, kaip tai padarė iš stringo ilgis? Strlen. STUDENTAS: strlen, taip. Bet jūs galite įdėti s kaip argumentas, kad? JASON Hirschhorn: Taigi strlen mano char žvaigždė. Ir taip, kad char žvaigždė, ir tai išlaiko skaičiuoti tol, kol ji gauna Backslash 0. strlen iš tikrųjų buvo vienas kitas programas mes eidavo kodą. Štai dar vienas geras vienas kodas. Tai vienas šiek tiek lengviau, nes jei jūs ketinate galvoti apie tai konceptualiai - Aš tiesiog pasakiau garsiai - strlen taip žymeklis ir išlaiko vyksta ir skaičiuoti ir sekti tol, kol pasieksite Atgal nerijos velniop 0. STUDENTAS: Gerai, got it. JASON Hirschhorn: Taigi geriausias nepasisekė viktorina 0 rytoj. Jei turite kokių nors klausimų, aš būti ne po to. Nedvejodami rašykite man. Užmegzti ryšius su savo TF, jei esate ne mano skyriuje, arba gauti mano laišką, jei norite jį. Jei norite freak out, ir tiesiog siųsti man elektroniniu paštu, freakout laišką, aš siųsti atgal, kaip, smiley veido, arba, kaip, pokštas ar kažką. Taigi nedvejodami padaryti, kad taip pat. Sėkmės dar kartą, ir aš pamatyti jus visus kitą savaitę.