SPEAKER 1: Szia mindenkinek. Mi lesz az induláshoz. Azt hiszem, az emberek még mindig megy hogy szűrést. De az az érdeke, ezért azt is hogy ti innen időben, fogunk kezdeni. Szóval szívesen a CS50 kvíz 0 kritika. Azoknak, akik még nem tudatosult Mégis, van egy kérdésem szerdán. Woo-hoo. Ha még nem kezdte tanulmányozni még vagy nem ismerték fel, hogy ez létezik még, múlt vetélkedők és minden információt a a kvíz vannak cs50.net/quizzes. Van néhány nagyon jó dolog ott, múlt vetélkedők az elmúlt 10 évben, valamint az információs erről a kvízt és témák hogy fedezi. Tehát kezdjük. Szóval srácok talán emlékeznek, az első nap az osztályban Dávid azokat lámpák. Szóval lényegében mindent, ami a motorháztető alatt a számítógép végzett bináris. Binary azt jelenti, amit hangzik mint a 0 és 1-es. Két értéke van, hogy a is képviselteti magát. Tehát ugyanúgy, mint az első napon a szakasz amikor David van kapcsolva a lámpa hogy képviselje a gumó, vagy 1, a számítógép érti a bináris 0-és a 1-es, vagy ki. Alapjai Binary. Minden helyen képviselteti magát A bázis két. Szóval adjunk hozzá 2 a 0 a 1 2 egészen. Annak kiszámítására, milyen a bináris, hogy tizedes, akkor kövesse az egyenlet típusú dolog. Ha van egy 1 bármely olyan helyen, Ön szorozd meg bármilyen alapozni, van, add fel, és kap a tizedes. Szóval, ez az, hogyan számít 5 bináris. Csakúgy, mint amit mi csináltunk a utolsó dia, ez hogyan lenne jelentik 1 és 5. Hasonlóképpen, mint te is hozzá és kivonni a decimális vagy 10-es alapú, vagy tényleg olyan alap, az adhat és vonjuk bináris. Pontosan az, amit elvár, ha hozzá a két fel, ha az megegyezik a nagyobb mint 1, magánál a 1, hogy ez a 0, és nem a mellett, hogy így, csak mint amit elvár a rendszeres tizedes vagy bármely 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 bináris. Szóval hogyan lehet kifejezni, például, betűk vagy számok és jelek? A válasz erre az, hogy ASCII. ASCII egy leképezés a karakterek között hogy mi általában látni a Angol nyelv, mint A., B, C a, aláhúzás, kötőjel, és ilyesmi. És térképek, hogy egy ASCII értéket. Az ASCII érték csak egy szám, amely lehet érteni a számítógép. És ahogy tudod csinálni kívül és kivonás számok, meg tudod csinálni őket ASCII értékeket. Tehát ebben a példában, mi majd ezt nyomtassa ki? Igen, csak egy hely a B tér C space D. Hol az egér megy? Figyeljük megadhatjuk egy int 65. És amikor nyomtatni hogy ki a százalék C, ez lesz értelmezni, hogy a karakter és kiírja A. Ugyanígy azt is kijelenti, , mint egy karakter. És ha nyomtassa ki a százalékos C, ez lesz értelmezni, hogy az százalék D. És ahogy akkor adjunk hozzá egy szám, akkor hozzá karakterek ASCII értékek, ebben az esetben. Szóval egy kis mutató mindenki számára. 5, mint a húr, nem valójában egyenlő 5. Tehát hogyan tudnánk alakítani a húr 5. Az egész 5? Van ötleted? Igen. Tehát, ha van 5 mint a húr, tudjuk kivonni 0. É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 egyik, ahol beszélgettünk algoritmusokat. Szóval hogyan lehet valóban szeretné a számítógép hogy milyen érdekes dolgok? Tudod, csak összeadása és kivonása számok és a nyomtatás a dolgokat nem az izgalmas. Általában, azt akarjuk, hogy számítógép végre valamilyen algoritmus. Egy kicsit bonyolultabb mint egyszerű számtani. Az algoritmus csak egy lépésről lépésre set Az utasítások, hogyan lehet végrehajtani egy bizonyos task-- Csakúgy, mint egy recept. Lehet, hogy emlékszik az első napon osztály, ahol Dávid nekünk számít a terem Az emberek és hány ember volt a szobában. Lehet használni a számolás egyenként. 1, 2, 3, 4. Ebben az esetben, egy lineáris idő algoritmus. Dávid azonban bevezetett egy algoritmust hogy számít az ember a szobában ahol mindenki feláll, akkor mondja ki a számot egy másik személy, hozzá, hogy szám fel, és egy ember leül. És ismételje ezt. Ez az egyik fajta algoritmus. Mi lehet elemezni, hogy hatékony egy algoritmus rajta üzemidejét. De akkor beszéljünk egy kicsit erről később. Tehát az összes algoritmus is kell írni pszeudokódja. Pszeudókód csak egy angol mint szintaxis, hogy képviselje egy programozási nyelv. Például, ha azt akartuk, hogy kérje a felhasználót kitalálni kedvenc számot, Lehet, hogy pszeudokódja mint olyan. Kap egy felhasználó hiszem. Ha a becslés helyes, mondd meg nekik, ők helyes, különben nekik ők nem helyes. És pszeudokód egy módja könnyen ami egy gondolat vagy egy algoritmus. Így most érdemes valójában írni ez az a nyelv, amely a számítógép talán megértés. Így írhatnánk 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, mi már használ többnyire c. Tehát ez lehet forráskódja c. Később a helyszínre, este jön kapcsolatba kerülnek más programozási nyelvek, mint a PHP. Vagy ha még, hogy más osztályok, akkor talán nem 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. Szóval, hogyan működik a számítógép valójában érti ezt? Mint már mondtam, csak tényleg megérti nullák és egyesek. Szóval, hogyan kap a forrás kódot amit lehet megértette? Nos, van valami úgynevezett fordító. Ha felidézzük vissza a legtöbbet a psets, hogy van valamilyen program írt egy pont c fájlt. És akkor azt írja, hogy. Tehát mi, hogy csinál? Akkor írja make lefordítani a programot, mert valakivel-- aki írta a p meg; valószínűleg David-- létrehozott egy make fájlt. És ez azt mondja, hogy hogy tudja futtatni a fordító, az úgynevezett csengés, hogy Will majd fordítsd a forráskód tiltakozni kód, amely a nullák és egyesek hogy a számítógép megért. De egy kicsit később, mi megy mélyrehatóbb a fordítóprogramok. Így emlékszem Pset 0, where-- igen, Kérdése van? KÖZÖNSÉG: [nem hallható]? SPEAKER 1: Igen. Azt hiszem, tényleg legyen az interneten. Igen. Közönség: Ez olyan, mint [hallhatatlan]? SPEAKER 1: 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, ha akartok húzza fel, és nézd meg a saját számítógépén, az is rendben van. Tegyük fel, hogy újra. KÖZÖNSÉG: [nem 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. Sajnáljuk, a kérdés az volt, az volt sztrájk a vizsga. És ez nem az. Tehát Pset 0, nektek kellett volna minden végre valami a semmiből. És megtudtuk, néhány alapvető programozási építőelemek segítségével semmiből. Szóval vessünk egy pillantást néhány Ezen építőkockák teszik ki a programot. Az első a logikai kifejezés. Logikai kifejezések is, és 0 vagy bármi, ami 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ű, programot, amely a logikai kifejezés itt. Tehát ahhoz, hogy a logikai kifejezések hasznos, van logikai operátorokkal. Ezek operátorok, hogy lehet használni összehasonlítani bizonyos értékeket. Így van, és vagy nem egyenlő, kisebb kisebb vagy egyenlő, vagy nagyobb, mint egyenlő, és kevesebb, mint vagy nagyobb, mint. De ezek a szereplők nem túl hasznos hacsak nem tudjuk kombinálni őket körülmények között. Szóval srácok talán emlékszik a semmiből és a p állítja, hogy Volt körülmények. Ezek lényegében hasonló villa a logikája a program hajt végre attól függően, hogy a feltétel teljesül. Tehát az egyik feltétele, hogy mi volt használják sokszor ez a tanfolyam a ha más, akkor, és más körülmények között. Íme egy példa arra, hogyan lehet használni, hogy a. Tudja valaki, hogy a különbség csak használ, ha nyilatkozatok minden az út le verseket, ha más, ha, és még együtt? Igen? KÖZÖNSÉG: [nem hallható]. SPEAKER 1: Pontosan. Tehát, ha volt, ha egészen ez Így, még ha ez az állapot visszatér igaz, akkor még tovább tesztelés a következő két. Mivel egy más, ha egy más nyilatkozatot, ha az egyetlen igazat ad vissza, a többiek nem vizsgálták. Bármilyen kérdése van az? Cool. Szóval használjon if-else egy más nyilatkozatot, ha tudod, hogy ez csak az egyik 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 hogy tanultunk hurkok. Van három hurok. A hurkok, míg a hurkok, és nem közben hurkok. És általában, amikor leül a írjon valamit, akkor el kell döntenie, amely a három a használni kívánt. Szóval hogyan lehet eldönteni, hogy melyik? Mi általában használ a hurok, ha tudjuk hányszor akarjuk iterálására át valamit, vagy hogy hányszor azt akarjuk, hogy a feladat végrehajtása során. Az általunk használt while, ha kell egy kis feltétel, hogy igaz, hogy fut. És az általunk használt csinálni, miközben nagyon hasonló darabig, de azt akarjuk, hogy kódot futtatni legalább egy alkalommal. Tehát nem, míg, bármi is van a, nem fog mindig fut legalább egy időben. Mivel, miközben azt lehet, hogy nem fut minden, ha a feltétel nem teljesül. Bármilyen kérdése van ezzel? Így szerkezete a hurok. 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 i ++. Nagyon egyszerű, hogy tettünk. Egy while ciklus, hasonlóképpen, akkor hogy valamilyen inicializálás, valamilyen feltétel, és valamilyen frissítés. Így valósíthatja meg a hurok is mint a while ciklus ezzel. És hasonlóképpen a do while ciklus, talán van némi inicializálás, végre valami, frissíteni, és majd ellenőrizze az állapotát. Tehát most funkciókat. Rakjuk össze mindent. Azt érdemes írni néhány fajta funkciót. Közös funkció, hogy talán már láttuk a legfontosabb. Main függvény. Van egy visszatérő típus, int. Ez egy függvény neve, fő. És azt érvekkel argc és argv. Tehát fő csak egy funkció. Egyéb funkciók lehet, hogy használt, printf-- printf egy function-- GetInt, toupper. De ezek történetesen már végrehajtani minket valamilyen könyvtár. Ha a srácok emlékszel beleértve ez CS50.h könyvtárban, vagy a standard I / O könyvtár. Igen, kérdés? KÖZÖNSÉG: A legfontosabb most rejlő c? Vajon ez csak egyfajta [nem 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: Akkor nem [nem hallható]? SPEAKER 1: Nem Egyéb kérdés? Cool. Szóval, mint tudod használni a funkciót hogy van írva az Ön számára, akkor is írja meg saját funkciója. Ez a funkció, hogy valaki írtak kiszámításához hangerő Egy q, például. Van egy visszatérő típus van, ebben az esetben int, a funkció neve q és a paraméterek listája. És jegyezze meg, hogy meg kell írni az adatokat A paraméter típusát kívánt használja, vagy más funkciót nem tudni, hogy milyen paramétert kéne elfogadása. Szóval, ebben az esetben, azt akarjuk, egy egész szám, mint a mi bemenet. Szóval, miért is akarjuk használni funkciókat? Először is, nagy a szervezet. Segítenek szakítani a kódot több szervezett 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, hogy mi folyik itt. Tehát, ha bontani funkciók lehet, hogy könnyebb legyen olvasni. És újra-képességét. Ha van egy darab kód, amit most hívott vagy fuss többször, ahelyett, hogy felülírná 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 funkciót. 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 menetvágó. Szál a koncepció több szekvenciáit kód végrehajtó ugyanabban az időben. Így gondolom, vissza nap egyik, ahol Dávid srácok számolja ki a számát ember a szobában. Lényegében mi A minden ti voltatok futás külön szálon. És ezek a szálak jönnek össze hogy valamilyen választ. Hasonlóképpen, a Scratch, ha van több sprite, lehet, hogy Van egy macska és egy kutya. És akkor egyszerre futó saját szkripteket. Ez egy példa a menetvágó. És a másik fogalom, ami bevezetett karcolás volt eseményeket. És események, amikor több rész a kódot kommunikálnak egymással. A Scratch, ez volt, amikor használta a broadcast vezérlés és a Mikor én Fogadás blokkok. És azt is, a probléma Set 4, láttuk egy kicsit az események is. Srácok volna használni a Gevent könyvtár. És ott volt a funkció waitForClick amelyben vártál a felhasználót, hogy kattintson. És a kattintás, ebben az esetben lenne az esemény, és várja kattintás a eseménykezelő. És azt is, az egész fut a psets és dolgozik a psets, akkor Lehet, hogy érintkeznek néhány ilyen parancsok. Ez az, amit beírt a terminál ablak vagy bármi ablak hogy megjelenik a g Edit, lényegében, navigálni a számítógép. Így például, LS felsorolja a tartalmát egy könyvtárba. Készíts könyvtárban létrehoz egy új mappát. CD, változás könyvtárba. RM, távolítsa el, törli a fájlt vagy valami 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: Ja, biztos. Elnézést, a kérdés az volt, ha azt sugallja, hogy ezt az a puskát. Ez segíthet. Ha van hely, akkor tedd azt. Ez is csak általában elég jó emlékezni, mert használat közben érdemes csak van ez megjegyzett. Hogy lesz, hogy az életed sokkal könnyebb. Nem válaszolok a kérdésére? Tehát most, beszélgettünk egy kicsit röviden a könyvtárak. De a két legfontosabb, amit már segítségével eddig a tanfolyam standard I / O és CS50. Milyen dolgokat tartalmazza a szokásos I / O könyvtár? Igen, eddig általunk használt printf. A CS50, általunk használt GetInt és getString. És az adatok string típusú is előfordul, kell bejelenteni ebben CS50 könyvtárban. Majd beszéljünk egy kicsit mélyrehatóbban a hogyan könyvtárak működnek és hogyan befolyásolja a többi a kódot. De ezek a két legfontosabb, hogy mi érintkezésbe az eddig a kurzus. Típusok. Ezek jó emlékezni, hogy mennyi minden típus képviseli, vagy hogyan sok byte típusú requires-- int, 4 bájt; char, 1 byte. Float 4 bájt. Mi ez a kettős? KÖZÖNSÉG: [nem hallható]. SPEAKER 1: Igen, így úszó de megduplázza a méretét. Mi a helyzet a hosszú? KÖZÖNSÉG: [nem hallható]. SPEAKER 1: OK. Mi az a hosszú? KÖZÖNSÉG: [nem hallható]. SPEAKER 1: Igen, dupla int. Igen. KÖZÖNSÉG: [nem hallható]. SPEAKER 1: Long [nem hallható]. Majd egy hosszú, hosszú kétszerese. Közönség: Nem, nem. Hosszú csak egy int. Attól függ, hogy az építészet előtt a [nem hallható] és int, hogy az azonos méretű. [Nem hallható]. SPEAKER 1: Tehát egy hosszú és egy int ugyanaz. Majd egy hosszú, hosszú kétszerese az int. Cool. És akkor, mi az utolsó típus? Közönség: Pointer. SPEAKER 1: Igen, így megtudtuk, egy kicsit a mutatók. És függetlenül attól, hogy mi az a mutató rámutatva hogy-- ez lehet egy char csillag vagy egy int star-- ez mindig 4 bájt a mutató. Kérdések róla? Igen? KÖZÖNSÉG: [nem hallható]? SPEAKER 1: Tehát egy hosszú és egy int vannak ugyanaz ebben CS50 készülék. 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 a 32 bit? SPEAKER 1: 32 bit, igen. Közönség: így [nem hallható]? SPEAKER 1: Igen, ha nem kifejezetten azt mondják, te kell vállalnia a 32 bit. Közönség: Nem mondanám, hogy valami mint feltételezve építészet, mint a készülék. 64 bit, az egyetlen dolog, ami változás long és a mutatók. Mindketten [nem hallható]. SPEAKER 1: Igen? Közönség: kérdés. Így az egyik gyakorlat vetélkedők, azt kérdezi egy unsigned int. Szóval hogyan lenne meghatározni egy int [nem 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: [nem hallható]. SPEAKER 1: Igaz. Egy képviselhet negatív értékeket. De hogyan csinálni? KÖZÖNSÉG: [nem hallható]. SPEAKER 1: Igen, lement 1 bit, hogy képviselje a jel. Az aláírt már egy kicsit, hogy a képviseli a jel. És aláírás csak az összes pozitív. Közönség: OK. Szóval azt mondod, hogy a kettős az 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ó egy hosszú, hosszú [nem hallható]? SPEAKER 1: Tehát a kérdés az, hogy hogyan működik A mutató egy hosszú long-- 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: [nem hallható]. SPEAKER 1: Igen, tehát a mutató csak egy memóriahely. Így nem számít, hogy mennyi helyet Ez a mutató mutat. Csak szüksége van 4 byte nyomon követni Az, hogy a memória hely. Egyéb kérdés? Cool. Tehát az utolsó dolog, amit szabványos kimenet. Akkor használja őket gyakran elég, hogy vissza tud emlékezni. De ez az, amikor az általunk használt printf, például. És mi van ezeknek a helyőrzők hogy hívták formátum 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 a mi CS50 próbáld meg használni százalék i. Százalék F úszó. Százalék ld hosszú, hosszú és százalék s karakterlánc. Hasonlóképpen, mi már egy pár ezen szekvenciák. Például backslash n új sor. Ez csak az, amikor a formázás A kódot nyomtatott f. Igen? Közönség: Milyen százalék D? SPEAKER 1: Tehát a kérdés az, ami százalékos D? Százalék d a ints. Százalék d és százalék én ugyanaz. Közönség: Mi a különbség a backslash n és backslash r? SPEAKER 1: Tehát a kérdés az, ami a különbség a holtjáték n és holtjáték r? Azt hiszem, backslash r fektettünk-- 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 menj vissza a sor elejére akkor nyomtathat több dolgot, felülírja a dolog, hogy ez már [Nem hallható]. Mivel n valóban megy egy új vonal és megy [nem hallható]. SPEAKER 1: Nos, bármilyen egyéb kérdés? Rendben. Fogom kézzel le kell Dan, aki a jövőben is. [Taps] DAN: Rendicsek. Így fogok beszélni egy 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 elindulás A casting, ami csak egy módja kezelésére értéke, mint egy bizonyos típusú értéke egy másik típusú. Így meg tudjuk csinálni ezt a karakterről ints, úszik ints, és hosszú long megkétszereződik. Mindezek a dolgok lehet használni, mint módokon kezelésének néhány számérték mínusz char néhány más számérték. Tehát vannak problémák 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. Azt szorozd meg 10,000. És akkor nyomtassa ki, mint egy int. Mit jelent ez a teljesítmény? 10,000 alkalommal 1.31. Így 13,000, ez a becslés? Közönség: Azt hiszem, 10.000. DAN: Szóval azt megszorozzák 10.000 mielőtt én öntése. Közönség: Oh. Nem létezik az egyik 9 és néhány 0. számok? DAN: Lehet, hogy valami furcsa számjegy. Így van, ez 1,3-szer 10.000. Szóval ez 13.000. És ez az extra weird-- Közönség: 13,100. DAN: 13,100. Köszönöm, Rob. És ez az extra weirdness-- ez 9,9-- egyszerűen azért, mert ez a casting végül lefelé kerekítve, ahol nem kellett volna. Igen. Közönség: Az öntési történik után valami mást? DAN: Szóval, mert van ez a nyomtatott, az teszi ezt szorzás előtt teszi ezt öntés. KÖZÖNSÉG: [nem hallható]. DAN: Azt hiszem, ez az első öntött, Igen, ami 10.000. Van még valami? Cool. Szóval ez a 13.099. Miért történik ez? Pontatlanság. Úszók nem tökéletes. Ők csak a számoknak a egyes számjegyek száma. Tehát, ha ki kell nyomtatni 8 sig füge ez úszó, kapunk egyfajta 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 a legközelebb 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ó elől. Aztán keresünk mi az egész szám. Feltehetően ez szám egy-négy. Ez az, amit kérünk. Szóval nem egy kapcsoló a változó nevét. Akkor létre esetekben lehetséges értékek lehetne. Tehát ha az egyik, azt mondják, hogy ez alacsony. És akkor szünet, hogy ki A kapcsoló feltétel úgy ne folytasd. A következő case-- így az esetben két és eset three-- ha ez esetben a két csak esik le a az első sorban a kód azt látja, mint a az esetben három, amíg nem találkozik egy break. Így az oka annak, hogy ha az egyik, hogy csak nyomtatott alacsony, mert én ezt szünet van. Ha, mondjuk, figyelmen kívül hagyta ezt break-- ha én dobta ezt breakaway-- ez nyomtatni alacsony, és akkor ez nyomtatni középső, és akkor lenne megtörni. Tehát szünetek fontos részét kapcsoló feltételek és kellene lennie. Olyan esetek, amelyek nem szerepelnek kifejezetten kezeli az alapértelmezett esetben a kapcsolót, és meg kell hozza. Közönség: Tehát 1, 2, 3, és a 4. lenne n? DAN: Értékek az n lehet. Igen. Igen? Közönség: Tehát, ha van hogy [nem hallható]? DAN: Azt nyomtatni alacsony, majd a ez nyomtatni középső, és akkor szakadna. Közönség: Miért lenne kinyomtatni közép ha [nem hallható]? DAN: Tehát mindent az ügy előtt egy kis szünetet alá esik. Tehát ha az egyik nyomtatott alatta eset egy mint ez a következő nyomtatás. 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, igaz? Van ennek értelme? Igen. KÖZÖNSÉG: [nem hallható]? DAN: Igen, az esetben két fog nyomtatni középső, majd szünet. KÖZÖNSÉG: [nem hallható]? DAN: Azt hiszem, minden? Milyen más adattípusok tud átkapcsolás? Közönség: válthat bármely adattípusok. De ez csak azt jelenti, semmi több, mint karakter és ints és ilyesmi, mert ha áttérnek a mutató hogy nem igazán van értelme, átkapcsolás terhelések, ha még mondjuk ezt teszed, mert a lebegőpontos A precíziós, amit nem igazán akarom, hogy egyébként. Tehát nagyon sok, csak ints és karakter és ilyesmi. DAN: Igen, ha van kifejezett értékeket, hogy tudod, azt hiszem, lehet hogy a kapcsoló valóban hasznos. Jó? OK. Köre a tartomány, hogy a bejelentett változó kiterjed. Tehát ebben a kis kódrészletet van, lenne teljes a hibák. És az ok, hogy én kijelentette, ez int i hatályán belül ez a for ciklus. Aztán próbálom hivatkozást i kívül, hogy hurok hatály. 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ójeleket. É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 vonósok, hogy van véget kell A backslash nulla, ami csak C egyezmény. Úgy hívják a NULL terminátor. És NULL-- tőke N, tőke U, a tőke L, tőke L-- nem ugyanaz, mint a NULL terminátor. Ez a mutató. Ez a karaktert. Ezek nagyon különböző. Emlékszem rá. Ez lesz a kvíz, valószínűleg. Nem láttam a kvíz. Igen? Közönség: Tehát NULL, mondjuk, a mutató? DAN: Igen. Közönség: Mit [nem hallható]? DAN: Ha, mondjuk, a 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 mert NULL egy szép good-- ez, egyfajta, a szemét érték. Ez egy nulla amennyire mutatók menni. Amikor hívja a funkció, amely visszaadja a mutató. Fogsz szeretné ellenőrizni, hogy arról, hogy ez a mutató nem NULL mert NULL nagyon gyakori. Ez a fajta szemetet visszatérés. Tehát, ha valami nem megy rendben, csak vissza NULL helyette. KÖZÖNSÉG: [nem hallható]? DAN: Igen, és hogy van ez. KÖZÖNSÉG: [nem hallható]? DAN: Helyesírás, mint ez. Ez a NULL terminátor. Ez kisbetűs N-U-L-L, ha te helyesírási. Közönség: Én csak elmentem vissza, és teszteltük. És ha megpróbálod, hogy a lebegőpontos érték egy kapcsolóval, akkor kiabálni veled mondván állítás igényel kifejezés Az egész típusú. DAN: Tessék. De igen, mi volt a kérdés? KÖZÖNSÉG: [nem hallható]? DAN: Szóval főváros N, tőke U, a tőke L, a tőke L egy valódi c dolog. Ez a NULL pointer és akarat csak 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 testesítik meg ugyanazt a funkciót mint [nem hallható]? Közönség: Szóval azt utalva visszatérő karakter max a getchar, vagy bármi is legyen az? Közönség: Igen. Közönség: Igen, tehát az általános kifejezés azokat a dolgokat vannak őrszem értékeket. Szóval, mint visszatérő int max a GetInt és char Max a getchar, ez kellett volna lennie, minden rendben, ha ezek a dolgok visszatérnek hozzánk, Valami nem stimmel. A mutatók, csak éppen van ez sentinel értéket, hogy mindenki egyetért a. És ez a dolog, amit vissza amikor a dolgok rosszul mennek. Így char max, amit használ hogy képviselje valami mint NULL vagy getchar. Közönség: Tehát, ha tesztelés getchar, is csak NULLA? Lenne különbséget tenni? DAN: Lehet nem csak ellenőrizni NULL. Azt kell ellenőrizni char max, mert a visszatérési értéke a függvény a karakter nem a mutató. Igen? Közönség: Ez a kérdés arra a karakterlánc hosszát. Ez azt tartalmazza a NULL karakter? DAN: Nem És ez tulajdonképpen hogyan string-hossz tudja megállítani, mert megy át a tömb karakterekből ig látja a NULL karaktert. És akkor ez olyan, mint az összes jobb, kész vagyok. KÖZÖNSÉG: [nem hallható] öt? DAN: Hello lenne öt. Aha. Tehát tömbök folytonos blokk memória. Ők azonnali hozzáférést azzal az neve a tömb, majd a göndör nadrágtartó, amit index akarsz menni hogy, ők indexe nulla és a hossza a tömb mínusz 1. És ők által bejelentett típusát dolog, hogy te tárolja a tömb, a nevét, a tömb, majd függetlenül a méret az, 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. Így lehet megadni ezt inkább, mint, mondjuk, char, függetlenül a nevét 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 kapcsos zárójel. Ez azt is dolgozik, mint a nyilatkozat. KÖZÖNSÉG: [nem hallható]? DAN: Akkor meg kell, hogy A méret már. KÖZÖNSÉG: [nem hallható]? DAN: Igen. Rendicsek. Parancssori érvek egy módja szerzés bemenet a felhasználót érveket a fő. Legfontosabb két argumentuma. A számos érv, amelynek a haladt át a parancssort és a húr vektor vagy egy string tömb az összes érvet. Tehát, ha én, mondjuk, az úgynevezett a funkció, mint például a a pont ki 1 hely, 2. hely, három, argc lenne 4. És az 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 egyik argb, az utolsó elem a NULL pointer. Ez argc plusz 1. Tehát abban az esetben, hogy azt mondtam, hogy lenne az argv 0 egy pont ki. argv 1. 1. argv2 2. argv 3 3. argv 4, amely egy nagyobb, mint argc volnának. És ez a NULL pointer. Igen. És ez azért van, mert a sztring a char csillag egy mutató. Tehát azt, hogy legyen az azonos típusú. Igen? Közönség: Két kérdés. Tehát az egyik, mi a különbség ebben és más getString mint egyféle a felhasználói motor? És két, igaz tárolt a legutóbbi memória? Szóval, mint, getString lenne legyen [nem hallható]? DAN: Hol van tárolva? Nem tudom, hol van tárolva. Közönség: Szóval, tényleg, tudod, hogy bármilyen működik hívod érveit vannak tárolva a verem? Tehát argc és argv érvek a fő és ezek a stack, vagy tényleg éppen mit gondol a kezdetét a halom. Mi volt a másik rész a kérdés? Közönség: Szóval mi a [nem hallható]? DAN: Igen, csak másképp A szerzés a felhasználóhoz. Ez az egy kicsit hatékonyabb és ez praktikusabb szkripteket, mert egyszerűen csak át paraméterként a fő funkció ahelyett, hogy várjon a felhasználók, ha nincs számára. Közönség: És igen, kap húrok lenne [nem hallható]. Ez tárolja a cucc amire szüksége van. DAN: Igen? KÖZÖNSÉG: [nem hallható]? DAN: Igen, ARGV 0 mindig tartalmazza a pont perjel a függvény hívás. Igen? KÖZÖNSÉG: [nem hallható]? DAN: Igen, az egyes érvek véget ért a NULL karaktert, mert vannak húrok. KÖZÖNSÉG: [nem hallható]? DAN: Igen, ARGV argc egy NULL mutató. KÖZÖNSÉG: [nem hallható]? DAN: Ó, igen. Ja, bocs. Közönség: így [nem hallható]? DAN: A kérdés az, ha már a parancssori pont perjel a pont ki 1, 2, lenne a száma parancssori érvek két vagy lenne három? Közönség: Azt hiszem, nem igazán számít. Azt szokták mondani, ó, te nem felelt meg bármilyen parancssori argumentumok amikor, Nyilvánvaló, hogy az úgynevezett funkció. Szóval inkább hangosan kizárni a funkció a parancssorból érveket annak ellenére, hogy tartalmazza argv. DAN: De ha ez volt a test-- yeah-- és akkor is, ha valamit mondani mint argc = 3, te biztonságban áll. Igen? KÖZÖNSÉG: [nem hallható]? DAN: Azt hiszem, ha ahelyett, hogy hívás ez A argc és vonós argv konzolok de tartotta az azonos típusú és hívott őket, valami más, mint a és b, akkor még mindig működik? És ez akkor is működik, akkor csak-- használata helyett argc-- akkor használja a és b. Igen? KÖZÖNSÉG: [nem hallható]? DAN: A kérdés tehát az, getString fogja tárolni a memória a halom mert getString char *. Tárolja memória a kupac, mert kéri most malloc belül a tényleges végrehajtása getString. OK, mozgó. Biztonság. Tehát, hogy valóban biztonságos, akkor hivatkozhat nincs egy és hagyja, hogy senki a hozzáférést minden olyan a tájékoztatás, ezért mindenki építi a saját gép, saját operációs rendszer, mind a programok a semmiből, és természetesen nem csatlakozik semmilyen egyéb gépek az interneten keresztül. Így számítógépek bizonytalan. Tényleg. Bíznunk kell más emberek. És az ötlet a biztonság az, hogy te vagy megpróbálta korlátozni a mennyiségét bizalom, hogy szükség van. És az egyik azt jelenti, hogy az keresztül kriptográfia. Kriptográfia, lényegében, mi titkait. Néha meg kell, hogy adja át a titkot mentén a, mondjuk, az interneten, vagy más dolog. És mi nem akarjuk az embereket tudni, hogy ezeket a titkokat. Így titkosítja a titkainkat egy út hogy reméljük, senki nem tudja kitalálni. Tehát used-- keresztül ennek során class-- dolgok, mint Caesar titkosítást és [Nem hallható], amelyek mind nagyon, nagyon bizonytalan módon titkosítja dolgok. Ők könnyű kitalálni, mit és mit titkok. A valódi világ használ sokkal több bonyolult titkosítási rendszerek. És nem fog bele 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 hasznosak GDB vannak szünet, amit át vagy a vonal szám, a függvény neve, lényegében ahol a kódban le akarja állítani, és képesnek kell lennie, hogy átvegye az irányítást. Print vesz egy változó és kiírja bármi, hogy a változó van, 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, amely így valóban futtatni a kódot. Folytassa veszi a szükséges lépéseket hogy eljusson a következő töréspontot. És sok-sok más. Nézni őket. Ők nagy. Igen? KÖZÖNSÉG: [nem hallható]? DAN: Igen, ami a debugger. Így a debugger egy olyan program, amely lehetővé teszi, hogy hibát a programban. Ez nem egy olyan program, amely megtalálja a hibákat te, bár az nagyszerű lenne. És az utolsó számomra a keresés. Tehát a fajta keresés, hogy beszéltünk körülbelül ebben az osztályban lineáris keresés, amely csak az, hogy nézd át az egyes eleme a keresési teret, egy elem egy időben, amíg meg nem találja, amit keres, vagy amíg el nem éri a végén a keresési teret, ahol pont azt mondod, hogy nem talált az elem, amit keresett. És ez tart a legjobb konstans időben, ami 0 1 és legrosszabb esetben lineáris idő, ami 0 n. Bináris keresés, amelynek szüksége van mocskos elemekkel. Elmész a közepén a elemek, nézd meg a elemet keres nagyobb vagy kisebb, mint az elem hogy te vagy a közepén. Ez ez nagyobb, akkor azt mondják, hogy az alsó a keresési tér a jelenlegi helyén, a középső, és indítsa újra a folyamatot. Ha ez kisebb, akkor nézd mondjuk hogy a-- igen, mi a helyzet? KÖZÖNSÉG: [nem hallható]? DAN: Igen. Bármilyen fajta, hogy a már tanított az osztály tisztességes játék a teszt. [Nevetés] DAN: És az a tény, hogy már nem volt hogy nem ez az a probléma halmaz, ez fair játék a teszt. Közönség: Nem mehetnénk át azt hogyan hogy-- DAN: Ez lesz ment át. Hangszóró 2: Az aktuális kód [Nem hallható] van study.cs50.net. Tehát, ha megnézi a gyakorlat probléma Az Egyesítés fajta lapja study.cs50.net van a kód végrehajtási merge sort. Szóval nem kell végrehajtani magad ma este. De győződj meg róla, hogy megértette azt 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 a merge sort végrehajtás. De győződj meg róla, hogy megértette azt nem csak memorizálni az 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 fajta 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, akkor meg kell érteni, hogy ahhoz, hogy tudja, hogyan fog hogy módosítja ezt a tömböt. DAN: Ennyi nekem. [Taps] LUCAS: Hey mindenki. A nevem Lucas. Fogok beszélni rekurzió, minden a fajta, amit megtanultunk, és a kicsit minden mutató. OK? Tehát először is, rekurzió. Mit jelent az, hogy A 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épen belül a kép, és így tovább. Így például, akkor lesz-- mint Dan hogy beszélt a bináris keresés. Az egyik módja, amelyben bináris keresés rekurzív az a tény, hogy maga próbál találni egy számot. Szóval megy a közepén. És akkor ellenőrizze, hogy a számokat ott a bal és a jobb. És akkor, ha megtudja a szám lesz a bal oldalon, ez ugyanaz a dolog, mint csinál a keresést újra, 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 szeretnék választani a számokat 1-től n. Én észre, hogy az összeg az n szám n plusz n mínusz 1-től 1. De aztán, ha megnézi n mínusz 1 plusz n mínusz 2 plusz 1, hogy ugyanaz a dolog, mint összeadásával számok n-ig mínusz 1. Tehát azt mondhatom, az összege azonos összeg egyenlő n összege plusz mínusz 1 n. Van ennek értelme? És azt is volna valami mást úgynevezett alapeset, amely szerint a számok összege legfeljebb 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őrizze, ha n kevesebb vagy egyenlő nullával. Tehát, ha ez kisebb, vagy egyenlő nullával, én vissza nulla, ami a mi alapeset. Egyébként én is csak vissza az n + a számok összege a egy-n mínusz egy. Értelme? OK. Szóval, itt van, amit úgy néz ki. Van összege 2értéke 2 plusz 1 összege. És néhány 1 1 plusz a összege 0, ami 0. Értelme? Tehát, ha megnézzük a stack 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 = 2, valamint az összeg az egy. Szóval hozzá összege 1 és a verem. É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, első, megy vissza 0-ra. Majd válassza összege 1. Akkor összeg 1 fog vissza 1 összefoglalva 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 válogatás. Akkor miért válogatás fontos, először? Miért érdekel? Valaki? Adj nekem egy példát? Igen? KÖZÖNSÉG: [nem hallható]. LUCAS: Ja, OK. Így kereshet hatékonyabban. Ez egy jó út. Tehát, például, van egy csomó dolgok, valójában az életünkben, hogy vannak rendezve. Például a szótárak. Nagyon fontos, hogy az összes szavak valami 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 egy szótár, amelyben a szavak a véletlenszerű sorrendben. Akkor meg kell nézni, nagyon sok, minden egyes szót, amíg meg nem találja a szó, amit keresel. Ha a Facebook is, amikor nézel a barátok, akkor fogja látni, hogy a Facebook tegye a közelebb barátja tetején azok hogy ne beszélj 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 Close nekik. Így szervezése adatokat. Szintén Pokemon. Tehát láthatjuk, hogy minden Pokemons vannak számok. És ez, mint egy egyszerű való hozzáférést, az adatok. Közönség: elérése Pokemon. LUCAS: Igen. KÖZÖNSÉG: [nem hallható]. LUCAS: Igen. OK, így kiválasztás sort. Selection sort fog ki a legkisebb osztályozatlan értéke lista minden idő minden iterációban. Ez olyan, mint az a fajta, amit csinál a fejedben, amikor akarsz rendezni egy listát a kezét. Alapvetően minden, amit csinál, hogy néz a legkisebb szám. Betette a rendezett lista. És akkor keresse meg a következő legkisebb szám. És akkor is csinálom ezt, és így tovább. Tehát választék fajta alapvetően meg válassza ki minden egyes alkalommal, amikor a legkisebb osztályozatlan érték. Tedd a végén a rendezve része a listán. És ne csinálja. Nézzük gyorsan, hogy mi ez úgy néz ki, mint a. Tehát itt van a válogatott és rendezetlen listát. Így a rendezett lista, ez kezdetben üres. És akkor megyek ki a legkisebb szám van, amely 2. Szóval, hogy a 2-es számot, és tettem az első a listán. És akkor keresse meg a következő kisebb elem, amely 3. Szóval tedd a végén A rendezett lista. És akkor én is ezt teszem. Találom a 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 elemet. Szóval ez már rendezve. OK, így beillesztés sort. Beillesztés sort fogsz szintén hogy a dolog, amelyek egy rendezett és egy rendezetlen listát. Az egyetlen dolog az, hogy minden alkalommal, te hozzá egy elemet a rendezett lista, akkor csak vedd az elem, amely előtt van a rendezetlen listát. És akkor fogsz találni, amit helyzetben kell lennie, a rendezett része a listán. Lássuk, mi van ez így ez több értelme van. Tehát kezdetben például próbálom hogy helyezze be a hármas szám a rendezett része a lista. Így a lista nincs semmi. Szóval csak fel a 3-as szám. Azt akarom, hogy a szám 5 a rendezett része a listán. Szóval nézd meg a 5-ös szám. Úgy vettem észre, hogy ez több mint 3. Tehát tudom, hogy meg kell lennie a 3. Így tettem 3 és 5. Akkor azt akarom, hogy helyezze be a 2-es szám. Úgy vettem észre, hogy a 2-es szám valóban tart majd mind a 3 és az 5. Szóval tényleg ki kell rakni az egészet a utat a lista elején. Így azt kell, olyan, tolja a elemek a rendezett lista, így tudok hogy helyet adjon 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 kellene lehet 3 és 5 közötti. Aztán tedd oda és váltás az összes többi elem. Értelme? Bubble Sort. Így buborék rendezés alapvetően mire vagy fog csi hívjuk buborék sort, mert megy át a list-- ez valóban jobb, ha én csak azt mutatják, tetszik Ez-- és fogsz összehasonlítása szomszédos számokat. És fogsz swap helyzetben, ha ők nem a megfelelő sorrendben. Tehát alapvetően, hogy mi fog történik itt, például, Van 8 és 6. Tudod, hogy a rendezett sorrendben fog valóban a 6. és az 5., ugye? Így fogsz cserélni a megrendeléseket. Aztán látom a 8 és 4 itt. És én nem ugyanaz a dolog. Én cserélni újra. És végül, a 2. és a 8.. Azt is cserélni őket. Úgy hívják Bubble Rendezés mert miután Minden ilyen ismétléseket, valójában, a legnagyobb számú a listán lesz minden a módja annak, hogy a végén a lista. Van ennek értelme? Mert megtartja csere azt és mozgatása jobbra. OK, így ez a második iteráció. Ez ugyanaz a dolog. Megteszek egy csere és akkor az utolsó. Azt, hogy nincs swap és a lista. Így Bubble Sort, mi alapvetően folyamatosan megy át a listát, és csere a dolgokat, amíg vettem észre, hogy én nem tettem bármely swap csinálja iteráció, ami azt jelenti, hogy a lista már rendezett. Értelme? Beszéljünk egy kicsit a működési idő. Szóval srácok emlékszik Big O, Omega és Theta? Igen? OK, mi a Big O, először is? KÖZÖNSÉG: [nem hallható]. LUCAS: Igen, úgy hívják a legrosszabb runtime, ami csak azt jelenti, hogy hogy mennyit vár a program hogy futtatni. Mint tekintve of-- ebben case-- n. Az elemek száma a lista a legrosszabb esetben. Mint, a lehető legrosszabb eset. Tehát Bubble Sort, például Van nagy O n tér. Miért van ez? Miért Bubble Rendezés Big O n tér? KÖZÖNSÉG: [nem hallható]. LUCAS: Igen, a legrosszabb esetben lesz hogy én is megteszi n iterációt. Tehát az egyes ismétlések fog hozza a legnagyobb elem a végéig a lista. Tehát a legrosszabb eset az, hogy én már 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égyzetes mert n-szer n. Ezután kiválasztás sort is n tér mert minden egyes iteráció, azt kell nézd meg minden egyes elem a listán. És keresse meg 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. Beszúrási sort is n tér mert a legrosszabb forgatókönyv legyen, egy, azt kell beszúrni n számok, igaz? Így már tudom, hogy fogok hogy n iterációt. De minden egyes ilyen számokat, ha lenne hogy nézd meg az összes számot a rendezett listát, és tedd az utat az első, hogy az n négyzet lesz mert ez lesz n-szer n újra. Értelme? Mi a omega? KÖZÖNSÉG: [nem hallható]. LUCAS: Ez a legjobb esetben. Tehát ez olyan, mint, hogy sok alkalommal válogatás, a legjobb esetben is Ha a lista már rendezett. Szóval nem igazán van hogy semmit. Bubble rendezése a legjobb esetben n. Nem tudjátok miért? KÖZÖNSÉG: [nem hallható]. LUCAS: Ja, ha nyomon követheti hogy az adatok adag volt olyan swap vagy Nem, ha van valami, mint a beállított igaz, ha volt egy iterációs, ha a lista már rendezett, alapvetően, mi fog történni, én megyek próbálja cserélni minden két szomszédos elemeket. Fogom látni, hogy nincs swap. És én csak vissza azonnal. Tehát ez azt jelenti, hogy csak meg kellett megy át a lista egy időben. Szóval n, mert úgy nézek ki A n eleme. Miért kiválasztás sort n téren? Igen, akkor is, ha a lista, a minden iterációs kiválasztás sort, én ki kell választani a legkisebb elem. Ez azt jelenti, hogy van, hogy megkeresse egyáltalán az elemeket az osztályozatlan listája és találja a minimum Minden iteráció. Van ennek értelme? És beillesztés kard n, mert a Amennyiben Próbálom beilleszteni a számát és az összes szám, amikor próbálja beilleszteni őket, látom, hogy van a megfelelő pozícióba. Nem kell, hogy menjen ellenőrizze az összes többi számok a rendezetlen listát. Szóval ezért nem lesz n. Értelme? És mi a theta? KÖZÖNSÉG: [nem hallható]. LUCAS: Mi, bocs? Mondd még egyszer. KÖZÖNSÉG: [nem hallható]. LUCAS: Pontosan. Tehát látható, hogy csak a kiválasztás tárolt Merge sort is thetas. És ez azért van, mert már csak theta ha mind Big O és az Omega azonos. OK. És végül, merge sort van log n. És akkor, ahogy Dan azt mondta, Merge sort olyan, mint az azonos módon 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íteni őket. Srácok emlékszel, ugye? OK, ahogy ő mondta. OK, mutatók. Tehát mi is az a mutató? KÖZÖNSÉG: [nem hallható]. LUCAS: Egy cím. OK. Tudom, hogy David mutat egy csomó videók Muci és a dolgok mutató egymást. De szeretem azt hinni, a mutatók mivel csak egy címet. Tehát ez egy változót, ami folyik tárolni egy címet. Tehát csak ez a speciális változó hogy a négy bájt hosszú. Ne feledje, hogy a mutató a bármi mindig négy bájt hosszú a 32-bites gép így a helyzet a készülék. És ez csak az a hely Egy változó belsejébe. OK, így van ez a memória, alapvetően. Így minden 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ó Ezeknek a címeknek. Szóval, hogy miért is fogjuk használni mutatók is ha kell emlékezni a helyre hogy egy adott változó egy memóriát. És ti ne feledjük, hogy egy ilyen ügy volt, ha van egy funkció ha én valóban szeretném, ha csere a valós számok, én valójában kell küldeni a mutató. Nem a változó. Srácok ne feledje, hogy? A különbség between-- mi a neve? Hívás érték és hívás hivatkozva, igaz? OK, igen. Akkor hívd érték. Ha csak küldj egy változót működik csak most küld 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 ténylegesen készít egy másolatot. És hívja hivatkozással azt jelenti, hogy Én tulajdonképpen másolatának megküldésével az mutatót a változó. Tehát ez azt jelenti, hogy én küldöm a elhelyezése változtatható. Így értelme van a helye változó, amikor hívom a funkció A mutatók, én vagyok képes valójában módosítsa az adatokat, hogy volt a fő. Értelme? Bár a mutató egy másolat, a mutató még mindig a valódi címét a változó, hogy meg akarom változtatni. Értelme? Így teremt 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ármi változó írja, hogy volt. Tehát itt a csillag, például, ez a mutató és egy egész szám. És akkor char csillag a mutató char csillag és így tovább. Igen? Közönség: Mi van, ha a mutató az n csillag x. Tudom, hogy létrehoz egy mutatót x. Ez azt is kijelentik, x egy egész szám? LUCAS: OK, így ha mondjuk n csillag x, te nem hoz létre egy mutatót a változó x. Te létre mutató nevű x. KÖZÖNSÉG: [nem hallható]. LUCAS: Tehát amikor azt mondom, n csillag x, vagyok mondván, hé, a memóriában, megyek kap egy ilyen három doboz. És én fogom azt mondani, hogy az 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, hogy azért van, mert 4 byte 32-bit. És a gépeket, amelyek 64 bites valójában Van mutatók címek amelyek 64 bit hosszú. Tehát 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-üzemeltetők nektek kell emlékezni. Az első jel. A második a csillag. Ne tévesszen meg, hogy a csillag, és ez a csillag, mert ne feledjük, hogy, a Ebben az esetben, akkor n csillag. Olyan, mint egy egész együtt. Nincs n tér csillag. Tehát ez azt jelenti, hogy ez a típus. Ne feledje, hogy ha van a változó csillag, akkor beszél a típusát. Ha már csak csillag, majd a a változó nevét, azt jelenti, hogy te dereferencing a mutató, 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. Tehát azt mondom a tanítványaimnak, hogy ha van csillag, meg kell gondolni, hogy ez az a rövidítése tartalmának. Tehát, ha van egy mutató, és do csillag mutató, ez a tartalmát a mutató. Szóval megy bármi ez mutat és nézd meg az állandó tartalom. És a jel ugyanaz dolog, mint címe. Tehát ha van egy változó egy-- mint, mondjuk azt mondják, hogy én nem int egy egyenlő 3-- ha azt akarom, hogy megtalálják a címét, hogy a változó a memória, én csak nem jel a. Szóval címét. Értelme? Tehát itt egy példa. Ez hiányzik, int b és int c. Így int a = 3 azt jelenti, hogy Én megyek a memóriába. És én fogom találni a nyílás és tedd a 3-as szám van. Aztán int b értéke 4. Megyek nem ugyanaz a dolog. Menj a memória és hozzádni egy számot 4. az egyik doboz. És int értéke 5. Találj egy dobozt, és tesz egy 5-ös szám. Szóval mi ez a vonal csinálsz? n csillag pa egyenlő jel a. Tehát először is, n csillag pa. Mit csinál? KÖZÖNSÉG: [nem hallható]. LUCAS: Igen, n csillag pa, első, kijelenti mutató nevű pa. És akkor ez értékét hozzárendeljük Ez a mutató, hogy a címét. Így jel a. Aztán, ha mégis csillag pb, mi az a csillag pb? Ó, bocsánat. Ez is hiányzik. n csillag pb. Úgy értem, csillag pc. Annyira sajnálom. Ez ugyanaz a dolog. De most jól vagyok ar létre egy mutatót B és 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, jelölésből pa, te tényleg fog lásd címeit. OK? Igen? KÖZÖNSÉG: [nem hallható]? LUCAS: Igen, mutató egy címet. 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? Egyéb kérdés? OK. Tehát mutatók és tömbök. Ne feledje, hogy amikor én int tömb 3, alapvetően, hogy mit csinálok, hogy én vagyok, kedves Az, kijelentve, a mutató. Így sor olyan, mint egy mutató a meghatározott helyre a memóriában, ahol én 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 teremt három nyílások a memóriában. Szóval csak meg három slot a memóriában. Tehát, ha mégis, akkor egy csillag tömb, azt 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 akkor, ha én csillag tömb plusz 1, ez ugyanaz, mint csinál tömb tartórudakhoz egyik, ami csak azt jelenti, hogy megy a az a hely, hogy ez mutatva. És akkor a plusz 1 teszi nekem váltani egy pozíció. Szóval megy ez a helyzet, valójában, és tedd a két szám. És végül, amikor én tömb plusz 2, megyek, ahol tömb mutatna. Aztán menjen memória blokkokat. Aztán fel a hármas szám 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 2 sor? 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ép programozók szívesebben indítanak számolás 0. Kettő azért van, mert ha nem tömb 0, ez ugyanaz, mint csinál tömb plusz 0, ami azt jelenti, hogy megy a ezt az álláspontot, és én nem hagyja minden memória blokkokat. Szóval nem mozog semmilyen memória blokkokat. Igen? KÖZÖNSÉG: [nem hallható]? LUCAS: Szóval ő azt kérdezi, mi az, 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 létrehozza 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ó a fajta számok az összes a változókat, amit bejelentett. És teremt helyet minden őket a verem. Tehát az összes változót fog 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áskor. Tehát ez azt jelenti, hogy a számítógép tudni, hogy az összes ilyen változó előre. Nem kell tudni, hogy milyen értéket fogsz tenni őket. De tudni kell, hogyan sok memóriát amire szüksége van. De most tegyük fel, hogy, például, te létre egy tömb, vagy egy karakterlánc, szedi a felhasználó elől. Nem tudod, milyen hosszú a húr lesz, például. Szóval nem tudom pontosan, hogy hány memória blokkok kiosztani, igaz? Így nem igazán van értelme a hogy ezt mondja fel 100 karakter. És akkor mi van, ha a felhasználó azt írja 150? Fogsz kell csavarni. Tehát alapvetően, akkor nem biztos, hogy milyen sok memória kell kiosztani amikor fordítod a programot. Csak azt tudom, hogy a működési idő. Szóval ezért van a kupac. Így a kupac megy, hogy a memória hogy te felosztása során a A program időtartama fut. Tehát alapvetően, ha nem malloc, amit teszel felosztásának memóriába runtime, ami azt jelenti, hogy te döntés abban a pillanatban, hogy kell, hogy a memória. Szóval, amikor azt kiutalták. Van ennek értelme? Úgy emlékszem, a verem változó jönnek létre fordításkor. És akkor a halom is változó létrehozott kirovó a malloc, például. KÖZÖNSÉG: [nem hallható]? LUCAS: Tehát getString van Felhívom malloc. Hadd beszéljünk malloc, és Elmagyarázom getString. Így malloc ugyanaz a dolog a memória kiosztás. Így fog kiosztani memóriát a kupac. És ez vissza fog térni a mutatót ha ez a memória osztották meg. Tehát, ha csi itt example-- n csillag mutató. Aztán mutató értéke malloc mérete inch-szer 10. Hozok létre mutató. És akkor én hozzárendelése hogy mutatót értékét a mutató az malloc ad nekem. Szóval kérlek malloc lehet lefoglalni hely, 10 egész. Ez az, amit mond. És malloc ad nekem vissza mutatót arra a helyre. Értelme? OK. Én pedig getString van, alapvetően, csinál egy hívja malloc így kiosztani memória futás közben. Mindig emlékezni, hogy ellenőrizze a null mert malloc fog visszatérni null ha nem tud memóriát lefoglalni. Tegyük fel, hogy kér egy nevetséges memória mennyisége. A számítógép nem lesz képes lefoglalni, hogy sok. Tehát malloc csak fog vissza null. Tehát, mindig emlékezni, hogy ellenőrizze, hogy a mutató, hogy van a malloc van null vagy nem, mert ha igen, akkor lehet, hogy kell dereferencing a mutató és mellékhatások okozása hibák. É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 mind nekem. Sajnálom, Rob. Köszönöm. [Taps] LUCAS: Egy utolsó kérdés mielőtt Rob jön? Nem? Igen? Közönség: Nem láttam ezt az interneten. Már feltöltötte már? LUCAS: Azt hiszem, Dave feltöltése hamarosan. DAVE: Nem lesz felkerül. LUCAS: Nem lesz az interneten. 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 van egy kultúra malloc, akkor kell egy kultúra szabad miután abbahagyja a változót. Tehát malloc és a free mindig együtt. Legjobb barátok. Igen. Rob? ROB: Megyek gyorsan. És azt is a videó kerül fel. Nekem van a mikrofon be. OK, így hetente öt dolog. Az első dolog, amit meg a verem. Úgy emlékszem, hogy már csak egy halom frame per aktív funkció hívás. Majd meglátjuk, hogy a második. És ne feledje, hogy valójában mi megy Minden stack frame lesznek a lokális változók a mi funkciók az érveket, amelyeket át a mi funkciók, valamint egy pár más dolog, amit nem igazán kell aggódni. Tehát itt egy példa program, ahol, értesítés, fő az printfing a visszatérés foo értéke 4. ize csak megy vissza a értéke bar 4 vessző 6. És bár fog meg néhány helyi n változó értékét 4-szer 6. Majd vissza n. Tehát nézzük meg a stack-szerte a tényleges iteráció a program. Szóval van az alján a halom. Ne feledje, hogy a halom felnő. Tehát alján mi verem, mi Van egy halom keret fő. Amikor a program elindul, a fő mindig lesz a alján a halom. És mi van benne a mi verem keret legfontosabb? Tehát annak ellenére, hogy nem a helyi változókat a fő, mint már mondtam, mi 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 kap saját stack frame. Tehát most vagyunk belsejében a function ize. És mi kell menni Foo stack frame? Nos, foo van egy érv n. És n = 4, mert ez az, amit Fő halad a foo érvelését. Tehát most foo fog hívni bárban. Mi bár lesz benne az "stack frame? Meg x egyenlő 4 y egyenlő hat. Ez még nem minden, hogy mi lesz A stack frame mert bar is van egy helyi változót n. N fogunk egyezni a 24. Tehát most sáv fog visszatérni n. Tehát bár visszatér 24 A stack frame foo. És mivel bár most visszatér, hogy azt jelenti, hogy most felbukkanó a stack frame A sáv le a halom. Így az összes memóriát bar volt a most ki a verem. Most, ize is fog vissza 24 fő. Most, hogy ize visszatér, a memória hogy pelda a saját " verem keret is elment. És most, a fő fog hívni printf. Tehát printf is csak egy funkció. Mikor hívjuk printf, ez lesz másik verem keret a printf függvényhívás. Mit halad printf? Ez az, ami fog menni annak stack frame. Legalább, mi megy hogy százalékos én backslash n és az érvelés 24. Lehet, hogy több benne a stack frame ha printf segítségével történik, hogy bizonyos lokális változók. Nem tudjuk. De minden, hogy megy a printf verem keret. Ez lesz végre a printf. Akkor printf kész. Vissza fog térni. Végül a legfontosabb történik. Main visszatér. És akkor a program kész. Igen? Közönség: Jársz [nem hallható] érvek [nem hallható] paraméterek? ROB: Tehát van egy kis különbség között érveket és paraméterek. És valóban, a közös beszél, az emberek hajlamosak hogy csak keverjük őket minden alkalommal. De paraméterek a formális neve a dolgok. Tehát argc és argv a paramétereket a fő. Érvek az, amit valójában adja át ezek a paraméterek. Tehát amikor hívom foo 4, 4 az érvelés vagyok halad. És az n paraméter, belsejében ize, veszi a 4-es érték 4-től volt az érv. KÖZÖNSÉG: [nem hallható]? ROB: n egy lokális változó bar. n még mindig a helyi ize, de ez egy paramétert foo. Ez nem egy helyi változót. Igen? KÖZÖNSÉG: [nem hallható]? ROB: foo csak hívás bar és visszatérő bármi bar visszatér. KÖZÖNSÉG: [nem hallható]? ROB: Igen, csak hogy több verem kereteket. Igen? Közönség: Miért foo nevű előtt printf? ROB: Miért foo elé hívják printf? Így tudtam, hanem tett valamit mint int x = foo 4 majd nyomtatott x. De ahelyett, kombináltam a funkció hívja a printf érv. De figyeljük meg, 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ékelik ezt. Igen? Közönség: Mivel mindkét bar [nem hallható] érték, miért nincs [nem hallható]? ROB: Ők teljesen legyen int. Ez nem volt fogott át több fogás. Így kell lennie int bar és int foo mivel mind a két visszatérnek egészek. Void csak akkor, ha ők nem fognak vissza tényleges értékek. Igen? Közönség: Ha lenne egy vonal fölött a visszatérés, [nem hallható]? ROB: A vonal felett a visszatérés? Közönség: Igen. Mint ha nem printf és [nem hallható], lenne kinyomtatni kétszer? ROB: Tehát belsejében ize? Ha volt egy printf itt? Közönség: Igen. ROB: Tehát ha van egy printf joga itt, akkor nyomtassa ki egyszer. Mivel a hívott fél foo egyszer jobbra itt, aztán megüt a printf. Akkor hívjuk bar. És akkor foo visszatér. És ennyi. Mi mindig csak találkozunk a printf egyszer. Igen? KÖZÖNSÉG: [nem hallható] printf hívás foo mert mi vagyunk az első hívó printf aztán továbbadja az érveket. ROB: Tehát elméletileg, nem printf hívás foo? Tehát nem. Csak azért, hogy ac fog végre ezeket a dolgokat, mielőtt mi is hívja a funkció, az összes érvet a funkció kell teljesen értékelni. Szóval ez 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 az érveit értékelik. És most lehet, hogy a hívja printf. Igen? Közönség: Egy kérdés. Ha van egy üres funkciót kell van visszatérés pontosvessző? ROB: nem a visszatérés pontosvessző ha van egy void függvény. OK. Így most néhány kupac dolog. Szóval, halom, hogyan fogunk foglalkozni dinamikus memória kezelésére. És ez közvetlenül ellentmond a stack amit neveznék automatikus memória kezelése. Így a verem, akkor nem igazán van foglalkozni, hogy a lokális változók tolnak és bukkant ki minden ezeket stack keretek és minden ilyesmi. Nem kell aggódni. Ez az automatikus. Tehát a halom manuális. És a [nem 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. Akkor fogjuk csak meg, milyen x mutat 50. Nyomtassa mi x mutat, print x, majd a szabad x. Hogy van ez valójában fog kinézni 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? Szóval lesz a tetején a kupac ott. Tehát a lényeg a mi verem, mi a verem keret fő. Ez a hely a argc, ARGV, és mi Most már van egy helyi változó x, ami egy int csillag. Így megyünk iterálására a program révén. Az első dolog, amit el is a hívást malloc. Szóval, hogy a hívást a malloc. Malloc függvénye. Ez lesz, hogy egy verem keret. Mit halad malloc? Hogy fog menni a verem keret. Most haladunk mérete n, ami 4. Annak érdekében, hogy az átadott malloc. Mit malloc csinálni? Ez megragadja minket némi helyet a kupac. Így fogunk menni a kupac. És fogunk megragad 4 byte a kupac. Úgyhogy csak adni, hogy a tetszőleges címre. 0x123 Csak úgy, mintha egy címet, amely a halom. Tehát mi valójában belsejében az régió memória címen Ox123? Szemetet. Így már 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 mit ad vissza. Mi meg x egyenlő azzal, amit az visszatér. Tehát mi azt 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 megy be kell állítani egyenlő 0x123, amelyek képileg, Gyakran rajzolhat x amelynek tényleges nyíl mutat, hogy a blokk. De x csak tárolja a címet. Így most nézzük meg, hogy ha x null. Ez nem null. Azt állítani, hogy az 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 a címet? Mi tárolására 50. Szóval miután ezt a sort, ez az, amit dolgok fognak kinézni. Így most ez már nem szemét ott. Most már tudjuk, hogy a 50, hogy különös címet, mert mi meg azt, hogy az. OK? Tehát most fogunk nyomtatni f. Tehát először fogunk nyomtatni csillag x. Szóval mi a csillag x? Ismét csillag x azt jelenti, megy a dolog, hogy az x-et mutat. Tehát x tárol 0x123 megy, hogy a. Kapunk 50. Így kinyomtatni f ezt. És ez azt jelenti, hogy meg fog nyomtatni 50. És akkor az visszatér. És akkor mi van a második printf. Mi most százalék p. Ha még nem látta, hogy ez hogy milyen nyomtatásakor mutató. Tehát százalék i, százalék f, és az összes e már. Tehát százalék p nyomtassa ki a mutató. Tehát x egy mutató. Tehát, ha meg akarjuk nyomtatni x is, mi mit nyomtat valójában belül x, amely 0x123 Tehát az első nyomtatás f fog nyomtatni 50. A második nyomtatás f folyik nyomtatni 0x123 Igen? Közönség: Használ százalék x nyomtatni mutató? ROB: Szóval használsz százalék x nyomtatni mutató? Szóval lehet, de százalék x csak, általában a hasonló, ha van valami egész és szeretne nyomtatni , mint egy hexadecimális. Ez csak hogy csinálod. Mivel százalék d lenne kinyomtatni a decimális. Hogy-ket kapjuk százalék d. Én csak egész szám. p százaléka 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 call-- így nem tartalmazza azt itt. De ez a két érv szükségképpen ennek belsejében verem keret valamint a helyi változókat printf segítségével történik, hogy. Majd a következő hívás printf most belső printf verem keret százalék p backslash n és bármilyen x értéke, ami 0x123. Igen? KÖZÖNSÉG: [nem hallható]? ROB: Nem lesz nyomtatni valamit úgy néz ki, mint ez. KÖZÖNSÉG: [nem hallható]. ROB: Így kinyomtatja a cím formájában. Úgy néz ki, mint egy cím. Igen? KÖZÖNSÉG: [nem hallható]? ROB: Miért mi? KÖZÖNSÉG: [nem hallható]? ROB: Miért van ez a mutató 4 byte? Tehát van egy csomó 0-előtt ezt. Szóval ez tényleg 0x0000000123. A 64 bites rendszer, nem lenne egy csomó több nulla. Igen? KÖZÖNSÉG: [nem hallható]. ROB: Tehát az első printf fog print-- KÖZÖNSÉG: [nem hallható]. ROB: Igen, ez lesz a nyomtatás mi x mutat. Csillag azt mondja, mi ez dolog mutat. Fogd meg. Tehát mi azt mutat? 50.. Fogd meg. Ez az, amit mi fogunk nyomtatni. Mivel a következő egy, vagyunk csak a nyomtatást x is. Mi van benne f? 0x123. OK. És végül, mi van a szabad. Mit halad a szabad? Most haladunk x. Akkoriban tényleg megjelenik verem azt a keretben. Szóval megy az érték 0x123 szabad. Így most ingyen tudja, rendben, El kell menni, hogy a halom és szabad, hogy a memória. Ez már nem a mi a címe: 0x123. Így szabad lesz, hogy kiadja hogy a kupac. Most a halom ismét üres. Jelenleg nincs memóriavesztés. Most szabad visszatér. Figyeljük meg, hogy x még 0x123. De ez most már nem érvényes memória. Mi már nem dereference x. Igen? KÖZÖNSÉG: A return 0 felesleges? ROB: A returen 0 felesleges? Igen. Csak tedd, hogy azért, mert van egy visszatérő egy levegő. Tehát ez olyan, mint, igen, lehetővé teszi, tartalmazza a return 0. Igen? KÖZÖNSÉG: [nem hallható]? ROB: Szóval miután ingyen x, mi történik, ha igyekszünk dereference a mutatót? Lehetséges, hogy semmi sem megy rosszul. Elképzelhető, hogy akkor még mindig 50. Ez lehetséges, azt is, hogy, hogy a memória jelenleg használt valami mást. Szóval meghatározatlan viselkedés. És meghatározatlan jelent valamit megtörténhet. Igen? KÖZÖNSÉG: [nem hallható]? ROB: No, szóval ha rendelni x valami másra. Tehát, ha itt azt mondta x értéke malloc valami else-- malloc méret event-- akkor az eredeti blokk A memória nem szabadult. És mi már hivatalosan is elvesztette. Ez egy memória szivárgás. Elvesztettünk összes referencia hogy a blokk a memória. Így nincs mód arra, hogy valaha is kiszabadítani. OK, így majd vissza 0 eszközökkel történik. Rendben, verem túlcsordulás. Mi az ötlet? Úgy emlékszem, halom megy lefelé. Stack megy fel. Tehát ez volt a példa előadás, Azt hiszem, ahol fő csak fog ezt a funkciót ize, ami megy nevezi magát rekurzív át és újra. Így verem keret fog működik pontosan ugyanaz. Így fogunk kezdeni fő verem, mint az alsó keretben. Akkor fő fog meghívni az ize, ami fog kapni egy verem keret. Akkor 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. Szóval, ez az, hogyan jutunk verem túlcsordulás. És ezen a ponton, akkor seg hibája. Vagy azt tényleg seg hiba előtt Ezen a ponton azonban igen. KÖZÖNSÉG: A core dump a ugyanaz, mint a seg hiba? ROB: Akkor meglátod szegmentáció hiba core dump. Kapsz egy core dump amikor Ön Seg hibája. És ez olyan, mint a lerakó az összes tartalma a jelenlegi memória olyan hogy próbálja meg és azonosítja miért Seg hibázott. Igen? KÖZÖNSÉG: [nem hallható]? ROB: Tehát egy szegmentációs hiba eszköz van egy halom túlcsordulás. Tehát nem feltétlenül. A szegmentációs hiba azt jelenti, hogy te vagy megható memória oly módon, nem kellene. Tehát az egyik módja, hogy történik ez, amikor verem túlcsordulás, kezdjük megható memória oly módon, hogy ne legyen. Igen? KÖZÖNSÉG: [nem hallható]? ROB: Tehát belsejében egy végtelen ciklus. Mint, ez olyan, mint egy végtelen rekurzív hurok és így még egy verem keret minden egyes alkalommal. De csak belül a rendszeres végtelen míg az egyet Nos, ne is nyomtatni F-- tenni valamit. Mindegy. Nem fogunk, hogy egyre egy verem keret. Mi csak fog tartani hurok mint ez az egyetlen utasítás. A verem nem növekszik. Ez a tény, hogy minden rekurzív hívás ad nekünk egy verem keret. Ezért van, hogy verem túlcsordulás. Igen? Közönség: Tehát, ha azt mondta, hogy a while ciklus, majd a [nem hallható]? ROB: Tehát, ha belül a while ciklus volt egy printf, akkor is lenne nem seg hibája. Csak nem akartam összezavarni a dolgokat. Ez lenne hurok. Azt, hogy egy halom Keret a printf. Akkor printf visszatér. Akkor lenne hurok újra. Azt, hogy egy halom Keret a printf. Ez vissza. Egyetlen verem keret. 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 mert ezek közül egyik sem hívások foo visszatérnek. Tehát, ha visszatérünk, akkor azt indul vesztes verem kereteket. És akkor nem verem túlcsordulás. És hogy miért van szükség egy alapeset a 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éretét a verem és A halom azonos minden program? Durván. Van némi véletlen besorolás 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. A 64 bites rendszer, akkor gyakorlatilag végtelen memória. Már csak annyi. A 32 bites és 64 bites, hogy egy jelentős különbség. Fogsz kapni egy csomó más verem és a kupac egy 64 bites rendszer, mert ott csak több címek tudják használni. Hanem egy egyedi rendszer, akkor nagyjából azonos mennyiségű stack és a kupac. Rendben. Tehát az utolsó dolog összeállítása. Így tudnia kell ezt a folyamatot. Négy nagy lépést. Tehát az első egy kell könnyen megjegyezhető. Pre-feldolgozás. Ez az előtag elő benne. Tehát ez előtt minden mást. A lényeg, hogy emlékezzen a hash. Tehát hash meghatározza és hash tartalmazza az összes ilyen. Ezek mind pre-processzor irányelveket. Ezek azok a dolgok, hogy a pre-processzor gondoskodik. Szóval, mit csinál egy pre-processzor csinálni? Ez egy nagyon buta dolog. Minden ez képes mind ezeket másolás és kivágás és beillesztés műveleteket. Tehát hash tartalmazza szabványos i0 pont h. Mi ez csinál? Ez megragadta a standard i0 pont h fájlt, és beilleszteni a felső bárhol azt mondja hash tartalmazza szabvány i0 pont h. És minden hash meghatározni, hogy mi már láttam, mit csinál? A másolás az értéket, amely a hash definiált definíciója és beillesztés az bárhol is használja az értéket. Így az előfeldolgozó csak nem igazán egyszerű szöveges alapú műveleteket. Ez egyáltalán nem okos. Tehát minden más bonyolultabb. Most, hogy előfeldolgozó Kész, valójában össze. Tehát mit összeállítása jelent? Mostantól majd a C kód az assembly kódot. Igen? KÖZÖNSÉG: [nem hallható]? ROB: Igen, elkaptuk ezt. Így összeállítása. Elmegyünk a C és összeszerelés. Szóval ez egy igazi nyelvi változás. Összeállítása önmagában azt jelenti, megy a magasabb szintű nyelv alacsonyabb szintű nyelven. És c egy magas szintű nyelv mint a szerelvény. Mi az összeszerelés? Az utasítások, amelyek, nagyon sokat tett a CPU-t. De a számítógép még mindig nem Nem értem összeszerelés. Csak megérti egyesek és nullák. Így a következő lépés a szerelés, ami hoz minket ezeket az utasításokat, hogy a CPU megérti, és valóban fordítja őket, hogy az egyesek és nullák. Így C egységet bináris. De nincs végrehajtható még. Így gondolom, a CS50 könyvtár. Mi van ha egy bináris ez CS50 könyvtár, amely getString és GetInt és minden. De a CS50 library-- és a itself-- nem futtatható. Ez nem egy fő funkciója van. Ez csak egy csomó bináris hogy tudod használni. Tehát összekapcsolása hogyan hozzuk össze minden Ezeknek a különböző bináris fájlokat egy tényleges futtatható. Az egyik, hogy akkor írja pont perjel a pont ki. Tehát ez olyan, mint a fájl írta, - függetlenül a programot fektettünk-- Ceaser pont c. De most, hogy már össze le a bináris. Tehát Ceaser dot o. És ez a mi CS50 könyvtárt bináris. És ők is együttes egyetlen futtatható. Igen? KÖZÖNSÉG: [nem hallható]? ROB: Tehát először közé, ne feledd, A hash tartalmaz valójában egy pre-processzor lépésben. De ez külön. Ha nem használ funkciók kívül a egy fájl, akkor, Nem, nem kell összekapcsolni semmit mivel mindent. Igaz, printf kerül kapcsolódik. Ha valaha is használni a printf, hogy valami hogy kell kapcsolni a mert nem írtam. És valójában printf automatikusan kapcsolódik. Tudod, hogy a parancssorban, vagy ha beírt, hogy, látod, hogy kötőjel l CS50, amely kapcsolat A CS50 könyvtárban? Printf, meg ilyesmi, megy össze kell kapcsolni az automatikus. Bármilyen egyéb kérdése van valami? KÖZÖNSÉG: [nem hallható]? ROB: összekapcsolása? Van egy csomó különböző bináris fájlokat. Ez a legjobb példa , amit mi használunk CS50 könyvtár. Már össze és adja be Önnek a bináris ehhez CS50 könyvtár. 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ód le, akkor valójában nem fut le 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. Az állomány teljes. És tudom futtatni ezt. Igen? Közönség: e linkelését convert A bináris végrehajtható? Tehát akkor is, ha nincs más könyvtárak, nem lenne még mindig le kell fordítani a [nem hallható]? ROB: Tehát egy futtatható még bináris. Ez csak ötvözi a teljes csomó bináris. Közönség: Köszönöm szépen. ROB: Nem gond. Egyéb kérdés? Máskülönben mi készen is van. Rendben. Köszönöm. [Taps] Közönség: Köszönöm. ROB: Igen.