[Powered by Google Translate] DAVID J. Malan: Rendben.
Ez CS50, és ez a vége a hét kettő.
Ha azt várod, hogy éhes ez idő tájt holnap, tudom, hogy megyünk
összehívását, mint egy kis csoport holnap, csütörtök 01:15.
Van egy URL-t ide, ha szeretné RSVP.
Tér korlátozott, ezért kérlek bocsáss meg, ha az űrlap töltötte fel, hogy mikor
töltse ki ezt.
Egy másik URL azonban, hogy érdekesnek ez.
>> Tehát csak körülbelül egy hónap múlva, a tanfolyam lesz bocsátani
annál is inkább, nagyjából keresztül EDX, amelyen keresztül emberek az interneten lesz
követhette végig, vegyenek részt a tanfolyam elég aktívan, sőt.
Fogják használni a gép és a CS50 CS50 Fórum és a legtöbb
a különböző szoftverek, hogy mi már használ ebben a félévben.
És az egyik kezdeményezések szeretnénk vállalni, mint egy kísérlet ebben az évben
is, hogy lásd, mennyi tartalom tudjuk lefordítani más beszélt és
írott nyelv.
Tehát, ha lehet, érdekükben áll részt ebben a projektben, ahol
adunk angol nyelvű átirata és a feliratok a kurzus
előadások és rövidnadrág és szemináriumok és szakaszok és hasonlók -
ha beszél folyékonyan, vagy írjon folyékonyan más nyelv, mi lenne
Szeretem, hogy vegyenek téged ebben a projektben, ahol veszel egy vagy több
videókat, fordítsa őket nyelven tudja elég jól.
Ahhoz, hogy te egyfajta a felület, itt van ez a web-alapú felhasználói felület
hogy mi fog használni, hogy létre fog hozni lényegében egy UI, mint ez.
Ezt nekem tanítás néhány Halloween napja.
És a jobb oldalon van a fekete mellett e időbélyegeket,
látni fogja a különböző dolgokat, hogy kijött az én számból azon a napon.
És akkor ez alatt, akkor képes lesz arra, hogy lefordítani egy másik nyelvre.
Pontosan mi a térképezés között, ebben az esetben, angol
és, mondjuk, spanyol.
Tehát ez valójában egy nagyon felhasználóbarát eszköz.
A visszatekerés és előre tekerés nagyon könnyen a billentyűparancsokat.
Tehát, ha azt szeretné, hogy vegyen részt ebben a kísérletben, és a szavakat
látható és olvasható legyen az esetleg több ezer emberek odakinn, kérjük ne érezzük
A részvétel ingyenes.
>> Most egy szót, ami a kiscicát, hétfő, nehogy küldtünk túlságosan
ijesztő üzenet.
Tedd észre, hogy a munkaidőn utalnak és szakaszok arra utalnak, a
design a tanfolyam nagyon, hogy a diákok és az együttműködés
beszél dolgozni a probléma készletek és problémákkal együtt.
És tényleg a vonal, csak jön le, hogy ismét a munkát, amit végül
kell benyújtania legyen saját.
És ez így van, őszintén szólva - a munkaidőn, ez teljesen normális -
ez teljesen várható, még akkor is -, hogy beszélgetni néhány
barátok melletted.
Ha ő küzd valamilyen témában, és te, mint, oh, hát hadd
adjak egy pillantást néhány sort, hogy én írtam.
Ez rendben van.
Ez történik.
És ez nagyon kedvező, azt hiszem, a tanulási folyamat.
Amennyiben a vonal ismét lesz át, amikor a fej mozgatásával fajta felett
Itt túl sok másodperc vagy perc, hogy tényleg, ha csak
volt egy feloldási lehetőség a barátod.
És természetesen, amikor a dolgok cserélt e-mailen és Dropbox és
hasonló, ott is van a vonalban.
Szóval, minden eszközzel, jól érzik magukat, és úgy érzi, ösztönözni kell beszélgetni a barátokkal
és osztálytársai mintegy psets és így tovább.
És csak észre, hogy amit végül be kéne lennie
terméket a teremtés, és nem valaki más.
>> Így ugyanabban a szellemben az ennivaló lények, lehet, hogy
ismerik ezt a fickót itt.
Tehát ez egy horrifically giccses film évvel ezelőtt.
Van itt valaki látott Spaceballs?
Rendben van.
Tehát egy jó szám van.
Szóval ez a mi csodálatosan tudományos módon bevezetésének ma végül
fogalma kriptográfia.
És így az egyik tartomány specifikus problémák Pset 2, ami jön
out késő holnap este, hogy belevetik magukat a világ a kriptográfia, amely
a művészet titkosítására vagy kódolási információkat.
És ez végül is vonatkozik, hogy a világ biztonságát.
>> Most a biztonság a legtöbb számunkra formájában érkezik a meglehetősen világi mechanizmusok.
Mindannyiunk felhasználóneveket és jelszavakat.
És mindannyian nagyon rossz felhasználónevek és jelszavak, valószínűleg.
Ha a jelszó megegyezik több webhelyen, ez valószínűleg nem
a legjobb ötlet, ahogy megbeszéljük felé félév végén.
Ha a jelszó van írva egy ragadós jegyzet - nem vicc - a
monitor, ez is, nem feltétlenül a legjobb design, de elég gyakori
jelenség.
És ha nem használ titkosítást titkosítja a jelszavakat, azok
különösen veszélyeztetettek.
Tehát, ha azt hiszed, hogy szuper okos azáltal, hogy egy rejtett Szó
dokumentálja valahol a merevlemezen, hogy az összes a jelszavakat, hanem
ez egy mappában, hogy senki nem fog nézni, ez is nem egy nagyon
biztonságos mechanizmus.
És mi Pset 2 fog bevezetni ez művészet a kriptográfia és a
kódolási információkat annak érdekében, hogy a dolgok, mint például a jelszavak
annál biztonságosabb.
Annak érdekében, hogy ösztönözze ezt a nagyon valós probléma, nagyon nem valós
forgatókönyv, hadd mutassam be az egyik kedvenc klipeket ide a
film, Spaceballs.
>> [VIDEO LEJÁTSZÁS]
-Sisak, te ördög, mi folyik itt?
Mit csinálsz a lányommal?
-Engedjék meg, hogy bemutassam a ragyogó ifjú plasztikai sebész, Dr. Philip
Schlotkin a legnagyobb orrműtét ember az egész
világegyetem és Beverly Hills.
-Felség.
-Orr munkát?
Nem értem.
Ő már volt egy orr munkát.
Ez egy édes 16 jelen.
-Nem, ez nem az, amire gondolsz.
Ez sokkal, de sokkal rosszabb.
Ha nem adja ide a kombináció a levegő pajzs, Dr. Schlotkin fog
adja meg a lánya vissza a régi orrát.
-Nem!
Hol szerezted ezt?
-Rendben.
Megmondom.
-Nem, apa, nem.
Azt nem szabad.
-Igazad van, kedvesem.
Hiányozni fog az új orrát.
De nem fogok mondani nekik a kombináció nem számít, mit.
-Nagyon jól.
Dr. Schlotkin, nem a legrosszabb.
-Szívesen.
-Nem!
Várj, várj.
Megmondom.
-Tudtam, hogy ez működni fog.
Rendben, add ide.
-A kombináció egy.
-One.
-Two.
-Three
-Három.
-Four.
-Five
-Öt.
-Tehát a kombináció egy, kettő, három, négy, öt.
Ez a leghülyébb kombináció, amit valaha hallottam életemben.
Ez az a fajta dolog, amit egy idióta lenne az ő poggyászában.
-Köszönöm, fenség.
-Mit csináltál?
-I kikapcsolta a falon.
-Nem, nem.
Ha ki van kapcsolva az egész filmet.
-I kell nyomni a megfelelő gombot.
Nos, tedd vissza.
Tegye a film vissza.
-Igen, uram.
Igen, uram.
-Menjünk, Erna.
Gyere, Gretchen.
Persze, tudod, hogy én még a számla kiállításához ezt.
Nos, nem működik?
Hol van a kapu?
-Ez működött, uram.
Megvan a kombináció.
-Remek.
Most már tudjuk, hogy minden utolsó kis friss levegőt a bolygó Druidia.
Mi a kombinációt?
-Egy, kettő, három, négy, öt.
-Egy, kettő, három, négy, öt?
-Igen.
-Ez csodálatos.
Megvan az azonos kombináció a csomagom.
Készítsünk Spaceball 1 azonnali indulásra.
-Igen, uram.
És változik a kombináció én csomagmegőrzőt.
-Oh!
[END VIDEÓ LEJÁTSZÁS]
>> DAVID J. Malan: egy csodálatos film, amit meg kell most minden látni.
Így a kontextus itt az, hogy a bizonytalan adat érkezik lehetőséget
titkosítja, és összekeveri azt.
És így ez, például, egy példa a titkosított üzenet.
Ez tényleg mond valamit angolul.
De ez nyilvánvalóan nem teljesen nyilvánvaló.
És mi jön teljes kört ma ugratni kívül mi ez titok
üzenet itt.
De a valóságban a számítógépek, a dolgok nem is néz ki, mint azok esetleg
az angol kifejezéseket.
Például, ez az, amit lehet, hogy talál egy szabványos Linux vagy Mac vagy
Unix számítógépes fájlban volt egyszer régen az úgynevezett jelszó fájl.
Manapság ez már költözött más helyeken.
De ha megnézi a megfelelő helyre a rendszer, akkor látni nem csak a
felhasználónév vagy a többi ember a rendszert, de akkor megjelenik egy
titkosított változata a jelszó.
Valóban, a szó kripta ott azt javasolja, hogy a következő dolgok titkosított.
És ez a sorozat látszólag véletlenszerű betűk és karakterek és számok
így tovább lehet visszafejteni csak általánosságban ismeretében valami titkos -
egy titkos szót, egy titkos számot.
És valóban, a művészet a kriptográfia végső soron attól függ, hogy megbízik az egyes
sort, és tudván, hogy valami mást nem.
Fogjuk felfedezni ezt egy kicsit részletesebben ma és a Pset jönni.
>> És most egy szó a pass / fail.
Így különösen, mint néhány már lebukott Pset 1, a készülék és a
egy teljesen új világot magadnak, felismerte, hogy frusztrációt és
zavart, és csak technikai nehézségek várhatók.
Különösen az első Pset, ahol csak annyi az új, csak most
ismernie ls, CD és ezek arcane parancsok egy új környezetben.
És ez független a tényleges anyagi és a programozás is.
Szóval észre azt is, hogy vannak olyan munkaidőn hogy léteznek
a támogatási struktúrát.
Szakasza kezdődik a jövő vasárnap.
De a legfontosabb, ha érzel magadban csak, hogy nem ez a
világ neked, rájönnek, hogy ez tényleg nem csak időt vesz igénybe.
És ha nem lettek volna ezt a lehetőséget évvel ezelőtt engem vesz egy osztály
megfelelt / nem felelt, őszintén, soha nem lett volna, még a lábát az osztályteremben.
És tudod változtatni ezt-ig, mondjuk, az ötödik hétfőn természetesen.
Tehát, ha te vagy a szélén most észre, hogy ahelyett, hogy fejét néhány más
vizeken összesen, akkor biztosan csak úgy változik át / nem.
Ismét ott nem igazán ez a kultúra itt Harvard figyelembe dolgok
megfelelt / nem felelt, mivel mindenki nagyon szeretne elérni, vagy túl is.
De őszintén szólva, ez egy csodálatos módon próbál valami arra, hogy esetleg nem
ismerős lehet az Ön számára.
És akkor a végén csinál a legtöbb esetben meglehetősen finom, talán
sok a meglepetés.
És Konkrétabban, mit gondolok megfelelt / nem felelt általában nem,
különösen azért, mert lehet, hogy tapasztalt Pset 0, ha már fel
10 óra, 15 óra, 25 óra a néhány Pset - és te csak dörömböl
a fejét a falnak,
és ez egyre szuper késő este,
de már megtette a Pset mint 90%-át az út,
tudod, nem tudod kitalálni egy dolog -
megfelelt / nem igazán úgy élét egy osztály, mint ez, ahol meg lehet rendezni
A boldogan mondjuk oké, tudom, hogy ez nem tökéletes.
De én dolgoztam a seggem ebben.
Én nagyon boldog, ha véget ért fel.
És ez megfelel a vonatkozó várakozások / nem felelt meg.
Szóval, hogy tartsa szem előtt.
>> Rendben van.
Tehát azok, akik küzdöttek, hogy használja a Harvard Egyetem Wi-Fi know
hogy van egy CS50 SSID-t, a Wi-Fi kapcsolat lebeg, hogy
Lehet, jobb szerencsét.
Ez egy kicsit ironikus, hogy a jelszót e -, ha szeretné kipróbálni
kapcsolódás ezt a jobb sebesség és tudassa velünk, ha ez nem jobb -
egy, kettő, három, négy, öt, egészen akár nyolc mert nyolcas
sokkal biztonságosabb, mint öt.
Tehát, ha szükség van a Wi-Fi jelszavát, csatlakoztassa a CS50 vezeték nélküli itt.
Egy, kettő, három, négy, öt, hat, hét, nyolc.
És hozzászólás CS50 Beszéljétek ha még időszakos kapcsolódási problémák,
és mi hagyja, hogy a hatalom lehet tudni, ezen a helyen.
>> Rendben van.
Tehát egy gyors teaser, különösen azok számára, akik rajongó fiú vagy lány
minden dolog Apple.
Amit kiásták a néhány évvel ezelőtt volt, ezt a fájlt itt ilock.c, csak azért, hogy
fajta, hogy több konkrét és bonyolultabb néhány a több alap C
programokat voltunk írásban.
Szóval nyitni ezt a fájlt, ilock.c.
Ez elérhető az előadások oldalon ma.
A bal oldali, látsz egy hosszú listát a funkciók.
Szóval a fickó, aki írta ezt írta egy csomó funkciók,
több, mint fő.
Valaha egy csomó könyvtárak itt.
És ha elkezdünk lapozást, mi ez valójában a nagyon
1. Azt hiszem, kiváló az eredeti iPhone.
Ha akarta jailbreak az eredeti iPhone, ami azt jelenti, untether
hogy az AT & T és a ténylegesen telepíteni speciális szoftver rá, és a dolgok
, hogy az Apple nem akarta az embereket -
Nos, valaki volt az ideje, hogy kitaláljuk, hogy pontosan hogyan tudnák kihasználni
szoftver hibák, tévedések, hibák, az Apple szoftver.
És így született ilock.c.
Hogy ha össze azt a számítógépet, és telepítettem rá egy iPhone, hogy
csatlakoztatva volt a számítógéphez, mondjuk, egy USB kábel, ez Önnek
közigazgatási vagy root az iPhone, és hagyja, te elég sok
amit akarsz.
>> És így volt ez a csodálatos macska-egér játék között az Apple és
A világ többi része, különösen azok, mint sok vállalat, próbálja lezárni
a dolgukat le úgy, hogy csak akkor tudjuk csinálni vele, amit kívánt.
De hála az emberek, mint ez és azok megértése alacsony szintű
részletek és, hogy ebben az esetben, a C programozási és egy csomó ismerős konstrukciók
hogy már elkezdett játszani, meg tudja-e valóban kihasználhatják a
hardver módon ahogy jónak látod, és nem feltétlenül egyes vállalati egység.
Így például, fogalmam sincs, mi ez csinál.
De GetVersion hangzik elég egyértelmű.
És úgy tűnik ez egy olyan funkció, hogy ez a személy írta.
Vegyünk valami egész, mint egy érvet, nem ad vissza semmit, de
Úgy tűnik a hurok a hurok az itt és ha a feltétel, ha a feltétel,
szünet, és valahogy kapcsolódik verziószámát.
Ha lapozzunk lefelé -
bár sok ilyen kulcsszavak lesznek új, és van egy
csomó funkciók itt még sosem láttam, és talán soha nem lát át
során a félév -
a végén a nap, ebből az következik, ugyanazokat a szabályokat és logikát, hogy mi már
játszik eddig.
Szóval ez túl öreg ahhoz, hogy kiváló az iPhone 3s vagy 4s vagy hamarosan 5s, ezekben a napokban,
de tudjuk, hogy ez mind nagyon származik a világ, hogy már
lebukott.
>> Szóval vessünk egy pillantást egy kicsit több egyszerű példát.
Ez az egy, csak kap bemelegíteni néhány szintaktikai és még néhány egyéb adatokat
típus, hogy már beszéltünk, de még nem igazán látott C. Tehát ez egy
nevű fájl positive1.c.
És per az észrevételeket a tetején, ez csak azt követeli, hogy a felhasználó ad
pozitív szám.
Szóval ez egy példa a do-while ciklus, ami szép és jó a felhasználó által interaktív
programokat, ahol meg kell mondani a felhasználónak, hogy tegyen valamit.
És ha nem működnek együtt, akkor kiabálni őket, vagy elutasítja a bemenet.
Case pont, fogok csinálni sorok 19 keresztül 24 mindaddig, amíg a felhasználó
nem adott nekem egy pozitív szám.
Most ezt a részletet itt a 18 vezetéken, miért kijelentem n fent ez az egész
hurok konstrukció szemben a közvetlenül a 22 vonal, ahol
tényleg érdekel, hogy n?
Igen?
[Hallhatatlan]
>> DAVID J. Malan: Igen, így ez a kérdés hatályát.
És laikus távon mit hatálya utal?
Igen?
[Hallhatatlan]
DAVID J. Malan: Tud beszélni egy kicsit hangosabban?
SPEAKER 1: Hol lehet elérni egy adott változó.
DAVID J. Malan: Perfect.
Ha el tudja érni egy adott változó.
És általában, a ökölszabály eddig az volt, hogy a körét egyes
változó határozza meg a legutóbbi kapcsos zárójelek, amit látott.
És ebben az esetben, ha elkövette azt a hibát nyilvánító n on-line 22,
hogy a vonal fog működni.
Szeretnék kap egy int, és azt helyezze be, hogy az n változó sorban 22.
De melyik kódsor hogy most fogalmam sincs, miről beszélsz?
Így 25, és kiderült, hogy 24, is, mivel ebben az esetben, kívül esik
A kapcsos zárójelek.
Szóval, csak egy kicsit kellemetlen, de nagyon könnyen megoldható egyszerűen nyilvánító
a változó külső a funkciót is.
>> Most majd meglátjuk később ma, akkor egy lépéssel tovább.
És akkor még egy kicsit lusta -
és ez nem javasolható, általában -
de akkor még csak lusta, és tegye a változó világban, hogy úgy mondjam, nem
belsejében egy függvény, nem belül a hurok, de a fájl maga, kívül
az összes olyan funkciót, amit írt, mint én itt a 15. sor.
De ez általában elítélik.
De észre ezt a megoldást néha más problémákat, mivel mi
végül látni.
Tehát most, akkor hagyjuk, mint ez.
De lássuk, tudjuk átírni ezt csak elindítani kifejező magunknak egy
kicsit másképp.
>> Szóval ez a program, csak hogy világos legyen, nem positive1.
Hadd menjek előre, itt és a terminál ablakban győződjön positive1, Enter.
Lefordul, oké.
Megyek futni positive1, nyomd meg az Entert.
Követelem, hogy adjon nekem egy pozitív egész szám.
Azt mondom -1.
Ez nem működik.
0, 99, úgy tűnik, hogy működik.
Lehet, hogy nem a legszigorúbb vizsgálat.
De legalább ez egy szép józanság ellenőrzést, hogy mi vagyunk a helyes úton halad.
És most hadd menjek előre, és nyissa változata két e.
És mi a különbség már?
Hajtja végre ugyanaz.
De mi ugrott ki, mint egyértelműen különbözik ebben az időben?
Igen, ez a bool zöld.
Gedit kiemelte a zöld ez a kulcsszó nevei bool,
amely egy adattípust.
Ez nem jön beépített összes változatára C. Be kell tartalmaznia
specifikus könyvtár.
A mi esetünkben azt tartalmazza a CS50 könyvtárban, hogy mi
férhetnek hozzá bool.
De a 18 vezetéken, akkor úgy tűnik, hogy egy logikai érték van az úgynevezett hálás.
Így tudtam hívják ezt a valamit.
De én nevezték hálás csak egyfajta közvetíteni néhány szemantikai jelentését.
Így kezdetben on line 18 vagyok nyilvánvalóan nem hálás, mert a
Logikai érték hálás inicializálódik false sorban 18.
És akkor úgy tűnik, hogy mit tettem itt sorok 21-től a 23-én már csak
fajta átírt én logika.
Tehát nem funkcionálisan különböző.
De a 22 most, azt ellenőrizze, hogy a int a felhasználó megadta nagyobb
0, akkor egyszerűen módosítsa az értéket a hálás igaz.
És miért ne tenném?
Mert a 25 vezetéken, úgy tűnik, megyek, hogy ellenőrizze a feltételt.
Ehhez hurok miközben hálás hamis.
>> Szóval, azt javaslom, hogy ez egy alternatív változata, mert ez legalább egy
kicsit intuitív, talán.
Ez egy kicsit több, földelt angolul.
Szóval tegye a következőket, miközben nem vagyunk hálásak, vagy pedig hálás hamis.
És ez alkalommal is, én nyilvánvalóan nem érdekel, emlékezni, amit a felhasználó beírt
be, mert értesítésben nincs változó n.
Így valójában, I -
Egy kis fehér hazugság van.
Funkcionálisan a program egy kicsit más, ha eljutunk az alján
mert én nem emlékszem, mi n.
De azt akartam bizonyítani, itt is, hogy bár láttuk getInt és
GetString használ a jobb oldali egyenlőségjellel eddig annak érdekében, hogy
emlékszünk az érték, technikailag, ez nem feltétlenül szükséges.
Ha bármilyen okból, csak nem érdekel, hogy mentse az érték, ha csak akar
hogy ellenőrizze az érték, észre, hogy egyszerűen írni ezt getInt nyitott
paren, közeli paren.
Ez a funkció megy vissza értéket, ahogy már mondtam.
Ez lesz, hogy ismét egy int.
És így, ha úgy gondolja, szellemileg ezen történik, mikor írja be a 99, getInt
visszaadja a szám 99.
És így fogalmilag, ez mintha a kód valójában ezt.
Tehát, ha 99 valóban nagyobb, mint 0, akkor hálás lesz igaz.
Aztán 25 vezetéken felismeri ó, készen vagyunk, mert én vagyok most már hálás.
És sorban 26, egyszerűen mondjuk, köszönhetően a pozitív egész szám, bármi is
történt, hogy legyen.
>> Most csináljuk enyhe szintaktikai cukor van, hogy úgy mondjam.
Lássuk, ha tudjuk megtisztítani ebben a sorban a 25. A harmadik és egyben utolsó variancia
A positive3.
Tehát észre a különbség csak az, hogy milyen kódsort?
Igen, 25.
És most már nem is láttam ezt a trükköt csak még.
De mi volt látni a felkiáltójel hétfőn, amely jelzi, mi?
Szóval nem, vagy tagadás.
Tehát hogy egy logikai érték, és fordítsa az értékét.
Igaz hamisnak bizonyul.
False lesz igaz.
Szóval, azt javaslom, még egy kicsit intuitív olyan módon
írni a kódot, mert még mindig inicializálni hálás hamis.
Még mindig tegye a következőket.
Én meg hálás igaz, ha eljön az ideje.
De most már tényleg csak lefordítani ezt a kódot szóban balról jobbra,
miközben nem hálás.
Mert bumm, vagy felkiáltójel, jelöli a fogalom nem, így amíg
Nem hálás.
>> Tehát újra, még nem vezetett be új fogalmakat per se.
Már beszéltünk Logikai vissza, amikor mi játszottunk Scratch.
De észre, most már csak írjuk be a kódot a
számos különböző módon.
Így különösen a pset1, ha valamilyen küzd, hogy kitaláljuk, az utat
levelet néhány program, esély akkor a szerencse, mert nem lesz semmi
megoldások számát, hogy megtörténhet rajta.
Például, ez csak három még a legegyszerűbb program.
Rendben van.
És most emlékszem, hétfőn hagytuk e jegyzet visszatérési értékeket.
Tehát a legelső alkalommal, írtunk egy program, ami nem csak azt main,
is megvan a saját egyedi funkció, hogy én írtam ide.
Így sor 31 keresztül 34, már végre egy kocka funkciót.
Ez nem bonyolult.
Ez csak egy alkalommal egy alkalommal egy, ebben az esetben.
De mi a fontos benne, hogy elviszem input formájában és
Én vissza kibocsátás formájában egy alkalommal egy alkalommal egy.
>> Szóval most megvan a képessége, ugyanúgy, mint régen a printf egyedül, hogy hívja
ezt a funkciót hívja a kocka funkciót.
És a kocka függvény némi bemenet.
És a kocka függvény valamilyen kimenetet.
És így ezzel szemben printf csináltál valamit.
Ez nem adott vissza semmit, hogy törődik - bár, mint
félretéve, ez nem ad vissza értéket.
Csak általában figyelmen kívül hagyja.
Printf csináltam valamit.
Ez volt a mellékhatása nyomtatás a képernyőn.
Ezzel szemben itt van a kocka funkció, amely
ténylegesen visszatér valamit.
>> Szóval ez általában -
azok ismerik ezt, ez egy meglehetősen egyszerű ötlet.
De azok számára, kevésbé ismerik ezt az ötletet az elhaladó bemenetek és egyre
vissza kimenetek, próbáljuk csak valami szuper egyszerű.
Van valaki kényelmes jön a színpadra röviden?
Van, hogy kényelmes a kamera akkor is.
Igen.
Oké, mi a neve?
KEN: Ken.
DAVID J. Malan: Ken.
Rendben, Ken.
Gyere fel.
Szóval Ken lesz függvénye a fajta itt.
És menjünk előre, és ezt.
Menjünk egy kicsit díszes.
Örülök, hogy megismerhetem.
Üdvözöljük a középpontban.
Rendben van.
Nézzük meg ezt a gombot nyomja meg itt.
Rendben van.
Tehát itt van egy modern táblára.
És mi én vagyok a fő funkciója, például.
És nincs iPad a kezemben.
Nem igazán emlékszem, hogyan - nos, igazából nem lehet azt mondani, hogy az.
Nem igazán jó kézírás.
És ezért szeretném, ha nyomtatni valamit a képernyőn nekem.
>> Szóval én volt a fő program.
És megyek, hogy azt mondod, ezt írásban, hogy az én csirke semmiből,
akkor tompított Önnek egy bemenet.
Szóval, buta bár ez a gyakorlat, a fogalom a funkciók és a hívás
funkció és visszatérő függvény tényleg csapódik le, hogy ezt.
I am Main.
Épp most írta printf ("valami") a képernyőn.
Én fut a program.
És amint printf hívódik meg vesz egy érv - vagy egy paraméter,
néha -
dupla idézőjelek közé.
Itt van ez az érvelés.
Én beengedné Ken.
Most van egy fekete doboz írásbeli néhány néhány évvel ezelőtt, hogy látszólag
Csak tudja, hogyan kell nyomtatni a dolgokat a képernyőn.
>> Szóval, végre.
Ez nem rossz.
Szóval, nagyon jó.
Tehát most Ken történik végrehajtó.
Vajon kell, hogy adja nekem valamit vissza?
Tehát nem az, hogy láttunk eddig.
Ismét printf jelent valójában vissza egy számot.
De fogunk figyelmen kívül hagyni, hogy most, mert még sosem használta.
Szóval ez azt Ken.
És most fő jön vissza, hogy végre -
fő veszi át az irányítást a programot újra, mert ez kódsort,
printf, történik végrehajtó.
És megyünk mi módon végrehajtó bármely más vonalak vannak.
>> Rendben van.
Tehát most próbáljunk egy kicsit más példát.
És ezúttal itt, nézzük először törölje a képernyőt itt.
És ez időben, akkor tegye a kocka funkciót.
De ez alkalommal, azt várom a kimeneti érték.
Akkor menjünk előre, és ezt.
Szóval most van egy sor kódot, hogy azt mondja x = cube (x).
Tehát valójában let's -
A kódsor, visszahívás, úgy néz ki, mint ez.
x = kocka (x).
Hogy fog ez működni?
Akkor menjünk előre, és kapsz egy fehér képernyő újra.
És fogok írni most le az x értéke, ami ebben a pillanatban
időben történik, hogy, mondjuk, 2,, hogy ez egyszerű.
Szóval írtam le egy darab papírra a értéke 2,
ami az én értéke x.
Adom, hogy Ken.
KEN: Én csak annyit írj a válasz?
DAVID J. Malan: Igen, nézzük csak írni a választ.
Oké.
És most vissza kell térnie nekem valamit.
So -
tökéletes.
Szép Segue.
>> Tehát most átadja vissza értéke 8, ebben az esetben.
És mit csináljak vele?
Nos, lássuk csak.
Feliratkozás ezt a jogot.
Mit fogok csinálni vele?
Most fogom venni ezt az értéket, és valójában tárolja azokat
ugyanazok a bitek a memóriában.
De hirdetmény vagyok a fajta küzd itt.
Én egy kicsit zavaros, mert ha tudom valójában írni az x értéke?
Mert azt, amit most tenni, fizikailag viszont Ken egy darab papírt
, hogy ha a 2 értéket, ami volt x.
És valóban, ez pontosan mi történik.
Így kiderül, hogy ha hív egy függvényt, és adja át egy érv
mint a "hello world", vagy át egy érv, mint a 2, általában, te
halad egy példányát ezt az érvelést.
És ahogy írtam le a 2-es szám van, és átnyújtotta Ken, hogy meg kell
azt jelenti, hogy még mindig van egy példánya a 2 értéket valahol.
Mert valóban, most, hogy kaptam vissza az érték 8, mennem kell vissza
RAM és ténylegesen írd le 8, ahol egyszer volt a 2-es szám.
>> Szóval vizuálisan emlékezzen erre fogalma elhaladó szó
egy példányát az értéket.
Ken teszi a dolgát, a kezek vissza valamit - ebben az esetben,
értéket, mint a 8.
És akkor kell csinálni valamit, ezt az értéket, ha
akarja tartani körül.
Tehát az összes ez lesz a túlságosan is ismerős előtt hosszú.
Nagyon köszönöm, hogy erre a demo itt, Ken.
Rendben van.
Nagyon jól sikerült.
Akkor lássuk, hogyan, hogy végül kapcsolódik néhány funkció
hív, hogy mi már itt.
Szóval hadd menjen előre, és visz minket vissza a kocka példának.
És észre, hogy ha azt akarjuk, hogy valóban elkezdené szedni ezt tovább, megyünk
hogy kell szem előtt azt a tényt, hogy az x szám, ami alatt telt el
itt más, mint amit ez ténylegesen átment a funkciót.
Szóval ez megint eltelt példányt fog válni meglehetősen
valaminek megfelelő egy pillanat.
>> Szóval vessünk egy pillantást a valamit, ami nem egészen helyes működése még.
Én megyek előre, és nyissa 1/3 buggy például, amely
hibás a természet.
És ezt hívják buggy3, és végrehajtja a csere funkciót.
Tehát itt van egy fő funkciója, amely az x és y önkényesen inicializálva
Az 1. és 2., illetve.
Jól jönne getInt, de csak kell egy egyszerű feladat.
Szóval ez kemény kódolt az 1 és 2.
A vonalak 21 és 22, akkor nyilvánvalóan ki kell nyomtatni, x és y, soronként egyet.
Ezután on line 23, azt állítom, én csere ezeket az értékeket, pont, pont, pont.
Úgy tűnik, hívja a funkciót a 24 vezetéken nevezett csere
hogy a két argumentuma.
Ez teljesen legális a funkciókat, hogy két érveket.
Láttuk printf csináld már.
Így csere látszólag úgy x és y.
És ahogy a neve is sugallja, azt remélem, hogy ez fog
csere a két érték.
Így aztán azt állítják, on-line 25, cserélték.
És én reprint x és y, feltételezve, hogy
ők már valóban cserélték.
De ha tényleg futtatni ezt a programot -
hadd nyit egy terminál ablakot.
Hadd buggy3.
Ahogy a neve is sugallja, ez nem lesz jó vége.
Mert mikor Enter, észreveheti, hogy x 1 lehet.
y értéke 2.
És mégis a végén a program, hogy még mindig, valójában, az ugyanaz.
>> Tehát alapuló demonstrációs most Ken, mi folyik itt valójában?
Nos, belevetik magukat a csere funkciót.
Ez szuper rövid.
Ez csak néhány sornyi kódot hosszú.
De mi az alapvető probléma alapuló egyszerű elmesélt
ide Ken?
Miért csere törve?
[Hallhatatlan]
Pontosan.
Szóval tárolására egy másolatot, nem a változó magát.
Más szóval, swap látszólag két argumentuma egy int.
És ez önkényesen hívják és b.
És itt, amit átadott x és y, amelyek rendre 1 és 2.
De én nem szó szerint halad x.
Én nem szó szerint halad y.
Én halad egy példányát x és y egy példányát.
Olyan ez, mint majdnem olyan mintha illesztenie a swap értékeket
azt akarja, hogy ténylegesen manipulálni.
Tehát, ha ez a helyzet, amikor a program, start végrehajtó
vonal 35, majd 36 -
amikor megkapom a vonal 37, ezen a ponton a történet, mi az értéke?
Ezen a ponton a történet, 37. sor, mi az értéke ezen a ponton?
Így kéne lennie 1.
Igaz?
Mivel az x-ben született az első érvet.
És ez a funkció csak önkényesen hívja az első érv, a.
Hasonlóan az y, a második argumentum.
És ez csak önkényesen hívja a második érvet b.
>> Most ez a kettősség valójában meglehetősen egyszerűen magyarázta.
Gondolj bele.
Egyikünk sem találkozott, aki írta printf.
Szóval biztosan, ő nem tudja, mi a változók 30 évvel később megy
lehet nevezni.
Tehát ott kell, hogy legyen a különbséget, amit úgy hívnak változók
funkciók írsz, és amit úgy hívnak változókat függvények te
hívó vagy használ.
Más szóval, írtam változók x és y.
De ha valaki más írt a csere funkciót, ő biztosan
Nem tudom, mi az én változók lesznek hívják.
Szóval, rájönnek, hogy ez miért van ez a kettősség a neveket.
Technikailag, én is ezt véletlenül.
De akkor is telt el, mint példányban.
Ez csak egy tiszta véletlen esztétikailag ha ez a személy, aki írta
csere is használják ugyanazt a nevet.
>> Rendben van.
Tehát ezen a ponton a történet, 37. sor, egy 1 lehet.
b értéke 2.
És most folytassa cserélni őket.
Hát először is, hadd ténylegesen ezt sokkal egyszerűbben.
Én nem tudom, mi az a három sornyi kódot csinál.
Hadd ezt.
b kap.
kap a b.
Kész.
Miért van ez törött, logikusan?
Ez a fajta az intuitív dolog, igaz?
Tehát lesz b.
És b válik.
De a probléma az, hogy amint a 37. sor hajtja végre, mi a
értéke és b?
Ugyanaz, 1.
Mert már ütközés, hogy úgy mondjam, már megváltoztatta b, hogy megegyezzen a.
Tehát, ha 37. sor végrehajtásra kerül, ez nagyszerű.
Most már van két példányban az 1. számú belül ezt a funkciót.
Tehát, ha mondjuk a 38, a b kap, nos, te milyen csavaros.
Mert te csak hozzárendelése 1-1.
Már a fajta elvesztette értéket törődött.
>> Tehát az eredeti változata, észre amit tettem.
Én inkább volt egy harmadik sor kódot úgy nézett ki, mint ez.
Kijelentem, ideiglenes változó - tmp egy nagyon gyakori név
egy ideiglenes változót.
Ez egy int, mert van, hogy megfeleljen, amit szeretnénk, hogy egy másolatot.
Tárolom egy példányát a belsejében tmp. Tehát, ha 37. sor teljesítette,
a értéke az -
gyors józanság check -
1.
Értéke b értéke 2.
És az értéke tmp is 1.
Szóval most végre sor 38.
Szóval egyszer sor 38 hajt végre, a veszi értékének b.
És b 2 volt.
Tehát egy most 2.
Tehát ezen a ponton a történet, a 2, b 2,
és TMP 1 lehet.
Tehát most logikusan, tudjuk csak puff tmp értékét a b.
És mi történt.
>> Így már megoldotta ezt a problémát.
Sajnos, amikor fut a program ebben a formában, akkor valójában nem csere
érték.
De egyértelmű, miért?
Én rögzíteni a logikai problémát csak egy pillanattal ezelőtt.
De ismétlem, ha futtatni ezt a programot, az x és y változatlan marad végére
a program végrehajtását.
[Hallhatatlan]
DAVID J. Malan: Szóval már nem tért vissza semmit.
Szóval ez igaz.
De kiderült, hogy van egy kis probléma itt, mert eddig a
egyetlen dolog, amit tudtunk, hogy visszatérjen egy dolog.
És ez korlátozza a C. Egyszerre csak vissza igazán egy érték,
ebben az esetben én vagyok a fajta itt ragadtunk
mert tudtam vissza az új érték az x, illetve tudtam vissza a
új érték y.
De azt akarom, mindkettő vissza.
Tehát visszatérve nem az egyszerű megoldás van.
De a probléma alapvetően az oka?
Mit értünk tulajdonképpen elcserélték?
a és b.
De a és b másolatai x és y, ami azt jelenti, hogy csak tette mindezt
munka - mi most töltöttem, mint három perc alatt beszél a csere
funkciója és mindhárom változó.
És ez nagyszerű, tökéletesen helyes elszigetelten.
De a és b hatáskörét csupán ezeket a sorokat itt.
Szóval, mint egy for ciklus, ha kijelentem integer i belül a
loop - hasonlóképpen, ha nyilvánításáról és b belsejében, hogy a funkció
írtál, ők csak akkor érvényes belül ezt a funkciót.
Ami azt jelenti, amint csere történik végrehajtó és megyünk sorból a 24
25 vezetéken, X és Y jelentése nem változott.
Te csak elpazarolt egy csomó időt cseréje példányban változók.
>> Így kiderül, hogy a megoldást, ez valójában nem nyilvánvaló.
Ez nem teljesen elegendő visszatérni értékeket, mert tudjuk
csak egy értéket ad vissza.
És én tényleg szeretnék cserélni mind x és y ugyanabban az időben.
Így fogunk visszatérni ehhez.
De most észre, hogy a kérdés alapvetően abból fakad,
hogy a és b másolatok.
És itt a saját körét.
Nos, próbáljuk meg megoldani ezt valamilyen módon.
Hadd ténylegesen lépjünk vissza, és nyissa fel, mondjuk, a negyedik változat
E, buggy4.
És mi van ezzel?
Ez egy hasonló, de egyszerűbb probléma, hogy nézd meg, mielőtt veszünk egy stab
megoldására.
Ez a program az úgynevezett növekmény.
És ez nyilvánvalóan inicializálja az x értéke 1-et a 18 vezetéken.
Aztán igénypont x 1 lehet.
Aztán állítás növelésével, pont, pont, pont.
Én majd hívja növekmény.
De aztán a vonalak 22 és 23, azt állítják, ez már növekszik.
Azt állítják, x ma bármi is az, 2 feltehetőleg.
>> De ez a program hibás.
Mi a baj?
Igen?
[Hallhatatlan]
DAVID J. Malan: Pontosan.
Tehát x nyilvánították nyilvánvalóan on line 18.
Ez a belső fontosabb a kapcsos zárójeleket.
Tehát az egyszerű válasz az, hogy, nos, x létezik itt.
Nem létezik a sorban 32.
Szóval, ez a program valójában nem is összeállít.
A fordító, amikor megpróbálom összeállításakor ezt a kódot, fog kiabálni velem
néhány be nem jelentett azonosítója vagy valami ebben az értelemben.
Tény, hogy próbáljuk meg.
Ez teszi buggy4.
Ott van.
A be nem jelentett azonosító x sorban 32.
És valóban, legyünk kifejezettebben ma itt, hogy ez hasznos
nyitvatartási és otthon.
Figyelje meg, hogy ez egy kicsit rejtélyesen írva.
De az a tény, hogy a csengés már kiabált nekünk, mondván:
buggy4.c: 32:5, valóban hasznos.
Ez azt jelenti, hogy a hiba a vonalon a 32 karakter helyzetben öt.
Így egy, kettő, három, négy, öt.
Ez, ugyanis, ahol a probléma.
És azt is szem előtt tartani, a munkaidőn és otthoni Szerencsés vagyok itt.
Van egy hibát.
Ez lesz viszonylag könnyen kijavítani.
De ha egy egész képernyő teljes elsöprő hibaüzenetek újra,
észre, hogy a legalsó 1, hogy csak tünete
a legfelső is.
Tehát mindig üldözőbe le a hibákat fentről lefelé.
Mert lehet, hogy csak egy láncba miszerint javasol Ön
már sokkal több problémát, mint amennyit ténylegesen.
>> Szóval, hogyan tudnánk kijavítani ezt, ha a cél az, hogy növelni x?
Mi ez?
Oké.
Tehát tudjuk, hogy x globális.
Vegyük a parancsikont, hogy figyelmeztetett korábban.
De a fene, csak kell egy gyors javítást.
Tehát mondjuk int x itt.
Ez teszi x globális.
Tehát most fő fér hozzá.
És növekmény fér hozzá.
És hadd menjen előre, és fordítsd ezt most.
Győződjön buggy4, Enter.
Úgy tűnik összeállításához most.
Fussunk buggy4, és úgy tűnik, hogy valóban működik.
Most ez az egyik ezeket a dolgokat -
tedd, amit mondok, nem tudom, mert épp most végeztem itt.
Mert általában a programokat fog kapni sokkal érdekesebb és
sokkal hosszabb, mint ez.
És ha a megoldást az élet problémáira csak ah, tegye az összes
változók a tetején a fájl nagyon gyorsan tegye programok kap
horrifically nehéz kezelni.
Egyre nehezebb kitalálni új változó nevét.
Egyre nehezebb megérteni, hogy mit változó mit csinál.
>> És így általában, ez nem egy jó megoldás.
Szóval ezt jobban.
Nem akarjuk, hogy egy globális változót itt.
Én szeretnék növelni x.
Szóval tudtam nyilvánvalóan -
a végén a nap, ez a fajta ostoba történetet, mert mi csak ezt.
De ha nem tudtam róla üzemben, vagy én nem volt szabad
változtassa meg a fő önmagában, hogyan mást tehettem volna végre Ken ide, ez a
ideig nem kocka, hanem növelni?
Hogyan módosítható ez a dolog itt?
Igen.
[Hallhatatlan]
DAVID J. Malan: Oké, jó.
Akkor miért nem adom át az x?
És akkor ahelyett, vissza, miért nem csak ezt return x + 1?
Most, egy pár dolgot meg kell változtatni itt.
Én vagyok a jó úton halad.
Mit kell tennem, hogy csípés?
Valaki más.
Igen?
[Hallhatatlan]
DAVID J. Malan: Meg kell változtatni a visszatérési típus növekmény
mert nem érvényteleníti.
Void semmit nem jelent ez, hogy visszatért.
Világos azonban, hogy most ez.
Szóval meg kell változtatnia, hogy int összhangban kell lennie bármilyen
Én tényleg visszatér.
>> Most valami mást még hibás itt van.
Igen?
[Hallhatatlan]
DAVID J. Malan: Tehát azt kell növelni x?
[Hallhatatlan]
DAVID J. Malan: Ah, ezért kell átadni x.
Szóval kell, hogy ezt itt.
Tehát a prototípus, azt kell megváltoztatni ezt itt.
Tehát ez kell válnia int.
Ez lesz -
hmm.
Igazából van egy bug idelent.
Nézzük erősít ez egy első.
Mi ez valójában?
Szóval ez van, hogy egy int valamit.
Lehet x.
De őszintén szólva, ha elkezdesz hívja az összes változó x, ez fog kapni
kevésbé világos, hogy melyik melyik.
Szóval csak önkényesen válasszon másik elnevezési for my
segítő funkciók, a funkciók írok.
Hívjuk meg a.
Vagy lehetne nevezni - nevezzük even_number, hogy még világosabbá tegye.
Így aztán vissza kell térni függetlenül a szám plusz 1.
És most meg kell változtatni egy dolog ide és egy
más dolog itt.
Mit kell változtatni jarat: 21 az első?
El kell rendelni, hogy x.
Szóval nem lehet csak hívni növekmény x.
Meg kell emlékezni a választ a változó értéke x az
a bal oldalon.
És bár x most a bal és a jobb, ez teljesen jó, mert
a jobb oldali kerül végrehajtásra, az első, majd kerül lehuppant a baloldali
kéz dolog, x ebben az esetben.
És végül, ez egy egyszerű fix most.
Ez csak a meccsek, mi lent.
Int. szám.
>> Rendben van.
Szóval egy csomó változás egy igazán hülye funkciót.
De a reprezentatív dolog, hogy mi lesz egyre inkább szeretnénk csinálni.
Tehát, hogy buggy4.
Már elcsesztem valahol.
Ó, istenem.
Öt hibák, mondjuk, egy hat-line program.
Szóval, mi a baj a 18. sor, karakter 5?
Rendben van.
Szóval ezt bejelenteni int.
Rendben van.
Tehát lássuk, egy csomó egyéb hibákat.
Istenem.
19, 18, 21.
De ismétlem, nézzük csak törölje a képernyőt -
Ellenőrző L itt - és újra-run csenget.
Tehát 5 probléma valójában csak az egyik.
Tehát most fussunk buggy4, Enter.
Hú.
x lett eggyel helyesen.
>> Rendben van.
Van még kérdése, hogy hogyan növekmény számok?
Igen?
SPEAKER 2: Miért van az, hogy ha csak változtatni x számot a változó
nevét és akkor tudod, mit jelent?
DAVID J. Malan: Jó kérdés.
Hogy van az, hogy én is csak megváltoztatni x számra, és a program tudni fogja,
azonnal?
Szóval újra gondolni rá, mint e absztrakció.
Szóval, ha én vagyok a fő-és Ken inkrementális, őszintén, nem is érdekel
amit Ken hívja a iPad.
Nem érdekel, amit ő semmit, hogy köze van a végrehajtás
ezt a funkciót.
Tehát ez egy olyan végrehajtási részlet, hogy én, a fő, nem
kell törődnünk.
És így egyszerűen csak a változó következetesen belsejében a függvény, a szám itt
száma és itt, már kész is van, amíg én újrafordítani.
Ez a fajta, mint ha belegondolsz - sokan közülünk, azok, a vezető
engedélyek, akik már hajtott, vagy ha már akár hajtott egy autó -
legtöbbünknek fogalma sincs, hogyan működik egy autó a motorháztető alatt.
És szó szerint, ha megnyitja a motorháztető, a legtöbben - magamat is beleértve -
nem fognak igazán tudom, mit keresünk.
Mintha úgy érezheti, a dolgok, mint ez most.
De nem igazán érdekel, hogy hogyan kell az autó működik.
Nem érdekel, hogy mit kell az összes botok és dugattyúk és kábelek belsejében
az autó ténylegesen csinál.
>> Szóval, valami hasonlót, amit úgy hívnak a dugattyú nem számít
itt ebben az esetben.
Same ötlet.
Igen?
[Hallhatatlan]
DAVID J. Malan: Ha több felhasználási változó xa perccel ezelőtt
te, a programozó, kellene megváltoztatni őket mindenhol.
Vagy tudnál csinálni szó Fájl menü, majd a Keresés / Csere
valami ilyesmi.
De meg kell majd tenni ezeket a változtatásokat magad.
Meg kell lennie.
[Hallhatatlan]
DAVID J. Malan: A fontossági sorrendben, mint itt?
Ha ez int egy másik számot?
Igen.
Szóval, hogy számít, ha a funkció meghívása.
Tehát, ha én hívó növekmény itt valami vesszővel valamit,
van egy közvetlen leképezés.
Az első változó, bármi is hívják, készül egy példányát az első
érv ide.
Sajnáljuk, de ez nem lehet egy zárójelet.
A második érv egy vonalban áll a második.
>> Így annak érdekében, igen, számít.
Rendben van.
Sajnálom, hogy vett egy hosszú utat kell eljutni oda.
Egyéb kérdés?
Rendben van.
Tehát lássuk, ha nem tudjuk festeni a képet, hogy mi folyik itt valójában
van a motorháztető alatt, hogy úgy mondjam.
Tehát ez egy téglalap, amely képviseli a számítógép memóriájában.
Tehát akkor is, ha fogalma sincs, hogyan működik a memória, vagy hogyan RAM működik, legalábbis
feltételezzük, hogy van csokor is ezekben a napokban.
Van megabájt is.
Van gigabyte meg.
És tudjuk, hogy a hét nulla byte éppen mi?
8 bit.
Rendben, tehát 8 nullák és egyesek.
Tehát ha a számítógép rendelkezik koncert RAM, 2 giga RAM ezekben a napokban, van egy
milliárd vagy 2 milliárd bájt memóriával, vagy durván 8 milliárd 16000000000
bit, belsejében a számítógépen.
Most, ellentétben a kis gyapjas Willy például, ez nem mágneses részecskék
jellemzően többé.
Egyre inkább a laptopok legalább ez szilárdtest-meghajtók, SSD, hogy a
Csak még nem tartalmaz mozgó alkatrészeket.
Ez mind elektronikus.
Ez az összes villamosenergia-alapú.
Ezért gondolom, bár ennek a téglalapnak, mint csak képviseli egy vagy két
gigabájt memória van.
>> Szóval ez egy darab memória.
Most a világ számítógép-tudomány egyfajta megosztjuk le darabokat
memória különböző dolgokat.
Így például, ha ez a számítógép RAM - ahogy azt a
téglalap van - derült ki, hogy megegyezés, a tetején a RAM, így
beszélni, általában az úgynevezett szöveges szegmensben.
Ezek a nullák és egyesek, hogy már össze.
Tehát amikor mi már megnézték a motorháztető alatt milyen a.out van, minden
A nullák és egyesek -
futtatásakor a program, ezek a nullák és egyesek töltik a merevlemez
meghajtót úgynevezett RAM.
És a RAM, ők be a tetején.
Most közben, van más dolog.
Inicializált adatok inicializálatlan adatok.
A két rend memória, nézze meg a globális változók, amelyek
nem gyakran használják.
De néha, ha nem, akkor a végén ott is.
Aztán ott van egy másik dolog.
Környezeti változók, amelyet nem töltenek sok időt.
De aztán két fontos dolog, hogy vissza fog térni az ebben
félév, verem és a kupac.
>> Tehát a legtöbb számítógép memóriájában van fenntartva, ha fut a program
valamit úgynevezett stack és valami úgynevezett kupac.
És nem fogunk beszélni a halom ma, de mi lesz
beszélni a köteget.
És a verem hivatott megidézni a vizuális olyan, mint az étkezőben
étkezés tálcák Mather House, vagy bárhol megtörténhet, hogy, amennyiben a
étkező staff tisztítsa meg őket minden nap.
A verem őket fel emeleten fel.
És hasonlóképpen a memóriában van, ez az ötlet hozatala valamit a
verem, amivel valamit a stack, amivel valamit a verem.
És mit is jelent ez?
Nos, nagyításához csak az alsó fele ezt a képet, a számítógép
RAM, tegyen javaslatot a következő.
Kiderült, hogy amikor fut a program, mint a a.out vagy hello, bármi
a program, hogy írtál,
ismét a nullák és egyesek töltik fel a merevlemezen - ami
hosszú távú tárolás, ott marad akkor is, ha kihúzza a dugót -
betöltött RAM.
RAM gyorsabb, mint a merevlemez.
Ez kisebb, mint a merevlemezek.
De ez az, ahol programokat élnek, miközben futsz őket.
>> Szóval duplán kattintva a program a Mac vagy PC - ez betöltött
merevlemezt a RAM-ba.
Amint meg van töltve a RAM-ba, a nullák és egyesek megy az út tetején, a
úgynevezett text szegmensben.
De aztán, amint a program valóban elindul, a fő
függvény.
És a legfontosabb, ahogy láttuk, gyakran a helyi változók.
És ez ints és vonósokra, valamint karakter és hasonlók.
Tehát, ha a program, hogy már megírt, vagy a program, hogy van
dupla kattintás használt bizonyos változók belsejében a fő, hogy végül a
alján a verem a memória, hogy úgy mondjam.
Most még konkrétabban, mit jelent ez valójában?
Ez csak azt jelenti, hogy ha megyünk számlálni a dolgokat -
ha megyünk száma a byte RAM a számítógép észleli, hogy
Ez lehet byte szám nulla.
Ez lehet az bájt számú egy, kettő, három, négy, öt, hat, Az összes
az utat egészen hasonló -
2 milliárd lesz egészen ott a tetején.
Más szóval, amikor arról beszélünk, RAM memória szempontjából bájt, akkor
csak azt jelenti, hogy valaki úgy döntött, hogy mit kell számozni egyes
e darabokat memória.
>> Tehát, ha szüksége van 32 bites egy int, vagy meg kell 8 bit egy karakter, ha
vajon a végén a memória?
Nos fogalmilag, csak a végén az alján ennek
nevezett dolog a köteget.
De mi az érdekes most, amikor fő meghív egy függvényt.
Tegyük fel, hogy a nevezett funkció ize, csak egy tetszőleges nevet.
Mi történik a fő alján van e halom memória.
Foo most kerül a tetején a fő memóriában.
Tehát a helyi változók ize van a végén egyfajta fogalmi fenti
ezek a fő.
Ha foo felhívja másik funkció nevű bárban, azokat a változókat végül itt.
Ha bar felhívja valami mást, itt, itt, itt.
Szóval, mi érdekes fut egy program, hogy ha szükséges funkciókat,
és mivel ezeket a funkciókat szükséges funkciókat, és mivel ezeket a funkciókat szükséges funkciókat,
építesz ezt stack funkciók a memóriában.
És csak egyszer egy függvény mit kezdeni, hogy a memória vissza.
Tehát az egyik legegyszerűbb módja, hogy elfogy a memória egy számítógépes programot
levelet funkciókat, hogy soha nem tér vissza.
>> Így például, most bizonyítani annyira egy
szándékosan hibás program.
Hadd menjek előre, és nem # include , int main (void).
És én fogom csinálni, miközben (2> 1), amely valószínűleg nem fog soha
változtatni minket.
És hadd menjen előre, és most nem printf.
Igazából, ez lesz kevésbé vizuálisan érdekes.
Csináljuk ezt.
For int (i = 0; i> 0).
Nézzük, hogy ezt a hibát, i + +.
És ne printf itt.
Nézzük gyakorlatban mit prédikált.
Nézzünk egy módszer.
Void kórus, és mi mondjuk int i.
És akkor fogok mondani, printf -
oh, tegyük ezt sokkal érdekesebb.
Nézzük valójában nem nyomtat semmit.
Nézzük csak ezt.
Kórus (i).
>> Rendben van.
Szóval ez hibás, mert miért?
Én találtam ki, ahogy megy, mert a program valójában nem csinál semmit
érdekes.
De nem ez a cél.
A cél az, hogy írjon egy programot, amelynek fő funkciója mit csinál, úgy tűnik?
Hívjon magát.
És valóban, nem kell a hurok.
Nézzük még egyszerűsítése csak azért, hogy ne veszítsük szem elől, hogy valóban a
alapvető hiba.
Main felhívja kórus énekelni valami kórus.
Aztán csináltam valami hülyeséget, és volt kórus hívás kórus, mert azt feltételeztem,
valaki akarta végrehajtására talán.
És most ez nem fog fordítani még.
Azt kell, hogy mit csináljon?
Szükségem van a prototípus, emlékszem.
Szóval kell, hogy ide void kórus (int i).
>> Tehát most, ha én lemegyek ide -
valójában, hadd használja a nagyobb ablakban.
Menjünk előre, és hogy a kórus.
Használata azonosítatlan felvevő i.
Ó, ez hülyeség volt.
Nem kell az érvet.
Nézzük csak ezt.
Bárcsak mi kezdte így.
Nem lett volna sokkal könnyebb programot írni.
Tehát ott.
Most menjünk át a terminál ablak, re-run csenget.
És itt is vagyunk.
Ez nagyon gyors.
Mi valójában csak történt, igaz?
Nos, most fogok hozzá a nyomtatási sort, így látjuk.
Akkor hadd mondjam printf, mondjuk, itt vagyok.
Oké, nincs változó, akkor hagyjuk így.
Hadd futtassa újra tenni.
Hadd újra futni kórus.
És gyerünk.
Folytasd.
Mint félretéve, miért nem zuhant még?
A szegmentációs hiba történt szupergyors előtt.
[Hallhatatlan]
DAVID J. Malan: Pontosan.
Tehát idő kell nyomtatni.
Ez csak úgy több munkát a számítógép részét.
És ott is van.
Szegmentálás hiba.
>> Szóval észre, hogy milyen gyorsan programok futtatása.
Ha nem nyomtat semmit, szuper gyors.
De még mindig van ez a szegmens hiba, mert mi történik?
Nos, ha úgy gondolja, arról, hogy a számítógép memóriája megállapított, a
történetesen fő.
De itt -
hívjuk csak ezt a kórus, és hívjuk ezt a kórus.
És most, ha én azon vagyok, esztétika van, ez csak fog mondani refrén,
kórus, kórus, kórus, kórus, kórus, kórus, hirdetés nauseum.
És végül, mi fog történni?
Ha a nagy képet szó ez, mi történik, csak fogalmilag?
A stack túllépése a kupac.
Vagy ami még rosszabb, csak túllépését mindent, beleértve a szöveget szegmens, amely
A nullák és egyesek, hogy képviselje a program.
Röviden, ez csak szuper, szuper rossz.
Igaz?
A program nőttek ki az ellenőrzés alól.
Te így több memóriát használ, mint amennyit tervezett mindez azért, mert egy hülye
hibát, ebben az esetben.
Vagy ebben az esetben, egy nagyon tudatosan végzett funkció nevezte magát.
Most ez még nem minden rossz.
Funkciók nevezik magukat valójában nagy teljesítmény
ha használják azt.
Én nem használtam helyesen ide.
>> Szóval ez nem minden rossz.
De az a tény, hogy én valójában sosem hagyja abba hív magam alapvető
gyengesége itt ezt a programot.
Szóval, hová megyünk mindezt?
Nos, mi történik valójában?
Amikor hívja a növekmény funkció, mint mi csinálunk az említett példák
Nekem van egy érték, mint 1, hogy átadom be
Elmegyek egy példányát az első számú.
Tehát a következő történik.
Akkor menjünk be a növekmény példa.
És ez a fickó jog ide.
Tehát itt van, mi történik valójában.
Amikor felhívtam növedék, és átadom az x, piktogramokat ábrázoló mi
megy itt van ez -
ha van értéke 1 tárolják itt, és én tényleg hívni növedék, amely
most hívott kórus -
Igen, ez dobott le engem ide.
Így hívjuk ezt a növekmény.
És nem tudom, mi ez a következő funkció lesz.
Szóval, mi is történik itt van valahol a fő, van egy darab
memória tárolja az 1-es szám.
Amikor hívom növedék, én egy másik darabja a memóriát, de most már
van másolat 1.
Amikor növeljük ezt az értéket, ez lesz 2 - rettenetesen írt
képernyő van.
De akkor mi történik, amint a növekedés visszatér?
Ez a memória csak gets adta vissza az operációs rendszer, ami azt jelenti, az összes
tettél semmi hasznos.
Az egyik, hogy eredetileg szereplő fő továbbra is ténylegesen ott van.
>> Szóval, hová megyünk ezzel?
Nos, kiderült, hogy a memóriában van ez back to back sorozat
bájtok berakhatja stuff be
És kiderül, hogy már láttam valamit, ami magában foglalja üzembe
dolgok, háttal hátra hátra.
Mi egy string alapján heti egy és most heti kettő?
Tehát ez csak egy gyűjtemény a karakter.
Szóval kiderült, ahogy akkor tegye számokat a memóriában, hasonlóképpen akkor
be karaktereket a memóriában.
És amint kezdjük üzembe karakterek a memóriában háttal való visszatéréshez
vissza, kiderül, hogy a legegyszerűbb dolgok, mint a for ciklus vagy
a while ciklus, akkor navigálhat -
balról jobbra az egy karakterlánc karaktereinek -
és meg kell kezdeni masszírozó azokat különböző karakter összesen.
A válhat B. B válhat C. Szóval, hogy végül, tudjuk vállalni a
Angol mondat, hogy valóban van értelme és átalakítani minden egyes ilyen
betűket egyesével haladva végig a számítógép memóriájában maradt
jogot, hogy ténylegesen titkosítja.
>> Akkor nézzük az öt perces szünet van, és mikor jön vissza, akkor
kezdődik ez a folyamat a kódolási információ.
>> Rendben van.
Szóval mielőtt merülni néhány crypto és ezek a dolgok néven tömbök, hadd
szünet bármilyen kérdése van, mert úgy érzem, hogy tényleg ilyen zavaros egyes
azok a témák.
Szóval erősít most, ha tudunk.
Szóval csak beszélgettünk visszatérési értékeket.
Beszéltünk érveket.
És megbeszéltük ezt a fogalmat, amelyet akkor jön vissza a hét
jönnek, megtekintését memória egy csomó ilyen halmozott
tálcák, hogy úgy mondjam.
Alulról akár úgy, hogy minden egyes tálcára, hogy lesz fektetni a stack jelentése
egy függvény, ami jelenleg hívják.
Van még kérdése?
Szóval, mi a helyzet - hadd próbáljam feltettem egy kérdést.
Én folyamatosan romlik, de most már ez - you've minden látta a fiú arcát.
Szóval jövünk vissza ezt.
>> Szóval hadd kérdezzen itt.
Hadd egyszerűsíteni ezt vissza, hogy milyen volt, mielőtt néhány korábbi Q & A.
És az a tény, hogy a növekmény már nyitott zárójelet, int szám, zárt
zárójelet.
Mit jelent int szám képvisel?
[Hallhatatlan]
DAVID J. Malan: Egy érv.
Oké, de mi ez egy érv?
[Hallhatatlan]
DAVID J. Malan: Bocs, mi az?
SPEAKER 3: Valami, amit át be
DAVID J. Malan: Oké.
Tehát valami, amit át be
És általában, ez csak a bemenet.
Ha írsz egy függvényt, és a funkció célja az életben, hogy nem
egy kicsit más minden alkalommal, amikor használja, akkor az egyetlen módja,
hogy ez megtörténjen tényleg úgy tűnik, hogy biztosítsa számára bemenetet, hogy az
tehetünk valami mást, hogy a bemeneti minden egyes alkalommal.
>> Szóval, meg kell adnia két dolog, ha egy függvény bemenetek.
Meg kell adni a kívánt nevet adni, hogy a bemenet, pusztán
a saját kényelme, így lehet hivatkozni, hogy a funkció, amit
magát írunk, ahogy én tettem itt sorban 32.
De azt is meg kell határozni a típus, mert a C programozási nyelv
hogy csak szükség
hogy ha egy változó, meg kell mondanod a számítógépet, mit
adatokat adja meg,
nagy részben azért, hogy az tudja, hány bit
kiosztani az adott változót.
Mert lehet, hogy hat -
Sajnáljuk, de ez nem lesz hat.
Lehet 16.
Ez a 8.
Ez lehet 32, még 64.
De a számítógép tudnia kell.
Most az int a bal oldali képviseli azt, amit ezzel szemben?
[Hallhatatlan]
DAVID J. Malan: Mi ez?
[Hallhatatlan]
David J. Malan: A típus a funkció és, pontosabban, az
típusú termelését.
Rendben.
Tehát mivel a dolog zárójelben képviseli bemenet, ha van ilyen, a
dolog, hogy a bal oldali képviseli kimenet.
És ebben az esetben a növekmény látszólag ad vissza int.
És így int a visszatérési típus ezt a funkciót.
>> Mit jelent az, hogy vissza?
Szó szerint, akkor használja a kulcsszó vissza.
És akkor, ha amit vissza jobbra a kulcsszó egy
egész, akkor ez valóban megfelel amit ígért.
Te nem tehetett ilyet -
hello, világ -
mert ez egy string.
Nyilvánvaló, hogy nem egész szám.
Tehát röviden, a teher valóban minket, a programozó, hogy egyedi, mint
, amit mi vissza, és aztán tényleg megy a visszaküldésével.
És akkor, hogy egy srác világosabb összefüggésben -
Ott van megint.
A háttér -
nagy meglepetés jön, csak egy pillanatra.
A kontextus itt most az, hogy a számítógép memóriája, ismét egy
gigabyte, két gigabájt, mindegy.
Lehet, hogy több.
Talán kevesebb.
De a számítógép látja azt, hogy különböző szakaszok.
Valami megy le oda.
Valami más megy fel oda.
Különböző cucc megy a közepén.
És ma, csak kezdeni mondom ezt a történetet.
>> De majd jön vissza erre az idő múlásával.
Jelenleg az egyetlen darab memória tényleg érdekel a szöveg szegmens
mert csak képviseli a nullák és egyesek
hogy csenget a kimeneten.
Tehát, ha egy parancs futtatható a billentyűzetet, mint a.out, vagy dupla
kattintson egy ikonra a Mac OS vagy Windows, a program van betöltve a merevlemez
vezetni a RAM-ba.
És ez lehuppant a tetején a számítógép RAM, hogy úgy mondjam.
Most közben, mivel a program elindul és fontosabb lesz az úgynevezett a
program, amit írt, vagy a program a Microsoft vagy az Apple írta, annak bármely
lokális változók a végén ott az alján a számítógép memóriájában.
De ha felhívja fő egyéb funkció maga változók vagy
érvek, a végén fölé.
És ha ezt a funkciót hívja valamit, a végén fölötte,
fölötte, felette.
És csak ha egy funkciót történik végrehajtó működik a köteg tálcák, így
beszélni, kezdenek egyre alacsonyabb.
És ez az, amit akkor, dióhéjban, megmagyarázza, hogy miért, mikor hívja kocka -
vagy hívja növekmény -
te halad egy példányát az értéket.
És hogy ez mit jelent piktogramokat ábrázoló, hogy te szó szerint írásban
1-es szám egy másik részén memória, a változó, hogy 1, 2-ben az esetben,
növekmény -
vagy egy 8, abban az esetben, kocka -
és azután, hogy a dob memória el amint a növekedés vagy a kocka
függvény.
>> Kérdés.
[Hallhatatlan]
DAVID J. Malan: Hol - globális változók tárolják mi
Jelenleg az úgynevezett inicializált adatok vagy inicializálatlan adatok.
A különbség az, hogy, ha van egy globális változó, és rendelje hozzá
Azonnal egy értéket egyenlőségjel, azt végül a tetején ott.
És ha csak annyit int x pontosvessző nélkül értéket, végül enyhén
alacsonyabb RAM egyszerűen ilyen egyezmény.
Egyéb kérdések.
Rendben van.
>> Tehát ez a kép jön vissza, mint mi, hogy több erős, amit tehetünk
a számítógéppel.
De most vessünk egy rövid intro a kriptográfia, egy bizonyos típusú
titkosítás ez nem oldja meg a világ összes problémáit, de nem oldja meg
néhányat.
Ebben az esetben itt van egy úgynevezett titkos kulcsú titkosítás.
És a titkos kulcsú, amint azt a neve is sugallja, abból a biztonsági
Egy titok.
Így például, ha újra az iskolában, és te halad a
kis titka szerelmes levelet, hogy a fiú, vagy lány, akkor a zúzás - ha
akarta átadni, hogy a közönség, akkor valószínűleg nem írna
egy ilyen megjegyzést angol vagy bármi is a anyanyelve, hanem, ha
Lehet titkosítja.
Vagy lehet, hogy csak küldje el a szöveges üzenetet ezekben a napokban.
De lehet, hogy tényleg át őket egy megjegyzés az egész osztályteremben.
És hogy ezt biztonságosan, oly módon, hogy a barátok és a tanár
Nem tudom, mit írsz, lehet, hogy jön egy viszonylag egyszerű
algoritmus -
fiatal, bár lehet, hogy -
hogy csak tülekedés a szavakat.
Tehát ahelyett, hogy az írás egy, talán levelet B. helyett a B, akkor írjon
C. A helyett a C, lehet, ír D, és így tovább.
Vagy tudnál jönni egy kifinomultabb fordítását betűk
különböző betűket.
De a fogás a fiú vagy lány, akire te küldése tudomásul kell
tud valamit.
Ami mi is, természetesen!
Mint, mi a titka.
Mint mi ez közötti leképezés As és Bs és Cs és Ds?
Vajon csak hozzá egy, hogy úgy mondjam, az egyes betűk menni
A-B, B-C?
Ez bonyolultabb, mint ez?
Szóval, te és a törje szükségük van e titkos információkat.
De van egyfajta 22-es csapdája van.
Ha ez az első alkalom, hogy ezt a szerelmes levelet küldött a
osztály, hogyan, hogy fiú vagy lány lesz tudni, hogy mi a titok, még van?
Szóval titkos kulcs crypto nem oldja meg a világ összes problémáit.
És van valójában egy kapcsolat, mi jön vissza felé
félév végén.
>> Hasonlóképpen, van egyikünk talán valaha küldött -
hasonlóképpen, akkor a legtöbben nem tudják, hogy valaki, hogy működik, például, a
Amazon.com.
És mégis, sokan valószínűleg vásárolt cuccot az Amazon.com.
És mi már tanítottak, hogy azt feltételezik, hogy ezek az e-kereskedelem
tranzakciók biztonságos.
Igaz?
Az URL valószínűleg mondja https.
Van talán egy hülye kis lakat ikon valahol.
Van valamiféle titkosítás biztosítására a hitelkártya adatait
közted és az Amazon.com.
És mégis, ha a titkosítás magában tudva valami titkos, és még én nem
tudja valaki az Amazon, és én már biztosan nem rendezett semmilyen
titkos valakivel Amazon, hogyan kell a számítógép, vagy a böngésző csinálja ezt?
Nos, kiderült, van más típusú titkosítás teljesen, hogy megoldja
ezt a problémát.
De ma, akkor összpontosítani egyszerű, ahol meg lehet rendezni a
előre tudni, hogy valami titkos, mint a plusz 1 vagy valamilyen közötti leképezés As és Bs.
>> És a folyamat a kriptográfia általában magában foglalja ezt.
Van néhány egyszerű szöveg, látható itt a bal oldalon.
Te fuss át valamilyen algoritmus vagy az eljárás
titkosításához rá.
Lehet, hogy csak egy lesz B, B válik C. És akkor a végén a
titkosított szöveg legyen.
Közben, ha a szív megkapja a titkot jegyzet, ő kell majd
visszafejteni általánosan tolató hogy algoritmust úgy, hogy
vissza a sima szöveget.
Most már vannak fizikai inkarnációja ezt.
Például, ez egy kis titok dekóder gyűrű.
És ez egy gyűrű, abban az értelemben, hogy van 2 tárcsázza van.
A külső kerülete ez a dolog, van betűk A-tól Z-ig,
bár ők véletlenszerű sorrendben.
És a belsejében van valójában néhány számot, úgy, hogy ezzel a
gyűrű, akkor milyen kapcsolja be a külső, de a belső, hogy sorban
számok betűk.
És a klip fogsz látni - melyek közül néhány talán már látott 24/7
körül a karácsonyi szezonban egy film nevű A Christmas Story.
Látni fogod, hogy a kis Ralphie annyira lelkes, hogy kitaláljuk, milyen kis árva
Annie titkos üzenete az volt, hogy neki, hogy közölték, azt hiszem, a
képezik a numerikus üzenetek egy soros doboz.
És meg kellett felhalmozódnak az apró kártyák jött
A gabona mezőbe.
Meg kellett postázni őket!
Meg kellett, hogy újra a titkos dekódoló gyűrűt, így végre kitalálni
hogy mi a leképezés között betűk és számok,
vagy betűk és levelek.
Szóval neked ezt a rövid klipet A Christmas Story motiválni Pset 2 és
a vita, hogy egy pillanatra, a tömbök.
Tehát itt van Ralphie.
>> [VIDEO LEJÁTSZÁS]
-Legyen ismert, hogy minden rendű és rangú, hogy Ralph Parker-t nevezi ki
tagja a Kis Árva Annie Secret Circle és jogosult valamennyi
A kitüntetés és juttatások előforduló hozzá.
-Aláírás, Little Orphan Annie.
Ellenjegyezte, Pierre Andre!
A tinta!
Kitüntetések és előnyök már évesen kilenc.
Gyere, menjünk be vele.
Nem kell minden jazz-ről csempészek és kalózok.
-Figyelj, holnap este a záró kalandja The Black
Pirate Ship.
Most itt az ideje, hogy Annie titkos üzenete Önnek tagok
A Secret Circle.
Ne feledje, a gyerekek, csak a tagok az Annie Secret Circle tudja dekódolni
Annie titkos üzenete.
Ne feledje, Annie függ neked.
Állítsa be a csapok a B2.
Itt van az üzenet.
12, 11 -
-Én vagyok az első titkos találkozón.
-14, 11, 18, 16 -
-Pierre volt, nagy hangon ma este.
Elmondhatom, hogy ma este üzenete az volt igazán fontos.
-3, 25.
Ez egy üzenet Annie magát.
Ne felejtsd el, ne mondd el senkinek.
-90 Másodpercekkel később, én vagyok az egyetlen szoba a házban, ahol a fiú kilenc
tudott ülni magánélet és dekódolni.
Aha, B. elmentem a következő.
E. Az első szó legyen.
S. Ez jött könnyebb most.
U.
-Oh, ugyan már, Ralphie.
Mennem kell.
-Leszek lent, ma.
-Gee zseniális.
-T, O. Mindenképpen.
Ügyeljen arra, hogy mit?
Mi volt a Kis Árva Annie mondani?
Ügyeljen arra, hogy mit?
-Ralphie!
Randy már mennem kell.
Fogsz kérem, jöjjön ki?
-Rendben, ma.
Mindjárt ki.
-Én egyre közelebb van.
A feszültség borzalmas volt.
Mi volt az?
A sorsa a bolygó is lefagy a mérlegben.
-Ralphie!
Randy kell mennie.
-Leszek rögtön, az isten szerelmére.
-Gee, majdnem ott.
Ujjaim repült.
Az agyam egy acél csapda.
Minden pórus vibrált.
Már majdnem világos.
Igen, igen, igen, igen.
-Ügyeljen arra, hogy igyon meg Ovaltine.
Ovaltine?
Egy vacak kereskedelmi?
A kurva anyját.
[END VIDEÓ LEJÁTSZÁS]
>> DAVID J. Malan: Tehát ott van titkosítás.
Szóval, hogy a számítógép mehetünk végre akarja hajtani, vagy
képviselő dolgok, mint ez?
Nos, szükségünk van egy kifejezési módja magunkat egy kicsit rugalmasabban
a változók eddig tették.
Már volt ints.
Már volt karakter.
Már volt úszók és kétágyas és egy pár mások.
De ezek egyedi darab memória nem igazán teszi lehetővé számunkra, hogy
kifejezni dolgokat, mint a szavak és a mondatok és kifejezések.
Sőt, most már az úgynevezett ilyen dolgokat szálakat.
De megígérte, hogy ez tényleg csak egy egyszerűsítés CS50
könyvtár, hogy mi kívánó héjúak vissza.
>> És így kezdjük erre itt.
Hadd menjek előre, és megnyitja a fájlt -
az összes ilyen fájlok szokásos online -
hívott array.c megoldani a problémát független strings, de fest
kép itt, hogy hogyan lehet használni egy úgynevezett egy tömb.
Egy tömb adattípust.
Ez egy változó típusa, a fajta, amely több kisebb adattípusok
belül vissza háttal hátra.
Így például, ha azt akarjuk, hogy írjon egy kis programot, amely megadja a
quiz átlagosan egy tanfolyamot, mint a 50, amely két, kvízeket, akkor nagyon könnyen
írni ezt a program - alapján még néhány múlt heti anyag -
segítségével getInt és egy pár változók.
Int quiz1, int quiz2, és ez elég egyértelmű.
Ez talán 10, 20 sornyi kódot, max, programjának végrehajtása, amely arra kéri az Európai
Felhasználói két kvíz eredmény, majd kiszámítja az átlagos hozzáadni azokat
együtt, elosztjuk kettővel, és majd a nyomtatás az eredményeket.
Mi valószínűleg csinálni elég könnyen jelenleg követően
néhány percek számát.
>> De a probléma az, hogy tegyük fel, hogy 50 három vetélkedők vagy négy.
Tegyük fel, hogy akarta, hogy ugyanazt a programot egy osztály, hogy már
heti kvízek.
Gondolj egy osztály, amely a heti vetélkedők.
Ha van, mint a 16 vagy úgy hét a félév, most már 16 változó -
int quiz1, int quiz2, int quiz3, int quiz4.
Amint elkezdi látni ezt a redundancia, a másolás és beillesztés
A kód, meg kell kezdeni, hogy szeretne volt egy jobb út.
És szerencsére, mert a tömbök van.
Akkor csináljuk.
Először is, hadd mutassam be egy nagyon egyszerű dolog, hogy már nem használt eddig,
de látni fogod, hogy esetenként kódot.
Ez az, ami általában úgynevezett állandó.
Tehát ez egy állandó abban az értelemben, hogy ez az érték nem változik.
Az emberi egyezmény létrehozása során konstans legyen használni az összes tőke
betűk, csak úgy, hogy valóban kiemelkedik a kódban.
És a speciális kulcsszó, hogy használja a C # define.
Tehát, ha mondjuk # define, majd egy szóközt, majd a kívánt szó használni
a konstans nevét, és majd az értékét a konstans.
Szóval értesítést, ez eltér hozzárendelése valamit egy változót.
Nincs egyenlőségjel.
Nincs pontosvessző.
Ez az, amit az általánosan ismert, mint egy előfeldolgozó irányelv, hanem inkább a
hogy egy másik alkalommal.
>> Most, ez létrehoz egy változatlan értéket nevezzük vetélkedők, amelyek tényleges
numerikus érték 2.
Így bárhol látod kvízjátékok, vetélkedők, kvízjátékok során ezt a fájlt, ez
csak a 2-es szám.
Most, ha ránézek fő most lássuk, hogyan is működik ez.
Eleinte, úgy néz ki, egy kicsit rejtélyes.
De ez az egész cuccot a héten egy.
Kérje meg a felhasználót a fokozatok.
Hogyan tudjuk ezt megtenni?
Nos, sorban 22 -
ez tényleg a szaftos rész -
Kijelentem float, de nem csak egy úszó.
Én nyilvánította, inkább egy sor lebegőpontos értékek.
Ezt a változót fog hívni fokozatok, mint hallgatólagos itt.
De az egyetlen darab új szintaxis, akkor ezek a szögletes zárójelek azt a tényt,
azt mondtam float évfolyamon, majd nyitó zárójel, majd egy számot.
Értesítés, ha ez állandó, ez olyan, mint tettük ezt.
Ez azt jelenti, hé számítógép, adj 2 úszók, és hagyja, hogy a kollektív szükséges
őket fokozatok.
Ez ellentétben áll egy sokkal inkább unalmas folyamat ilyen.
Úszó grade1, úszó grade2, és így tovább.
Tehát egy tömböt lehetővé teszi számunkra, hogy végre ezt a gondolatot, de sokkal kevésbé messily, a
olyan módon, hogy tudjuk írni egy sor kód helyett, mondjuk, 16 egy 16
hét félév.
Szóval nem akartam hard-2-es kód, mert ha úgy gondolja, erre most
logikusan - tegyük fel jövőre CS50 változások 3 kvízek helyett.
És volt a 2-es szám van.
Volt a 2-es szám van.
Ez lesz nagyon unalmas és nagyon könnyen csavar, és véletlenül megváltoztatni
egy értéket a 3. és hiányzik néhány más érték a 2.
Szóval megyek helyette elvont ezt el, és ezt a konstans, hogy mivel az
neve is mutatja, soha nem változik.
És most, nem számít, hogy mi a különböző vetélkedők idén vagy jövőre, I
Csak meg kell változtatni, hogy egy helyen, akár itt a tetején.
>> Szóval ez minden állandók.
Eközben az új fogalmi jellemzője az, hogy egy tömb.
Tehát a szögletes zárójelek add nekem ezt a sok úszók és lehetővé teszi számomra együttesen
hívja őket fokozatok itt.
És most lássuk, mit fogok csinálni.
Itt sorban 24 a kezdete a hurok.
Ez tényleg semmi fantázia.
Ez csak a vetélkedők helyett beégetett számot.
De nincs semmi intellektuálisan más ott a múlt héten.
Ez csak printf.
Szóval printf ("kvíz-szám% d% d"), mert én csak azt szeretném, hogy nyomtassa ki nekem quiz
számú két és majd két, két.
Tehát ez pusztán esztétikai dolog.
De az érdekes rész most már összhangban van az 27.
Annak érdekében, hogy kitöltse az egyik két helykitöltõvel egy lebegőpontos
értéket, akkor újra használni szögletes zárójelben.
Ebben az esetben én vagyok a i, mert ez a for ciklus kezdődött i egyenlő
milyen értéket, úgy tűnik?
0.
>> Tehát az első iterációs e hurok, az olyan, mintha én
írta ezt a kódot.
De a második iteráció e hurok, az olyan, mintha én
írta ezt a kódot.
De az a tény, hogy én vagyok egy változó tökéletes, mert, mint a neve
javasolja, ez változó értéke minden iteráció.
Szóval kitöltésével ezt a tömböt egy helyen egy időben.
Mit jelent ez a tömb néz ki?
Nos, az ok, amiért felhívta a szuper egyszerű téglalap a képernyőn itt
mielőtt volt az oka.
Egy tömb csak egy darab memória, majd egy másik darabja a memóriát,
majd egy másik darab a memória, és így tovább.
Szóval, ha a tömb mérete 2, ebben az esetben is, minden, amit tenne a
gépelni az én kvíz eredmények, mint itt.
Van 100 ez.
És akkor kaptam a 99 ez.
Akkor ez a memória talán nem is lehet használni, mert én még csak kérte a
számítógépet egy sor 2-es méret.
Ezek a terek még mindig ott vannak.
Igaz?
Még mindig van két gigabájt RAM-mal, akkor is, ha csak a
kér két úszók.
Tehát az ötlet mögött tömbök, hogy a számítógép csak úgy egy darab memória
majd arányosítja kisebb darabokra háttal hátra hátra.
És ez minden egy tömb.
Ez egy folytonos darab memória, belsejében, ahol Ön a dolgokat.
>> Most ez történik, akkor nem csak valami unalmas számtani.
Ha görgessen itt, ez az, ahol én, akkor iterációkhoz a tömbben.
Jöttem fel az összegzése minden érték a tömbben.
És aztán használhatod a round függvény itt ténylegesen a
Összefoglalva osztva vetélkedők.
De hadd lóbálja a kezét, hogy a fajta elég aritmetikai most.
De minden, ami csinál nekem végeredményben kiszámításánál egy átlagos.
Tehát először kvíz plus 2. kvíz, osztva 2-vel, majd a nyomtatás
ki, mint egy int.
>> De térjünk most átmenet egy másik példát nevű sztring1,
amely hasonló képet fest, de a szálakat.
Hadd menjek előre, és egyszerűsíteni ezt csak egy pillanatra.
És bocsásd meg a behúzás most.
Közleményt a 19 E példa, kapok egy string a felhasználó elől.
De észre, mit csinálsz a következő vonalak 22-től kezdődően.
Én valójában iterációjával tól i-ig - és ez egy új trükk -
strlen, string hosszát.
Ez a funkció, hogy jön a C, hogy ha át, hogy egy string, azt mondja
hogy hány karakter van, hogy a string.
Ez minden.
Az a tény, hogy ez strlen helyett string hossza mindössze azért, mert
tömörebb.
30 évvel ezelőtt, az emberek szerették írni dolgokat tömören, amennyire csak lehetséges.
Így már tartanak az egyezmény ide.
i + + csak azt jelenti, növeljük i egyes iteráció.
És most észre, ami igazán érdekes.
Tehát a 24. sor, azt mondom számítógép, adj egy karaktert, nyolc
bit, és hívja meg c.
De mi ez a jobb oldali mond?
Magyarul, ez mit jelent?
[Hallhatatlan]
DAVID J. Malan: Pontosan.
Add ide az első karakter a tömbben.
Vagy még általánosabban, add nekem az i-edik karaktere a tömbben.
És észre fontos most, hogy a számítógép-tudósok vagyunk valójában
számlálás 0-tól.
Nem mérlegelési most kezdeni ezt.
Most meg kell viselkedni összhangban a számítógép elvárásait és
számít nulla, mert [0] lesz az első
karaktert a string.
[1] lesz a második.
[2] lesz a harmadik, és így tovább.
Szóval ezt a programot, ha azt fordítsd le - ez ismét string1.
>> Tehát, hogy string1.
És most fut string1 az én terminál ablakban.
Ez vár bemenet, így fogok gépelni, mondjuk, David.
Az Enter billentyűt.
És most kiírja DAVID mindezt különböző vonalak, mert
észre, hogy mit csinálok.
Én nyomtat egy karaktert egy időben.
Most nem megyünk bele részletesen ma ezt.
De el kell hagyni egy pillanattal ezelőtt ezt az ellenőrzést itt.
Kiderült, hogy ha a felhasználó nem működött megfelelően, ellenséges, vagy csak
zavaros, akkor valóban nem adnak egy sor hosszasan.
Ha bejön a rossz gombot a billentyűzeten, akkor adhat
nincs karakterlánc egyáltalán.
Vagy ha rosszindulatú, akkor megpróbál beilleszteni egy gigabájt érdemes egy
esszé, hogy töltse ki ezt a fonalat.
És ha a számítógép elfogy a memória, kiderül, hogy megyünk
hogy újra ezt a különleges értéket nevezzük null.
Tehát most már, csak tudom, hogy van ez a különleges értéket, hogy az úgynevezett null
lehetővé teszi számunkra, hogy ellenőrizze, amikor elfogyott a memória, többek között.
>> De ha kinyitom most string2, észre egy különbség van.
Értesítés egy különbség itt string2.
Ezzel string2, ez a for ciklus egy kicsit más.
Hadd törölje a null annak érdekében, hogy meg tudjuk beszélni ezeket egy másik alkalommal.
De mi más a for ciklus ebben az időben?
És mehetek vissza az előző példában.
Szóval ez változat kettő.
Ez a verzió egy.
Egy, kettő, egy, kettő.
Tehát a strlen hívás hol?
Ez az első része a hurok.
Minden gondolat, hogy miért csinálom ezt?
Igen.
[Hallhatatlan]
DAVID J. Malan: Szóval nem kérdőjelezik meg a függvény minden egyes alkalommal.
Pontosan.
Emlékezzünk vissza, honnan a hurok, hogy ők szuper egyszerű, ha egyszer valami
Megértjük, hogy ez az inicializálás, a
állapotban van, és a frissítés.
A probléma az, hogy a feltétel történik minden
iteráció a hurok.
És így ebben a példában itt, mi a rossz, az a tény,
hogy ez az én állapotot?
Te hívó strlen újra és újra és újra.
De ha egyszer már beírt DAVID, a hossza a string öt.
És ez nem fog megváltozni minden iteráció a hurok, mert a
húr mindig D-A-V-I-D. Szóval ez egy tipp, hogy mi folyik itt, hogy legyen egy
egyre fontosabb gondolat ismert tervezési döntés, ha - csak nem
hogy a számítógép nem felesleges munkát.
>> Most, mint egy besurranó elõnézetét Pset 2, Pset 2 a standard kiadás
megy kihívás, hogy ténylegesen alkalmazni bizonyos számú titkosítási, néhány
számos titkosítási algoritmusok, hogy akkor mind a titkosítani és visszafejteni
titkos üzeneteket, ugyanúgy, mint az egyik Ralphie ott dekódolni.
A hacker kiadás Pset 2, fogunk menni egy kicsit tovább.
Fogunk átadni egy fájlt tényleges számítógépes rendszer, amely tartalmaz egy
csomó felhasználónevek és a tényleges titkosított jelszavakat, és a kihívás
A hacker verzió lesz feltörni ezeket a jelszavakat és a szám
hogy mi kriptográfia, vagy mi titkos használták ténylegesen
generálni ezeket a jelszavakat.
És mi lesz, hogy ezt az egy új funkció itt a C, hogy adok
csak egy demo néven ismert parancssori argumentumok.
>> Így kiderül, mint néhány talán már látható a szakaszban vagy tankönyveket,
fő nem mindig kell semmisnek zárójelben.
Kiderül, hogy fő is lehet írni, mint ez a két érv,
argc és argv, ahol argc a szavak száma, hogy a beírt után
a program nevét a parancssorban.
És argv a tényleges szavakat.
És ahogy a szögletes zárójelek ott utalnak, argv nyilvánvalóan egy tömb.
Ez lesz egy string után egy string után egy string a memóriában.
Szóval mit fogunk tudni csinálni, kezdve a Pset 2, a
valami ilyesmi.
Ha teszek argv1, amely példa jövünk vissza hétfőn, és fuss
azt, észre, hogy nem úgy tűnik, hogy semmit sem.
Csak kiírja a saját nevét.
De ha azt mondom, viszlát osztály, azt tapasztaljuk, hogy ez a program látszólag végigmegy
át az egyes szavak, amelyeket írt a billentyűket.
És az eszközöket, amelyek segítségével fogunk hozzáférni szó, hogy a felhasználó
beírt a prompt módosítja fő kezdődően ezen a hétvégén, az int
main (void) hova int main (argc, argv).
És így fog megszületni parancssori argumentumok.
És ha egyszer igazán kifinomult most ezt, akkor képes lesz arra, hogy írjon
Tényleg trippy programok, mint például ez itt, amely fölé és azon túl
bizonyos funkcióit tettünk eddig, de minden nagyon erős.
>> Így fogjuk elhagyni ezt e a képernyőn.
És mi lesz látni hétfőn.