Tip:
Highlight text to annotate it
X
>> SPEAKER 1: Hi mindenkinek.
Mi lesz az induláshoz.
Azt hiszem, az emberek még mindig megy hogy szűrés be
De az érdeklődés az idő, így tudjuk hogy ti innen időben,
fogunk kezdeni.
Ezért örvendetes, hogy a CS50 Kvíz 0 vélemények.
Azoknak, akik még nem valósult meg Mégis, van egy kérdés, szerdán.
Woo-Hoo.
>> Ha még nem kezdte tanulmányozni még, vagy nem ismerték fel, hogy ez még nem adták meg,
korábbi vetélkedők és minden információt A kvíz vannak cs50.net/quizzes.
Van néhány nagyon jó dolog ott, korábbi vetélkedők az elmúlt 10
évben, valamint az információs erről a kvízt és témák
amely fedezi.
Tehát kezdjük.
>> Szóval srá*** talán emlékeznek, az első nap az osztály Dávid azokat lámpákat.
Tehát lényegében mindent, ami a motorháztető alatt a számítógép
végzett bináris.
Binary azt jelenti, hogy mi hangzik mint a, 0 és 1-es.
Két értéke van, hogy is képviselteti magát.
>> Tehát ugyanúgy, mint az első napon szakasz amikor David fordult a világos
gumó, hogy képviselje a, vagy 1, a számítógép érti a bináris 0-és a
1-es, be vagy ki.
Alapjai Binary.
Minden hely képviseli az alap kettő.
Szóval adjunk hozzá 2 a 0-tól a 1 2 egészen.
>> Kiszámításához, amit a bináris, hogy decimális, akkor kövesse az egyenlet
típusú dolog.
Ha van egy 1 bármely olyan helyen, akkor szorozza meg bármilyen
alap, hogy van, add fel, és kap a tizedes.
Tehát ez hogyan számít 5 bináris.
Csakúgy, mint amit csinálunk az utolsó diát, ez hogyan lenne
jelentik 1-től 5-.
>> Hasonlóan, ahogy felveheti, és kivonni decimális vagy alap 10 vagy
tényleg olyan alap, az adhat és vonjuk bináris.
Pontosan az, amit elvár, ha hozzá a két fel, ha az értéke nagyobb
mint 1, magánál a 1, hogy ez egy 0, és nem a kiegészítéssel, hogy így, csak
mint amit elvár a rendszeres decimális vagy bármilyen más alap.
Cool.
>> Szóval, mint már mondtam, mindent, ami megy a motorháztető alatt a számítógépünk
történik 0 és 1-es, vagy a bináris.
Szóval hogyan lehet kifejezni, például betűket vagy számokat, vagy a karaktereket?
És a válasz, hogy ASCII.
>> ASCII egy leképezés a karakterek között amit általában látni a
Angol nyelv, mint A., B, C-, aláhúzás, kötőjel, és
ilyesmi.
És térképek, hogy egy ASCII értéket.
Az ASCII értéke csak egy szám, amely lehet érteni a számítógép.
És ahogy meg tudod csinálni összeadás és kivonás számok, meg tudod csinálni
őket ASCII értékeket.
>> Tehát ebben a példában, mi lesz ez nyomtassa ki?
Igen, csak egy hely B tér C tér D. Hol az egér menni?
Figyeljük meg, akkor meg egy int 65.
És amikor nyomtatni, hogy ki a százalék C, akkor az értelmezi, hogy a
jellegű, és kiírja A.
>> Hasonlóképpen, akkor kijelenti, , mint egy char.
És amikor kiírjuk a százalékos C, akkor az értelmezi, hogy az
százalék D. És ahogy akkor adjunk hozzá egy szám, felveheti karakterek
ASCII értékek, ebben az esetben.
>> Így egy kis mutató mindenki számára.
5, mint a húr, nem valóban egyenlő 5.
Tehát hogyan tudnánk konvertálni a karakterlánc 5. Az egész 5?
Valami ötlet?
Igen.
>> Tehát, ha van 5, mint a húr, tudjuk kivonni 0-ra.
És ez ad nekünk 5.
És hasonlóképpen, ha van 5, mint egy egész, hozzá, hogy a húr 0-ra.
És ez ad nekünk a húr 5..
Cool.
>> Most emlékszem vissza, előadás, ahol beszélgettünk algoritmusokat.
Szóval hogyan lehet valóban szeretnénk a számítógép hogy milyen érdekes dolgok?
Tudod, csak összeadás és kivonás számok és a nyomtatás dolgokat nem
hogy izgalmas.
Általában azt akarjuk, hogy számítógép végre valamilyen algoritmus.
Valami egy kicsit bonyolultabb mint egyszerű számtani.
>> Az algoritmus csak egy lépésről lépésre set az utasításokat, hogyan kell elvégezni
egy bizonyos feladat -
Csakúgy, mint egy recept.
Lehet, hogy emlékszik az első napon osztály, ahol Dávid Számoljuk a szobában
az emberek, és hány ember volt a szobában.
Lehet használni számlálás egyesével.
1, 2, 3, 4.
Ebben az esetben, egy lineáris idő algoritmus.
>> Dávid azonban bevezette az algoritmus hogy számolni az emberek a szobában
ahol mindenki feláll, azt mondod a számot egy másik személy, hozzá, hogy a
számát fel, és egy ember leül.
És ismételje meg ezt.
Ez az egyik fajta algoritmus.
Tudjuk elemezni, mennyire hatékony a algoritmus alapján ez üzemidejét.
De akkor beszéljünk egy kicsit erről később.
>> Tehát az összes algoritmusok is lehet írni pszeudokódja.
Pszeudokódját csak egy angol, mint szintaxist használják, hogy képviselje
egy programozási nyelv.
Például, ha azt akartuk, hogy kérje a felhasználót kitalálni a kedvenc számot,
pszeudokód lehetnek, mint olyat.
>> Kap egy felhasználói hiszem.
Ha a becslés helyes, mondd meg nekik ők helyes, különben nekik
ők nem helyes.
És pszeudokódját egy módja könnyen ami egy gondolat vagy egy algoritmus.
Akkor most mi is szeretnénk valójában írni ezt a nyelvet, hogy a számítógép
Lehet, hogy a megértés.
Így lehet írni a pszeudokódja és értelmezni, hogy a forráskódot.
>> Eddig forráskód kell tartania egy bizonyos szintaxisa
egy programozási nyelv.
És eddig, a CS50, most már használ többnyire c.
Szóval ez lehet forráskódja c.
Később a kurzus, akkor este jön kapcsolatba kerülnek más programozási
nyelvek, mint a PHP.
Vagy ha még akkor is, hogy más osztályok, akkor lehet csinálni Java, Python vagy akár OCML.
De a mi c programozási nyelv, ez hogyan lehet írni a forráskódot
A pszeudokód algoritmus Én csak a korábban leírt.
>> Tehát hogyan működik a számítógép valóban érti ezt?
Mint már mondtam, ez csak igazán megérti nullák.
Szóval, hogyan kap a forrás kódot valamit, ami lehet,
megértette?
Nos, van valami úgynevezett fordító.
>> Ha emlékeznek vissza a legtöbb psets, hogy volt valamilyen program
írt egy pont c file.
És akkor azt írja, hogy.
Tehát mi az, hogy csinálsz?
>> Beírhatja make, hogy fordítsa le a programot, mert valaki -
aki írta a p meg; Valószínűleg David -
létrehozott egy make fájlt.
És azt mondja, hogy, hogy tudja futtatni a fordító, az úgynevezett csattanással, hogy az akarat
akkor fordítsd le a forráskódot objektum kód, amely a nullák és egyesek
hogy a számítógép megért.
De egy kicsit később, megyünk mélyebben a fordító.
>> Így emlékszem Pset 0, ahol - igen, Kérdése van?
>> Közönség: [Nem hallható]?
>> SPEAKER 1: Igen.
Azt hiszem, tényleg legyen online.
Igen.
>> Közönség: Ez olyan, mint [hallhatatlan]?
>> SPEAKER 1: Ez nem.
A vannak cs50.net/quizzes.
>> Közönség: Slash vetélkedők, perjel 2013, perjel 0, és kattintson a
vetélkedők 2013 és kvíz 0, felülvizsgálati szakaszban diák.
>> SPEAKER 1: Igen, így ha akartok húzza fel, és nézd meg a
saját számítógépén, az is rendben van.
Mondd még egyszer.
>> Közönség: [hallható].
>> SPEAKER 1: Igen, [nem hallható] a dummy változó.
Ó, igen?
>> Közönség: [Nem hallható]?
>> SPEAKER 1: nincs, sztrájk nem a vizsga.
Sajnos, a kérdés az volt, volt sztrájkok a vizsgán.
És ez nem az.
Tehát Pset 0, nektek kell minden végre valamit a semmiből.
És megtanultam néhány alapvető programozási építőkövei a semmiből.
>> Szóval vessünk egy pillantást néhány Ezeknek építőelemek
alkotják a programot.
Az első a logikai kifejezés.
Logikai kifejezések is, és 0 vagy bármi, ami van
két lehetséges érték.
Ebben az esetben, igaz vagy hamis, be vagy ki, és igen vagy nem.
Egy példa egy egyszerű, nagyon egyszerű, program, amely a logikai
kifejezést itt.
>> Így ahhoz, hogy a logikai kifejezések hasznos lehet, hogy logikai operátorok.
Ezek a szolgáltatók, hogy lehet használni összehasonlítani bizonyos értékeket.
Így van, és vagy nem egyenlő, kevesebb kisebb vagy azzal egyenlő, vagy nagyobb, mint
egyenlő, és kevesebb, mint vagy nagyobb, mint.
De ezek a szolgáltatók nem nagyon hasznos hacsak nem tudjuk kombinálni őket
körülmények között.
>> Szóval srá*** talán emlékszik a semmiből és a p állítja, hogy
voltak feltételek.
Ezek lényegében, mint a villa logikája a program
hajt végre attól függően, hogy a feltétel teljesül.
Tehát az egyik feltétel, hogy mi volt használják sokszor ez a tanfolyam a
Ha más, ha, és más körülmények között.
>> Íme egy példa arra, hogyan lehet használni, hogy.
Tudja valaki, hogy a különbség csak használ ha a nyilatkozatok minden
Az úton lefelé verset, ha más, ha, és még együtt?
Igen?
>> Közönség: [hallható].
>> SPEAKER 1: Pontosan.
Tehát, ha volt, ha egészen ezt módon, még ha ez a feltétel visszatér
Igaz, akkor még tovább vizsgálat a következő két.
Mivel egy else-if, else nyilatkozatot, ha az ember igazat ad vissza,
a többiek nem vizsgálták.
Bármilyen kérdése erről?
Cool.
>> Szóval használjon if-else egy más nyilatkozatot, ha tudod, hogy ez csak
legyen egy ilyen esetben.
Tehát tudjuk, hogy ha x kisebb, mint 0, akkor biztosan nem lesz
0-nál nagyobb.
>> Ezután egy másik építőelem tudtuk meg a hurok.
Van három hurkok.
A hurkok, míg a hurkok, és nem közben hurkok.
És általában, ha leülsz írsz valamit, el kell döntenie,
amely a három használni kívánt.
Szóval hogyan lehet eldönteni, melyik?
>> Általában egy for ciklus, ha tudjuk hányszor akarjuk iterációkhoz
keresztül valamit, vagy hányszor azt akarjuk, hogy egy feladatot.
Mi használjuk, amíg hurkot, ha kell egy kis feltétele, hogy igaz legyen, hogy fut.
És mi használjuk ezt, miközben nagyon hasonló ideig, de azt akarjuk, hogy kódot futtatni
legalább egy alkalommal.
>> Tehát míg a, bármi is van a do lesz mindig fut legalább egy időben.
Mivel, miközben, a Lehet, hogy nem fut minden, ha a
a feltétel nem teljesül.
Bármilyen kérdése van ezzel?
>> Tehát szerkezet egy for ciklus.
Ti mind látta ezt.
Inicializálja azt.
Van valamilyen feltétel.
Így például, talán inicializálni mint az i értéke 0-ra.
i kisebb, mint 10.
És én + +.
Nagyon egyszerű, hogy tettünk.
>> Egy while ciklus, hasonlóan, akkor hogy valamilyen inicializálás,
valamilyen állapotát, és valamilyen frissítést.
Így végre a for ciklus is a while ciklus ezzel.
És hasonlóképpen a do while ciklus, talán néhány inicializálás,
végre valami, frissíteni, és majd ellenőrizze az állapotát.
>> Tehát most funkciókat.
Azt hogy mindent együtt.
Azt érdemes írni néhány ilyen funkció.
Közös funkció, lehet, hogy már láttuk a fő.
Main függvény.
Ez egy visszatérő típus, int.
Ez a függvény neve, fő.
És ez érveket, argc és argv.
Tehát fő csak egy funkciót.
>> Egyéb funkciók lehet, hogy használt, printf - printf függvénye -
GetInt, toupper.
De ezek történetesen lett volna végrehajtani nekünk
valamilyen könyvtár.
Ha a srá*** emlékszel, beleértve a ez CS50.h könyvtárban, vagy a
standard I / O könyvtár.
Igen, a kérdés?
>> Közönség: A legfontosabb most rejlő c?
Vajon ez csak egyfajta [hallható]?
>> SPEAKER 1: A kérdés az, ha a fő velejárója c.
És igen, az összes funkció egy fő funkciója.
Ez a fajta szükséges számítógép hogy tudom, hol kezdjem
futtatja a kódot.
>> Közönség: Szóval nem [hallható]?
>> SPEAKER 1: Nem.
Van még kérdés?
Cool.
Szóval, mint tudod használni a funkciót hogy írt az Ön számára, akkor is
írjuk meg a saját funkciója.
Ez a funkció, hogy valaki írt kiszámításához a hangerő
Egy q, például.
Van egy visszatérő típus van, ebben az esetben int, a funkció neve q és a mi
paraméterek listáját.
>> És jegyezze meg, hogy meg kell írni az adatokat A paraméter típusát szeretnénk
használja, vagy más funkciót nem tudni, hogy milyen
paramétert kéne elfogadásával.
Tehát, ebben az esetben, azt akarjuk, egész szám, mint a mi bemenet.
Akkor miért is akarjuk használni funkciókat?
>> Először is, nagy a szervezet.
Segítenek szakítani a kódot szervezettebb darabokat, és
könnyebben olvasható.
Egyszerűsítés.
Ez jó a design.
Ha olvasod a kódrészletet és a fő funkciója valóban,
nagyon hosszú, lehet, hogy nehezebb ok, arról, hogy mi folyik itt.
Tehát, ha felosztása funkciók lehet, hogy könnyebb legyen olvasni.
És újra-képességét.
Ha van egy darab kódot, amit most hívott vagy fuss többször,
ahelyett, hogy átírta a kódot 10-szer a fő funkciója, lehet, hogy
akarod használni azt.
És akkor minden alkalommal meg kell használni, hogy a kódrészletet, hívja a függvényt.
>> Tehát most, ha arra gondolunk, vissza a semmiből, mi is beszéltünk néhány fogalom,
amelyek közül az egyik threading.
Téma fogalma több szekvenciák kód
végrehajtó ugyanabban az időben.
Szóval szerintem vissza a napra, ahol Dávid srá*** számít ki a számát
ember a szobában.
>> Lényegében, mi A nem minden voltatok
fut külön szálon.
És ezek a szálak is jön össze hogy valamilyen választ.
Hasonlóképpen, a Scratch, ha van több sprite, lehet, hogy
van egy macska és egy kutya.
És lennének egyszerre futó saját szkripteket.
Ez egy példa a menetkészítő.
>> A másik koncepció volt bevezetett karcolás volt eseményeket.
És az események, amikor több részén a kódot kommunikálnak egymással.
A Scratch, ez volt az, amikor használta a broadcast vezérlés és a When I
Fogadás blokkokat.
>> És azt is, a probléma meg 4, láttuk egy kis rendezvények is.
Ti volna használni A Gevent könyvtár.
És volt egy funkciót waitForClick ahol vártál
a felhasználót, hogy kattintson.
És a kattintás, ebben az esetben lenne az esemény, és várja a kattintás a
eseménykezelő.
>> És azt is, az egész futás a psets és a munka a psets, akkor
Lehet, hogy érintkeznek Néhány ilyen parancsokat.
Ez az, amit beírt a terminál ablak vagy bármi ablak
, hogy megjelenik a g-szerkesztés az, Lényegében, navigálni a számítógép.
>> Így például, LS felsorolja a tartalmát egy könyvtárba.
Legyen könyvtárban létrehoz egy új mappát.
CD, változás könyvtárat.
RM, távolítsa el, törli a fájlt vagy egy könyvtár.
Majd távolítsa könyvtár eltávolítja a könyvtár.
>> Közönség: [Nem hallható]?
>> SPEAKER 1: Igen, persze.
Sajnos, a kérdés az volt, ha azt sugallja, hogy ezt
a puskát.
Ez segíthet.
Ha van hely, akkor tedd azt.
Ez is csak általában elég jó emlékezni, mert ha használni
érdemes, hogy csak már megjegyeztem.
Ez majd, hogy az élet sokkal könnyebb.
Nem válaszolok a kérdésére?
>> Tehát most, beszélgettünk egy kicsit röviden könyvtárak.
De a két legfontosabb, hogy már segítségével eddig a kurzus
standard I / O és a CS50.
Milyen dolgokat tartalmazza A standard I / O könyvtár?
>> Igen, eddig általunk használt printf.
A CS50, általunk használt getInt és getString.
És adattípusa string is előfordul, kell bejelenteni ezt CS50 könyvtárban.
Majd beszéljünk egy kicsit mélyebben a hogy a könyvtárak működnek és hogyan
befolyásolja a többi a kódot.
De ezek a két fő is, hogy mi érintkezett az eddig
a tanfolyam.
>> Típusok.
Ezek jó emlékezni, hogy mennyi egyes képviseli, vagy hogyan
hány bájt minden típusú igényel -
int, 4 byte, char, 1 byte.
Float 4 bájt.
Mi az a kettős?
>> Közönség: [hallható].
>> SPEAKER 1: Igen, így úszó de dupla méretű.
Mi a helyzet a hosszú?
>> Közönség: [hallható].
>> SPEAKER 1: OK.
Milyen hosszú?
>> Közönség: [hallható].
>> SPEAKER 1: Igen, dupla int.
Igen.
>> Közönség: [hallható].
>> SPEAKER 1: Long [hallható].
Aztán egy hosszú, hosszú kétszerese.
>> Közönség: Nem, nem.
A hosszú, csak egy int.
Attól függ, hogy az építészet előtt [nem hallható]
int és azonos méretű.
[Hallható].
>> SPEAKER 1: Tehát egy hosszú és egy int azonosak.
Aztán egy hosszú, hosszú kétszerese az int.
Cool.
És akkor, mi az utolsó típus?
>> Közönség: Pointer.
>> SPEAKER 1: Igen, így tudtuk meg egy kicsit a mutatók.
És függetlenül attól, hogy mi az a mutató mutat - ez lehet egy char csillag
vagy int csillag -
ez mindig 4 bájt a mutató.
Kérdése van ez?
Igen?
>> Közönség: [Nem hallható]?
>> SPEAKER 1: Tehát egy hosszú és egy int a ugyanaz ebben CS50 készüléket.
>> Közönség: A készülék teljesen cserélhető.
>> SPEAKER 1: Igen.
Tehát egy hosszú, hosszú kétszer egy int.
>> Közönség: Ez az a 32 bit?
>> SPEAKER 1: 32 bit, igen.
>> Közönség: Így [Nem hallható]?
>> SPEAKER 1: Igen, ha nem nyíltan mondani, hogy
kell vállalnia egy 32 bites.
>> Közönség: Ez mond valamit mint feltételezve
az építészet, mint a készülék.
64 bit, az egyetlen dolog, változás vágyik és a mutatók.
Mindketten [hallható].
>> SPEAKER 1: Igen?
>> Közönség: kérdés.
Tehát az egyik gyakorlat vetélkedők, azt kérdezi egy unsigned int.
Szóval hogyan lenne meghatározható egy int [hallható]?
>> SPEAKER 1: Jelöletlen A szintén 4 byte.
De mi a különbség egy aláírt int és unsigned int?
>> Közönség: [hallható].
>> SPEAKER 1: Rendben.
Lehet képviselnek negatív értékeket.
De hogyan is csinálni?
>> Közönség: [hallható].
>> SPEAKER 1: Igen, ez ment 1 bit, hogy képviselje a jel.
Az aláírt van egy kicsit, hogy az képviseli a jel.
És aláíratlan egyszerűen az összes pozitív.
>> Közönség: OK.
Tehát azt mondod, hogy a két nem kétszer akkora, mint egy úszó?
>> SPEAKER 1: Double kétszer akkora, mint egy úszó, igen.
>> Közönség: Hogyan működik a mutató hogy egy hosszú, hosszú [hallható]?
>> SPEAKER 1: Tehát a kérdés az, hogyan A mutató egy hosszú, hosszú -
hogy van, hogy csak négy bájt, ha egy hosszú, hosszú a 8 bájt.
Úgy emlékszem, mi is az a mutató, lényegében a nagyon alap értékét.
>> Közönség: [hallható].
>> SPEAKER 1: Igen, így a mutató csak egy memóriahelyet.
Így nem számít, hogy mennyi hely hogy a mutató mutat.
Ez csak akkor van szükség 4 byte nyomon követni Az, hogy a memória helyen.
Van még kérdés?
Cool.
>> Tehát az utolsó dolog, amit szabványos kimenet.
Akkor érdemes használni őket gyakran elég, hogy vissza tud emlékezni.
De ez az, amikor használjuk printf, például.
És ezeket helyőrzőket hogy hívták formátumban kódokat.
>> Tehát százalék c char, százalék I. int, és mi is használhatjuk százalék d.
Ez ugyanaz a dolog.
De általában, mi a CS50 próbáld meg használni százalék i.
Százalékos f float.
Százalékos ld hosszú hosszú és százalék s string.
>> Hasonlóképpen, mi már egy pár ezek az escape szekvenciák.
Például a backslash n az új vonal.
Ez csak az, amikor a formázás a kódot a nyomtatott f.
Igen?
>> Közönség: Milyen százalék d az?
>> SPEAKER 1: Tehát a kérdés az, ami százalékos d az?
Százalékos d a ints.
Százalék a d és i százaléka azonos.
>> Közönség: Mi a különbség a backslash n és backspace-r?
>> SPEAKER 1: Tehát a kérdés az, hogy mi a különbség a holtjáték n és a
holtjáték r?
Azt hiszem, backslash r -
>> KÖZÖNSÉG Szóval backslash r csak azt jelenti, visszatér a sor elejére
anélkül, hogy lesz egy új sor.
Tehát, ha nyomtatni backslash r, és vissza a sor elejére
akkor nyomtasson több dolgot, akkor felülírja a dolog, hogy ez már
[Hallható].
Mivel n valóban megy egy új vonal és megy [hallható].
>> SPEAKER 1: Nos, más kérdés?
Rendben van.
Fogom kézzel le kell Dan, aki a jövőben is.
>> [Taps]
>> DAN: Rendben.
Így fogok beszélni egy másik széles tartomány ötletek az osztály, amely
nagyjából képviselője a héten két és A hét elején három kezdés
A casting, ami csak egy módja kezelésére értéke, mint egy bizonyos típusú
értéke eltérő típusú.
Így meg tudjuk csinálni ezt a karakterről ints, úszik ints, és
hosszú vágyik megduplázódik.
>> Mindezek a dolgok lehet használni, mint módokon kezelésének bizonyos számértéket
mínusz karakter, mint más számértéket.
Tehát van néhány probléma ezzel, a Természetesen, ami akkor jön, amikor a leadott
dolgok, mint úszó a ints.
Szóval ez egy kicsit furcsa.
Van egy úszó, ami 1,31.
Mi szorozza meg 10.000.
És akkor nyomtassa ki, mint egy int.
Mit jelent ez a teljesítmény?
10,000 alkalommal 1.31.
Tehát 13000, az, hogy a becslés?
>> Közönség: Azt hiszem, ez 10.000.
>> DAN: Szóval azt megszorozzák 10000 mielőtt én öntés is.
>> Közönség: Oh.
Nem létezik, hogy egy 9 és néhány 0 számok?
>> DAN: Lehet, hogy valami furcsa szám.
Így van, ez 1,3-szer 10.000.
Szóval ez 13.000.
És ez a plusz fura -
>> Közönség: 13100.
>> DAN: 13100.
Köszönöm, Rob.
És ez a plusz furcsasága -
ez a 9,9 -
egyszerűen azért, mert ez az öntési végül lefelé kerekítve, ahol
akkor nem kellett volna.
Igen.
>> Közönség: Az öntési történik után valami mást?
>> DAN: így, mert én ezt a nyomtatásban, az működik ez a szorzás előtt
teszi ezt a casting.
>> Közönség: [hallható].
>> DAN: Azt hiszem, ez az első öntött, Igen, ami 10.000.
Van még valami?
Cool.
Szóval ez a 13099.
Miért történik ez?
Pontatlansággal.
>> Úszók nem tökéletes.
Ők csak a számoknak a Bizonyos számú értékes jegyre.
Tehát, ha kinyomtatja 8 sig füge ez az úszó, kapunk egy olyan
csúnya szám.
És ez azért van, mert 1.31 nem pontosan képviseli egyszerű
hatásköre két gép.
Így végül figyelembe véve a legközelebbi Gondolom, amely végül
hogy egy kicsit alacsony.
Értelme?
OK.
>> Most váltott egy másfajta Ennek feltételes állítások, ahol minden
törődünk egyetlen változó.
Tehát ebben a konkrét példában, vagyunk kapok egy egész szám a felhasználó.
És akkor keresünk a hogy mi egész szám.
Feltehetően ez a szám egytől négy.
Ez az, amit kérünk.
>> Szóval nem egy kapcsoló a változó neve.
Akkor létre esetekben lehetséges értékeket lehet.
Tehát ha az egyik, azt mondják, hogy alacsony.
És akkor szünet, hogy ki a kapcsoló állapotuk
ne menj.
>> A következő esetben -
olyan esetben, ha két-és három eset -
ha ez a helyzet két csak esik le Az első sorban a kód azt látja, mint a
az esetben három, amíg nem találkozik egy break.
Tehát az oka, hogy ha egy- csak print alacsony, mert én
hogy ez a szünet itt.
Ha, mondjuk, figyelmen kívül hagyta a szünetnek - ha dobtam ezt a szakadár -
akkor nyomtasson alacsony, akkor azt nyomtatni középen, és akkor lenne megtörni.
>> Tehát szünetek fontos részét A kapcsoló feltételek és
kellene lennie.
Olyan eset, amelyet nem szerepelnek kifejezetten kezeli az alapértelmezett
esetben a kapcsolót, és meg kell hozza.
>> KÖZÖNSÉG Szóval 1, 2, 3, és a 4. lenne n?
>> DAN: Értékek, hogy n lehet.
Igen.
Igen?
>> Közönség: Tehát ha van hogy a [hallható]?
>> DAN: Azt nyomtatni alacsony, majd a akkor nyomtasson közepe és
akkor szakadna.
>> Közönség: Miért lenne kinyomtatni középen, ha a [hallható]?
>> DAN: Tehát minden alá eset előtt egy kis szünetet alá.
Tehát ha az egyik nyomtatás alatt eset egyik, mint ez a következő nyomtatási.
Igen?
>> Közönség: [Nem hallható]?
>> DAN: Tehát ez a szám csak egy bizonyos érték, hogy ez a változó
vehet, nem igaz?
Van ennek értelme?
Igen.
>> Közönség: [Nem hallható]?
>> DAN: Igen, ha ketten nyomtatni középső, majd szünet.
>> Közönség: [Nem hallható]?
>> DAN: Azt hiszem, minden?
Milyen más adattípusok lehet áttérni?
>> Közönség: lehet váltani bármely adattípusok.
De ez csak azt jelenti, semmi több, mint karakter és ints és ilyesmi, mert
ha áttérnek a mutatót ez nem igazán van értelme,
átkapcsolás terhelés, ha még mondjuk te, hogy mivel a lebegőpontos
precíziós, amit nem igazán akarom, hogy egyébként.
Így elég sokat, csak ints és karakter meg ilyesmi.
>> DAN: Igen, ha már kifejezett értékeket, hogy tudod, azt hiszem, lehet
hogy a kapcsoló valóban hasznos.
Jó?
OK.
>> Köre a tartomány, a deklarált változó kiterjed.
Tehát ez a kis darab kód van, lenne teljes a hibák.
És az ok, hogy én kijelentette, hogy ez int i hatályán belül ez a for ciklus.
És akkor próbálom hivatkozni, hogy i kívül, hogy a for ciklus hatálya alá.
>> Tehát alapvetően, akkor gondolj hatály , mint bármi, amit kijelentik
A belsejében egy sor kapcsos zárójelek csak létezik az említett kapcsos zárójelek.
És ha megpróbálod, és használni, hogy a változó kívül azokat kapcsos zárójelek, akkor
kap egy hiba a fordító.
Igen?
>> Közönség: Tehát ez nem működik?
>> DAN: Ez nem működik, igen.
Strings.
Karakterlánc egy char *.
Ők pontosan ugyanaz.
Ők csak mutatókat karaktereket.
És minden húrok, hogy már véget kell A backslash nulla, ami csak
ac egyezmény.
>> Úgy hívják a NULL terminátor.
És NULL -
tőke-N, a tőke U, a tőke L, a tőke L -
nem ugyanaz, mint a NULL terminátor.
Ez a mutató.
Ez a karakter.
Ezek nagyon különböző.
Ne feledd azt.
Ez lesz a kvíz, valószínűleg.
Én még nem láttam a teszt.
Igen?
>> Közönség: Tehát NULL, mondjuk, a mutató?
>> DAN: Igen.
>> Közönség: Mit [hallható]?
>> DAN: Ha, mondjuk, malloc nevezzük, ha nincs elég memória, hogy
bármilyen méretű kérsz, malloc visszatér NULL.
Ez alapvetően, ha egy funkció volna vissza a mutató, akkor
ellenőrizni kell ellen NULL, mivel NULL egy nagyon jó -
ez, egyfajta, a szemetet értéket.
Ez egy nulla, amennyire mutatók menni.
>> Amikor hívja a függvényt, hogy visszaad egy pointert.
Fogsz szeretné ellenőrizni, hogy arról, hogy ez a mutató nem NULL
mert a NULL nagyon gyakori.
Ez a fajta szemetet vissza.
Tehát, ha valami nem megy rendben, csak vissza NULL helyett.
>> Közönség: [Nem hallható]?
>> DAN: Igen, és az, hogy van ez.
>> Közönség: [Nem hallható]?
>> DAN: Helyesírás, mint ezt.
Ez az NULL terminátor.
Ez kisbetűs N-U-L-L, ha te helyesírási azt.
>> Közönség: Én csak elmentem vissza, és teszteltük.
És ha megpróbálja, hogy egy lebegőpontos értéket egy kapcsolót, hogy majd kiabálni
mondván szabály elôírja kifejezés Az egész típusú.
>> DAN: Tessék.
De igen, mi is volt a kérdés?
>> Közönség: [Nem hallható]?
>> DAN: Tehát főváros N, tőke U, a tőke L, a tőke L tényleges c dolog.
Ez a NULL pointer és akarat csak akkor lehet kezelni.
Akkor soha nem próbálja meg, és pontosan a NULL karakter és lát
más út, mint ez.
Igen?
>> Közönség: Tehát visszatérve char max vagy valamit a jegyzeteket, nem igaz
***ítik meg ugyanazt a funkciót mint a [Nem hallható]?
>> Közönség: Szóval te utalva visszatérő char max a getchar vagy
bármi is legyen az?
>> Közönség: Igen.
>> Közönség: Igen, ezért az általános kifejezés az összes ezeket a dolgokat
a sentinel értékeket.
Szóval, mint visszatérő int max a getInt és char max a getchar, ez
kellett volna lennie, rendben, ha a ezek a dolgok visszatérnek hozzánk,
valami baj.
>> A mutatók, csak éppen van ez a sentinel értéket, hogy mindenki
egyetért a.
És ez az a dolog, amire vissza amikor a dolgok rosszra.
Tehát char max, amit használ képviselni valamit
mint a NULL vagy getchar.
>> Közönség: Tehát, ha tesztelés getchar, is csak NULLA?
Vajon, hogy különbséget tenni?
>> DAN: Nem lehetett csak nézd NULL.
Meg kéne ellenőrizni char max, mert a visszatérési értéke a függvény
a karakter nem a mutatót.
Igen?
>> Közönség: Ez a kérdés arra irányul, a karakterlánc hosszát.
Vajon, amelyek magukban foglalják a NULL karaktert?
>> DAN: Nem.
És ez valójában hogyan karakterlánc hossza tudja megállítani, mert megy keresztül
A tömb a karaktert, amíg úgy látja, a NULL karaktert.
És akkor ez olyan, mint az összes van, kész vagyok.
>> Közönség: [Nem hallható] öt?
>> DAN: Hello lenne öt.
Aha.
Tehát tömbök folyamatos blokkok memória.
Ők azonnali hozzáférést azzal az nevét a tömb, majd a göndör
nadrágtartó, amit index akarsz menni hogy, ők indexe zérustól keresztül
a hossza a tömb mínusz 1.
>> És ők által bejelentett típusa dolog, hogy te tárolja a
tömb, a tömb nevét, majd függetlenül a mérete, hogy a tömb.
Tehát ez egy char tömb hossza hat, amely ezeket az értékeket.
Igen?
>> Közönség: [Nem hallható]?
>> DAN: Igen.
>> Közönség: [Nem hallható]?
>> DAN: Ha van, mi folyik a tömb már.
Szóval lehet megadni ezt inkább, mint, azt mondják, char, amit a neve a
tömb, üres zárójelek egyenlő göndör zárójel H vessző E vessző L vessző L vessző
O vessző NULL karakter és a zárójel.
Ez azt is dolgozik, mint egy nyilatkozatot.
>> Közönség: [Nem hallható]?
>> DAN: Akkor kell, hogy A méret már.
>> Közönség: [Nem hallható]?
>> DAN: Igen.
Rendben.
Parancssori érvek egy módja egyre bemenet a felhasználót
érveket a fő.
Főoldal úgy két érvet.
Az argumentumok száma éppen haladt át a parancssort és a
karakterlánc vektor vagy egy string tömb az összes érvet.
>> Tehát, ha azt mondjuk, az úgynevezett a funkciót, mint a Egy pont out 1 hely, 2. hely, három,
argc lenne 4.
És a argv 0 lenne pont ki.
Argv1 lenne 1.
argv2 lenne 2. argv3 lenne 3, az adott esetben.
Igen?
>> Közönség: [Nem hallható]?
>> DAN: Az utolsó elem a tömbben mivel a tömb hossza argc plusz
argB egyik, az utolsó elem a NULL pointer.
Ez argc plusz 1.
Tehát abban az esetben, ha azt mondtam, hogy lenne argv 0 egy pont ki.
argv 1. 1 lehet. argv2 2 lehet. argv 3. 3.
argv 4, amely egy nagyobb, mint argc volnának.
>> És ez a NULL pointer.
Igen.
És ez azért van, mert string a char csillag egy mutató.
Tehát azt, hogy az azonos típusú.
Igen?
>> Közönség: Két kérdés.
Tehát az egyik, mi a különbség ezt, és más, mint getString egyféle
a felhasználói motort?
És a két, akkor tárolt az elmúlt memória?
Szóval, mint, getString lenne legyen [hallható]?
>> DAN: Hol van tárolva?
Nem tudom, hol van tárolva.
>> KÖZÖNSÉG Szóval, tulajdonképpen, tudod, hogy minden funkció amelyet hívják érveit
tárolja a verem?
Így argc és argv érvek a fő és ezek a verem, vagy tényleg
éppen mit gondol, mint a kezdete a verem.
Mi volt a másik része a kérdés?
>> Közönség: Szóval mi a [hallható]?
>> DAN: Igen, ez csak egy másik út szerzés input a felhasználó.
Ez az egy kissé hatékonyabb és ez praktikusabb szkripteket, mert
csak át érveket, hogy a fő funkció ahelyett, hogy megvárná,
a felhasználók számára, ha nincs számára.
>> Közönség: És igen, kap húrok lenne [hallható].
Ez tárolja a cucc van szüksége.
>> DAN: Igen?
>> Közönség: [Nem hallható]?
>> DAN: Igen, argv 0 mindig tartalmazza a dot perjel a függvényhívás.
Igen?
>> Közönség: [Nem hallható]?
>> DAN: Igen, az egyes érvek végződött NULL karaktert, mert
a szálakat.
>> Közönség: [Nem hallható]?
>> DAN: Igen, argv argc egy NULL pointer.
>> Közönség: [Nem hallható]?
>> DAN: Ó, igen.
Ja, bocs.
>> Közönség: Így [Nem hallható]?
>> DAN: Tehát a kérdés az, ha már a parancssori pont perjel a pont ki 1, 2,
lenne számát parancssor érvek két vagy lenne három?
>> Közönség: Azt hiszem, nem igazán számít.
Azt szokták mondani, ó, nem felelt meg bármilyen parancssori argumentumok, amikor
Nyilvánvaló, hogy az úgynevezett a funkciót.
Szóval inkább hangosan kizárása funkciót a parancssorból
érvek annak ellenére, hogy tartalmazza argv.
>> DAN: De ha ez volt a teszt -
igen -, és akkor is, ha valamit mondani mint argc értéke 3,
te biztonságosan álló.
Igen?
>> Közönség: [Nem hallható]?
>> DAN: Azt hiszem, ha ahelyett, hogy hívja ezt a A argc és vonós argv konzolok
de megtartotta az azonos típusú, és csak az úgynevezett őket, valami más, mint a
és b, akkor még mindig működik?
És ez még mindig működik, akkor csak -
használata helyett argc - azt használja a és b.
Igen?
>> Közönség: [Nem hallható]?
>> DAN: Tehát a kérdés az, getString fogja tárolni memóriát a halom
mert getString char *.
Ez tárolja memória a halom, mert kéri most malloc belül a tényleges
végrehajtása getString.
OK, mozog.
>> Biztonság.
Tehát, hogy igazán biztonságos, akkor hivatkozhat a nem egy és hagyja, hogy senki sem a hozzáférést minden olyan
a tájékoztatás, ezért Mindenki épít a saját gép,
saját operációs rendszer, minden programok a semmiből, és természetesen
nem csatlakozik más gépek az interneten keresztül.
Tehát számítógépek biztonságos.
Ők valójában.
Meg kell bízni más emberek.
>> És a gondolat a biztonság, hogy te próbálja összegét a
benne, hogy szükség van.
És az egyik azt jelenti, hogy, hogy keresztül kriptográfia.
Kriptográfia, lényegében, mi titkait.
>> Néha át kell adni a titkainkat végig rajta, mondjuk, az internet vagy a
más dolog.
És mi nem akarjuk az embereket tudni, hogy ezeket a titkokat.
Így titkosítani a titkainkat egy út hogy reméljük, senki nem tudja kitalálni.
>> Így szoktuk -
át a kurzus ennek az osztálynak -
dolgok, mint a Caesar és [Nem hallható], amelyek mind nagyon, nagyon
biztonságos módon titkosítja a dolgokat.
Ők könnyű kitalálni, mit vannak, és mi a titkok.
A valós világ használ sokkal több bonyolult titkosítási rendszerek.
És nem fogunk bejutni sokkal több annál.
>> Hibakeresés.
GDB a legjobb.
Fogom hangsúlyozni ezt újra.
Használja GDB minden alkalommal minden alkalommal, amikor van egy probléma.
Parancsok, amelyek hasznosak a GDB vannak szünet, amit át vagy a vonal
szám, a függvény neve lényegében ahol a kódot be akarja fejezni,
és képesnek kell lennie, hogy átvegye az irányítást.
>> Nyomtatás tart egy változó, és kiírja bármi is változó az, hogy
pont a végrehajtás.
Tovább mozog a végrehajtás mentén egy lépésben.
És lépésről lépésre egy függvényen belül a végrehajtás.
>> Más dolgok futnak, ami így valóban futtatni a kódot.
Folytassa veszi az összes szükséges lépéseket hogy a következő töréspontot.
És még sok-sok más.
Nézd meg őket.
Ők nagy.
Igen?
>> Közönség: [Nem hallható]?
>> DAN: Igen, ami a debugger.
Tehát egy debugger egy olyan program, lehetővé teszi, hogy a hibakeresés a program.
Ez nem egy program, amely talál hibákat az meg, bár ez nagyszerű lenne.
>> És az utolsó számomra keresést.
Tehát a fajta keresést, hogy beszéltünk Az ebbe az osztályba körülbelül lineárisak kereső,
ami csak, hogy nézze át az egyes eleme a keresési tér, az egyik
elem egy időben, amíg meg nem találja, mi keres, vagy amíg el nem éri
a végén a keresési tér, ahol pont te mondod, hogy nem találtam
Az elem, amit keresett.
És ez tart a legjobb időben állandó, ami 0 1 és a legrosszabb esetben a lineáris
idő, ami 0 n.
>> Bináris keresés, amihez mocskos elemekkel.
Elmész a közepén a elemek, hogy ha az elemet keres
nagyobb vagy kisebb, mint az elem hogy te vagy a közepén.
Azt, hogy ez a nagyobb, azt mondják, hogy az alsó A keresési tér a
aktuális tartózkodási helyét, a középső, és indítsa újra a folyamatot.
Ha ez kisebb, akkor meg azt mondják, hogy - igen, mi a helyzet?
>> Közönség: [Nem hallható]?
>> DAN: Igen.
Bármiféle sort, hogy a már tanítják az osztály tisztességes játék a vizsgálathoz.
>> [Nevetés]
>> DAN: És az a tény, hogy már nem volt csinálni a probléma meg, ez igaz,
játék a teszt.
>> Közönség: Mehetünk rajta, hogyan kell -
>> DAN: Ez lesz ment át.
>> Hangszóró 2: Az aktuális kód [Hallhatatlan] van study.cs50.net.
Tehát, ha megnézzük a gyakorlatban problémát Az Egyesítés fajta oldalon
study.cs50.net, ott van a kód végrehajtására merge sort.
Szóval nem kell végrehajtani magad ma este.
De győződj meg róla, hogy megértette, hogy inkább mint memorizálása is.
>> Közönség: [Nem hallható]?
>> SPEAKER 2: The merge sort oldal study.cs50.net, van egy gyakorlat
probléma, hogy, ha rákattint a probléma, a legvégén van egy
megoldás, amely az egyesítés sort végrehajtását.
De győződj meg róla, hogy megértette, hogy ahelyett, hogy csak megjegyezni, hogy
vagy másol le.
>> Közönség: És egy teljesen érvényes probléma a vizsgára lenne
olyasmi, mint itt egy lista.
Mit jelent ez a lista kinézni után egy lépéssel a kiválasztott sort vagy
beillesztés sort, vagy bármi.
Egy teljes iteráció a lista.
Tehát akkor is, ha nem a végén kelljen kódot is, meg kell értened, hogy
ahhoz, hogy tudja, hogyan fog hogy módosítja ezt a tömböt.
>> DAN: Ennyi nekem.
>> [Taps]
>> LUCAS: Szia mindenkinek.
A nevem Lucas.
Fogok beszélni rekurzió, minden a fajta, amit tanultunk, és a
kicsit az összes mutató.
OK?
Tehát először is, rekurzió.
Mit jelent az, hogy függvény rekurzív?
>> Közönség: nevezi magát.
>> LUCAS: OK, nevezi magát, igen.
Szóval, mint ezt a képet, pl.
Ez olyan, mint a kép belsejében egy képet, és így tovább.
Így például, akkor - ahogy Dan hogy beszélt a bináris keresést.
Az egyik módja, ahol a bináris keresés rekurzív az a tény, hogy te
megpróbálja megtalálni a számot.
Szóval megy a közepén.
És akkor ellenőrizze, hogy a számokat is a bal és a jobb oldalon.
>> És ha megtudja a szám lesz a bal oldalon, ez ugyanaz
dolog, mint ezzel újra a keresést, de Csak a bal oldalon a lista.
Szóval így hangzik mintha rekurzív.
Szóval ezért nektek rekurzív megoldás merge sort.
>> OK, itt egy példa.
Tehát mondjuk, hogy akarom választani a számokat 1-től n.
Azt is észre, hogy az összeg az n száma n + n mínusz 1-ig 1.
De aztán, ha nézem n mínusz 1 plus n mínusz 2 plusz 1, ez ugyanaz
dolog, mint összegzése számok n-ig mínusz 1.
Így azt mondhatom, az összeg egyenlő összeg egyenlő az n + n összege mínusz 1.
Van ennek értelme?
>> És azt is, lenne valami más úgynevezett alapeset, amely szerint
az összeg a számok felfelé nulla nulla lenne.
Tehát amint jutok el a szám nulla, abbahagyom számolás.
Van ennek értelme?
>> Tehát itt egy példa arra, hogy Tudom végrehajtani ezt.
Szóval van ez a funkció bizonyos.
Hogy vesz egy n egész szám.
Tehát itt először ellenőrizni, ha n kevesebb vagy egyenlő nullával.
Tehát, ha ez kevesebb, vagy egyenlő nullával, azt vissza nulla, ami a mi alapeset.
Egyébként, én csak vissza n plus összege a számokat
egy n mínusz egy.
Értelme?
OK.
>> Szóval, itt van, amit úgy néz ki.
Van összege 2 egyenlők 2 plusz 1 összege.
És néhány 1-1 és a összege 0, ami 0.
Értelme?
Tehát, ha megnézzük a köteget a program, ez az, amit úgy néz ki.
>> Először is, mi a fő funkciója.
És akkor a fő funkciója hívott összeg 2..
És akkor összeg 2 fog mondani, ó, összeg 2 plusz 2 egyenlő az összege egy.
Szóval hozzá összege 1 köteg.
És az összeg 1 fog hívni összegével 0, amely szintén hozzá fog
a verem.
És akkor minden egyes ilyen is, hogy a a másik tetejére van, hogy visszatérjen
mielőtt a többit is tartani fog.
>> Így például itt, összege 0, először megy vissza 0-ra.
Majd válassza összege 1.
Ekkor összege 1 fog vissza 1 összege 2.
És végül, összege 2 megy vissza 3 fő.
Van ennek értelme?
>> Nagyon fontos, hogy megértsük, hogyan A verem dolgozik, és próbálja
nézd meg, hogy van értelme.
OK, így a válogatás.
Akkor miért válogatás fontos, először is?
Miért érdekel?
Valaki?
Adj egy példát?
Igen?
>> Közönség: [hallható].
>> LUCAS: Igen, OK.
Így kereshet hatékonyabban.
Ez egy jó módja.
Így, például, van egy csomó dolog, valójában az életünkben, hogy
vannak rendezve.
Például a szótárakat.
>> Nagyon fontos, hogy minden szavak valamilyen azért, hogy mi
könnyen hozzáférhessen.
Szóval, ez az, amit mond.
Kereshet hatékonyabban.
Gondolj bele, milyen nehéz lenne, hogy a szótárt, amelyben a szavak vannak
véletlenszerű sorrendben.
Majd meg kell nézni, nagyon sok, minden egyes szót, amíg meg nem találja a
szó, amit keresel.
>> Ha a Facebook is, ha a keres a barátaid, akkor
fogja látni, hogy a Facebook tegye a közelebbi barátja van a tetején is
hogy nem beszél sokat.
Ha megy egészen az aljára a barátok listájára, fogsz látni
emberek, hogy talán nem is ne feledjük, hogy te vagy barátok.
És ez azért van, mert a Facebook fajta barátaival alapján, hogy
zárja van nekik.
>> Tehát szervezése adatokat.
Szintén Pokemon.
Tehát láthatjuk, hogy minden Pokemons vannak számok.
És ez, mint egy egyszerű módja az adatokhoz való hozzáférés.
>> Közönség: elérése Pokemon.
>> LUCAS: Igen.
>> Közönség: [hallható].
>> LUCAS: Igen.
OK, így kiválasztás sort.
Selection sort fogja kiválasztani a legkisebb rendezetlen értéke lista minden
idő minden egyes iterációs.
Ez olyan, mint az a fajta, amit nem a fejedben, amikor akarsz
rendezni egy listát a kezét.
>> Alapvetően minden, amit teszel, nézel a legkisebb szám.
Azt tedd a rendezett lista.
És akkor keresse meg a következő kisebb szám.
És akkor csinálom azt, és így tovább.
>> Tehát kiválasztása fajta alapvetően meg válassza ki minden alkalommal, amikor a legkisebb
rendezetlen értéket.
Tedd a végén a rendezett része a listán.
És ne csinálja.
Szóval gyorsan látni, mi ez úgy néz ki, mint a.
Tehát itt a sorrendje és rendezetlen listát.
>> Tehát a rendezett lista, ez kezdetben üres.
És akkor megyek ki a itt legkisebb számot, amely 2.
Szóval, hogy a 2-es számot, és tettem ben az első a listán.
Aztán keresse meg a következő kisebb elem, amely 3.
Így tettem, hogy a végén A rendezett lista.
És akkor én is ezt teszem.
Találom 4. és tedd a végén.
Find 5 és tedd a végén.
>> És nézd meg, hogy minden ilyen alkalommal, hogy Azt mondom, tedd a végén van,
Alapvetően csere a két érték.
OK?
És akkor az utolsó, csak még egy elem.
Szóval ez már rendezve.
>> OK, így beillesztés sort.
Beillesztése sort fogsz szintén hogy a dolog, amelyek a rendezett és
rendezetlen listát.
Az egyetlen dolog az, hogy minden alkalommal, te hozzá egy elemet a sorrendje
lista, csak vedd az elemet, hogy az előtt a rendezetlen lista.
És akkor fogsz találni, amit pozícionálni kell lennie a rendezve
része a listán.
>> Lássuk, mi van ez így ez több értelme van.
Így kezdetben például próbálom hogy helyezze be a hármas szám a
rendezve a lista egy részét.
Így a lista nincs semmi.
Szóval csak fel a 3-as szám.
>> Most azt akarom, hogy a szám 5 a rendezett része a listán.
Szóval nézd meg az 5-ös szám.
Úgy vettem észre, hogy ez több mint 3.
Szóval tudom, hogy kell lennie 3-a után.
Így tettem 3. és 5. sz.
>> Aztán szeretné szúrni a 2-es szám.
Úgy vettem észre, hogy a 2-es szám valójában tart akkor mind a 3. és 5..
Szóval tényleg kell, hogy azt a utat a lista elején.
Szóval meg kell, olyan, tolja a elemek a rendezett lista, így tudok
hogy helyet csináljon a 2-es szám.
>> Aztán látom a 6-os szám.
Látom, hogy legyen 5-e után.
Így tettem oda.
És végül, nézd meg a 4-es számú.
És észre kell lehet 3 és 5 közötti.
Aztán tedd oda, és váltás az összes többi elem.
Értelme?
>> Bubble Sort.
Tehát buborék rendezés alapvetően, amit te fog tenni - hívjuk buborék
sort, mert végig a listán - ez sokkal jobb, ha én csak azt mutatják,
tetszik ez a -
és fogsz összehasonlítani szomszédos számokat.
És fogsz swap helyzetben, ha ők nem
a megfelelő sorrendben.
>> Tehát alapvetően, hogy mi fog történhet itt, például,
van 8 és 6.
Tudod, hogy a rendezett sorrendben fog valóban a 6. és az 5., ugye?
Szóval fogod cserélni a megrendelések.
Aztán látom 8 és 4 itt.
És én nem ugyanaz a dolog.
Én cserélni újra.
És végül, a 2 és 8.
Én is cserélni őket.
>> Úgy hívják Bubble Sort mert miután Minden ilyen ismétléseket, valóban,
a legnagyobb számú a lista kap minden az utat, hogy a végén a listán.
Van ennek értelme?
Mert tartja csere is és mozgatása jobbra.
>> OK, így ez a második iteráció.
Ez lenne ugyanaz.
Megteszem egy csere, és majd az utolsó.
Azt, hogy nincsenek-swap és a lista sorrendje.
Így Bubble Sort, mi alapvetően ne megy át a listát, és csere
a dolgokat, amíg vettem észre, hogy nem én voltam minden swap csinálja iteráció, amely
azt jelenti, hogy a lista már rendezve.
Értelme?
>> Beszéljünk egy kicsit a működési idő.
Szóval srá*** emlékszik Big O, Omega és Theta?
Igen?
OK, mi Big O, mindenekelőtt?
>> Közönség: [hallható].
>> LUCAS: Igen, ezt hívják a legrosszabb runtime, ami éppen azt jelenti, hogy
mennyit vár a program hogy futtatni.
Mint tekintve -
ebben az esetben - n.
Az elemek száma a felsorolni a legrosszabb esetben.
Mint a lehető legrosszabb eset.
>> Így Bubble Sort, például Van nagy O n téren.
Miért van ez?
Miért Bubble Rendezés Big O n téren?
>> Közönség: [hallható].
>> LUCAS: Igen, a legrosszabb esetben lesz hogy meg kell tennie n ismétléseket.
Így az egyes iterációk fog hozza a legnagyobb elem a végéig
a listán.
Így a legrosszabb eset az, hogy van kell csinálni, hogy a dolog n-szer.
És minden egyes ilyen alkalommal, azt kell do n swap, mert kell összehasonlítani
minden két elem.
Szóval ezért ez n négyzeten mert n-szer n.
>> Ezt követően, a kiválasztás sort is n négyzet mert minden egyes iteráció, azt kell
nézd meg minden egyes elem a listán.
És akkor megtalálja a legkisebb, ami azt jelenti, hogy meg kell
átnéz n eleme.
És azt kell csinálni, hogy n-szer azért, mert Azt kell választani minden n eleme.
>> Egy beszúrás sort is n négyzet azért, mert a legrosszabb forgatókönyv
lehet, az egyik, azt kell beszúrni n számok, igaz?
Így már tudom, hogy fogok hogy n ismétléseket.
De minden egyes ilyen számokat, ha lenne hogy nézd meg a számok
a rendezett listát, és tedd az utat az első, hogy az lesz az n négyzet
mert ez lesz n-szer n újra.
Értelme?
Mi a helyzet az Omega?
>> Közönség: [hallható].
>> LUCAS: Ez a legjobb esetben.
Szóval, ez olyan, mint, a sok alkalommal válogatás, a legjobb esetben is
Ha a lista már rendezve.
Szóval nem igazán van hogy semmit.
Bubble szerint a legjobb esetben n.
Nem tudjátok, hogy miért?
>> Közönség: [hallható].
>> LUCAS: Ja, ha nyomon követheti a hogy az adatok adagban volt-e swap vagy
Nem, ha van valami, mint állítva igaz, ha volt egy iteráció, ha a
lista már válogatott, alapjában véve, mi fog történni, hogy én fogok
próbálja cserélni minden két a szomszédos elemeket.
Fogom látni, hogy nincs swap.
És én csak vissza azonnal.
>> Tehát ez azt jelenti, hogy csak meg kellett menjen végig a listát egyszerre.
Tehát n, mert úgy nézek ki A n eleme.
Miért kiválasztás sort n téren?
>> Igen, még akkor is, ha a lista, a Minden iteráció kiválasztás sort, azt
ki kell választani a legkisebb elem.
Ez azt jelenti, hogy van, hogy megkeresse meg az összes elemet a rendezetlen
sorolja fel és megtalálja a minimum Minden iteráció.
Van ennek értelme?
>> És behelyezés kard n, mivel a esetben, ha próbálom beilleszteni a
számok és az összes számot, mikor próbálja beilleszteni őket, látom, hogy a
vannak a megfelelő pozícióba.
Nem kell, hogy menjen ellenőrizze az összes többi számok a rendezetlen listában.
Szóval ezért nem lesz n.
Értelme?
És mi a theta?
>> Közönség: [hallható].
>> LUCAS: Mi az, bocs?
Mondd még egyszer.
>> Közönség: [hallható].
>> LUCAS: Pontosan.
Tehát látható, hogy csak a választás tárolt Merge sort kell thetas.
És ez azért van, mert csak a theta ha mindkét Big O és az Omega azonos.
OK.
És végül, merge sort van log n.
>> És akkor, mint Dan azt mondta, egyesítése sort olyan, mint az azonos módon, hogy
te bináris keresés.
Így kap a listán.
És fogsz felére csökken.
És akkor vágja el őket kisebb felét.
És akkor egyesítheti őket.
Srá*** emlékszel, ugye?
OK, ahogy ő mondta.
>> OK, mutatók.
Szóval, mi is az a mutató?
>> Közönség: [hallható].
>> LUCAS: Egy cím.
OK.
Tudom, hogy David mutat egy csomó videók Binky és a dolgok mutat
egymást.
De szeretem azt hinni, a mutatók pusztán egy címet.
Tehát ez egy változót, ami megy tárolására egy címet.
>> Tehát csak ez a speciális változó hogy a négy bájt hosszú.
Ne feledje, hogy a mutatót bármi mindig négy bájt hosszú a 32-bites
gép, így a helyzet a készüléket.
És csak azt a helyet változó belsejébe.
>> OK, így van ez a memória, alapvetően.
Tehát minden egyes blokk memória valójában egy címke, amely a címe
slotty memória.
Tehát ez azt jelenti, hogy lehet a mutató mutató
minden ilyen címeket.
Tehát az oka annak, hogy fogjuk használni mutatók is ha kell emlékezni a helyet
hogy egy adott változó egy memóriát.
>> És srá***, ne feledjük, hogy egy ilyen eset volt, ha van egy függvény
ha én valóban szeretném, ha csere a valós számok, én valójában
kell küldeni egy mutatót.
Nem a változót.
Srá***, ne feledje, hogy?
A különbség -
mi a neve?
Calling érték és a hívás hivatkozással, igaz?
>> OK, igen.
Így hívják az érték.
Ha csak küldj egy változó funkció csak most küldött egy értéket.
Szóval tényleg küld egy példányt a változó.
És a program, nem érdekel lenne, ha ugyanazt a változót valóban
egy másolatot.
>> És hívja hivatkozással azt jelenti, hogy Én valóban küldött egy példányt a
mutatót a változó.
Tehát ez azt jelenti, hogy küldök a helye változó.
Ezért érzik úgy, hogy a helyét a változó, amikor hívom a függvényt
A mutatók, én vagyok képes, hogy ténylegesen változtatni az adatokat, hogy volt a fő.
Értelme?
>> Bár a mutató egy példányt, a mutató még mindig a valós címét
változó, hogy szeretnék változtatni.
Értelme?
>> Így létre mutatók.
Ne feledje, a mutató mindig az a típus, ez mutat
hogy majd a csillag.
És akkor tegye a nevét.
Úgy emlékszem, hogy ha van bármi csillag, ez olyan, mint egy mutatót
hogy bármilyen változó írja, hogy volt.
>> Tehát itt a csillag, például, hogy ez a mutató, és egy egész.
És akkor char csillag egy mutató char csillag és így tovább.
Igen?
>> Közönség: Mi van, ha a mutató n a csillag x.
Tudom, hogy létrehoz egy mutatót x.
Ez azt is kijelentik, x egész szám?
>> LUCAS: OK, így amikor azt mondod n csillag x, te nem hoz létre egy mutatót a
változó x.
Te létre egy mutatót nevű x.
>> Közönség: [hallható].
>> LUCAS: Tehát amikor azt mondom, n csillag x vagyok mondván, hé, a memóriában, fogok
kap egy ilyen három doboz.
És azt fogom mondani, hogy ez lesz x, ami
lesz a mutató.
És valami érdekes a mutatók az, hogy azt mondják, hogy
4 bájt 32 bites gép.
És az oka az, hogy azért van, mert 4 bájt 32-bit.
>> És a gépek, amelyek a 64 bites valójában Van mutatók címek
hogy a 64 bit hosszú.
Szóval, ez csak azt jelenti, hogy a méret a címeket a gép különböző.
>> Így referenciái és Dereferencing.
Két operátorok nektek kell emlékezni.
Az első jel.
A második a csillag.
Ne tévesszen meg, hogy a csillag, és ez a csillag, mert emlékszem, hogy a
Ebben az esetben, akkor n csillag.
>> Olyan, mint egy egész együtt.
Nincs n teret star.
Tehát ez azt jelenti, hogy ez a típus.
Ne feledje, hogy ha van változó csillag, akkor
beszél a típus.
>> Ha csak a csillag, majd a a változó nevét, az azt jelenti, hogy a
te dereferencing a mutatót, amely azt jelenti, hogy éppen a
mutató, megtalálni a címet, hogy ez mutat, majd ezt a címet,
és néztem, amikor van ott.
Szóval mondom a tanítványaimnak, hogy ha van csillag, meg kell gondolni, hogy ez az
rövidítése tartalmának.
>> Tehát, ha van egy mutató, és do csillag mutató, ez a
tartalma a mutatót.
Szóval megy, amit ez mutat és nézd meg az állandó tartalmat.
És a jel ugyanaz dolog, mint a címe.
>> Tehát ha van egy változó a - mint, mondjuk azt mondják, hogy én nem int a = 3 -
ha azt akarom, hogy megtalálják a címét, hogy a változó a memória, én is csak ezt
jel a.
Tehát ez címét.
Értelme?
>> Tehát itt van egy példa.
Ez hiányzik, int b és int c.
Ezért int a = 3 azt jelenti, hogy Én megyek a memóriába.
És fogok találni egy slot és tegye a 3-as szám van.
>> És akkor int b értéke 4.
Fogom, hogy nem ugyanaz a dolog.
Menj a memóriát, és tegye egy számot 4. az egyik doboz.
És int értéke 5.
Keress egy dobozt, és tesz egy 5-ös szám.
>> Tehát mi ezt a vonalat keresel? n csillag pa egyenlő jel a.
Tehát először is, n csillag pa.
Mit csinál?
>> Közönség: [hallható].
>> LUCAS: Igen, n csillag pa, az első, kijelenti, a mutató az úgynevezett pa.
És akkor ez értékét hozzárendeljük hogy a mutató, hogy a címét.
Tehát jel a.
Aztán, ha mégis csillag pb, mi egy csillag pb?
>> Ó, bocsánat.
Ez is hiányzik. n csillag pb.
Úgy értem, csillag db.
Nagyon sajnálom.
Ez ugyanaz a dolog.
De most már jól vagyok ar létre egy mutatót a b, majd a mutatót c.
Igen?
>> Közönség: [Nem hallható]?
>> LUCAS: Igen.
Tehát, ha megy a memóriába, és megy a doboz, hogy jelölése a pa,
akkor valóban fog lásd címeit.
OK?
Igen?
>> Közönség: [Nem hallható]?
>> LUCAS: Igen, pointer egy cím.
Soha ne felejtsük el, hogy.
Ez olyan, mint a legfontosabb rész a mutatók.
Van tárolása és címe néhány változó.
Van még valami?
Van még kérdés?
OK.
>> Így mutatók és tömbök.
Ne feledje, hogy amikor én int tömb 3, Alapvetően, amit csinálok, hogy én vagyok, kedves
Az, kijelentve, a mutató.
Tehát tömb olyan, mint egy mutató a adott helyen a memória, amit
kiosztott három nyílások egész szám.
Van ennek értelme?
>> Tehát amikor én int tömb 3, milyen vagyok Ennek alapvetően létre három
hely a memóriában.
Szóval csak meg a három slot a memóriában.
Tehát, ha mégis, akkor egy csillag tömb, a lényegében azt jelenti, a tartalom tömb,
ami azt jelenti, hogy törli a mutató, megyek arra a helyre, hogy ez mutat,
és tettem az első számú.
>> És aztán, ha én csillagos tömb plusz 1, ez ugyanaz, mint csinál array
zárójelben az egyik, ami csak azt jelenti, hogy menni a hely, hogy ez mutatva.
És akkor a plusz 1 teszi nekem műszak egy pozíció.
Így megy ez a helyzet, valóban, és tedd a két szám.
>> És végül, amikor én array plus 2, megyek, ahol a
tömb néz.
És akkor lépjen memória blokkok.
Aztán fel a számot a három itt.
Igen?
>> Közönség: Tehát csillag tömb egyszerűen mondván, az első pont.
És akkor adjunk hozzá 1, csak azért, mert mi csak igazán
hivatkozva, hogy az első címet.
>> LUCAS: Igen.
Miért, például, mondjuk array 0, tömb 1 és array 2?
Azt mondom, miért csinálod 0, 1, 2, 3 helyett 1, 2, 3?
Ennek egyik oka az, hogy egy, a számítógépes programozók szeretné kezdeni
számítva 0-ra.
Kettő azért van, mert ha nem tömb 0, ez ugyanaz, mint csinál array
plusz 0, ami azt jelenti, hogy menni helyzetben, és én nem
hagyja minden memória blokkokat.
Szóval nem mozog memóriát blokkokat.
Igen?
>> Közönség: [Nem hallható]?
>> LUCAS: Tehát ő kérdezi, mi a a különbség csinál
ez avagy malloc.
Az egyik különbség az, hogy a int tömb 3 létrehozása
tömb a verem.
És amikor én malloc, akkor megteremti a kupac.
Van ennek értelme?
>> Tehát hogyan malloc tényleg működik?
Akkor miért is kell használni malloc?
A fordító olyan számok az összes változók, hogy kijelentette.
És teremt hely az összes őket a verem.
Tehát az összes változó lesz hogy valahol a verem.
Tehát itt van a környezeti változókat.
>> Tehát alapvetően tér azokat a változókat A memóriát a
fordítási időben.
Tehát ez azt jelenti, hogy a számítógép tudni, hogy az összes ilyen változó
előre.
Nem kell, hogy milyen értéket fogsz tenni őket.
De tudnia kell, hogyan mennyi memória van szüksége.
>> De most mondjuk, hogy, például, te létre egy tömb, vagy egy
karakterlánc hogy te figyelembe a felhasználó elől.
Nem tudod, milyen hosszú a karakterlánc lesz, például.
Szóval nem tudom pontosan, hogy hány memória blokkok kiosztani, igaz?
>> Tehát nem igazán értelme akkor azt fel 100 karakter.
És akkor mi van, ha a felhasználó azt írja a 150?
Fogsz kell csavarni.
>> Tehát alapvetően, akkor nem lehet biztos abban, hogyan mennyi memória kell kiosztani
amikor fordítod a programot.
Csak tudom, hogy a futási időben.
Szóval ezért van a kupac.
Tehát a kupac megy, hogy a memória hogy te kiosztása közben
a program időtartama alatt fut.
>> Tehát alapvetően, ha nem malloc, amit amit csinálsz felosztásának memóriába
runtime, ami azt jelenti, hogy te döntés abban a pillanatban, hogy
kellett volna, hogy a memória.
Szóval ez az, amikor azt kiutalták.
Van ennek értelme?
>> Úgy emlékszem, a verem változó , hogy hozzák létre a fordítási időben.
És akkor a halom is változó jönnek létre, ahogy megy
a malloc, például.
>> Közönség: [Nem hallható]?
>> LUCAS: Tehát getString van fog hívni malloc.
Hadd beszéljünk malloc és Elmagyarázom getString.
Tehát malloc ugyanaz a dolog a memória kiosztás.
Így fog kiosztani memóriát a kupac.
És ez meg fog visszatérni a mutatót amennyiben a memória adták.
>> Tehát, ha nem -
itt például -
n csillag mutató.
És akkor a mutató értéke malloc méret inch-szor 10.
Én létre egy mutatót.
És akkor én hozzárendelése, amely mutató az érték a mutató, amely malloc
van, hogy nekem.
>> Ezért azt kérem malloc lehet kiosztani hely 10 egészek.
Ez az, amit mond.
És malloc ad nekem vissza mutató azt a helyet.
Értelme?
OK.
Én és getString van, alapvetően ezzel a hívja malloc így kiosztani
memória futás közben.
>> Mindig ellenőrizze a null mert a malloc fog visszatérni null
ha nem tudja memóriát.
Tegyük fel, hogy kérsz egy nevetséges memória mennyisége.
A számítógép nem lesz képes kiosztani, hogy sok.
>> Tehát malloc csak megy vissza null.
Így mindig emlékezni, hogy ellenőrizze, hogy a pointer, amit kapott a malloc van
null-e vagy sem, mert ha igen, akkor lehet, hogy kell dereferencing a mutatót, és
ami oldali hiba.
És végül, ne felejtsük el, A szabad memória.
>> Malloc teremt memória a kupac.
És meg kell szabadítani a memóriát mielőtt a program véget ér.
OK, ez minden nekem.
Sajnálom, Rob.
Köszi.
>> [Taps]
>> LUCAS: Egy utolsó kérdés mielőtt Rob jön?
Nem?
Igen?
>> Közönség: nem láttam ez online.
Már feltöltötte már?
>> LUCAS: Azt hiszem, Dave feltöltés hamarosan.
>> DAVE: Nem lesz felkerül.
>> LUCAS: Nem lesz online.
>> Közönség: Rajtunk múlik.
>> LUCAS: Ez a helyzet?
OK.
Igen?
>> Közönség: [Nem hallható]?
>> LUCAS: Igen, meg kell szabadítani a memória kerül a kupac.
>> Közönség: [Nem hallható]?
>> LUCAS: Igen.
Minden alkalommal, amikor egy kultúra malloc, akkor kell a kultúra szabad
ha már nem használja a változót.
Így malloc és a free mindig együtt.
A legjobb barátok.
Igen.
Rob?
>> Rob: megyek gyorsan.
És a videó kerül fel.
Nekem van a mikrofon be.
>> OK, így heti öt dolog.
Az első dolog, amit meg a verem.
Úgy emlékszem, hogy már csak egy halom képkocka aktív függvényhívás.
Majd meglátjuk, hogy a második.
És ne feledje, hogy valójában mi megy minden verem keret lesz
a lokális változók a mi funkciók az érveket, amelyeket átadott a mi
funkciókat, valamint egy pár más dolog, amit nem igazán
kell aggódnia.
>> Tehát itt egy példa program, ahol, értesítés, fő a printfing visszatérő
értéke foo 4..
ize csak megy vissza a értéke bar 4 vessző 6.
És bár fogja meg néhány helyi n változó értéke egyenlő-4-szer 6.
És akkor vissza n.
>> Tehát nézzük meg a stack-szerte az aktuális iteráció a program.
Tehát a lényeg az a verem.
Ne feledje, hogy a verem felnő.
Tehát alján mi verem, mi Van egy rakás keret fő.
Amikor a program elindul, a fő mindig lesz a
alján a verem.
>> És mi van benne a mi verem keret fő?
Tehát annak ellenére, hogy nincsenek helyi változókat a fő, mint már mondtam,
van argc és RGV a helyet belső fő verem keret.
Tehát fő most fog hívja a function ize.
És ez azt jelenti foo fog hogy saját verem keret.
>> Most bent vagyunk a A function ize.
És mi kell menni Foo stack frame?
Nos, ize van egy érv n.
És n egyenlő 4, mivel ez az, ami Fő halad, mint foo érvelését.
>> Tehát most foo fog hívni bar.
Mi bar megy, hogy a belső a "stack frame?
Meg x egyenlő 4 y egyenlő hat.
Ez még nem minden, hogy mi lesz, hogy A stack frame, mert bár
is van egy helyi változót n.
És n fogunk egyezni 24.
>> Tehát most sáv fog visszatérni n.
Tehát bár visszatér 24 A stack frame foo.
És azért, mert bár most visszatér, hogy azt jelenti, hogy most felbukkanó a verem keret
BAR le a verem.
Tehát a memória sáv volt a most ki a verem.
>> Most, ize is fog vissza 24 fő.
Most, hogy a foo visszatér, a memória hogy foo használta annak "
verem keret is elment.
És most, a fő fog hívni printf.
Tehát printf is csak egy funkciót.
Amikor hívjuk printf, ez lesz egy verem keret a printf
függvényhívás.
>> Mit halad printf?
Ez az, ami fog menni annak stack frame.
Legalábbis, mi halad hogy a százalékos i backslash n és
az érvelés 24..
Lehet, hogy több benne a verem keret ha a printf segítségével történik, hogy bizonyos
lokális változók.
Nem tudjuk.
>> De, hogy megy a printf a verem keret.
Ez lesz végre a printf.
Ezután printf kész.
Ez vissza fog térni.
Végül a fő történik.
Főoldal visszatér.
És akkor a program kész.
Igen?
>> Közönség: Jársz [hallható]
érvek [nem hallható]
paraméterek?
>> Ebből: Tehát van egy kis különbség között, érvek és paraméterek.
És tényleg, közös beszélnek, az emberek hajlamosak hogy csak keverjük őket az idő.
De paraméterek a formális nevét a dolgokat.
>> Így argc és argv a paraméterek a fő.
Érvek az, amit valójában adja át ezek a paraméterek.
Tehát, ha hívom foo 4 4 az az érv vagyok elhaladó be
És az n paraméter, belsejét ize, veszi az érték 4-
4-től volt az érvelés.
>> Közönség: [Nem hallható]?
>> Ebből: n egy lokális változó bar.
n még helyi ize, de ez a paraméter foo.
Ez nem egy helyi változót.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: foo csak hív bár és visszatérő bármi bar visszatér.
>> Közönség: [Nem hallható]?
>> Ebből: Igen, csak hogy több verem kereteket.
Igen?
>> Közönség: Miért foo nevű előtt printf?
>> Ebből: Miért foo neve előtt printf?
Így tudtam, hanem tett valamit mint int x egyenlő foo 4
majd nyomtatott x.
De ahelyett, kombináltam a funkciót hívja a printf érv.
>> De észre, hogy valójában nem végre a hívás printf amíg
kitalálni, milyen az ize a 4.
Így fogjuk értékelni ezt.
És csak egyszer, hogy kész lesz hogy jöjjön vissza, és értékeli ezt.
Igen?
>> Közönség: Mivel mindkét bar [hallható]
érték, miért nincs [nem hallható]?
>> Ebből: Teljesen legyen int.
Ez nem volt fogott át több fogás.
Így kell lennie, int bár és int foo hiszen mind a két
visszatérnek egészek.
Void csak akkor, ha ők nem fognak hogy visszatérjen a tényleges értékek.
Igen?
>> Közönség: Ha lenne egy vonal fölött a visszatérő, [nem hallható]?
>> Ebből: A vonal felett a visszatérés?
>> Közönség: Igen.
Mint ha nem printf és a [nem hallható], lenne kinyomtatni kétszer?
>> Ebből: Tehát belsejében ize?
Ha volt egy printf itt?
>> Közönség: Igen.
>> Ebből: Tehát ha van egy printf joga itt, akkor nyomtasson egyszerre.
Mivel hívja foo egyszer jobb Itt aztán nyomja meg a printf.
Akkor hívni bar.
És akkor foo visszatér.
És ennyi.
Mi mindig csak találkozunk A printf egyszerre.
Igen?
>> Közönség: [Nem hallható]
printf hívás foo, mert mi vagyunk az első hívás printf aztán mi halad
az érveket.
>> Ebből: Tehát elméletileg, nem printf hívás foo?
Tehát nem.
Csak azért, hogy a C fog végre ezeket a dolgokat, mielőtt tudjuk
hívja a funkciót, az összes érvet A funkciót kell
teljesen értékelni.
Így van ez a teljesen értékelni?
Igen, ez csak egy húr.
Ez csak egy értéket.
>> Aztán ott van, hogy teljesen értékeli ezt.
Ha ez megtörtént, most minden a érveit értékelik.
És most már tudjuk, hogy a hívás printf.
Igen?
>> Közönség: Egy kérdés.
Ha van egy üres funkciót kell van cserébe pontosvessző?
>> Ebből: nem visszatérés pontosvessző ha van egy üres funkcióval.
OK.
Tehát most egy kis halom dolgot.
Szóval, halom, hogy hogyan fogunk foglalkozni dinamikus memóriakezelés.
És ez a közvetlen ellentétben áll a verem amit neveznék automatikus
memóriakezelés.
>> Így a verem, akkor soha nem kell foglalkozni, hogy a lokális változók
tolnak, és bukkant ki minden Ezek stack keretek és minden ilyesmi.
Nem kell aggódni.
Ez az automatikus.
Tehát a kupac manuális.
És a [hallható]
származik ezeket a funkciókat malloc és ingyenes.
>> Tehát itt van egy másik program.
Minden, amit csinálunk mallocing egy egész szám.
Mi tárolás csillag x.
Persze, van, hogy ellenőrizze hogy ha x null.
Ezután fogjuk csak meg, milyen x mutat a 50.
Print mi x mutat, print x, majd a szabad x.
>> Szóval hogy van ez valójában fog keresni ha megnézzük a stack és halom?
Szóval kezdjük újra.
Az alján a verem, mint korábban.
Ne feledje, hogy téged halom közvetlenül ellenzi a stack?
Így megyünk, hogy a tetején a kupac ott.
>> Tehát a mi verem aljára, van a verem keret fő.
Azt a helyet argc, argv, és Most már van egy helyi változó x, ami
egy int csillag.
Így megyünk iterációkhoz ezzel a programmal.
Az első dolog, amit meg is a hívás malloc.
>> Szóval, hogy a hívást a malloc.
Malloc függvénye.
Ez lesz, hogy egy verem keret.
Mit halad malloc?
Ez fog bemenni a köteg keretben.
Mi elhaladó mérete n, amely 4.
Tehát, erre malloc.
>> Mit jelent a malloc csinálni?
Ez megragadja nekünk néhány helyet a kupac.
Így fogunk menni a kupac.
És fogunk megragad 4 bájt a kupac.
Úgyhogy csak adni, hogy a egy tetszőleges címre.
0x123 Csak úgy, mintha egy cím, ami a kupac.
>> Tehát mi valójában benne, hogy a régió memória címen Ox123?
Garbage.
Tehát nem tárolt semmit benne.
Tehát, amennyire tudjuk, az bármi lehet.
Nem szabad feltételezni, hogy ez a nulla.
Ez valószínűleg nem nulla.
>> Tehát most malloc visszatér.
És mit tegyünk, ha malloc visszatér?
Mi meg amit visszaad.
Mi meg x megegyezik azzal, amit akkor visszatér.
Szóval mi ez vissza?
Ez visszatérő 0x123 mivel ez a a blokk címét, hogy a memória
csak kiosztott a kupac.
>> Tehát vissza 0x123 x most fog beállítani egyenlő 0x123, amely képileg,
Gyakran rajzolhat x amelynek tényleges nyíl mutat az adott blokk.
De x csak tárolja a címet.
Tehát most azt kell ellenőrizni, ha x null.
Ez nem null.
Úgy teszünk, mintha, hogy malloc sikerült.
>> Tehát most csillag x egyenlő 50.
Tehát csillag emlékszik az azt jelenti, megy, hogy a cím.
Tehát 0x123 fogunk megy, hogy a cím.
Annak érdekében, hogy elvezet minket oda.
Mit csinál ez a cím?
Mi tárolására 50.
>> Így aztán ez a sor, ez az, ami dolgok fognak kinézni.
Most ez már nem szemetet ott.
Most már tudjuk, hogy a 50-ben, hogy az adott címet, mert
mi meg azt, hogy az.
OK?
Most fogunk nyomtatni f.
>> Tehát először fogunk nyomtatni csillag x.
Tehát mi csillag x?
Ismét csillag x eszközzel megy a dolog, x mutat.
Tehát x tárolja 0x123 megy, hogy.
Kapunk 50.
Tehát nyomtatni f ezt.
És ez azt jelenti, hogy fog nyomtatni 50.
És akkor, hogy visszatér.
>> És akkor mi van a második printf.
Mi most százalék p.
Ha még nem látta, az hogy mennyire nyomtat egy mutatót.
Tehát százalékkal i, százalék f, és az összes a már.
Tehát százalék p nyomtassa ki a mutatót.
>> Tehát x egy mutató.
Tehát, ha fogunk nyomtatni x is, mi a nyomtatás, ami valójában belül
x, amely 0x123 Tehát az első print f nyomdába 50.
A második print f folyik nyomtatni 0x123 Igen?
>> Közönség: Használsz százalék x nyomtatni a mutató?
>> Ebből: Szóval használja százalék x nyomtatni a mutató?
Így azonban százalék x csak, Általában, mint ha egy kis
egész szám, és a nyomtatni kívánt , mint egy hexadecimális.
Ez csak, hogyan csináltad.
>> Mivel százalék d lenne kinyomtatni a decimális.
Ez-ket kapjuk százalék d. Én csak egész szám.
százalék p kifejezetten a mutatók.
>> Tehát x egy mutató.
Azt akarjuk, hogy használni százalék p.
De százalék x működhet.
Igen?
>> Közönség: [Nem hallható]?
>> ROB: Igen.
Legalábbis erre a hívásra - így nem tartalmazza azt itt.
De ez a két érv szükségszerűen Ezen belül verem keret
valamint minden lokális változók printf segítségével történik, hogy.
És akkor a következő hívás a printf már belsejében printf verem keret
százalék p backslash n és bármilyen x értéke, ami 0x123.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: Nem lesz nyomtatni valamit úgy néz ki, mint ez.
>> Közönség: [hallható].
>> Ebből: Így kinyomtatja a cím formájában.
Úgy néz ki, mint egy cím.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: Miért mi?
>> Közönség: [Nem hallható]?
>> Ebből: Miért van ez a mutató 4 byte?
Tehát van egy csomó A 0-k előtt ezt.
Szóval ez tényleg 0x0000000123.
Egy 64 bites rendszer, nem lenne egy csomó több nullát.
Igen?
>> Közönség: [hallható].
>> Ebből: Tehát az első printf fog nyomtatni -
>> Közönség: [hallható].
>> Ebből: Igen, ez lesz a nyomtatási mi x mutat.
Csillagok szerint mi ez dolog mutat.
Fogd meg.
Szóval mi ez mutat?
50..
Fogd meg.
Ez az, amit mi fogunk nyomtatni.
Mivel a következő, vagyunk csak a nyomtatást x is.
Mi van benne az f?
0x123.
OK.
>> És végül, mi van a szabad.
Mit halad, hogy szabad?
Mi elhaladó x.
Ekkor Igazából megjelenik verem azt a keretben.
>> Szóval halad az értéket 0x123 szabad.
Tehát most ingyen tudja, minden rendben, El kell menni, hogy a halom
és szabad, hogy a memória.
Ez már nem a mi a címen 0x123.
>> Így szabadon megy, hogy kiadja hogy a kupac.
Most a halom ismét üres.
Jelenleg nincs memória szivárgás.
Most ingyen visszatér.
Vegyük észre, hogy x még 0x123.
De ez már nem érvényes a memória.
Mi kell többé hivatkozás feloldási x.
Igen?
>> KÖZÖNSÉG: A return 0 felesleges?
>> Ebből: A returen 0 felesleges?
Igen.
Mi csak fel, hogy ott, mert van egy visszatérő egyet a levegő.
Szóval, ez olyan, mint, igen, lehetővé teszi, tartalmazza a feladó 0-ra.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: Így aztán ingyen x, mi történik, ha igyekszünk dereference a mutatót?
Lehetséges, hogy semmi sem megy rosszul.
Lehetséges, hogy akkor is kap 50.
>> Lehetséges az is, hogy, hogy a memória jelenleg használt valami mást.
Tehát ez nem definiált viselkedést.
És meghatározatlan jelent valamit megtörténhet.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: Nem, így ha hozzá x valami másra.
Tehát, ha itt azt mondtuk x értéke malloc valami mást -
malloc méret rendezvény -
akkor az eredeti blokk A memória nem szabadult.
És mi már hivatalosan is elvesztette.
Ez a memóriavesztés.
Elvesztettük összes referencia az, hogy a blokk a memória.
Szóval, nincs mód arra, hogy valaha is szabad azt.
OK, így aztán return 0 eszközökkel történik.
>> Rendben, verem túlcsordulás.
Most mi van itt?
Úgy emlékszem, halom megy le.
Stack megy fel.
Tehát ez volt a példa előadás, Azt hiszem, ahol a fő-csak megy,
ezt a funkciót ize, ami megy nevezi magát rekurzívan újra és
újra.
>> Tehát verem keret fog működnek pontosan ugyanaz.
Így fogunk kezdeni fő verem, mint az alsó keretben.
Ezután fő fog meghívni az ize, ami fog kapni a verem keret.
>> Ezután foo fog meghívni az ize újra, ami fog kapni
egy verem keret.
És újra, és újra, és újra, és újra, amíg végül, mi fut
a kupac.
Tehát ez az, hogy hogyan jutunk verem túlcsordulás.
És ezen a ponton, akkor SEG hibája.
Vagy azt tényleg szegmens hiba előtt Ezen a ponton, de igen.
>> KÖZÖNSÉG: A core dump a ugyanaz, mint a szegmens hiba?
>> Ebből: Így látni fogod szegmentáció hiba core dump.
Kapsz egy core dump, ha Ön Seg hibája.
És ez olyan, mint a lerakó az összes tartalmát a jelenlegi memória, így
hogy próbálja meg, és azonosítani miért Seg hibázott.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: Tehát egy szegmentációs hiba azt jelenti, van egy verem túlcsordulás.
Tehát nem feltétlenül.
A szegmentációs hiba azt jelenti, hogy te megható memória módon
nem kellene.
Tehát az egyik módja, hogy történik az, amikor a verem túlcsordulás, kezdjük megható
memória oly módon, hogy ne legyen.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: Tehát belsejében végtelen ciklusba.
Mint, ez olyan, mint egy rekurzív végtelen hurok, és így még egy
verem keret minden egyes alkalommal.
De csak belül a rendszeres végtelen míg egy -
Nos, ne is nyomtatni f -
tenni valamit.
Mindegy.
>> Nem fogunk, hogy egyre egy verem keret.
Mi csak fog tartani loop mint ez az egyetlen utasítást.
A verem nem növekszik.
Ez az a tény, hogy minden rekurzív hívás ad nekünk egy verem keret.
Ezért kap egy verem túlcsordulás.
Igen?
>> Közönség: Tehát, ha azt mondta, hogy a while ciklus, majd a [hallható]?
>> Ebből: Tehát, ha belül a while ciklus volt egy printf, akkor is lenne
Nem Seg hibája.
Csak nem akarja összezavarni a dolgokat.
Lenne hurok.
Az ember kap egy halom keret a printf.
>> Ezután printf visszatér.
Akkor lenne hurok újra.
Az ember kap egy halom keret a printf.
Ez vissza.
Egy stack frame.
Szóval nem kap ez a végtelen halmozódása verem kereteket.
>> Közönség: [Nem hallható]?
>> ROB: Igen.
Tehát ez a verem túlcsordulás történik mivel ezek egyike sem
hívások foo visszatérnek.
Tehát, ha visszatérünk, akkor azt elkezd vesztes stack kereteket.
És akkor nem verem túlcsordulás.
És, hogy miért van szükség egy alapeset az Ön személyes funkciók.
Igen?
>> Közönség: A potenciális nagysága és a verem a kupac azonos
minden program?
>> ROB: Nagyjából.
A potenciális mérete a verem és a a kupac azonos minden program?
Nagyjából.
Van némi randomizáció ahol a stack kezdődik, és
ahol a kupac kezdődik.
Ha véletlenül van egy csomó globális változók és a dolgok, lehet, hogy
elvenni egy kis helyet a kupac.
>> Egy 64 bites rendszer, akkor gyakorlatilag végtelen memória.
Már csak annyi.
Között a 32 bites és 64 bites, hogy egy jelentős különbség.
>> Fogsz kapni egy csomó más stack és halom helyet a 64 bites
rendszer, mert ott csak több foglalkozik, hogy tudják használni.
De az egyéni rendszer, akkor nagyjából azonos mennyiségű verem
és a halom helyet.
Rendben van.
>> Tehát az utolsó dolog összeállítása.
Szóval tudnia kell ezt a folyamatot.
Négy nagy lépést.
Tehát az első kell könnyen megjegyezhető.
Pre-feldolgozás.
Ez az előtag elő benne.
Tehát előbb minden mást.
>> A dolog, hogy emlékezzen a hash.
Így hash meghatározza és hash tartalmazza az összes ilyen.
Ezek mind pre-processzor irányelveket.
Ezek azok a dolgok, hogy a pre-processzor gondoskodik.
>> Tehát mit csinál egy pre-processzor csinálni?
Ez egy nagyon buta dolog.
Minden ez képes mind ezeket a másolás és kivágás és beillesztés műveleteket.
>> Tehát hash tartalmaz szabványos i0 pont h.
Mit csinál?
Ez megragadta a standard i0 dot h fájlt, és illessze be a felső
ahol azt mondja hash tartalmazza szabványos i0 dot h.
>> És minden hash meghatározni, hogy mi már láttam, mit csinál?
A másolás az érték, amit a hash meghatározott definíciója és beillesztés, hogy
bárhol is használja az értéket.
Tehát az előfeldolgozó csak nem igazán egyszerű szöveges alapú műveleteket.
Ez nem tesz semmit smart.
Tehát minden más bonyolultabb.
>> Tehát most, hogy az előfeldolgozó történik, valójában össze.
Tehát mi áll le a fordítás jelent?
Mostantól majd a C kódot az assembly kódot.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: Igen, elkaptuk ezt.
Tehát összeállítása.
Megyünk a C és összeszerelés.
Tehát ez a tényleges nyelvi változás.
Összeállítása önmagában azt jelenti, haladva magasabb szintű nyelv
alacsonyabb szintű nyelven.
>> És c magas szintű nyelv mint a szerelvény.
Mi az összeszerelés?
Az utasítások, amelyek, szép sok, készült a CPU-t.
De a számítógép még mindig nem Nem értem szerelvény.
Csak megérti egyesek és nullák.
Így a következő lépés az összeszerelés, amely elvezet minket ezeket az utasításokat, hogy
a CPU megérti, és valóban fordítja őket, hogy
az egyesek és nullák.
>> Tehát C a gyülekezési bináris.
De nincs futtatható még.
Tehát gondolom, a CS50 könyvtár.
Mi van ha egy bináris ez CS50 könyvtárat, amely getString
és getInt és minden.
>> De a CS50 könyvtár -
önmagában - nem futtatható.
Ez nem egy fő funkciója.
Ez csak egy rakás bináris hogy tudod használni.
Szóval, összekapcsolása, hogyan hozzuk össze az összes Ezeknek a különböző bináris fájlok
a tényleges futtatható.
Az egyik, hogy akkor írja dot slash egy pont ki.
>> Tehát ez olyan, mint a fájl írta - függetlenül a program -
Cézár dot c.
De most, hogy már össze le a bináris.
Így Cézár dot o.
És ez a mi CS50 könyvtárak bináris.
És ők is együtt egyetlen futtatható.
Igen?
>> Közönség: [Nem hallható]?
>> Ebből: Tehát az első közé, ne feledd, A hash közé valójában egy
pre-processzor lépésben.
De ez külön.
Ha nem használ olyan funkciókat kívül az egyetlen fájl, akkor,
Nem, nem kell összekapcsolni semmit mivel mindent.
>> Igaz, printf is kapcsolódik be
Ha valaha is használni printf, hogy valami hogy kell kapcsolódik
mert nem írtam.
És valóban, a printf automatikusan kapcsolódik be
Tudod, hogy a parancssorban, vagy ha beírt csinál, látod, hogy
kötőjel l CS50, amely kapcsolat A CS50 könyvtárban?
Printf, meg ilyesmi, megy össze kell kapcsolni az automatikus.
Minden más kérdés a valamit?
>> Közönség: [Nem hallható]?
>> Ebből: összekapcsolása?
Van egy csomó különböző bináris fájlok.
Ez a legjobb példa , amit mi használunk CS50 könyvtár.
Állítottuk össze és adja be Önnek a bináris ezt CS50 könyvtár.
>> A használni kívánt getString a programban.
Szóval megy, és használja getString.
De anélkül, hogy a bináris kód GetString, amikor fordítod a kódot
le, akkor valójában nem fut a programot, mert getString karakterlánc
még nem teljesen meghatározott.
>> Ez csak akkor, ha link az én bináris tartalmazó getString, hogy most, minden
jobb, tudok valójában végre getString.
A fájl teljes.
És tudom futtatni ezt.
Igen?
>> Közönség: Nem összekapcsolása convert A bináris futtatható?
Tehát akkor is, ha nincs más könyvtárak, nem lenne még mindig
szükséges lefordítani A [hallható]?
>> Ebből: Tehát egy végrehajtható még bináris.
Ez csak ötvözi egy egész csomó bináris.
>> Közönség: Köszönöm szépen.
>> Ebből: Nem probléma.
Van még kérdés?
Egyébként mindannyian beállítva.
Rendben van.
Köszi.
>> [Taps]
>> Közönség: Köszönöm.
>> ROB: Igen.