>> SPEAKER 1: Sveiki visi.
Mes ketiname pradėti.
Manau, kad žmonės vis dar vyksta būti filtravimo.
Bet po kurio laiko labui, todėl mes galime jums vaikinai iš čia laiku,
mes ketiname pradėti.
Taigi sveiki atvykę į CS50 Viktorina 0 peržiūros.
Tiems iš jūsų, kurie ne suprato, dar turite trečiadienį klausimą.
Woo-hoo.
>> Jei neturite pradėjo studijuoti ar dar ne suprato, kad tai yra dar
Pastaruosius viktorinos ir visa informacija apie Jūsų viktorina yra cs50.net/quizzes.
Yra keletas gana neblogai ten, Pastaruosius viktorinos iš Paskutines 10
metų, taip pat informacija apie šį testą ir pranešimus
kad bus padengtos.
Taigi leiskite pradėti.
>> Taigi vaikinai gali prisiminti, pirmasis dieną klasės Dovydas tuos žibintus.
Taigi, iš esmės, viskas, kas vyksta dirbti pagal iš kompiuterio dangtis yra
daroma dvejetainis.
Dvejetainiai tai, ką jis skamba kaip, 0 "ir 1-aisiais.
Jis turi dvi vertybes, kurios gali būti atstovaujama.
>> Taigi kaip ir pirmą dieną skyriuje Dovydas įjungtas šviesos
lemputė atstovauti įjungtas, arba 1, mūsų kompiuterį supranta dvejetainiu kaip 0 "ir
1 s, įjungti arba išjungti.
Pagrindai Binary.
Kiekviena vieta yra atstovaujama į bazę dvi.
Taigi jūs pridedate 2 iki 0 iki 1 2 visą kelią iki.
>> Norėdami apskaičiuoti, kiek jūsų dvejetainis yra Dešimtainis, jūs tiesiog sekite šią lygtį
tipas dalykas.
Jei turite 1 bet kurioje iš šių vietų, Jūs padauginkite jį iš bet kokio
pagrįsti jis yra, kad įtrauktumėte jį į viršų, ir Jūs gaunate dešimtosios.
Taigi, tai, kaip galite tikėtis iki 5 dvejetainiu.
Tiesiog patinka tai, ką mes darome dėl paskutinę skaidrę, tai yra, kaip tai darytumėte
atstovauti nuo 1 iki 5.
>> Be to, kaip jūs galite pridėti ir atimti iš dešimtosios arba pagrįsti 10, arba
tikrai bet pagrindas, ant gali pridėti ir atimti iš dvejetainis.
Būtent tai, ko galima tikėtis, kai jūs pridėti du aukštyn, jeigu ji yra lygi daugiau
nei 1, vykdote 1, kad ji 0, ir daryti to, kad taip, tiesiog
kaip būtų galima tikėtis su reguliariai dešimtainis arba bet koks kitas pagrindas.
Cool.
>> Taigi, kaip minėjau anksčiau, viskas, kas eina pagal mūsų kompiuterio gaubtu
daroma 0 s ir 1 s, arba dvejetainis.
Taigi, kaip mes išreiškiame, pavyzdžiui, raidės ar skaičiai, arba simboliai?
Ir atsakymas į šį yra ASCII.
>> ASCII yra tarp simbolių priskyrimas kad mes paprastai pamatyti
Anglų kalba, kaip savo, B, C 's, pabrėžti, brūkšneliai, ir
nieko panašaus.
Ir tai, kad žemėlapiai į ASCII reikšmė.
ASCII reikšmė yra tik numeris, gali būti suprantamas jūsų kompiuteryje.
Ir kaip jūs galite padaryti papildymą ir atimtis su numeriais, tai galite padaryti
juos su ASCII reikšmes.
>> Taigi šiame pavyzdyje, ką ar tai atsispausdinti?
Taip, taip, tik erdvė B erdvė C erdvė D. Kur mano pele eiti?
Atkreipkite dėmesį, jūs galite nustatyti int 65.
Ir kai spausdinate, kad naudojant procentų, C, jis bus išaiškinti, kad
charakteris ir bus išspausdinti A.
>> Be to, Jūs galite deklaruoti tai kaip char.
Ir kai jūs jį atspausdinti naudojant procentų C, jis bus išaiškinti, kad
procentų D. Ir kaip jūs galite pridėti skaičius, galite įdėti simboliai
ASCII vertės, šiuo atveju.
>> Taigi mažai žymeklis visiems.
5, kaip eilutė, ne faktiškai lygus 5.
Taigi, kaip gali mes konvertuoti styginių 5 iki sveikojo skaičiaus 5?
Any ideas?
Taip.
>> Taigi, jei mes turime 5 kaip eilutę, mes galime atimti 0.
Ir tai bus mums 5.
Ir panašiai, jei mes turime 5 kaip sveikasis skaičius, tai pridėti prie eilutės 0.
Ir tai suteikia mums eilutę 5.
Cool.
>> Dabar prisiminti atgal į paskaitą viena, kai mes kalbėjome apie algoritmus.
Taigi, kaip mes iš tikrųjų norime kompiuterį padaryti įdomių dalykų?
Žinai, tiesiog pridedant ir atimant Skaičiai ir spausdinimo dalykų iš ne
kad įdomu.
Paprastai, mes norime, kad mūsų kompiuterio į atlikti tam tikrą algoritmą natūra.
Kažkas šiek tiek sudėtingesnis ne tik paprasto aritmetinio.
>> Algoritmas yra tiesiog po žingsnio rinkinys žingsnis instrukcijų, skirtų, kaip atlikti
tikras task--
tiesiog patinka receptą.
Jūs galite prisiminti pirmąją dieną klasė, kurioje Dovydas mums tikėtis kambarį
žmonių ir kiek žmonių buvo į kambarį.
Jums gali būti naudojama skaičiuojant vieną.
1, 2, 3, 4.
Tokiu atveju, linijinis laikas algoritmas.
>> Dovydas pristatė už algoritmą Jums suskaičiuoti į kambarį žmones
kur kiekvienas atsistoja, jums pasakyti savo skaičius kitam asmeniui, pridėti, kad
skaičius iki, ir vienas asmuo atsisėda.
Ir jūs tai pakartoti.
Štai vieno tipo algoritmas.
Mes galime analizuoti kaip veiksmingą an algoritmas yra pagrįsta tai paleisti laiką.
Bet mes kalbame šiek tiek daugiau apie tai vėliau.
>> Taigi visi algoritmai taip pat gali būti parašyta Pseudocode.
Pseudocode yra tik kaip Anglų sintaksė naudojamas atstovauti
programavimo kalba.
Pavyzdžiui, jei mes norėjome paklausti vartotoją atspėti mano mėgstamiausia numerį, mes
gali turėti Pseudocode kaip tokios.
>> Gauti vartotojai atspėti.
Jei spėjimas teisingas, pasakykite jiems, jie teisingi, nors pasakykite jiems
jie nėra teisingi.
Ir Pseudocode yra lengvai būdas atstovaujančių idėją ar algoritmą.
Taigi dabar mes norime, kad iš tikrųjų rašyti tai kalba, kad kompiuteris
might supratimas.
Taigi, mes galime rašyti mūsų Pseudocode ir interpretuoti, kad į kodą.
>> Iki šiol, kodo turi laikytis tam tikrą sintaksės
programavimo kalba.
Ir iki šiol, į CS50, mes naudoja daugiausia c.
Taigi tai gali būti šaltinis kodas c.
Vėliau kurse, jūs naktį ateiti kontakto su kitais programavimo
kalbos kaip PHP.
Arba, jei jūs net imtis kitų klasių, jums gali padaryti Java, Python, ar net OCML.
Bet mūsų c programos kalba, tai kaip mes galime rašyti kodą už
Pseudocode algoritmas, Aš tiesiog aprašyta anksčiau.
>> Taigi, kaip jūsų kompiuteris iš tikrųjų suprasti, kad?
Kaip ir sakiau anksčiau, tai tik tikrai supranta nuliai ir tie.
Taigi, kaip tai gauti iš šaltinio kodas į kažką, kad gali būti
suprantamas?
Na, mes turime kažką vadinamas sudarytojas.
>> Jei prisimenate atgal didžiąją dalį savo psets, jūs turėjote tam tikrą programą natūra
parašyta dot c failą.
Ir tada jums reikės įvesti markę.
Taigi, kas yra, kad daro?
>> Galite įvesti markę sudaryti savo programa, nes someone--
kas rašė savo p rinkinį; tikriausiai David--
sukūrė makiažą failą.
Ir tai pasako, kad žinoti, paleisti sudarytojas, vadinamas Zaszczękać, kad valia
tada sudaryti savo kodą prieštarauti kodas, kuris yra nulių ir
kad jūsų kompiuteris supranta.
Bet šiek tiek vėliau, mes galėsime eiti išsamiau apie kompiliatorius.
>> Taigi prisiminti pset 0, where-- taip, turite klausimų?
>> PUBLIKA: [nesigirdi]?
>> SPEAKER 1: Taip.
Manau, kad jie iš tikrųjų turėtų būti internete.
Taip.
>> PUBLIKA: Ar tai kaip [nesigirdi]?
>> SPEAKER 1: Tai ne.
Yra cs50.net/quizzes.
>> PUBLIKA: Slash viktorinos, velniop 2013, Slash 0, ir tiesiog spustelėkite per
viktorinos 2013 ir viktorinos 0, peržiūrėti skyrių skaidres.
>> SPEAKER 1: Taip, todėl, jei jus vaikinai nori patraukite jį aukštyn ir žiūrėti į jį ant jūsų
savo kompiuteryje, tai gerai.
Pasakykite, kad dar kartą.
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Taip, [nesigirdi] yra fiktyvus kintamasis.
Ak, taip?
>> PUBLIKA: [nesigirdi]?
>> KOLONĖLIŲ 1: Nėra, streikai yra ne egzaminą.
Atsiprašome, jos klausimas buvo, buvo streikai dėl egzamino.
Ir tai ne.
Taigi pset 0, vaikinai turėtų turėti visi įgyvendinti kažką naudojant nulio.
Ir mes sužinojome keletą pagrindinių statybiniai blokai, naudojant nulio.
>> Taigi leiskite pažvelgti kai atrodo Šių blokų
kad sudaro programą.
Pirmasis yra Būlio išraiška.
Būlio išraiškos yra tie, ir 0 s ar nieko, kad turi
dvi galimos reikšmės.
Šiuo atveju, teisinga, ar klaidinga, įjungti arba išjungti, ir taip arba ne.
Iš paprastos, labai paprastas pavyzdys, programa, kuri naudoja Būlio
išraiška čia.
>> Taigi tam, kad Būlio išraiškas būti naudinga, turime loginius operatorius.
Tai yra operatoriai, kurie gali būti naudojami palyginti tam tikras vertybes.
Taigi, mes turime ir ar nėra lygus, mažiau nei arba lygus arba didesnis
lygūs, ir mažiau nei arba didesnis.
Tačiau šie subjektai nėra labai naudinga nebent mes galime sujungti juos į
sąlygos.
>> Taigi vaikinai gali prisiminti iš naujo ir iš savo p nustato, kad mes
turėjo sąlygas.
Jie, iš esmės, kaip ir šakutės iš jūsų programos logika, kad
vykdo priklausomai nuo to, ar sąlyga yra įvykdyta.
Taigi viena iš sąlygų, kad mes turėjome naudojama daug kartų šiame kurse yra
jei kitur, jei ir kitur sąlygos.
>> Štai kaip pavyzdys galite naudoti, kad.
Ar kas nors žino skirtumą tarp tik naudojant if visų
kelią žemyn eilutėmis, jei kitur, jei ir kitur kartu?
Taip?
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Būtent.
Taigi, jei aš turėjo, jei viskas iki galo tai būdas, net jei ši sąlyga grąžą
tiesa, jis bus dar toliau išbandyti kitą du.
Kadangi su kita-, jei, kaip kitur pareiškimą, jei vienas grąžina true,
kiti nėra patikrinta.
Bet apie tai klausimai?
Cool.
>> Taigi jūs naudojate, jei-kitas, kurio kitur teiginys, jei žinote, kad jis gali tik
būti vienas iš šių atvejų.
Taigi mes žinome, jei x yra mažesnis nei 0, tai tikrai nesiruošia būti
didesnis už 0.
>> Kitas, kita statybinis blokas kad mes sužinojome, yra kilpos.
Turime trijų rūšių kilpos.
Dėl kilpų, o kilpos, ir daryti, o kilpų.
Ir apskritai, kai tu sėdi rašyti kažką, jūs turite nuspręsti,
kuri iš trijų, kurį norite naudoti.
Taigi, kaip mes nuspręsti, kuris vienas?
>> Mes paprastai naudoti už linijos, jei mes žinome, Kiek kartų mes norime pakartoti
per kažką arba kiek kartų mes norime atlikti užduotį.
Mes naudojame o kilpos, jei mes turime kai sąlyga, kad būtų tiesa nuolat veikia.
Ir mes naudojame daryti, o labai panaši į o, bet mes norime, kad mūsų kodui veikti ne
bent vieną kartą.
>> Taigi, tai, o tai, kas yra į darbų bus visada paleisti bent vieną kartą.
Kadangi, siekiant laiką, jį negali paleisti visus, jei
sąlyga nėra įvykdyta.
Bet kokie sutapimai su kad klausimai?
>> Taigi struktūra už linijos.
Vaikinai visi matė tai.
Jūs inicijuoti jį.
Jūs turite tam tikrą būklę natūra.
Taigi, pavyzdžiui, mes galime inicijuoti kaip i lygi 0.
i yra mažesnis nei 10.
Ir i ++.
Labai paprasta, kad mes padarėme.
>> Dėl while cikle, taip pat, jūs turite turėti tam tikrą iniciacijos natūra,
kai sąlyga natūra, ir kai atnaujinimo natūra.
Taigi, mes galime įgyvendinti savo už linijos, taip pat kaip while cikle naudojant tai.
Ir panašiai su do while cikle, mes galime turėti tam tikrą iniciacijos,
vykdyti kažką, jį atnaujinti, o tada patikrinkite būklę.
>> Taigi, dabar veikia.
Mes viską kartu.
Mes galime norite rašyti kai rūšies funkcija.
Bendra funkcija, kuri jums gali mačiau jau yra pagrindinis.
Pagrindinis yra funkcija.
Jis turi grįžimo tipo, int.
Jis turi funkciją pavadinimą, pagrindinį.
Ir ji turi argumentų argc ir argv.
Taigi pagrindinis yra tik funkcija.
>> Kitos funkcijos, kurias gali turėti naudojami, printf-- printf yra function--
GetInt, toupper.
Bet tai atsitiks jau įgyvendintos mums
kai bibliotekoje natūra.
Jei vaikinai prisiminti įskaitant tai CS50.h biblioteka arba
standartinis I / O biblioteka.
Taip, klausimas?
>> PUBLIKA: Ar pagrindinė tiesiog neatskiriamas c?
Ar tai tiesiog rūšies [nesigirdi]?
>> SPEAKER 1: klausimas yra jei pagrindinis yra neatskiriamas c.
Ir taip, visos funkcijos turi pagrindinę funkciją.
Tai tipo reikia kompiuterio žinoti, kur pradėti
veikia kodą.
>> PUBLIKA: Taigi jums nereikės [nesigirdi]?
>> SPEAKER 1: Ne
Visi kiti klausimai?
Cool.
Taigi, kaip jūs galite naudoti funkciją kad parašyta, Jums taip pat gali
parašyti savo funkciją.
Tai funkcija, kuri kas nors gali parašiau apskaičiuoti tūrį
iš q, pavyzdžiui.
Yra grįžimas čia, šiuo atveju int, mūsų funkcijos pavadinimas q ir mūsų
parametrų sąrašas.
>> Ir atminkite, kad turite įrašyti duomenis tipo parametro, kurį norite
naudoti ar kitur funkcija nėra žinoti, kokios
parametras turėčiau būti priimti.
Taigi, šiuo atveju, mes norime sveikas kaip mūsų indėlis.
Taigi, kodėl gali norime naudoti funkcijas?
>> Visų pirma, puikus organizavimas.
Jie padeda lūžti savo kodą į daugiau organizuotas gabaliukus ir padaryti
būtų lengviau skaityti.
Supaprastinimas.
Tai gerai dizainas.
Kai jūs skaitote kodo gabalas ir pagrindinė funkcija yra tikrai,
tikrai ilgai, tai gali būti sunkiau priežastis apie tai, kas vyksta.
Taigi, jei jūs ją padalyti į funkcijas, tai gali būti lengviau skaityti.
Ir pakartotinai-gebėjimas.
Jei turite kodo gabalą, kad manimi yra vadinama arba paleisti kelis kartus,
vietoj perrašyti to kodekso 10 kartų savo pagrindinę funkciją, galite
norite jį pakartotinai.
Ir tada kiekvieną kartą jums reikia naudoti, kad kodo fragmentą, skambinkite funkciją.
>> Taigi dabar, jei mes prisimename atgal į nulio, mes taip pat kalbėjome apie keletą sąvokų,
iš kurių vienas yra sriegimo.
Tema yra daugybė, koncepcija sekos kodą
vykdyti tuo pačiu metu.
Taigi prisiminkite vieną dieną kur Dovydas vaikinai skaičius nuo skaičiaus
žmonių kambaryje.
>> Iš esmės, tai, kas vyksta apie tai visi jus vaikinai buvo
veikia atskiras temas.
Ir tie siūlai ateidavo kartu kažkiek atsakyti natūra.
Panašiai Scratch, kai jūs turite kelis animacinius, galite
turi katę ir šunį.
Ir jie būtų vienu metu veikia savo scenarijus.
Tai iš sriegimo pavyzdys.
>> Ir kita koncepcija, kuri buvo pristatė nulio buvo įvykių.
Ir įvykiai, kai keli dalys Jūsų kodas bendrauti vieni su kitais.
Be nulio, tai buvo tada, kai Jūs naudojote Transliacija kontrolė ir Kai aš
Gauti blokai.
>> Ir taip pat, kad problemą, 4, matėme Šiek tiek įvykių, taip pat.
Vaikinai galėjo naudoti Gevent biblioteka.
Ir ten buvo funkcija waitForClick kuriame jūs laukėte
kad vartotojas galėtų spustelėkite.
Ir jūsų paspaudimas, šiuo atveju, būtų renginys ir laukti paspaudimu yra jūsų
renginys prižiūrėtojas.
>> Ir taip pat, visus veikia savo psets ir dirbti savo psets, jūs
galėjo liestis su kai kurie iš šių komandų.
Tai yra tai, ką jūs įvedėte į savo terminalo langą ar kokia langas
kad rodo ant jūsų g redaguoti, iš esmės, naršyti savo kompiuteryje.
>> Taigi, pavyzdžiui, LS sąrašai turinys kataloge.
Padaryti katalogas sukuria naują aplanką.
CD, pakeisti katalogas.
RM, pašalinti, ištrina failą arba kai katalogas.
Ir tada pašalinti katalogą pašalina katalogą.
>> PUBLIKA: [nesigirdi]?
>> SPEAKER 1: Taip, tikrai.
Atsiprašome, klausimas buvo, jei jums siūlyčiau pradėti tai
ant apgauti lape.
Tai galėtų padėti.
Jei turite kambarį, galite įdėti ją.
Tai taip pat tik paprastai pakankamai gera prisiminti, nes kai jūs jį naudoti
galbūt norėsite tiesiog jį įsiminė.
Tai bus padaryti jūsų gyvenimą daug paprasčiau.
Ar galiu atsakyti į jūsų klausimą?
>> Taigi dabar mes kalbėjome šiek tiek Trumpai apie bibliotekose.
Tačiau du pagrindiniai tie, kad mes buvome naudojant iki šiol žinoma yra
standartinis I / O ir CS50.
Kokios dalykų yra įtraukti standartinės I / O biblioteka?
>> Taip, iki šiol mes naudojamas printf.
Be CS50, mes naudojamas GetInt ir GetString.
Ir duomenų tipas string taip atsitinka būti deklaruojamos šiame CS50 bibliotekoje.
Mes kalbėsime šiek tiek daugiau gylis apie kaip bibliotekos darbą ir tai, kaip jie
bendrauti su savo likusia kodas.
Bet tie, yra du pagrindiniai tie, kad mes jau liečiasi su iki šiol
Žinoma.
>> Tipai.
Tai yra gera prisiminti, kiek kiekvieno tipo atstovauja arba kaip
daug baitų kiekvienam konstrukcijos requires--
int, 4 baitai; char, 1 baitas.
Plūdės yra 4 baitai.
Kas yra dvigubas?
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Taip, taip, plūdė bet dvigubai dydį.
Ką apie ilgai?
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Gerai.
Kas yra ilgai?
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Taip, dvigubas int.
Taip.
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Ilgi [nesigirdi].
Ir tada ilgai ilgai dvigubai.
>> PUBLIKA: Ne, ne.
Kol yra tik vid.
Tai priklauso nuo architektūros prieš [nesigirdi]
ir int turi tą patį dydį.
[Nesigirdi].
>> SPEAKER 1: Taigi ilgas ir int yra tas pats.
Ir tada ilgai ilgai yra dvigubai vid.
Cool.
Ir tada, kas yra paskutinis tipas?
>> PUBLIKA: pointer.
>> SPEAKER 1: Taip, taip, mes sužinojome, Šiek tiek apie rodykles.
Ir nepriklausomai nuo to, ką žymeklis nukreipta to-- ji galėtų būti char žvaigždė
ar int star--
ji visada 4 baitų rodyklė.
Klausimai apie tai?
Taip?
>> PUBLIKA: [nesigirdi]?
>> SPEAKER 1: Taigi ilgas ir int yra Šiame CS50 prietaiso pats.
>> PUBLIKA: prietaisas yra visiškai sukeisti.
>> SPEAKER 1: Taip.
Taigi ilgai ilgai dvigubai vid.
>> PUBLIKA: Tai 32-bit?
>> SPEAKER 1: 32 bit, taip.
>> PUBLIKA: Taigi [nesigirdi]?
>> SPEAKER 1: Taip, jei jis nėra aiškiai pasakyti, jus
turėtų prisiimti 32 bitų.
>> PUBLIKA: Tai ką pasakyti kaip prielaidą
architektūra, kaip prietaiso.
Dėl 64 bitų, tik tai, kas kaita yra ilgi ir patarimų.
Jie abu [nesigirdi].
>> SPEAKER 1: Taip?
>> PUBLIKA: Klausimas.
Taigi vienu iš praktikos viktorinos, jis klausia apie beženklis tarpt.
Taigi, kaip norėčiau, kad būtų nustatytas iš int [nesigirdi]?
>> SPEAKER 1: unsigned į tai, taip pat 4 baitai.
Bet kas skiriasi apie pasirašytas int ir unsigned int?
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Teisingai.
Vienas gali atstovauti neigiamas reikšmes.
Bet kaip tai padaryti?
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Taip, ji taupo 1 tiek atstovauti ženklą.
Pasirašė turi vieną tiek, kad atstovauja ženklas.
Ir nepasirašytas tiesiog visi teigiami.
>> PUBLIKA: Gerai.
Taigi jūs sakote, kad dvigubas yra du kartus iš plūdės dydis?
>> SPEAKER 1: Double dvigubai iš plūdės dydis, taip.
>> PUBLIKA: Kaip rodyklę į ilgai ilgai [nesigirdi]?
>> SPEAKER 1: Taigi klausimas yra, kaip veikia į ilgą long-- žymeklis
Kaip tai tik keturi baitai Kada ilgai ilgai jos 8 baitai.
Taigi prisiminti, kas yra žymeklis, iš esmės, tuo labai bazinės vertės.
>> PUBLIKA: [nesigirdi].
>> SPEAKER 1: Taip, taip, žymeklis yra tik atminties.
Taigi nesvarbu, kaip daug vietos kad žymeklis būtų nukreipta į.
Tai tik reikia 4 baitų sekti tos atminties vietos.
Visi kiti klausimai?
Cool.
>> Taigi paskutinis dalykas, aš turiu yra standartinė produkcija.
Jūs turėtumėte naudoti juos dažnai pakankamai, kad jūs galite prisiminti.
Bet tai kai mes naudojame printf, pavyzdžiui.
Ir mes turime šiuos rezervuotų kad buvo vadinamas formato kodai.
>> Taigi proc c char, proc I int, ir mes taip pat galime naudoti procentų r.
Tai tas pats dalykas.
Bet, apskritai, į CS50 mes pabandykite naudoti procentų i.
Procentas f už plūdės.
Procentas ld ilgai ilgai ir proc s eilutę.
>> Be to, mes jau naudojate kelias Šių sekas pabėgti.
Pavyzdžiui, backslash n naujosios linijos.
Tai tik dėl kai jūs formatavimą Jūsų kodas spausdinimo f.
Taip?
>> PUBLIKA: Kas yra procentai D?
>> SPEAKER 1: Taigi klausimas yra tai, kas yra procentai D?
Procentas d yra int.
Procentas d ir proc i yra tas pats.
>> PUBLIKA: Kas skirtumas tarp Backslash n ir Backslash r?
>> SPEAKER 1: Taigi klausimas yra tai, kas skirtumas tarp tarpo n ir
tarpelis r?
Manau backslash r is--
>> PUBLIKA: Taigi Backslash r tiesiog reiškia, grįžta į eilutės pradžią
be iš tikrųjų vyksta į naują eilutę.
Taigi, jei galite išspausdinti backslash r ir jūs grįžti į eilutės pradžią
tada jums spausdinti daugiau stuff, jūs perrašyti stuff, kad yra jau
[Nesigirdi].
Kadangi n tikrųjų eina į naują linija ir eina į [nesigirdi].
>> SPEAKER 1: Na, bet kokie kiti klausimai?
Viskas gerai.
Aš ruošiuosi perduoti jį išjungti Danas, kuris tęsis.
>> [Plojimai]
>> DAN: Visi righty.
Taigi aš kalbėti apie kitą pločio diapazonas idėjų iš klasės, kad yra
maždaug atstovas dvi savaites ir Savaitės trijų pradžia pradedant važiuoti
su liejimo, kuri yra tik iš būdų gydant vertę tam tikro tipo kaip
vertė skirtingo tipo.
Taigi, mes galime tai padaryti su simbolių į ints, plūdes į int, ir
long long padvigubinti.
>> Visi šie dalykai gali būti naudojamas kaip būdų gydant kai skaitinė vertė
atėmus char kaip kai kurie kiti skaitinė vertė.
Taigi yra keletas klausimų, su šiuo, iš Žinoma, kuris ateina, kai jums mesti
dalykų, pavyzdžiui, plaukti int.
Taigi, tai yra šiek tiek keista.
Mes turime plūdę, kuri yra 1,31.
Mes padauginkite jį iš 10.000.
Ir tada mes atsispausdinti jį kaip int.
Ką šis išėjimas?
10.000 kartų 1.31.
Taigi 13.000, yra tai, kad atspėti?
>> PUBLIKA: manau, kad tai 10,000.
>> DAN: Taigi, aš padauginus 10000 prieš aš liejimo jį.
>> PUBLIKA: O.
Ar ne ten būti vienas 9 o kai 0 numeriai?
>> DAN: Galbūt kažkokiam keistam skaitmenų.
Taigi teisinga, tai 1,3 karto 10.000.
Štai 13.000.
Ir tai papildomai weird--
>> PUBLIKA: 13.100.
>> DAN: 13.100.
Ačiū, Rob.
Ir tai papildomai weirdness--
tai 9,9--
Paprasčiausiai todėl, kad šios liejimo baigėsi apvalinant kur
ji neturėtų turėti.
Taip.
>> PUBLIKA: liejimo nutiks po ko nors kito?
>> DAN: Taigi, nes turiu tai spaudoje, tai daro šį dauginimąsi prieš jį
daro šį liejimas.
>> PUBLIKA: [nesigirdi].
>> DAN: Manau, kad tai būtų įmestas pirmas, Taip, tai būtų 10000.
Kitoks?
Cool.
Taigi tai yra 13.099.
Kodėl tai vyksta?
Netikslumų.
>> Plūdės nėra tobula.
Jie gali tik atstovauti numerius tam tikras skaičius reikšminių skaitmenų.
Taigi, jei mes atsispausdinti 8 SIG figų nuo tai plūdė, kurią mes gauname iš natūra
negraži ieškote skaičius.
Ir tai todėl, kad 1,31 negali tiksliai atstovauja paprastas
įgaliojimai dviejų mašinoje.
Taigi galų gale, atsižvelgiant arčiausiai atspėti, kuris baigiasi
yra šiek tiek mažas.
Padaryti jausmą?
Gerai.
>> Dabar, įjungus yra kitoks būdas daro sąlyginės ataskaitas, kuriose visų
mes rūpinamės yra vienas kintamas.
Taigi šiuo konkrečiu Pavyzdžiui, mes gauti žinutę iš vartotojo sveikasis skaičius.
Ir tada mes ieškome ką, kad sveikasis skaičius yra.
Matyt, tai skaičius tarp vieno ir keturių.
Štai ką mes prašyti.
>> Taigi jūs daug jungiklį kintamojo vardas.
Tada jums sukurti atvejus galima vertina tai galėtų būti.
Taigi byloje yra, sako, kad tai mažai.
Ir tada jūs pertrauka išeiti jungiklio būklę taip
Jūs neturite nesustoti.
>> Kitame case--
taip du byla ir byla three--
jei tai atvejis du jis tiesiog nukrenta žemyn Pirmoji eilutė kodo ji mato, kaip su
byloje trys, kol jis mato pertraukos.
Taigi priežastis gausite bylą vieną į tik spausdinimo mažai, nes aš
turėti šią pertrauką čia.
Jei aš, tarkim, ignoravo šį break-- jei aš išmetė šį breakaway--
ji atsispausdinti mažas, ir tada jis būtų spausdinti vidurį, ir tada jis būtų sulaužyti.
>> Taigi pertraukos svarbi Jungiklio sąlygas ir
jie turėtų būti ten.
Bet atvejai, kurie nėra aiškiai nurodyta, yra tvarkomi pagal nutylėjimą
atvejis jungiklio ir turi būti išmestas.
>> PUBLIKA: Taigi 1, 2, 3, ir 4 būtų n?
>> DAN: Vertybės kad n gali būti.
Taip.
Taip?
>> PUBLIKA: Taigi, kai jūs turite kad [nesigirdi]?
>> DAN: Galima būtų spausdinti mažas, ir tada būtų išspausdinti vidurį, ir
tada jis bus pertrauka.
>> PUBLIKA: Kodėl spausdinti viduryje, jei [nesigirdi]?
>> DAN: Taigi viskas pagal byloje prieš pertrauka patenka.
Taigi atvejis vienas atspaudas po atvejis vienas kaip tai po spausdinimo.
Taip?
>> PUBLIKA: [nesigirdi]?
>> DAN: Taigi šis skaičius yra tik pirma vertė, kad šis kintamasis
gali būti, tiesa?
Ar tai prasminga?
Taip.
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip, atveju du atspausdins viduryje ir tada pertrauka.
>> PUBLIKA: [nesigirdi]?
>> DAN: Manau, kad tokių yra?
Ką kiti duomenų tipai galite perjungti?
>> PUBLIKA: Jūs galite įjungti per bet duomenų tipų.
Bet tai tik reiškia, nieko per simbolių ir ints ir stuff like that, nes
jei esate pereinant rodyklę kad nėra prasmės,
pereinant krovinį, jeigu jis net tegul Jūs tai padaryti, nes slankiojo kablelio
tikslumo, jūs tikrai ne norite padaryti, kad vistiek.
Taigi gana daug, tik ints ir simbolių ir stuff like that.
>> DAN: Taip, tai yra, kai jūs turite aiškiai vertės, kad jūs žinote, aš manau, gali būti
kad jungiklis yra iš tikrųjų naudinga.
Geras?
Gerai.
>> Taikymo sritis yra diapazonas, kad deklaruota kintamasis apima.
Taigi šioje mažoje riekė kodas turiu, jis būtų pilnas klaidų.
Ir priežastis yra tai, aš paskelbė šį int i pagal šią taikymo sritį už kilpos.
Ir tada aš bandau nuoroda, kad i ne, kad kilpos taikymo sritį.
>> Taigi, iš esmės, jūs galite galvoti apie taikymo sritį kaip nieko, kad jūs deklaruoti
su viduje iš klamrami rinkinys tik egzistuoja tose klamrami.
Ir jei bandysite ir naudoti šį kintamąjį, už tų klamrami, jums
gauti iš kompiliatoriaus klaidą.
Taip?
>> PUBLIKA: Taigi tai vienas neveikia?
>> DAN: Tai neveikia, taip.
Stygos.
Styginių char *.
Jie lygiai taip pat.
Jie tiesiog rodykles simbolių.
Ir bet stygos, kad jūs turite turėtų baigtis su backslash nulio, kuri yra tik
c konvencija.
>> Tai vadinama NULL terminatorius.
Ir NULL--
kapitalas N kapitalas U kapitalas L, kapitalo L--
yra ne tas pats, kaip NULL terminatorius.
Tai žymeklis.
Tai personažas.
Jie yra labai skirtingi.
Prisiminti jį.
Tai bus viktorinos, tikriausiai.
Aš nemačiau viktorinoje.
Taip?
>> PUBLIKA: Taigi NULL, tarkim, žymeklis?
>> DAN: Taip.
>> PUBLIKA: Ką [nesigirdi]?
>> DAN: Jei, tarkim, malloc vadinamas kai jums neturi pakankamai atminties, kad gauti
kokio dydžio jūs klausia, malloc grįš NULL.
Tai, iš esmės, kai funkcija yra turėtų grįžti žymeklį, galite
reikia patikrinti prieš NULL, nes NULL gana good--
tai, tarsi, šiukšlių vertė.
Tai nulinis kiek rodykles eiti.
>> Kai skambinate funkciją, kad grąžina rodyklę.
Jūs ketinate norite patikrinti, kad būtų Įsitikinkite, kad, kad žymiklis nėra NULL
nes niekinis yra labai dažnas.
Tai tarsi šiukšlių mainais.
Taigi, jei kas nors nėjo į dešinę, tiesiog grįžti NULL vietoj.
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip, ir tai yra tai.
>> PUBLIKA: [nesigirdi]?
>> DAN: Rašybos jį kaip šis.
Tai NULL terminatorius.
Tai mažosios raidės N-U-L-l, jei jūs paraidžiui jį.
>> PUBLIKA: Ir aš tiesiog nuėjo atgal ir išbandyti jį.
Ir jei jūs bandote įdėti slankiojo kablelio vertė į jungikliu, jis bus klykauti ne jums
sakydamas, teiginys reikalauja išraiška iš sveikojo tipo.
>> DAN: There you go.
Bet taip, kas vėl buvo klausimas?
>> PUBLIKA: [nesigirdi]?
>> DAN: Taigi kapitalas N kapitalas U kapitalas L, kapitalas L yra tikrasis c dalykas.
Tai NULL žymiklį ir bus būti traktuojami tik kaip pvz.
Jums nebus kada nors pabandyti ir rašybos NULL pobūdį ir pamatyti, bet
Kitas būdas, nei tai.
Taip?
>> PUBLIKA: Taigi grįžtant į char max arba kažkas pastabose, ar ji
įkūnyti tą pačią funkciją kaip [nesigirdi]?
>> PUBLIKA: Taigi jūs nuoroda į grįžti char max nuo getchar arba
kokia ji yra?
>> PUBLIKA: Taip.
>> PUBLIKA: Taip, taip, apskritai terminas visoms tų dalykų,
yra kontroliniai dydžiai.
Taigi, kaip grįžti int max nuo GetInt ir char max nuo getchar, tai
turėtų būti kaip, gerai, jei šie dalykai grįžta į mus,
kažkas negerai.
>> Dėl rodyklės, mes tiesiog atsitikti, kad tai sarginių vertė, kad kiekvienas
sutinka ant.
Ir tai, ką jūs grįžti kai kas nors nesiseka.
Taigi char max ką mes naudojame atstovauti kažką
kaip NULL arba getchar.
>> PUBLIKA: Taigi, jei jūs išbandyti getchar, gal galėtumėte tiesiog įdėti NULL?
Ar tai padaryti skirtumą?
>> DAN: Jūs galite ne tik patikrinti NULL.
Jums tektų patikrinti char max, nes Grąžina reikšmę iš funkcija
charakteris ne žymeklis.
Taip?
>> PUBLIKA: Tokį klausimą už styginių ilgio.
Ar tai apima NULL charakterį?
>> DAN: Ne
Ir tai iš tikrųjų, kaip eilutės ilgis žino, kad sustoti, nes jis eina per
Jūsų masyvas simbolių, kol ji mato NULL charakterį.
Ir tada tai kaip visi Gerai, aš padaryti.
>> PUBLIKA: [nesigirdi] penkių?
>> DAN: Sveiki būtų penki.
Yep.
Taigi matricos yra nuolatinis blokai atmintyje.
Jie turi tiesioginę prieigą sakydamas pavadinimas masyvo ir tada garbanotus
petnešos, kokia indekso norite eiti į, jie indeksuojami nuo nulio per
masyvo minus 1 ilgis.
>> Ir jie deklaruotas tipą dalykas, kad jūs ją saugoti
masyvas, masyvo pavadinimas, o tada kokia apimtis to masyvo.
Taigi tai yra char masyvas ilgio šešių, kad turi šias vertybes.
Taip?
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip.
>> PUBLIKA: [nesigirdi]?
>> DAN: Jei turite tai, kas vyksta į masyvą jau yra padaryta.
Taigi jums gali nurodyti tai, o ne kaip, tarkim, char, nepriklausomai nuo vardo jūsų
masyvas, tuščios skliausteliuose lygi garbanotas petnešomis H kablelis kablelis E L kableliais L kablelį
O kablelis NULL pobūdis ir garbanotas petnešomis.
Tai taip pat dirba kaip deklaracijoje.
>> PUBLIKA: [nesigirdi]?
>> DAN: Tada jums reikia turėti dydis jau yra padaryta.
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip.
Visi righty.
Komandų eilutės argumentai yra iš būdų gauti informacijos iš vartotojo, kaip
argumentai pagrindinis.
Pagrindinis trunka du argumentus.
Argumentų skaičius, kad yra yra plaukė į komandų eilutę ir A
styginių vektorius arba styginių masyvas Visų pateiktų argumentų.
>> Taigi, jei aš, tarkim, vadinamas funkciją, pavyzdžiui, dot iš 1 vietos, 2 erdvės, trys,
argc būtų 4.
Ir argv 0 būtų taškas iš.
Argv1 būtų 1.
argv2 būtų 2 argv3 būtų 3, toje konkrečioje byloje.
Taip?
>> PUBLIKA: [nesigirdi]?
>> DAN: paskutinis elementas masyve nes masyvo ilgis argc plius
vienas argb, paskutinis elementas yra NULL žymiklį.
Tai argc plius 1.
Taigi tuo atveju, jei aš ką tik pasakė, kad būtų argv 0 yra taškas iš.
argv 1 yra 1 argv2 yra 2 argv 3 yra 3.
argv 4, kuris yra vienas didesnis nei argc būtų niekinis.
>> Ir tai NULL žymiklį.
Taip.
Ir tai todėl, kad eilutė yra char žvaigždė žymeklis.
Taigi ji turi būti to paties tipo.
Taip?
>> PUBLIKA: Du klausimai.
Taigi vienas, kas skirtumas tarp tai ir GetString išskyrus vienos rūšies
vartotojo variklis?
Ir du, jis saugomas Jūsų neseniai atmintis?
Taigi kaip, GetString būtų būti [nesigirdi]?
>> DAN: Kur jis saugomas?
Aš nežinau, kur jis saugomas.
>> PUBLIKA: Taigi, iš tikrųjų, jūs žinote, kaip bet kokia veikti skambinate tai argumentai
saugomi kamino?
Taigi argc ir argv yra argumentai Pagrindinis ir jie yra ant kamino, ar tikrai
šiek tiek aukščiau, ką jūs manote, kaip kamino pradžia.
Koks buvo kitas dalis klausimo?
>> PUBLIKA: Taigi, kas [nesigirdi]?
>> DAN: Taip, tai tiesiog kitoks būdas gauti indėlį iš vartotojo.
Tai vienas šiek tiek efektyviau ir tai tvirtos už scenarijų, nes jums
gali tiesiog praeiti argumentus jūsų pagrindinis funkcija, o ne laukti, kol
vartotojams, jei jūs neturite jokių naudotojų.
>> PUBLIKA: Ir taip, gauti stygos būtų [nesigirdi].
Būtų laikyti stuff jums reikia.
>> DAN: Taip?
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip, argv 0 visada yra dot slash iš skambinimo funkcijos.
Taip?
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip, kiekvienas iš argumentų yra baigėsi NULL pobūdžio, nes jie
yra stygos.
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip, argv argc yra NULL žymiklį.
>> PUBLIKA: [nesigirdi]?
>> DAN: Oh yeah.
Taip, atsiprašau.
>> PUBLIKA: Taigi [nesigirdi]?
>> DAN: Taigi klausimas yra, jei jūs turėjote komandinės eilutės dot slash dot iš 1, 2,
būtų iš komandinės eilutės numeris argumentai yra du ar tai būtų tris?
>> PUBLIKA: Manau, kad tai nėra tikrai svarbu.
Aš linkęs sakyti, oi, tu negali praeiti bet komandinės eilutės argumentai, kai
Akivaizdu, kad pavadino funkciją.
Taigi, aš linkę balsu neįtraukti funkcija iš komandinės eilutės
argumentai, nors tai įtraukti į argv.
>> DAN: Bet jei tai buvo ant test--
yeah-- ir taip pat, jei ką nors pasakyti kaip argc lygi 3,
jūs saugiai stovint.
Taip?
>> PUBLIKA: [nesigirdi]?
>> DAN: Manau, kad jei vietoj paskambinus tai į argc ir styginių argv skliausteliuose
bet laikomi tos pačios rūšies ir tiesiog vadinamas jiems kažkas kita, kaip
ir b, ar ji vis dar dirba?
Ir ji vis dar veikia, jūs just--
, o ne naudojant argc-- norite naudoti, ir b.
Taip?
>> PUBLIKA: [nesigirdi]?
>> DAN: Taigi klausimas yra GetString yra ketina saugoti atminties krūvos
nes GetString yra char *.
Jis saugo atmintį į krūvą, nes tai ragina dabar malloc per faktinį
įgyvendinimas GetString.
Gerai, juda toliau.
>> Saugumo.
Taigi būtų tikrai saugus, jūs remtis ne vienas ir leisite ne vieną prieigą prie bet
Jūsų informacija, kuri yra, kodėl visi stato savo mašinas,
jų pačių operacinės sistemos, visi jų programas iš naujo, ir akivaizdžiai
nejunkite jokių kitų mašinų internetu.
Taigi kompiuteriai nesaugus.
Jie tikrai yra.
Mes turime pasitikėti kitais žmonėmis.
>> Ir saugumo idėja yra ta, kad jūs esate bando apriboti sumą
pasitikėjimas, kad jums reikia.
Ir viena iš priemonių tai padaryti, kad yra per kriptografija.
Kriptografija yra iš esmės turime paslapčių.
>> Kartais mes turime praeiti mūsų paslaptis kartu per, tarkim, interneto arba
kitų dalykų.
Ir mes nenorime, kad žmonės žinoti šiuos paslaptis.
Taigi, mes užšifruoti mūsų paslaptis į taip kuri, tikimės, niekas negali išsiaiškinti.
>> Taigi, mes used--
per šio class-- žinoma
dalykų, pavyzdžiui, Cezario šifras ir [Nesigirdi], kurie abu labai, labai
nesaugių būdų šifravimo dalykų.
Jie lengva išsiaiškinti, ką jie yra ir tai, ką jūsų paslaptys.
Realaus pasaulio naudoja daug daugiau Sudėtingesni šifravimo sistemų.
Ir mes ne gauti į daug daugiau nei tai.
>> Derinimo.
GDB yra geriausias.
Aš ruošiuosi pabrėžti tai dar kartą.
Naudokite GDB visą laiką kiekvieną kartą jūs turite problemą.
Komandos, kurios yra naudinga GDB yra pertrauka, kurios jums perduoti arba linija
skaičius, funkcijos pavadinimas, iš esmės kur jūsų kode norite sustabdyti,
ir galės imtis kontroliuoti.
>> Spausdinti trunka kintamąjį ir spausdina kokia, kad kintamasis yra, kad
vieta jūsų vykdymą.
Kitas juda savo vykdymo kartu vieną žingsnį.
Ir žingsnis veiksmų viduje funkcijos jūsų vykdymą.
>> Kiti dalykai yra paleisti, kuris yra, kaip jūs iš tikrųjų paleisti savo kodą.
Tęsti imasi visų priemonių, reikalingų patekti į kitą pertraukos tašką.
Ir yra daug, daug kitų.
Galite juos.
Jie puikiai.
Taip?
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip, tai yra debuggerem.
Taigi debuggerem yra programa, kuri leidžia jums derinti savo programą.
Tai nėra programa, kuri nustato klaidas ir jūs, nors tai būtų puiku.
>> Ir paskutinis, man yra paieška.
Taigi ieškant tipų, kad mes kalbėjome apie šioje klasėje yra tiesinė paieška,
kuri yra tiesiog, kad jums atrodo per kiekvieną elementas paieškos erdvėje, vienas
elementas vienu metu, kol rasite ką Jūs ieškote arba kol pasieksite
Jūsų paieškos erdvėje galas, kuriame atkreipti jums pasakyti, kad tu negali rasti
elementas, kad jūs ieškote.
Ir tai trunka geriausiu pastovų laiką, kuris yra 0 iš 1 ir blogiausiu linijinių
laikas, kuris yra 0 n.
>> Dvejetainiai paieškos, kuri turi niekingas elementai.
Nueini į vidurį savo elementais, pamatyti, jei elementas jūs ieškote
yra didesnis arba mažesnis nei elementą kad jūs esate viduryje.
Tai jis didesnis, jūs sakote, kad dugnas Jūsų paieškos erdvė yra jūsų
dabartinės buvimo vietos, vidurinis, ir jūs iš naujo procesą.
Jei jis mažesnis, jums atrodo pasakyti kad the-- Taip, kas atsitiko?
>> PUBLIKA: [nesigirdi]?
>> DAN: Taip.
Bet rūšiuoti rūšiuoti, kad manimi buvo mokoma klasė teisingas žaidimas testą.
>> [Juokas]
>> DAN: Ir tai, kad jūs neturėjote padaryti jį probleminę rinkinys, tai teisinga
žaidimas testą.
>> PUBLIKA: Ar mes galime eiti per jį, kaip to--
>> DAN: Tai bus dingo daugiau.
>> SPEAKER 2: tikrasis kodas [Nesigirdi] yra study.cs50.net.
Taigi, jei jums pažvelgti į praktikos problemos į suliejimą rūšiavimo puslapyje
study.cs50.net, yra kodas įgyvendinimo sujungti rūšiuoti.
Taigi jūs neturite įdiegti jis sau vakarą.
Tačiau įsitikinkite, kad jums suprasti, o ne tik įsiminti jį.
>> PUBLIKA: [nesigirdi]?
>> SPEAKER 2: sujungti tarsi puslapyje study.cs50.net, yra praktika
problema, kad jei paspausite per problema, pačioje pabaigoje yra
sprendimas, kuris yra sujungti Rūšiuoti įgyvendinimas.
Tačiau įsitikinkite, kad jūs jį suprasti o ne tik įsiminti jį
ar kopijuodami ją žemyn.
>> PUBLIKA: Ir puikiai galioja problema egzaminams būtų
kažkas panašaus čia sąrašas.
Ką šis sąrašas atrodyti po vienas žingsnis atrankas rūšiuoti arba
įterpimo rūšiuoti ar dar ką nors.
Vienas visą pasikartojančių sąrašo.
Taigi, net jei jūs neturite galų gale, kuriems reikia kodas už jį, jums reikia jį suprasti
Pakanka žinoti, kaip tai vyksta būti pakeisti šią masyvo.
>> DAN: Štai ji už mane.
>> [Plojimai]
>> LUCAS: Hey everyone.
Mano vardas Lukas.
Aš ruošiuosi kalbėti apie rekursijos, visi kad rūšių, kad mes sužinojome, ir
Šiek tiek visų patarimų.
Gerai?
Taigi, visų pirma, rekursija.
Ką tai reiškia pasakyti, kad funkcija yra grįžtamojo?
>> PUBLIKA: vadina save.
>> LUCAS: Gerai, vadina save, taip.
Taigi, kaip šioje nuotraukoje, pavyzdžiui.
Tai kaip paveikslėlyje viduje iš paveikslėlio ir pan.
Taigi, pavyzdžiui, galite have-- Dano kad buvo kalbama apie dvejetainėje paiešką.
Vienas iš būdų, dvejetainis paieška grįžtamojo yra tai, kad jūs esate
bando rasti skaičių.
Taigi jūs einate į vidurį.
Ir tada jums patikrinti, jei ten skaičiai į kairę ir į dešinę.
>> Ir tada, jei sužinojote, skaičius yra bus kairėje, tai tas pats
dalykas, kaip daro dar kartą atlikti paiešką bet tiesiog dėl sąrašo kairėje.
Štai kaip tai skamba kaip tai pakartotinė.
Štai kodėl vaikinai turi grįžtamojo sprendimas merge rūšiuoti.
>> Gerai, kad čia yra pavyzdys.
Taigi tarkime, kad aš noriu pasirinkti visi skaičiai nuo 1 iki n.
Galiu suprasti, kad "n suma skaičius yra n plius n atėmus 1 iki 1.
Bet tada, jei žiūriu n minus 1 plius n atėmus 2 plius 1, tai tas pats
dalykas kaip sudedant numeriais iki n atėmus 1.
Taigi galiu pasakyti, kad vienodas sumą sumą lygi n plius apie n minus 1 suma.
Ar tai prasminga?
>> Ir aš taip pat turės ką nors kita vadinamas bazinį scenarijų, o tai, kad
iš skaičių suma iki nuliui, turėtų būti nulinis.
Taigi, kai aš gauti į numerį nulis, aš sustabdyti skaičiuoti.
Ar tai prasminga?
>> Taigi čia kaip pavyzdys Galiu įgyvendinti tai.
Taigi turiu šią funkciją kai.
Tai užtrunka sveikasis skaičius n.
Taigi čia aš pirmą kartą patikrinti, ar n mažiau arba lygi nuliui.
Taigi, jei tai yra mažiau arba lygus nuliui, aš grįžti nulį, kuri yra mūsų bazė atvejis.
Priešingu atveju, aš galiu tik grąžinti n plius iš skaičių suma iš
vienas n minus vienas.
Padaryti jausmą?
Gerai.
>> Taigi čia, kaip jis atrodo.
Turite sumą 2 lygių 2 plius 1, suma.
Ir kai kurie iš 1 yra 1 plius suma 0, kuris yra 0.
Padaryti jausmą?
Taigi, jei mes pažvelgti į krūvą savo programa, tai, kaip jis atrodo.
>> Pirma, mes turime pagrindinę funkciją.
Ir tada pagrindinė funkcija vadinama suma 2.
Ir tada suma 2 ketina pasakyti, oh, suma 2 yra lygus 2, plius vieną sumą.
Taigi, aš pridėti sumą 1 iki kamino.
Ir iš 1 suma ketinate skambinti sumą 0, kuris taip pat bus pridėta
į krūvą.
Ir tada kiekvienas iš šių tuos, kurie yra ant kito turi grįžti
prieš kitus tie gali nesustoti.
>> Taigi, pavyzdžiui, čia, suma 0, pirma, ketina grįžti 0.
Ir tada pasirinkti sumą 1.
Tada suma 1 ketina grįžti 1 Apibendrinant 2.
Ir, pagaliau, suma 2 vyksta grįžti 3 į pagrindinį.
Ar tai prasminga?
>> Tai tikrai svarbu suprasti, kaip kamino dirba ir stengiasi
pamatyti, jei ji turi prasmę.
Gerai, kad rūšiavimas.
Tad kodėl rūšiavimas svarbus, pirmiausia?
Kodėl turėtume rūpintis?
Kiekvienas?
Duok man pavyzdį?
Taip?
>> PUBLIKA: [nesigirdi].
>> LUCAS: Taip, gerai.
Taigi jūs galite ieškoti efektyviau.
Štai geras būdas.
Taigi, pavyzdžiui, mes turime daug dalykų, iš tikrųjų, mūsų gyvenimai, kad
bus rūšiuojami.
Pavyzdžiui, žodynai.
>> Tai labai svarbu, kad visi žodžiai tam tikra tvarka, kurią mes
gali lengvai pasiekti.
Štai ką jis sako.
Jūs galite ieškoti efektyviau.
Pagalvokite apie tai, kaip sunku būtų turėti žodynas, kuriame žodžiai yra
atsitiktine tvarka.
Jūs turite žiūrėti, gana daug, kiekvienas žodis, kol rasite
žodis, kad jūs ieškote.
>> Jei jūs naudojate "Facebook", taip pat, kai jūs ieškote savo draugais, esate
ketiname pamatyti, kad "Facebook įdėti savo arčiau Draugo viršuje tie
kad jums nereikia kalbėti, kad daug.
Jei pereiti visą kelią į dugną Jūsų draugas sąrašas, jūs ketinate pamatyti
žmonės, kad jūs tikriausiai net nereikia nepamirškite, kad jūs esate draugai su.
Ir tai todėl, kad "Facebook" rūšių jūsų draugai remiantis kaip
uždaryti esate su jais.
>> Taigi organizuojant duomenis.
Taip pat Pokemon.
Taigi, kaip matote, kad visi pokemons turi numerius.
Ir tai, kaip lengva būdas prieigą prie duomenų.
>> PUBLIKA: Priėjimas prie Pokemon.
>> LUCAS: Taip.
>> PUBLIKA: [nesigirdi].
>> LUCAS: Yep.
Gerai, kad atranka rikiuoti.
Atrankos tarsi ketina pasirinkti mažiausia nerūšiuotus vertė sąrašą kiekviena
Laikas kiekvienos iteracijos.
Tai lyg panašaus, kad jūs galvą, kai bandote
rūšiuoti po ranka, sąrašą.
>> Iš esmės, visi jūs darote, yra jums atrodo už mažiausio skaičiaus.
Jūs įdėti jį į rūšiuotų sąrašą.
Ir tada jums ieškoti Kitas mažiausias skaičius.
Ir tada jūs nuolat daro kad ir taip toliau.
>> Taigi pasirinkimas tarsi iš esmės jūs pasirinkti kiekvieną kartą mažiausią
nerūšiuotus vertė.
Įdėkite pasibaigus rūšiuojami pabaigoje dalis, sąrašą.
Ir nuolat daryti.
Tad greitai pamatyti, kas tai atrodo.
Taigi čia yra rūšiuojami ir nerūšiuotus sąrašas.
>> Taigi rūšiuojami sąrašo, tai iš pradžių tuščias.
Ir tada aš ruošiuosi pasirinkti Mažiausiai čia, kuris yra 2.
Taigi man su numeriu 2 ir aš į sąrašą priekyje.
Ir tada aš ieškoti šalia mažiausias elementas, kuris yra 3.
Taigi, aš įdėti jį pabaigoje išrūšiuotų sąrašą.
Ir tada aš nuolat daryti.
Manau, 4 ir įdėti jį pabaigoje.
Ieškoti 5 ir įdėti jį pabaigoje.
>> Ir pažvelgti, kaip visus tuos kartus, kad Aš sakau įdėti jį galas,
iš esmės, keičiant dvi reikšmes.
Gerai?
Ir tada naujausia, ką tik turi daugiau kaip vieną elementą.
Taigi jis jau išrūšiuotos.
>> Gerai, kad įterpimo rūšiuoti.
Įterpimas tarsi jūs ketinate turėti, taip pat kad padarius rūšiuojami dalykas ir
nerūšiuotus sąrašas.
Vienintelis dalykas yra tai, kad kiekvieną kartą, kai norite pridėti elementą į rūšiuojami
sąrašas, jūs tiesiog pasirinkti elementą, kuris yra priešais nerūšiuotų sąrašą.
Ir tada jūs einate rasti ką pozicija turėtų būti surūšiuoti
dalis, sąrašą.
>> Pažiūrėkime, kas tai yra, kad tai suteikia daugiau prasmės.
Taigi iš pradžių, pavyzdžiui, aš bandau įterpti numerį trys
Rūšiuoti dalis sąrašo.
Taigi sąrašas neturi nieko.
Taigi aš galiu tiesiog įdėti 3 numeriu.
>> Dabar aš noriu pridėti skaičių 5 į Rūšiuoti dalis sąrašo.
Taigi, aš pažvelgti į skaičius 5.
Aš pastebėjau, kad jis didesnis nei 3.
Taigi aš žinau, kad ji turi būti po 3.
Taigi, aš įdėti 3 ir 5 dalis.
>> Tada aš noriu įterpti numerį 2.
Aš pastebėjau, kad skaičius 2 yra faktiškai trukti tada abu 3 ir 5 dalis.
Taigi aš iš tikrųjų turite įdėti visa tai būdas sąrašo pradžioje.
Taigi aš turiu, tipo, perkelti visus elementai surūšiuoti sąrašą, kad galėčiau
padaryti kambarį už skaičių 2.
>> Tada matau skaičių 6.
Matau, kad jis turėtų būti po 5.
Taigi, aš įdėti jį čia.
Ir pagaliau, aš pažvelgti į skaičius 4.
Ir aš pastebiu, tai turėtų būti tarp 3 ir 5.
Ir tada aš jį ten ir perėjimas visi kiti elementai.
Padaryti jausmą?
>> Burbulas Rūšiuoti.
Taigi burbulas tarsi iš esmės yra tai, ką jūs ketina do-- mes jį vadiname burbulas
Rūšiuoti nes jūs einate per list-- tai tikrai geriau, jei aš tiesiog parodyti
norite this--
ir jūs ketinate palyginti gretimi skaičiai.
Ir jūs ketinate iškeisti pozicijų, jeigu jie nėra
teisinga tvarka.
>> Taigi, iš esmės, tai, kas vyksta atsitikti čia, pavyzdžiui,
jūs turite 8 ir 6.
Jūs žinote, kad Rūšiuota įsakymas iš tikrųjų yra 6 ir 5, tiesa?
Taigi jūs ketinate apsikeitimo užsakymus.
Tada matau 8 ir 4 čia.
Ir aš tą patį.
Aš apsikeitimo vėl.
Ir, pagaliau, 2 ir 8.
Aš taip pat sukeisti juos.
>> Tai vadinama burbulas Rūšiuoti nes po kiekviena iš šių iteracijų, iš tikrųjų,
Daugiausia sąraše gauna visi kelias į sąrašo pabaigą.
Ar tai prasminga?
Nes ji saugo keičiant jį ir perkelti jį į dešinę.
>> Gerai, kad tai yra antra iteracija.
Tai būtų tas pats dalykas.
Aš tai vieną apsikeitimo ir tada naujausia.
Aš, kad nėra apsikeitimo ir sąrašas surūšiuotas.
Taigi Bubble Rūšiuoti, mes iš esmės išlaikyti išgyvena sąrašo ir Swapping
dalykų, kol aš pastebėsite, kad aš ne daryti bet apsikeitimo daryti, kad iteracijos, kurios
reiškia, kad sąrašas yra jau išrūšiuotos.
Padaryti jausmą?
>> Pakalbėkime šiek tiek apie bėgančio laiko.
Taigi jūs vaikinai prisiminti Big O Omega ir teta?
Taip?
Gerai, kas yra Big O, visų pirma?
>> PUBLIKA: [nesigirdi].
>> LUCAS: Aha, jis vadinamas blogiausiu atveju Runtime, kuris tiesiog reiškia, kad jis
kiek tikitės programą imtis paleisti.
Kaip, kalbant of--
Šiame case-- n.
Elementų skaičius sąrašas blogiausiu atveju.
Kaip, blogiausiu galimu atveju.
>> Taigi burbulas rūšiuoti, pavyzdžiui, Turime didelę Õ n kvadratu.
Kodėl mes turime tai?
Kodėl burbulas Rūšiuoti Didelės O n kvadratinių?
>> PUBLIKA: [nesigirdi].
>> LUCAS: Taip, taip, blogiausiu atveju bus kad aš turiu daryti n iteracijų.
Taigi kiekvienas iš iteracijų ketina atnešti didžiausią elementą prie pabaigos
iš sąrašo.
Taigi blogiausiu atveju yra tai, kad aš turiu padaryti, kad dalykas n kartų.
Ir kiekvienas iš tų laikų, turiu padaryti n apsikeitimo nes turiu palyginti
kiekvienas iš dviejų elementų.
Štai kodėl ji n kvadratu nes tai n kartų n.
>> Tada pasirinkimas tarsi taip pat n kvadratinių nes kiekvienos iteracijos, turiu
pažvelgti kiekvieną elementą sąraše.
Ir tada rasti mažiausias, o tai reiškia, kad aš turiu
atrodo per n elementų.
Ir aš turiu daryti, kad n kartų, nes Turiu pasirinkite visus n elementų.
>> Įterpimo rūšiuoti taip pat n kvadratinių nes blogiausiu atveju bus
būti, viena, turiu įterpti n numeriai, tiesa?
Taigi, aš jau žinau, kad aš ruošiuosi turėti n iteracijų.
Tačiau kiekvienas iš šių numerių, jei turėjau pažvelgti į visus numerius
rūšiuojamos sąrašą ir įdėti jį visą kelią priekyje, kad bus n kvadratinių
nes ji bus n kartų n dar kartą.
Padaryti jausmą?
Ką apie omega?
>> PUBLIKA: [nesigirdi].
>> LUCAS: Tai geriausias scenarijus.
Taigi, tai, kaip, kad daug kartų už rūšiavimas, geriausias scenarijus yra
kai sąrašas jau išrūšiuotos.
Taigi jūs neturite iš tikrųjų turi nieko daryti.
Burbulas Rūšiuoti turi geriausias scenarijaus atveju n.
Ar jūs žinote, kodėl?
>> PUBLIKA: [nesigirdi].
>> LUCAS: Taip, jei jums sekti ar duomenys racionas neturėjo apsikeitimo arba
ne, jei turite kažką panašaus nustatytas tiesa, jei ten buvo iteracija, jei
sąrašas jau rūšiuojamos, iš esmės, kas nutiks tai aš ruošiuosi
pabandykite sukeisti kas du gretimi elementai.
Aš ruošiuosi pamatyti, kad nėra apsikeitimo.
Ir aš tiesiog grįžti iš karto.
>> Taigi tai reiškia, kad aš tiesiog turėjo eiti per sąrašą vienu metu.
Taigi, tai n, nes man atrodo ne n elementų.
Kodėl pasirinkimas tarsi n kvadratu?
>> Taip, net jei sąrašas surūšiuotas, už kiekvienas atrankos rūšiuoti iteracija, aš
turite pasirinkti mažiausią elementą.
Taigi, tai reiškia, kad aš turiu atlikti ieškoti ne visus nerūšiuotus elementus
sąrašą ir rasti mažiausiai kiekvienos iteracijos.
Ar tai prasminga?
>> Ir įterpimas kardas yra n, nes atvejis, kad aš bandau įterpti
Skaičiai ir visus numerius, kai aš pabandykite įdėti juos, matau, kad jie
yra teisingoje padėtyje.
Aš neturiu eiti patikrinti, ar visi kiti numerius nerūšiuotų sąrašą.
Štai kodėl ji bus n.
Padaryti jausmą?
Ir kas yra teta?
>> PUBLIKA: [nesigirdi].
>> LUCAS: Kas, atsiprašau?
Pasakykite, kad jį dar kartą.
>> PUBLIKA: [nesigirdi].
>> LUCAS: Būtent.
Taigi jūs galite pamatyti, kad tik pasirinkimas saugomi Merge sort turi thetas.
Ir tai todėl, kad jūs turite tik teta jei abi Didelės O ir Omega yra tas pats.
Gerai.
Ir, pagaliau, sujungti tarsi yra žurnalo n.
>> Ir tada, kaip Dan sakė, Merge sort yra lyg taip pat, kad
jūs dvejetainis paiešką.
Taigi Jūs gaunate sąrašą.
Ir jūs ketinate sumažinti perpus.
Ir tada jūs supjaustyti juos mažesniuose puselės.
Ir tada jūs juos sujungti.
Jūs vaikinai prisiminti, kad, tiesa?
Gerai, kaip jis sakė.
>> Gerai, rodyklės.
Taigi, kas yra žymeklis?
>> PUBLIKA: [nesigirdi].
>> LUCAS: adresas.
Gerai.
Aš žinau, kad Dovydas rodo krūva filmai apie Binky ir viskas nukreipta
tarpusavyje.
Bet man patinka galvoti apie rodykles vien kaip adresą.
Taigi, tai kintamasis, kuris vyksta saugoti adresą.
>> Taigi, tai tik šis specialus kintamasis kad yra keturių baitų ilgio.
Atminkite, kad žymiklis nieko yra visada keturių baitų ilgio mūsų 32-bit
mašina taip daroma prietaisas.
Ir jis tiesiog turi vietą iš viduje jo kintamojo.
>> Gerai, kad ten tai atmintis, iš esmės.
Taigi, kiekvienas atminties blokas iš tikrųjų turi etiketės, kuri yra adresas
slotty atminties.
Taigi, tai reiškia, kad aš galiu turėti rodyklė nukreipta į
bet kurį iš šių adresų.
Taigi priežastis, kodėl mes naudojame patarimų yra jei aš turiu prisiminti vietą
kad konkretus kintamasis yra atminties.
>> Ir jūs vaikinai prisiminti, kad vienas iš tų atvejai buvo, jei aš turiu tam tikrą funkciją
jei aš iš tikrųjų noriu, kad jūs apsikeitimo už Reals, aš iš tikrųjų
turi siųsti rodyklę.
Ne kintamasis.
Ar jus vaikinai prisiminti, kad?
Skirtumas between--
kas yra vardas?
Skambinimas pagal vertę ir skambina nurodant, ar ne?
>> Gerai, taip.
Taigi skambinkite vertės.
Kai jums tiesiog siųsti kintamąjį funkcionuoti jūs tiesiog siunčiant vertę.
Taigi jūs tikrai siuntimo kintamojo kopiją.
Ir jūsų programa negalėjo rūpintis mažiau apie tai, jei pats kintamasis tikrųjų
daro kopiją.
>> Ir skambinimą nuoroda reiškia, kad Aš iš tiesų siųsdami kopiją
žymiklį į tą kintamąjį.
Taigi tai reiškia, kad aš siuntimą vieta, kad kintamasis.
Taigi pajusti turiu vietą kintamasis, kai aš skambinti funkcija
su rodyklėmis, aš galėtų iš tikrųjų keisti duomenis, kurie buvo pagrindinis.
Padaryti jausmą?
>> Nors, žymeklis yra kopija, rodyklė dar turi realų adresą
kintamasis, noriu pakeisti.
Padaryti jausmą?
>> Taigi kuriant patarimų.
Atminkite, kad žymeklį visada tipo, kad ji nukreipta
ir po to žvaigždę.
Ir tada jūs galėsite įdėti pavadinimą.
Taigi nepamirškite, kad jei turite kokia žvaigždė, tai kaip rodyklė į
kad nepriklausomai nuo kintamo tipo, kad jūs turėjote.
>> Taigi čia žvaigždė, pavyzdžiui, tai žymeklis ir sveikasis skaičius.
Ir tada char žvaigždė žymeklis char žvaigždė ir pan.
Taip?
>> PUBLIKA: Ką daryti, jei mes turime rodyklė n žvaigždė x.
Žinau, kad sukuria žymiklį į x.
Ar ji taip pat paskelbti x sveikasis skaičius?
>> LUCAS: Gerai, kad, kai jūs sakote n star x, jūs ne sukurti rodyklę
kintamasis x.
Jūs kuriate rodyklę pavadintas x.
>> PUBLIKA: [nesigirdi].
>> LUCAS: Taigi, kai aš sakau, n star x, aš sakydamas, ei, į atmintį, aš ruošiuosi
gauti vieną iš šių trijų langelių.
Ir aš ruošiuosi pasakyti, kad šis bus x, kuris yra
bus žymeklis.
Ir kažką įdomaus apie rodykles yra tai, kad mes sakome, kad jie turi
4 baitų 32 bitų mašina.
Ir dėl šios priežasties yra todėl, kad 4 baitai 32-bitai.
>> Ir mašinos, kurios yra 64 bitai iš tikrųjų turi patarimų adresus
kad yra 64 bitų ilgio.
Taigi tai tiesiog reiškia, kad iš dydis adresai mašinoje yra skirtingas.
>> Taigi nurodymas ir Dereferencing.
Yra du operatoriai, kurie vaikinai turėtų prisiminti.
Pirmasis ampersand.
Antrasis yra žvaigždė.
Negalima susipainioti ta žvaigždė ir tai STAR reikalavimus, nes prisimenu, kad
Šiuo atveju, jūs turite n žvaigždė.
>> Tai kaip visa tai kartu.
Nėra n Space Star.
Taigi tai reiškia, kad jis tipo.
Atminkite, kad kai jūs turite kintamasis žvaigždė, esate
kalbame apie tipo.
>> Jei turite tik žvaigždę, o tada pavadinimas kintamąjį, tai reiškia, kad
jūs dereferencing žymeklį, kuris tai reiškia, kad jūs ieškote
žymeklis, rasti adresą, tai nukreipta į, einu į tą adresą,
ir žiūri, kai jūs turite ten.
Taigi aš sakau mano studentai, kad jei turite žvaigždė, jums reikia galvoti, kad jis
iš turinio santrumpa.
>> Taigi, jei turite žymeklį ir jūs padaryti žvaigždės žymeklį, tai
turinys žymeklis.
Taigi jūs einate į kokia ji nukreipta į ir pažvelgti į nuolat turinį.
Ir ampersand yra pats dalyko kaip adreso.
>> Taigi, jei aš turiu A-- kaip kintamąjį, tegul pasakyti, kad aš vid lygi 3--
jei aš noriu rasti, kad adresą kintamasis atminties, galiu tik daryti
Ženklas.
Taigi, tai adresas.
Padaryti jausmą?
>> Taigi čia yra pavyzdys.
Tai nėra int b ir c int.
Taigi int lygus 3 reiškia, kad Aš ruošiuosi eiti į atmintį.
Ir aš ruošiuosi rasti lizdą ir įdėti 3 numeriu čia.
>> Ir tada int B lygus 4.
Aš ruošiuosi daryti tą patį.
Eiti į atmintį ir įdėti numerį 4 viename iš dėžės.
Ir int lygus 5.
Find another langelį ir įdėti numerį 5.
>> Taigi, kas yra ši eilutė darai? n žvaigždė pa lygi ampersand a.
Taigi, visų pirma, n žvaigždė pa.
Kas tai daro?
>> PUBLIKA: [nesigirdi].
>> LUCAS: Taip, taip n žvaigždė pa, pirma, pareiškia žymeklį vadinamas pa.
Ir tada ji paskiriant į vertę kad žymeklis būtų iš adresas.
Taigi Ženklas.
Tada, jei aš žvaigždė PB, kas yra žvaigždė pb?
>> Oi, atsiprašau.
Tai taip pat nėra. n star pb.
Aš turiu galvoje žvaigždės vnt.
Man labai gaila.
Tai tas pats dalykas.
Bet dabar aš geras AR sukurti rodyklę B ir tada žymiklį į c.
Taip?
>> PUBLIKA: [nesigirdi]?
>> LUCAS: Taip.
Taigi, jei jūs einate į atmintį, ir jūs einate į langas, kuris yra žymintis per metus,
jūs iš tikrųjų ketiname pamatyti pavyzdį adresą.
Gerai?
Taip?
>> PUBLIKA: [nesigirdi]?
>> LUCAS: Taip, žymeklis adresas.
Niekada nepamirškite, kad.
Tai kaip svarbiausias dalis apie rodykles.
Yra sandėliavimo ir adresas tam tikru kintamuoju.
Kitoks?
Visi kiti klausimai?
Gerai.
>> Taigi Pointeriai ir masyvai.
Atminkite, kad kai aš int masyvas 3, Iš esmės, ką aš darau yra aš, natūra
d nurodydama, rodyklė.
Taigi masyvas yra lyg rodyklė į konkrečią vietą atmintyje, kurioje aš
skiriama tris tarpsnius sveikieji skaičiai.
Ar tai prasminga?
>> Taigi, kai aš padaryti int masyvas 3, ką aš daro, iš esmės, yra sukurti trys
lizdai atmintyje.
Taigi aš tiesiog rasti trijų lizdus atminties.
Taigi, jei aš, tada, žvaigždė masyvas, jį Iš esmės tai reiškia, kad matrica turinį,
o tai reiškia, aš ištrinti žymeklį, aš einu į tą vietą, kad ji būtų nukreipta į,
ir aš įdėti numeris vienas.
>> Ir tada, jei aš žvaigždė masyvo plius 1, tai tas pats, kaip daro masyvo
kronšteinai vienas, kuris tiesiog reiškia, kad aš eiti į vieta, kad ji nukreipta ne.
Ir tada plius 1 markių man pereiti per vieną poziciją.
Taigi aš einu į šią poziciją, iš tikrųjų, ir įdėti numeris du.
>> Ir tada, pagaliau, kai aš masyvas plius 2, aš einu ten, kur
Array savo nukreipta ne.
Ir tada aš pereiti prie atminties blokus.
Ir tada aš įdėti numeris trys čia.
Taip?
>> PUBLIKA: Taigi žvaigždė masyvas yra tiesiog sakydamas labai pirmąjį tašką.
Ir jūs galite pridėti 1, tik todėl, kad mes tik tikrai
nuorodos, kad pirmąjį adresą.
>> LUCAS: Taip.
Kodėl mes, pavyzdžiui, pasakyti, masyvas 0, 1 masyvas, ir masyvas 2?
Aš sakau, kodėl jūs darote 0, 1, 2, 1 3, o ne 2, 3?
Viena iš priežasčių yra, vienas, kompiuterio programuotojai nori pradėti
skaičiuoti nuo 0.
Du yra, nes, kai jūs darote įvairių 0, tai tas pats, kaip daro masyvo
plius 0, o tai reiškia, aš einu į kad pozicija, ir aš ne
praleisti visas atminties blokus.
Taigi aš nemanau, perkelti visas atminties blokus.
Taip?
>> PUBLIKA: [nesigirdi]?
>> LUCAS: Taigi ji klausia, kas yra tarp daro skirtumą
tai ar daro malloc.
Vienas iš skirtumų yra tas, kad int masyvas 3 yra sukurti
masyvas ant kamino.
Ir kai aš malloc, jį sukuria ant krūvos.
Ar tai prasminga?
>> Taigi, kaip malloc faktiškai dirba?
Taigi, kodėl mes net reikia naudoti malloc?
Jūsų sudarytojas rūšies skaičiai iš visų kintamieji, kad jūs deklaruotos.
Ir jis sukuria erdvę visiems iš jų kamino.
Taigi visi jūsų kintamųjų vyksta būti kažkur kamino.
Taigi čia yra aplinkos kintamieji.
>> Taigi, iš esmės, erdvė tiems kintamiesiems, atmintyje skiriama ne
kompiliavimo metu.
Taigi tai reiškia, kad jūsų kompiuteris turi žinoti visų šių kintamųjų
iš anksto.
Jam nereikia žinoti, kas vertė jūs ketinate įdėti į juos.
Tačiau reikia žinoti, kaip kiek atminties jūs turite.
>> Bet dabar tarkime, kad, pavyzdžiui, kuriate masyvą arba atsižvelgiant
eilutė, kad jūs vartojate nuo naudotojo.
Jūs nežinote, kaip ilgai eilutė bus, pavyzdžiui.
Taigi jūs nežinote, kiek tiksliai atminties blokai jums skirti, ar ne?
>> Taigi tai tikrai ne prasmės jums pasakyti įdėti 100 simbolių.
Ir kas tada, jei vartotojas rašo 150?
Jūs ketinate būti prisukamas.
>> Taigi, iš esmės, jūs negalite būti tikri, kaip Kiek atminties reikia skirti
kai sudaryti programą.
Jūs tiesiog žinau, kad vykdymo metu.
Štai kodėl jūs turite krūvą.
Taigi krūva turės atmintį kad jūs skyrimo metu
trukmės programa veikia.
>> Taigi, iš esmės, kai jūs darote malloc, ką darote paskirstyti atmintį
Runtime, o tai reiškia, kad jūs esate Sprendžiant teisę tuo metu, kad jus
turėtų būti, kad atminties.
Štai, kai jūs jį paskirstyti.
Ar tai prasminga?
>> Taigi nepamirškite, kamino turi kintamuosius kad yra sukurta kompiliavimo metu.
Ir tada krūva yra kintamieji kad yra sukurta, kaip jūs einate
su malloc, pavyzdžiui.
>> PUBLIKA: [nesigirdi]?
>> LUCAS: Taigi GetString yra ketinate skambinti malloc.
Leiskite kalbėti apie malloc ir Aš paaiškinti GetString.
Taigi malloc yra tas pats, kaip atminties paskirstymas.
Taigi ji ketina skirti atminties į krūvą.
Ir jis ketina grįžti rodyklę į kai ta atmintis buvo skirta ne.
>> Taigi, kai jūs do--
čia example--
n star žymeklis.
Ir tada žymiklį lygi malloc dydis colių kartus 10.
Aš sukurti rodyklę.
Ir tada aš priskiriant tą rodyklę iš rodyklės, kad malloc vertė
duoda man.
>> Taigi aš prašau malloc galite skirti plotas 10 sveikieji skaičiai.
Štai ką jis sako.
Ir malloc suteikia man atgal žymiklį į tą vietą.
Padaryti jausmą?
Gerai.
Aš Ir GetString yra, iš esmės, daro skambinti į malloc, todėl jūs galite paskirstyti
atminties runtime metu.
>> Visada atminkite, kad patikrinti null nes malloc ketina grįžti null
jei jis negali paskirstyti atmintį.
Tarkime, kad jūs paprašykite juokinga atminties kiekis.
Jūsų kompiuteris yra nesiruošia būti galėtų skirti, kad daug.
>> Taigi malloc yra tik ketina grįžti null.
Taigi visada prisiminti, kad patikrinti, ar žymeklis, kad jūs turite iš malloc yra
null ar ne, nes, jei jis yra, jums gali būti dereferencing žymeklį ir
sukelia šalutinį gedimus.
Ir galiausiai, nepamirškite Jūsų laisvos atminties.
>> Malloc yra sukurti atminties į krūvą.
Ir jūs turite atlaisvinti atmintį iki programos pabaigos.
Gerai, kad viskas man.
Atsiprašome, Rob.
Ačiū.
>> [Plojimai]
>> LUCAS: Bet paskutiniai klausimai prieš Rob ateina?
Nėra?
Taip?
>> PUBLIKA: Nemačiau tai vienas internete.
Ar jūs įkelti jį dar?
>> LUCAS: Manau, kad Dave yra įkelti jį greičiau.
>> DAVE: Tai bus paskelbta.
>> LUCAS: Tai bus internete.
>> PUBLIKA: Tai iki.
>> LUCAS: Tai naujo?
Gerai.
Taip?
>> PUBLIKA: [nesigirdi]?
>> LUCAS: Taip, jums reikia atlaisvinti visi atmintis, kuri įdėti į krūvą.
>> PUBLIKA: [nesigirdi]?
>> LUCAS: Taip.
Bet koks laikas, kad jūs turite kultūrą malloc, Jūs turėtumėte turėti kultūrą nemokamai
po to, kai nustosite vartoti, kad kintamasis.
Taigi malloc ir nemokamai yra visada kartu.
Jų geriausi draugai.
Taip.
Rob?
>> ROB: eisiu greitai.
O taip pat vaizdo įrašas bus supakuoti.
Turiu apie mic.
>> Gerai, kad per savaitę penkių dalykų.
Pirmas dalykas, kurį mes turime, yra kamino.
Taigi atminkite, kad yra tik vienas kaminas rėmas už aktyvią skambinimo funkcijos.
Pamatysime, kad per sekundę.
Ir taip pat prisiminti, kas iš tikrųjų vyksta kiekvienoje kamino rėmo ketinate būti
vietos kintamieji mūsų funkcijų, argumentai, kurie patenka į mūsų
funkcijos, kartu su pora kitų dalykų, jums nereikia tikrai
jaudintis.
>> Taigi čia yra pavyzdys programa, kurioje, pranešimas, pagrindinis yra printfing grąžą
vertė foo 4.
foo yra tik ketina grįžti vertė baras 4 kableliu 6.
Ir baras ketina nustatyti kai vietos kintamasis n lygi 4 kartus 6.
Ir tada grįžti n.
>> Taigi pažvelkime į kaminą per Tikrasis pasikartojančių šią programą.
Taigi, čia yra mūsų kamino apačioje.
Atminkite, kad kamino užauga.
Tad mūsų kamino apačioje, mes turėti kamino rėmas pagrindinis.
Kai pradedama programa, pagrindinis visada bus ne
dugnas mūsų kamino.
>> Ir kas yra viduje mūsų kamino rėmas pagrindinis?
Taigi, nors ten nėra vietos kintamuosius pagrindinis, kaip minėjau anksčiau,
mes argc ir RGV pradėjimo vietos viduje pagrindinis kamino rėmo.
Taigi pagrindinis dabar vyksta skambinti funkcija foo.
Ir tai reiškia, kad foo ketina gauti savo kamino rėmo.
>> Taigi dabar mes viduje funkcija foo.
Ir tai, kas turi eiti Foo savo kamino rėmo?
Na, foo yra argumentas n.
Ir n yra lygus 4, nes tai, ką Pagrindinis bėga kaip Foo argumentą.
>> Taigi dabar foo ketina skambinti juostą.
Kas yra baras teks viduje jos "kamino rėmo?
Jis turi vienodą x 4 y vienodo iki šešių.
Tai dar ne viskas, kad mes ketiname turėti į kaminą rėmo, nes baras
taip pat turi vietinį kintamąjį n.
Ir n mes ketiname nustatyti lygi 24.
>> Taigi dabar baras ketina grįžti n.
Taigi baras grįžta 24 iki kamino rėmas foo.
Ir todėl, kad juosta yra dabar grįžta, kad tai mes Popping kamino rėmo
baro off kamino.
Taigi, visi atmintis, baras buvo naudojant dabar nėra kamino.
>> Dabar, foo taip pat ketina grįžti 24 į pagrindinį.
Taigi dabar, kad foo grįžta, atmintį kad foo buvo naudojant savo '
kamino rėmas taip pat dingo.
Ir dabar, pagrindinis ketina skambinti printf.
Taigi printf yra tiesiog kita funkcija.
Kai mes vadiname printf, tai bus kitas kamino rėmo už printf
skambinimo funkcijos.
>> Kas yra mūsų artimųjų printf?
Štai kas vyksta eiti jos kamino rėmo.
Bent jau, mes artimųjų kad proc i Kairinis pasvirasis brūkšnys n ir
argumentas 24.
Tai gali turėti daugiau tai kamino rėmo jei printf atsitinka būti naudojamos tam tikros
vietos kintamieji.
Mes nežinome.
>> Bet visa tai eina printf aisiais kamino rėmo.
Jis ketina įvykdyti printf.
Tada printf daroma.
Jis grįš.
Galiausiai, pagrindinis yra padaryta.
Pagrindinis grįš.
Ir tada mūsų programa yra padaryta.
Taip?
>> PUBLIKA: Ar jūs matote [nesigirdi]
argumentai [nesigirdi]
parametrai?
>> ROB: Taigi yra subtilus skirtumas tarp argumentų ir parametrus.
Ir tikrai, bendrinėje kalbėti, žmonės linkę tiesiog sumaišykite juos visą laiką.
Bet parametrai yra formalus Pavadinimas dalykų.
>> Taigi argc ir argv yra parametrai, pagrindinis.
Argumentai yra tai, ką jūs iš tikrųjų praeiti kaip šių parametrų.
Taigi, kai aš skambinti foo 4, 4 yra argumentas aš einančios.
Ir parametras n viduje foo įgauna vertę 4
nuo 4 buvo argumentas.
>> PUBLIKA: [nesigirdi]?
>> ROB: n yra vietos kintamąjį į barą.
n yra dar vietos į foo, bet tai parametras foo.
Tai nėra vietos kintamąjį.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: foo yra tiesiog paskambinę baras ir grįžti bet kokiomis baras grąžą.
>> PUBLIKA: [nesigirdi]?
>> ROB: Taip, tik pamatyti, kelių kamino kadrų.
Taip?
>> PUBLIKA: Kodėl foo buvo vadinamas prieš printf?
>> ROB: Kodėl foo vadinamas prieš printf?
Taigi, aš gali turėti, vietoj to, padaryti tai, ko kaip int x lygus foo 4
ir tada atspausdinti x.
Bet vietoj to, aš kartu su funkcija skambinti į printf argumentas.
>> Tačiau pastebite, kad mes negalime iš tikrųjų vykdyti kvietimą printf, kol mes
išsiaiškinti, kas foo 4 yra.
Taigi mes ketiname įvertinti tai.
Ir tik tada, kai tai padaryta vyksta grįžti ir įvertinti tai.
Taip?
>> PUBLIKA: Kadangi tiek bare [nesigirdi]
vertė, kodėl mes neturime [nesigirdi]?
>> ROB: Jie visiškai turėtų būti int.
Tai buvo ne sugauti daugiau keli leidimai.
Taigi ji turi būti int baras ir int foo nes abu iš tų
grįžta sveikieji skaičiai.
Tuštuma yra tik tada, jei jie nesiruošia grįžti tikrąsias vertybes.
Taip?
>> PUBLIKA: Jei turėjo liniją aukščiau grąža, [nesigirdi]?
>> ROB: virš grąžinimo linija?
>> PUBLIKA: Taip.
Pavyzdžiui, jei tu printf ir [nesigirdi] būtų išspausdinti du kartus?
>> ROB: Taigi viduje foo?
Jei mes turėjo printf čia?
>> PUBLIKA: Taip.
>> ROB: Taigi, jei mes turėjome printf teisę čia būtų išspausdinti vieną kartą.
Kadangi mes vadiname foo kartą į dešinę čia, tada mes hit printf.
Tada mes vadiname baras.
Ir tada foo grįš.
Ir tai viskas.
Mes tik kada nors susidurti su printf kartą.
Taip?
>> PUBLIKA: [nesigirdi]
printf skambina foo, nes mes pirmą kartą paskambinę printf ir tada mes artimųjų
argumentai.
>> ROB: Taigi teoriškai nėra printf skambina foo?
Taigi ne.
Tiesiog tam, kad c ketina vykdyti šių dalykų yra, kol mes galime
skambinti funkciją, visi argumentai su funkcija turi
būti visiškai įvertintos.
Taigi tai yra visiškai įvertintas?
Taip, tai tik eilutė.
Tai tiesiog vertė.
>> Tada mes turime visiškai įvertinti tai.
Kai tai bus padaryta, dabar visi jos argumentai yra vertinami.
Ir dabar mes galime padaryti skambinti į printf.
Taip?
>> PUBLIKA: Vienas klausimas.
Jei turite void funkcija, turi jūs turite grįžti kabliataškį?
>> ROB: Jūs neturite grąža kabliataškis jei turite void funkcija.
Gerai.
Taigi dabar kai krūva daiktų.
Taigi krūva yra tai, kaip mes ketiname spręsti su dinaminiu atminties valdymas.
Ir tai tiesiogiai kontrastuoja su kamino kurią mes vadinčiau automatinė
atminties valdymas.
>> Taigi ant kamino, jūs niekada iš tikrųjų turi spręsti, kaip vietos kintamųjų
yra stumiamos ir popped ne visi šie kamino rėmai ir visi, kad kita.
Jūs neturite jaudintis dėl to.
Tai automatinis.
Taigi krūva yra vadovas.
Ir [nesigirdi]
kilęs iš šių funkcijų malloc ir nemokamai.
>> Taigi čia yra kita programa.
Viskas, ką mes darome yra mallocing sveikasis skaičius.
Mes ją saugoti žvaigždutėmis x.
Žinoma, mes turime patikrinti pamatyti, jei x yra niekinis.
Tada mes einame tik nustatyti, ką x yra nukreipta į 50.
Spausdinti ko x yra nukreipta į, spausdinti x, tada nemokamai x.
>> Taigi kaip tai iš tikrųjų vyksta ieškoti jei pažvelgsime į mūsų krūvą ir krūvą?
Taigi mes pradėsime iš naujo.
Mūsų kamino apačioje, kaip ir anksčiau.
Atminkite, kad tave pasikvies tiesiogiai prieštarauja krūvą?
Taigi, mes ketiname turėti top mūsų krūvos ten.
>> Taigi mūsų kamino apačioje, mes turime mūsų kamino rėmas pagrindinis.
Ji yra atsakinga už argc, argv erdvę, ir mes dabar turi vietinį kintamąjį x, kuris
yra int žvaigždė.
Taigi mes ketiname pakartoti per šią programą.
Pirmas dalykas, kurį mes turime, yra kvietimas malloc.
>> Taigi mes skambindami į malloc.
Malloc yra funkcija.
Jis ketina gauti kamino rėmo.
Ką mes artimųjų malloc?
Tai ketina eiti į vidų iš kamino rėmo.
Mes artimųjų dydį n, kuris yra 4.
Taigi, kad yra perduodama malloc.
>> Ką malloc daryti?
Jis griebia mums šiek tiek apie krūvą erdvę.
Taigi, mes ketiname eiti į krūvą.
Ir mes ketiname patraukti 4 baitų iš krūvos.
Taigi tegul tiesiog duoti, kad savavališkas adresas.
0x123 Tiesiog apsimesti, kad yra adresas, kuris yra ant krūvos.
>> Taigi, kas iš tikrųjų yra viduje, kad regionas atminties adresu Ox123?
Šiukšlių.
Taigi mes ne saugomi nieko joje.
Taigi, kiek mes žinome, kad gali būti bet kas.
Jūs neturėtumėte manyti, kad tai nulis.
Tai greičiausiai ne nulis.
>> Taigi dabar malloc grįžta.
Ir ką mes darome, kai malloc grąžą?
Mes nustatėme, kas jis grįžta.
Mes nustatėme x lygias ką jis grįžta.
Taigi, kas yra jis grįžta?
Jis grįžta 0x123 nes tai yra adresas atminties bloko, kad ji
tiesiog paskirstyti į krūvą.
>> Taigi grįžti 0x123 x dabar bus nustatomi lygi 0x123, kuri pavaizduotomis piktogramo-,
mes dažnai rengia kaip x turintys faktinis rodyklė nukreipta į tą bloką.
Bet x tiesiog laikyti šį adresą.
Taigi dabar mes turime patikrinti, ar x yra niekinis.
Tai nėra tuščias.
Mes drįstame kad malloc pavyko.
>> Taigi, dabar žvaigždė X reiškia 50.
Taigi žvaigždė prisimena, tai reiškia, eiti į tą adresą.
Taigi 0x123 Mes ketiname eiti į tą adresą.
Taigi, kad suteikia mums ten.
Ką mes darome ne tuo adresu?
Mes saugoti 50.
>> Taigi po šios linijos, kad yra kas viskas atrodys.
Taigi, dabar tai nebėra šiukšlių ten.
Dabar mes žinome, kad 50 yra, kad ypač adresas, nes
mes jį, kad.
Gerai?
Taigi dabar mes ketiname spausdinti f.
>> Taigi, pirmiausia mes ketiname spausdinti žvaigždės x.
Taigi, kas yra žvaigždė x?
Vėlgi, žvaigždutė x reiškia eiti į dalykas, kad x yra nukreipta į.
Taigi x yra saugoti 0x123 Eiti į tai.
Mes gauname 50.
Taigi spausdinti f, kad.
Ir tai reiškia, kad jis ketina spausdinti 50.
Ir tada, kad grįžta.
>> Ir tada mes turime antrą printf.
Mes dabar proc p.
Jei jūs dar nematėte, tai bus tiesiog, kaip jūs spausdinti žymeklį.
Taigi, mes turime proc i, proc f, ir visi jau.
Taigi proc p, spausdinti žymeklį.
>> Taigi x yra žymeklis.
Taigi, jei mes ketiname spausdinti x savaime, mes spausdinti tai, kas iš tikrųjų viduje
x, kuris yra 0x123 Taigi pirmas spausdinimo f ketinate spausdinti 50.
Antra spausdinimo f vyksta spausdinti 0x123 Taip?
>> PUBLIKA: Ar naudojatės proc x spausdinti žymeklį?
>> ROB: Taigi jūs naudojate proc x spausdinti žymeklį?
Taigi jūs galite, bet procentai x yra teisingas, prasme, pavyzdžiui, jei jūs turite kai kurie
sveikasis skaičius ir norite spausdinti tai kaip šešioliktainis.
Tai tiesiog, kaip tai daryti.
>> Kadangi proc r būtų spausdinti kaip po kablelio.
Štai čia mes gauti procentų d. i yra tik sveikasis skaičius.
procentų p yra specialiai už rodykles.
>> Taigi x yra žymeklis.
Mes norime naudoti procentų psl.
Bet proc x galėtų dirbti.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Taip.
Bent jau tai call-- todėl aš neįtraukė čia.
Tačiau šie du argumentai yra nebūtinai viduje šio kamino rėmo
kartu su bet lokalūs kintamieji printf atsitinka būti naudojant.
Ir tada kitas kvietimas printf dabar viduje printf kamino rėmas
procentų p Backslash n ir kokia vertė x yra, kuris yra 0x123.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Tai bus atspausdinti kažką kad atrodo taip.
>> PUBLIKA: [nesigirdi].
>> ROB: Taigi jis spausdina jį adreso forma.
Atrodo adresą.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Kodėl yra tai, ką?
>> PUBLIKA: [nesigirdi]?
>> ROB: Kodėl tai yra žymeklis 4 baitų?
Taigi yra visa krūva iš 0 aisiais priešais tai.
Taigi, tai tikrai 0x0000000123.
Dėl 64 bitų sistemos, būtų visa krūva daugiau nulių.
Taip?
>> PUBLIKA: [nesigirdi].
>> ROB: Taigi pirmoji printf ketina print--
>> PUBLIKA: [nesigirdi].
>> ROB: Taip, jis ketina spausdinti Kas yra X nukreipta į.
Žvaigždžių sako kas tai yra dalykas nukreipta į.
Grab jį.
Taigi, kas tai yra nukreipta į?
50.
Grab jį.
Štai ką mes ketiname spausdinti.
Kadangi kito, mes tik spausdinant x savaime.
Kas yra viduje f?
0x123.
Gerai.
>> Ir tada, pagaliau, mes turime nemokamai.
Kas yra mūsų artimųjų nemokamai?
Mes artimųjų x.
Tuo metu aš iš tikrųjų rodomas jį kamino rėmo.
>> Taigi mes artimųjų vertę 0x123 nemokamai.
Taigi dabar nemokamai žino, viskas gerai, Turiu eiti į krūvą
ir be, kad atmintis.
Tai nebėra tai, ką naudojate yra adresu 0x123.
>> Taigi laisvas ketina išleisti kad iš krūvos.
Dabar mūsų krūva vėl tuščias.
Mes neturime Atminties nutekėjimas.
Dabar nemokamai grįš.
Atkreipkite dėmesį, kad x yra dar 0x123.
Bet tai dabar negalioja atminties.
Turėtume nebėra dereference x.
Taip?
>> PUBLIKA: Ar grįžti 0 nebereikalingas?
>> ROB: Ar returen 0 nereikalingas?
Taip.
Mes tiesiog įdėti, kad ten, nes mes turime grįžti vieną už orą.
Taigi, tai, kaip, taip, leidžia įtraukti grąžą 0.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Taigi, po nemokamų x, kas atsitiks, jei mes stengiamės dereference rodyklės?
Gali būti, kad nieko negerai.
Gali būti, kad mes vis dar gausite 50.
>> Tai įmanoma, taip pat, kad atmintis dabar naudojama kažkas.
Taigi, tai neapibrėžta elgesys.
Ir undefined tai nieko gali atsitikti.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Ne, todėl, jei jums priskirti x kažkas.
Taigi, jei čia sakėme X reiškia malloc kažkas else--
malloc dydis event--
tada, kad originalus blokas atminties nėra paleistas.
Ir mes oficialiai neteko.
Tai yra atminties nutekėjimas.
Mes praradome visas nuorodas tos atminties blokas.
Taigi, čia yra ne taip, kaip mes kada nors galėtų išlaisvinti ją.
Gerai, kad tada grįžkite 0 reiškia nuveikti.
>> Gerai, kad kamino perpildymo.
Kas idėja čia?
Taigi atminkite, kad krūva mažėja.
Kamino einame.
Taigi, tai buvo pavyzdys iš paskaitos, Manau, kur pagrindinis yra tik ketina
skambinti Ši funkcija foo, kuri vyksta skambinti pati rekursyviai daugiau ir
vėl.
>> Taigi kamino rėmai ketinate tiksliai dirbti pats.
Taigi mes ketiname pradėti Pagrindinis kaip apatiniame kamino rėmo.
Tada pagrindinis ketina skambinti foo, kuris ketina gauti kamino rėmo.
>> Tada foo ketina skambinti foo vėl, kuris ketina gauti
kitas kamino rėmo.
Ir tada vėl, ir vėl, ir vėl, ir vėl, kol, galų gale, mes paleisti
į krūvą.
Taigi, tai, kaip mes gauti kamino perpildymo.
Ir šiuo metu, jūs seg kaltės.
Arba jūs tikrai seg kaltės prieš šis punktas, bet taip.
>> PUBLIKA: Ar šerdis sąvartynas tas pats kaip seg kaltės?
>> ROB: Taigi jūs pamatysite segmentaciją kaltė branduolys dempingo kaina.
Gauni core dump kai Jūs seg kaltės.
Ir tai tarsi visi sąvartyną turinys jūsų dabartinės atminties taip
kad jūs galite išbandyti ir nustatyti kodėl jūs SEG yda.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Taigi segmentavimo kaltės priemonės ten kamino perpildymo.
Taigi nebūtinai.
Segmentavimo kaltės reiškia, kad esate neliesti atmintis taip
Jums neturėtų būti.
Taigi vienas iš būdų, kad vyksta tai, kai sukrauti perpildymo, mes pradedame neliesti
atminties taip, kad mes neturėtų būti.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Taigi viduje begalinis ciklas.
Kaip, tai kaip grįžtamojo begalybės kilpa ir todėl mes gauti kitą
kamino rėmo kiekvieną kartą.
Bet tik viduje reguliariai begalinis, o one--
gerai, tegul net spausdinti F--
kažką daryti.
Koks skirtumas.
>> Mes neketiname būti gauti kitas kamino rėmo.
Mes tiesiog ketiname išlaikyti Looping per šį vieną nurodymą.
Kamino neauga.
Tai faktas, kad kiekvienas grįžtamojo kvietimas suteikia mums kamino rėmo.
Štai kodėl mes gauti kamino perpildymo.
Taip?
>> PUBLIKA: Taigi, jei jūs sakėte, gauti o kilpos ir tada [nesigirdi]?
>> ROB: Taigi, jei viduje while cikle ten buvo printf, jūs vis dar būtų
ne seg kaltės.
Aš tiesiog nenorėjau klaidinti dalykų.
Tai būtų kilpa.
Jūs norite gauti vieną krūvą rėmo už printf.
>> Tada printf sugrįš.
Tada jūs kilpa dar kartą.
Jūs norite gauti vieną krūvą rėmo už printf.
Jis sugrįš.
Vieno kamino rėmo.
Taigi jūs negaunate tai begalinis kaupiasi kamino kadrų.
>> PUBLIKA: [nesigirdi]?
>> ROB: Taip.
Taigi, tai nepakeliama tinklo atsitinka nes nė vienas iš jų
skambučiai į foo grįžta.
Taigi, jei mes grįžti, tada mes būtų pradėti prarasti kamino kadrų.
Ir tada mes nebūtume sukrauti perpildymo.
Ir štai kodėl jums reikia bazinę bylą jūsų asmens funkcijų.
Taip?
>> PUBLIKA: Ar galimas dydis ir kamino už krūvą už tą patį
visos programos?
>> ROB: Grubiai.
Ar galimas dydis kamino ir krūva visoms programoms patį?
Grubiai.
Yra tikimybių, kad kur kamino prasideda ir
kur krūva pradeda.
Jei atsitiktų, kad visai daug globalių kintamųjų ir dalykų, jums gali
atimti iš šiek tiek erdvės Jūsų krūvą.
>> Dėl 64 bitų sistemos, jūs praktiškai turėti begalinį atmintį.
Yra tik tiek daug.
Nuo 32 bitų ir 64 bitų, ty yra didelis skirtumas.
>> Jūs ketinate gauti daug daugiau kamino ir krūva erdvė ant 64-bit
sistema, nes ten tik daugiau adresus, kad jie gali naudoti.
Bet individualiai sistemai, jis bus būti maždaug tokio pat dydžio kamino
ir krūva erdvė.
Viskas gerai.
>> Taigi paskutinis dalykas yra kompiliacija.
Taigi, jūs turėtumėte žinoti, kad šis procesas.
Yra keturi dideli žingsniai.
Taigi pirmasis turėtų būtų lengva prisiminti.
Išankstinis informacijos apdorojimas.
Jis turi priešdėlį iš anksto į jį.
Taigi kalbama prieš visa kita.
>> Dalykas, prisiminti tai maišos.
Taigi maišos apibrėžia ir maišos apima į visus tuos.
Tie visi anksto procesorius direktyvų.
Tai yra tai, ką, kad anksto procesorius rūpinasi.
>> Taigi, ką iš anksto procesorius daryti?
Tai tikrai kvailas dalykas.
Visa tai gali visi iš jų Kopijuoti, ir supjaustyti, o pasta operacijos.
>> Taigi maišos apima standartinį I0 dot val.
Kas tai daro?
Tai greiferiniai standartinį I0 dot h failą ir įkelti jį į viršų
kur jis sako maišos apima standartas I0 dot val.
>> Ir nors maišos apibrėžti, kad mes matyti, kas yra, kad daro?
Jos kopijavimo vertę, kad maišos apibrėžtas apibrėžiamas kaip ir įklijuoti, kad
kur jūs naudojate vertę.
Taigi Preprocesorius tiesiog daro tikrai paprastas tekstinis operacijos.
Jis nieko nedaro protingas.
Taigi viskas dar yra sudėtingesnis.
>> Taigi dabar, kad Preprocesorius yra padaryti, mes iš tikrųjų kaupia.
Taigi, ką sudarymas reiškia?
Mes dabar vyksta nuo c kodą į surinkimo kodą.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Taip, mes sugauti, kad.
Taigi sudarant.
Mes ketiname iš C į surinkimo.
Taigi tai yra tikrasis keisti kalbą.
Kompiliavimas pati tai vyksta nuo aukštesnio lygio kalba
žemesnio lygio kalba.
>> Ir C yra aukšto lygio kalba , palyginti su surinkimo.
Kas yra surinkimas?
Jo nurodymai, kurie, gana daug, padarė savo CPU.
Tačiau kompiuteris vis dar veikia nesuprantu surinkimas.
Jis tik supranta ir nulių.
Taigi kitas žingsnis yra montavimas, kuri duoda mums nuo šių nurodymų, kad
procesoriaus supranta ir realiai verčia juos,
tie ir nuliai.
>> Taigi C surinkimas į dvejetainę.
Bet aš neturiu vykdomąjį dar.
Taigi manau, kad CS50 bibliotekoje.
Mes pateikėme jums dvejetainiu tai CS50 biblioteka, kuri turi GetString
ir GetInt ir visa kita.
>> Bet CS50 library--
ir iš itself-- nėra vykdomąjį.
Jis neturi pagrindinės funkcijos.
Tai tiesiog dvejetainiai krūva kad jūs galite naudoti.
Taigi susiejimas, kaip mes suburti visus Šių skirtingų dvejetainių failų
į faktinę vykdomąjį.
Vienas, kad galite įvesti dot slash dot iš.
>> Taigi, tai yra kaip failas, kuris jus rašė: - kokia jūsų programa is--
Ceaser taškas c.
Bet dabar ji buvo sudaryta iki dvejetainis.
Taigi Ceaser dot o.
Ir tai yra mūsų CS50 bibliotekos dvejetainis.
Ir jie yra sujungti į vieną vykdomąjį.
Taip?
>> PUBLIKA: [nesigirdi]?
>> ROB: Taigi, pirmiausia apima, atminkite, maišos yra iš tikrųjų
anksto procesorius žingsnis.
Bet tai atskira.
Jei nenaudojate funkcijas, yra ne jūsų vieno failo tada,
Ne, jums nereikia susieti nieko nes jūs turite viską.
>> Tai sakė, printf yra susieti.
Jei jūs kada nors naudoti printf, kad kažkas kad turi būti susietos
nes tu negali rašyti, kad.
Ir, tiesą sakant, printf yra automatiškai susieti.
Jūs žinote, kaip komandų eilutėje arba kai Jūs rašote, kad jūs matote, kad turi
brūkšnys l CS50, kuris turi nuorodą į CS50 bibliotekoje?
Printf ir stuff like that, vyksta būti susieta automatiškai.
Visi kiti klausimai dėl nieko?
>> PUBLIKA: [nesigirdi]?
>> ROB: susiejimas?
Turime visa krūva skirtingų dvejetainių failų.
Tai kanoninis pavyzdys kad mes naudojame yra CS50 biblioteka.
Mes surinkome ir jums duota dėl dvejetainę šio CS50 bibliotekoje.
>> Jūs norite naudoti GetString į savo programą.
Taigi jūs einate ir naudoti GetString.
Bet be mano dvejetainėje kodą GetString, kai jūs surinkti kodą
žemyn, jūs negalite iš tikrųjų paleisti programa, nes GetString Styginių yra
nėra iki galo apibrėžta.
>> Tai tik tada, kai jums nuorodą į mano dvejetainis kad yra GetString kad dabar visi
Gerai, aš iš tikrųjų galite vykdyti GetString.
Mano byla yra baigta.
Ir aš galiu paleisti tai.
Taip?
>> PUBLIKA: Ar susiejimas konvertuoti dvejetainis į vykdomąjį?
Taigi, net jei jūs neturite kitos bibliotekos, nebūtų jis vis tiek bus
reikia išversti [nesigirdi]?
>> ROB: Taigi vykdomąjį vis dar yra dvejetainis.
Tai tiesiog derinant vieną visumą krūva binaries.
>> PUBLIKA: Labai ačiū.
>> ROB: Jokių problemų.
Visi kiti klausimai?
Priešingu atveju, mes visi nustatyti.
Viskas gerai.
Ačiū.
>> [Plojimai]
>> PUBLIKA: Ačiū.
>> ROB: Taip.