>> DAVID MALAN: Hello, és szívesen vissza CS50.
Tehát ez a hét végén négy.
Csak egy bejelentést az első.
Így az úgynevezett ötödik hétfő jön a jövő hétfő.
Ez a lehetőség, hogy változik SAT / UNSAT egy levelet minőségű, vagy
levél minőségű SAT / UNSAT.
Bosszantó, hogy a folyamat nem igényel aláírás, mert meg kell adnia
ki egy ilyen rózsaszín add / drop formában.
>> Mivel technikailag a SAT / UNSAT verzió és a levél minőségű verzió
van különböző katalógusszámok.
De nem nagy ügy.
Csak gyere fel hozzám, vagy a Rob vagy Lauren bármely pontján.
Vagy írjon nekünk, ha nem az a fajta a papírmunka van szükség ma, és mi
lesz, biztos, hogy segít, hogy gondoskodik, hogy mielőtt hétfő.
>> Rendben, így ma -
valóban, van egy kis visszhang.
Tudunk hang engem egy kicsit?
OK.
Tehát ma bemutatjuk a téma ismert mutatók.
És én elismerem, hogy ez az egyik bonyolultabb témák, hogy hajlamosak vagyunk
terjed ebben az osztályban, vagy tényleg olyan bevezető kurzus, amely C-
>> De hogy szavam rá, különösen ha az agyad úgy érzi, egy kicsit hajlított
ma és a hetek.
Ez nem reprezentatív veszed rosszabb ebben ez csak azt jelenti, hogy az
ez egy különösen bonyolult téma Ígérem, hogy, néhány hét
így, úgy tűnik, nagyon is feltűnően egyszerű visszatekintve.
>> Még mindig emlékszem, hogy ezen a napon.
Ott ültem Elliott Dining Hall, mellett ült a TF Nishat Mehta,
aki belföldi illetőségű Elliott ház.
És valamilyen oknál fogva, ez a téma csak rákattint.
Ami azt jelenti, hogy én is küzdöttem vele bizonyos ideig, de
minden tőlem telhetőt, hogy segítsen elkerülni az ilyen küzdenek a téma, hogy végül
elég erős.
>> Sőt, az egyik téma megbeszéljük Az elkövetkező hetekben, hogy a
a biztonság, és hogyan lehet valóban kihasználni gépek módon
hogy nem szánták.
És ezek a kitermelés általában az eredmény a hibák, a hibák, hogy
az emberek, hogy az nem érti, néhány Az alapul szolgáló végrehajtási
részletek keresztül mely programok készülnek.
>> Most, hogy ez úgy tűnik, annál is inkább felhasználó barátságos, gondoltam játszani 10
második preview egy kis claymation alak neve Muci, aki hozta
élet egy barátunk a Stanford, professzor Nick Parlante.
Szóval, engedjék meg, hogy ezt teaser a Muci itt.
>> [VIDEÓ LEJÁTSZÁS]
>> -Hé, Muci.
Kelj fel.
Itt az ideje a mutató móka.
>> -Mi az?
Ismerje meg a mutatók?
Ó, Komámasszony.
>> [END VIDEÓ LEJÁTSZÁS]
>> DAVID MALAN: Ez Stanford számítástechnika.
Így bővebben jönni.
>> [Taps]
>> DAVID MALAN: Sajnálom, Nick.
>> Így emlékszem, hogy az utolsó alkalom, hogy véget ért ez igazán izgalmas filmsorozat
amely ezt a funkciót egyszerűen nem működik.
Legalábbis ösztönösen, úgy éreztem, mint meg kell dolgozni.
Egyszerűen csere az értékeket A két egész szám.
De emlékszem, hogy amikor kinyomtatható a eredeti értékek main, egy és
kettő, hogy még mindig egy és kettő és nem kettő, egy.
>> Hadd valóban váltani át a készülék.
És írtam egy kis csontváz kód előre itt, ahol azt állítják, hogy x
1 lesz, y lesz 2.
Én majd nyomtassa ki mind a értékeket print f.
>> Aztán azt állítják le, hogy itt fogjuk cserélni őket.
Hagytam egy üres hely itt, hogy töltse ki a ma csak egy pillanat.
Akkor fogom azt állítani, hogy a két változó is cserélték.
Aztán megyek nyomtatni őket újra.
És remélhetőleg, azt kell látni az 1., 2..
2, 1.
Ez a végtelenül egyszerű, cél most.
>> Szóval hogyan megy a csere két változó?
Nos, ha azt javaslom, hogy ezek az csésze jelenthet memória a számítógép.
Ez egy pár falatot, ez egy másik pár falatot.
Lehet, hogy van egy önkéntes gyere fel, és mix nekünk italt, ha ismerős?
Gyere fel.
Mi a neve?
>> JESS: Jess.
>> DAVID MALAN: Jess?
Gyere fel, Jess.
Ha nem bánod, meg kell tenni a Google Glass rád így tudjuk
halhatatlanná ezt.
OK, üveg.
Videofelvétel készíthető.
És OK, mi jó megy Jess itt.
Rendben van.
Örülök, hogy megismerhetem.
>> Tehát mi azt szeretném, ha nem itt - ha lehet, elég gyorsan -
csak tölt minket fél pohár narancs juice és egy fél pohár tejet,
ami gyakorlatilag az 1 egy csésze, és 2, a másik kupát.
>> Ez lesz jó felvételeket.
>> JESS: Bocsánat.
>> DAVID MALAN: Nem, nem.
Semmi gond.
Szép.
Rendben, így már négy bájt értékű narancslé.
Majd nevezte az 1 értéket.
Most újabb négy bájt értékű tejet.
Hívja az érték 2.
Tehát x és y, ill.
>> Rendben, most, ha a feladathoz - neked, Jess, előtte minden
az osztálytársaival -
hogy swap az értékeket az x és y az ilyen hogy szeretnénk a narancslé, a
egyéb csésze és a tej a pohár, hogy Lehet, hogy Ön - mielőtt ténylegesen
it - járni ezt?
>> OK, bölcs döntés.
Tehát szükség van egy kicsit több memóriát.
Akkor most ki egy ideiglenes csésze, ha úgy tetszik.
És most folytassa cserélni x és y.
>> Kiváló.
Így nagyon jól sikerült.
Nagyon köszönöm, Jess.
Tessék.
Egy kis ajándék.
>> OK, így nyilvánvaló, hogy rendkívül egyszerű ötlet.
Teljesen intuitív, hogy szükségünk van egy kicsit több tárhely - ebben a formában,
egy csésze -, ha valóban szeretnénk csere a két változó.
Tehát lássuk, hogy pontosan.
Itt fenn a kettő között, ahol azt állítják, én vagyok lesz csinál valami csere, én
megy előre, és kijelentik temp.
És én meg azt egyenlő, mondjuk, x.
>> Aztán megyek értékének módosításához x akárcsak Jess volt itt a
tej és narancslé hogy egyenlő y.
És fogok változtatni y, hogy egyenlő hogy ne x, mert most mi lenne
megragadt egy kört, hanem temp.
Hol átmenetileg - vagy ahol Jess átmenetileg fel a narancslé
azelőtt, hogy felülírja pohár tejet.
>> Hadd megy előre, és most ezt.
Úgy hívják noswap.c.
És most hadd futni nincs csere.
És valóban látom, ha bővíteni a ablak egy kicsit, hogy a
x értéke 1, y értéke 2.
És akkor x értéke 2, y értéke 1.
>> De emlékszem, hogy hétfőn mi mindent egy kicsit másképp, amelyben azt
helyett végre egy segítő funkció ha úgy tetszik, hogy valójában semmis.
Hívtam cserélni.
Én adtam két paramétert, és hívtam őket, és felhívtam őket b.
>> Őszintén szólva, nem tudtam hívni őket, x és y.
Nincs semmi megállás nekem csinálja.
De azt állítják, hogy ez akkor egy kicsit félreérthető.
Mivel a visszahívás hétfőn, hogy mi azt állította, hogy ezek a paraméterek
példányban értékeket át be
Tehát csak szórakozik a szem előtt tartva, azt hiszem, ha használja
pontosan ugyanazokat a változókat.
>> Úgyhogy ahelyett, hogy hívom őket a és b, csak az érthetőség kedvéért.
De nevezhetjük őket leginkább , amit csak akarunk.
És fogok másolás és beillesztés hatékonyan ezt a kódot onnan fentről
le itt.
Mert most láttam, hogy működik.
Szóval ez elég jó formában.
És én megváltoztatni a x egy, az x egy, az y a b és az én y b.
>> Más szóval, pontosan ugyanaz a logika.
Pontosan ugyanaz a dolog, hogy Jess volt.
És akkor az egyik dolog, amit meg kell tennie, akár Itt, persze, most hivatkozhatnak erre
funkció, vagy hívja ezt a funkciót.
Így fogom hívni ezt a funkciót két bemenet, x és y, és a hit a Mentés gombra.
>> Rendben, tehát alapvetően ugyanaz a dolog.
Ami azt illeti, már valószínűleg készül a program szükségtelenül bonyolult a
írás egy függvény, ami csak bevétel mintegy hat sornyi kódot míg én
korábban hajtott végre ez mindössze három.
>> Hadd megy előre, és most remake ez, hogy nincs csere.
Rendben, elcsesztem itt.
Ez kell egy hiba, hogy lehet, hogy lásd egyre gyakrabban, mint a
programok kap bonyolultabb.
De van egy könnyű megoldás.
Hadd lépjünk vissza ide.
>> És mi az első hiba látok?
Implicit nyilatkozat.
Mit jelent, hogy általában azt jelzi?
Elfelejtettem a prototípus.
Elfelejtettem, hogy megtanítsa a fordítónak, hogy csere fog létezni annak ellenére, hogy
nem létezik a kezdet kezdetén a program.
Szóval, én csak mondani érvénytelen, csere, int egy int b, pontosvessző.
>> Szóval nem fogom újraimplementálni azt.
De most ez egyezik azzal, amit itt lent.
És vegyük észre, hiányzik a pontosvessző itt, ami nem szükséges, ha
megvalósítani.
>> Hadd remake ez, hogy nincs csere.
Sokkal jobb formában.
Fuss nincs csere.
És a fenébe is.
Most újra itt vagyunk, ahol voltunk hétfőn, ahol a dolog nem cserélhető.
>> És mi az intuitív magyarázat , hogy miért ez a helyzet?
Igen?
>> DIÁK: [hangtalan].
>> DAVID MALAN: Pontosan.
Tehát a és b másolatai x és y.
És valóban, minden alkalommal, amikor már hívás funkció eddig, hogy
halad változók, mint a ints -
mint csere vár itt -
srácok már halad példányban.
>> Most, hogy azt jelenti, hogy tart egy kicsit az idő, egy pillanatra, hogy a
számítógép másolni a biteket az egyik változót a biteket egy másik.
De ez nem olyan nagy dolog.
De ők mégis egy példányt.
>> És most, összefüggésben a swap, Én valójában sikeres
változó a és b.
Sőt, most egy gyors józanság ellenőrzés.
Print f a nem% i, az új vonal.
És nézzünk csatlakoztassa a.
Most tegye ugyanezt b.
És lássuk ugyanezt itt.
>> És most hadd másolja ugyanezen sorokat Ismét alján a függvény
miután a három sor érdekes volna végre, és
nyomtatása és b ismét.
Tehát most nézzük, hogy ez, hogy nincs csere.
Engedjék meg, hogy a terminál ablakot kicsit magasabb, hogy látjuk
több is egyszerre.
>> És futni nem csere.
x értéke 1, y értéke 2. a értéke 1, b értéke 2.
Aztán, a értéke 2, b értéke 1.
Így működik, mint Jess volt itt belül csere.
De persze, ez nem volt hatással A változók fő.
>> Így láttunk egy trükk, amely által is rögzíti, ugye?
Amikor szembe ezzel a kör kérdés, akkor is csak punt és x
és y milyen változók helyett?
>> Lehet, hogy azok a globális.
Tedd legtetején a fájl mint mi, még a játék a 15.
Mi egy globális változót.
De az összefüggésben a játék egy 15, ez indokolt, hogy a globális
változó, amely a fórumon, mert egészét 15.c minden
végre akarja hajtani, hogy a játék.
Ez az, amit a fájl létezik, hogy nem.
>> De ebben az esetben is, én vagyok hívás funkció csere.
Azt akarom, hogy cserélni két változó között.
És meg kell kezdeni, hogy úgy érzi, csak hanyag ha az oldat minden kedves
probléma, amikor befut hatály kérdés, hogy ez a globális.
Mivel nagyon gyorsan a program majd lesz elég a rendetlenség.
És mi volt, hogy nagyon takarékosan Ennek eredményeként 15.c.
>> De kiderül, hogy van egy jobb út összesen.
Hadd valóban vissza és törölje a nyomtatás F-nek, csak azért, hogy egyszerűsítse a kódot.
És hadd javasoljuk, hogy ez valóban rossz.
De ha inkább adjunk hozzá néhány csillag és a csillagok, én ehelyett viszont ez
funkció az egyik, hogy ez valóban működőképes.
>> Hadd menjen vissza, és elismerem azt csillagok mindig nehéz,
így azt mondom csillagok.
Én csak fess fel, hogy az egyik.
Rendben van.
És most, mit fogok tenni helyette?
>> Tehát először is, fogom megadni hogy ahelyett, hogy továbbítaná egy int a
A swap funkció, én inkább A mondani int csillag.
Nos, mit jelent a csillag jelzi?
Ez az a fogalom, amely a mutató Muci, a claymation karakter volt,
hivatkozva egy perce.
>> Tehát, ha azt mondjuk, int csillag, a jelentését ez most az, hogy a nem lesz
telt annak értékét.
Ez nem fogja másolni be
Inkább a címét is fog át be
>> Így emlékeztet arra, hogy a számítógép belsejében egy csomó memóriát, különben
néven RAM.
És ez csak egy RAM csomó bájt.
Tehát, ha a Mac vagy a PC két gigabájt, van 2
milliárd bájt memóriát.
>> Most csak tegyük fel, hogy csak a a dolgok szép és rendezett, mi
hozzá egy címet -
a szám -
minden byte RAM a számítógép.
Az első byte-ja a 2 milliárd a szám nulla.
A következő egy byte számú, szám két, egészen akár, pont pont
dot, hogy mintegy 2 milliárd euróra.
>> Így számát bájtok A memória méretét a számítógépében.
Tehát tegyük fel, hogy ez az, ami értünk egy címet.
Tehát, ha látom int csillag, mi folyik itt hogy átment csere most a
címét.
Nem az érték, de függetlenül a postai cím, hogy úgy mondjam -
helyét a RAM-ban.
>> És hasonlóan b, megyek mondani ugyanezt.
Int, csillag, b.
Mellesleg, technikailag a csillag mehet más helyeken.
De majd egységesíteni a csillag, hogy közvetlenül az adattípus.
>> Tehát csere aláírás most azt jelenti, hogy nekem címét egy int, és a hívás
a címet a.
És adj egy címe egy int, és hívja a címet b.
>> De most én ide a kódot meg kell változtatni.
Mert ha kijelentem int temp -
amely még mindig az int típusú -
de tárolja benne egy, milyen érték?
Ahhoz, hogy tiszta, jól vagyok véget egy a a kódot írt most?
>> Teszem a helyét a.
De nem érdekel a hely, ugye?
Temp létezik csak Jess harmadik csésze létezett, milyen célból?
Tárolásához egy értéket.
Tej vagy narancslé.
Nem valóban tárolja a címét vagy olyan dolog, amely úgy érzi, a
kis értelmetlen ebben a valós nemzetközi környezethez egyébként.
>> Szóval tényleg, mit akarok tenni a temp nem a címét egy, de a
tartalmának.
Tehát ha egy olyan szám, mint 123, ez 123. byte memóriát, hogy az igazságos
történetesen megszálló, hogy az érték Egy történetesen megszálló.
>> Ha akarok menni arra a címre, Azt kell mondani, a csillag.
Hasonlóképpen, ha én változtatni, mi A cím egy, tudom megváltoztatni
ezt kezdeni.
Ha azt akarom, hogy tárolni, mi a helyen, és mi a helyszínen
A b, b csillag csillag.
>> Tehát a rövid, akkor is, ha ez nem elég süllyed még -, és én nem számíthat
, hogy ez ilyen gyorsan -
észre, hogy minden, amit csinálok raksz ezek a csillagok az én változók
mondás, ne fogd az értékeket.
Ne változtassa meg az értékeket.
Hanem menj azokra a címekre és kap az értéket.
Megy, hogy a cím és a változás az értéket is.
>> Tehát most hadd lépjünk vissza a csúcsra, csak rögzíti ezt a sort itt, hogy
változtassa meg a prototípus, hogy megfeleljen.
De most meg kell tennie, még valami.
Ösztönösen, ha már megváltoztatta a típus azokat az érveket, csere vár,
mit kell tennem, hogy változást a kódot?
>> Amikor hívás csere.
Mert most, mi vagyok Úgy halad, hogy a csere még?
Az érték x és y értékét, vagy A tej és a narancslevet.
De én nem akarom.
Én inkább szeretnék átadni, mi?
A helyszín és az x a helyét y.
Mi a postai címek, hogy úgy mondjam.
>> Így kell csinálni, hogy van egy jelet.
Jel hangzik, mint a cím.
így n jel, a cím Az x és az y címét.
Tehát szándékos, hogy használjuk ampersands hívásakor a függvény,
és a csillagok, amikor kijelentette, és mikor végrehajtó funkciót.
>> És gondoljunk csak a jel, mint a címét, operátor, és a csillag, mint a
ott operátor -
vagy még pontosabban, a dereference üzemeltető.
Szóval ez egy csomó szó, csak hogy azt mondják, hogy most, remélhetőleg, csere lesz
helyesnek.
>> Hadd menjek előre, és -
nézzük valóban nevezze át a fájlt, nehogy a program még mindig nem nevezhető csere.
Azt állítom, hogy hívjuk meg swap.c most.
Tehát, hogy, csere.
Dot, slash, csere.
>> És most valóban, x értéke 1, y értéke 2.
És aztán, x értéke 2, y értéke egy.
Nos, nézzük meg, ha nem tudjuk ezt a kicsit másképp, mint hogy mi a
folyik itt.
Először is, hadd nagyítani a mi rajz képernyő itt.
És hadd javaslatot egy pillanatra -, és amikor rajzolok itt is tükrözi
ott már - hadd javasoljuk, hogy itt van egy csomó memóriát, vagy
RAM, belül a számítógépet.
>> És ez lesz a harapás szám, mondjuk, 1.
Ez lesz a byte 2-es szám.
És fogok csinálni egy csomó nagyobb, és akkor egy csomó pont pont pont a
azt mutatják, hogy ez a 2 milliárd ezeket a dolgokat.
4, 5, és így tovább.
>> Tehát az első öt byte az én számítógép memóriájában.
Minden rendben?
Nagyon kevés az a 2 milliárd.
De most fogok javasolni a következő.
Fogom javasolni, hogy x fog tárolja az 1-es szám, és y megy
tárolja a 2-es szám.
És hadd menjen előre, és most jelent ezeket az értékeket az alábbiak szerint.
>> Csináljuk ezt az alábbiak szerint.
Csak adj egy percet.
Egy pillanat.
OK.
Azt szeretnénk, hogy ez egy kicsit -
csináljuk újra.
Egyébként én megyek, és a ugyanazt a számot, akaratlanul,
többszöri alkalommal.
>> Tehát csak így különböző számú beszélni, mondjuk ez a bájt
szám 123., 124., 125., 126., és pont pont pont.
És hadd állítják, most, hogy fogok fel az 1 értéket itt, és az érték 2
itt, vagy más néven az x és y.
Tehát ez csak azért történik, hogy ez x, y ez.
>> És csak néhány Véletlen, a számítógépet, az operációs rendszer,
történt, hogy x a következő helyen: 123-as.
És y végül a helyszínen 124 -
a fenébe is.
Kellett volna rögzíteni ezt.
Ó, ember, nem igazán akarom ezt?
Igen, szeretném rögzíteni ezt, és b megfelelő erről ma.
Sajnos az új ebben.
>> 127., 131., és én nem akarom, hogy ez a bonyolult, de miért kellett megváltoztatni a
számok ott?
Mert azt akarom, hogy a ints valójában négy bájt.
Szóval szuper anális erről.
Tehát, hogy ha 1 történetesen foglalkozni 123, a 2 lesz címre
127, mert csak 4 búcsú van.
Ez minden.
És majd felejtsd el az összes egyéb címek a világon.
>> Tehát x van hely 123, y helyen lévő 127.
És most, mit valójában akar csinálni?
Amikor hívásváltáshoz most mi tényleg folyik itt?
Nos, amikor hívom csere, én elhaladó címét x és az y címét.
Így például, ha ez a két darab a papír már képviselik a két
érveket a és b cserélni, mi vagyok én fog írni az első ilyen,
amely fogom hívni hivatkozni, mint a?
>> Pontosan 123.
Szóval ez azt állítják, a.
Ez a paraméter a.
Leteszem a címét x ott.
>> Mi ez?
>> Nem, nem.
Ez rendben van.
Még mindig jó, még mindig jó.
Tehát ez a.
És most a második darab papír, ez lesz b, és mi vagyok én
lesz írásban ez a darab papír?
127.
>> Tehát az egyetlen dolog, ami változott, mivel korábbi sokatmondó ez a történet,
hanem szó szerint az 1. és 2., én vagyok majd át a 123. és 127..
És én most fogja ezen belül ezt a rovatot, rendben?
Tehát, hogy a fekete doboz képviseli jelenleg a swap funkciót.
>> Közben, most már van valaki, végrehajtja a csere funkciót.
Vajon valaki itt mint az önkéntes?
Gyere fel.
Mi a neve?
Charlie-t.
Rendben, Charlie.
Gyere fel.
>> Tehát Charlie fog játszani szerepét a fekete doboz.
És Charlie, mit szeretnék, hogy nem most végre csere oly módon
hogy mivel a két címet, te valóban megy
megváltoztatni az értékeket.
És én suttogni a fülébe hogyan kell futtatni a TV itt.
>> Így megy előre, és te vagy a fekete doboz.
Reach ott.
Milyen értékeket látsz egy, és Milyen értékeket látsz az b?
>> CHARLIE: a 123 és 127 b.
>> DAVID MALAN: OK, pontosan.
Most szünet van egy pillanatra.
Az első dolog, amit most tenni, szerint a kód - ami
Én akkor most húzza fel a képernyőn -
lesz, hogy jelöljenek ki egy kis bit memória nevű temp.
Szóval megyek előre, és Önnek, hogy a memória.
>> Tehát ez lesz egy harmadik változó hogy van hozzáférhető
hívtál temp.
És mit fogsz írni a temp papírra?
>> CHARLIE: mutatók, igaz?
>> DAVID MALAN: OK, ne is feltétlenül mutatók.
Így a sort, hogy én már kiemelte a jobb oldalon,
kezdjük ott.
Azt mondja, a csillag.
Így a jelenleg tároló a 123-as.
És csak ösztönösen, milyen nem csillag 123 jelent?
>> De konkrétan, ha a értéke 123 csillag mit jelent?
Az érték a.
Vagy még véletlenül, ott.
Hadd javaslom, hogy a gazdaság az a a kezét, megy előre, és kezelni, hogy
mintha egy térkép.
És sétáljon át magát a számítógép memória, és megtalálni, mi a
a helyszínen 123.
Pontosan.
>> Tehát azt látjuk, a helyszínen 123 mi, természetesen?
OK, akkor mi értéke most már te megy, hogy a temp?
Pontosan.
Így megy előre, és csinálni.
És írjuk be a 1-es szám a darab papír, ami jelenleg című temp.
>> És most a következő lépés, hogy az fogsz végrehajtani
lesz mit.
Nos, a jobb oldali következő sor kód csillag b. b, a
Természetesen tárol egy címet.
Amely foglalkozik 127..
Csillagok b mit jelent véletlenül beszél?
>> Ugrás az adott helyre.
Így megy előre, és talál meg minket, mi a helyszínen 127.
OK.
Természetesen, a helyszínen 127, még mindig a 2 értéket.
Szóval mit fogsz most tárolja a bármi a helyen egy?
Tehát csillag azt jelenti, menj a helyszínre a.
Mi az a hely a?
>> Pontosan.
Tehát most, ha meg akarja változtatni mi az adott helyen -
Én megyek előre, és fuss A radír itt.
És most tegye vissza a kefe.
Milyen számot fogsz írni az, hogy az üres doboz?
>> Pontosan.
Tehát ezt a kódsort, hogy világos - legyen el szünetet, mit csinál, és Charlie
pont itt, amit ő csak tett, írni a dobozba a következő helyen: 123
az értéket, amelyet korábban a b.
És így már most a valóban ez a második sort.
>> Most sajnos ott van még mindig az egyik sorra, ami megmaradt.
Most mi van a hőmérséklet, a szó szoros értelmében?
Ez nyilvánvalóan az első számú.
Ez nem a cím.
Ez csak egy szám, egyfajta változó az első héten.
>> És most, amikor azt mondod csillag b, azt jelenti, hogy megy a B címzéssel, amely a
Természetesen itt.
Szóval, ha egyszer oda -
Én megyek előre, és törölje mi valójában ott - és mit
fog írni most helyre 127?
>> CHARLIE: Temp, amely az egyik.
>> DAVID MALAN: Temp, amely az egyik.
És mi történik a temp a végén?
Nos, nem igazán tudom.
Nem igazán érdekel.
Minden alkalom, hogy végre egy funkciót eddig, a helyi változókat van
valóban a helyi.
És csak úgy eltűnik.
Ők visszakövetelte az operációs rendszer végül.
>> Tehát az a tény, hogy a hőmérséklet még mindig a értéke 1 a fajta alapvetően
érdektelen számunkra.
Rendben, a tapsot ha lehet Charlie.
Nagyon jól sikerült.
>> Rendben, akkor mi még nem ez azt jelenti, amit tehetünk?
Így kiderül, hogy már mondja egy pár fehér hazugság
jó ideje.
Sőt, kiderült, hogy egy string, mindez idő, nem igazán
karaktersorozat önmagában.
Ez a fajta az, hogy ösztönösen.
>> De technikailag szólva, string egy adattípus, hogy kijelentette belül
A CS50 könyvtár, hogy egyszerűsítse a világ Az első néhány hét osztály.
Milyen a szöveg valóban a címe egy karakter valahol RAM.
A string valóban több, mint 123 és 127, ami történik, hogy meghatározza
ahol string kezdődik a számítógép memóriáját.
>> De ez nem jelenti a string, önmagában is.
És láthatjuk ezt az alábbiak szerint.
Hadd menjek előre, és nyissa meg egy kódot, ami között
mai forráskód példák.
És én megyek előre, és nyitott fel, mondjuk, hasonlítsa össze-0.c.
Ez egy hibás program, ami megy a következők szerint kell végrehajtani.
>> Első.
Fogok mondani valamit.
Akkor én megyek előre, és kap egy karakterláncot a felhasználó
az, hogy a következő sorban.
Aztán fogom mondani újra.
Akkor én megyek, hogy egy másik húr a felhasználó.
>> És vegyük észre, én bemutatja az egyik string változó nevű s, és
másik ezen karakterláncok A változó nevű t.
És most fogok igényt, nagyon ésszerűen, hogy ha s értéke egyenlő t,
A húrok ugyanaz.
Azt írja ugyanezt.
Más, a húrok nem ugyanaz a dolog.
>> Végül is, ha két bemenet ints, két karakter, két úszó, két páros, bármelyik
az adattípusok beszéltünk eddig összehasonlítani őket -
emlékszem mi nagyon világosan egy ideje hogy nem ezt, mert a
egy egyenlőségjel természetesen az értékadó operátor.
Szóval ez lenne a hiba.
>> Használjuk az egyenlő egyenlőségjel, amely valóban összehasonlítja
dolgokat valódi egyenlőség.
De azt állítják, hogy ez hibás.
Ha megyek előre, és összehasonlítani nulla, majd tegye dot slash összehasonlítani nulla.
És írja be, mondjuk, helló.
És akkor mondjuk helló újra.
Szó szerint ugyanaz a dolog, a számítógép igények beírtam különböző dolog.
>> Most már talán csak elgépelt valamit.
Majd írja a nevemet ebben az időben.
Úgy értem, helló.
Hello.
Ez más minden egyes alkalommal.
>> Nos, miért van ez?
Mi folyik valójában a motorháztető alatt?
Nos, mi folyik valójában alatta A motorháztető a húr, akkor
Aztán beírtam, hogy első alkalommal például a szó hello, természetesen.
De ha ez a képviselt alatt A motorháztető, emlékeztetnek arra, hogy a
string tömbben.
És már azt mondta annyira a múltban.
>> Tehát, ha úgy rajzolni, hogy tömb, mint ez, én vagyok fogja képviselni valami egészen
hasonló ahhoz, amit csináltunk egy perce.
És ott valóban valami külön itt is.
Mit tudtunk meg volt a végén minden húr?
Igen, ez a backslash nulla, ami ahogy a képviselő,
szó, 00000000.
Nyolc 0 bitek a sorban.
>> Nem tudom, őszintén szólva, mi után.
Ez csak egy csomó több RAM belül a számítógépet.
De ez egy tömb.
Beszélgettünk tömbök előtt.
És általában beszélünk tömbök mint nulla hely,
majd egy, majd két.
De ez csak a kényelem.
És ez teljesen relatív.
>> Amikor valóban egyre emlék a számítógép, ez persze minden
2000000000 néhány furcsa bájt, esetleg.
Így valóban a motorháztető alatt, egész idő alatt, igen.
Ez is nagyon jól lehet konzol nulla.
De ha még mélyebbre ásni alatta a motorháztetőt, hogy tényleg
cím száma 123..
Ez a cím 124.
Ez a cím 125.
>> És nem csavarja fel ebben az időben.
Ezek most egy bájt mellett milyen okból?
Mekkora egy char?
A karakter csak egy byte.
Az int általában négy bájt.
Szóval ezért csináltam 123, 127, 131, és így tovább.
Most már tudom tartani a matematika egyszerűbb és csak a plusz 1.
És ez most mi is folyik az a motorháztető alatt.
>> Tehát, ha kijelenti valami ilyesmit, karakterlánc s ez valójában -
kiderül -
char csillag.
Star, természetesen azt jelenti, cím, más néven mutató.
Tehát a cím valamit.
Mi ez a címe?
>> Nos -
Én vagyok az egyetlen, aki látja a nagyon fontos pont csinálok, vagy úgy gondolja,
Csinálok.
Így húr -
A szomorú dolog az, van egy monitor ott, ahol
láthatta volna, hogy az.
>> Rendben, húr s ami Kijelentettem korábban.
De kiderült, hála egy kis mágia a CS50 könyvtárban, mindezt
időkarakterlánc szó szerint volt char csillag.
A csillag is azt jelenti, mutató vagy cím.
Az a tény, hogy ez a kísérő szó char azt jelenti, hogy a
címét egy karaktert.
>> Tehát, ha kap karakterlánc hívják, és azt írja A H-E-L-L-O, javaslatot már mi kap
szöveg szó szerint vissza minden Ebben az időben, bár most már inkább
leegyszerűsítve a világot?
Mit kap karaktersorozat ténylegesen vissza, mint a visszatérési érték?
>> Ebben az esetben a 123, például.
Már korábban azt mondta, hogy kap húr egyszerűen visszaadja a string, egy sorozat
karakter.
De ez egy kicsit kegyes hazugság.
Az út, hogy szöveg tényleg működik a motorháztető alatt ez lesz a
húr a felhasználó.
Ez Plops a karaktereket ő típusokat a memóriában.
A csomag egy backslash végén nulla olyan karaktersorozat.
>> De akkor mit kap karakterlánc szó szerint vissza?
Ez szó szerint adja vissza a címét első bájt a RAM
esetén alkalmazható, hogy az erő.
És kiderül, hogy csak a visszatérő Egyetlen címe
első karaktere, azaz a elegendő megtalálni a teljes egészében
a húr.
>> Más szóval, hogy nem rendelkezik húr vissza a 123. és 124. és 125..
Nem kell, hogy adjon nekem egy hosszú listát az összes a bájtok
a szöveg használ.
Mert az egyik, ők mind háttal.
És kettő alapján az első címet, I tudja kitalálni, ahol a szöveg véget ér.
Hogyan?
>> A speciális null karakter, a backslash nulla a végén.
Tehát más szavakkal, ha át körbe -
belső változók -
a címét egy char, valamint vállalja , hogy a végén minden húr, minden
karaktersorozat, mint mi, emberek Szerintem húrok, ha feltételezzük, hogy
a végén minden ilyen karakterlánc van a backslash nulla, akkor arany.
Mert mindig talál a végén egy string.
>> Most mi igazán majd megy az ebben a programban?
Miért ez a program, Összehasonlításhoz 0.c, hibás?
Amit ténylegesen képest?
Igen?
>> DIÁK: [hangtalan].
>> DAVID MALAN: Pontosan.
Ez összehasonlítva a helyszínen a húrok.
Tehát, ha a felhasználó beírt helló egyszer, , mint én, a memória, hogy végül
néz ki, mint ez.
Ha a felhasználó, akkor típusok Helló újra, hanem hívja kap szöveg újabb c
nem különösebben okos, ha tanítani , hogy legyen okos írásban kódot.
>> C -
és a számítógépek általában -
Ha beírja a szót Helló újra, tudod, hogy mit fogsz kapni.
Te csak megy, hogy egy másik tömb memória, hogy igen, előfordul, hogy
tárolására H-E-L-L-O-és így tovább.
>> Ez lesz ugyanúgy néz ki, hogy mi emberek, de ez a cím
lehet, hogy nem 123.
Lehet, hogy csak azért történik, hogy a operációs rendszer néhány rendelkezésre álló
hely például a helyszínen -
mondjuk valami önkényes, mint ez a hely 200.
És ez hely 201.
És ez hely 202.
Fogalmunk sincs, hol ez lesz a memóriában.
>> De hogy ez mit jelent az, hogy ami majd tárolni végső soron s?
A 123-as.
Mi lesz tárolható t, ebben önkényes példa?
A szám 200-at.
És minden, ami azt jelenti, akkor nyilván, 123 nem egyenlő 200-at.
És ez, ha a feltétel nem értéke igaz.
Mivel get sztring különböző darabokat a memória minden egyes alkalommal.
>> Most már látjuk ezt újra egy másik példa.
Hadd menjek előre, és nyissa meg copy-0.c.
Azt állítom, hogy ez a példa lesz próbálja ki - de nem - a másolni két húr
az alábbiak szerint.
>> Fogok mondani valamit a felhasználónak.
Én majd megy, hogy egy húr, és hívják s.
És most, én ezt csekket.
Már említettük ez egy kicsit vissza.
De amikor lehet, hogy sor return null, egy különleges karakter, vagy speciális
szimbólum mondjuk.
Ha ez a memória.
>> Például, ha a felhasználó valóban nehéz és típusok egy kegyetlen
karakterek száma a billentyűzet és találat Enter.
Ha ez a szám karakterek egyszerűen nem illeszkedik RAM bármilyen őrült
Ezért is kap húr talán nagyon jól vissza null.
>> Vagy ha a program maga sokat tesz más dolog, és csak
nincs elég memória A string sikeres, talán vége
fel vissza null.
De nézzük pontosabban , hogy mi ez az egész.
Mi s az adattípus tényleg?
Char csillag.
>> Így kiderül, most már tudod szedni vissza a réteg a null.
Kiderült, null - igen, természetesen egy speciális szimbólum.
De mi is ez valójában?
Tényleg, null csak egy szimbólum, amely azt az emberek használják, hogy képviselje nullára is.
>> Így a szerzők a C, és a számítógépek általában úgy döntött évvel ezelőtt
, hogy tudod, mit.
Miért nem tudjuk biztosítani, hogy egyetlen felhasználó adatok soha, soha, soha
tárolt bye nulla?
Sőt, még az én önkényes példában előtt, nem indul a számozás
byte nulla.
Elkezdtem egy.
Mert tudtam, hogy az emberek a világ úgy döntött, hogy fenntartja a nulla
byte bárki RAM valami különleges.
>> Az ok pedig, amikor csak akar jelzi, hogy valami baj
tekintettel a címeket, akkor vissza null - más néven nulla -
és mert tudja, hogy nincs legális adatok címre nulla, egyértelműen
azt jelenti, hogy hiba történt.
És ezért mi, a konvenció, ellenőrizze A null-és visszaút valamit
, mint az egyik ezekben az esetekben.
>> Tehát, ha lapozás most, ez csak majd néhány hiba ellenőrzése, csak abban az esetben
valami baj a [? óvadékot?]
összesen és kilép a programból a hazatérés.
Ez a sor most lehet újraírni mint ez, ami azt jelenti, hogy mi?
A bal oldali, adj még egy mutató egy karaktert, és hívja meg t.
Mit tárolása belül t, amely ez az egy sort?
>> Én tárolása helyre.
Konkrétan a helyet ez volt s.
Tehát, ha a felhasználó beírt hello, és hogy az első Hello történik, hogy a végén
Itt, majd a szám 123 majd jött vissza, hogy
húr, és tárolható -
ahogy korábban említettem -
A s.
>> Amikor Ezennel egy mutatót a char és hívjuk t, mi a szám
szó lesz a végén t a történet szerint?
Így 123..
>> Szóval technikailag most is s t mutat a pontos
azonos darabokat memóriát.
Tehát észre, mit fogok csinálni a bizonyítják, hogy ez a program hibás.
>> Először fogok állítani, és Nyomtatási f, kihasználva
a másolatot a húr.
Aztán fogok egy kicsit hibaellenőrzés.
Megyek, hogy megbizonyosodjon arról.
Bizonyosodjunk meg arról, hogy a húr t van legalábbis nagyobb, mint nulla hosszúságú,
így van néhány karakter van ténylegesen kihasználni.
>> És akkor lehet, hogy visszahívja ezt a korábbi példa.
2 felső - ami A ctype.h fájlt.
T tartó nulla ad nekem a nulla karakter a string t.
És 2 felső ugyanezen érték, az Természetesen, átalakítja a nagybetűs.
>> Tehát ösztönösen, ez kiemelt sor A kód kihasználva az első
levél t.
De nem kihasználva, ösztönösen, Az első levelet s.
De ha előre gondolkodni, mi vagyok én arról, hogy amikor elindul a program
és nyomtassa ki mind az eredeti, s, és az úgynevezett másolás, t?
>> Ők valóban lesz ugyanaz.
És miért akarnak ugyanaz?
Ők mindketten mutat pontosan ugyanaz a dolog.
Szóval erre.
>> Legyen másolatot nulla.
Ez rendben elkészül.
Engedik példányt nulla.
Hadd írja ilyesmit hello csupa kisbetűvel, majd nyomja meg az Enter billentyűt.
És azt állítja, hogy mind az eredeti s és a másolat valóban azonosak.
>> Szóval, mi is történt itt?
Hadd dolgozza át ezt a képet, csak hogy elmondja a történetet
kissé eltérő módon.
Mi folyik valójában alatta Hood, amikor kijelentem, valami hasonló
char kezdet s, vagy karakterlánc s, Kapok egy mutatót -
amely történetesen négy bájt A CS50 készülék
és a sok számítógép.
És én fogom hívni ezt a s.
És ez jelenleg egy ismeretlen érték.
>> Amikor, hogy egy változót, hacsak nem magát hogy egy értéket ott, aki
tudja, hogy mi van ott.
Ez lehet néhány random sorozata bit az előző végrehajtás.
Tehát, amikor az én kódsor nem kap string, majd tárolja a visszatérési
értéket kap karakterlánc valahogy -
és mi végül húzza vissza, hogy kap szöveg működik, valahogy lefoglal egy
tömb, talán úgy néz ki, Egy kicsit olyan, mint ez.
H-E-L-L-O, backslash nulla.
>> Tegyük fel, hogy ez a cím 123 csak az első a következetesség.
Szóval karakterlánc visszatér, a kiemelt sorban van, visszatér a
szám azt mondtuk, 123..
Szóval, mi folyik belül van itt?
>> Nos, ami igazán megy belül s 123.
De őszintén szólva, én kapok egy kis zavarba összes ilyen címek,
mindezek tetszőleges számokat.
123., 124., 127..
Szóval valóban egyszerűsíti a világ egy kicsit.
>> Amikor beszélünk mutatók, őszintén szólva, a mi emberek, ki a fene törődik, ahol
a dolgok a memóriában?
Ez teljesen önkényes.
Meg fog attól függ, hogyan mennyi RAM a felhasználó.
Ez lesz akire számíthatok, mikor a nap futtatja a programot, talán, és
milyen bemenet a felhasználó ad.
Vagyunk lakás a lényegtelen részleteket.
>> Úgyhogy elvonatkoztatni, és azt mondják, hogy, ha fut egy sor kódot, mint ez,
char s csillag lesz a visszatérő értéke get string.
Miért nem inkább csak felhívni, amit folyamatosan hív olyan mutatót, mintha ez
mutatott valamit?
Szóval, most, hogy azt állítják, s akár van egy mutató -
a motorháztető alatt, hogy ez a cím.
De ez csak mutat az első bájt a
karakterlánc, ami már visszatért.
>> Ha most vissza a kódot itt mi folyik ebben a sorban?
Nos, ebben a kiemelt sor most, Én kijelentette látszólag egy másik
nevű változó t.
De ez is egy mutató, úgyhogy megyek felhívni azt, elméletileg a pontos
azonos méretű dobozban.
És fogom nevezni t.
>> És most, ha megyünk vissza újra a kódot, amikor Store belül t,
mi vagyok én műszaki amivel belül t?
Nos Technikailag ez volt a 123-as.
Szóval tényleg azt kell írni A 123-as is.
De nézzük, hogy magasabb szinten.
t, ha ez csak egy mutató, ösztönösen, csak ezt.
Ez minden, amit most tárolják ott.
>> Tehát most az utolsó érdekes vonalak kódot, amikor valóban jár-kel
kihasználva a nulla karakter t, hogy mi folyik itt?
Nos, t tartó nulla most mutat hogy milyen karakter, feltehetőleg?
>> Ez mutat h.
Mivel t tartó nulla -
emlékszem, ez a régi szintaxis. t tartó nulla, csak azt jelenti, ha t egy string, t
konzol nulla azt jelenti, egyre a nulla karaktert az erejét.
Tehát, hogy ez mit is jelent , hogy megy ez a tömb -
és igen, ez lehet 123, ez lehet 124.
De minden relatív, emlékszem.
Amikor beszélünk, egy sor, van Az előnye, hogy beszél
relatív mutatók.
>> Így most már csak fel hogy t tartó nulla óra.
Tehát, ha hívom 2 felső rajta, hogy mi ez Tényleg csinál kihasználva
A kisbetűs h nagybetű H. De persze, mi s?
Ez ugyanannak az értéknek két rohadt string.
>> Szóval ez minden, ami történt ezt a kódot eddig.
Szóval mi akkor a hatása?
Hogyan lehet megjavítani a két problémát?
Hogyan összehasonlítani a tényleges húrok?
>> Nos ösztönösen, hogyan megy a kettő összehasonlítása
húrok valódi egyenlőség?
>> Mit jelent, ha két húrok egyenlő?
Nyilvánvalóan nem, hogy a címek egyenlő a memóriában, mert ez egy kis
szintű végrehajtás részletesen.
Minden karakter ugyanaz.
Hadd javaslatot, és hadd mutassam be változat egy compare.c
itt, így összehasonlítani-1.c.
>> Hadd javaslom, hogy még mindig a mutató hívott s, és tárolja azt a
visszatérési érték A string.
Csináljuk ugyanezt t.
Tehát sem a kód eltér.
Megyek, hogy adjunk egy kis több hiba ellenőrzése most.
Most, hogy mi vagyunk a fajta bontsa fel ez a réteg CS50, amit egy húr
valójában, meg kell, hogy legyen az anális arról, hogy róla, hogy ne vissza
érvénytelen értékek, mint a null.
>> Szóval csak úgy, hogy ellenőrizze.
Ha s nem egyenlő nulla, és t nem egyenlő null, ez azt jelenti, hogy jól vagy.
A string nem csavarja kapok bármelyik ezek szálakat.
És akkor talán hiszem, most, hogy mi nem STR CMP feltehetően csinálni?
Karakterlánc összehasonlítása.
>> Tehát, ha már programot java előtt, ez olyan, mint az egyenlő módszer a
karakterlánc osztály.
De azok számára, akik még nem beprogramozott,
ez csak egy C függvényt.
Előfordul, hogy jöjjön a nevű fájlt string.h.
Ez az, ahol ez deklarált.
>> És string összehasonlítása -
Igazából elfelejteni a használat, de mindegy, hogy.
Emlékezzünk vissza, hogy nem tehetünk férfi, keverjük összehasonlítani.
És ez lesz, hogy ki a Linux programozók kézi.
És, őszintén szólva, egy kicsit rejtélyes.
De látom, hogy itt, igen.
Meg kell is string.h.
>> És azt mondja, itt, a leírás, a " sztring Compare függvény
a két szöveget S1 és S2. "és S1 és S2 látszólag a két
argumentumokat hüvelyk
Nem igazán emlékszem, mit const van, de most észre -
és lehet, hogy már látta ezt, amikor már használja a man lapokat, ha
ez minden -
hogy char csillag csak egyet zsinórral.
>> Így összehasonlítja a két szöveget, S1 és S2, és visszatér egy egész kisebb
mint, vagy egyenlő vagy nagyobb, mint nulla S1, ha megállapítást nyer, illetve, hogy legyen
kevesebb, vagy a mérkőzés, vagy lehet nagyobb, mint az S2.
Ez csak egy nagyon összetett szóval hogy karakterlánc összehasonlítása visszatér
nulla, ha két sztring ösztönösen azonos karakter
karaktert a karakter.
>> Ez visszaadja a negatív szám, ha s, ABC, állítólag
az elé t.
Vagy vissza pozitív szám, ha s állítólag üldözni t
ABC.
Így ezzel az egyszerű funkcióval lehetne te pl rendezze
csomó a szavak?
>> Tehát ebben az új változatban, megyek megy előre, és compare1.
Dot slash összehasonlítására ez.
Majd írja hello minden kisbetűs.
Megyek, hogy írja a Hello minden kisbetűvel újra.
És szerencsére most rájön Beírtam ugyanezt.
>> Közben, ha azt írja a Hello alacsonyabb ügy HELLO nagybetűvel és
hasonlítsa össze őket, beírtam különböző dolog.
Mivel nem csak a címeket más, de mi összehasonlítása
különböző karakterek újra és újra.
>> Nos, menjünk, és rögzítse egy más probléma most.
Hadd nyit változatát egy példány, amely most foglalkozik
ezt a kérdést az alábbiak szerint.
És ez fog kinézni egy kicsit bonyolultabb.
De ha úgy gondolja, hogy mi problémánk kell megoldani, remélhetőleg ez lesz
világos csak egy pillanatban.
>> Tehát ez az első sorban, kezdőkarakter t, a laikus szempontból tudna valaki javasolni
mi ez a vonal itt azt jelenti?
Char csillag t, mi az, hogy csinálsz?
>> Jó.
Létrehozása mutató néhány hely a memóriában.
És hadd finomítani egy kicsit.
Hogy egy változót, amely tárolja a cím bizonyos char a memóriában, csak
, hogy egy kicsit több megfelelő.
>> OK, így most már a jobb oldalon, én már soha nem láttam egy ilyen funkció
előtt, malloc.
De mit is jelent ez?
Elosztása a memória.
Memória allokáció.
>> Így kiderül, eddig, akkor nem igazán volt hatékony módszer a
kéri az operációs rendszer, adj egy kis memória.
Inkább most már van egy függvényt nevű malloc, amely pontosan ezt.
Annak ellenére, hogy ez egy kicsit figyelemelterelés most észre, hogy a
a két zárójel csak lesz egy számot.
Ahol már beírt szóban forgó jelek lehet szám.
>> És ez a szám azt jelenti, hogy adjon 10 bájt.
Adj 20 bájt.
Adj 100 byte.
És malloc mindent megtesz annak érdekében, hogy fel az operációs rendszer -
Linux, ebben az esetben -
Hé, a 100 byte RAM áll rendelkezésre?
Ha igen, visszafordítására bytes nekem vissza a címet, amelynek a
a bájt, talán?
A legelső.
>> Tehát itt is - és ez az uralkodó C, minden alkalommal, amikor
foglalkozó címeket?
Te szinte mindig foglalkozik a első ilyen cím, nem számít, mekkora
egy darab memória kerülnek adta vissza, hogy úgy mondjam.
>> Úgyhogy merülni itt.
Próbálom lefoglalni hogyan hány bájt pontosan?
Jól.
String hossza s - hadd nem egy konkrét példát.
Ha s hello, H-E-L-L-O, mi a húr hossza s nyilván?
Tehát öt.
De én ezt a plusz 1 az, hogy miért?
Miért akarok hat bájt öt helyett?
A null karakter.
>> Nem akarom, hogy hagyja ki ezt a speciális null karakter.
Mert ha egy másolatot Hello and csak nem H-E-L-L-O, de nem tesz
hogy a speciális karaktert, a számítógép Lehet, hogy nem, véletlenül, egy backslash
nulla ott nekem.
És ha én próbálom kitalálni, hogy a hossza a másolat, azt gondolhatja, hogy
ez 20 karakter hosszú, vagy egy millió karakter hosszú, ha csak nem történik
hogy megüt egy backslash nulla.
>> Tehát meg kell hat byte tárolására H-E-L-L-O, backslash nulla.
És akkor ez csak hogy szuper anális.
Tegyük fel, hogy emlékszem, mi akkora, mint egy char.
Azt mondogatom ez egy byte.
És ez általában.
Elméletileg lehet valami más, egy másik Mac vagy
más PC.
>> Így kiderül, itt van ez a szolgáltató nevű sizeof hogy ha átadni a
nevét adattípus - például char vagy int vagy float -
ez megmondja, dinamikusan, hány bájt a karakter veszi fel ezt a
adott számítógépen.
>> Tehát ez gyakorlatilag csak mintha azt mondanánk szer 1 vagy
alkalommal semmit.
De én csinálom, csak hogy szuper anális, hogy csak abban az esetben, char különbözik
a számítógép versus az enyém, így a matek mindig megy, hogy nézd meg.
>> Végül ide megnézem for null, ami mindig jó gyakorlat - ismét
bármikor dolgunk mutatók.
Ha a malloc nem volt képes, hogy nekem hat byes - ami
valószínűtlen, de csak abban az esetben -
vissza egy azonnal.
És most, megy előre, és másolja a húr az alábbiak szerint.
És ez ismerős szintaxist, bár egy másik szerepet.
>> Én megyek előre, és kap a húr hossza s és tárolja a n.
Én aztán majd megismételni az i értéke nullára ig, beleértve az n,
nagyobb vagy egyenlő.
Annak érdekében, hogy minden iterációban tettem a i-edik karaktere s az i-edik
jellegét t.
>> Szóval, mi folyik valójában alatta a motorháztető itt?
Nos, ha ez, például, s -
és én beírtam a szót H-E-L-L-O és van egy backslash nulla.
És ismét, ez s mutat itt.
És itt most t.
>> És ez mutat most egy példányt a memória, nem igaz?
Malloc adott nekem egy egész darab memória.
Nem tudom, eredetileg mi bármelyik ezeken a helyeken.
Így fogom gondolni ezeket egy csomó kérdőjel.
>> De amint elkezdek loop nulláról akár a hossza révén s, t
konzol nulla és t tartó 1 -
és teszem ezt most a felső -
t tartó nulla és s konzol nulla jelenti , hogy én leszek másolás
iteratív h itt, az E-L-L-O. Plusz, mert én a plusz
1 backslash nulla.
>> Tehát most abban az esetben, összehasonlítani, 1.c, a végén, ha kinyomtatja a
kapitalizációja t, meg kell látni, hogy s változatlan.
Hadd menjek előre, és most ezt.
Tehát, hogy Copy1.
Dot slash Copy1.
Megyek, hogy írja be hello, Enter.
És most észre, csak a másolás került aktiválásra.
Mert valóban van két darabokban a memóriát.
>> Sajnos, meg tudod csinálni néhány szép rossz és nagyon veszélyes dolgokat.
Hadd húzza fel egy példát itt, hogy ad nekünk példát néhány
különböző vonalak.
Tehát csak ösztönösen itt, az első sorban A kód, int csillag x, nyilatkozik,
változó nevű x.
És mi az adattípust , hogy a változó?
Mi a adattípusa, hogy a változó?
Nem ez volt a Cliffhanger.
>> Az adattípus int csillag.
Tehát mit jelent ez? x lesz tárolja a címét egy int.
Egyszerű.
Y fogja tárolni a címét egy int.
Mi a harmadik sor kód csinál ott?
Ez kiosztása hány bájt, a legvalószínűbb?
Négy.
Mivel a mérete egy int általában négy, malloc négy ad
vissza nekem a címét egy darab memória, amelynek az első bájt
tárolt most x.
>> Most már mozog egy kicsit gyorsan.
Csillagok x mit jelent?
Ez azt jelenti, megy, hogy a címre és tedd, amit számot ott?
Tegye a szám 42 van.
Csillagok y azt megy, mi az y és tegye a 13-as szám is.
>> De várjunk csak egy percet.
Mi van y a pillanatban?
Milyen cím y tárolására?
Nem tudjuk, nem igaz?
Még egyszer sem használja a feladat operátor bevonásával y.
Tehát y deklarált a második sor kód csak néhány szemét érték, nagy
kérdőjel hogy úgy mondjam.
Meg lehetne mutat véletlenszerűen bármit a memóriában, ami
általában rossz.
>> Tehát, amint hit, hogy a sorban van, csillag y értéke 13, valami rossz,
valami nagyon rossz fog történni Muci.
Tehát lássuk, mi a végén történt Muci itt ebben a pillanatban
vagy úgy néz.
>> [VIDEÓ LEJÁTSZÁS]
>> -Hé, Muci.
Kelj fel.
Itt az ideje a mutató móka.
>> -Mi az?
Ismerje meg a mutatók?
Ó, Komámasszony.
>> -Nos, az induláshoz, azt hiszem vagyunk Szükségem lesz egy pár mutatók.
>> -OK.
Ez a kód mellé két mutató ami pont egész.
>> -Oké, látom a két mutató.
De nem úgy tűnik, hogy mutat semmit.
>> -Így van.
Kezdetben mutatók nem mutatnak semmit.
A dolgokat mutatnak nevezik pointees, és beállítása őket egy
külön lépésben.
>> -Oh, igaz, igaz.
Tudtam, hogy.
A pointees külön.
Szóval hogyan osztja a pointee?
>> -OK.
Nos, ezt a kódot oszt egy új egész pointee, és ez a rész pedig x
mutasson rá.
>> -Hé, ez jobban néz ki.
Tehát, hogy csinál valamit.
>> -OK.
Én dereference a mutatót x tárolására A szám 42 bele pointee.
Mert ez a trükk, szükségem lesz a varázslat pálcája dereferencing.
>> -A varázspálca a dereferencing?
Uh, ez nagyszerű.
>> -Ez az, amit a kód így néz ki.
Én csak meg a számot, és -
>> -Hé, nézd.
Ott megy.
Ezzel a hivatkozás feloldási be x következő A nyilat a pointee.
Ebben az esetben a 42., hogy tárolja ott.
Hé, próbálja meg, hogy tárolja a számot 13. a másik mutató, y.
>> -OK.
Megyek ide, hogy y és Szerezd meg a 13-as szám létrehozni.
És akkor, hogy a pálcája dereferencing és csak -
Hűha!
>> -Oh, hé.
Ez nem működik.
Mondd, Muci, nem hiszem, hogy a dereferencing y egy jó ötlet,
mert felállítása pointee egy külön lépésben.
És nem hiszem, hogy valaha is tette.
>> -Hmm.
Jó kérdés.
>> -Igen, osztják a mutató y.
De soha meg azt, hogy pont egy pointee.
>> -Hmm.
Nagyon figyelmes.
>> -Hé, keres jó van, Muci.
Meg tudod javítani úgy, hogy y pontokat ugyanarra pointee mint x?
>> -Persze.
Fogom használni a varázspálcát a mutató feladat.
>> -Az, hogy lesz egy probléma, mint korábban?
>> -No.
Ez nem érinti a pointees.
Ez csak az egyik változik mutató pont az ugyanaz, mint a másik.
>> -Oh, értem.
Most y pont ugyanazon a helyen, mint x.
Várj.
Most y rögzített.
Ez egy pointee.
Így próbálja a pálca A dereferencing újra
küldeni a 13-át.
>> -OK.
Itt megy.
>> -Hé, ezt nézd meg.
Most dereferencing működik y.
És mivel a mutató a megosztott hogy az egyik pointee, akkor
mind látni a 13..
>> Ja.
Megosztása.
Mindegy.
Így megyünk helyet cserélnek most?
>> -Oh, nézd.
Vagyunk az időből.
>> -De -
>> -Ne feledd, a három mutató szabályokat.
Először is, az alapvető szerkezete az, hogy van egy mutató.
És pont felett a pointee.
De a mutató és pointee külön.
És a gyakori hiba, hogy létrehozott egy mutatót, de a
felejtsd el, hogy adott egy pointee.
>> A kettes, mutató dereferencing kezdődik A mutató és követi a
nyíl, hogy hozzáférjen az pointee.
Mint mindannyian tudjuk, ez csak akkor működik, ha a egy pointee, ami lesz vissza
szabály.
>> A hármas számú, mutató feladat kerül egy mutató és a változások azt, hogy pont
ugyanaz, mint a másik pointee mutató.
Így aztán a feladat, A két mutató akarat
pont ugyanaz pointee.
Néha ez az úgynevezett megosztását.
És ez minden van, tényleg.
Bye bye most.
>> [END VIDEÓ LEJÁTSZÁS]
>> DAVID MALAN: Szóval inkább a mutatók, többet Muci jövő héten.
Találkozunk hétfőn.