>> [Zenéje]
>> SPEAKER 1: Szia, mindenki.
Üdv újra a szakasz.
Szép nap out-- ezért vagyok biztos, már csak négy itt
és nem a szokásos csomagot.
Én már rosszul ezen a hétvégén.
Szóval nem kell csillagdendrimer srácok.
És kezdődhet köhögés Rettenetesen ez alatt.
Szóval, csak medve velem.
Fogom igazán kipróbálni és átjutni az első,
bár, mielőtt egy köhögési roham.
De könnyen be nekem kis bit-- ez minden kérem.
>> Így a menetrendje today-- csak egy reminder-- a kvíz a jövő héten.
Mondtam, hogy ez a múlt héten, így nem elkapni ki őr.
Szóval emlékeztető újra.
Jövő héten a kvíz.
Ebből a célból a jövő heti szakasz lesz sokkal
of-- Megpróbálom munka egyes felülvizsgálat.
Tehát, ha ti is segítsen nekem ki küldött engem
dolog, hogy te vagy a kényelmes az, hogy aggódsz,
téma, hogy szeretném, nekem, hogy fedezze, hogy nagyszerű lenne.
Szóval lehet próbálni, és dolgozni őket a mi oldalunkon a jövő hétre
vagy küldjön extra anyag vagy prep hogy talán nem kap máshol.
>> Igen!
Egyre többen jönnek!
Azt hittem, nem én, hogy rosszul utolsó hét, hogy senki sem akar, hogy jöjjön vissza?
Félek.
Így a másik három dolog hogy fogunk menni át
vannak átirányítás, file I / O, és majd mutatók és dinamikus memóriát.
Biztos vagyok benne, mindannyian szuper izgatottak pointers-- mindenki kedvenc téma,
annyira egyszerű megérteni.
Biztos vagyok benne, a srácok minden van, igaz?
>> Tehát az első dolog az első, redirection-- ez alapvetően csak egy módja
hogy ellenőrizzék, hogyan bemenet dolgokat a programban,
hogyan kimenet dolgokat a programban.
A fő módja, hogy a srácok már kölcsönhatásban vannak vele
csak a szabványos ki A nyomtatási képernyő itt.
De vannak olyan módon, hogy pipe-- mint látjuk itt
az egyik kedves words-- cső, hogy az információ
vagy az adat egy fájlt egy fájlt.
Ez csak különböző módon hogy a dolgok a programba
és ki a programot, hanem az csak a nyomtatást, hogy a képernyő
vagy bevitele dolgok a parancssorból.
>> Tehát először egy kicsi nagyobb, mint caret.
Így output-- ez csak kiírja a kimenetet fájlba ahelyett, hogy a képernyő.
Tehát, ha volt valami, ami a nyomtatott "Helló, világ!" a képernyőre,
ha inkább helyette a output.text, hogy
létrehozza ezt a fájlt nevű output.text.
És amikor megnyitja, akkor az mondják, hogy "Helló, világ!" ott.
Ez lehet szuper hasznos ha van egy csomó hibát
valójában, ahogy látjuk ezt.
Ha mégis két kalap, azt is megtudhatod nyomtassa ki a hibaüzeneteket.
>> Tehát, ha egy probléma, összeállítása, van egy csomó hibát
és te, hogy leragadt a kipróbálás lapozhat a parancssorban
az összes őket, akkor csak nyomtatni egy fájlba,
megnyitja a fájlt úgy, hogy lapozhatunk könnyebb.
Én ténylegesen felhasznált, hogy a tétel mikor hibakeresés
én 181 psets gépi tanulás.
Így lehet szuper hasznos később.
Az is hasznos, ha van egy program hogy talán generál könyvtár
vagy képességeik bizonyos készlet húrok, és
kell látni, hogy ez generál őket megfelelően.
Ez a módja, hogy.
>> Tehát, ha nyomtatni egy fájlba, akkor könnyebben vizsgálja meg, igaz?
Versus próbál görgetni keresztül parancssorban.
És akkor egy dolgot megjegyezni az, hogy csak a nagyobb
mint kalap, ha írunk hogy a fájlt már exists--
így, mint ha ez az első futott idő, rakjuk a output.text,
aztán volt egy másik program hogy ezt a programot a nyomtatott két
és nem nagyobb, mint output.text, felülírja hogy-- így
felülírja mi volt valaha a fájl kezdeni.
>> Tehát, ha azt szeretnénk hozzáfűzni fájlba, mint látjuk itt,
csak nem két nagyobb, mint jelek.
És akkor csatolja azt.
Ez nem írja felül.
Tehát, ha kell futtatni több programok és a fajta folyamatosan
pálya, amit mindegyik visszatér hozzád egy fájlt,
ez egy módja annak, hogy csináld.
Ha nem érdekel, mi van a fájlban és ez lehetővé tette, hogy felülírja,
akkor csak használ egy-nál nagyobb.
Van ennek értelme mindenki?
>> KÖZÖNSÉG: Mint a pont perjel helló nagyobb mint output dot szöveg, mint a kétszer,
akkor csak csak azt mutatják, a teljesítmény pont szövege a második time--
>> SPEAKER 1: Jobb.
Tehát lenne alapvetően csak teljesen felülírja mi volt ott, hogy kezdődik.
Ha ez a fájl itt, a output.text már
létezik, alapvetően minek hívják hogy ismét egy nagyobb
mint ha csak belegondolok úgy, mint azt a fájlt cserélni.
Mint amikor te megtakarítás egy Word dokumentum és akkor menteni,
és tartsa ugyanazt a nevet, és teljesen felülírja it--
ez ugyanaz a fajta dolog.
Bárki bármilyen további kérdése van csak kimenetre fájlba?
Félelmetes.
>> Tehát nyilvánvaló, hogy ha a fordított nyíl irányába, meg tudja csinálni bemenet.
Tehát, ha a srácok már mint Caesar vagy Visioneer
és meg kellett input valami, volt egy parancssori argumentum
hogy valóban azt bemenet.
Ez egy másik módja, hogy.
Tehát ahelyett, hogy megvárná a parancssorba,
mint amikor azt kérte, hogy üzenet Caesar vagy Visioneer,
ha volt egy szöveges fájlt hogy már az üzenetet,
akkor csak írja be azt.
>> Szóval, ha ez olyan volt, mint pont perjel Caesar Kevesebb, mint 3 nyilat beviteli, amely
az az üzenet, hogy fog futni csak finom.
Amikor a program valóban Caesar kérte a felhasználóhoz,
akkor már, mert beírt ebben a fájlban.
Ez csak egy módja.
Csak egy fordított output-- csak meg kell adni az adatokat.
>> És akkor az utolsó egy cső.
Szóval ez az ember elég jó.
Mert lehetővé teszi, hogy veszi az egyik kimenetét a másik
programot, és tedd a bemenet egy másik program.
Nem tudom, ha valakinek játszott a megfejtés
hogy CS50 volna adott neked, de ez
lehetővé teszi, hogy néhány minta fájlt, írja be a titkosítást,
és majd onnan írja hogy be dekódolás
hogy megbizonyosodjon arról, hogy kiderült, az ugyanaz.
Szóval ez olyan, mint a három-utas hurok.
Megy ez.
>> KÖZÖNSÉG: Ha egy program többszörös bemenet,
van egy módja, hogy elmondja, hogy melyik bemenet használja a szöveges fájlt, vagy a kimenet?
>> SPEAKER 1: Ez több bemenettel rendelkezik.
Bármilyen fájlt a input-- ha ez kér bemenet az első alkalom, hogy
fog feltételezni, azt hiszem, ez megy cső a teljes fájlt.
Tehát, ha több bemenet, akkor fog csővezeték több fájl.
Tehát, ha kér üzenetek háromszor a kódot,
fogsz kell üzembe három különböző fájlokat.
És ez lesz őrült.
És nem kell aggódni, hogy most.
De ez az ötlet.
>> Szóval igen, csak cső kimenete egy program a bemenő a másik.
Mindenki jó ott?
Cool.
OK.
Valószínűleg nem lesz hogy túl sokat vele.
De meg kell értenie, módon használhatja ezt.
És vannak olyan esetek, hogy érdemes használni.
>> Szóval fájl I / O- tudom, mit te saying-- vagyunk használni olvasás
és írásban a képernyőn van, melyik a szabvány az szabvány, és ki.
És ez az, amit a srácok már Ennek kezdete óta osztály itt.
De akkor is olvasni és írni fájlokat, amely minden file I / O- olyan fájlt bemenet,
kimenet minden képvisel.
Tehát ez alapvetően azt jelenti, hogy tudod tárolni az adatokat most.
>> Ha csak nyomtatni a képernyő, ez alapvetően ment, ugye?
Amint csinál "Hello világ "és fuss" Helló világ "
nyomtat "Helló világ", hogy a képernyőre.
De nem igazán semmit onnan.
Ha tárolni a szövegben fájlt, majd hirtelen
akkor ezeket az adatokat, hogy te szabad manipulálni vagy tedd egy fájlba,
vagy tedd be egy programot később.
Az egyik oka Ezért ezt csak
olyan módon, hogy az adatok tárolására későbbi felhasználás céljából.
>> Nekem van egy pár lépést itt Csak séta szabvány
I / O. Az első lépésben, akkor létre kell hozni egy referencia
A fájl minden sapkák FÁJL csillag fájlt.
Ahhoz, hogy létrehoz egy mutató egy fájlba.
Tehát azt szeretnénk, hogy nyissa meg.
És azt mondja, szó szerint, csak a fájl egyenlő fopen.
És ez fog vissza mutató a fájl csak nyitva.
Láttam egy pár, srácok a munkaidő.
>> De az egyik dolog, az remember-- mutatók
lehet néhány cím vagy null, ugye?
Ha valaha is olyan eset, amikor valami visszatérhet null,
mit kell tennünk mielőtt valaha használni?
Meg kell, hogy ellenőrizze, ez null vagy nem, ugye?
Mivel néhányan talán volt a kérdés, ahol bármilyen tárgy
volt, hogy vissza kitörés volt null.
Próbált végrehajtani néhány függvényt.
És a számítógép webhely hibázott.
Jobb?
Fogadok, egy pár, Lehet, hogy volt ebben a kérdésben.
>> Tehát fopen, fopen lesz vagy vissza a mutatót a fájl,
vagy, ha valami elromlik, ez fog visszatérni null.
Így mindig ellenőrizni kell hogy nem tért vissza null
mielőtt megkísérli mást csinálni.
Ez olyan, mint egy standard paradigma hogy fogsz szüksége van.
Ha van rá esély, hogy valaha valami is vissza null,
győződjön meg róla, hogy Nem, mielőtt belekezd.
Ellenkező esetben, ha mész hogy szép hely hibákat.
És senki sem szeret foglalkozni az.
>> Szóval mint látjuk itt, az első érv csak az a fájl elérési útját.
Ha ez a fájl nem létezik, ez meg fog létrehozni, hogy a fájl.
És ez csak lesz üres.
És akkor a második érv az a mód, amit akar.
Nem szeretnénk olvasni ezt a fájlt?
Szeretné, hogy írjon belőle?
Szeretné hozzáfűzni?
Tehát tulajdonképpen mi csak said-- Ha a fájl nem létezik
és próbál olvasni , ez fog dobni egy hiba.
Ha a fájl name--, mint ha file.text még nem létezik
és akarsz írni hozzá, akkor teremt
egy üres fájl hívott file.text az Ön számára.
És ha azt szeretnénk hozzáfűzni, akkor nem ugyanaz a dolog.
Van ennek értelme?
Ha akarsz olvasni a fájl még nem létezik,
ez lesz dobni egy hiba.
Ellenkező esetben, akkor hozza létre a fájlt mert azt teszed, amit akarsz azt.
Cool.
Most már tudja olvasni a fájlt.
És ez csak egyfajta megy egymás után különböző funkciókat
hogy van file I / O. Ez az akarat szükséges az e heti PSET,
ha jól emlékszem.
Igen, feltétlenül lesz szükséges az e heti PSET.
Így fgetc visszatér a következő karakter.
fgets csak vissza sort.
Vissza fog térni, ami akár egy új sort, és lesz szünet.
Tehát fread olvas egy bizonyos bájtok száma és hely őket
egy tömb, amely az, amit lehet
akar csinálni újra size-- hasznos lehet.
>> Hány ember olvas A PSET spec, mellesleg?
OK.
[Hallható]
>> SPEAKER 1: OK.
Rendben van.
Határozottan olvasd hogy-- ez egy szórakoztató PSET.
Kapsz, hogy visszaszerezze a törölt memória card-- igazán izgalmas, ha működik.
De biztosan, hogy kezdje el olvasni.
Gyere beszélgetni velem, ha kérdései vannak róla.
>> OK, így mondtam, fread olvas egy bizonyos számú bájt.
Ez valami tetszőleges számú hogy fogsz beállítani.
És akkor csak mozog fseek egy bizonyos helyzetben.
Szóval lehet, hogy nem érdekel a következő 10 bájt.
Csak azt, hogy ugorjon.
Nem érdekel azokat.
Azt akarod, hogy olvasni kezdődő 11 byte.
fseek lehetővé teszi, hogy ezt tegyük.
Így lehetővé teszi, hogy szelektív arról, amit olvas.
Mert fgetc, fgets, és fread olvasni egy bizonyos helyen a fájlt.
>> A módja annak, hogy gondolni ezt, ha ez mi a fájl, amikor először kinyitni,
van ebben a helyzetben a fájlban hogy kezdődik az elején.
Valahányszor hívsz fgetc, fgetf, vagy fread,
ez fog kezdeni ezt a pozíciót jelző.
Tegyük fel, hogy csak azt, hogy olvasni ez a darab memória itt.
Nem lehet csak hívni.
Meg kell keresni itt majd olvasd el onnan
vagy olvasni, lesz, vagy getc, attól függően, hogy mit akarsz.
Így keresnek csak lehetővé teszi, hogy Átugrani adag memóriát.
És ez az egyetlen Így hagyja a dolgokat
anélkül, hogy elolvasná őket a puffer.
Van ennek értelme mindenki?
>> Nyilvánvaló, hogy egy Sok párhuzamos here--
a kimenet, vagy bemenet átirányítása, már írni és olvasni.
Szóval fputc csak ír karaktert a fájl.
fputs ír egy sort.
Fprintf nyomtat formázott kimenetet.
Tehát, ha van tabok, vagy hely, vagy miegymás.
Aztán fwrite írja egyes tömb byte fájlba.
Így ez ugyanúgy fwrite és fread analóg
opposites-- fgets, fputs, és akkor fputc és fgetc-- tételek
Az őrült, gyorsan a dolgok.
>> Csak egyfajta tartani ezt handy-- akkor különböző időkben
ahol talán csak azt, egy karaktert egy időben.
Lehet, hogy szeretne egy egész sor.
Miközben a szótár pset-- amely két psets,
Úgy vélem, akkor kapsz egy egész szótár szöveges formátumban
amely minden szó elválasztva egy vonalat.
Tehát, ha akart olvasni egyszóval egy időben,
mi használ, ha olvasod és ezek mind elválasztjuk az új vonalakon,
, és csak azt egy szót egy időben?
>> KÖZÖNSÉG: fgets
>> SPEAKER 1: Jobb.
Fgets-- mert azt vissza bármi is van egy sorban.
És ha minden szó a saját vonal, tudjuk használni fgets.
Cool.
Van ennek értelme, mindenki?
Cool?
Igen, fogunk eljutni A szórakoztató része a mutató
nagyon hamar, ahol kap, hogy némi matek.
És ez lesz jó.
>> Utolsó step-- zárja be a fájlt.
Oly sok dolog van, egyik paradigmák
, ha az visszatérhet null, null ellenőrizze.
Ha kinyitja valami, jobb lenne, ha bezárja azt.
OK, szóval nincs elvégezve, amíg te történik, kivéve, ha már bezárta.
Olyan, mintha nem ért véget amíg a kövér hölgy énekel.
Ez olyan, mintha a fájl bezárása.
Mint mondja, itt, csak megismételni, mindig
nyissa meg a fájlt, mielőtt te olvasás vagy írás hozzá.
És mindig zárja be, ha már kinyitotta.
Minden rendben?
Cool.
>> Tehát itt egy példa.
Szóval tiny-- Nem tudom, ha Láthatjuk, hogy a srácok nagyon jól.
Bárcsak növelni a fényerő valahogy.
Hadd valójában ezt, ha tudok.
OK, srácok nem igazán láthatjuk, hogy minden, ugye?
OK, mi fogja ezt, akkor.
[Hallható]
>> Feltételezem, hogy ez sokkal jobb látni.
Tud valaki látni, ahol a egér ment ez a kérdés?
Ah, ott ez-- mit küzd!
>> OK.
Alapvetően, srácok kellene fajta az ötlet, hogy mi ez csinál.
Nem tökéletes.
De én inkább megmagyarázni, mint költeni több időt próbál formázni rendesen.
Alapvetően, ahogy itt látsz, kezdjük fájl megnyitásakor.
És van néhány adatbázis fájlt, hogy mi vagyunk
megnyitása azt mondja, hogy ez a diákok.
És meg fogjuk írni.
Így persze, vissza null.
Tehát, hogy ellenőrizze a null.
És akkor, ha ez nem null, megyünk át.
És mint látod, vagyunk áthurkolást itt.
Vannak diákok.
A diákok a hash definiált három.
És mit csinálunk is mi vagyunk nyomtatni a fájlt, ugye?
Szóval mit nyomtat ki, hogy a fájlt?
>> KÖZÖNSÉG: A pontszámok amelyek a tömbben?
>> SPEAKER 1: Igen.
Az eredmények, amelyek a a array-- pontosan.
Tehát ezt megnyitása adatbázis fájl, amely
Feltételezem, valamiféle fokozatok adatbázisban.
És mi csak kinyomtatott rengeteg minden diák, hogy a fájl.
Cool?
Jó.
Félelmetes.
OK.
Menjünk vissza to--
>> KÖZÖNSÉG: Van egy gyors kérdés.
A printf nem az a hurok?
Ez csak a hurok, ha?
SPEAKER 1: Nem, ez a for ciklus.
Nem látom az egér nagyon jól fel itt.
Szóval küzd formátum megfelelően.
Ezt a konzol nem lesz ott.
Meg kell itt.
Ez az, amit a hurok.
Ott.
Most már elég.
Szóval így kell be-- kivéve az, hogy az utolsó konzol, amit elutasította.
OK.
Van ennek értelme mindenki?
OK.
Megyünk lépni A következő dolog then--
amely valójában, mész hogy kell, hogy a kódot.
Szóval csak fog másolja át most.
OK.
Szóval fogom mutatni nektek ezt a kódot.
És azt akarom, hogy próbálja ki, és a szám ki mit kéne csinálni.
>> Tehát adott hogy-- hogy egy perc múlva.
Próbáld ki, és kitalálni, hogy mi folyik itt.
>> Van ötleted?
>> Tudjuk, hogy van legalább két érveket a parancssor, ugye?
Azt feltételezzük, amelyek közül az egyik lesz hogy [hallható] a mi program
majd valami mást.
Mert ha [hallható] kevesebb kettőnél azt kiabálni rájuk.
Jobb?
És a használat, úgy néz ki, mint ez lesz valamilyen fájlt.
Mindannyian egyetértünk abban, hogy hogy?
Szóval most, mi a hurok csinál?
Mi megy át?
>> KÖZÖNSÉG: Minden a fájlokat.
SPEAKER 1: Pontosan.
Ez megy végig a fájlok voltunk ott bemenet.
Tehát minden fájl, akkor megnyitása néhány húr ott.
Ez megnyitja a fájlt.
Jobb?
És ez az olvasáskor.
Persze, ellenőrzése, ha ez nulla.
És akkor ez a nyomtatás.
Ha ez nulla, ez csak mondja hogy ez nem egy fájlt, ami létezik.
Mert emlékszem, a olvassa el fájl létezik.
Jobb?
Az írási és append, akkor megússza.
De olvasni, a fájl létezik.
>> És ha ez nem létezik, mit csinálunk itt?
Nézzük csak itt kezdődnek.
Mi ez do-- az első karaktert.
Mit csinál?
Ő kap egy karaktert, ugye?
Szóval, mit csinál ez?
Kezd az első karakter.
Bárki, aki tudja EOF?
>> KÖZÖNSÉG: vége a fájl?
>> SPEAKER 1: vége file-- pontosan.
Így fog átmenni az egész fájlt, ugye?
És akkor lesz frissíteni a szerzés minden későbbi karaktert.
Jobb?
És mit csinál?
KÖZÖNSÉG: Putting hogy in--
>> SPEAKER 1: Putchar nyomtat a képernyővédő.
[Hallható] a karaktert.
És akkor, amikor [hallható] ez bezárja a fájlt.
>> KÖZÖNSÉG: Hát nem szükség [? mást? ?]
>> SPEAKER 1: Nem feltétlenül.
Úgy értem, ez a fajta hallgatólagos ebben.
Mert ez vissza, bár, mint a hosszú mivel ez nem elkapni ezt, akkor minden rendben van.
Úgy értem, ez talán jó gyakorlat, hogy nem egy mást.
De mást nem mindig szükséges különösen
ha van valami mint a visszatérés, amely
azt jelenti, hogy ebben az esetben, ha ez megfog meg, a programot fog végződni
és soha nem kap erre.
Sokkal inkább arra az esetre, ha Ön Nem feltétlenül vissza valamit.
Mert ha ez a nem volt visszatérő semmit,
ez azt jelentené, hogy ha ez igaz, A többi már az is futni.
És ebben az esetben, ha szeretne hamis.
Ha ez visszatérő, és A program vége,
Egy más nem szükséges, minden Az idő, a környezettől függően.
Jacob, te kérdésed van?
KÖZÖNSÉG: Igen.
Tehát nem fgetc kap a következő karakter?
Hogyan növeli a karakter?
SPEAKER 1: Igen.
Így fgetc kap a következő karakter.
Gondoljon úgy rá, mint a C ++ értelemben.
>> KÖZÖNSÉG: Mi volt EOF?
>> SPEAKER 1: EOF a fájl vége.
Ez csak egy markert, amely lehetővé teszi, hogy tudja, hogy te vagy a végén a fájl.
Tehát ez fog nyomtatni a szokásos ki.
És akkor fog zárni a fájlt, ha kész.
És akkor menjünk A következő kép, ugye?
Tehát összességében, mit jelent ez a program nem?
>> [Hallható]
>> SPEAKER 1: Igen.
Csak kiírja mindent.
Tehát, ha a srácok valaha használt CAT majd a nevét egyes file--
Nem tudom, ha valakinek van valaha is, hogy a terminálon.
De ha valaha is használni a parancs CAT-- C-A-T--
majd bármilyen fájl Ön azt there--
nyomtat ki a terminál, amely lehet szuper hasznos néhány dolgot.
Használom sokat.
Van ennek értelme mindenki?
Cool?
>> OK, így a feladat now-- akár magad vagy az emberek you--
az, hogy csak írni egy egyszerű program hogy majd csak írni "Helló, világ!"
ki egy fájlt.
>> [Hallható]
>> SPEAKER 1: én, mint volt Én, hogy rosszul a múlt héten?
Én nem hiszem, hogy volt olyan rossz.
Örülök, hogy mind itt.
Ez igazán boldoggá tesz.
Én vagyok a lány az egyszerű örömöket.
Én csak azt szeretném, ha a rész jár.
Szóval csak most kezdődött ez a srácok, hogy mi is együtt kódot.
Nem szeretem üzembe bárki a helyszínen, hacsak nem akarja, hogy legyen.
>> KÖZÖNSÉG: A kvíz, nem meg kell írni a programot?
>> SPEAKER 1: Lehet, hogy az egyszerű programok megírásához kézzel.
Aha.
>> KÖZÖNSÉG: A teszt a jövő héten, ugye?
>> SPEAKER 1: A kvíz jövő szerdán.
Ez azt jelenti, van egy szép [? CSE?] osztályozás party utána, amely
azt jelenti, hogy kapsz a pontjaid vissza, hogy a night-- mikor?
Ki tudja?
De az lesz, hogy este.
>> Rendben van.
Hogyan szeretnénk kezdeni ezt?
Adok egy hint-- kezdődik ezzel.
>> KÖZÖNSÉG: Meg kell nyitni a fájlt.
>> SPEAKER 1: Igen.
Szóval, mit akarsz, hogy hívják ezt?
Nem csak azt, hogy hívják "file"?
Nézzük könnyen.
Szóval, mi a fopen-- kimenet teszt lesz?
Nevezzük "Hello".
És mi a mód?
Mit teszünk, hogy ezt a fájlt?
>> KÖZÖNSÉG: Olvasd el.
Írás.
SPEAKER 1: Azért írunk rá.
Lovely.
OK, így már most ezt a fájlt.
Mit kell tenni?
KÖZÖNSÉG: Ellenőrizze, hogy null.
SPEAKER 1. Ellenőrizze, hogy null-- pontosan.
Ez az, amit én szeretnék hallani.
Ez automatikusnak kell lennie, különösen nagyjából ettől kezdve.
Ha elkezd segfaulting, akkor valószínűleg Nem ellenőrzi a null valahol.
Kilenc alkalommal tízből, ami lesz a hiba.
Tehát, ha tudna csak bejutni a szokás, mindig ellenőrizze, ha ez nulla,
életed lesz szép és easy-- vagy könnyebb.
>> Így nézze meg, ha ez a null.
Tehát, ha nem null, ami amit a bumm egyenlő
means-- nem null-- ez érvényes.
Mit akarunk csinálni?
Mi csak szeretnénk nyomtatni , hogy a fájl, ugye?
Szóval, mit fogunk használni?
>> KÖZÖNSÉG: fprintf
>> SPEAKER 1: Fprintf-- szép.
És fprintf úgy két arguments-- ahol ez megy, és mit akarunk nyomtatni.
Tehát mi az első?
Ha megy?
>> KÖZÖNSÉG: Fájlok.
>> SPEAKER 1: Ez lesz a fájl.
És mit akar nyomtatni?
"Helló, világ!"
Rendben van.
Van egy utolsó thing-- másik nagy paradigma itt.
KÖZÖNSÉG: Bezárás.
SPEAKER 1: Bezár.
Tessék.
>> KÖZÖNSÉG: Ez történik ha a fájl null?
SPEAKER 1: Nem, ez ha nem null.
KÖZÖNSÉG Ó, ha ez rendben van nem--.
A fopen, majd az Két érv, hogy menj be,
Mit jelent az első érv megint?
>> SPEAKER 1: Az érvelés mint a fájl neve
hogy szeretne menni.
Így aztán ez fut, akkor lenne néhány fájlt úgynevezett "hello"
hogy már "Hello, world" belül.
Ez minden.
Csak a neve.
>> KÖZÖNSÉG És mivel ez az írás, a fájl nem kell már létezik.
Ez az, amit mondott?
>> SPEAKER 1: Jobb.
Pontosan.
Ha a "Hello", mint egy fájlt még nem létezik, akkor
létre fog hozni egy fájlt úgynevezett Hello "és írjon neked.
>> KÖZÖNSÉG: Ha azt mondod a program írt a fájlt,
miért írsz "file" helyett a fájl nevét és fprintf--
>> SPEAKER 1: Mivel ebben az esetben van hogy a nagy FILE-- minden caps-- csillag,
fájl.
Tehát ez a mutató a fájl hogy te beszélsz.
Ez a módja, hogy a mi csak hivatkoznak rá.
Tehát ebben az esetben, ha hiszem file-- aha,
tudjuk használni this-- fájlt itt utal, hogy a megnyitása "Hello"
és hagyta, hogy írjon.
>> KÖZÖNSÉG: Vajon mi tesz egy "Hello" helyett [? csupán?] f fájlt?
SPEAKER 1: Nem, mert a "Hello" kell, hogy nyitott és írható.
Fájl itt olyan, mint egy jelölés, amely azt mondja OK,
ezt file-- hello-- hogy keresünk.
Már bontott.
És fogunk írni.
Ha csak használja a "Hello", mely kapszulázott benne.
Így fog kiborulni.
Úgy értem, akkor is nevezték el.
Tehetett volna fájlt, csillag, "Hello", megegyezik.
De a lényeg az, hogy szüksége van egy fájlt csillag pointer érdekében
hogy képes legyen használni ezeket a funkciókat.
KÖZÖNSÉG: Meg tudná csinálni fájl, csillag, reszelő, "Hello"
vagy mit kell tenni fájl csillag, fájlt is?
SPEAKER 1: tudtál do fájl, csillag, "Hello".
Meg tudod változtatni ezt a bármilyen nevet.
Teljesen önkényes mi ez a név is.
Akkor nevezd meg semmit.
Nevezd meg repülő spagetti, ha akarta.
>> KÖZÖNSÉG: Mi az a "w" idézőjelbe az?
>> SPEAKER 1: A "w" csak a mód.
Szóval írásban ezt a fájlt.
Mindenki jó?
Tiszta?
Igen.
>> KÖZÖNSÉG: Tehát, ha ezt írja fájl, ahol tudjuk majd meg, hogy a fájlt?
>> SPEAKER 1: Ez lesz az azonos könyvtárat, hogy te éppen.
Ha a három és PSET futtatása, az Ön PSET
három mappa lesz ezt a fájlt a "Helló."
Cool?
Mindenki jó?
Úgy érzem, hogy mind kapok, ami nagyszerű.
OK.
Szóval vissza a dia show-- Én szeretem, ha a dolgok működnek.
OK, pointers-- vagytok izgatott?
Mutatók nagyok.
Vesznek egy kicsit hogy tekerje a fejét.
Ez a második év tanítás mutatók.
És azt hiszem, végre megvan.
Tehát, ha harc, ez rendben van.
Mint már mondtam, rajzolás sokat segít a dolgok a CS,
mint azt hiszem, az emberek hajlamosak gondolkodni ó, vagyunk egy számítógép.
Mi kéne kódot.
No-- rajz képek valóban segít.
És én tényleg javasoljuk, hogy bekapcsolódjanak az óvodás oldalra
és hogy ki ceruzák vagy markerei és rajzolni.
Mert ez segít.
És ha látsz engem munkaidejében én lesz könyv körül halom papír
A tollak rajz dolgokat.
>> Így különösen pointers-- rajzolni.
És biztos vagyok benne, hogy tényleg lesz lehet rajz néhány képet itt is.
>> Szóval ti minden van, hogy Muci, ezt a hűvös claymation dolog.
És azt hiszem, ez tényleg vicces, amikor ő felrobban egy csomó darab.
Ez valami komikus osztály.
C [hallható] ez a nagy képesség hogy képes legyen irányítani memória.
És ez az egyik dolog, ami igazán teszi, hogy egy ilyen hatalmas nyelv.
De a nagy hatalommal nagy felelősség.
És őrült dolog történhet ha nem vigyáz.
Tehát, ha az Ön által használt mutatók, azt szeretnénk, hogy
benne, hogy tényleg érti pontosan, hogy mit csinálsz.
Remélhetőleg a következő kis idő segít igazán értem
mutatók, hogyan kell használni őket, és hogyan kell manipulálni őket.
>> Szóval memory-- vagyok benne voltunk láttam ezt a diagram előtt.
Tehát ez csak egy egyszerű diagram hogy a dolgok hogyan lehet tárolni memóriájában.
Szóval alapvetően ezek hatalmas tömbök egy byte tömb
amit mi here-- enyhe egyesével minden egyes alkalommal.
Ez hex [hallható] így nyolc-bites blokkokat.
És minden mondat társul Néhány hexadecimális címet.
Tehát, ha valaha is látni a 0x, ami csak notating
hogy ez egy hexadecimális címet.
Akkor ez azt jelenti, feltételezni Néhány cím a memóriában.
Beszélünk memória címek ha látsz hexadecimális.
>> Van ints változók, úszók változók tárolására.
Így ints bolt ints.
Úszók bolt lebeg.
Tehát mi is mutató hogy tárolja a memória címeket.
Ez egyfajta leképezés.
Mutatók kizárólag memória címeket.
Szóval ez, mint a típus is.
A készülék 32 bites, ami azt jelenti, hogy a memória cím négy bájt.
Tehát minden olyan mutató, hogy van is lesz négy bájt.
Vagy pedig, ha ez a négy bájt, memória négy bájt.
Mutatók bolt memória.
Ezért ők négy bájt.
Cool-- csak azt szeretném megerősíteni azt.
>> Önnek kellene kap ez vicces most.
Én nem tudom, hogy sokan közületek a xkcd rajongók, de én szeretem xkcd.
Nagyon jó.
>> Rendben van.
Így teremt pointers-- mint mondtam, ez elég sok, mint bármi más.
Van egy típus.
Van egy név.
Jobb?
Ez az, amit mi ott. [? Hex?] Csillag azt jelenti, hogy a mutató,
és akkor amit akarsz nevezni.
Így a típus képviseli mit lehet tárolni.
Minden rendben?
Ugyanígy, ha mi ints, tudjuk, hogy mi tárolja egy int ott.
A mutató, az tart memória címet.
De mit jelent az, hogy-- itt, ahol rajz fog jól jön.
Tehát ebben az esetben van néhány value-- mondjuk négy.
Négy címen egy.
OK?
>> Ez az első itt azt jelenti, hogy ez a mutató 2x.
Jobb?
Ez valami mutató x.
x lehet valami, bármi.
Bármit x ez-- mondjuk x négy.
Meg fog tárolni a memória címét.
Így int, csillag, X- ez más slot memory--
ki tudja, mi is ez.
De ez meg fog tárolni egy címet.
Szóval ez lenne a like-- ebben az esetben Bármi,
tárolják 0x1-- bármilyen tárolják címen, hogy a mutató rendelkezik,
van, hogy egyeznek meg amit mi már kijelölt.
Így a 0x1, ebben az esetben, ez az x.
Ez mindig csak egy int míg mi ezt a.
>> Hasonlóképpen, ha van másik 1y, bármi
cím tárolja egy y hogy egy char-- ugyanezt z.
Ugyanúgy, amikor csak próbálja meg, és nem intx egyenlő 0,4,
ez meg fog kiabálni veled, és mint nem, azt mondta volna egy int.
Ez állítólag egy int.
Ne próbálj, hogy ez egy úszó.
>> Tehát a dolgok, amit ők akarnak lenni.
Legyen dolgok legyenek önmaguk.
Olyan nagy dolog csak bármilyen típusú mutató
azt, hogy ez az egyetlen dolog tárolhat ott.
OK?
A gyakorlat, mint a a múlt héten, minden
Úgy tűnik, tényleg ilyen elvont.
Megyünk, hogy némi gyakorlat.
Meg kell, hogy több értelme van.
>> Így referenciái és dereferencing-- ez Nagyon fontos, hogy ezeket a dolgokat.
Még mindig van, hogy frissíteni hébe-hóba.
És én, mint várni, melyik akarok?
Így a jelet ténylegesen ad Ön a referencia vagy címe.
Így tér vissza a címet memória, amely változó tárolja.
Így fog ténylegesen vissza hozzád hexadecimális, míg azt dereferencing
valóban fog adni A tárolt adatok ott.
OK?
Szóval megyünk nézni egy példát nagyon gyors, illetve a ténylegesen mellé.
>> OK.
Tehát, hogy hiszem, tényleg figyelmesen ezt.
Tehát itt van néhány egész x.
Fogom próbálni, és felhívni a ki a legjobb tudásom szerint.
Szóval megy, hogy ezt nyílás x.
És ez az öt tároló.
A címe 0x4.
Cool?
Minden jó.
>> Tehát most itt van ez a mutató.
Ez volt itt.
És jelet ad A címe valami.
Így, ebben az esetben, ez az x címét.
Mi a címe az x?
04-- és ez a mutató is a 0x08.
Cool?
Így gondol erről mutató, 04, csak kiemeli itt.
És hívják mutatók mert ahogy egyre inkább ezt,
fogsz látni a dolgokat mutat.
És egy másik blokkot mutat blokk, hogy sokkal több értelme van.
Tehát itt van kettő.
Aztán van néhány példány, ami what-- 0x0C.
És ez lesz a dereference a mutatót.
>> Szóval, mi ez mond OK, itt van a mi mutató.
Az érték tárolja a 0x04, és mi azt mondja, hogy megy erre a címre
és mondd el, mi van benne.
Szóval ez hatékonyan mi ez a nyíl csinál.
Azt hiszem ezt, mint a csillag.
Szóval OK, mikor mi csillag, az azt jelenti, követni.
Ugrás erre a címre.
És ez alapvetően csak a következő A nyílra ezt a memóriát darab.
És nekünk, mi van benne, ami 5.
Ez az, amiért a másolat egyenlő 5.
Van ennek értelme?
Valaki kell, hogy menjek át hogy újra, vagy lassabban?
Azt akarod, hogy menjek keresztül meg még egyszer?
OK.
Fogunk dolgozza át újra.
Ha elkezdünk, mindannyian egyetértünk abban, hogy van néhány darab memória, ami a változó
x, hogy egyenlővé tenni 5.
Mi nem ellenőrizzük, hol van a memóriában.
Szóval ez a hely nem csak önkényesen.
Jó ott?
OK.
Aztán inicializálni a mutató egy int.
Ezért ez lehetővé tette, hogy pont x mert van egy int itt.
Van még egy darab memória mert ez a mutató
olyan változó, mint bármi más.
Ez önkényesen néhány helyet a memóriában.
És mi tárolja az x címét.
Jelet olyan x címét.
Tehát mi az x címét?
>> KÖZÖNSÉG: Ez zero--
SPEAKER 1: 0x04.
Tehát then-- utolsó.
Van néhány copy-- újra csak egy másik változó.
Szóval rendelni valami önkényes helyen.
És mi a pointer dereference.
A csillag azt jelenti, megy a cím alatt az a mutató.
Mondd el, mi van ott.
Így a cím tárolt a mi mutató 0x04.
Így megy arra a címre.
Ez rámutat arra a címre.
Mi van benne ez a memória blokk?
Ez egy öt.
Szóval, ez az, amit rendelni a másolat.
Mindenki jó?
Cool.
Again-- kép.
>> Így nyomon értékek here-- vagyok hagyom, hogy a srácok gondol erről.
Vonhatunk másik képet.
De azt akarom, hogy megpróbálja, és értelem ezen keresztül a saját egy percre.
>> Mivel ők nem adnak nekünk egy példa cím,
Én csak csinálni ampersand X- amely segít vezetni haza.
Jelet jelent címét.
>> Tehát az első, mindenki megy az első sorban.
Néhány x set a five-- egyes véletlen slot a memóriában.
Int csillag mutató egyenlő hogy az x címét, ugye?
Int csillag mutató teremt ez a blokk, hívja mutatót,
és hozzárendeli az x címét.
Én borzasztó és jel.
>> Most mit csinálunk azt mondjuk OK, a mutató hivatkozás feloldási.
Így megy OK, mi van a mutató?
Ez ampersand x.
Tovább a jelet az x és újra ki kell jelölni.
>> Szóval most, x-jel lesz a 35.
Tehát alapvetően, ha éppen dereferencing, menj az OK gombra.
Meg leszel rajz képek, mint ez.
Meg leszel rajz a nyilak felett, hol van.
Így megy ez a nyílás a memóriában, és vagy ad nekem, hogy visszatérítést, vagy változtassa meg.
Ebben az esetben, mivel ebben vagyunk érték, mi hozzárendelése, hogy legyen 35.
Míg az utolsó egy, ha azt veszi észre, mi
arra hozzárendelése mi volt itt valami másra.
>> Így van ez a félelmetes táblázat.
Ez nem olyan rossz.
Srácok dolgozni rajta.
Megyek dolgozzon ki a táblára.
Fogunk töltse ki együtt, OK?
Tehát megragad néhány papírt, megragad Egy partner, munkába.
Megyek, hogy egy nagyobb darab krétát.
Mert lesz egy csomó.
OK.
EGYETEMI TANÁR: OK.
Kezdjük az első sorban.
Kezdjük ott, akkor, srácok akkor talán a munka révén egy kicsit.
OK.
a egyenlő b c alkalommal így mi a?
Ez nem egy trükkös kérdés, ígérem.
>> Diák: 4-szer 5.
>> EGYETEMI TANÁR: 4-szer 5.
20.
Tehát mi b?
STUDENT: 4.
>> EGYETEMI TANÁR: És c?
STUDENT 5.
EGYETEMI TANÁR: 5.
És akkor ez csak fog kell a jelet, ampersand b,
c jelet, ugye?
Nem rossz.
Ez elég egyszerű.
OK.
Így a következő alkalommal.
A valós érték megegyezik egy alkalommal c, abban az esetben, valaki nem ismerte azt.
Mindenki ismerős a korral értéke?
OK, mindez means-- ez gyorsírás egy egyenlő egy alkalommal c.
Megteheti azt részlege, hozzáadásával, a kivonás.
Meg tudod csinálni egy egyenlő, vagy a plusz egyenlő c olyan egyenlő egy plusz c mínusz egyenlő
c lenne egyenlő a mínusz c.
Ez csak szintaktikai cukor.
>> Így, ebben az esetben a egyenlő Egy alkalommal c adna nekünk, mi?
Ismét nem egy trükkös kérdés.
>> STUDENT: 100.
>> EGYETEMI TANÁR: 100.
Van bármi más változás?
Nem.
Talán végre kap jobb az én és jel.
>> Diák: OK, bocs, hogy kerültél 100?
EGYETEMI TANÁR: OK.
Így a értéke egyenlő a c alkalommal, így egy alkalommal kb.
Diák: Ó, te használ Egy a previous--
EGYETEMI TANÁR: Igen.
Tehát ezek a legfrissebb értékeket.
Ezek mit kellene használva haladunk lefelé, OK.
Szóval, b az egyetlen dolog változik, ugye?
Szóval kitölteni minden mást.
B. Mi b lesz?
Lenni vagy nem lenni.
Szóval, mit csinál ez?
Mi az a csillag pa csinál?
>> DIÁK: Kód a helyét pa.
>> Diák: Nem, nem egészen.
Tehát ez egy d hivatkozást.
>> Diák: Szóval b átadható érték pa.
>> EGYETEMI TANÁR: Igen, így pa a címe, ugye?
Így mondja megy, ahol a nem tárolt és adja meg ezt az értéket.
Tehát mi b?
STUDENT: 100.
EGYETEMI TANÁR: 100.
Tökéletes.
OK, így pc, mi változik.
Minden más marad.
Mi pc lesz?
Egyszerű feladat.
Pc egyenlő pa, pa és mi?
>> Diák: ampersand a.
EGYETEMI TANÁR: Tökéletes.
Most már kezd érdekes.
Oké, szünet ezt le.
Először is, mi a b c-szer, mert ez az a könnyű része ez, ugye?
B idők c ez--
>> STUDENT: 500.
>> EGYETEMI TANÁR: Igen, így mit csinál ez,
ha a csillag pb, mi változik?
>> Diák: Mi van a--
EGYETEMI TANÁR: Mi van b?
Diák: Mi van a térben hogy pb mutat.
EGYETEMI TANÁR: És pb mutat to--
STUDENT: B.
EGYETEMI TANÁR: B. Így az egyetlen változó dolog az b, helyes.
Szóval b idők c 500.
Szóval, ez az, amit most változik.
Cool.
Lovely.
Srácok csinálja.
Rendben, megtörve ezt le.
C változik, ugye?
Így tudjuk kitölteni minden mást.
Lássuk.
OK.
Tudjuk, hogy ac lesz a termék két szám, ugye?
Mi a két szám, igaz?
>> Diák: A és C?
>> EGYETEMI TANÁR: Tehát egy olyan igaz, hogy az első.
Szóval d Az hivatkozva p egy, igaz?
P a pontot egy, így tudjuk, hogy ez lesz a 100-szor, mi?
Times mit pc pont?
Rámutat, hogy a.
Így 100-szor 100 10.000.
Van ennek értelme?
Cool.
Otthon szakaszon, srácok, utolsó sor.
OK.
Mi változik itt?
>> STUDENT: A.
EGYETEMI TANÁR: A. Perfect, így minden más is ugyanaz marad.
OK.
És mi a?
Tehát ez egy alkalommal mi?
Ez a csillag pb.
Tehát csillag pb azt itt pb, pb pontot b.
>> STUDENT: 500.
>> EGYETEMI TANÁR: 500.
Tehát 500-szor 100.
Ez 50.000.
Hűha!
Nézd csak.
>> Diák: Miért van A & c az last--
EGYETEMI TANÁR: Sajnálom.
Diák: Oh, OK.
EGYETEMI TANÁR: Az én hibám.
Sok írás.
Mindenki jó?
Nem rossz, ugye?
Csak vesz egy kis miközben a munka révén.
Ha lebontani, megérteni, mi az egyes részek
utal to-- mint mindent ez,
yes-- lebontani a kis problémákat, és újra összekapcsolódnak
és meg tudod csinálni valami félelmetes dolog.
Itt vannak a válaszok, de ezt tettük.
Pointer aritmetika.
Ah.
A kezem minden fakó.
Így hozzáadásával vagy kivonásával int beállítja a mutató
által a méret a típusú mutató.
Ne feledje, hogy minden típus más a méret?
Szóval, mint egy dupla, vagy hosszú ideig Nyolc és int négy karakter de egy.
>> Szóval, mit akarsz csinálni ez-- egy dolog, hogy emlékezzen
csak az, hogy mennyi a mutató értéke valóban változik
függ a típusú mutató van.
Mindenki jó ez?
Tudok kitörölni?
Mi a jó?
Félelmetes.
>> Tehát, ha van néhány mutató hogy-- ez fog be-- vagyok
megy, hogy egy int pointer.
Ez tárolja ezt.
Ha azt mondaná mutató plusz egy, hogy mit fog csinálni
van, hogy fog frissíteni ez a méret egy int
mert ez a típusú mutató van.
>> C, minden nagyon szigorú és szabályozott.
A mutató int fog frissíteni az az összeg a tér int tartana.
Egy int négy bájt.
>> Tehát mi ezt alakulnak?
Te csak hozzá négy erre.
Most a mutató is be-- OK.
>> Tehát, ha ez a char és mi mutató plusz egy, mi lenne most?
Ha úgy tesz, mintha mi started-- started-- most ez 0x08.
Nézzük most azt mondják, hogy ez volt a char mutatót, és adtunk egy.
Mi lenne váltani?
Hány bájt egy char?
>> KÖZÖNSÉG: Egy.
>> SPEAKER 1: Egy.
KÖZÖNSÉG: Tehát 0x09.
SPEAKER 1: Szóval lenne kilenc.
Szóval, csak valamit, hogy emlékezzen.
Csak ha egyet, akkor nem eggyel hacsak nem egy karakter.
Ez hozzá hány byte a típus, amely azt jelenti,
ezért is van ezt az egyenletet itt.
Tehát int akkora típusának mutatót.
>> Tehát a példa itt.
y jelöltek ki, hogy az érték, 0x4, amikor nem y plusz egy egyenlő.
Mi van benne, mi x, nem változik.
Mit változás az, ami az y.
A címen tárolt y aktualizálja négy mert van négy bájt egy int
és ez egy int pointer.
>> Rendben van.
Így most van egy másik gyakorlat.
A kérdés tehát az, hogy mi fog nyomtatni.
Van ötleted?
>> KÖZÖNSÉG: száma karakterek boldog macska?
SPEAKER 1: Pontosan.
Így szeretné a húr.
Mindenki kap valamit?
Nem akarjuk járni rajta?
>> Igen, az OK gombra.
Szóval mi van here-- I így sokkal több.
Nem kell [Hallható] nevetségesen.
>> Tehát a húr itt, boldog macska.
Lovely.
Van néhány számláló mi nyomon követése.
Tehát néhány char * mutató hogy csak egyenlőre van beállítva str.
Mi ez tesz, hogy hozzárendelése néhány mutató
Az elején a húr.
Mert biztos vagyok benne, hiszen ban említik előadás,
amit adott nektek ezt adattípus nevű karakterlánc.
>> De tényleg csak húrok tömb of-- mint char *.
Ez egy mutató egy csomó karaktert hogy összefüggőek a memóriában.
Szóval ez csak azt állítja egyenlő a húr
azonosított, ahol az első karakter.
Szóval ez csak beállítás valamikor megegyezik a sor elejére.
Mindenki jó ott?
Cool.
>> Szóval ez a mi dereferencing mutató.
Szóval ez tényleg fog ad nekünk néhány érték itt,
a mi karakterlánc hogy beszélünk.
És mondja, ameddig ez nem null terminátor.
Tehát menj, amíg nem kap a végén a húr.
Frissítse mutató eggyel.
Tehát r, akkor valóban frissíteni egy minden alkalommal, mert ez egy char,
a char *.
>> Így fog átmenni.
Meg fog frissíteni.
Tehát az első alkalommal ez fut, ez lesz itt h.
Meg fog frissíteni.
>> Ez lesz az a.
Hogy lesz egy p, y, és így tovább és így tovább.
Majd frissíteni számláló.
Amikor eléri a végén, ez Csak kiírja, hogy milyen mértékben ütött.
Igen.
>> KÖZÖNSÉG: Tehát azt számít a hely, mint egy, igaz?
OK.
>> SPEAKER 1: hiszem.
Ez a question--
>> KÖZÖNSÉG: [hallható].
>> SPEAKER 1: nincs gond.
Ez az én csinálni.
Jól van, egy dolgot megérteni, hogy egy sor,
akkor is kezelni, mint a mutató tömbök mert csak
folyamatos foltok memória.
>> Szóval lehet kezelni ugyanúgy.
Tudod manipulálni őket A mutatók is.
Így ahelyett, hogy a jelen esetben a hasonló dolog
lenne array 0értéke 1.
>> De az azonos módon, hogy a karakterlánc határozza
által a kezdete, ahol az első karakter,
tömb határozza meg ahol az első eleme.
Mert mi tudjuk, mi garantált, hogy ezek a
lesznek folyamatos blokkok memória.
Ez az, ami lehetővé teszi számunkra, hogy ezt.
Tudjuk, hogy ők folyamatos blokkok memória.
>> Így ebben az esetben, a dereferencing Csak tömb, ami azt mondja,
OK, menj a kezdete a tömb, ami itt van.
Szóval lehet beállítani, hogy egyenlő egy.
És ebben az esetben, amit a tömb típus, amikor frissíti azt egy,
ez csak mint frissítése azt, hogy a következő index.
Meg tudod csinálni, mert te tudja, mi van a tömbben.
Tehát tudja, hogy mennyit kell frissítse a mutatót,
milyen címre frissíteni, hogy ilyen hogy te vagy a következő slot.
>> Tehát ez csak egy másik út Az írás array 0értéke 1
array 1 = 2, tömb konzol 2 = 3.
Ez csak egy újabb módja annak, hogy gondolni.
Azért, mert a folyamatos blokkok a memóriában,
akkor nézze meg őket sem A tömb notation--
amit én személy szerint talál easier-- de talán
meg kell manipulálni szigorúan memória címeket.
És ez az az út, amit csinálni.
Kicsit több, mint egy klassz dolog, amit csinálni
szemben talán nem az, amit te ténylegesen végre fog hajtani.
>> ÉN használ ez a 61.
Srácok valószínűleg nem kell aggódni, hogy túl sok.
De ha érdekel, 61. vesz a következő évben.
Mi vagyunk a célegyenesben srácok.
Tudom, hogy hosszú.
Dynamic Memory Allocation-- így tudjuk, hogy az egyik
dolog, amikor beszélgettünk közben az első rész együtt,
megnéztük a csere funkció, ahol volt
hatályán kívül esik a fő funkciója.
És mi is halad ezen értékek amelyek hatékonyan példányban.
>> És ha egyszer csere kész végrehajtó, csak maradt egy halom.
Ne feledje, hogy van egy verem keret csere.
A levelek és a értékeket hagyja vele.
És elmentek.
Mi nem tehetett semmit velük, és mi volt szomorú
mert nem tudjuk cserélni értékeinket.
>> De C, mint említettem, te van egy csomó hatalmat memória.
Szóval, mit tehetünk, akkor osztja a dolgokat a kupac itt
hogy marad ott, amíg mondd nekik másképp.
>> Olyanok, mint a jó gyerekek.
Ők ott maradni.
Nem hagyják.
Ők maradnak ott, amíg te mint, OK, akkor elmegy.
>> Mivel a dolgok a stack, who-- ők, mint a rossz gyerekek.
Ők csak fuss el, ha azt szeretné, ott lenni, és majd ők elmentek.
Ha nem kap vissza.
>> Így a kupac ez-- fogunk beszélni malloc és free, amely
Biztos vagyok benne, a srácok hallott az előadás.
És ez alapvetően egy módja hogy nagyon perzisztens adatokat.
Így tarthatjuk az adatokat körül, ameddig csak akar.
MHM.
>> KÖZÖNSÉG: Lehet itt a halom, és verem?
Vajon szeretnek hely, hogy a dolgokat?
>> SPEAKER 1: Tehát ők alapvetően Csak-- ők
ahogy csak utalunk a memóriába.
Szóval kupac csak helyek, ahol memóriát dinamikusan,
mivel a stack kifejezés több verem keret
amelyek jobban a központi a funkciók, amelyek ténylegesen fut.
Nem igazán van ellenőrzés.
>> A nagy különbség, akkor ellenőrzés mint a halom, ha szeretné.
Kevesebb felett a halom.
A verem függ funkciók futnak,
és a sorrendet, amely szerint azok futni, és hogy a dolgok vissza.
Mivel a kupac, mint fogjuk látni, akkor azt mondják,
OK, szeretném ezt az értéket körül, amíg én mondom másképp.
Ön nem megszabadulni tőle.
Te nem szabad felülírni azt.
Fogsz tartani körül ameddig én mondom.
Te leszel a főnök a kupac, mivel a stack-- talán ha
mint csal az utat lehet a főnök.
De nem egészen.
És ez tényleg csak emlék.
Ez csak különböző módokon Az utaló memória.
>> Cool.
Tehát azt, hogy hogyan irányítani a memória.
Ez a malloc, amely fogsz kapni a használata.
Szóval ez csak rövid memória kiosztás.
Ez minden.
Van egy csomó más jó funkciókat, amelyek alloc a végén,
és ők állnak a különböző dolgokat.
>> Tehát, ha szüksége van tároló, hogy szüksége , mint ameddig a jelenlegi funkció úgy
hogy ha a jelenlegi függvény fut el,
még mindig az adatokat, hogy kapott belőle, a használni kívánt malloc.
Ez majd inicializálni azt a kupac.
És mint mondtam, és folyamatosan mondván, akkor tartsa ott
amíg el nem mondja el másképp, ami a lényeg itt.
>> Tehát az egyik dolog, hogy észre, és ez általában nagyon fontos,
az, hogy ez sizeof szuper hasznos lehet használni
mert típusától függően A gép futsz,
lehet, hogy változó mennyiségű A memória tart.
Így mindig a használni kívánt méretétől így hogy te nem gép függő,
így a kód fut minden gépen.
>> És ez csak egy része az írás jó kódot.
Ha működik egy gépen, de nem olyan a mások,
mennyire hasznos volt a műsor?
Szóval mindig akar győződjön meg róla, és használja sizeof.
>> KÖZÖNSÉG: Tehát az, hogy mint a mérete 10 hüvelyk [hallható]?
>> SPEAKER 1: Ez a méret 10 ints.
igen.
Így mérete ints visszatér mennyit vesz egy int.
Vagy mérete char, hogyan Mennyibe kerül egy char venni.
És akkor hány blokk Az, hogy mit akar?
>> Tehát ebben az esetben, hogy akarunk valamit tudjuk tárolni a 10 ints.
És ez működni fog, függetlenül A gép, ami jó.
Szóval, hány bájt hogy valóban így van?
Gyors matek.
>> KÖZÖNSÉG: 40.
SPEAKER 1: 40.
Pontosan.
Tehát még egy nagy dolog.
Pointer vagy malloc visszatérhet null.
>> Szóval megint, mindig ellenőrizze, nézze meg, hogy vissza null
mielőtt megpróbálja vele mit csinálni.
Ha megpróbálja, és feloldási ez mutató most,
ez csak fog segfault mert elment, és megpróbálta
megérinteni null, ha nem kellett volna.
Így mindig ellenőrizze a null.
Ismét, minden, amit tehetünk.
>> Lehet, hogy vissza null.
Ez lesz vissza null, ha te vagy ki a tér, vagy bármilyen okból
futott bele memóriát bug.
Ez néha csak vissza null.
Szóval csak azt kell ellenőrizni azt.
Hogy ez az egész dia mond.
És akkor mi van itt van egy hívás, hogy szabad.
Tehát ugyanúgy, ha Fájl megnyitásához be kell zárni egy fájlt,
ha malloc memóriával, kell, akkor azt szabad memóriát.
És ti kap hogy nem igazán jó dolgok.
>> És van egy olyan program futtatásával hogy ha valaha is szivárog a memória.
De nem akar a szivárgás memória.
Ez nagyon rossz.
Csak rendetlenség a dolgokat.
>> Ez rossz, hogy nem csak mint programozás bölcs tervezés hatékonyságát.
De ez is csak ilyen A rossz a számítógép.
Tehát csak ingyenes dolgokat ha malloc őket.
>> Látjátok a szimmetriák itt.
Szuper egyszerű.
Csak szabad majd amit a mutató,
függetlenül a nevét a mutató, és azt
vigyázni fog felszabadítani az Ön számára.
Cool.
>> Aztán itt van ez.
Szóval csak lesz séta a program.
És akkor ti kész.
>> Tehát [hallható] csak fő.
Tehát néhány int * mutató.
Tehát van egy mutató hogy fog tartani ints.
És hány ints fog ez tartani?
Csak egy.
Mérete egy int.
>> Megnézzük, hogy ha mutató null, mert
van, azt akarom mondani, nem csinál semmit.
Ez rossz.
Tehát nyomtasson ki néhány hibát ki memória, a legtöbb gyakran visszatér 1,
ahogy a srácok használnak.
>> És akkor mi van itt, mi dereference a mutatót.
Tehát ez azt jelenti, megyünk tárolni valamit a hely adott nekünk.
Int * mutató, vagy malloc, vissza a címe, ahol hatályon kívül helyezte ezt a
memória az Ön számára.
Tehát alapvetően így like-- ha
gondoljon egy csomó házak a környéken
hogy el kívánja helyezni A bútorok, malloc
mint rendben van, akkor kap menni, hogy a ház három.
És ez adja a címét ház három.
>> Szóval ez most, ez mutató üzletek egy címet,
tárolja a címet a ház.
* Ptr eszközök, OK, én vagyok a házamban.
Cool.
Azt kell, hogy néhány egész.
>> Szóval kér valaki hogy az Ön bútorokat most.
Szóval egy kis int.
És mondja a mutató ahol ez a mutató.
>> És akkor ez csak nyomtat ki, a beírt bárhol.
És ismét, a referencia.
Tehát ez olyan, mint te elment a kezelésére és láttad, mi van ott.
Cool?
>> És akkor persze szabad a mutató.
Ne felejtsd el, hogy szabad a mutatót.
Ne felejtsd el, hogy ellenőrizze a null.
Ne felejtsd el, hogy szabad a mutatót.
Van két dolog, amit emlékezni ezt, vagy azt, hogy meg kell emlékezni.
Igen.
KÖZÖNSÉG: [hallható] dolog mint, hogy a char * s.
Hogy lehet, hogy soha nem szabad azokat?
>> SPEAKER 1: Hm?
>> KÖZÖNSÉG: Azok, mint a húrok?
Azt mondta húrok mint char * s, ugye?
Szóval, miért nem szabad húrok?
>> SPEAKER 1: Csak a ingyenes ha mallocing.
KÖZÖNSÉG: Ó, ha mallocing.
SPEAKER 1: Tehát malloc ingyenes két dolog
hogy mindig van együtt.
f nyitott, f zárt, két dolog meg kellett volna együtt.
E két esetben ellenőrizze a null.
Igen.
>> KÖZÖNSÉG: Tehát szabad csak így valami más
kell tárolni után ott ez a program használta?
>> SPEAKER 1: Ez csak azt mondom, OK, én végeztem ezzel.
Nem kell tartani körül.
Ellenkező esetben a számítógép Csakúgy, mint megpróbál, és tartsa ott.
És akkor can't-- fut memóriába kérdések később.
Mindig szeretne felszabadítani, mert azt mondja a számítógép, OK, én vagyok
történik ezen a helyen a memóriát.
Akkor lehet, hogy vissza számomra, hogy a későbbiekben.
Cool?
Igen.
>> KÖZÖNSÉG: Tehát használtuk% d csak mert a duplája jön vissza,
vagy miért ez-- [hallható].
>> KÖZÖNSÉG: Tudod használni% i?
>> SPEAKER 1: Használhatja% i.
Minden last minute kérdése?
Rajta.
KÖZÖNSÉG: Csak egy gyors kérdés.
Így a ptr változót, that's-- mint az int * ptr = malloc,
ez csak azt mondja, hogy az mutat egy helyet memory--
SPEAKER 1: Szeretnéd [hallható]?
KÖZÖNSÉG: --that az a méret of-- nem, ez rendben van.
De ez csak mutat egy helyet memória olyan, mint négy bájt.
SPEAKER 1: Jobb.
Így malloc mérete int mond, OK, én megyek el futni,
további négy bájt memóriát az Ön számára.
Ha azt tapasztalja, hogy a négy bájt memóriát, akkor
adja vissza a címet hol kezdődik,
és ez az, ami a tárolt a mutató, vagy ptr.
Jó.
Srácok, meg kevésbé zavaros, mint a legtöbb emberek, amikor beszélek mutató,
így érzem magam elég jó most.
>> Rendben van.
Mint mindig, nektek kell minden ütött meg pset2 évfolyamon már.
Tudom, hogy volt néhány rozoga dolgok, ha azt mondja, képlet nem érvényes
vagy valami.
Ha kapok, hogy az összes A fokozatok érvényesek az én oldalamon.
Így tudok küldeni screenshotok a fokozatok.
Csak hadd tudjam meg, illetve, ha hiányzik minden fokozat vagy valami
nem úgy tűnik, hogy van értelme.
Gyere hozzám.
>> Voltam szuper büszke rád srácok már, úgyhogy csak így tovább.
És jó pihenést a hét.
Biztos vagyok benne, fogok látni néhány Az Önnek munkaidőben.