>> JASON HIRSCHHORN: Welcome az A5, mindenkinek.
Van egy izgalmas hét áll előttünk, leginkább azért, mert olyan sok új
arcok ebben a szobában.
Ez csodálatos.
Sok van itt véletlenül, ami még jobb.
Így remélhetőleg akkor tartsa csatlakozott hozzánk.
>> Ezen a héten fogunk tölteni A nagy szakasz
felkészülés a kvíz.
Így egy a napirenden, fogunk beszélni egy kicsit a forrásokat az osztály,
hanem a vetélkedő, majd megint, költeni a nagy osztály beszéd
a kérdésekre.
Amint kész választ a kérdése van, vagy ha a kérdésre
természetes módon vezet bennünket, hogy néhány kódolás, azt van minta problémák midterms
múlt, hogy mi lesz Élőtömeg fejezet együtt, hogy az is, hogy akár más
Jó téma, hogy fedezze.
>> Tehát az első, ahogy átmentek a elmúlt pár hét, hogy emlékeztessem önöket
srácok, van egy csomó források áll a tanfolyam.
Sokan közülük hihetetlenül hasznos , mint te is, hogy
tanulmány kvíz 0, mivel ez a kedd délután.
Tehát az összes voltatok tanul egy kicsit.
>> Vannak jegyzetek és a forrás kódot, amit kell
feltétlenül nézd meg.
Nézze meg a rövidnadrág.
Nézze meg study.cs50.net.
És aztán, az alább felsorolt, számos egyéb források.
>> Ismét kvíz 0 holnap at 01:00.
Ha még nem tette meg, ellenőrizze ki a Névjegy Quiz 0 dokumentumot a
Természetesen honlapja kitalálni ahol szedi a teszt.
A kvíz indul 1:10 és ér véget 70. perccel később.
Tehát, ha megmutatod után 01:10, akkor fog kapni, hogy sokan kevesebb perc
mint 70, hogy a kvízt.
Ügyeljen arra, hogy ott időben.
Ha hosszabbító tanuló vagy más tesztelés megfontolások
Lehet, hogy nem a 01:00 holnap.
De ismétlem, ellenőrizze a Névjegy Quiz 0 dokumentumot, győződjön meg róla, hogy mikor
szedi a teszt.
Írtam 75 percig itt.
Azt hiszem, ez így van, nem a 70.
>> Ez magában foglalja az összes anyagot egy hét 0 a múlt heti előadás szerdán.
És újra, ezt a kvízt, hogy egy dokumentumot, akkor kap egy kétoldalas és a 8.
1/2 11 papírlapra, amit kap használni tudnivalókat a teszt.
Sokan, ha nem a legtöbb ember, hogy megállapította, hogy az egyetlen hasznos módja
hogy tanulmányozza a kvíz, hogy hogy készítsen tanulmányt lap, a
egy sider, saját.
Tehát nézd meg múlt is, ha láttad korábbiak.
Érje el, hogy a barátok, hogy mi ők üzembe övék.
>> De a kéz lefelé, a legjobb módja, akkor tanulmány célja, hogy menjen át mindent, és
whittle le, hogy mit kell vagy kellene nem tartozik azon lapra
papírt, mert ez csak egy nagyon hasznos módja, hogy megbizonyosodjon arról,
mész keresztül mindent, és van némi ismerete is.
A legtöbb ember, azt látjuk, még akkor is, már a papírt ül
mellettük a kvíz, ne kapcsolja hozzá, mert megint, nagyon
folyamat megy keresztül az információ segített nekik tanulni.
>> Van valakinek kérdése a kvíz 0-ra?
Van mindenkinek -
Nem fogok csinálni egy kézfeltartással.
Mindegy.
Azt akartam megkérdezni, hogy ki kezdte tanulmányozni.
De nem akarom, hogy te az összes nem emelje fel a kezét.
Szóval, mint mondtam - igen, Avi, megy előre.
>> AVI: Mi lenne hasznos dolog , hogy az egyik lapozó?
>> DIÁK: Ez rajtad múlik.
>> JASON HIRSCHHORN: kapsz használja ítélőképességét.
Hasznos dolog, hogy az egyik lapozó, Ha zavaros a nagy O
runtime különböző típusú keresések és rendezi, tedd, hogy ott a
praktikus dandy chart.
Így, ha azt kérte, hogy a kvíz, akkor nem kell, hogy megpróbálja kitalálni
ki vagy ok a runtime.
Tudod csak másolja le.
Ha megnézzük a vetélkedők múlt, sok alkalommal, ott futási idő kérdése.
Tehát, hogy lenne egy példa a jó dolog, hogy vedd fel a one-pager.
>> Egyéb jó dolog feltenni, ha zavaros, hogyan kell nyilatkozni a
funkció vagy mi a különböző részein A funkció nyilatkozatban, írja
hogy ott, a generikus és akkor talán egy példát.
Ha zavaros a mutatók, egy diagram, hogy milyen mutatók munka
talán tényleg hasznos.
Ha zavaros rekurzió, a minta rekurzív függvény ott
is bizonyítja, hogy nagyon hasznos.
Vajon, hogy adjak néhány ötletet?
>> AVI: Meg kell érteni a teljes fordítási folyamat, mint a
, hogy hogyan működik a rendszer?
>> JASON HIRSCHHORN: Everything hogy a már szabályozott lehetett
jelenik meg a kvíz.
Kérdések -
de a lényeg, néhány dolog lesz súlyozott erősen, mint mások.
Vannak dolgok jöttek fel újra és újra az osztályban, a
előadás, és a részt.
Más dolog, hogy nem jön gyakran.
>> Már sokat beszéltünk # include és -L valamit, és mik azok jelent
A fordítási folyamat.
Már beszéltünk sokat GDB, ragaszkodunk, azokat a különböző lobogók, amit használni
állítjuk össze valamit, és mi make15 például igazán
eszközök és valóban.
Mi nem beszélünk olyan sokat minden egyes lépés
A fordítási folyamat.
Még mindig beszéltünk róla.
Tehát ez még mindig valami, amit ismernie kell.
De ismétlem, mi nem lesz -
dolog, hogy jön fel gyakrabban az osztályban nagyobb valószínűséggel jön több
gyakran, és erőteljesebben súlyozva a teszt.
>> Cool.
Minden más kérdések kvíz 0-ra?
>> OK, így tettem egy listát téma a fórumon.
Mentem át a tantervet.
Végigmentem a felülvizsgálati szakaszban a Tegnap este és a diák, hogy dolgozzon ki
egy nem teljes lista a témák hogy van fedett eddig CS50
és a dolgok, hogy esetleg jelenik meg a kvíz.
Szóval nem fog átmenni minden egyes egy ilyen.
Ez lenne szükség sokkal több idő, mint mi most.
De hogy ezt ide, hogy remélhetőleg jog a memória, hogy a dolgokat, amelyek
vagy nem annyira ismerős veled.
>> És én szeretem tölteni a nagy részét részben választ a kérdésekre
ezeket a témákat, témákat, nem tartoznak ide.
Mi lehet írni pszeudo kódot.
Mi lehet írni igazi kódot annak érdekében, hogy -
Tudok válaszolni a kérdésre, és segít mindenki alapvetően megérteni
sok ilyen téma, így érezni fogja előkészített és kényelmes megy
A teszt holnap.
Így olvasd át a listát.
A remélhetőleg jöttek § néhány kérdéssel is.
Ha készen áll, emeld fel a kezed és mi lesz az induláshoz.
>> Ne feledje, a kérdés akkor, nincsenek hülye kérdések.
Azt hallottam, hogy sok.
És a kérdésekre van, hajlandó vagyok fogadni, sok más ember mind
itt ül és figyeli Online vannak is.
Így csak segíteni az embereknek a kérdéseket.
Marcus.
>> Marcus: között a verem, és a halom, van egy előre kiosztott
százalékos memória, ami definiált ez a verem, vagy a kupac?
Vagy hogyan működik ez pontosan?
>> JASON HIRSCHHORN: jó kérdés.
Megyek vissza nyom egy kicsit.
Vajon mindenki -
kérjük, hogy őszinte legyek itt.
Tudom, kérem, hogy emelje fel a keze előtt a társaik.
De vannak emberek, akik úgy érzik, kellemetlen a stack és halom
és szeretné, hogy menjen át, hogy s milyen jelent?
Emelje fel a kezét, ha -
OK.
Köszönöm.
Szóval megyek át a köteget, és A halom nagyon gyorsan, majd
beköltözik választ a kérdésre.
>> Tehát, ha kihúzzuk a dobozt, hogy képviselje memória a számítógépen, amit néhány
dolgok, amik ebben a dobozban?
Main.
A fő funkciója.
Hol fő menni?
>> DIÁK: [hallható].
>> JASON HIRSCHHORN: így fogunk tedd fő ide.
Mi más megy ebben a dobozban?
>> DIÁK: A funkciók, hogy hívja.
>> JASON HIRSCHHORN: A funkciók hogy hívjuk.
És hova mennek?
>> DIÁK: A verem.
>> JASON HIRSCHHORN: ők megy a verem.
Így fogjuk hívni ezt a dolog itt a verem.
És fel tetején, mi van a kupac.
Tehát memória nem egy doboz, mint ez.
De valójában nagyon hasonló.
Ez lesz egy csomó doboz feletti és több, attól függően, hogy mekkora a
számítógép, vagy hogy mekkora a memória.
>> Az idézet, idézet vége "alulról" a verem.
És van több dolog hogy megy a verem.
És ezek függenek a funkciók van a kódban.
Mindig van egy funkció a code úgynevezett fő, így mindig a
rész itt, a verem szentelt fő.
>> Ezek a szakaszok a verem nevezzük verem kereteket.
Ha a hívás másik funkció, mondjuk fő kéri, bináris keresési funkció,
teszünk egy keret a verem.
Pontosabban fogunk adományoz egy darab memória a
számítógépen tárolni bináris keresés helyi változók és futtatni a bináris
keresés kódot.
>> Így hívjuk bináris keresés.
Ebben darab memória, megyünk tárolja a lokális változók.
Fogunk tárolja a printf hívások.
Bármi is történik, hogy a funkció fog tárolni ott.
Bináris keresést fog végrehajtani.
Ez lesz a teljes végrehajtás.
Mi az a szó, hogy a C jelenti hogy a függvény
befejezni a végrehajtás?
>> DIÁK: Return.
>> JASON HIRSCHHORN: Vissza.
Tehát, ha látsz egy return utasítást, A függvény befejezi
ha eléri ezt.
Így a bináris keresés hit a nyereségüket.
Ez a rész a memória alapvetően felszabadul.
És a fő megy vissza a végrehajtás.
Így fő szünetelteti ahol volt, hívás bináris keresés, egy kis visszatérési értéke,
, és a végrehajtást.
Ez a stack frame eltűnik.
>> Ha hívjuk a rekurzív függvényt, amely egy olyan funkció, amely magát mint
és vége, lehet, hogy - mondjuk, nem bináris keresés rekurzívan.
Mi lehet, hogy a bináris keresés első verzió, bináris keresés két, bináris keresés
három, bináris keresés négy, bináris keresés öt.
És akkor ez az utolsó a bináris keresést öt majd nyomja meg a alapeset, és a verem
keretek megy vissza, és tartsa záró amíg vissza a fő.
Mi mehet át rekurzió egy kicsit.
De mindez azt mondani, ha hívás több funkciót egy időben,
hogy lesz-e több stack keretek verem.
>> A kupac, másrészt, akár itt nem a funkció,
nem lokális változók.
Ez a dinamikusan kiosztott változókat.
Tehát ezek a változók, amelyek lehetnek inicializált akár fő-, vagy a
funkció, amely fő hívásokat.
Bárhol a kódot, akkor lehet inicializálni.
És inicializálni dinamikusan kiosztott változó.
Mi funkció C használunk?
>> DIÁK: Malloc.
>> JASON HIRSCHHORN: Malloc.
Hívd malloc.
Kapsz egy helyet a memóriában.
És ez a hely a memória van a kupac.
És ez a hely a memória marad ott, amíg a hívás ingyenes.
>> Tehát dinamikusan kiosztott változók halom fog létezni, amíg te
szeretnénk, hogy létezik, és nem fognak menj el, amíg Ön kifejezetten
mondd meg nekik, hogy menjen el.
Hozhat létre őket egy funkciót.
Ez a funkció a stack keret eltűnik.
De ez változó is létezik A halom, amíg felszabadul,
potenciálisan a függvény neve bináris keresés, vagy bármi.
>> Tehát azok halom változókat ott , ameddig csak akarod
őket, hogy maradjanak ott.
És kap fel itt.
És akkor a következő lesz fel oda.
Tartják egyre töltött be, és maradj ott, amíg nem hívja ingyenes.
>> És lényegében a halomból és a veremből, egyre Marcus kérdésére,
egymás felé növekszik.
És ha befut egymást, akkor már használják fel az összes memóriát a
a számítógép, és a program kilép mert nincs több memória
elhagyta a használata.
A közöttük, vannak esetleg más dolog.
De a jelen persze, Nem kell aggódnia, hogy.
>> Szóval ez volt a válasz a kérdésedre.
Ne aggódj miatta.
De ez volt a hosszú választ.
Mindössze annyit kell tudni, hogy a halomból és a stack -
az egyik az alján kezdődik.
A stack nem.
A kupac van ott.
Ők közelebb egymáshoz.
>> És, ha hozzáérnek, ez a gond.
Ha elfogyott a memória.
De amellett, hogy tudjuk, hol azok, mi mind a tárolt
verem és a kupac.
Curtis.
>> CURTIS: amikor ütköznek, az, hogy a verem túlcsordulás?
>> JASON HIRSCHHORN: amikor ütköznek, ez nem verem túlcsordulás.
Egy stack túlcsordulást egy másik terület hogy mi mehet át, ha akarsz.
OK, akkor gyere vissza, hogy egy kicsit.
>> Diák: És mi az a szó a ha elérik egymást, a
verem, és a kupac?
>> JASON HIRSCHHORN: Most, ne aggódj.
Csak tudni -
Fogok válaszolni a kérdésre óra után.
Ha befut egymást, elfogyott memória, mert nincs több,
hely van.
>> DIÁK: Bocs, mi az a szegmens hiba?
>> JASON HIRSCHHORN: A szegmens hiba lehet szükség -
ez attól függ, hogy miért a szegmens hiba hívják.
Néha, a verem túlcsordulás, akkor az mondjuk seg hiba, mint a hiba.
>> Diák: És mi a dereferencing null változó?
Ez a szegmens hiba?
>> JASON HIRSCHHORN: Dereferencing null pointer -
OK, így ha van egy mutató, hogy beállított értéke NULL, mutatók, visszahívás,
store memória címek mint az értéküket.
És egy null mutató lényegében tárolása 0, akkor a 0-ik
foglalkozni a változó.
Tehát 0x, 0, 0, 0, 0, satöbbi.
Ez a 0-ik cím memóriában, hogy ez nem a mi kép, az ott
valahol, ez fenntartva a számítógép.
Mi nem szabad hozzányúlni.
>> Tehát, amikor a program végrehajtása, ha valamit akar menni a memóriába
cím 0, akkor tudja, hogy , hogy egy üres értéket.
Tudja, semmi sem ott.
Tehát, ha megpróbálja használni valami ott és kezelni valami hasonló van, vagy
akar menni az adott helyre, akkor lesz, hogy a szegmens hiba vagy hiba.
Van, hogy a kérdésére?
>> És most megyek vissza verem túlcsordulás.
A dolgok a verem, ahogy a srácok látott, hogy - hadd dolgozzon szoros
fel egy verem keret.
Lehet mindenki látja ezt?
Tehát a verem keret.
Mi megtakarítás egy tömb, mint a helyi változó ez a funkció.
Tehát mondjuk a tömb öt foltok.
Mind az öt azoknak lesznek tárolva abban a szekcióban keretben.
>> Ha elkezdjük írni túl határai ezt a tömböt -
Tehát, ha elkezdjük írni a, mondjuk, hogy ez 0-ra.
Ezek az öt indexek a mi tömb.
Ha elkezdjük írni a mutató 5, amely nem kell, ha van egy
tömb 5-ös, akkor elkezdjük írni a index 6, 7, 8, 9, kapunk Stack
Overflow hiba.
>> Általában ez nem -
akkor talán bajba ha átmegy az egyik.
De általában, akkor kap a a legtöbb baj, ha átmegy a sok
és megy eddig több mint, hogy írsz mint a feladó címét, hogy a
funkció, amelynek székhelye a a köteg alsó keretben.
>> Mert, ugye?
You - a - sajnálom.
Nem ", mert igaza van."
>> A verem keret, akkor A lokális változók.
A legalján a verem keret a feladó címét.
Ez az, ahol a függvény megy, ha vége.
És ha felülírja, hogy a visszatérő cím, akkor, amikor ez a verem keret,
amikor megy keresztül a stack keret és végrehajtása minden sorban, akkor
fog menni az új feladó címét ami írva van, hanem a
tényleges egy.
És így láttuk Egyes biztonsági rések
megtörténhet a számítógépek.
>> Tehát verem túlcsordulás, a rövid, amikor felülírja az a része a verem
kéne használni, a helyi változót kéne használni, és
különösen akkor, ha elkezd felülírás fontos dolgokat, mint a
vissza címét.
És ez az, ahol kapsz egy hiba.
Vagy talán még meg tudná kezdeni akár írásban be -
azt mondják, bináris keresés volt fölött fő.
Ha felülírta sokat, akkor lehetne írni a fő.
De általában, akkor kap egy hiba előtt Ezután, mivel a számítógép tudja
csinálsz, amit nem csinál.
Igen.
>> Diák: És mi a különbség között a verem túlcsordulás
és a puffer túlcsordulás?
>> JASON HIRSCHHORN: Buffer túlcsordulás egy általánosabb jellegű
amit én csak le.
>> DIÁK: Tehát egy verem túlcsordulás olyan Például egy puffer túlcsordulás.
>> JASON HIRSCHHORN: Pontosan.
Ez egy tömb tudunk gondolni, mint a puffer, a hely a dolgok, hogy menjen be
Ez a stack buffer overflow.
Mi is van egy halom puffer túlcsordulás.
Ha volt egy puffer, amely gyakran van egy tömb a halom, és
felülírták ezeket határokat, akkor azt van egy halom puffer túlcsordulás.
>> Túlmutat a tanfolyam, ők észlelt egy kicsit másképp.
A fordító különleges módon kimutatására minden.
De egy buffer overflow egy általánosabb típusú, amit leírt,
ami egy stack buffer overflow.
Vajon, hogy a kérdésére?
Édes.
>> Voltak egyéb kapcsolódó kérdéseket a verem, vagy a halom?
Igen.
>> DIÁK: Tudom, hogy ingyenesen húrok mert ők a halom
és nem akarod, hogy szivárog a memória.
De van, hogy kiszabadítsa a globális változók és az ilyesmi?
Vagy akkor automatikusan szabadult?
>> JASON HIRSCHHORN: Jó kérdés.
Így CS50.H hozunk létre, ez a dolog Ön hívott egy string.
A string tényleg mi?
>> DIÁK: Char csillag.
>> JASON HIRSCHHORN: A char csillag, egy mutatót egy karakter, egy mutatót
egy sor karakter.
Ez az, amit a húr.
Ezért fel kell szabadítanunk, mert getstring, amit sokat használtam -
string name egyenlő getstring -
hogy mallocs nekünk néhány memóriát a halom, majd visszatér a mutatót a
első karakter, amely karakterlánc egy char csillag.
>> Tehát látszólag, ha nem írásban ingyen bármelyik húrok
hogy már hívott eddig, akkor már szivárog fel memóriát.
Persze, még nem beszéltünk , így senki sem ütött
bajt csinálja.
De jövőre, igen.
Amikor hívja getstring, akkor mallocing helyet a kupac.
És ha nem hívja szabad később, hogy szöveg, akkor a memóriavesztés.
Ez a válasz a kérdésére?
>> Igen
>> DIÁK: Tehát, hogy nem, hogy ne használjuk ingyenes mielőtt cserébe?
Mint hatálya alá tartozik, azt hiszem, ha azt mondjuk, mint int main belül
hatálya a kód, ami az említett kapcsos zárójelek, mielőtt -
tudod, hol azt Rendszerint vissza.
Ne tegye ingyenes előtte?
>> JASON HIRSCHHORN: Tehát akkor tegye ingyen bárhova is kíván tenni ingyenes.
Mivel ezek a dinamikusan kiosztott változó, mert lehet
élnek túlmutat egy adott funkciót, ha hívja malloc egy
külön funkció, például a getstring, akkor hívja ingyen fő.
Nem kell nevezni az adott funkció
ahol malloc hívják.
De nem kell, hogy hívják főétkezések előtt visszatér.
>> És ez tényleg attól függ.
Attól függ, hogy miért malloced hogy helyet az első helyen.
Vannak, akik hívják szabad elég gyorsan.
Vannak, akik nem hívja-ig ingyenes A végén a program.
És akkor megy át és a szabad mindent.
Attól függ, hogy miért hívott malloc.
>> DIÁK: És mit mondasz ha hívják használat getstring?
Azt mondanám, hogy szabad, mi?
>> JASON HIRSCHHORN: Tehát a szintaxis ingyen egyszerűen szabad, nyílt paren, közel
paren, és a név a mutató.
Tehát, ha írsz karakterlánc nevét egyenlők getstring, teszel név itt.
Ez a neve a mutató.
És tudja, hogy szabad, hogy a memória.
>> DIÁK: Tehát, ha felszabadítja, hogy az emlékezet, a mutató továbbra is rámutat arra a helyre
a memória?
Vagy ez a mutató is kiürítették a címet, hogy mutat.
>> JASON HIRSCHHORN: Meg kell próbálni.
Meg kell kód.
Hadd jöjjön vissza, ha eljutunk kódolás, és hagyja, hogy a kód.
És ha azt szeretnénk, hogy kitaláljuk, a válasz az, hogy akkor is kód
időközben.
De ez egy nagy kérdés.
>> DIÁK: Lehetséges, hogy szabad valamit túl korán?
Szóval, még mindig szükség van, hogy a program és felszabadította, hogy memóriát?
>> JASON HIRSCHHORN: Igen.
Lehetséges, ha szabad valamit és akkor újra használni, akkor
befut egy hiba.
De ez rajtad, mert megszabadult valamit, majd felszólította, hogy később.
Szóval ez volt a programozó hibája.
De igen.
Lehet írni, hogy.
>> Van még kérdése van -
Igen.
>> DIÁK: Tehát, ha elvárják, hogy csak a szabad azt általában, mielőtt a
program véget ér, ez azt jelenti, ha a a program véget ér, és nem szabad, hogy,
hogy a memória még mindig osztják?
>> JASON HIRSCHHORN: Ha a program véget ér és elfelejtette a szabad valamit, akkor
hogy a memória osztottak az egész élettartama a program.
Amikor a program bezárul teljesen hogy a memória nem megy
hogy ott örökre.
A számítógép elég okos ahhoz, hogy tudja, hogy amikor a program bezárul, azt
kell megszabadulni minden a memória járt a program.
>> Vannak azonban olyan eszközök is futtatható a program érzékeli, ha, ha a
program befejeződött, elfelejtette Szabadítson fel memóriát.
És itt a következő probléma meg, ahol a akkor használja malloc és használata
mutatók, akkor fog futni ezen a program a programot, hogy ha,
amikor a fő visszatér, hogy volt egy kis dolog, hogy maradt unfreed.
>> Így nem fognak maradni malloced örökre a számítógépen.
Ez lenne a pazarló, mert a nagyon gyorsan, számítógépek
akkor elfogy a memória.
De ha addig, amíg a végén a programozni, és ők nem szabadult, és az
a program kilép, ez még egy probléma hogy ez az eszköz segít kezelni.
>> DIÁK: Ez Valgrind?
>> JASON HIRSCHHORN: Ez nevű Valgrind.
És te leszel -
>> DIÁK: De nem kell tudni, hogy a kvíz, igaz?
Úgy értem, ez volt beszélt egy kicsit az előadás.
>> JASON HIRSCHHORN: Tehát Valgrind az a neve, hogy a szerszám.
Tudta, mit csinál a elég a kvíz.
De még nem használta még a probléma meg, mert nem volt
a probléma meg, hogy kifejezetten foglalkozott A malloc vagy a malloc.
Szóval nem használt Valgrind még.
De nem fogja használni hamarabb mint később.
>> DIÁK: Meg tudná ismételni mi Valgrind van?
>> JASON HIRSCHHORN: Tessék?
>> DIÁK: Meg tudná ismételni, amit a célja Valgring van?
>> JASON HIRSCHHORN: Valgrind a neve -
mint a GDB segít hibakeresés a programban, Valgrind segít kitalálni, ha
a dolgok nem szabadult amikor a program bezárul.
Így lesz futtatni a programot.
És az a program kilép, és azt fogja mondani A program neve malloc ennyi
szor ennyi bájt, és csak az úgynevezett szabad ezt sokszor.
És így maradt ennyi bájt anélkül, hogy szabadult.
Vagy azt mondom, hogy már felszabadult mindent.
Szép munka.
>> DIÁK: OK.
És úgy hívják Valgring?
>> JASON HIRSCHHORN: V-A-L-R-G-I-N-D.
>> DIÁK: A kérdés mutatók.
Tehát mondjuk van n csillag x egyenlő valamit.
Ez egyenlő, amit te olyan van az, hogy mi is betenni
mi x mutat, vagy a mutató az x?
>> JASON HIRSCHHORN: Tud ismételje meg a kérdést?
Vonhatunk le, amíg mondod?
>> DIÁK: A kvíz, valóban, a akit küldött nekünk, olyan volt, mint, char
csillag igazság egyenlő CS50 sziklák, igaz?
Akkor ez azt jelenti, hogy CS50 sziklák az, hogy mi az igazság mutat?
>> JASON HIRSCHHORN: Tehát te beszélsz egy char csillag egy string, hogyan
, ami működik?
Igen.
OK.
Nézzük felhívni a itt.
>> [SIDE BESZÉLGETÉS]
>> JASON HIRSCHHORN: Tehát ez a változó lesz típusú char csillag.
Mekkora egy változó típusú char csillag?
Hány bájt?
>> DIÁKOK: Négy.
>> JASON HIRSCHHORN: Ez a négy bájt.
Hány jogok változó int típusú csillag?
>> DIÁKOK: Négy.
>> JASON HIRSCHHORN: négy bájt.
Ha ez a mutató, akkor mindig négy bájt, mert a mutatók, a
értéke egy memória cím.
És a memória címek a CS50 készülék négy bájt hosszú.
Tehát, ha hívjuk getstring, vagy amikor mondjuk, stringname egyenlő, majd
idézőjelek közé tenni a szöveget, mi üzembe -
Nos, ez egy kicsit más.
Megteszünk getString, mint a példa.
Vagy char csillag valamit megegyezik a húr.
Sajnálom, hogy nekem a példa , amit olvas?
>> DIÁK: char csillag igazság értéke "CS50 sziklák" idézőjelek.
>> JASON HIRSCHHORN: Szóval ez a csillag, ez a hívjuk ezt a változót x számára
általános célokra.
Készítettünk egy nevű változó x.
Ez a típus char csillag.
Ez a mutató a sorozat A karakterek.
Tehát itt -
>> Szóval így ez dolgozni a memóriában.
Ez tárolja a memória cím.
Ez tárolja a memória címét az első karakter a tömbben.
És amikor ezt követően a mutató, akkor,
hogy az első karakter.
>> És ha ezt olvasod ezt a dolgot, mint a egy sor, a számítógép smart
ahhoz, hogy tudja, olvassa el ezt az egészet amíg nem lesz a holtjáték 0-ra.
De ha olvasod, hogy egy karakter egy időben, így te iterációjával keresztül
ez a szöveg, akkor csak olvasni a karakter, addig, amíg nem kap
backslash 0-ra.
Ez lehet, hogy nem felelt meg kérdés, mégis.
>> DIÁK: Igen, de még nem malloced, hogy a tér
de erre mutató.
>> JASON HIRSCHHORN: Szóval nem vagyok benne biztos pontosan mit nézel,
mert nem hogy ezt kvíz.
Ezt kellett volna, hogy a hasznos erőforrás egy másik TF.
Ha létrehoz egy string a verem vagy a helyi változó, akkor az
csak sor a díjak helyett általában char csillag mutat
egy húr.
De nem tudom.
Ez lehet egy mutatót, hogy egy másik string a verem is.
Igen.
>> DIÁK: Tudom, hogy meg kell, hogy memóriát, ha a mutató
egyre kijelentette belül A másik funkció.
Szüksége van, hogy nem ugyanaz a dolog, ha ez nyilvánítása belső fő,
Ön használja belsejébe fő?
>> JASON HIRSCHHORN: Szóval igen.
Ön kijelenti, a mutató minden memória cím a memóriában.
Ez lehet a memória cím a helyi változó, bár sokszor,
az emberek nem nyilvánítja memória címek a helyi változókat, mivel mennek
el egyszer, hogy a függvény, amely Ezért általában malloc dolgokat.
De igen, akkor kijelenti, a mutató egy másik helyi változót.
Ez csak általában nem történt meg.
De vessünk egy pillantást speciális dolog után osztályban.
Igen.
>> DIÁK: Azt hiszem, ez a fajta A mi kérik.
Úgy tűnik furcsának, hogy inicializálás a mutató nem a
címet, de azt, hogy milyen úgy tűnik, mint egy értéket.
Úgy tűnik, a CS50 az, mi van benne A dolog, hogy mutatott, és
nem a tényleges cím, nem igaz?
>> JASON HIRSCHHORN: Ennyi nem ez a helyzet, mégis.
Ez nem az, hogy mi történik.
Ha kijelentik char csillag, ez egy memória cím.
Mutatók mind memória címek mutat valami mást.
Ez valami más lehet a stack, de szinte mindig van a
halom, ahogy látni fogjuk használni.
De stringname egyenlő idézőjel "GetString," azt látjuk, hogy mi
nézd át ezt, és kód.
getString szöveg nem kerül mentésre hogy a változó, vagy bármi más a húr
neve nem kerül mentésre, amely változó, mert ez nem így
mutatók működik.
Van ennek értelme?
>> DIÁK: Igen.
>> JASON HIRSCHHORN: OK.
Remélhetőleg, ez nem volt zavaró senkinek.
De ha igen, akkor nézd meg újra egy kicsit, mert mi valóban megy
kódolni valamit, ami remélhetőleg dolgozni, húrok, és segít úgy érzi,
kényelmesebb velük.
>> Más kérdés az ezekhez kapcsolódó témákat, illetve más téma, hogy
Teszek vissza?
És -
most.
Igen, Alden.
>> ALDEN: Tehát ez teljesen független, de mi csak megy át
nagyon gyorsan, amit tudnunk kell, hogy a különbség a 32 és a
64 bites gép?
>> JASON HIRSCHHORN: Igen.
Tehát 32 bit, hogy hány bájt?
>> ALDEN: Ez a négy bájt.
>> JASON HIRSCHHORN: Ez a négy bájt.
És 64 bit, hogy hány bájt?
>> DIÁK: Nyolc.
>> JASON HIRSCHHORN: Nyolc bájt.
Tehát még egyszer, nyolc bit egy bájt.
A CS50 készülék 32 bites gép.
Így a memória címek négy bájt hosszú.
Vannak 2 32 memória címeket.
0-2 a 32 mínusz 1.
És én nem vagyok biztos, de ez talán a körét, amit meg kell
tudja, egy 32 bites gép, hogy az emlékezet címek, ismét négy bájt hosszú,
és ez a maximális összeg memória címeket.
>> Továbbá, adattípusok -
ez lehet valami olyan jól, hogy érdemes megjegyezni.
Akkora, mint egy adattípus függ A gép éppen dolgozik.
Tehát egy karakter, egy karakter, az, hogy hogyan hány bájt a mi CS50 készülék?
Egy byte.
És ez tényleg egy bájt, mint továbbá a 64 bites gép.
>> És a legtöbb adattípusok ugyanannyi bájtok mindkét gépen.
De néhány adattípusok más lesz mindkét gépen.
Szóval ez lenne esetleg a egyetlen dolog, amit tudnod kell.
>> De még ez, azt hiszem, túl a határokat -
Szinte biztosra veszem, ha visszatekintünk A régi vetélkedők, azt mondja, feltételezzük,
kódolási probléma, amit használ 32 bites gép.
De vannak, hogy együtt haladjon, hogy Ha esetleg érdekel, vannak
adattípusok, hogy az azonos méret minden gépen.
>> Ha láttál valami hasonló uint32_t, akkor lehet, hogy
Nem láttam, hogy az.
Ez az adat típusát.
Ez azt mondja, hogy 32 bit nem számít mi ez a gép be van kapcsolva.
Tehát, amikor az emberek írásban hordozható kódot, akkor valószínűleg nem fogja használni ints.
Ők inkább használja ezeket az egyéb adatok típusok, hogy tudják ugyanaz lesz
méret minden egyes gépen.
Madhu.
>> Madhu: Volt egy kérdés A fordítási folyamat.
Tehát, ha írsz egy programot, amely könyvtár, mint a CS50, vagy valami
így, tudom, hogy a könyvtár kell, egy bizonyos ponton, hogy
össze és kapcsolódik be
De mennyi az, ami történik közben összeállítása a program?
Milyen része, hogy a könyvtár a folyamat fordul elő, amikor
összeállításakor a saját programot?
>> JASON HIRSCHHORN: Akkor menjünk át általában a következő lépéseket foglalja ezt a folyamatot.
Írja meg. C file.
Az Ön. Ac fájlt, # include a fejléc könyvtárak, például cs50.h.
Mit jelent az, hogy az éles tartalmazzák sorban azért, hogy a programot?
Akchar.
>> AKCHAR: Hozzáteszi, a prototípus a funkciókat a fejléc
fájlokat a könyvtárakban.
>> JASON HIRSCHHORN: Pontosan.
Hozzáteszi, ezek a függvények prototípusai a kódot.
Tehát, amikor a kód van fordítva A korai szakaszban a fordító tudja
hogy ezek a funkciók valóban létezik, és hogy valahol azokat meghatározott.
Az. H fájlok nem tartalmazzák a meghatározások ezeket a funkciókat, vagy hogyan
ahol ténylegesen dolgoznak.
Cs50.h csak olyasmit tartalmaz, hogy azt mondja: getstring egy igazi dolog,
megtörténhet.
És standardio.h mondja printf van egy igazi dolog, ami történhet.
>> Tehát a C nyelv ezzel. Fejléc fájl kerül vált néhány
géppel olvasható kód, amely végül lesz kapcsolva bináris
kód, 0 és 1-es.
És ez a kód, hogy végül kerül végrehajtásra.
A-l CS50 sor - például ha írsz csenget -
és akkor többek között-l CS50, beírt, hogy be
És látod, hogy.
Amikor írsz, hogy, akkor látni, hogy line up itt.
És látni fogjuk, hogy a második, amikor mi kódot, vagy később, amikor kódot.
>> De az-l CS50 online csinál valamit Egy kicsit más, mint
Az # include cs50.h.
Mit jelent, hogy a-l CS50 vonal csinálni?
Avi?
>> AVI: Azt akarom mondani, hogy összeköti A könyvtár a funkció
hívja, mint a. o fájlokat.
>> JASON HIRSCHHORN: Tehát nagyon szoros, ha nem spot-on.
A-l CS50 azon a bináris fájlt és egyesíti azt a bináris fájl.
Tehát cs50.h, nincs értelme fordult cs50.h a C nyelv bináris minden
egyes alkalommal, ez használt.
Ez lenne butaság, mert az lenne hulladék sok időt.
Így már össze és vált egy futtatható.
És most ez lesz egyesíteni a fájl végén.
Így azok, 1-es és 0-mennek egyesíteni Ön is
és 0 a végén.
Tehát most akkor valójában a tényleges 1 és 0, amely meghatározza, hogyan getstring,
például működik, vagy hogyan printf, például működik.
>> És további információkat, van egy rövid fordítók hogy Nate ad, hogy
akkor nézd meg, hogy megy át ezeket a lépéseket.
De -
Igen.
>> DIÁK: Vajon mindig. O fájlok amikor már a könyvtárban formában,
készen kell egyesíteni, kapcsolódik - mint a ők a bináris kódot?
>> JASON HIRSCHHORN: OK.
Mi -
>> Diák: Van, hogy minden esetben a A könyvtárak, ha összekapcsolják őket?
>> JASON HIRSCHHORN: Igen.
Tehát ott van. S kép, ami lehet gépi kód, amelyet akkor is lehet
rejtélyes neked.
Önnek nem kell aggódnia azoknak.
De általában, igen, akkor majd legyen. o fájlok kész.
>> DIÁK: Tehát, ha hajó könyvtár, nem csak a hajó
a. h és. o?
Nem hajó a. C vagy a. S.
>> JASON HIRSCHHORN: So -
és ez ebben a rövid is, ha úgy tűnik, hogy ezt az információt egy jön
kicsit gyorsan.
De a rövid a fordító beszél erről is.
Ha a hajó egy könyvtárat, ha a hajó a. h, a header fájlt, azok
funkció prototípusok, és az 1-es és a 0-k, ennyit meg kell adni.
Nem kell adni, hogy az funkció, a. c file.
Mivel a pont az absztrakció, vagy a pont API-k, a lényeg ebben az SPL,
A Stanford hordozható könyvtár, ez az Ön számára, hogy nem kell aggódnia, hogy az új
GRect működik, vagy hogyan mozog működik, vagy hogyan adjunk működik.
Mindössze annyit kell tudni, hogy add egy olyan funkció, amely akkor
használható, és ez teszi ezt.
Szóval tényleg nem kell tudni, hogyan ez a C nyelven írt Csak azt kell
tudja, itt van a funkció, amit igen, és itt van az 1-es és 0
ha szeretné használni őket.
>> Cool.
Egyéb kérdés a fordítók és egyéb témákról a fórumon?
>> DIÁK: Nekem van egy kérdés, végrehajtási rekurzív függvények.
A kérdés rekurzió.
Volt egy olyan érzésem, hogy jön fel.
Úgyhogy gyorsan megy át rekurzió egy speciális
Például egy faktoriális függvény.
Mivel ez egy példa, hogy Gyakran merül fel, vagy használnak
hogy bemutassa rekurzió.
>> Tehát a "4!" olvassa a 4. faktoriális.
És mit jelent 4 faktoriális jelent?
Mit akar ez csinálni?
Hogyan számítjuk 4 faktoriális?
4-szer 3-szor 2-szer 1.
>> Tehát egy másik módja, hogy írjon 4. factorial az, hogy írni ezt.
4-szer 3 faktoriális.
Mivel a 3 faktoriális van 3-szor 2-szer 1.
Így 4-szer 3 faktoriális 4 szer 3-szor 2-szer 1.
Ezért faktoriálisa nagy jelölt rekurzió, mert
Nyilvánvaló, hogy van valami, ami történik, újra és újra és újra a
kevesebb a dolgokat, amíg elérjük a végét.
Mikor éri el az 1, 1 faktoriális 1 lehet.
Nem lehet ennél jóval többre.
0 faktoriális is meghatározni, mint 1.
Tehát, amikor már az 1 vagy 0, akkor a végén, és akkor
elindultunk vissza.
Tehát, ha azt akartam írni egy rekurzív funkció kiszámításához a faktoriális,
fogunk írni néhány pszeudokódját az, hogy most.
Mielőtt írni, hogy pszeudokódja -
Adok nektek egy pár percig írni a pszeudo kódot, vagy csak azt gondolom,
róla - van két dolog, minden rekurzív függvény szüksége.
Mi ez a két dolog?
>> JACK: Meg nevezi magát.
>> JASON HIRSCHHORN: Noah?
Ó, Jack.
Rajta.
>> JACK: Meg nevezi magát.
>> JASON HIRSCHHORN: Tehát egy rekurzív funkciót kell rekurzív hívás, a
hívás is.
Ez az egyik.
És mi a másik dolog?
>> JACK: alapesetben.
>> JASON HIRSCHHORN: alapesetben.
Az alapeset az, hogy itt van az, amikor megállunk.
Tehát a függvény hívódik.
Az alapeset az első.
Azt akarom tudni, ha a végén.
És ha nem a végén, akkor hogy a rekurzív hívást.
És végig ezt a funkciót ismét, ellenőrizze az alapeset újra.
Ha nem a végén, hogy a Egy másik rekurzív hívás
satöbbi, satöbbi.
>> Ezért rekurzív függvények mindig Szükségünk van azokra alap esetben és a
rekurzív hívások.
Ha nem rendelkezik a rekurzív hívást, nem lenne rekurzív függvény.
Ha nem egy alapeset, akkor megy örökké, és
nem lenne vége.
És az alapeset mindig első, mert akkor mindig szeretné ellenőrizni
ha a végén az első.
Szóval mielőtt némi pszeudokódja, miért nem egy percig gondolkodni
hogy egy rekurzív faktoriális függvény írnának?
>> Is, annyi, mint te csinálsz, az írás ki egy ív papír
mit kell majd ezt a kvízt holnap.
Így valószínűleg jó gyakorlat, hogy a arról, hogy a kódot írsz
le a papírlapra -
vagy meg tudod csinálni ezt.
Tudod, hol a pontosvessző van.
Emlékszel a szintaxis.
Mert nem kell tudnia, hogy a fordító mondani hibát.
>> Továbbá, e vonalak mentén, holnap, amikor a Ön kódolási probléma, ha
rohant az idő, vagy ha nagyon zavaros, hogy hogyan kéne
írni az adott dolog a C, a megillet, hogy írni pszeudo-kód
vagy írjon megjegyzéseket is.
Mert van részlegesen elismerheti a sok a kérdés a kvíz.
Szóval, lehet, hogy rohant, vagy talán csak szabad összekeverni.
Írás a megjegyzéseket, vagy pszeudo-kód gyakran módon, hogy
kaphat részleges hitelt.
>> Tehát ne hagyja valamit üres a kvíz.
Nincs szankciók amivel a dolgok be
Sőt, amivel a pszeudo-kódot vagy észrevételeket fog segíteni a gréder
kitalálni, ha valóban tudja, mi te beszélsz, és talán díjat
néhány részlegesen elismerheti ezt.
>> Szintén végig ezeket a sorokat, olvashatóan.
Ha nem tudjuk igazán, hogy mit írsz, nem fogunk hívni
éjfélkor holnap szám ki, amit írtál.
Mi csak megy, hogy vegye le pontokat.
Írja meg egyértelműen, mi is halljuk, vagy inkább, tudjuk olvasni, amit írtál.
>> És ha azt mondja, két mondat, ne írj egy bekezdést.
Kövesse az utasításokat.
Írja meg egyértelműen.
Írni és ezeket az észrevételeket, vagy pszeudokódját kérdésekre, amelyek
díjat részlegesen elismerheti.
>> OK, menjünk faktoriális.
Tehát van egy függvényt faktoriális.
Ha én tényleg írni ezt a C-ben mit kell tenni, mielőtt a nevet
A funkció?
A visszatérési típus, amely ebben az eset, akkor adja meg int.
És akkor belül a kapcsos zárójelek, a mi megy benne a kapcsos zárójelek a
egy funkciót?
>> DIÁKOK: Argumentum típusát.
>> JASON HIRSCHHORN: A érveket.
Tehát faktoriális valószínűleg hogy egy érvet.
Ez valószínűleg csak akkor kerülhet egy érv.
És azt mondom, hogy elviszem egész úgynevezett x.
És ismét, amikor az írás a prototípusa egy funkció vagy írásban funkció
a kódot, mielőtt azt definiálta volna, akkor írni az adatokat típusát és nevét
hogy a változó ezt a funkciót csak.
Így adja át néhány számot ebbe az funkciót, akkor az a továbbiakban mint x
belsőleg.
>> Megvan a faktoriális függvény.
Szükségünk van két dolog, a alapeset és a rekurzív hívást.
Mi az alapja esetében factorial?
Valaki, aki azt írta, hogy ki és ki nem beszélt még, hogy mi az alap
esetében faktoriális?
>> DIÁK: Ha n kisebb, mint 2 vissza 1.
>> JASON HIRSCHHORN: Ha az n kevesebb, mint 2 vissza 1.
Szeretem ezt, mert gondoskodik a 0 és 1.
Tehát mi nem x <2 vissza 1.
Ha kap telt 0, ha kap telt el 1, ez a funkció
azonnal vissza 1.
Ha kap telt el néhány nagyobb szám vagy egyenlő, mint 2, megyünk
megvan a rekurzív hívást.
>> És hogyan fog ez működni?
Lehet valaki, aki dolgozott ezen a aki nem beszélt még nekem a
rekurzív hívás ezt a funkciót pszeudokód?
Ha kap telt el a számot x és ez nagyobb, mint 2, mi
akarunk csinálni?
Mi is példát írt oldalon, hogy lehet, hogy kapsz egy tippet.
>> DIÁK: Hívja x-szer faktoriálisát x mínusz 1?
>> JASON HIRSCHHORN: Pontosan így van.
Megyünk vissza x-szer faktoriálisát x mínusz 1.
És, bár én írtam fel, alapvetően, hogy mit mondott az angol,
ez a faktoriális függvény lesz megint hívott.
Ez lesz végre az x mínusz 1.
Nem lesz visszatérni néhány egész szám, akkor majd szorozzuk a két
együtt, és ez az érték lesz visszatért bármi hívják ezt
faktoriális függvény, ami egy másik példánya
ez a faktoriális függvény.
>> Annak érdekében, hogy egy példa egy rekurzív funkció, egy nagyon
egyszerű rekurzív függvény.
De a legtöbb közülük, mint ez.
Ha szeretnél egy jó rekurzív kihívást a kvíz, próbálja kódolás
bináris keresés rekurzívan.
Mert ha igen bináris keresés probléma meg három, akkor valószínűleg nem is
iteratív egy while ciklus.
>> De ez is lehet írni rekurzívan.
Fogsz kell írni a saját külön funkció, amely némi
különböző parancssori - vagy Nem parancssori argumentumok, néhány
más csak a rendszeres érveket.
De meg tudná írni bináris keresés rekurzívan is.
>> DIÁK: Tehát akkor is írt, ahelyett, hogy x mínusz 1, akkor
volna is írt x mínusz mínusz, vagy ha volna
írásos mínusz mínusz x.
Lehet csak magyarázni nagyon gyorsan, hogy miért ezek lennének a különböző dolgokat,
mint mi a különbség a között x mínusz mínusz és a mínusz mínusz x?
>> JASON HIRSCHHORN: Nem, nem vagyok megyek bele.
De én beszélni veled után osztályban. x mínusz mínusz, mínusz mínusz x
csökkentse x 1.
De mégis egy kicsit másképp.
De én nem akarok belemenni.
További kérdések a rekurzió vagy ez a funkció?
Ez nem is igazán pszeudokódja.
Ez alapvetően a kódot C leírná ezt.
>> OK, minden más kérdés a téma itt?
Igen.
>> DIÁK: Nekem van egy gyors lista lebegőpontos és a pontosság.
>> JASON HIRSCHHORN: Floating pont és a pontosság.
Lehet valaki nagyon gyorsan adj egy lepusztult
lebegőpontos és pontosság?
Mindannyian meg kellett tennie ezt a probléma meg, szóval minden
ismeri.
Vagy talán nem mindannyian.
Valaki?
Adj egy kezdtek helyszínen.
Lebegőpontos és pontosság.
Mi a gond?
Igen.
Victoria?
>> Vanessa: Vanessa.
>> JASON HIRSCHHORN: Vanessa.
Bocsánat.
>> Vanessa: Csak véges számú A számok is képviselteti
mert te egy, a mi az esetben egy 32 bites rendszer.
Szóval ilyen van, hogy teszik ki néhány számot.
>> JASON HIRSCHHORN: Ennyi pontosan így van.
Vannak csak egy bizonyos mennyiségű számok is képviselteti magát.
Ha szaporodnak két nagyon nagy számban, talán túlcsordulás az összeg
terek meg kell képviselni egy egész szám.
Ezért néha egy hosszú, hosszú helyett int.
Ez több helyen.
Hogy fér egy nagyobb számot.
>> A lebegőpontos pontosság köze van , de azt is köze van a
tény, hogy a decimális számok nem mindig képviselt.
Bocsánat.
Hadd tegye ezt vissza.
A decimális szám 1.0 nem mindig képviselte, mint amit elvár,
1,000000000.
Néha képviseletében a 1,000000001 0,999999999 vagy.
Lehet, hogy még 89 dobni valahol.
Tehát azok decimális számok nem képviselte pontosan olyan, mint akkor,
várják tőlük, hogy képviselteti magát.
>> Így a probléma meg -
volt kettő? -
probléma meg két, ahol foglalkozott lebegőpontos számok, ha azt akartuk,
őket, hogy képviselje pontosan mit akartunk őket, hogy képviselje, a szám
fillérekért, vagy a számos cent, megszorozzuk őket 100-zal.
Mi lekerekített őket.
És akkor vágjuk le mindent mögött a tizedes pont.
Ez volt annak érdekében, hogy azok valóban egyenlő pontosan mit akartunk
őket, hogy egyenlő.
>> Mert ha veszel valamit, ami úszó, és kapcsolja be egy int, akkor
vágja le mindent a jobb a tizedes pont.
Mert van valami lebegőpontos pontatlanság, 100.000 lehet
képviseletében a 99,999999999.
És ha csak vágva mindent A jobb azonnal, fogsz
hogy rossz számot hívott.
Igen.
>> DIÁK: Volt egy kérdés a casting.
Milyen sorrendben jelent ez fordul elő?
Ha megtenném úszó, konzolok, 1 osztott 10, csinál 1 osztva 10,
akkor kap 0,1, majd kapcsolja be a float?
>> JASON HIRSCHHORN: Ha úszó 1 osztva 10 -
>> DIÁK: Igen, majd egyenlő -
Nos, ez lenne normális hogy azt egyenlő -
Igen.
Azt szeretnénk, hogy ez egy úszó, igaz?
>> JASON HIRSCHHORN: OK, megyünk használni, hogy segue be kitalálni
a választ ezekre a kérdésekre a kódolás.
Mert akkor valószínűleg egy csomó Ezen perc kérdéseket, és egy jó módja
azok megoldására keresztül kódolás.
Így fogjuk kódolni ezt most, majd fogunk visszamenni, és
kódot a kérdés, hogy van.
>> Tehát az első sorban -
Nem kellett volna írni, hogy - ami Az első dolog, amit akarok, ha azt
nyit egy új fájlt a gedit?
>> DIÁK: bele.
>> JASON HIRSCHHORN: bele mi?
>> DIÁK: CS50 könyvtár.
>> JASON HIRSCHHORN: OK.
Mi mást is tartalmaz?
Mi csak lesz, hogy ellenőrizze, mi történik ha öntött valamit úszó.
De mit kell felvenni, ha vagyunk fog írni egy C program?
>> DIÁK: Standard I / O
>> JASON HIRSCHHORN: stdio.h.
Igazából nem kell, mert ez program cs50.h, bár ez
mindig segítőkész, hogy tartalmazza azt.
De nem mindig kell stdio.h.
>> DIÁK: A kódolás C?
>> JASON HIRSCHHORN: A kódolás C.
>> Szóval mentse el ezt. C file.
Kapok néhány szép szintaxis kiemelést.
Írtam üres belül fő.
Mit jelent érvénytelen jelent?
>> DIÁK: Nem vállal semmilyen parancssori argumentumok.
>> JASON HIRSCHHORN: Void jelenti, ebben a esetben fő nem vállal semmilyen
parancssori argumentumok.
Más esetekben, az azt jelenti, a függvény nem veszi parancssori argumentumok.
Vagy a funkciót, ha én írni érvénytelen main (void), hogy azt mondaná Main
nem tér vissza semmit.
Tehát üresség csak nem jelent semmit.
Mit írok, ha én is hogy parancssori argumentumok?
>> DIÁK: int ív c karakterlánc arc v
>> JASON HIRSCHHORN: int argc karakterlánc argv.
Igaz ez?
>> DIÁK: Ez char csillag argv zárójelben.
>> JASON HIRSCHHORN: Szóval lehet írni karakterlánc argv zárójelben vagy char csillag argv
zárójelben, de szükség van a zárójelben.
Mivel argv tömb A vonósok, emlékszem.
Ez nem csak egy húr.
Tehát karakterlánc argv van, itt Egy karakterlánc ARGV.
Karakterlánc argv zárójelben, itt egy sor húrok.
Így int argc karakterlánc argv konzolok lenne valami, amit
valószínűleg írni.
>> Így akarta menteni az egész?
>> DIÁK: Igen, egész.
Vagy egy úszó.
>> JASON HIRSCHHORN: Egy úszó?
Mint úszó x értéke 1 osztva 10-zel.
>> JASON HIRSCHHORN: OK.
Hogyan nyomtatható ki egy úszó printf?
Mi az?
>> DIÁK:% f.
>> JASON HIRSCHHORN:% f.
Mi az egész?
d vagy i.
Mi az a szöveg?
>> DIÁK: s.
>> JASON HIRSCHHORN: s.
Hogyan kap egy új sort?
>> DIÁK: Backslash n.
>> JASON HIRSCHHORN: Mit vissza ha a fő fut helyesen?
>> DIÁK: 0-ra.
Nem kell írnom ezt a vonalat, igaz?
>> Diák: Nem
OK, nem fogunk írni, akkor.
Mindenki tud olvasni?
Úgy néz ki, egy kicsit kicsi.
Lehet mindenki látja, vagy kell Azt, hogy ez nagyobb?
Azt hiszem, a kamera, mi megpróbáljuk ez egy kicsit nagyobb, mégis.
>> JASON HIRSCHHORN: Ha azt akarom, hogy ezt . C fájl egy futtatható, milyen
írhatok?
>> DIÁK: Legyen teszt.
>> JASON HIRSCHHORN: Tessék?
>> DIÁK: Legyen teszt.
>> JASON HIRSCHHORN: Legyen teszt.
Arról beszélgettünk, ezen a vonalon korábban.
Csenget.
Mi csenget?
A név a fordító.
Mi ez a sor?
>> DIÁK: határozza meg, hogy fel a használatára GDB.
>> JASON HIRSCHHORN: Készletek fel használati GDB.
Ez a sor, mi az?
>> DIÁK: A forráskód.
>> JASON HIRSCHHORN: Ez a forrás fájlt, a. c file.
Mi a következő két sort csinálni?
Vagy a két nem sorokat.
>> DIÁK: A név azt tesztelni.
>> JASON HIRSCHHORN: Tehát a kötőjel o azt mondja, nevezd meg valamit másképp.
És itt nevezni teszt.
Ha nem volt, hogy az, mi lenne nevezni ezt?
>> DIÁK: a.out.
>> JASON HIRSCHHORN: a.out.
Mit tesz ez?
>> DIÁK: Linkek a matematikai könyvtár.
>> JASON HIRSCHHORN: Összeköti a matematikai könyvtárban.
Nem tartalmazza a matematikai könyvtárat, de a mivel ez annyira gyakori, hogy már
írásos make, hogy mindig is a matematikai könyvtár.
És hasonlóképpen, ez magában foglalja a A CS50 könyvtár.
>> OK, így ha bővítjük, most már van végrehajtható nevű teszt.
Hogy végrehajtani, írok tesztet.
Látom, hogy a lebegőpontos, mint várható volt, egyenlő 0-ra.
Van, hogy az -
így -
>> DIÁK: Akkor, ha teszel float most, mint te öntött azt float -
>> JASON HIRSCHHORN: öntött Az 1-től a float?
>> DIÁK: Nem, a leadott teljes dolog -
igen.
Ha csak nem, hogy lenne teszik 0,1?
>> JASON HIRSCHHORN: OK, nagyon gyorsan, 1 osztva 10, ezek
egészek van osztva.
Tehát, ha osztani egészek, ők 0, és te megtakarítás, hogy 0 a
lebegnek, mert a slash csak egész osztás.
Akkor most mi fordult valamit egy úszó.
>> Nézzük meg, mi történik.
Majd, hogy teszt.
Most azt látjuk, hogy, hogy a perjel nem volt egész osztás, ez lebegett
pont részlege.
Mert az egyik érveit már leadott egy úszó.
Tehát most azt mondta, kezelni ezt a divízió, mint mi dolgunk
lebegő pontokat, nem pedig egész számok.
És így megkapjuk a választ várunk.
>> Nézzük meg, mi történik -
hoppá.
Ha akartam nyomtatni több decimális foltok, hogyan tudom ezt megtenni?
>> DIÁK: Point pont f, vagy annyi tizedes, amit akar.
>> JASON HIRSCHHORN: Szóval nyomtatni 10. decimális foltok.
És most hogy mi vagyunk egyre furcsa dolgok.
És hogy megy vissza a kérdésre a lebegőpontos pontatlansággal.
Van furcsa dolgok tárolt itt.
>> OK, ez azt a kérdésére?
Mi mást akarsz kódolni gyorsan?
>> DIÁK: Én csak azt akartam, hogy függetlenül attól, Nem, ha felszabadul egy kis mutató,
hogy ez a mutató még mindig tárolja ez a címe, mi lett volna
rámutatva, hogy korábban.
>> JASON HIRSCHHORN: OK, így csináljuk.
Char csillag ptr, ez létrehoz egy változót úgynevezett ptr típusú char csillag.
Hogyan írhatok malloc?
Alden?
>> ALDEN: Csak malloc.
De aztán azt, hogy mérete, és a Ebben az esetben, azt hiszem, azt
lehet mutatva char.
Így lenne char.
>> JASON HIRSCHHORN: OK, így több általánosságban, Inside -
nézzük szerkeszteni.
Belül malloc, szeretné, hogy a számot byte-ok a kupac.
Általában, amit láttunk, hogy mi vagyunk csinál megyünk malloc
húrok, például, vagy tömbök egész.
Tehát, ha azt akarjuk, 10 egész, vagy 10 karakter, 10-ad nekünk 10.
Aztán mérete karakter adna nekünk, hogy mérete karakter, ami
ebben az esetben 1 bájt.
Kapunk 10 byte.
Ha volt, hogy írni mérete int, ami nekünk 40 bájt.
>> Tehát még általánosságban, belsejében malloc a bájtok száma kívánt.
Ebben az esetben, mi megy 1 byte.
Ami úgy tűnik, mint egy furcsa használata A malloc, de a mi
célokra van értelme.
Tehát ott van az.
>> Fogunk hívni ingyenes.
Mi megszabadulni tőle, és használjuk ptr újra.
És mit akar ellenőrizni?
>> DIÁK: Csak azt akartam, hogy ellenőrizze, hogy vagy sem, van-e valami
belsejébe.
>> JASON HIRSCHHORN: Szóval, hogy rámutatott, hogy semmit?
>> DIÁK: Igen, pontosan, akár ez még mindig egy memória cím.
>> JASON HIRSCHHORN: Szóval azt akarod, lehet ellenőrizni az érték PTR?
>> DIÁK: Igen, pontosan.
>> JASON HIRSCHHORN: Mit írja ide Ha azt szeretné, hogy ellenőrizze az érték a
pont -, ami van, Jordan azt mondta, az érték?
Vagy mi van benne tárolni PTR?
>> DIÁK: A memória címét.
>> JASON HIRSCHHORN: A memória címét.
Tehát, ha írok csak ez, akkor az adja meg az értékét ptr.
És hogyan tudom kinyomtatni a memória cím?
Mi az a formátum string a memória-cím?
>> DIÁK:% p.
>> JASON HIRSCHHORN:% p.
% S egy string.
% P a mutató.
Igaz ez?
Így van.
Tehát ptr értéke -
még mindig van benne valami.
Ez valószínűleg egy sokkal érdekes kérdés.
Mit jelent, hogy a vonal nem?
>> DIÁK: Seg hibák.
>> JASON HIRSCHHORN: Mi az?
>> DIÁK: Azt hiszem, szegmens hiba.
>> JASON HIRSCHHORN: Hm?
>> DIÁK: azt hiszem, ez Seg hibája.
>> JASON HIRSCHHORN: Tehát ez a sor A kód, csillag PTR, milyen
ez a csillag jelent?
>> DIÁK: tartalma.
>> JASON HIRSCHHORN: Igen.
Menj, hogy a tartalmát.
Tehát ez fog menni a memória cím és ott adnak nekem.
Régebben% c itt, mert a karakter tárolnak.
Így fogunk menni, hogy a címen Most láttam - vagy ez lesz valószínűleg a
kicsit más ez a ideje, hogy a program futtatásához.
De megyünk arra a címre amiről tudjuk, még mindig létezik
és nézd meg, mi van ott.
>> Így nem Seg hibája.
Csak nem ad nekünk semmit.
Lehet, hogy valóban adott nekünk valamit, csak nem látom.
És hogy megy vissza, ezt az elképzelést -
és mi nem lesz, hogy túl sokat ezt, mert ez túl
hatálya a tanfolyam.
De beszéltünk itt, ha túllépett a tömb
1, akkor lehet, hogy nem bajba.
>> Néha, amikor csak menj ki 1, csinálsz valamit rosszul, és
Bajba kerülhetek.
De nem mindig bajba.
Attól függ, hogy mennyi az egy rossz dolog, nem, fogsz bajba.
Ami nem azt jelenti, hogy hanyag a kódot.
De ez azt jelenti, a program nem Mindig kilép, akkor is, ha valahol
akkor nem kellett volna menni.
>> Egy jó példa erre, a sok emberek a probléma meg 3, amely
15 volt, nem ellenőrizte a határait a fórumon.
Szóval balra nézett, látszott, hogy a jobb, látszott, hogy a felső, nézett
az aljára.
De nem nézze meg, ha a felső valójában lesz a táblán.
És egy csomó ember, aki csinálta, és kiderült, hogy, a programot dolgoztak
tökéletesen, mert amikor az igazgatóság a volt a memóriában, ha elment egy
fölötte vagy ellenőrzik, hogy a memória cím, nem volt semmi
különösen borzalmas benne, így a program nem volt
fog kiabálni veled.
>> De akkor is kell pontot levonni, ha ha nem ellenőrzi, hogy, mivel
csinálnak, amit nem kéne csinálni, és akkor lehetett volna
bajba.
Esélyek, mégis, akkor valószínűleg nem.
Tehát ez az, hogy megmutassa, hogy igen, akkor mindig megy ez.
És mi nem kapok baj ebben az esetben.
Ha próbáltam csinálni, olvassa el a következő 100 karakter, mi lenne
talán bajba.
És tudod kódolni olvasó a következő 100 karakter, ha azt szeretné, csinál valami
egyfajta a hurok.
Igen.
>> DIÁK: Mivel mi voltunk hozzá, hogy helyet a tényleges érték, akkor nem
valóban látni semmit.
Ha megpróbáljuk azt a beállítást, hogy egyenlő, mint a C, vagy valami?
>> JASON HIRSCHHORN: jó kérdés.
Hogyan tudom beállítani, hogy az értéket -
milyen kódsor írhatok on-line Hét csinálni, amit mondott?
>> DIÁK: Star ptr értéke egyetlen Idézet c véget idézőjel.
>> JASON HIRSCHHORN: Tehát ez az elhelyezés egy karakter, c, ezen a helyen,
mert megint, hogy a csillag azt jelenti, menj oda.
És amikor használjuk a bal oldali értékadó operátorral, hogy egyenlő
jel, mi nem fog kapni, hogy értékét annyira, ahogy ezt az értéket.
Most lássuk, mi történik.
>> Azt hogy ott valami és ott volt.
Mi úgynevezett szabad.
Néhány dolog talán történt A kupac.
Tehát nem létezik többé.
De ismétlem, mi nem kap bajba oda.
>> Én ezt ki kódot, hogy bemutassa hogy sok ilyen
kérdés, hogy van, ők nagyon érdekes
választ sok időt.
És ők nagyon jó kérdés.
És tudod kitalálni ki őket a saját, ha, például a
nem vagyunk pontban.
Igen.
>> DIÁK: Mert nem küld a pointer bárhol, nem kell
használni malloc?
>> JASON HIRSCHHORN: Tehát ez megy vissza hogy az eredeti kérdésre.
[? ?]
Ez csak egy helyi változó?
Malloc itt nem olyan meggyőző.
Használata itt nem malloc hogy kényszerítő mert
csak egy helyi változót.
>> DIÁK: Akkor tehettél char csillag ptr egyenlő te az első?
>> JASON HIRSCHHORN: Oh.
Így fogunk most kap vissza hogy az eredeti kérdésre.
Azt hiszem, nem volt elégedett A válaszom.
OK?
Mint ez?
>> DIÁK: Igen.
Várjon.
>> JASON HIRSCHHORN: És hol szeretne kinyomtatni?
Tehát mi nyomtassa ki egy karakterláncot, mint ez?
>> DIÁK: Érdekes.
>> JASON HIRSCHHORN: Tehát ez azt mondja, ez érv, hogy milyen típusú egy karaktert.
Tehát ez egy karakter.
>> DIÁK: csak úgy az első.
>> JASON HIRSCHHORN: Tehát ez az, amit korábban mondtam.
Mint mondtam, ez nem tárolja a karakterlánc belsejében változó mutató.
Ez tárolása -
>> DIÁK: Az első érték a húr.
>> JASON HIRSCHHORN: címe Az első érték a húr.
Ha volt, hogy nyomtassa ki ezt, vagyunk hogy az érték benne mutatót.
És majd meglátjuk, hogy valóban, a memória cím.
>> Van ennek értelme?
Bocsánat.
Várj, jelent választ a kérdés, igaz?
>> DIÁK: Igen.
>> JASON HIRSCHHORN: Ez a vonal a kód létrehozása egy sor, majd egy másik
változó mutató ami mutat az, hogy a szöveg, hogy a tömb.
Igen.
>> DIÁK: Tehát, ha ment az egyik memória foglalkozzon tovább, akkor megkapjuk a h?
Eltelt már tárolni, mint egy húr?
>> JASON HIRSCHHORN: Mint, mi -
így ez értékes csinálni.
Ez pont aritmetika, amit a srácok nem látott, és meg kell
viszonylag kényelmes.
Ez hasonló írás -
ha mi voltunk, hogy írni ezt a kódsort, láttunk tömb jelölés előtt.
Ez nekünk a második értéke ebben a tömbben, h.
>> Ha ezt tette, ez is ad mi a második érték az adott tömbben.
Mivel ez lesz, hogy nem a memória címét, az első dolog, hanem a
memória cím a dolognak az egyik vagy.
És akkor a csillag üzemeltető dereferences hogy a mutató.
És ismét, lássuk.
Kapunk h újra.
>> DIÁK: Pontosan mit hivatkozás feloldási jelent?
>> JASON HIRSCHHORN: feloldási egy divatos szó menni.
Megy, hogy, és kap, mi van ott hogy dereference a mutatót.
Ez csak egy divatos szó, hogy.
>> DIÁK: Ha volna print az egész szöveg, tudnánk
do jel mutató?
>> JASON HIRSCHHORN: OK, mi fog itt megállni.
Mi lesz a vége itt.
Jel megadja a címét helyet, így ha nem jel az
változó, hogy megadja neked a címet ahol ez a változó tárolja.
Jel pointer megadja a címe ptr ahol PTR van a memóriában.
>> Nem fogunk menni ezt a példát.
Lehet kitalálni ezeket a a dolgokat a saját.
De ismétlem, ez még az is undorító a kicsit túl mit kell tudni
a jelen középtávú -
vagy ezt a kvízt, nem.
Bocsánat.
>> Fogunk lépni, mert én szeretnék csinálni egy kódolási probléma
idő előtt múlik.
És fogunk kódolni, mit gondolok a leginkább kényszerítő ezeknek
példák atoi.
Tehát ez volt a kérdés a teszt két évvel ezelőtt.
És én azt a fórumon itt.
>> Az emberek arra kérték, a kvíz -
kaptak egy kicsit tesxt a az a kérdés, de én megszűnt a
szöveget, mert nem volt szükség céljainknak most.
Ez csak néhány háttér hogy mit atoi tett.
De mindannyian tudjuk, és nagyon ismerik atoi.
>> Azt javaslom, hogy ezt a kódot egy papírlapra.
Azt is javasoljuk, hogy használja a stratégia hogy már átállt
Sok a mi részben.
Először is, győződjön meg róla, hogy megértette mit atoi csinál.
Rajzolj egy képet vagy dolgozzon ki egy mentális képet, hogy a fejedben.
Ezután írja ki pszeudokódban ezt.
A teszt, ha minden, amit kap pszeudokódját, legalább
tenni valamit le.
És majd a térkép, hogy pszeudokódja rá C. Ha van egy csekket a
pszeudokódját hasonlóan ellenőrizze, hogy valami értéke 1, hogy feltérképezi a az, ha
állapotban, és így tovább.
És végül, kódolni a programot a C.
>> Akkor menj vissza, atoi, és hogy öt perc alatt hogy ezt a kódot egy lapon a
papír, ami valószínűleg a mennyi időt venne igénybe a
kvíz kód atoi.
Öt és 15 perc, és 12 öt, öt- 10 percig, körülbelül az összeg
alkalommal azt költeni ezt a kérdést a kvíz.
Tehát hogy öt perc alatt, kérem.
Ha bármilyen kérdése van, fel a kezét, és én majd magához tér.
>> [SIDE BESZÉLGETÉSEK]
>> JASON HIRSCHHORN: OK, így volt öt percig.
Ez volt talán arról, hogy mennyi alkalommal azt költeni, hogy a kvíz,
Lehet, hogy az alsó abban az időben.
Majd helyezze vissza egy kicsit.
Kezdjük kódolás ezt.
És ha nem kap végig, ezt a választ, és ez a
kvíz kérdés állnak, megint 2011 őszén, amikor ez a kérdés
jelent meg a kvíz.
>> És érdemes volt nyolc pontot A kvíz akkor.
Nyolc pont van a high-end, a összeg a pontokat valamit érdemes.
A legtöbb kérdés a tartományban A 05:59 pontokat.
Tehát ez egy nagyobb kihívást kérdés, az biztos.
Tud akárki kap én kezdődött?
>> Általában, mi lesz hogy akarom ezt a
funkció atoi logikusan?
Mit akarsz?
Így fogunk írni Néhány pszeudokódja.
>> DIÁK: Convert karakter a egészek.
>> JASON HIRSCHHORN: Convert karakter a egészek.
OK.
Szóval, hogy hány karakter vagyunk lesz szüksége, hogy menjen át?
>> DIÁK: Az összes.
>> DIÁK: Minden karakter a sztring.
>> JASON HIRSCHHORN: Az összes karakterek a húr.
Tehát, ha azt akartuk, hogy menjen át minden karaktert egy szövegben, mi az a dolog,
C-ben láttuk, hogy lehetővé tette hogy menjünk át minden
karaktert egy szövegben?
>> Diákok: A for ciklus.
>> JASON HIRSCHHORN: A for ciklus.
Így fogunk hurkolt minden karakter s.
>> Akkor mit szeretne majd csinálni ha kap egy sajátos jellegét?
Mondd, mi megy át a 90.
Kapunk 9.
Ez egy karaktert.
Mit akarunk csinálni karakter 9?
>> DIÁK: Vonjuk ki azt a karaktert 0-ra?
>> DIÁK: Add 0-ra?
>> JASON HIRSCHHORN: Vonjuk azt a karaktert 0-ra?
>> DIÁK: Igen.
>> JASON HIRSCHHORN: Miért akarsz csinálni?
>> DIÁK: [Nem hallható]
értéket.
Az int értéket.
>> JASON HIRSCHHORN: OK, így vesszük a karakter 9., kivonni azt a
karaktert 0 és kap egy tényleges egész 9.
Édes.
És honnan tudod, hogy a karakter 9. mínusz 0 karakter 9?
Mit táblázat nem nézel?
>> DIÁK: Vannak logikailag kilenc helyek között 9 és 0.
Vagy meg tudná nézni az ASCII tábla.
>> JASON HIRSCHHORN: ASCII tábla.
De igen, igazad van is.
Így kivonni 0-ra.
Tehát most már az egész 9.
És mit akarsz ezzel?
Ha megvan a 90, ez az első egész már, hogy mit akarunk csinálni?
>> DIÁK: Én fel egy ideiglenes egész tömb, akkor nem matek hozzá
később, hogy azt a véget.
>> JASON HIRSCHHORN: OK.
>> DIÁK: Kezdheted végén a tömböt, majd előrelépni, így
, hogy minden alkalommal, amikor mozog előre, akkor szorozza meg 10-zel.
>> JASON HIRSCHHORN: OK.
Ez úgy hangzik, mint egy szép vonzó ötlet.
Mi lehet kezdeni a végén a tömb, és tudjuk használni strleng.
Tudjuk használni strleng itt.
Majd kap a hosszát a húr.
Kezdjük a végén.
És + az első, csak hogy ezt a egész, és talán hozunk létre, mint a
új integer változó fel tetején, ahol mi tárolására mindent.
Tehát loop át minden char s-tól hátulról előre, mi kivonni 0, és
akkor vedd, és attól függően, hol van, akkor szorozd meg
egy hatalom 10.
Mivel az első, amit teszünk szaporodnak a jobb szélső karakter?
>> DIÁK: 10 a 0-ra.
>> JASON HIRSCHHORN: 10 a 0-ra.
Mit megszorozzuk a második jobbszélső karakterről?
>> DIÁK: [hallható].
>> JASON HIRSCHHORN: Mi az?
>> DIÁK: 10 1.
>> JASON HIRSCHHORN: 10 1.
A harmadik-jobb szélső karakter?
>> DIÁK: 10 2.
>> JASON HIRSCHHORN: 10 2.
>> DIÁK: Elnézést, nem értem mit csinálunk itt.
>> JASON HIRSCHHORN: OK, menjünk vissza, akkor.
Így fogunk kapni Kihagyott egy string.
Mert írsz atoi.
Így kap telt el a húr.
Mondjuk a sorstól át A szöveg a 90.
>> Az első dolog, amit meg fogunk tenni beállítása egy új, egész típusú változó, vagyunk
csak létre fog hozni mint az új egész.
Ez az, amit mi fogunk hogy visszatérjen a végén.
Meg kell, hogy menjen át minden karakter a húr, mert megállapítottuk,
hogy meg kell megérinteni mindegyiket, és majd add hozzá az új egész.
>> De nem csak hozzá, mint egy számot.
Nem lehet csak úgy a 9. és hozzá 9. a mi egész.
Attól függ, hogy milyen helyen ez a szöveg.
Fogunk kell szorozni azt a hatalom 10.
Mert ez az, hogy 10-es alapú működik.
>> Szóval lesz, hogy a tényleges karakter, egész szám, vagy az aktuális
szám, kivonva karakter 0 A karakter 9. mint tettük
levonva karaktert tőke A-tól bármilyen jellegű volt az egyik
ezeket a problémákat.
Szóval akkor tényleg kap egy számot 0-tól 9. megtakarítani, mint a valós szám, és mi
szorozza meg a hatalom 10 függő hol vagyunk a húr.
És akkor mi lesz hozzá vissza a mi új integer változót.
>> Szóval mi ez nézne lenne kell - mi lesz felhívni itt.
Ha kap telt el a húr 90 -
>> DIÁK: [hallható].
>> JASON HIRSCHHORN De atoi vesz egy string.
Így fogunk átmenni a gazdaságban.
Mi lesz telt el 90.
Mi megy a vissza a frontra.
Vesszük a 0-ra.
>> DIÁK: Sajnálom.
Lehet, hogy ez hülyeség.
Ha megvagyunk Kihagyott egy string, miért van 90, amit mi
egyre telt el?
90 Mivel egy egész szám.
>> JASON HIRSCHHORN: Mivel atoi vesz szöveg és kiderül, hogy az egész
képviselete, hogy a húr.
De a szöveg a 90 nem az egész 90 vagy a szám 90.
A szöveg 90 tömb két, vagy három karakter, inkább a 9
karakter, a 0-karaktert, és A backslash 0. karaktert.
>> És írunk atoi, mert a Például, ha megteszi a parancs
argumentum, és ez mentett argv, ez menti a húr.
De ha azt akarjuk, hogy kezelje azt a számot, meg kell átalakítani, hogy az
tényleges egész.
Melyik mi az egyik probléma készletek.
Amit tett számos A mi problémánk készletek.
Mindenki, volt egy egész parancssori argumentum.
Szóval ez az, amiért a atoi funkció vesz egy string.
>> Tehát még egyszer, a példánkban itt vagyunk megy, hogy az utolsó.
Fogunk kivonni a karakter 0-tól, mert a karakterek 0
vonni a karakter 0 ad a tényleges száma 0 szerint
Az ASCII matek, hogy mi.
>> Mivel a karakterek képviseletében a más, mint a tényleges - a
karakter egy, például a kisbetű a 97.
Ez nem - hoppá!
Ez nem az, amit elvár hogy legyen, 0, pl.
Tehát meg kell kivonni a karakter egy, hogy 0-ra.
>> Így fogjuk csinálni, hogy itt hogy a tényleges szám.
És akkor mi lesz, hogy szorozza meg teljesítmény 10 attól függően, hogy hol
van a szöveg, és hogy ezt a és adja hozzá a hely-
változót, mi jön ki az utolsó új egész.
Van, hogy van értelme, hogy mindenki számára?
>> Így nem fogunk kódolni ezt most, mert vagyunk
hogy rövid idő alatt.
Elnézést kérek az időzítés, hogy a.
De ez az, ami remélhetőleg tenné képes megtenni a kvíz - a
legkevesebb, hogy ezt a pszeudokódja írva.
>> És akkor, ha mi voltunk, hogy írjon a pszeudokódját, valóban, mi is ezt
elég gyorsan.
Minden sora észrevételek azt írtuk Itt fordítja a
egy sor C kód.
Deklarálása egy új változó, írás hurok, néhány kivonás, néhány
szorzás, és néhány feladat.
Akkor valószínűleg azt is szeretné, hogy levelet visszatérő ág.
Azt is szeretné, hogy pár ellenőrzés itt.
Igen.
>> DIÁK: Így tudunk kezelni s mint a tényleges szöveg?
Mert tudom, hogy ez csak egy cím.
Mint, hogyan kap hosszát a szöveg, hogy át?
>> JASON HIRSCHHORN: Hogy volt a string hossza?
Strlen.
>> DIÁK: strlen, igen.
De teszel s mint a érv, hogy az?
>> JASON HIRSCHHORN: Tehát strlen vesz char csillag.
És ebből következik, hogy char csillag, és tartja számítva, amíg eljut a
backslash 0-ra. strlen valójában egy másik program is
mentek a kódot.
Ez a másik jó, hogy kódot.
Ez az ember egy kicsit könnyebb, mert ha fogsz gondolkodni, hogy
fogalmilag -
Csak azt mondtam, hogy hangosan - strlen alábbiak a mutató és folyamatosan megy, és
számolás és nyomon követése, amíg el nem éri a backslash 0-ra.
>> DIÁK: OK, megvan.
>> JASON HIRSCHHORN: Tehát legjobb szerencsét kvíz 0. holnap.
Ha bármilyen kérdése van, én kívül után.
Nyugodtan e-mailt nekem.
Érje el a saját TF ha nem az én részben, vagy kap a
e-mailben, ha akarod.
>> Ha szeretné, hogy kiborulni, és küldje nekem egy e-mailt, a freakout e-mailt, én
küld vissza, mint egy mosolygó arc, vagy, mint egy vicc, vagy valami.
Szóval nyugodtan erre is.
Sok szerencsét megint, és én találkozunk jövő héten.