>> [Musiikkia]
CAMILLE REKHSON: Hei, kaikille.
Tervetuloa CS50 tietovisa nolla arvostelu istunto.
Olen Camille.
Ja aion olla menossa joistakin aiheista sinua
kaverit tänään auttaa sinua valmistautua tietokilpailu.
Joten tässä on meidän viitteellinen aiheluettelo sinua
olisi tunnettava varten tietokilpailu.
Nämä otettiin suoraan alkaen oppimäärä.
Tiedän, että se tuntuu paljon.
Mutta luottaa minuun, olet oppinut kaikki nämä asiat viime viikkoina.
>> Joten me ehdottomasti menossa yli paljon näitä tänään.
Mutta myös kestää jonkin aikaa teidän oma tarkistamaan näitä asioita.
Ja jos et ole perehtynyt mitä jotkut näistä asioista ovat,
Muista kysyä yksi meistä.
Myös virallista sana on tietokilpailu, mene tästä linkistä.
Tämä on kaikki tiedot jolla huone sinun täytyy mennä,
hajosi aakkosjärjestyksessä, ja myös joitakin vihjeitä siitä, mitä materiaaleja
sinun pitäisi opiskella ja millaisia tietokilpailu kysymyksiä, voit odottaa.
Joten varmista tarkistaa, että ulos.
>> Myös muutamia vinkkejä, kun valmistautuvat tenttiin.
Harjoitella koodaus paperilla.
Tiedän, että olet tottunut ottaa IDE tarkistaa oman virheitä sinulle,
ja it's-- kun kirjoitat sen ylös, se on hieman erilainen kuin ottaa
kirjoittaa asioita.
Joten käytännössä tekee joitakin koodaus.
Hyviä toimintoja harjoitella teet ovat strlen ja atoi,
nähdä, jos voisit kirjoittaa ne pois omasta.
Tunnettava ongelma sarjaa.
Useimpina vuosina on kysymykset, jotka liittyvät
joitakin ongelmia asetettu materiaalia.
Joten varmista, että ymmärrät miten kaikki ongelma sarjaa.
>> Kokeile joitakin vanhoja tietokilpailuja alle 75 minuutin aikarajoitus.
Paljon tietokilpailuja voi olla sellainen pitkä.
Joten se on hyvä tapa antaa itsellesi käytäntö,
ja kuinka kauan se vie, ja miten
tulee jakaa aika varmistaa olet kaiken loppuun mennessä.
Ja myös, saat yhden sivun, kaksipuolinen viittaus arkki
että voit kirjoittaa mitä haluavat edelleen käyttää aikana tietokilpailu.
Joten kun luot että se on myös
todella loistava tapa opiskella, koska voit eräänlainen voidaan tarkistaa asioita
kun kirjoitat sitä.
>> Joten kaikki yleiset kysymyksiä tietokilpailu, tai miten se toimii?
Joo.
>> Yleisö: Will että aiheluettelo että juuri osoitti olla käytettävissämme
verkossa?
>> CAMILLE REKHSON: Tämä koko dia Näytä postitetaan verkkosivuilla.
Myös video nykypäivän katsaus istunto on verkkosivuilla.
Joten älä murehdi liikaa kirjallisesti asioita alas koko.
Se tulee kaikki on siellä.
Muita kysymyksiä?
OK, joten Eiköhän aloiteta.
>> Niin yksi asia on tunnettava on erilaiset tiedot ja koko
että he ottavat.
Tämä voi myös olla hyvä asia kirjoita alas teidän viite levyt,
vain varmista, että olet muistaa kaikki nämä.
But-- joten merkkiä ovat 1 tavu.
Ints ovat 4 tavua.
Pitkä, pitkä, joka on pohjimmiltaan enemmän tilaa kokonaisluku, on 8 tavua.
Float on 4 tavua.
Kaksinkertainen, joka pohjimmiltaan antaa sinulle enemmän tilaa tallentaa float, on 8 tavua.
Ja sitten osoitin on myös 8 tavua.
Koskevia kysymyksiä?
>> Joten binary on aihe olemme katettu hieman tämän lukukauden.
Joten tehdä joitakin harjoitella muuntaa
välillä binary ja desimaalin.
Joten kellään mitään käsitystä, mitä että ensimmäinen olisi?
Kukaan?
Joo, se on 42.
Joten jos muistat, kukin paikoista binary
on pohjimmiltaan kuin 2 siihen paikkaan valtaa.
>> Niin että ensimmäinen paikka on 2 0 valtaa.
Ja meillä on 0 siellä, niin mitään.
Seuraava paikka on 2 ensimmäisen valtaa.
Ja meillä on 1 siellä, niin että on pohjimmiltaan 2.
Seuraava paikka on 2 Toinen, joka on 4.
Meillä ei ole mitään siellä.
Seuraava paikka yli on 2 kolmas, mikä olisi 8.
Ja meillä on yksi siellä.
Ja me jatkaa.
Että last-- kauimpana vasen on, jos meillä on 32.
Ja niin, me pohjimmiltaan on 32 plus 8 plus 2 saada 42.
Kysymyksiä?
>> Yleisö: Mikä alaindeksi?
>> CAMILLE REKHSON: alaindeksi pohjimmiltaan kertoo se binary.
Joten siellä on 2 siellä.
Jos oli like-- seuraavassa yksi, tai kun olemme muuntaa desimaalin
binary, siellä on 10 näyttää meille, että tämä numero on alun perin desimaalin.
>> Yleisö: Kiitos.
>> CAMILLE REKHSON: Joo.
Muita kysymyksiä, että yksi?
OK, joten yritetään seuraavan yksi sitten, desimaalin binary.
Joten kun 50 ja laittoi että binary.
Miten teet sen?
Joo.
>> Yleisö: 110010.
>> CAMILLE REKHSON: Kyllä.
Joten one-- helppo tapa ajatella muuntamiseen desimaalin binary
on to-- se auttaa usein kirjoittaa mitä eri valtuuksia 2 ovat.
Ja sitten läpi sen, ja katso riippumatta korkein yksi niistä
on, että voit laittaa sisään desimaaliluku menemättä sen yli.
>> Joten tässä tapauksessa, yksi toimivalta 2 on 32.
Joten 32 menee 50.
Mutta seuraavan käynnistyksen olisi 64, joka ilmeisesti ei sovi 50.
Niinpä korkein meillä on 32.
Seuraava alas 16.
Ja 32 plus 16 on vain 48.
Niin että vielä sopii 50.
Joten meillä on 1: n molemmissa näistä.
Ja sitten jos meidän pitää menossa alas, ainoa asia, meidän jäljellä
on 2 enemmän saada 48-50.
Niin sitten meillä on 1 tässä asennossa, ja 0 viimeisessä asennossa.
Koska ei ole mitään vuonna 2 0-sijalle.
Kysymyksiä muuntaa desimaalin binääri?
>> Joten nyt yritetään tehdä jotkut binary lisäksi.
Kuinka kun lisäät nämä kaksi ylös?
Joo.
>> Yleisö: 11100.
>> CAMILLE REKHSON: Kyllä.
Näin tehdessään lisäksi binary on melko paljon samaa kuin tekevät sitä desimaalin.
Paitsi jos sinulla on kaksi 1 olemuksen lasketaan yhteen, 1 plus 1 on 2,
mutta 2 binary on 1 0.
Joten sinun on suoritettava 1, ja pitää kuljettaa se niille pari saraketta.
Ja muuta kuin, että vain lisätä normaalisti.
Kaikki kysymykset siitä?
Joo.
>> Yleisö: Anteeksi, mikä on viimeinen paikka?
On kuusi numeroa.
Joten vasemmassa reunassa, mitä arvo on se?
CAMILLE REKHSON: Tällä pohja yksi?
Yleisö: Päällä yksi, 50.
CAMILLE REKHSON: yli 50?
Voi, niin vasemmanpuoleisesta yksi on 32.
>> Yleisö: 32?
>> CAMILLE REKHSON: Joo, niin se olisi olla 32, 16, sitten 8, 4, 2, 0-- tai 1.
No, se on 2 nollas, joka on 1.
Joo.
Muita kysymyksiä tästä?
OK, joten niin me aiomme tehdä hieman heksadesimaalinumeron.
Joten tämä voisi olla hieman vähemmän tuttuja,
koska tiedän olemme tehneet paljon enemmän binary.
Mutta todella hyvä tapa ajatella heksadesimaali
on hajottaa binary numeron 4-bittinen paloina.
Koska jokainen 4 bittiä binääriluvun on pohjimmiltaan
yksi heksadesimaalilukuina.
>> Joten jos meillä on tämä ensimmäinen, meillä on pohjimmiltaan kahdeksan 1: n.
Joten ne voidaan jakaa up--
>> Yleisö: 255.
>> CAMILLE REKHSON: Sano se uudestaan.
Yleisö: 255 desimaalin, tai 0xFF heksadesimaalimuodossa.
CAMILLE REKHSON: Joo, se on.
Joten, jos jaat että ylös kahteen 4-bittinen paloina,
olemme periaatteessa on neljä sarjaa 1.
Joka on maximum-- periaatteessa suurin
voimme saada 4-bittiä binary.
Ja suurin saisimme varten että heksadesimaalisena olisi F.
Joten meillä olisi kaksi F: n.
Kaikki kysymykset siitä?
Joo?
>> Yleisö: Voitko toistaa sitä.
CAMILLE REKHSON: Toki.
Joten jokainen, periaatteessa, paikka heksadesimaalisten on
joka vastaa 4-bitin binäärisen.
Joten helpoin tapa tehdä tämä on rikkoa sitä ylös 4-bittinen paloina.
Joten tässä tapauksessa, olemme kahdeksan 1: n.
Joten jos me jakaa ne kahteen 4-bittinen paloina,
meillä olisi kaksi neljästä 1: n.
Ja jokainen näistä vastaa F.
Jos luulet about-- Tiedän aivomme ovat
Tällainen langallinen ajatella enemmän kautta desimaalin,
koska sitähän olemme tottuneet.
Joten yksi tapa voit ajatella sitä neljä 1: n on yhtä suuri kuin 15 desimaalin.
Ja 15 heksadesimaali- on F. Niin, että toinen tapa voit ajatella sen läpi.
Joo.
>> Yleisö: Mikä 0x varten?
>> CAMILLE REKHSON: 0x tarkoittaa että se on heksadesimaali.
Joten me vain laittaa, että etuliite siellä, normaalisti.
Muita kysymyksiä, jotka.
OK, joten yritetään menossa muulla tavalla sen jälkeen.
Tässä tapauksessa me have-- pahoillani?
Yleisö: [äänetön].
CAMILLE REKHSON: Menemme binary.
Niin, menossa toiseen suuntaan.
Mutta tässä tapauksessa, meillä on 5 ja A. Jos siis miettiä tätä,
jos jokainen those-- 5 ja ovat molemmat menossa edustamaan 4-bittinen kimpale,
kuinka sanoisit 5 binary?
>> Yleisö: 0101.
>> CAMILLE REKHSON: Joo, niin se on 0101 osa.
Ja sitten miten sanoisit in--
>> Yleisö: 10.
CAMILLE REKHSON: Sano it-- anteeksi?
Yleisö: 10.
CAMILLE REKHSON: Joo, niin se toinen osa sitä.
Ja sitten, jos laitat nämä kaksi yhdessä, se on
miten saat täyden binaarikoodi heksadesimaali.
Joo?
>> Yleisö: Tietää, että on 1010, sinun täytyy muistaa se?
Tai voit like--
>> CAMILLE REKHSON: Joten jos sinä-- differe-- niin
kun olet menossa läpi binary, pohjimmiltaan binary
on 0 kautta 9 ja sitten kautta F sen 16 asioita.
Joten jos aina 0 9--, jos sinä-- 9 ja sitten, pohjimmiltaan
jos me muuntaa sen desimaaliluvuksi, olisi kuten 10, B olisi kuin 11.
Ja jos ajattelee binary 1010 on 8 ja 2,
koska nämä ovat kaksi paikkoja, jotka lisätä enintään 10, joka
Juuri vastaa.
Niin, että on tavallaan helppo tapa ajatella, että.
Muut kysymykset heksadesimaalimuodossa.
>> OK, joten nyt me otamme katsokaa bittioperaatioiden.
Joten nämä voivat varmasti keksiä tietokilpailu.
Tiedän, että meillä ei työskennellyt niitä paljon.
Mutta me vain teemme hieman uudelleen näitä.
Joten toivottavasti nämä ovat hieman enemmän tutulta.
Joten kuusi bittioperaatioiden että olemme on lueteltu tässä.
Ja he anna meidän manipuloida yksittäisiä bittejä.
Joten JA operaattori on yksi et-merkki.
Älä sekoita että kaksinkertainen et-merkki,
joka on looginen ja että antaa meidän vertailla kahta asiaa.
>> Yhden ja on se, miten voimme manipuloida asioita peiton.
Joten tämä antaa meille tuloksen 1, jos molemmat argumentteja että olemme vertaamalla
ovat same-- tai ovat 1.
Ja pystypalkki, OR, antaa meitä 1, jos ainakin yksi niistä on 1.
Joten periaatteessa juuri mitä sanat merkitsevät.
JA, jos kaksi bittiä ovat 1, 1 ja 1 antaa meille 1.
Mutta OR, jos se on 0 tai 1, tai 1 tai 1, kummassakin tapauksessa,
meillä on 1 olevan yksi heistä.
Niin silloin pääsisimme 1.
Yleisö: Mitä tarkoitat että se sanoo se antaa 1?
>> CAMILLE REKHSON: tulos. Tavallaan, kuten sinäkin
would-- jos teit 0 ja 1, tulos, joka olisi 1-- tai 0
ja 1 tuloksella että olisi 0, sorry.
Joo, se oli eräänlainen lausekkeen tulos.
Ja sitten, tämä Järjestelmäkohdistin symboli on XOR, tai yksinomainen OR.
Niin se tarkoittaa vain yksi tai täsmälleen toinen argumentit on yhtä suuri kuin 1.
Ja sitten se antaisi sinulle 1.
>> Pikku koukeroinen linja on NOT operaattori.
Joten toisin kuin muut heistä, jotka toimivat pari bittejä,
EI operaattori kestää vain yksi bitti, ja käännä se.
Joten jos give-- jos teet EI 0, se antaa sinulle 1.
Ja jos et 1, se antaisi sinulle 0.
Joo?
>> Yleisö: Mitä eroa välillä TAI yhdellä rivillä
ja tai kahdella?
CAMILLE REKHSON: Niin OR kanssa kaksi riviä on looginen OR.
Niin se vertaamiseen kaksi täyttä kokonaislukuja, tai two--
onko asiat ovat yhtäläiset.
Tai kuten tähän on sama kuin tämä, TAI tämä on yhtä suuri kuin tämän tyyppinen asia.
Kun taas yhden baari OR, on tehdä asioita peiton.
Joo.
>> Yleisö: Mitä tarkoitat peiton?
>> CAMILLE REKHSON: Niin peiton toimii suoraan bitit binary.
>> Yleisö: Voi, näen.
>> CAMILLE REKHSON: Joo, niin kanssa 0: n ja 1: n.
Teemme pari esimerkkejä tästä jälkeen, juuri niin se ei ole liian sekava.
Ja sitten kaksi viimeistä ovat vasen muutos ja siirto oikealle.
Jotka ovat periaatteessa kaksi vähemmän kuin merkkejä tai kaksi enemmän kuin merkkejä.
Ja he siirtynyt hieman tietty määrä paikkoja
että annat sille suuntaan.
Joten olisi joko siirtää se vasemmalle tai oikealle.
Joo?
Yleisö: Mikä syntaksi käynnissä?
>> CAMILLE REKHSON: Aiomme läpi esimerkiksi toinen.
Joten toivottavasti, jotka auttavat.
Kysyttävää juuri mitä kuuluu täällä, before-- OK.
Niin menee läpi joitakin esimerkkejä.
Aloitetaan ja ykkösiä.
Mitä saamme, jos teimme 0 ja 1?
>> Yleisö: 0.
CAMILLE REKHSON: OK, ja jos emme 1 JA 1?
Yleisö: 1.
CAMILLE REKHSON: Joo, mitä jos emme 0 tai yksi?
Yleisö: 1.
CAMILLE REKHSON: Miten noin 1 tai 1?
Yleisö: 1.
CAMILLE REKHSON: OK, entä 0 XOR 1?
Yleisö: 1.
CAMILLE REKHSON: Ja 1 XOR 1?
Yleisö: 0.
CAMILLE REKHSON: Olette hyvä.
Entä EI 0?
>> Yleisö: 1.
CAMILLE REKHSON: Ja EI 1?
Yleisö: 0.
CAMILLE REKHSON: OK, ja sitten tämä viimeinen yksi on pikkuinen siirtymisen kanssa.
Jos siis alun perin X olevan 8, ja sitten y on x siirtynyt vasemmalle 3,
mitä se meille?
>> Yleisö: [äänetön].
CAMILLE REKHSON: Sano se uudestaan.
Yleisö: [äänetön].
CAMILLE REKHSON: Niin, tämä todella antaa meille 64.
Yleisö: [äänetön].
CAMILLE REKHSON: Joten olen vain menossa kirjoittamaan tätä täällä,
joten tämä tekee hieman järkeä.
Jos meillä on 2 0, 2 1, 2 2, 2-3 tulee olemaan 8.
Ja jos me haluamme siirtää sen 3 enemmän bittejä vasemmalle, että olisi 2 4,
2 ja 5, ja 2 6, ja 2 6 64.
Onko se järkevää?
Kyllä.
>> Yleisö: Onko että siirtyminen kaikki 1: n ja 0 n binääriluvun the--
>> CAMILLE REKHSON: Kyllä.
Ja sinun ei tarvitse huolehtia siitä tietokilpailu näistä on negatiivinen.
Emme tee sinusta käsitellä negatiivinen muutoksia millään tavalla.
Muita kysymyksiä tästä?
Kyllä.
>> Yleisö: Jos se siirtyy oikealle, on jotain, joka wasn't-- mitään,
ei ollut alun perin osa juttu 0?
>> CAMILLE REKHSON: Joo, olisit vain lisätä 0 n on alkuperäisessä.
Joo.
>> Yleisö: Mikä on, että 100 siirretään oikealle kolme kertaa?
CAMILLE REKHSON: 100 siirretään oikealle,
jotta veisi kaikki 1: n ja 0: n ja vain siirtää niitä
oikealle niin monta kertaa kuin voit se siirtää oikealle.
>> Yleisö: [äänetön]?
CAMILLE REKHSON: No, 100-- ovat puhut 100 binary,
tai 100 desimaalin?
Yleisö: Olen pahoillani, 100 binary.
>> CAMILLE REKHSON: 100 binary, jos siirtää sen right--
jos siirtää oikealle kerran, siitä tulisi 10.
Jos vaihdat sitä oikealle kahdesti, siitä tulisi 001.
Ja sitten jos siirtää sen uudelleen, te tavallaan menettää hieman.
Joo, se on vain 0.
Muita kysymyksiä tästä?
Kyllä.
>> Yleisö: Niin se tulee 000.
>> CAMILLE REKHSON: Kyllä.
OK, joten mennään läpi hieman ASCII matematiikka.
Joten hahmot voivat olennaisesti rinnastetaan kokonaislukuja
perustuu niiden ASCII-arvoihin.
Joten jos me istuimme int vastaa 65, int B vastaa plus 1, int char C vastaa
D miinus 1, ja nieriää D vastaa 68, mitä tulostaa alareunassa?
>> Joten, olemme painatus these-- siunata sinä-- olemme
tulostus nämä kaikki ulos merkkiä perusteella prosenttia C.
Joten olemme periaatteessa tulostamalla merkki kaikkien neljän
näistä muuttujista.
Kuten vihje, 65 on ASCII-arvo Pääoman A. Ehkä se auttoi.
Mitä?
>> Yleisö: ABCD.
>> CAMILLE REKHSON: Joo, niin tämä tulostaa tarkalleen
ABCD koska asetamme int vastaa ASCII-arvon A.
Joten jos me painamme että ulos merkki, me vain saada pääomaa,
Plus 1 olisi pääoma B ASCII.
D miinus 1 olisi pääoma C ASCII.
Ja 68 on ASCII-arvo D. Kysymyksiä ASCII?
Kyllä.
>> Yleisö: Niin, ympärille lainausmerkit , Tekee sen muutos on ASCII?
>> CAMILLE REKHSON: Se uses-- se count-- puolilainausmerkkejä ympäri
tekee siitä merkki.
Ja jos olet tekemisissä se määrä form--
niin kun, kuten tässä tapauksessa, se on käsitellään kuten int--
se käsittelisi jossa se on ASCII-arvo.
Kyllä.
>> Yleisö: Oletteko suositella, että meillä on ASCII-taulukkoa?
>> CAMILLE REKHSON: En think--
>> Yleisö: Vai olisiko vain tekemisissä näiden?
>> CAMILLE REKHSON: Minusta meidän tekisin sen helposti asioita.
En usko, että se olisi satuttaa kirjoittaa ehkä
mitä pääoman ja pienet ovat, vain mitä nämä alueet ovat alkaen.
Mutta en usko sinun täytyy ottaa kaikki tilaa laittaa koko ASCII pöytä.
Joo.
>> Yleisö: Mitä eroa välillä sanomalla int ja char C,
kuin sinulla huipulla?
>> CAMILLE REKHSON: Joten se on vain miten joka tallennetaan muistiin.
Mutta voit käsitellä sitä joko tavalla.
Kuten näemme täällä, me teemme tulosta ulos kuin merkki.
Yleisö: Niin, että sama kuin?
CAMILLE REKHSON: Joo.
Muita kysymyksiä?
>> Yleisö: Niin, prosenttia C sanoo tulostaa merkkiä?
>> CAMILLE REKHSON: Kyllä.
>> Yleisö: Joten vaikka on vain on määritelty kokonaisluku,
jos yritämme tulostaa nieriä kuin 65, se would--
CAMILLE REKHSON: Se menisi pohjimmiltaan menee ASCII kaavio
ja saa mitä merkkiä ASCII kaavio, että 65.
>> Yleisö: Kiitos.
>> CAMILLE REKHSON: Joo.
Kyllä?
>> Yleisö: Joten jos et% I% I, % I% I olisi se vain print--
CAMILLE REKHSON: Joo, jos ei kaikki 4% I: n, se
tulostaisi ASCII arvot kaikki neljä näistä.
Muita kysymyksiä?
OK, joten soveltamisala, periaatteessa tämä auttaa meitä selvittämään, missä
muuttuja olemassa ohjelmaan.
Joten olemme puhuneet kaksi erilaista tyyppisiä laajuus, globaali ja paikallinen.
>> Jos muuttuja on maailmanlaajuisesti scoped, se tarkoittaa koko ohjelma
on pääsy että muuttuja.
Ja jos maailmanlaajuisesti soveltamisala muuttuja, sinua
julistaa, että se ennen päätehtävä.
Joten se tehdään oikein suoralta kädeltä.
Ja sitten koko ohjelma voi käyttää sitä.
>> Jos se on vain paikallisesti scoped, että muuttuja rajoittuu tietylle alueelle.
Joten jos julistaa sisällä varten silmukan, vain että silmukka voi käyttää sitä.
Tai jos julistaa sisällä erityistoiminto,
ainoastaan, että toimintoa voidaan käyttää sitä.
Kysymyksiä soveltamisalaa.
>> OK, joten toiminto prototyyppien.
Periaatteessa koska C, kun se kokoaa, lukee ylhäältä alas.
Jos julistaa toiminto myöhään koodissa,
kääntäjä ei tiedä että tämä tehtävä on olemassa.
Joten mitä käytämme prototyyppejä, joka pohjimmiltaan kertoo kääntäjä,
Tämän toiminnon olemassa, siirry katso sen myöhemmin koodissa.
Niin että teet toiminto prototyyppi
Juuri näin aloitat pois kirjoittaminen toiminto.
Annat palautuva, funktion nimi,
ja sitten argumentteja että tämä tehtävä vie.
>> Joten, katsomaan nopeasti Esimerkiksi tässä Isojen meidän toiminto että käytämme täällä
on pohjimmiltaan kuutio toiminto.
Joten ryhtyy kokonaisluku ja palaavat kuution, että kokonaisluku.
Joten koska olemme kirjoitettu, että toiminto alla päätehtävä,
ja haluamme käyttää lähtö that-- tai me
haluavat, että toiminto meidän päätehtävä,
laitamme sen prototyyppi tavalla yläreunassa ohjelmamme.
Ja sitten kun me kutsumme se meidän päätehtävä,
kääntäjä tietää, että tämä tehtävä on kirjallinen myöhemmin, ja menee etsimään sitä,
ja käyttää sitä oikein.
Kysymyksiä prototyyppien?
Kyllä.
>> Yleisö: Mitä järkeä?
En saa pisteen prototyyppien.
Miksi ei vain se siellä?
>> CAMILLE REKHSON: No jos se on täällä, silloin kun
saat linja kuutioon X teidän päätehtävä,
kääntäjä ei ole aavistustakaan, että kuutio toiminto todella on olemassa.
>> Yleisö: Etkö voisi vain laittaa sen eteen?
>> CAMILLE REKHSON: Se parempi koodaus käytäntö
laittaa se teidän päätehtävä.
Joten siksi olisimme tehdä prototyyppien.
Vain koska, jos oli paljon toimintoja,
se olisi todella sotkuinen lukea läpi kaikkia niitä toimintoja
ennen kuin saat liha ohjelman.
Joo, ja teillä oli q--
>> Yleisö: Niin, julistaa muuttuja ylös yläreunassa
joten voit käyttää sitä, tehdä se globaali muuttuja?
Onko se tämän kaltaista jossa se toteaa sen
siellä, niin että se tietää, että se tulee käyttää sitä myöhemmin
ja voit käyttää sitä?
>> CAMILLE REKHSON: Joo.
Kyllä.
>> Yleisö: Pitäisikö the-- ylimääräisiä toiminnot luoda avaimen ulkopuolella
tämä asia, or--
>> CAMILLE REKHSON: Joo, jos olet muiden, functions-- tärkein
itsessään on function-- joten jos luot muita toimintoja,
niiden pitäisi olla ulkopuolella.
Kyllä?
>> Yleisö: Mikä prosenttia D?
CAMILLE REKHSON: Prosenttia D on sama asia kuin prosenttia I.
Se viittaa kokonaisluku.
Kyllä.
>> Yleisö: Mikä on int main tekee?
Mikä se oli mitätön?
CAMILLE REKHSON: Void sanoo se vie argumentteja.
Yleisö: [äänetön].
CAMILLE REKHSON: Voitko puhua vähän kovempaa, anteeksi?
Yleisö: Joo, anteeksi, miksi laitat mitätön ensimmäinen,
ja sitten int tulo toinen?
CAMILLE REKHSON: Voi, että kaksi different-- varten päätehtävä
verrattuna kuution toiminto?
Joten päätehtävä, käytämme mitätön, koska siellä
ei parametreja ryhdytty.
Kun taas kuutio toiminto, meillä on panos.
Siksi sanotaan int, syöttö, koska on olemassa perusteluja, että olemme
ottaen ajaa meidän tehtävämme.
Joo.
Onko kysymyksiä?
>> OK, ja sitten nopeasti liukulukuja epätarkkuutta.
Joten meillä on äärettömän monta reaalilukuja.
Mutta vain rajallinen määrä bittejä
että voimme käyttää näyttämään niitä numeroita, ja edustaa heitä.
Niin silloin päädymme joidenkin epätarkkuutta.
Ja teidän numerot eivät aina olla varsin juuri
luulet he ovat, kun olet käsittelevät liukulukuja.
Tämä on vain jotain hyvä tietää.
Kysymyksiä tähän?
Kyllä.
>> Yleisö: Onko tämä viittaavat ajatusta vähän ylivuoto
joka oli luento?
Oliko se jotain erottaa?
>> CAMILLE REKHSON: He täysin erillinen, joo.
OK, suuri.
PULAK Goyal: Hei, kaikille.
Nimeni on Pulak, ja minä olla menossa yli osoittimia.
OK, joten katsotaanpa ensin ajatella mitä muisti näyttää.
Joten kuten näette täällä, me ottaa muistia ja jaamme sen
osaksi joukko lohkoja.
Ja me viittaus kuhunkin lohko osoitteen, eikö?
Ja ei kukaan muista mitä tyyppi merkintätapa käytämme kuvaamaan osoite?
>> Yleisö: Heksadesimaali 0X.
>> PULAK Goyal: Heksadesimaali, eikö?
Joten 0X tarkoittaa olemme puhumme heksadesimaalimuodossa.
OK, joten miten luomme osoittimet?
Joten otamme tyyppi, me laittaa it-- lisätä tähti siihen,
ja sitten lisäämme muuttujan nimi.
Joten esimerkit olemme nähneet ovat int tähti X, nieriää tähti y, ja kellua aloita z.
Joten kun sanon int tähti X, voi joku kertoa minulle
mitä olen sellainen puhu siellä?
>> Yleisö: sijainti levyn.
>> PULAK Goyal: Anteeksi, mitä?
Voitko toistaa tuon?
Yleisö: sijainti levy.
>> PULAK Goyal: Niin actually-- niin mitä Tarkoitin, on kun meillä on int tähti X,
sanomme luo osoitin, ja se
voi tallentaa osoitteen muuttuja, joka on int, eikö?
Joten char tähti y, Luomme osoitin
johon voi tallentaa osoite muuttujan, joka on merkkiä.
Jotta järkevää kaikille?
OK, viileä
>> OK, joten osoittimet, on kaksi tärkeää toimintaa voimme tehdä.
On viitataan, ja siellä dereferencing.
Joo?
>> Yleisö: Voisitko mennä hieman hitaammin?
>> PULAK Goyal: Toki.
Joo, so-- Joo, kysy kysymyksiä menen pitkin jos sinä-- jos jokin on epäselvää.
Joten olemme löytymistä ja dereferencing.
Joten kun haluat saada osoitteeseen muuttujan, käytä & -merkki.
Joten sanoa ilmoitettu int x jonnekin.
Ja haluan saada osoitteen että ja siirtää sen, tekisin ampersand x.
Ja kun haluat saada liittyvän arvon osoitin,
käytät dereference operaattorin, joka on tähti.
>> Joten avulla sanoa saaneeni int tähti X, ja Minulla oli se osoittaa jotain.
Jos haluan saada arvon miltä osoittaen, haluan vain tehdä tähti x.
Onko selvä?
Kaikki kysymykset siitä?
Joo.
>> Yleisö: Joten yleensä, te ei voi tehdä x ja tähti
x sama X.
Pitääkö tämä paikkansa?
Koska jos x on muuttuja, niin sinulla on
tehdä x saada että se on osoitin.
Mutta jos x on osoitin, sinun täytyy tehdä tähti x saada muuttuja.
>> PULAK Goyal: Kyllä, niin kysymys oli siitä, milloin
käytämme star-- kun käyttäisit tähti,
ja kun käytämme et-merkki, ja voimme
käyttää sitä samantyyppisiä muuttuja?
Joten yleensä jos sinulla on, esimerkiksi int x,
voit useimmiten käyttää ampersand saada osoitteen että.
Koska se ei tee järkevää kunnioitus osaksi X.
Katsoo, että jos meillä olisi int tähti X, olisit käyttää dereference toiminta
koska se ei ole mitään järkeä käyttää x kyseisessä asiassa.
Onko se järkevää?
>> Yleisö: Joten et voi ja, ja sitten osoitin?
PULAK Goyal: Joten teknisesti, oikeastaan
voi tehdä -merkki osoittimen.
Mutta se ulos laajuus tämän luokan.
Sillä purpose-- oman kaverit " tarkoituksiin, kun on viitteitä,
haluat käyttää dereference operaattori saada liittyvän arvon että.
Ja kun sinulla on säännöllinen muuttujia, kuten int x,
haluat käyttää et-merkki operaattorin saada osoitteen että.
OK?
>> OK, joten Katsotaanpa osoittimet ja mitä tapahtuu konepellin alle.
Joten ensimmäinen asia, tein tässä ilmoitettu int x on yhtä kuin 5.
Osoite Tämän muuttujan on 0x04, ja arvo on 5.
Joten mitä tapahtuu kanssa seuraavalle riville.
Joten nyt me julistamme osoitin.
Sen osoite on 0x08, ja sen arvo on osoite x.
Tarkoittaako tämä järkevää kaikille?
Kaikki kysymykset siitä?
>> OK, ja nyt katsotaan mitä tapahtuu seuraavalle riville.
Niinpä tämän seuraavalle riville, olemme osoite kopion ollessa 0x10,
ja sen arvo on 5.
Joten syy saimme viisi on sanoimme, me dereference
osoitin, jota julisti int tähden.
Ja niin se went-- kun dereference se, se sanoi, OK, mikä on korttipaikkaan 0x04.
Ja se meni että.
Ja mikä X on x0-- 0x04, ja arvo on 5.
Onko siinä järkeä?
Joo?
>> Yleisö: Miksi kopio osoite vain 4 tavua yläpuolella X osoitin?
>> PULAK Goyal: Kyllä, tämä on virhe on--
>> CAMILLE REKHSON: Niin, kyllä, muistan tämä on kirjoitettu heksadesimaalimuodossa.
PULAK Goyal: Ai, joo.
CAMILLE REKHSON: Eli tämä on todella 8 ja sitten 16
koska sanoimme, että osoitin, muistaa,
meidän IDE tulee olemaan 8 tavua pitkä.
PULAK Goyal: Joo.
Joten vain olla selkeä, osoittimet ovat 8 tavua.
Int on 4 tavua.
Joten miksi mitä hyppäsi 0x04 ja 0x08
on koska jouduimme tehdä hyppy 8 tavua.
Ja sitten for-- alkaen kopio on vain int,
se on 4 tavua, joka on puolet 8 tavua.
Joten me vain siirtyä 0x10, joka on kaksi päässä 0x08.
Muita kysymyksiä?
OK, let's-- joo?
>> Yleisö: Miksei arvo int kopio
vain the-- miksi se 5 sijaan 0x04?
>> PULAK Goyal: OK, miksi se 5?
OK, joten kun the-- joten tehdään ensimmäinen ajattele tätä kannalta tyyppejä.
Joten sanon int kopio on yhtä suuri kuin osoitin tähden.
Joten mikä on tyyppi osoitin?
Se on int tähden.
Ja kun minä dereference että, tyyppi tulee int.
Joten mitä odotamme tallentamaan tässä todella int.
Onko siinä järkeä?
Yleisö: Toki, hieman.
PULAK Goyal: Joten yleensä kun luulet kannalta tyyppejä,
se auttaa sinua ymmärtämään, mitä on tyyppi arvo, joka pitäisi mennä sinne.
Joten voit yleensä sulkea pois paljon näitä yleisiä virheitä
ajattelemalla kannalta tyyppejä.
Anna minun mennä läpi hieman dioja.
Ja voimme saada kysymyksiä loppuun osoittimen osassa.
OK, joten meillä on buginen ohjelma täällä.
Ja niin tekee anyone-- voi joku kertoa minulle, mikä on vialla tämän ohjelman?
Oikea, joten mitä olemme odottaa tehdä täällä
is-- mitä haluamme tehdä on otettava muuttuja int x
ja käännä it-- tehdä siitä yhtä suuri 5 sijasta 3 ja tulosta se.
Mutta se ei tapahdu.
Voiko joku kertoa minulle, miksi?
Kyllä?
>> Yleisö: Kun toiminto to_five vie X kuin se väite,
se ei ota X itse, mutta sen sijaan luo kopion,, on se.
Ja se muodostaa operaatioita että.
Mutta koska se, et muuta todellista arvoa x.
Koska olet [kuultavissa].
>> PULAK Goyal: Oikea, oikea, joten kun me kutsumme
toiminto to_five, mitä me teemme ajattelee,
anna minulle kopio arvo tuon toiminnan.
Tämä toiminto, sitten, on menossa ja tekee joitakin manipulointia.
Mutta kun se palaa, se on nyt ulos soveltamisalasta ja päätehtävä täällä.
Ja niin x on vielä, itse asiassa, yhtä kuin 3, ja me painamme 3.
OK, joten katsotaanpa miten tämä tapahtuu.
>> OK, joten ei ole mitään ilmoitettu.
Sitten, tässä, x on yhtä suuri kuin 3.
Ja nyt se is-- asemassa kaksi, ei ole vielä laajuudeltaan.
Ja nyt menemme asentoon kolme, jos nyt oletetaan arvo 3.
Neljän, nyt muuttaa 5.
Mutta nyt, kun me hypätä takaisin viisi, joka on print,
on nyt soveltamisalan ulkopuolella.
Ja x on edelleen yhtä suuri kuin 3.
Onko tämä järkevää kaikille?
OK, joten nyt puhutaanpa miten voimme käyttää osoittimia korjata.
Onko kellään mitään ideoita miten voisi korjata tämän käyttämällä osoittimia?
>> Yleisö: Otat int tähden sijasta int varten to_five.
>> PULAK Goyal: Anteeksi, voisitteko puhua?
>> Yleisö: Otat int tähden sijasta int varten to_five.
PULAK Goyal: OK, kyllä.
Joten pass-- sijaan kulkee vain arvo, nyt kulkea sitä viitteenä.
Tämä uusi toiminto, eikö?
Ja niin johtamalla osoite, me voi tehdä manipulointia on osoite.
Ja niin olemme todella, itse asiassa muuttumassa X.
Joten miten se toimii.
>> OK, joten tässä esimerkissä korjasimme sen.
Olemme muuttaneet allekirjoitus on to_five toteuttaa int
tähti sijasta vain int täällä.
Sitten dereference tämä ja antaa 5 sitä.
Ja nyt tämä tahto, itse asiassa, tulosta 5.
Joten miten vaiheet töissä täällä.
>> Joten ensimmäinen askel, mikään ei ilmoitettu vielä.
Joten tässä, toisen vaiheen, Olemme mainittu x on yhtä suuri kuin 3,
mutta on edelleen soveltamisalan ulkopuolella.
Nyt kolmannen linja, meillä on x on edelleen yhtä suuri kuin kolme.
Ja nyt, olemme ylittäneet in-- mitä tallennettu on nyt osoite x.
Tarkoittaako tämä järkevää kaikille, miten saimme sen?
Oikea, meillä on amper-- näin ohitimme et-x toiminto
to_five.
Ja sitten seuraavalle riville, mitä teemme, on meillä dereference.
>> Ja dereferencing, pystymme muuttaa x arvo 3-5.
Koska X asuu kyseisessä osoitteessa 0x12.
Ja sitten lopuksi, kun palaamme takaisin päävalikkoon,
vaikka tämä on nyt pois laajuus, olemme itse asiassa muuttunut X.
Ja se on 5.
Kysyttävää?
Joo?
>> Yleisö: Voitko kertoa minulle mitä -merkki X oli?
Luulin et-merkki oli kuin JA.
>> PULAK Goyal: Kyllä, joten käytämme samoja symboli monia eri asioita.
Joten tässä, kun have-- vuonna Tässä tapauksessa, kun sinulla on,
Olen guess-- joten tässä tapauksessa, kun olet tekemisissä osoittimia,
kun laitat et-merkki edessä ja int, muuttuja int tai char,
tai virtaus, mitä sanot on, anna minulle osoite tämän.
Mutta mitä olit ajatellut, kun muu käyttäisit et-merkki on, sanokaamme,
kohteessa jos ilmoitus.
Sinulla on tosi, ja joitakin muuttujia että arvioida noin Boolen,
ja joitakin muita muuttujia että vahvistaa jotkut Boolen
ja haluat saada ja tuon.
Sitten voit käyttää ampersand.
SPEAKER 1: Joo, niin juuri tänään, olemme puhui kolme eri käyttötarkoituksiin
ja et-merkki.
Meillä on kaksi et-, joka on mitä Pulak on juuri kuvattu.
Meillä on yksi et-merkki, joka on mitä Camille kuvattu
aikaisemmin, mikä on yksi ampersand.
Ja se on peiton JA.
Ja huomaa, että molemmat ehdollinen AND-- tai, anteeksi,
looginen AND ja verkon peiton JA, ne on kaksi numeroa, eikö?
Se oli jotain et-merkki et-merkki jotain,
jotain et-merkki jotain.
Täällä, kun meidän on vain et-merkki jotain, joka on dereferencing.
>> PULAK Goyal: Joo, hyvä kysymys.
Joo.
>> Yleisö: Miksi linjassa 5a ja tähti tulla N /?
Miksi he eivät juuri sellainen säilyttää samat arvot edellisestä linja?
>> PULAK Goyal: Koska olemme poistui toiminto.
Ja niin mitä happens-- joten what-- nyt olemme
pois soveltamisalasta tämän tehtävän, mitä tapahtuu todella
on ne poistetaan muistista.
Joo.
>> Yleisö: Välillä 3 tai 4 tähden vastaa 5.
PULAK Goyal: Kyllä.
Yleisö: Mitä että tarkalleen tarkoittavat?
PULAK Goyal: Mitä se tarkoittaa?
Yleisö: Joo.
PULAK Goyal: Niin kysymys oli, mitä on
that-- mitä teet verkossa kun sanomme, tähti on yhtä kuin 5?
Muista siis tähti dereference operaattori.
Joten kun tässä tapauksessa, on osoitin.
Se int tähden.
Joten kun me dereference mukaan käyttämällä tähti, mitä sanomme
on, löytää minkä varastoidaan osoite, tallennetaan a-- niin take-- niin,
juuri nyt, on joitakin osoite tallennetaan se.
Mene jossa osoitteeseen pistettä, ja nyt muuttaa mitä se on viisi.
Joo.
>> Yleisö: Voitko sanoa se yksinkertaisemmin?
Muuta osoite 5.
>> PULAK Goyal: Emme ole muuttamalla osoitteen 5.
On joitakin osoite se, joka on osoitteen olevan muuttujan.
Ja niin mitä sanomme kun me dereference on,
nyt haluamme change-- olemme nyt löytymistä
muuttujan edun suoraan.
Onko se järkevää?
>> SPEAKER 1: Toinen tapa ajatella se on go-- joten on osoite.
Tähti sanoo mennä, että käsitellä ja katsoa sen arvo.
Ja nyt asetettu sen arvo 5.
Niin se sanoo, siirry osoite x, joka
tulee olemaan mitä tallennettu vuonna, ja muuttaa sitä 5.
PULAK Goyal: Joo?
Yleisö: Eli sijainti silloin osoitin on menossa, osoite.
Mutta arvo on määritetty arvo osoitteen perusteella.
PULAK Goyal: Joo.
Muita kysymyksiä tästä?
Yleisö: Minulla on kysymys.
PULAK Goyal: Joo, anteeksi.
Yleisö: Joten kun store-- niin jos sanot [kuultavissa].
PULAK Goyal: Kyllä.
Yleisö: Onko sinulla Säilytä x et-merkki?
Miksi et voi vain sanoa X ennen int [äänetön]?
PULAK Goyal: So--
Yleisö: [äänetön].
PULAK Goyal: Niin on sinun question-- OH.
Joten kysymys on, miksi ei voi we-- toiminnon to_five, miksei me
vain pass x, eikö?
>> Yleisö: Oikea.
>> PULAK Goyal: OK, joo, joten tämä uudelleen menee takaisin meidän keskustelua tyyppejä.
Joten toiminto to_five on nyt odottaa tyyppi int tähti.
Joten mikä on tyyppi x?
X on vain int.
Mutta mitä tämä toiminto odottaa on int tähden.
Joten se odottaa muuttuja on osoite tallennetaan se.
Niin, että miten sinä-- laittaa et-merkki, ja niin se on
miten me kulkea -osoite, joka on now--
ja että tulkitsee kuten int tähden, joo.
Suuri kysymys.
Muita kysymyksiä tästä?
OK, viileä.
>> OK, joten nyt puhutaan noin osoitin aritmeettinen.
Joten tässä, lisäämällä ja vähentämällä i säätää osoitin
i kertaa koko tyypin osoittimen tavuja.
Joten katsotaanpa miten se näyttää.
Joten tässä, olemme julisti int x vastaa 5.
Ja nyt aiomme julistaa osoitin y, ja kulkea osoite x siellä.
Meillä on siis, että.
Joten X säilytetään 0x04.
Joten nyt y on yhtä suuri kuin.
Ja voi joku kertoa minulle, mitä he ajattelevat tapahtuu, kun teemme y plus on 1?
Joo?
>> Yleisö: Aikooko se muuttuu 0 kertaa 0 8?
>> PULAK Goyal: Koko, ja type--
>> Yleisö: Olet muuttamassa osoite.
PULAK Goyal: Joo se was-- kyllä.
Niin oikein.
Joten se muuttuu 0x08.
Ja because-- joten sinun käyttää tätä kaava, 1 kertaa koko osoittimen
ja osoittimet ovat size--
>> [OPISKELIJAT Murmur]
>> PULAK Goyal: Oikea.
>> [OPISKELIJAT Murmur]
>> SPEAKER 1: Niin tyyppi, joka osoitin to--
>> PULAK Goyal: Onko, joo, Joo, 4 tavua.
>> SPEAKER 1: Niin ints 4 tavua.
>> PULAK Goyal: Joten jos olisimme a-- katsotaanpa sanomme julisti, luulisin, nieriää.
Mitä that-- joten Sanotaan on char X yhtä suuri tai jotain.
Ja meillä oli osoite että 0x04, mikä olisi y plus on 1 tehdä nyt?
Anteeksi mitä?
>> Yleisö: 0x05.
PULAK Goyal: 0x05, oikea.
Onko kaikkien nähdä, että?
OK, ja nyt sanotaan se kellua.
Mitä tapahtuisi?
Kukaan?
Joten kellukkeet ovat, kuinka monta tavua?
>> Yleisö: 4 tavua.
>> PULAK Goyal: Oikea.
Joten se olisi sama asia kuin tämä.
Viileä.
OK, ja nyt puhutaan noin viitteitä ja taulukot.
Joten näit tämän päälle edellinen kaksi p sarjaa,
jossa voimme treat-- niin taulukot ja osoittimet eivät ole sama asia.
Mutta voimme käsitellä taulukoita osoittimia.
Joten tässä, meillä on tämä joukko täällä, jossa on kolme korttipaikkaa.
Ensimmäisen slot-- me on yksi, kaksi ja kolme.
>> Joten jos we-- jotta voimme antaa että sanomalla, meillä on joukko,
dereference että.
Ja sitten kun me dereference että, mitä me oikeastaan ​​teemme
viittaa samaan paikkaan.
Joten tähti array on 1.
Me could- miten voisi me kirjoittaa that-- mitä
Vaihtoehtoinen tapa voisimme kirjoittaa, että?
>> Yleisö: Array 0 yhtäläinen 1.
>> PULAK Goyal: Aivan, ei kaikki nähdä, että?
Niin sama juttu täällä.
Joten kun meillä on joukko plus 1, me do-- niin even--
muistamme aritmeettinen että me puhui juuri, kun me teemme plus 1
tai siirtää sen yli 4 tavua, oikea.
Onko kaikkien nähdä, että?
Ja että puoli, kun me dereference että voimme asettaa, että 2.
Ja näin asetamme seuraavan lohkon 2.
Ja niin vaihtoehtoinen tapa kirjoittaa että olisi myös joukko kiinnike
0 kiinnike on 1.
>> Yleisö: Tarvitsetko suluissa?
>> PULAK Goyal: Kyllä, koska olet dereferencing koko määrä
array plus 1.
OK, ja sama asia array plus 2.
Kysyttävää?
Joo.
Yleisö: Niin array on automaattisesti 0?
>> PULAK Goyal: Array is-- Anteeksi, mitä?
>> Yleisö: Array on 0.
Osoite matriisi on vain 0.
>> PULAK Goyal: Joten kysymys oli, on osoite array vain 0?
Eli ei, array on joitakin osoite.
Joten kun me dereference se, that's-- joten voit ajatella about--
kirjaimellisesti kuin osoitin osoittelee alkuun jono.
Niin että on joitakin osoite.
Emme tiedä mitä se on.
Mutta kun me dereference se, tiedämme se on alussa jono.
Ja niin kun siirrymme vuoteen 1, me vain liikkuvat
suhteessa kun tämä osoite oli.
Muita kysymyksiä?
Joo?
>> Yleisö: Joten jos et array kiinnike plus 1--
PULAK Goyal: Anteeksi, I-- voisitteko puhua?
Yleisö: Joo, jos et array kiinnike [kuultavissa].
Joten sitten jos laitat pointer--
PULAK Goyal: Anteeksi, en kuule sinua.
Voitteko sanoa vielä kerran?
>> Yleisö: Olet OK.
>> PULAK Goyal: OK, sorry.
OK, viileä.
Any-- joo.
Joten kun menet array kiinnike 3--
>> PULAK Goyal: Joo.
>> Yleisö: --isn't there-- ei se on neljä paikkoja kuten 0, 1, 2, ja 3?
Miksi se ei int array 2?
>> PULAK Goyal: Ei, niin vain yleissopimuksen C is-- kun julistaa array,
we-- numero laitoimme sinne on kuinka monta lähtö haluamme.
Mutta indeksit array ovat todella array 0, array 1, ja array 2.
Joten se on vain yleissopimuksen miten me julistamisesta taulukot.
Joo, muita kysymyksiä?
Joo.
Yleisö: Joten olemme yhä puhumme viitteitä, eikö?
PULAK Goyal: Joo.
Yleisö: Voisitko vielä tehdä tähti array 0 on 1?
PULAK Goyal: Ei, ei, so-- OK, joten kysymys oli voisi
et vain tähti array kiinnike nolla, ja sitten sanoa, että yhtä 1.
Niin, ei, mitä sanomme tässä on, että voimme think--
voimme käsitellä taulukoita osoittimia.
Joten me have-- mitä olemme sanonta on meillä on kaksi tapaa
nyt viittaus samassa korttelissa.
Joten doing-- jos sinulla on joukko nolla, tyyppi, joka on nyt int.
Ja jos otat tähti, joka, saat kelpaa juttu.
Joten mitä sanomme täällä, on on olemassa kaksi vaihtoehtoisia tapoja
viitata samassa korttelissa.
Voit joko tehdä array kannatin 0 on 1.
Tai voit tehdä dereference array, ja on, että 0.
Joten vain kaksi tapaa tehdä sama asia.
Joo.
>> Yleisö: Miksi ei ole sitä koko int 1 lisätä to--
>> PULAK Goyal: koko int 1.
>> Yleisö: Koska se liikkuu kertaluonteinen.
>> PULAK Goyal: Koska se juuri niin C toimii.
Se on vain tapa osoitin aritmeettinen on määritelty.
Se vie osoitin.
Ja sitten mitä lisäät sen, se tulee kertoa, että
koon riippumatta pekarminnet on, joo.
Joo.
>> Yleisö: Joten sanot voimme käsitellä osoittimet ja taulukot sama,
mutta että ne ovat erilaisia.
Joten mikä tekee niistä erilaisia?
Mitä voimme tehdä kanssa yksi mutta ei muita?
>> PULAK Goyal: varten tämän luokka, mielestäni it's-- mitä tehdä sinä--
>> SPEAKER 1: Niin, we-- OK, niin, sillä Jos esimerkiksi varata muistia
ja sinulla on osoittimen kokonaisluku, esimerkiksi.
Jos olet yrittänyt aloittaa tekee osoitin aritmeettinen
ja ylittävät muistin määrää te varattu, sinun törmätä virheitä.
Tiedämme kanssa paneelit, me sanoa etuajassa, OK, minä
haluavat allocate-- tähän olennaisesti sanoo, haluan jakaa
tarpeeksi tilaa kolme kokonaislukua.
Ja nyt voimme käsitellä muistia kuin jos meillä on kaikki kolme näistä kokonaislukuja.
Onko tällaista järkeä?
>> PULAK Goyal: Joo.
Joo.
>> Yleisö: Niin tähti array, että osoitetaan 1
0-indeksi array?
PULAK Goyal: Kyllä.
>> Yleisö: Joten, mikä on jälkeen Seuraavat kaksi riviä kannalta the-- I
ymmärtää, että yrität käyttää osoitin aritmeettinen täällä,
mutta jälleen kerran, en ymmärrä mikä osoitin aritmeettinen on.
Joten array plus 1, olet sanomalla, että olet nyt
menossa halua puhua ensimmäinen indeksi array.
>> PULAK Goyal: Oikea, ja niin syy, joka toimii on joukko,
täällä, voimme ajatella kuin int tähti.
Ja niin kun emme osoitin aritmeettinen sitä, muistaa kaava jossa
otamme the-- luulisin riippumatta nykyinen osoite on,
ja sitten kun lisäämme 1 se, me itse
moninkertaistaa 1 koon mukaan asia olemme manipuloimalla.
Joten tässä tapauksessa, koko int.
Ja sitten siirrymme se välittämään tämän paljon.
>> SPEAKER 1: Niin teeskennellä sinulla b array tähden.
PULAK Goyal: OK, joo.
SPEAKER 1: kädelläsi.
Mene tänne.
PULAK Goyal: Tai voin just-- joo.
Joten here-- OK, joten array at alussa, on juuri täällä.
Joten kun me dereference array, olimme vain viitaten ensimmäisen lohkon täällä.
Mutta nyt kun en array plus 1, että is-- että nuoli on nyt täällä.
Onko se järkevää?
Oikea, koska tämä lohko on koon int, joka on 4 tavua.
Ja niin, mitä teemme on olemme liikkuvat että osoitinta 4 tavua yli.
Aina kun teemme aritmeettinen sitä, se on aina
siirrä se lisäyksin 4 tavua.
Koska tämä on kuin int tähden.
Onko siinä järkeä?
OK.
>> Yleisö: Eli asioita array olivat 5 tavua, olisimme siirtää sen 5 bytes--
>> PULAK Goyal: Oikea, joten jos meillä olisi char tähti, olisimme siirtää sitä 1 tavu vain.
Joten jos kyseessä on char tähteä, se olisi vain olla siirtää sen yli 1.
Yleisö: Saadaksesi seuraavaksi tarvitset tähti.
PULAK Goyal: Joo, joo, ei se järkevää?
SPEAKER 1: Voimme keskustella siitä lisää myöhemmin.
PULAK Goyal: Joo, joo, varmasti.
OK, viileä.
Siirrytään seuraavaan osaan.
SPEAKER 1: Voi, OK viileä.
Joo, se olen minä.
Hyvä, mahtava.
OK, viileä, joten nyt olemme päälle hieman yleisempää tietoa muistiin.
Myös, arvostan sitä, että he olivat menossa melko nopeasti.
Se on paljon materiaalia saada läpi puolitoista tuntia.
Mutta onko aiheita sinua halua mennä syvällisempää osaksi,
aiomme olla virka tällä viikolla
jossa voit keskustella kanssamme one.
Tai voit vain tulla ylös end ja me keskustella asioista.
Ja kuten aina, tuntuu vapaasti esittää kysymyksiä.
Mahtava.
Joten tässä on meidän kuva muistin olemme nähneet luento miljardia kertaa.
Ja tiedämme, että tämä pino kasvaa pohjasta
ja kasa kasvaa alaspäin.
Ja mitä eroa asiat että pidämme kasaan ja asioita
että pidämme pinoon?
Joku heittää jotain siellä.
Joo.
>> Yleisö: Onko pino asioita, jotka ovat vain
impermanent muuttujia että olemme vain julistamisesta käyttää tiettyjä toimintoja?
SPEAKER 1: Kaunis, joo.
Joten tahansa, jos, katsotaanpa sanovat olemme toiminto,
ja meidän on vain joitakin paikallisia muuttujia.
Ne ovat menossa päätyä pinoon.
Jos sen sijaan, kutsumme malloc ja todella varata muistia,
että aina tulee kasaan.
Niin, joo Cool?
>> Ja niin muista, että kaikki muisti että haluatte käyttää käyttäen malloc,
että menee päätyä kasaan.
Ja jos unohdat vapaa se, tietokoneen
aio tietää, että olet tehnyt sen kanssa.
Joten se on juuri menossa hengailla siellä muistissa.
Ja olet pohjimmiltaan vuotaa että muisti.
Olet menettää sitä.
Koska et koskaan kertonut tietokone, hei Olen lopettanut sen käyttämisen, vapaasti käyttää,
laittaa muita asioita siellä.
Viileä.
Kaikki kysymykset siellä?
Kyllä.
>> Yleisö: Millainen muistia on pino?
Non dynaaminen rehu, delegoitu?
Mitä te kutsutte sitä?
>> SPEAKER 1: Toki, niin voisit ajatella sitä paikallisia muuttujia.
Todellinen puhelut toimintoja aiot pinota.
Jotain muuta?
Joo?
Yleisö: Miten ilmaiseksi muistia lisätty the--
SPEAKER 1: Toki, niin kun jakaa muisti kasaan, soitat malloc.
Ja niin sitten joka antaa sinulle takaisin osoitin joihinkin osoite muistiin.
Niin sanovat soitit että osoitin, eikö?
Sitten, sanoit ilmaiseksi osoitin.
Ja joka vapauttaa muistia.
Viileä.
Muita kysymyksiä?
Kyllä.
>> Yleisö: Mitä dynaamisesti tarkoittaa?
>> SPEAKER 1: dynaamisesti tarkoittaa, aikana ohjelma.
Joten kun soitat malloc vuonna keskellä ohjelmaa,
alussa ohjelman, ei ole muistia varattu.
Ja kun tietokone selata, että koodi,
se tulee jakaa muistin.
Niin, että mitä me tarkoitamme dynaamisesti.
Hyvä kysymys.
Joo?
Yleisö: Kun määritellään array hakasulkeissa,
tekee sen vielä [äänetön]?
SPEAKER 1: Se on hyvä kysymys.
Uskon, että kun olet jakaa taulukon, se todella laittaa sen pinoon.
En ole myönteisesti että, joten älä lainata minulle.
>> SPEAKER 2: Luulen it-- joo se laittaa sen pinoon.
>> SPEAKER 1: Laittaa se pinoon.
OK, viileä, vahvisti.
Muita kysymyksiä?
Joo?
>> Yleisö: Kun siirtää malloc, ei tietokone automaattisesti
varata muistia muuttujia?
SPEAKER 1: Joo, sillä paikallinen muuttujat,
se automaattisesti asettaa muisti pinoon.
Yleisö: Mikä on järkeä on käyttää malloc?
SPEAKER 1: Mikä järkeä on käyttää malloc?
Joten näimme joukko esimerkkejä, kuten esimerkiksi käyttämällä swap,
jossa haluamme soveltamisalaan muuttuja olla jotain
ulkopuolella vain sen funktiokutsua.
Ja me haluamme jotain että voimme kulkea ympäri
ja että voimme käyttää eri paikoista.
Siellä me haluaisi laittaa muisti kasaan.
Niin, että kaikki nämä eri toimintoja voi käyttää sitä.
>> Yleisö: Voitko selittää sen?
>> SPEAKER 1: Niin yksi vaihtoehto is-- niin Kysymys oli, voimme vain allocate--
pahoillani, voimme julistaa globaali muuttuja, olennaisesti.
Tämä on yksi vaihtoehto.
Mutta paljon niitä, ne taipumus saada todella sotkuinen.
Ja ajattelemme yleensä ja että huono suunnittelu.
Joo.
Viileä, muita kysymyksiä?
Mahtava.
OK, liikkuvat.
Joten tämä on todella miten me varata muistia.
Olemme puhuneet tästä vähän.
Käytämme tätä toimintoa kutsutaan malloc.
Ja kerrot sen, kuinka monta tavua muisti, niin kuinka monta tavua kasaan,
haluat.
Ja se tulee palauttaa osoitteeseen, joten osoitin, pala muistin
että se on varattu sinulle.
Joten tyyppi tulee olemaan mitätön tähti.
Se tulee olemaan osoitin Mitä ikinä päättää laittaa sinne.
Aina soitat malloc, olemme jo sanoneet
sinun täytyy vapauttaa niin me ei ole muistivuotoja.
>> Mikä muu asia että ehdottomasti
täytyy tehdä joka ikinen kun soitat malloc?
OK, sinun täytyy vapauttaa se.
Mikä on toinen asia?
Tarkista null, kaunis.
Niin, joo, se on oikea siellä ylös pöydällä.
Jos yrittäisi jakaa muistia ja sinulla ei ole muistia jäljellä,
tietokone aikoo sanoa, Minulla ei ole mitään antaa sinulle.
Ja se antaa sinulle takaisin null.
Kysymyksiä että?
Joo.
>> Yleisö: Miksi haluat joskus julistaa osoitin tietyntyyppisiä
kun mitätön tähti voi käsitellä kaikki osoitin tyypit anyways?
SPEAKER 1: Hyvä kysymys.
Miksi sanomme int tähti toisin kuin mitätöidä tähti
kun mitätön tähti voi hoitaa kaiken?
Joten emme halua koskaan nimenomaisesti valettu viitteitä.
Se on vain huono käytäntö.
Mutta me puhumme int tähteä aivan kuten ymmärrystä,
tämä on osoitin kokonaisluku.
>> Yleisö: OK.
>> SPEAKER 1: Joo, ja se mahdollistaa voit muokata arvoja se
kokonaislukuina.
>> Yleisö: Voi, OK.
Ja mitätön tähti ei anna sinun tehdä sitä?
>> SPEAKER 1: Se riippuu yhteydessä Joo, joten älä huoli
älä huoli liikaa minkälaiset siellä.
Juuri tietää, että yleensä, malloc palauttaa osoittimen jotain.
Hyvä kysymys.
>> Yleisö: Miksi kerrot se kertaa 10? [KUULUMATON].
>> SPEAKER 1: Toki, joten olin vain tekee satunnaisia ​​esimerkki tässä, missä
Halusin käyttää riittävästi tilaa tallentaa 10 kokonaislukuja.
Vain satunnainen valinta.
Joo.
Joo, mitä kuuluu?
>> Yleisö: Mitä sinä tarkoittaa tarkistamalla null?
Haluatko tarkistaa osoitin for tai malloc?
SPEAKER 1: Kyllä, tarkalleen.
Joten kysymys oli, mitä me tarkoitamme kurissa null?
Haluamme to-- milloin kutsumme malloc ja olemme palanneet osoitin,
haluamme sanoa, on osoitin yhtä null?
Niin kirjaimellisesti PTR.
On PTR yhtä null.
Kyllä.
Yleisö: Niin, olin kiltti ja ihmettelevät, jos
alustaa osoittimen malloc, ei sen osoittamaan alkuun malloc?
Koska jos se array--
SPEAKER 1: Se on hyvä kysymys.
Joo, jos soitat malloc, osoitin että it-- sanokaamme,
joten tässä me jakaa 10 tavua muistia.
Joten, olen pahoillani, tarpeeksi tilaa 10 kokonaislukuja,
aiomme saada osoitteen että ensimmäinen pala muistia.
Se on hyvä kysymys.
Joo.
>> Yleisö: Allokoimalla 10 laajaa kokonaislukuja,
voisitteko itse käyttää sitä osoittimen like-- lähes
kuin joukko kokonaislukuja?
SPEAKER 1: Joo, niin voitte käyttää sitä joukko kokonaislukuja?
Joo, juuri tämä on mitä Pulak vain osoitimme on-- pari liukuu sitten,
jossa sanomme, OK, tämä on oikeastaan ​​vain sellainen of-- me
voi ajatella sitä joukko 10 kokonaislukuja.
Se vain sattuu olemaan kasaan.
Yleisö: Mutta et voisi käyttää se hakasulku merkintätapa?
SPEAKER 1: Olet itse voi käyttää se hakasulje merkintää, joo.
Voit käsitellä niitä samalla.
Kyllä.
>> Yleisö: Miksi Pointer koskaan olla tyhjä?
>> SPEAKER 1: Miksi Pointer koskaan olla tyhjä?
Jos käytät kaikki ylös muistin kasaan.
Jos ohjelma on syövät, syövät, syövät muistia,
ja ei ole mitään vasemmalle, sitten malloc tulee say-- jos sanot,
Haluan 100 enemmän tavua, se tulee sanoa, minulla ei ole 100 tavua.
Tässä null.
Tämä tarkoittaa, olen epäonnistunut.
Kyllä.
>> Yleisö: Siinä tapauksessa, null ole mitään, eikö?
>> SPEAKER 1: Kyllä, että tapaus, null ole mitään.
Sinulla ei ole osoitetta.
Ei ole muistia.
Hyvä, liikkuvat.
OK, Puhutaanpa todella nopeasti noin puskurin ylivuoto.
Kun me saatamme kohdata puskurin ylivuoto?
Sanotaan meillä a-- me jakaa kimpale muistia,
ja aiomme kirjoittaa merkkijono.
Ja aiomme sanoa, OK, aion jakaa
tarpeeksi tilaa kuusi merkkiä.
Ja aion kysyä käyttäjä panoksensa.
Ja käyttäjä syöttää, esimerkiksi, hei.
Ja joka sopii täydellisesti hieno koska meillä on
tilaa kaikille merkkiä Hei, ja null päättyy merkki.
Paljon tilaa, ei ole ongelma.
>> Mutta mitä jos annamme mahdollisuuden sillä paha käyttäjä voi käyttää meidän ohjelma,
ja he kirjoita ole kuusi merkkiä, tai ei viisi merkkiä, mutta miljoona.
Ne pitävät kirjoittamalla, ja kirjoittamalla, ja kirjoittamalla, mitä tulee tapahtumaan?
No me vain antaa tietokone enough-- tai pahoillani,
me vain antoi tämän merkkijono tilaa 5 merkkiä.
Joten, aiomme saada jotain Tämän, jossa paha henkilö on
kirjoittamalla tulo voi korvata puskurin koko,
ja voi mennä todella ohi määrä että se on alun perin myönnetty.
Ja sitten, mitä voit tehdä, todella paha mitä voit tehdä,
on korvata palautusosoite.
Mikä tarkoittaa periaatteessa sitä voit eräänlainen ottaa
valvonta käyttäytymistä ohjelman.
Niin hyvin korkealla tasolla puskurin ylivuoto on kun
voit jakaa jonkin verran muistia.
Ja sitten sinä-- tätä, koska olet ottaen käyttäjä syöttää tai jotain
kuten that-- ylität rajat mitä olet perin myönnetty
ja aloittaa Messing ohjelma.
Kyllä?
>> Yleisö: Miksi ei, että vain palata segmentointi vika?
>> SPEAKER 1: Miksi ei, että palata segmentointi vika?
Se voisi.
Joskus kääntäjä tai aikana joku runtime
on todella menossa tarkistaa, että.
Jos tiettyjä asioita tapahtuu, ja tämä on tavallaan alemman tason,
sinun täytyy tietää.
Mutta jos et suunnitella Näiden järjestelmien oikein,
niin sinulla on mahdollisuus ja ei kiinni sitä ja vain
jolloin tietokone take-- pahalle hallita tietokonettasi.
Joo.
>> Yleisö: [äänetön]?
SPEAKER 1: Toki.
Voi, kun sanon puskuri, minä vain tarkoitan muistin määrää, että olet varattu.
Joten tässä minä sanoin, OH, olemme myönnetty kuusi char-- tarpeeksi tilaa kuusi merkkiä.
Ja minä vain soittaa, että minun puskuri jossa voisin kirjoittaa tietoa.
Joo.
Muita kysymyksiä tästä?
Joo.
>> Yleisö: Miten se pysäytetään?
Miten lopettaa sen?
SPEAKER 1: Awesome kysymys.
Miten lopettaa sen?
Miten voit estää puskurin ylivuodon?
No yksi tapa tehdä se on jotain GetString, jossa jatkuvasti lisätä
muistin määrää myönnämme jos käyttäjä syöttää paljon tekstiä.
Toinen asia on, jos vain haluavat kuusi merkkiä, tehdä nopeasti tarkistaa.
Sano vain syöttää kuusi merkkiä.
Joo.
Joten sanoa olit työskentelevät on-- aiomme
mennä web tavaraa hieman myöhemmin course-- mutta katsotaanpa
sanoa olet työskennellyt lomakkeella, olisit vain raja kuinka paljon voisi luovutettava.
Joo.
>> Yleisö: GetString vetää muisti pino, eikö?
Vain selventää?
SPEAKER 1: Vielä kerran?
Yleisö: Onko GetString ottaa muisti pinosta?
SPEAKER 1: Uskon Getm-- get int vie muisti kasaan
koska se vaatii alloc.
Yleisö: Oh.
OK.
SPEAKER 1: Joo, malloc ja realloc.
Muita kysymyksiä?
Joo.
>> Yleisö: So määrittelemällä koko puskuroinnin,
voit estää joku että voimme pistää koodi
että voi liukua ohi [kuultavissa].
>> SPEAKER 1: Niin, määrittelemällä puskurin koko,
olet sanonut, OK tässä miten paljon muistia voimme käyttää.
Jos avulla käyttäjä voi kirjoittaa sen yli, sitten aiot törmätä ongelmiin.
Käydä järkeen.
Mahtava.
Siirrytään pitkin.
Selvä.
Puhuminen virheitä, tässä on joitakin yhteisiä virheilmoituksia
että ehkä saapunut kun olit koodaus, työskentelevät ongelman sarjaa.
Hyvin mahdollista, että yksi nämä näkyy päälle tietokilpailu
jos viime vuosina on viitteitä.
Joten, vastaukset ovat eräänlainen tänne taululle.
Mutta voit huutaa lisää.
>> Miksi voisi segmentointi vika tapahtuu?
Miksi saattaa saat segmentointi vika kun olet suorittaa ohjelma?
>> Yleisö: [äänetön].
>> SPEAKER 1: Hyvä.
Joo, jos yritämme pääsy muisti, joka ei ole antanut meille.
Jos me dereference nollaosoittimen.
Esimerkiksi, jos me kutsumme malloc, ja unohda tarkistaa, jos se on nolla,
ja me vain kokeilla sitä, tietokoneen aio antaa meille segmentointi vika.
Hyvä.
Entä implisiittinen ilmoitus toimii?
Mitä se tarkoittaa?
Yleisö: Yrität käyttää toiminto että et ole määrittänyt.
SPEAKER 1: Hyvä.
Yrität käyttää toimintoa että et ole määrittänyt.
Jotta voisi olla yksi kaksi asiaa.
Ehkä se oli kuin esimerkki Camille osoitimme aiemmin.
Ja sinulla on päätehtävä joka vaatii jotain kutsutaan kuutio.
Ja sanokaamme unohdit kirjoittaa tämän prototyyppi.
Unohdit sanoa, hei tietokone, Minulla on tämä toiminto nimeltään kuutio.
Näet sen myöhemmin.
Sanotaan unohdit kirjoittaa prototyyppi, saatat saada tämän virheen.
Toinen asia on, sanokaamme yritit käyttää printf,
ja unohdin sisällyttää standardin kirjasto,
sitten se tulee sanoa implisiittinen ilmoitus toiminto.
Ja viimeisenä, mutta ei vähäisimpänä, pimeän tunniste.
Joo.
>> Yleisö: Sinulla ongelma soveltamisala.
Kuten ehkä yrität soittaa paikallinen muuttuja, joka on
eri eräänlainen alueen.
SPEAKER 1: Suuri, joten jos sinulla on muuttuja, joka ei ole laajuudeltaan,
ja yrität käyttää sitä, olet menossa saada pulassa.
Ja vain yleisemmin, sanokaamme yrität käyttää X, alati sanoen int
X vastaa 5, niin olet menossa joutua vaikeuksiin.
Anteeksi, kysymyksiä tästä?
Mahtava, chugging varrella.
>> OK, rekursio, miksi might-- katsotaanpa see-- Menetin sch-- oh tässä sitä mennään,
Varmista vain, että olemme suunnilleen aikataulussa.
Hyvä, viileä.
OK, rekursio, yleinen ajatus of rekursio, rekursiivinen funktio
on toiminto, joka kutsuu itseään.
OK, joten se mitä minä tarkoittaa ohjelman käsite
jolloin toiminto kutsuu itseään.
Mikä olisi some-- mitä hyvä syy käyttää rekursion?
Kun se voisi olla hyödyllistä?
Tai whats ohjelma, joka todella omiaan rekursio?
>> Yleisö: Binary haku.
>> SPEAKER 1: Binary haku omiaan rekursio,
koska sinulla on tämä ongelma, että te voi hajottaa pienemmiksi paloiksi,
ja jatkuvasti suorittaa samaa algoritmia sitä.
Tämä johtaa monissa tapauksissa enemmän tyylikäs koodi, joka on tarkempi.
Me vain olemme esimerkki binary haku.
Toinen esimerkki on yhdistää lajitella.
Joskus, kun ajattelee algoritmi, kuten kertoma,
se vain tuntuu rekursiivinen, eikö?
Koska tiedämme, että kertoman 5 on factorial 4 kertaa 5.
Ja niin kun asetat ongelma että tapa, se vain tuntuu rekursiivinen.
Jotta olisi loistava tapa kirjoittaa se.
Kysymyksiä?
Kyllä.
>> Yleisö: Mikä perustapaus?
>> SPEAKER 1: Voi mitä perustapaus?
Sanoin, älä unohda sisällyttää perustapaus.
Sanotaan olivat kirjallisesti kertoma toiminnon,
ja teemme kertoma 5.
Ja me tiedämme kertoma 5 on 5 kertaa kertoma 4,
blaa, blaa, blaa, blaa.
Kuinka me tiedämme, milloin lopettaa?
Mistä tiedämme, että me oikeastaan ​​numero?
Koska jos me pidetään kutsuvan kertoma, emme koskaan saa vastausta, eikö?
Joten kun me tiedämme, miten pysähtyä esimerkiksi kertoma.
Kuka tahansa, joo.
>> Yleisö: Kun 1 kertoma on 1.
SPEAKER 1: Hyvä.
Joten me tiedämme.
Voimme itsestään selvänä, että 1 kertoma on 1.
Joten jos saamme siihen pisteeseen, jossa me soitat kertoma 1,
vain mennä eteenpäin ja palata 1.
Ja se on teidän perustapaus.
Koska tiedämme, kun olemme osuma että, ja me aina osuu, että me never--
emme vain jatka ikuisesti.
Muita kysymyksiä rekursio?
Kyllä.
>> Yleisö: Joten kun palaat 1, se vain automaattisesti
lopettaa ohjelman, eikö?
>> SPEAKER 1: Joo niin kun soittaa paluu 1, if-- sanokaamme,
sanokaamme kertoma 2 puhelujen kertoma 1, kertoma 1
vain käsi takaisin 1.
Ja nyt kertoma 2 sanoo OK, 2 kertaa 1 on 2, ja palata että vastaus.
Kyllä.
>> Yleisö: Onko meillä huolehtia noin soveltamisalaa recursion
kun mennä algoritmi?
>> SPEAKER 1: Ah, kyllä.
Kyllä, sinun tarvitse huolehtia laajuus yhteydessä rekursion.
Joten vain määrittämiä että ajon toiminto
tulevat olemaan hyödyllinen.
Joo hyvä kysymys.
Selvä, nyt pitää liikkuvat pitkin.
Koska meillä on paljon materiaali päästä läpi.
Mutta kuten sanoin, rohkeasti osuma virka, tai meille jälkikäteen.
>> Tämä on vain todella nopeasti liukumäki.
Opimme paljon hakuja ja lajittelee.
Ole hyvä, kiltti, kiltti, nämä osat ovat verkossa,
Uskon klo cs50.net/quizzes.
Joten mene tätä kaavio ja laita se oma mielipiteesi levyt,
koska siellä on kysymys tästä.
Älkää ymmärtäkö väärin.
Vain hyvin nopeasti, mitä tämä kaavio tarkoittaa,
on se puhuu Big O, jonka tiedämme olla yläraja algoritmien
käyntiaika.
Ja meillä on Omega, joka on olemaan alaraja
ja algoritmien runtime.
OK?
>> Yleisö: [äänetön].
>> SPEAKER 1: Joo, mitä viimeinen asia?
Mikä theta?
Se on, jos we-- olemme vain menossa välitä tässä luokassa tapauksessa
jossa meidän ylärajaa ja meidän alaraja ovat samat.
Joo, se on ainoa kerta, kun se on menossa keksiä tässä luokassa.
OK, aion jatkaa.
Jos et ole ottanut kuvan, Lupaan nämä on verkossa.
>> OK, mahtava, tietueet.
Miksi ehkä haluamme structs?
Mikä hyödyllinen syy saatamme haluta structs.
Joku huutaa jotain.
No katsokaamme Esimerkiksi taululle.
Sanotaan olemme tekemisissä kaikki nämä opiskelijat.
Jos Teemme ohjelmaa CS50, on kuin 800 henkilöä.
Meidän on write-- aiomme täytyy käsitellä paljon tietoa
opiskelijoista.
Olisi mukavaa, jos voisimme sellainen ryhmä
this-- kaikki tiedot, jotka liittyy oppilaan
yhdeksi tietotyyppi.
Mutta me tiedämme, ei ole tietoja tyyppi kutsutaan, opiskelija, eikö?
Meillä on kokonaisluku, meillä kellua, meillä merkkijono, tai char tähti,
mutta meillä ei ole, opiskelija.
>> Joten voimme tehdä on oikeastaan ​​eräänlainen määritellä oma rakenne, kutsuvat sitä opiskelija,
ja voimme liittää joitakin eri alojen kanssa struct.
Joten tässä tapauksessa, katsotaanpa että meillä on opiskelija.
Ja asioita, joita välitämme Tietoja ovat opiskelijakortti numero
ja opiskelijan nimi.
Ja nyt voimme liittää tämän ID ja tämä nimi tietyllä opiskelija.
Katsotaanpa esimerkkejä.
>> OK, joten tässä sanon, OK, katsotaanpa että haluamme tehdä opiskelija.
Kutsun häntä opiskelija 1.
Ja hänen henkilötunnus, vuonna Tällöin voimme käyttää
tekemällä ihan opiskelijan nimi piste kentän haluamme päästä.
Joten tämä tulee vain olla opiskelija 1 piste tunnus, ja me aseta se on 1.
Koska muistaa, sanoimme, että Tunnus tulee olemaan kokonaisluku.
Ja hyvin samalla tavalla, voimme sanoa, tämä opiskelijan nimi tulee olemaan Davin,
esimerkiksi.
Joten voimme vain käyttää alalla of struct tällä piste.
Kysymyksiä että?
Joo.
>> Yleisö: Onko mitään keinoa suojaamaan muuttujia?
Onko mitään keinoa suojella muuttujiin olemasta ulkoisesti näytetty?
>> SPEAKER 1: Onko kuitenkin suojata muuttujat
olemasta ulkoisesti näytetty?
Ei soveltamisalaan CS50.
Muita kysymyksiä?
Joo.
>> Yleisö: Mikä on typedef struct?
Mitä jokaisen komponentin tarkoittaa?
SPEAKER 1: Ah, mikä on typedef struct?
Mitä jokainen komponentti tarkoittaa tämän kaveri?
>> Yleisö: Joo.
>> SPEAKER 1: OK, viileä.
Joten tämä sanoo, hei tietokone, I haluat luoda uuden rakenteen.
Ja aion määritellä määritelmä sitä, niin että voisin käyttää sitä
ikään kuin se olisi tyyppi koko minun ohjelma.
OK, joten haluan määritellä rakenne.
Ja olen nyt olemaan osaa käyttää sitä tyyppiä.
Ja sen nimi on opiskelija.
Ja tässä ovat sen aloilla.
>> Yleisö: Niin on, että typedef struct [äänetön]?
SPEAKER 1: Jos haluat pystyä käyttää struct koko ohjelma,
ja useimmissa tapauksissa CS50 me tehdä, meidän on sanottava tyyppi Def.
Ja jonka avulla se voi käyttää sitä samaa että käytämme kuten int tai kellua.
Tietokone aina tiedä, mitä se on.
Joo.
>> Yleisö: Voimmeko kirjoittaa tämä otsikossa tiedoston?
>> SPEAKER 1: Anteeksi.
Älä kirjoitamme tätä otsikkotiedosto?
Voisit kirjoittaa tämän yläosassa teidän ohjelma, yläosassa oman C-ohjelma.
Joo, se olisi kaikkein kohtuullinen paikka se.
Takaisin sinne.
Yleisö: sama kysymys, joten ennen tärkein?
SPEAKER 1: Oikea, tarvitset tämän olevan jostain, että jokainen voi käyttää sitä.
Joten ennen tärkein teidän tapauksessa, joo.
Yleisö: Onko eroa laskemisesta opiskelija päälle ja pohjassa?
SPEAKER 1: Ah, on olemassa ero laskemisesta opiskelija
päälle tai pohjassa?
Let-- paitsi että kysymys, ja kun pääsemme liittyvät luettelot,
näemme että, OK?
Niin pitää kiinni, että yhden sekunnin.
Viimeinen asia, jonka haluan mainita tässä, on sen sijaan, että rakenne,
meillä on osoitin rakenteen, voimme muuttaa merkintätapa
olla hieman mukavampaa.
>> Voimme sanoa, sanokaamme meillä Osoitin opiskelija eikä vain
opiskelija.
Jos haluamme saada kentän sijaan doing, hyvin mennä epäviittausongelman osoitin,
ja sitten käyttää kentän nimi.
Tämä merkintätapa näyttää hieman sotkuinen kanssa tähdittävät piste.
Täysin oikea, mutta jollaisia puhtaamman tapa tehdä se,
on vain sanoa osoitin nuoli nimi.
Ja että itse asiassa yhdistää dereferencing ja päästä yhdessä kaunis symboli.
Kysymyksiä että?
>> Yleisö: Vain sanoa, että vielä kerran.
>> SPEAKER 1: Sano että vielä kerran.
>> Yleisö: Mitä sanoit.
SPEAKER 1: Toki, täsmälleen mitä juuri sanoin.
Jos meillä on osoitin opiskelija pikemminkin kuin opiskelija itse,
me can-- yksi tapa, että voimme käyttää kenttä on dereference sitä, ja sitten
pääsy nimi.
Toinen, mukavampi tapa me voi tehdä sen, mikä on vain
hieman syntaktisen sokeria, on vain tehdä osoitin nuoli nimi.
Ja joka tulee yhdistää dereferencing ja päästä sisään.
Joo, aika siistiä.
Selvä.
>> Joten Puhutaanpa toinen kysymys.
Katsotaanpa hypätä solmuja, joka aiomme käyttää
linkitetään luetellaan vain toinen.
Joten tässä, huomaat että siellä on sana solmu sekä pohjassa,
ja päällä.
Ennen, kun olimme määritellään opiskelija, meillä oli vain opiskelija pohjassa.
Meillä ei ollut opiskelija päällä.
Jokainen tietää mahdollinen syy?
Mikä ero on?
Joo.
Yleisö: Eli käytät solmu on määritelmä solmun,
joten se on rekursiivinen juttu?
SPEAKER 1: Hyvä.
Joo, meidän meidän solmut on osoitin muihin solmuihin.
Joten koska käytämme tämän tyyppistä ennen kuin se on todella määritelty,
meidän täytyy laittaa sen yläosassa juuri niin se tietää, mitä se on.
Yleisö: Joten me vielä tarvitset sitä alareunassa?
SPEAKER 1: Kyllä.
Yleisö: Niin aina alareunassa.
SPEAKER 1: aina alareunassa.
Joten kaikki sinun tulee on se alareunassa.
Muita kysymyksiä?
Selvä, niin antaa todella puhua noin linkitettyjen listojen todella nopeasti.
Joten linkitettyjen listojen are-- käytämme niitä sen sijaan, että taulukot joissakin tapauksissa,
koska tiedämme, että paneelit ovat kiinteä pituus, kun taas linkitettyjen listojen
voimme kasvaa ja kutistua kuin haluamme.
Joten tämä on esimerkki siitä, mitä linkitetty lista voisi näyttää.
Mitä meidän täytyy nähdä on johtaja luettelon.
Joten jos luettelo alkaa.
Ja sitten hän solmu, kukin myöhempi solmu, on
vastuussa tietää jos seuraava solmu on.
Joten tässä tapauksessa, solmu, joka tallentaa 1 vastaa tietää missä 3.
Henkilö, joka tallentaa 3 vastuussa tietäen jossa 9 on.
Ja 9 ei ole kukaan muu osoittamaan.
Se on listan loppuun, niin se vain sanoo null.
OK?
>> Yleisö: Mitä järkeä tämän?
>> SPEAKER 1: Mitä järkeä tämän?
>> Yleisö: Joo.
SPEAKER 1: Koska, katsotaanpa sanoa, että meillä on joitakin tietoja.
Ja emme tiedä tarkalleen, kuinka paljon tietoa haluamme etuajassa.
Joten array, sanokaamme jossa haluat laskea ihmiset ensimmäisessä rivissä.
Mahdollisuudet ovat se ei tule muuttaa.
Voimme vain sanoa, OK, minä haluavat taulukon koko kuusi.
Mutta jos haluamme jotain että tulee muuttumaan.
>> Esimerkiksi, sanokaamme Yritin seurata opiskelijoiden
kun he tulevat huoneeseen Tarkastelun istuntoa.
Minulla ei ole aavistustakaan, kuinka moni teistä ihmiset ovat menossa näy.
Joten en ehkä tietorakenne että voin laajentaa ja kutistua.
Koska ehkä joku jättää, ehkä joku tulee.
Ja niin milloin tahansa, me voi lisätä tai poistaa solmuja.
Cool, suuri kysymys.
Joo.
>> Yleisö: Jos et voi käyttää jotain GetString
joka pitää kerroit saat enemmän tietoja kuin tarvitset sitä, miksi tarvitset tätä liian?
>> SPEAKER 1: Miksi Käytätkö linkitetty lista, kun
voit käyttää jotain GetString?
Se on hyvä kysymys.
Muista, että Get-- yksi downfalls GetString
on, että emme tehneet hyvin hyvää työtä vapauttaa että muisti,
ja otimme käyttöön joukko muisti vuotaa ohjelmasi?
Voisit ottaa sen staattisesti kokoinen joukko ja ne kasvavat sitä.
Mutta sinun täytyy löytää uusia paikkoja muistiin.
Se olisi vain paljon yläpuolella.
>> Yksi mukavia asioita liittyy luettelot toisin kuin paneelit, on taulukot
ovat kaikki samassa paikassa muistiin.
Sen täytyy olla jatkuva paloina muisti.
Kun taas linkitettyjen listojen, 2 ja 3 täysin eri paikoissa.
Kuten 2 on täällä, ja 3 on täällä.
Ja niin kauan kuin he ovat osoitin toisiinsa, se on hieno.
Me tiedämme, että voimme löytää ne.
Kysymys tuolla?
>> Yleisö: GetString on funktio vuonna CS50 kirjastossa, eikö?
Se ei ole olemassa todellisia ohjelmia.
>> SPEAKER 1: Oikein.
Oikea, se on toinen asia.
GetString ei ole olemassa ulkopuolella yhteydessä CS50.
Joo.
>> Yleisö: Joten ei se, että kaksi voisi olla todella kaukana toisistaan,
tekee sen vaikutus tehokkuus päästä elementit listalla?
SPEAKER 1: Tämä on suuri kysymys.
Kysymys oli, tekee sen vaikutus tehokkuus päästä
nämä eri tekijät luettelossa.
Oikeastaan ​​kyllä.
Koska tiedämme if-- katsotaanpa että haluamme päästä
toinen elementti array, tiedämme voimme vain tehdä array kannatin 1, oikea.
Se on aina menossa olla samassa paikassa.
Mutta jos haluamme päästä, että 3, emme voi vain sanoa, mene saada että 3.
Meidän on sanottava, OK, aloita listan alkuun,
ja nyt meillä on todellakin kulkea kunnes
löytää numero olemme kiinnostuneita.
>> Joten tässä tapauksessa sanomme, OK tämä on ensimmäinen numero.
Niin olennaisesti, että indeksi 0.
Nyt meidän on löydettävä toinen numero.
Se on indeksi 1.
Niin että on todella menossa to-- vain pääsy, vie N aikaa.
Viileä, iso vanha N. Joo.
>> Yleisö: Mitä kukin lista?
Ovatko he kukin paneelit, vai mitä?
SPEAKER 1: Se on hyvä kysymys.
Mitkä ovat kukin rakenteet, jotka olen tehnyt?
Ne ovat solmuja.
Joten jokainen näistä pienistä rakenne on kaksi osaa.
Se on kokonaisluku, joka pitää.
Se todelliset tiedot että se pitää kiinni.
Se on sellainen hyödyllinen osa.
Ja, tämä on mitä tekee linkitetty lista,
se on osoitin seuraavaan solmuun.
Mahtava kysymys.
Selvä, joten katsotaanpa hyvin nopeasti tarkastella joitakin esimerkkejä siitä, mitä
voisimme tehdä linkitettyjen listojen.
>> Joten erittäin nopea esimerkki on, Oletetaan haluamme tehdä haun.
Millaisia ​​hakutoiminto teemme linkitettyjen listojen?
>> Yleisö: Binary.
>> SPEAKER 1: Binary.
Miksi emme voi käyttää binary haku?
>> Yleisö: [äänetön].
SPEAKER 1: Oikea, koska binary haku, jouduimme vedota siihen
että voisimme vain hypätä array milloin tahansa.
Voisimme vain sanoa, go keskelle elementtiä.
Kanssa täällä, kuten sanoimme hieman aikaisemmin,
emme voi vain hypätä keskimmäinen elementti.
Jotta löytää mitään elementti, me oikeastaan
täytyy kävellä läpi koko lista.
>> Joten jos halusimme tehdä haun, parasta mitä voimme tehdä on vain lineaarinen haku.
Aloitamme kärjessä, me check-- Sanotaan olemme
etsivät 9-- aloitamme kärjessä.
Sanomme, on tämä 9?
Ei.
Onko tämä 9?
Ei.
Onko tämä 9?
Kyllä, löysimme sen.
OK, siinä kaikki, että.
Tässä hieman pseudo-koodin.
Aion jättää tämän sinulle kaverit vaihtuvuus yli oman,
vain koska olemme käynnissä hieman vähän aikaa.
>> Lets puhua paikoilleen.
Näimme todella cool demo tämä luento jossa sanoimme,
OK, meillä on tämä linkitetty lista, jossa jokainen on osoittaa toisiinsa,
ja joku tulee lavalle.
Miten lisäämme että henkilö meidän linkitetty lista?
No, väärä tapa tehdä, joka on mielestäni mitä näimme ensin,
on, kun henkilö edessä automaattisesti
osoitti uuden henkilön.
Ja sitten me tavallaan hylätty jälkipuoliskolla luettelon, eikö?
Koska emme tiedä missä se on muistissa enää.
Joten olla erittäin varovainen järjestystä, jossa lisäämme asioita.
>> Joten tässä, sanokaamme haluamme siirrä 1 edessä listallamme.
Ensinnäkin, meillä on 1 piste Toinen element-- tai elementti
joka sisältää 1.
Niin, teemme sen, juuri niin emme ole menossa menettää jälkipuoliskolla.
Ja nyt, meillä voi olla pää kohta 1.
Joten jälleen, tämä on vain kuten Super korkealla tasolla.
Näin me lisättäisiin solmu.
Meillä on paljon pseudo-koodi here-- pahoillani,
En tiedä, miksi olen kutsuen sitä pseudo-koodi.
Se on todellinen koodi.
Voit mennä tarkistaa sitä myöhemmin.
>> Selvä, nyt hyvin quickly-- kysyttävää
Satunnainen luetteloihin ennen kuin Siirrä päälle pari muita tietoja
rakenteet meidän viimeiset 10 minuuttia.
>> Yleisö: Pitääkö meidän nyt miten kirjoittaa se testi?
>> SPEAKER 1: Tarvitsemmeko tietää miten to--
>> Yleisö: Kirjoita se testi.
>> SPEAKER 1: Me tarvitsemme to-- sinun pitäisi olla valmis
kirjoittaa, lisätä, poistaa, ja etsi linkitettyjen listojen testi.
Tämä on jotain, että me voisi odottaa sinun tekevän.
Vain mennä sen yli.
Jos sinulla on kysyttävää koodi, ampua TF sähköpostia,
tullut virka.
Vielä paljon aikaa opiskelemaan, ei hätää.
Selvä, kaikki muut kysyttävää liittyvät luettelot?
Kyllä.
>> Yleisö: Joten jos et käytä osoitin mennä toinen oikealla
ennen kuin käytät osoitin toinen vasemmalla, joka on
vastaa poistaminen kaiken, eikö?
SPEAKER 1: Joo.
Yleisö: [äänetön].
SPEAKER 1: Oikea, koska emme voi saada se, se on oikeastaan ​​vielä pahempaa.
Koska me emme vain tiedä missä se on, emme voi enää käyttää sitä,
mutta we've-- emme ole vapauttaa että muisti enää.
Joten se on vain hengailu eikä olla hyödyllinen, koska emme voi löytää sitä.
Joo, viileä kysymys.
>> Selvä, puhutaanpa pinot.
Näimme pinot hyvin nopeasti.
Ne ovat ensimmäinen viimeinen ulos tietorakenteita.
Joten ajattelemme pinot Annenberg tarjottimia jossa pino asioita päälle.
Ja jos aiot hakemaan tarjotin, olet
aina menossa ottamaan yksi alkuun, joka on kaikkein recently--
joka on mitä meidän eniten äskettäin laittaa päälle pinon.
Voit siis sellaista ajatella tällaista visuaalinen kun olet ajatellut pinot.
Ja sitten, olemme piipahti jotain päältä pinon.
>> Jos me are-- oh, ja sanat, jotka me käyttää, kun puhumme nämä tiedot
rakenteet on yleensä, jos laittaa jotain pinoon,
sanomme me työntämällä sitä pinoon.
Ja jos otamme jotain pinosta, sanomme me popping pinosta.
Jos aiot toteuttaa stack-- joka Olen ehdottomasti
Suosittelen yrität out-- olet menossa haluavat seurata,
sanokaamme käytät array.
Tiedän luento puhuimme Tietoja käytetään sekä paneelit
tai linkitettyjen listojen toteuttaa pino.
Jos käytät array, sinun täytyy keep--
tekosyy me-- meidän täytyy seurata koon ja kapasiteetin.
Joten enimmäismäärä että pino mahtuu.
Kysymyksiä pinot?
>> Yleisö: Mitä eroa välillä koko ja kapasiteetti?
SPEAKER 1: ero koko ja kapasiteetti, mahtava kysymys.
Joten sanokaamme olemme käyttämällä erilaisia, ja me
käyttää riittävästi tilaa 10 kokonaislukuja.
Ja alamme täyttää että jopa.
Ja me push asioita, ja me pop asiat pois.
Haluamme seurata enintään numero voimme pitää, että kapasiteetti.
Ja haluamme seurata nykyinen määrä meillä on, se on koko.
Hyvä kysymys.
Mitään muuta pinot?
Hyvä on, jutellaan noin yllätys, jonoja.
>> Toisin pinot, jotka ovat ensin viimeksi ulos, nämä ovat first in, first out.
Joten tämä on like-- ajatella linjaa.
Ajattele riviin Apple Myymälä saada mitä tuote.
Ja ensimmäinen henkilö linjassa pitäisi on ensimmäinen henkilö, joka on auttanut.
Niin ensimmäinen asia, joka työnnetään on tämä ensimmäinen asia, joka piipahti.
Viileä?
Erittäin similarly-- oh, sanoja käytämme sijasta push ja pop--
joka Käytin, Olen sorry-- on sanomme,
jos me laitamme jotain osaksi jono, sanomme enqueued sitä.
Jos otamme jotain jono, sanomme dequeued.
Se.
I voidaan lausumalla ne väärässä, mutta saat ajatus.
Ja sitten taas, kuten pinoja, jos me täytäntöönpanossa kuten array,
meidän täytyy seurata koko, kapasiteetti, ja pää.
Mitä tarkoitan pää?
Miksi meidän täytyy pitää kirjaa pään?
>> Yleisö: Koska se on silloin, alkuun listasi on.
SPEAKER 1: Joo, pohjimmiltaan pää on jossa alussa meidän jono on.
Koska tiedämme, toisin kuin pinoja, which-- Aion yrittää vastata tähän way--
me tiedämme, että se on aina menossa kutistua tällä tavalla ja kasvaa tällä tavalla.
Jonot, ihmiset tulevat päälle loppuun ja jätä alusta alkaen,
joten meidän täytyy seurata missä alku on.
Sitä minä tarkoitan meidän seurata missä pää on.
Viileä?
Selvä.
Kahdeksan minuuttia, pari Lisää aiheita, voimme tehdä sen.
>> Selvä, tiiviste.
Puhuimme hyvin lyhyesti noin hash taulukoita.
Varten tietokilpailu, sinun tarvitsee vain ymmärtää ne korkealla tasolla.
Perusajatuksena on sinulla on nämä tiedot.
Ja haluamme käyttää sitä ajoissa, joka on nopeammin kuin jotain liittyy
lista.
Koska me sanoi, jos olisimme hakuja linkitetty lista,
että voisi N aikaa.
Jopa pääsy voi kestää N kertaa linkitetty lista.
Hash taulukot antavat meille niin, että voimme nopeammin saada asioita, ja lisää
nopeasti etsiä asioita, ilman joilla rajoitukset array
jossa on kiinteä koko.
>> Joten ajattelemme tietorakenne jossa, jossa laitamme sen tietorakenteen
on riippuvainen tästä maaginen tiivistefunktio.
Joten tässä tapauksessa, maaginen hash toiminto on vain ottaa sana,
tarkkailun mitä ensimmäinen kirjain on, ja sitten vain lajittelu aakkosjärjestyksessä.
Joten me oleellisesti laittaa ne eri kauhat.
Kun näemme banaani, sanomme, OK, nyt laittaa B ämpäri.
Kun näemme Apple, katsotaanpa laita se ämpäri.
Jos näimme aprikoosi, katsotaanpa laittaa ämpäri.
OK?
>> Joten kai olisin etsimässä for-- I eivät tiedä, mitä toinen hedelmiä?
Oletetaan Etsin oranssi.
Jos minun pitäisi näyttää?
Ö ämpäri.
Joo, on olemassa vain yksi paikka että oranssi voisi olla, OK?
Sanoin aiemmin, mitä tapahtuu if-- hyvin aiemmin sanoin,
sanokaamme laitamme aprikoosi in-- mutta minä todella käsitellä että, Voi ei,
jos olisin laittaa marja, se on menossa ristiriidassa banaani.
Jos laitamme sen, jos on olemassa jo jotain meidän taulukossa?
No, meillä on pari vaihtoehtoa.
>> Vaihtoehto numero yksi on lineaarinen hyvää, mikä tarkoittaa periaatteessa sitä,
sanokaamme Haluan yrittää laittaa marja, ja näen, Voi ei,
banaanit jo siellä, Olen vain sanoa kunnossa, anna
minua etsimään seuraavan saatavilla paikalla.
Joten kävelen, minä sanon, OH, siellä mitään D ämpäri.
En todellakaan voi ajatella mitään hedelmiä jotka alkavat kirjaimella D,
joten olen juuri menossa laittaa marja siellä.
Durian.
OK, joten koska ei ole mitään siellä vielä,
Voisin yhtä hyvin käyttää sitä paikalla.
Mikä haitta, että?
>> Yleisö: Se on epäkunnossa.
>> SPEAKER 1: Anteeksi?
Yleisö: Se on epäkunnossa.
>> SPEAKER 1: Se on out-- oikea, saatamme päätyä
asioita, jotka eivät ole in-- tallennettu kauhat tavalla
että odotamme niiden olevan.
Joten jos me etsivät marjastus, ennen sanoimme,
oh voimme katsoa yhdessä ämpäri.
Se voisi olla vain yksi ämpäri.
Mutta nyt, todella, se voisi olla kaikissa kauhat, eikö?
>> OK, tässä on toinen vaihtoehto, erillinen chaining--
joka on ajatus siitä, että olemme menossa käyttää hieman myöhemmin P asetettu 5.
Pikemminkin kuin vain yhden tilan kussakin ämpäri,
miksi emme ole kunkin ämpäri olla osoitin linkitetty lista?
Jos sanomme, OK, on ​​ämpäri kaikesta joka alkaa A.
Ja siellä on juuri menossa on linkitetty Luettelo hedelmät, jotka alkavat A.
Joten jos saamme uuden hedelmä, sanokaamme me get-- me avokado, meillä on omena,
Sanotaan saamme aprikoosi, kuinka voisimme laittaa luettelossa?
No olimme mennä koriin 0, ja haluamme vain aseta se meidän piti luettelossa,
helppoa kuin mikä.
>> Nyt minä pitää sanoa ämpäri.
Voisimme toteuttaa tämän useilla tavoilla.
Yksi tyypillinen tapa, että tämä Tällainen kuva viittaa,
on ehkä ottaa joukko osoittimia liittyvät luettelot.
Se on yksi tapa voimme toteuttaa hash table.
Yleisö: Olisiko tarvitset toisen luettelosta, koska banaani ja marja ovat poissa
tilauksen?
SPEAKER 1: Voisitko need-- ah, voisitteko
on toinen lista, koska banaani ja marja ovat epäkunnossa?
Tässä tapauksessa meidän hajautusfunktio, joka kertoo meille, mihin asiat
ei välitä toinen kirjain.
Se ei välitä alphabetizing, se vain välitä ensimmäinen kirjain.
Kysymys?
>> YLEISÖ: Mikä on määritelmä, joka toiminto, ja mitä se näyttää?
SPEAKER 1: Ah, hyvä.
OK, joten emme tarvitse huolehdi liikaa tämän tietovisan.
Joten en laita diat.
Aiomme ottaa käyttöön sen P: lle 5.
Mutta pohjimmiltaan, se sanoo, koska uusi elementti, jos minun pitäisi laittaa se?
Tai, sanokaamme Etsin elementti, jossa se voisi olla?
Joo, suuri kysymys.
>> OK, hyvin nopeasti, puita ja yrittää.
Joten puu on juuri minkäänlaista järjestäytyneen tietorakenne.
Ja aiomme nähdä paljon kuvia jotka tekevät tämän erittäin selväksi.
Ja trie, joka näimme luokassa, on hyvin erikoinen puu
että pohjimmiltaan toimii kuten monitasoinen tiiviste.
Se on super cool.
Aiomme nähdä sen vain sekunnin.
Selvä, joten katsotaanpa puhua puita ensin.
Joten tämä on todella tyypillinen esimerkki puu, jossa meillä on hierarkia.
Näet, että yksi on hyvin alkuun, eikö?
Ja voin sanoa alkuun koska siellä selvästi tilaus, koska me
nämä nuolet menossa alaspäin.
Niin että, asia huipulla, Pyydän, että juurisolmu.
Joten yksi on juuri solmu.
Ja asiat alareunassa, joilla ei ole mitään irtoamassa,
Sanon nämä ovat lehtisolmut.
Joten 8,9 5, 6, 7, OK.
Ja yleensä terminologia me voi sanoa on, 1 on 3: n vanhempi.
Joten se on asia, joka tulee tason yläpuolella, ja pisteitä sen.
Ja 3 on 1 lapsi.
Se on asia, joka 1 pistettä.
Kysymys?
>> Yleisö: Voitko palata Edellinen dia, kiitos?
>> SPEAKER 1: Voinko mennä takaisin edelliseen diaan?
Kaikin mokomin.
Kysymyksiä tähän?
Tai et vain halunnut katsoa sitä?
Yleisö: En vain saada läpi.
>> SPEAKER 1: OK, viileä, joo.
Nämä ovat kaikki verkossa, joten ei pelätä jokaista sanaa.
Ja edun mukaista aika, aion mennä.
Onko se ok?
Mahtava.
OK, viileä.
Joten puhua hyvin erityinen kind--
joten meillä on näiden yleisten rakenne puiden,
joka on vain jotain, joka antaa meille sellaista listalla asioita hierarkkisesti.
>> Binary puut ovat asioita, joissa jokainen solmu on korkeintaan kaksi lasta.
OK?
Ja minä sanoin, OK, niin että näyttää sopimaan tähän kuvaukseen.
Sanoin solmu, ei binäärihakupuu.
Mikä binäärihakupuu?
Se on järjestetty.
Niin tiedät, että binäärihakupuu,
kaiken tree-- kaiken solmuihin vasemmalla on pienempi,
ja kaiken solmut oikeus on suurempi.
Joten tämä ei ole binäärihakupuu.
Tämä on vain binääripuu.
Joten meillä on suuri luokka puita, hieman pienempi kategoria
binary puita, haku a-- binäärihakupuu puita.
Viileä?
Selvä.
>> Ja nyt, useimmat hauskaa kaikki, meillä on yrittää.
Te näki tätä kuvaa luento?
Joo, se pitäisi näyttää erittäin tuttuja.
Katsotaanpa, miten voisimme todella toteuttaa tätä.
Tai oikeastaan, katsotaanpa, ei että vaikka keksiä?
Ehei.
Okei, emme edes tarvitse murehdi alhainen kamaa.
Meillä on runsaasti aikaa puuttua niin P asetettu 5.
Mutta nyt, vain hyvin korkea, me tietää, että tämä on mitä se näyttää.
Me kuvaili sitä eräänlainen monitasoinen tiiviste
where-- mitä tässä kaupassa?
Tämä tallentaa nimet tutkijat että voimme todella
etsiä mukaan juuri sellainen seuraavista eri hash taulukoita alas, okei?
>> Ja tarkoituksena on, teoriassa, ne tarjoavat jatkuvaa aikaa etsiä.
Joten jos haluan tarkistaa, että esimerkiksi, kuka someone--
että Mandel on tässä trie, voisin hyvin nopeasti
vuonna linear-- Olen pahoillani, vuonna vakio aika, selvittää
onko se on trie.
Mutta con, on tarkastella, miten suuri tämä on.
Emme edes varastointia että paljon tietoa, ja se on valtava.
Joten yksi iso con on, että se käyttää suuren määrän muistia.
Kyllä.
>> Yleisö: Miksi se antaa vakio aikaa, tarkalleen?
>> SPEAKER 1: Vielä kerran?
>> Yleisö: Mikä intuitio miksi se tarjoaa jatkuvasti aikaa?
>> SPEAKER 1: Erinomainen kysymys.
Miksi se antaa jatkuvaa aika?
Joten mitä voimme tehdä on, katsotaanpa sanoa etsimme Mandel.
Tiedämme, että haluamme aloittaa ensimmäisen tason M.
Tiedämme haluamme seurata sen E. Joten se ottaa yksi askel, kaksi askelta, eikö?
Seuraamme sen N. Seuraamme sitä D. Seuraamme sen E. Seuraamme sen L.
Ja sitten seuraava asia tarkistamme says-- tämä delta sanoo Kyllä, se on
meidän pöytä.
Se on sana.
Tämä on kelvollinen merkintä meidän trie.
Joten sanot, OK, että kesti seitsemän vaihetta.
Mutta jos lisäsimme kuin lukemattomia enemmän tutkijat tämän tietorakenne,
meidän ei tarvitse tarkistaa lukemattomia enemmän asioita.
Olemme aina vain täytyy ottaa seitsemän vaihetta, pituus henkilön
nimi.
>> Joten, haluamme ajatella runtime kuten, kai
lisäämme koko meidän tietorakenne, kuinka paljon kauemmin
se aikoo ryhtyä?
Tässä tapauksessa, jos lisäämme nippu lisää tutkijoita, sillä ei ole väliä.
Se on edelleen vie saman verran aikaa.
Se on jatkuva aika.
Kyllä.
>> Yleisö: Mistä tiedät ei skannata yli muut numerot?
SPEAKER 1: Mistä tiedän, kuinka to--
Yleisö: Kuten Mistä tiedät menet suoraan M E eikä M?
SPEAKER 1: Voi, varmasti.
Koska Tiesin etsivät sanan Mandel,
ja minä vain tiedän sen M-E. Joten that-- joo, mennä eteenpäin.
Yleisö: Eikö teillä katsomaan muut kirjaimet
muualla [äänetön]?
>> SPEAKER 1: Ah, ei minulla katsomaan the-- OK, suuri.
Tämä on suuri kysymys.
Se riippuu siitä, miten toteutamme sen.
Jos toteutamme sitä vain kuten sarjan paneelit
jos me tiedämme, että E on aina asennossa 0,
En tiedä, mitä numero indeksi on.
Joo, voimme vain tehdä vakio aika, älä, älä, älä, tee.
Viileä.
Kysymys tuolla?
>> Yleisö: on vakio aika sama asia kuin reaaliajassa?
SPEAKER 1: Onko vakio aika sama asia on reaaliaikainen?
En ole aivan varma reaaliajassa on.
Yleisö: Kuten aika kirjaimellisesti etenee toinen
sekunnilta sen sijaan, että riippumaton muuttuja.
>> SPEAKER 1: Joo, sinä voi ajatella niin.
Toisin sanoen, se ei ole riippuvainen koosta tietorakenteen.
Se on tapa ajatella sitä.
Muita kysymyksiä?
Ehkä ensimmäistä kertaa historia, lopetimme ajoissa.
Jos sinulla on kysyttävää, ota vapaasti tulla kysyä meiltä, ​​siirry osaan,
kerro TF, toimisto tuntia ovat 8:00 ja 8:30
klo 11.00 maanantaina ja tiistaina, niin se on hieman eri aikaan,
joten varmista, että Huomaa, että.
Joo.
>> Yleisö: Tarvitsemmeko tietää tavaraa kuten komentoriviargumentteja,
viiva ls, viiva riippumatta?
>> SPEAKER 1: Komentorivi argumentteja, ja Linux komennot,
Kyllä, sinun täytyy tietää ne.
Very-- se on kuin eräänlainen tason tavaraa kävimme 0 kohdassa,
sikäli kuin linux komennot mennä.
>> Yleisö: Ovatko tuntia Annenberg?
SPEAKER 1: Aukioloajat, en ole täysin varma, missä ne ovat.
Mutta voit tarkistaa verkkosivuilla, ja se kertoo.