>> [Teemana musiikki]
>> SPEAKER 1: Hei kaikki.
Tervetuloa takaisin osiosta.
Ihana päivä out-- minkä vuoksi olen Varmasti on vain neljä teistä täällä
ja ei meidän tavallinen pakkaus.
Olen ollut sairaana tänä viikonloppuna.
Joten minulla ei ole Starburst teitä.
Ja saatan alkaa yskiminen hirveän koko tämän.
Joten vastaa minulle.
Aion todella yrittää ja saada tätä kautta ensin,
vaikka, ennen kuin minulla on yskää hyökkäys.
Mutta vain olla helppoa minua pikku bit-- siinä kaikki pyydän.
>> Joten meidän asialistalla today-- vain reminder-- tietokilpailun on ensi viikolla.
Kerroin teille viime viikolla, joten se ei sinut kiinni kenet.
Joten olen muistuttamassa teitä uudelleen.
Ensi viikolla tietokilpailun.
Tätä varten ensi viikolla osa tulee olemaan paljon enemmän
of-- Yritän työtä joissakin tarkastelun.
Joten jos te voisi auttaa minua lähettämällä minulle
asioita, että olet tyytyväinen kanssa, että olet huolissasi,
aiheita, jotka haluat varten minua kattamaan, se olisi hienoa.
Joten en voi kokeilla ja työskennellä heidät meidän jakso ensi viikolla
tai lähettää sinulle lisämateriaalia tai prep että et välttämättä saa muualta.
>> Yeah!
Yhä useammat ihmiset ovat tulossa!
Ajattelin, tein niin huonosti viime viikolla, että kukaan ei halua tulla takaisin?
Minua pelottaa.
Joten muut kolme asiaa että aiomme mennä yli
ovat uudelleenohjaus, tiedoston I / O, ja Sitten osoittimet ja dynaaminen muisti.
Olen varma, että olet kaikki erittäin innoissaan pointers-- kaikkien suosikki aihe,
niin helppo ymmärtää.
Olen varma, että te kaikki sai sen?
>> Joten asiat ensin, redirection-- tämä on pohjimmiltaan vain tapa
valvoa, miten syötät asioita omaan ohjelmaan,
miten lähtö asioita ohjelmaan.
Tärkeimmistä tavoista, että te ovat vuorovaikutuksessa sen kanssa
on vain kautta standardi ulos teidän print screen täällä.
Mutta on olemassa keinoja pipe-- kuten näemme täällä
on yksi meidän words-- laatuaan putken, että tietojen
tai että tiedot tiedostoon tiedostosta.
Se on vain erilaisia ​​tapoja saada asioita ohjelmaasi
ja ulos ohjelman sijasta vain tulostaa ne tähän näyttöön
tai syöttämällä asiat komentoriviltä.
>> Joten ensimmäinen on pieni suurempi kuin sirkumfleksi.
Joten output-- se vain tulostaa lähtö tiedostoon sijaan näytön.
Joten jos sinulla on ollut jotain, joka tulostetaan "Hei, maailma!" näyttöön,
jos laitat sen sijaan ja output.text, että
luo tämän tiedoston nimeltä output.text.
Ja kun avaat sen, se tulee sanoa "Hei, maailma!" siellä.
Tämä voi olla erittäin hyödyllinen Jos sinulla on ton virheitä
todellisuudessa, kuten näemme tässä yksi.
Jos teet kaksi Järjestelmäkohdistin, se tulee tulostaa virheilmoituksia.
>> Joten jos sinulla on ongelma kääntämiseen, se on paljon virheitä
ja olet juuttua yrittää Voit selata oman komentorivin
läpi kaikki ne, voit vain tulostaa ne tiedostoon,
avata tiedostoa siten, että voit selata niitä helpommin.
Olen itse käyttänyt tätä paljon, kun olin virheenkorjaus
Oma 181 psets koneen oppimiseen.
Joten se voi olla erittäin hyödyllistä myöhemmin.
On myös hyödyllistä, jos sinulla on ohjelman että ehkä on tuottaa kirjasto
tai tuottaa joukon kokoa narulla, ja te
on voitava nähdä, että se tuottaa niitä oikein.
Tämä on tapa tehdä se.
>> Joten jos tulostaa ne tiedostoon, sinun voi helpommin tarkastella niitä, eikö?
Versus yrittää vierittää kautta komentoriviltä.
Ja sitten yksi asia huomata on, että vain suurempi
kuin Järjestelmäkohdistin, jos kirjoitat tiedostoon, joka jo exists--
niin kuin jos meillä oli tämä ensimmäinen aika, laitamme sen output.text,
ja sitten meillä oli toinen ohjelma että painettu tätä ohjelmaa kaksi
ja teki enemmän kuin output.text, se ohittaa that-- niin
korvata mitä oli koskaan että tiedosto aluksi.
>> Joten jos haluat liittää tiedostoon, kuten näemme täällä,
et vain kaksi enemmän kuin merkkejä.
Ja se liittää se.
Se ei korvaa sitä.
Joten jos sinun täytyy käyttää useita ohjelmat ja sellainen pitää
Seuraa mitä ne kaikki ovat palaavat sinulle tiedoston,
se on tapa tehdä se.
Jos et välitä mitä teidän tiedosto ja se saa korvata,
voit vain käyttää yhden yli.
Onko järkeä kaikille?
>> Yleisö: Kuin piste slash Hei suurempi kuin tuotanto dot tekstiä, kuten kahdesti,
se tulee vain vain näytä lähtö dot tekstiä toisen time--
>> SPEAKER 1: Oikea.
Joten olisi pohjimmiltaan vain täysin korvata mikä oli siellä aluksi.
Jos tämä tiedosto tästä, output.text jo
olemassa, periaatteessa kutsuttakoon että jälleen yhdellä suurempi
kuin voit vain ajatella sitä niin kuin se korvasi tiedoston.
Kuten kun säästät Word asiakirja ja et tallenna nimellä
ja pidät sama nimi, ja se täysin korvaa it--
Tämä on samanlainen asia.
Kellään mitään kysymyksiä vain syöttöä tiedoston?
Mahtava.
>> Joten ilmeisesti, jos kääntää nuolen suuntaan, se voi tehdä tulo.
Joten kun te oli kuten Caesar tai Visioneer
ja sinun piti syöttää jotain, sinulla oli komentorivillä
että todellisuudessa syötetään sitä.
Tämä on toinen tapa tehdä se.
Joten sen sijaan että odotettaisiin ja komentorivi,
kuten silloin, kun kysytään viestin Caesar tai Visioneer,
jos sinulla on ollut tekstitiedosto joka oli viesti,
voit vain kirjoittaa sen, että.
>> Joten jos tämä oli kuin piste slash Caesar 3 vähemmän kuin nuoli syöttää tekstiä, joka
on viestisi, että kulkisi hienosti.
Kun Caesar ohjelma itse pyysi käyttäjän syötettä,
se olisi jo sen vuoksi olet kirjoittanut tähän tiedostoon.
Se on vain yksi tapa.
Vain käänteinen output-- vain syöttää tietosi.
>> Ja sitten viimeinen on putki.
Joten tämä on aika siistiä.
Koska sen avulla voit ottaa tuotoksen yhden
ohjelma ja laittaa sen tulo toiseen ohjelmaan.
En tiedä, jos joku teistä pelataan Decipher
että CS50 saattaa olla antanut sinulle, mutta se
voit ottaa joitakin näyte tiedostoon, kirjoita se salauksen,
ja sitten sieltä kirjoita että teidän salauksen
varmista, että se osoittautui sama.
Joten se on tavallaan kuin kolmitie silmukka.
Tsemppiä.
>> Yleisö: Jos ohjelma on useita tuloja,
on olemassa tapa kertoa se, joka syöttää käyttää tekstitiedosto tai lähtö?
>> SPEAKER 1: Se on useita panoksia.
Mikä tahansa tiedoston sinun input-- kun se on pyytää tulo että ensimmäistä kertaa, se on
menossa olettaa, luulen, se on menee putkeen koko tiedoston.
Joten jos sinulla on useita tuloja, olet aiotaan putkiston useita tiedostoja.
Joten jos olet pyytänyt viestejä kolme kertaa koodissa,
aiot olla laskemisesta kolmessa eri tiedostoja.
Ja se saa hullu.
Ja sinun ei tarvitse pelätä, että juuri nyt.
Mutta se ajatus.
>> Niin joo, putki on vain lähtö yksi Ohjelma käyttää tulo toiseen.
Jokainen hyvä siellä?
Cool.
OK.
Luultavasti ei ole tehdä liikaa sen kanssa.
Mutta sinun pitäisi ymmärtää miten voit käyttää tätä.
Ja on olemassa joitakin tapauksia, jotka saatat haluta käyttää sitä.
>> Joten tiedosto I / O-- tiedän mitä olet saying-- olemme tottuneet lukeminen
ja kirjoitan meidän näytön siellä, joka on standardi ja vakio ulos.
Ja sitähän te olleet tekee alusta lähtien luokan täällä.
Mutta voit myös lukea ja kirjoittaa tiedostoja, joka on kaikkien tiedostojen I / O-- niin tiedostoon tulo,
tuotos on kaikki se edustaa.
Joten tämä tarkoittaa periaatteessa sitä, että voit tallentaa tietoja nyt.
>> Kun vain tulostaa sen näyttö, se on periaatteessa mennyt, eikö?
Heti kun teet "Hei maailma "ja run" Hello world "
se tulostaa "Hello World" näyttö.
Mutta et voi oikeastaan ​​tehdä mitään sen sieltä.
Jos tallentaa tekstin tiedosto, sitten yhtäkkiä
sinulla on tämä tieto, että et saa manipuloida tai siirtää sen tiedoston,
tai laita se ohjelma myöhemmin.
Yksi syy miksi me teemme tätä vain
kuten tapa tallentaa tiedot myöhempää käyttöä varten.
>> Minulla on pari askelta täällä vain kävelemällä standardi
I / O. Vaiheessa yksi, voit luotava viite
tiedostoon kaikki Caps FILE tähti tiedosto.
Niin että luo osoitin tiedostoon.
Niin haluat avata sen.
Ja te sanotte, kirjaimellisesti, vain tiedoston yhtä kuin fopen.
Ja tämä tulee palauttaa osoitin tiedoston juuri avattu.
Olen nähnyt pari sinua pojat virka.
>> Mutta yksi niistä asioista, on remember-- osoittimet
voi olla joitakin osoite tai null, eikö?
Jos joskus on tapaus, jossa jotain voi palauttaa null,
mitä meidän täytyy tehdä ennen kuin me koskaan käytä sitä?
Meidän täytyy tarkistaa, jos se null vai ei, eikö?
Koska jotkut ehkä pitänyt ongelma, jossa mikä tahansa kohde
oltiin palautetaan purkautuminen oli nolla.
Yritit suorittaa jonkin toiminnon päälle.
Ja tietokoneen sivuston vialliseksi.
Oikea?
Lyön vetoa pari sinua ehkä ollut, että kysymys.
>> Joten fopen, fopen on joko palata osoitin tiedoston,
tai jos jokin menee pieleen, se tulee palauttaa null.
Joten sinun täytyy aina tarkistaa että se ei ole palannut null
ennen kuin yrität tehdä mitään muuta.
Tämä on kuin standardi paradigma että olet menossa on täällä.
Jos on joskus mahdollisuus, että jotain voisi palata null,
varmista se ei ennen kuin jatkat.
Muuten, olet menossa saada ihana sivusto vikoja.
Ja kukaan ei tykkää käsitellä näitä.
>> Niin näemme täällä, ensimmäinen argumentti on vain tiedoston polku.
Jos tiedosto ei ole olemassa, se tulee luoda tiedoston.
Ja se vain tulee olemaan tyhjä.
Ja sitten toinen argumentti on tila, jonka haluat.
Haluammeko lukea tämän tiedoston?
Haluatko kirjoittaa siitä?
Haluatko liittää?
Joten oikeastaan ​​mitä vain said-- Jos tiedostoa ei ole olemassa
ja yrität lukea se, se tulee heittää virhe.
Jos tiedosto name-- like jos file.text ei ole vielä olemassa
ja haluat kirjoittaa sen, se luo
tyhjä tiedosto nimeltä file.text sinulle.
Ja jos haluat liittää, sinun pitäisi tehdä sama asia.
Onko järkeä?
Jos yrität lukea tiedosto, joka ei vielä ole olemassa,
se tulee heittää virhe.
Muuten, se luo tiedoston voit tehdä mitä haluat sen.
Cool.
Nyt voimme lukea tiedostosta.
Ja tämä on vain sellainen menossa läpi eri toimintoja
että meillä on tiedostojen I / O. Tämä tahto olla tarpeen tämän viikon PSET,
jos muistan oikein.
Kyllä, se ehdottomasti on tarpeen tällä viikolla PSET.
Joten fgetc palauttaa seuraavan merkin.
fgets palaa aivan rivi tekstiä.
Se palaa mitään asti uusi linja, ja se murtaa.
Joten fread lukee tiettyjä tavujen ja asettaa ne
taulukkoon, joka on jotain saatat
haluat tehdä uudelleen size-- saattaisi olla hyödyllistä.
>> Kuinka moni on lukenut PSET spec, muuten?
OK.
[Äänetön]
>> SPEAKER 1: OK.
Selvä.
Ehdottomasti lukea that-- se on hauska PSET.
Saat palauttaa poistetun muisti card-- todella jännittävä, kun se toimii.
Mutta ehdottomasti, alkaa lukea sitä.
Tule juttelemaan, jos on kysyttävää siitä.
>> OK, niin kuten sanoin, fread lukee tietyn määrän tavuja.
Se on jonkin verran mielivaltainen määrä että aiot asettaa.
Ja sitten fseek vain liikkuu tiettyyn asentoon.
Joten ehkä et välitä noin seuraavat 10 tavua.
Sinä vain haluat siirtyä eteenpäin.
Et välitä niistä.
Haluatko lukea alkaen tavu 11.
fseek voit tehdä sen.
Joten sen avulla voit olla valikoiva mitä luet.
Koska fgetc, fgets ja fread Lue tietystä paikasta tiedoston.
>> Tapa ajatella tätä on, jos tämä on meidän tiedoston, kun avaat sen,
sinulla on tämä asema tiedostoon joka alkaa alussa.
Aina kun soittaa fgetc, fgetf, tai fread,
se tulee aloittaa Tämän asennon merkin.
Sanotaan haluat vain lukea tämä kimpale muistia tänne.
Et voi vain soittaa.
Sinun täytyy etsiä tänne ja sitten lukea sieltä
tai lukea, saa tai getc, riippuen siitä, mitä haluat.
Joten etsiä vain voit skip osia muistia.
Ja se on ainoa Näin voit ohittaa asioita
lukematta niitä omaan puskuriin.
Onko järkeä kaikille?
>> Ilmeisesti siellä on paljon rinnakkaisia ​​here--
Meidän lähtö tai tulo uudelleenohjaus, olet lukea ja kirjoittaa.
Joten fputc vain kirjoittaa merkki tiedostoon.
fputs kirjoittaa linja.
Fprintf tulostaa alustettu tuotos.
Joten jos sinulla on välilehdet, tai tila, tai vaikka mitä.
Ja sitten fwrite kirjoittaa joitakin joukko tavua tiedostoon.
Joten tämä on samalla tavalla fwrite ja fread ovat analogisia
opposites-- fgets, fputs, ja Sitten fputc ja fgetc-- paljon
hullu, nopea asioita.
>> Juuri sellainen pitää tämän handy-- sinulla on eri aikoina
jossa ehkä haluat vain yksi merkki kerrallaan.
Ehkä haluat koko linjan.
Teidän sanakirja pset-- joka on kaksi psets,
Uskon, annamme sinulle koko sanakirja tekstimuodossa
jonka jokainen sana erotettu linja.
Joten jos olet halunnut lukea yksi sana kerrallaan,
mitä voisitte käyttää jos luet ja he kaikki erotettiin uusia linjoja,
ja haluat vain yhden sanan kerrallaan?
>> Yleisö: fgets
>> SPEAKER 1: Oikea.
Fgets-- koska se palauttaa mikä on yhdelle riville.
Ja jos jokainen sana on sen oma linja, voimme käyttää fgets.
Cool.
Onko järkeä, kaikille?
Cool?
Joo, me aiomme päästä hauska osa osoittimet
hyvin pian, jos olet saada tehdä joitakin matematiikka.
Ja se tulee olemaan suuri.
>> Viimeisin step-- sulje tiedosto.
Niin monia asioita täällä, yksi paradigmoja
on, jos se voi palata null, tarkista null.
Jos avaat jotain, sinun on parasta lopettaa.
OK, joten et ole tehnyt, kunnes olet tehnyt jos olet kiinni se.
Ikään kuin se ei ole ohi kunnes rasva nainen laulaa.
Se on kuin sulkemalla tiedoston.
Kuten tässä sanotaan, vain toistaa, aina
avaa tiedosto ennen olet kirjoittamasta sitä.
Ja aina sulkea se, jos olet avannut sen.
Kaikki hyvin?
Cool.
>> Joten tässä on esimerkki.
Joten tiny-- En tiedä, jos kaverit voivat nähdä, että hyvin.
Jos vain voisimme lisätä kirkkaus jotenkin.
Anna minun itse tehdä tämän, jos voin.
OK, te voi oikeastaan nähdä, että ollenkaan, voit?
OK, me aiomme tehdä tämän, niin.
[Äänetön]
>> Oletan, että tämä on paljon parempi nähdä.
Näkeekö kukaan missä minun hiiri meni on kysymys?
Ah, siellä se is-- mitä taistelee!
>> OK.
Periaatteessa teillä pitäisi olla sellainen on käsitys siitä, mitä tämä tekee.
Se ei ole täydellinen.
Mutta olen mieluummin selittää sitä kuin kuluttaa enemmän aikaa yrittää muotoilla sitä oikein.
Periaatteessa, kuten näette täällä, aloitamme tiedosto auki.
Ja meillä on joitakin tietokanta tiedosto, että olemme
aukko, joka sanoo, että se on meidän opiskelijoille.
Ja aiomme kirjoittaa sitä.
Joten tietenkin palata null.
Joten meidän täytyy tarkistaa null.
Ja sitten jos se ei ole null, käymme läpi.
Ja kuten näette, olemme looping kautta täällä.
On opiskelijoita.
Opiskelijat on hash määritelty kolme.
Ja mitä me teemme on me tulostamalla tiedoston, eikö?
Mitä siis tulostamalla meidän tiedoston?
>> Yleisö: tulokset jotka ovat array?
>> SPEAKER 1: Joo.
Tulokset, jotka ovat array-- tarkalleen.
Joten avaamme tätä tietokanta tiedosto, joka
Oletan on jonkinlainen laatuja tietokanta.
Ja me vain tulostamalla tulokset kunkin opiskelijan tiedoston.
Cool?
Hyvä.
Mahtava.
OK.
Palataanpa to--
>> Yleisö: Minulla on nopea kysymys.
Onko printf ei varten silmukka?
Se on vain, jos silmukka?
SPEAKER 1: Ei, se on varten silmukka.
En näe hiirtä hyvin täällä.
Joten olen kamppailee muodossa, joka oikein.
Tämä teline on mennyt.
Sen pitäisi olla täällä.
Tämä on mitä teidän varten silmukka.
Siellä.
Nyt se on kaunis.
Niin, että miten se pitäisi be-- paitsi sillä, että viime kiinnike, että olen hylätty.
OK.
Onko järkeä kaikille?
OK.
Menemme eteenpäin seuraavaan asia then--
joka itse asiassa, olet menossa tarvitse nähdä koodin.
Joten olen juuri menossa kopioida, että yli juuri nyt.
OK.
Joten aion näyttää teille kaverit tämän koodin.
Ja haluan sinun kokeilla ja kuva mitä sen pitäisi tehdä.
>> Joten annetaan that-- kestää minuutin tai niin.
Yrittää selvittää, mitä on tekeillä.
>> Onko ideoita?
>> Tiedämme, että meillä on ainakin kaksi argumentteja komentoriviltä, ​​eikö?
Oletan joista yksi tulee olemaan että [äänetön] meidän ohjelma on
ja sitten jotain muuta.
Koska jos [kuultavissa] on vähemmän kuin kaksi, me huutaa heille.
Oikea?
Ja käyttö, se näyttää se tulee olemaan jonkinlainen tiedoston.
Me kaikki hyväksyä?
Joten nyt, mitä silmukka tekee?
Mitä se tulee läpi?
>> Yleisö: Kaikki tiedostot.
SPEAKER 1: Aivan.
Se menee läpi kaikki tiedostot, että olemme panos siellä.
Joten jokaisen tiedoston, se on avautumassa joitakin merkkijono siellä.
Se avautuminen tiedoston.
Oikea?
Ja se lukee sitä.
Tietenkin, tarkistaa, jos se on nolla.
Ja sitten se tulostamista.
Jos se on tyhjä, se vain kertoo meille että se ei ole olemassa olevaa tiedostoa.
Koska muistan, jossa lue tiedosto on olemassa.
Oikea?
Kanssa kirjoittaa ja liittää, voit saada veräjästä.
Mutta lukea, meidän tiedosto on olemassa.
>> Ja sitten jos se on olemassa, mitä me teemme täällä?
Haluan vain aloittaa tästä.
Mikä tämä do-- tämä ensimmäinen merkki.
Mitä se tekee?
Hän saa yksi merkki, eikö?
Joten mitä tämä tekee?
Se on tulossa ensimmäinen merkki.
Jokainen tietää EOF?
>> Yleisö: Tiedoston loppu?
>> SPEAKER 1: End of file-- tarkalleen.
Niin se menee läpi koko tiedoston, eikö?
Ja sitten se tulee päivittää mukaan saada jokaisen seuraavan merkin.
Oikea?
Ja mitä se tekee?
Yleisö: Operaattorin että in--
>> SPEAKER 1: Putchar tulosteita teidän näytönsäästäjä.
[Kuulumaton] merkki.
Ja sitten kun se [kuulumaton] Tämä sulkee tiedoston.
>> Yleisö: Ettekö tarvitse [? muuta? ?]
>> SPEAKER 1: Ei välttämättä.
Tarkoitan, se on aika hiljaista tässä.
Koska tämä palaa, vaikka, niin kauan koska tämä ei saalis, olet hieno.
Siis se on luultavasti hyvä käytännössä tehdä muuta.
Mutta muuten ei ole aina tarpeen erityisesti
jos sinulla on jotain kuten tuotto, joka
tarkoittaa, että tässä tapauksessa, jos se ottaa kiinni se, ohjelma tulee lopettaa
ja se koskaan saa tätä.
Se on enemmän silloin, kun olet ei välttämättä palaavat jotain.
Koska jos tämä ei palaavat mitään,
se tarkoittaisi sitä, että jos tämä olisi totta, loput tästä olisi silti ajaa.
Ja siinä tapauksessa, te haluaisi väärä.
Jos se paluu, ja oman ohjelman loppu,
muuta ei tarvita kaikkia aikaa, riippuen yhteydessä.
Jaakob, sinä on kysymys?
Yleisö: Joo.
Joten ei fgetc saada seuraava merkki?
Miten hahmo kasvaa?
SPEAKER 1: Joo.
Joten fgetc saa seuraavan merkin.
Voit ajatella sitä kuten C ++ tavallaan.
>> Yleisö: Mitä oli EOF?
>> SPEAKER 1: EOF on tiedoston loppuun.
Se on vain merkki, joka kertoo että olet lopussa tiedoston.
Joten tämä on menossa painoon teidän standardin ulos.
Ja sitten se tulee sulkea tiedoston, kun se on tehty.
Ja sitten mennään seuraava tiedosto, eikö?
Joten kaiken kaikkiaan, mitä tämä ohjelma tekee?
>> [Äänetön]
>> SPEAKER 1: Joo.
Se vain tulostaa kaiken siellä.
Joten jos te koskaan käyttänyt CAT ja sitten nimi noin file--
En tiedä, jos joku teistä koskaan tehnyt, että puhelimesi.
Mutta jos joskus käyttää komento CAT-- C-A-T--
ja sitten mitä tiedosto olet there-- se
tulostaa sen omaan terminaaliin, joka voi olla erittäin kätevä joitakin asioita.
Käytän sitä paljon.
Onko järkeä kaikille?
Cool?
>> OK joten sinun tehtäväsi now-- joko itse tai ihmisiä ympärillä sinä--
on vain kirjoittaa yksinkertainen ohjelma joka vain kirjoittaa "Hello, world!"
ulos tiedostoon.
>> [Äänetön]
>> SPEAKER 1: Olin ihan, teki Odotan tätä huonosti viime viikolla?
En usko, että se oli niin paha.
Olen iloinen, että olet kaikki täällä.
Se todella tekee minut onnelliseksi.
Olen tyttö iloja.
En vain pidä siitä, kun minun kohta käy.
Joten olen juuri tämä alkoi te jotta voimme koodata yhdessä.
En pidä laittaa ketään paikka ellet halua olla.
>> Yleisö: Saat tietokilpailu, do meidän täytyy kirjoittaa ohjelma?
>> SPEAKER 1: Saatat pyydetään kirjoittaa yksinkertaisia ​​ohjelmia käsin.
YUP.
>> Yleisö: tietovisa on ensi viikolla, eikö?
>> SPEAKER 1: tietovisa on ensi keskiviikkona.
Tämä tarkoittaa, että on ihana [? CSE?] luokittelua puolue jälkeenpäin, joka
tarkoittaa saat pisteesi takaisin että täksi yöksi mihin aikaan?
Kuka tietää?
Mutta se tulee olemaan, että yö.
>> Selvä.
Miten haluamme aloittaa tämän?
Annan sinulle hint-- alkaa tästä.
>> Yleisö: Sinun täytyy avata tiedoston.
>> SPEAKER 1: Joo.
Joten mitä haluat kutsua tätä?
Haluatko vain kutsua sitä "file"?
Tehdään tästä helppoa.
Joten fopen-- mitä meidän lähtötesti olemaan?
Kutsuvat sitä "Hei."
Ja mikä on meidän tilassa?
Mitä me teemme tämän tiedoston?
>> Yleisö: Lue.
Kirjoittaminen.
SPEAKER 1: Kirjoitamme sitä.
Lovely.
OK, joten meillä on tämä tiedosto nyt.
Mitä meidän pitää tehdä?
Yleisö: Tarkista jos se on nolla.
SPEAKER 1: Tarkista, onko se null-- tarkalleen.
Se mitä haluan kuulla.
Että pitäisi olla automaattista, varsinkin melko paljon tästä eteenpäin.
Jos aloitat segfaulting, luultavasti ei tarkista null jonnekin.
Yhdeksän kertaa kymmenestä, joka on olemaan teidän virhe.
Joten jos voisit saada tapana, aina tarkistaa, jos se on nolla,
elämäsi tulee olemaan mukava ja easy-- tai helpompaa.
>> Joten tarkista jos se on nolla.
Joten jos se ei ole nolla, mikä on mitä bang yhtä kuin
means-- ei null-- se on voimassa.
Mitä haluat tehdä?
Haluamme vain tulostaa kyseiseen tiedostoon, eikö?
Joten mitä aiomme käyttää?
>> Yleisö: fprintf
>> SPEAKER 1: Fprintf-- ihana.
Ja fprintf kestää kaksi arguments-- missä se on menossa ja mitä me haluamme tulostaa.
Niin mitä ensimmäisen?
Missä menee?
>> Yleisö: Tiedosto.
>> SPEAKER 1: Se tulee tiedostoon.
Ja mitä me haluamme painettu?
"Hei, maailma!"
Selvä.
Meillä on yksi viime thing-- toinen suuri paradigman täällä.
Yleisö: Sulje.
SPEAKER 1: Sulje.
Siellä mennään.
>> Yleisö: tämä tapahtuu Jos tiedosto on nolla?
SPEAKER 1: Ei, tämä on, jos se ei ole nolla.
Yleisö: Voi, jos se on not-- OK.
Varten fopen ja sitten kaksi väitettä, jotka menevät sisälle,
Mitä tulee ensimmäiseen väitteeseen tarkoittaa uudelleen?
>> SPEAKER 1: Argumentti aivan kuten tiedoston nimi
että haluat mennä.
Niin sen jälkeen tämä toimii, olisit on joitakin tiedosto nimeltä "hei"
että oli "Hello, world" sisällä.
Siinä kaikki.
Vain nimi.
>> Yleisö: Ja koska se kirjallisesti, tiedostoa ei tarvitse jo olemassa.
Onko se mitä sanoit?
>> SPEAKER 1: Oikea.
Täsmälleen.
Jos "Hei", kuten tiedoston ei vielä ole olemassa, se on
menossa luo tiedosto nimeltä Hei "ja kirjoittaa sen sinulle.
>> Yleisö: Kun sanot ohjelma kirjoitti tiedostoon,
Miksi kirjoitat "tiedosto" sijasta tiedoston nimi ja fprintf--
>> SPEAKER 1: Koska tässä tapauksessa meillä on että suuri FILE-- kaikki caps-- tähden,
tiedostoon.
Joten se on osoitin tiedostoon että puhut.
Tämä on tapa, että me vain viitata siihen.
Joten tässä tapauksessa sinun voi ajatella file-- aha,
voimme käyttää this-- tiedosto tästä viittaa avaamista "Hei"
ja antamalla sen kirjoittaa.
>> Yleisö: Voisimmeko laittaa "Hei" sijaan [? vain?] f-tiedoston?
SPEAKER 1: Ei, koska "Hei" on oltava avoin ja kirjoitusoikeudet.
Tiedoston täällä on kuin Turvaosoitin joka sanoo OK, me
on tässä file-- hello-- että me tarkastelemme.
Se on avattu.
Ja aiomme kirjoittaa sitä.
Jos käytät vain "Hei", joka kiteytyy se.
Joten se tulee älyttömästi.
Tarkoitan, sinulla voisi olla nimeltään se.
Olisit voinut tehdä tiedosto, tähti, "Hei", on sama kuin.
Mutta pointti on se, että te tarvitsevat tiedosto tähti osoitin jotta
voitava käyttää näitä toimintoja.
Yleisö: Osaatko tiedosto, tähti, tiedosto, "Hei"
Vai onko sinulla laittaa tiedosto tähti, tiedosto on?
SPEAKER 1: Voisit tehdä tiedosto, tähti, "Hei."
Voit vaihtaa tämän millä nimellä haluat.
Se on täysin mielivaltaista mikä se nimi on.
Voit nimetä sen mitään.
Nimeä se lentää spagettia, jos halusi.
>> Yleisö: Mikä on "W" lainausmerkkeihin varten?
>> SPEAKER 1: "W" on vain tila.
Joten olemme kirjoitan tätä tiedostoa.
Jokainen hyvä?
Selvä?
Kyllä.
>> Yleisö: Joten kun se kirjoittaa tämän tiedostoon, missä me sitten huomaavat, että tiedosto?
>> SPEAKER 1: Se tulee olemaan samassa hakemiston, että olet tällä hetkellä.
Jos olet PSET kolme ja olet suorittanut tämän, omassa PSET
kolme kansio tulee olemaan tämä tiedosto nimeltä "Hei."
Cool?
Jokainen hyvä?
Minusta tuntuu et kaikki saada se, mikä on hienoa.
OK.
Joten takaisin minun dia show-- Rakastan kun asiat toimivat.
OK, pointers-- Oletteko innoissaan?
Osoittimet ovat suuria.
He ottavat vähän kääri pään ympärille.
Tämä on minun toinen vuosi opetus viitteitä.
Ja luulen vihdoin sain sen.
Joten jos taistelu, se on OK.
Kuten aiemmin sanoin, piirtämällä kuvia auttaa paljon asioita CS,
niin paljon kuin mielestäni ihmisillä on taipumus ajatella Oh, me olemme tietokone.
Meidän pitäisi vain koodia.
No-- piirustus kuvat todella auttaa sinua.
Ja en todellakaan rohkaista teitä kosketuksen kindergartner puolella
ja tuoda esiin väriliidut tai merkkiaineet ja tasapeli.
Koska se auttaa sinua.
Ja jos näet minut toimistossa tuntia, minä tulee kuljettaa noin nippua
kynät piirustus asioita.
>> Joten erityisesti pointers-- piirtää kuvia.
Ja olen varma, että olemme todella menossa olla piirustus kuvia täälläkin.
>> Joten te kaikki sai nähdä Binky, tämän jäähtyä claymation juttu.
Ja mielestämme se on todella hauskaa, kun hän räjähtää joukko kappaletta.
On joitakin koomikko luokassa.
C [äänetön] tämä suuri kyky pystyä ohjaamaan muistiin.
Ja se on yksi niistä asioista, jotka todella tekee siitä niin voimakas kieli.
Mutta suurella voimalla tulee suuri vastuu.
Ja hulluja asioita voi tapahtua jos et ole varovainen.
Joten kun käytät osoittimet, haluat tehdä
että olet todella ymmärtää tarkalleen mitä olet tekemässä.
Toivottavasti seuraava hieman aika auttaa sinua todella ymmärtää
osoittimet, miten niitä käytetään, ja kuinka manipuloida heitä.
>> Joten memory-- Olen varma, että me olet nähdä tässä kaaviossa ennen.
Joten tämä on vain yksinkertainen kaavio miten asiat saatetaan tallentaa muistiin.
Joten et periaatteessa ole näitä valtava paneelit yhden tavun lohkoja
mitä olemme here-- lievää kasvaa yhdellä joka kerta.
Tämä on hex [kuulumaton] niin kahdeksan bitin lohkoja.
Ja jokainen lohko on liitetty joidenkin heksadesimaaliosoitteen.
Joten jos olet koskaan nähdä 0x, joka on juuri nuotintaminen
että se heksadesimaaliosoitteen.
Voit olettaa, tämä tarkoittaa Joissakin osoite muistiin.
Puhumme muisti osoitteita kun näet heksadesimaaliluvuksi.
>> Meillä on ints ovat muuttujia, kellukkeet ovat muuttujia, jotka tallentavat.
Joten ints myymälä ints.
Kellukkeet myymälä kelluu.
Joten meillä on myös viitteitä että myymälä muisti osoitteita.
Se on eräänlainen kartoitus.
Osoittimet ovat yksinomaan muisti osoitteita.
Niin, että on kuin teidän tyyppi siellä.
Laite on 32-bittinen, mikä tarkoittaa että muisti osoite on neljä tavua.
Joten kaikki osoitin, että sinulla on myös olemaan neljä tavua.
Tai sitten jos se on neljä tavua, muisti on neljä tavua.
Osoittimet myymälä muisti.
Siksi he neljä tavua.
Cool-- haluavat vain vahvistaa tätä.
>> Sinun pitäisi saada tämä sarjakuva nyt.
En tiedä kuinka moni teistä ovat xkcd faneja, mutta rakastan xkcd.
Se on hienoa.
>> Selvä.
Jotta luodaan pointers-- kuten sanoin, se on melko paljon aivan kuin mitään muuta.
Sinulla on tyypin.
Sinulla on nimi.
Oikea?
Sitähän me on siellä. [? Hex?] Tähti tarkoittaa että se on osoitin,
ja sitten mitä haluat kutsua sitä.
Niin tyyppi edustaa mitä voidaan tallentaa.
Kaikki hyvin?
Samalla tavalla, että jos teemme ints, tiedämme olemme tallentamiseen int siellä.
Jossa osoitin, se omistaa muisti osoite.
Mutta mitä se tarkoittaa on that-- tässä tarina piirustus on menossa tulla kätevä.
Joten tässä tapauksessa, meillä on Joissakin value-- sanokaamme neljä.
Neljä on osoitteessa yksi.
OK?
>> Tämä ensimmäinen tarkoittaa tässä että se on osoitin 2x.
Oikea?
Se on noin osoittimen x.
X voi olla jotain, mitä tahansa.
Riippumatta x is-- sanoa x on neljä.
Se tulee säilyttää muistin osoite täällä.
Joten int, tähti, x-- tämä on joitakin muita rako memory--
kuka tietää mitä tämä on.
Mutta se tulee tallentaa osoitteesi tähän.
Joten tämä olisi like-- tässä tapauksessa, riippumatta,
varastoidaan 0x1-- mitä on tallennettu osoitteessa, että osoitin omistaa,
on ottelu kanssa mitä olemme nimetty.
Joten 0x1, tässä tapauksessa, tämä on x.
Tämä voi vain olla int kun käytämme tätä.
>> Vastaavasti, jos meillä on toinen 1v riippumatta
osoite tallennettu y on olla char-- sama juttu z.
Samalla tavalla, kun te yrittää tehdä intx vastaa 0,4,
se tulee huutaa sinulle ja olla kuin mitään, sanoit halusi int.
Tämän on tarkoitus olla int.
Lopettaa yrittää tehdä kellua.
>> Joten antaa asioiden olla mitä he haluavat olla.
Antaa asioiden olla oma itsensä.
Niin iso juttu on vain lajista riippumatta osoittimen
se on, että on vain asia voit tallentaa sinne.
OK?
Käytäntöä, kuten viime viikolla, kaikki
tuntuu todella sellainen abstrakti.
Aiomme tehdä joitakin käytännön.
Olisi järkevämpää.
>> Joten paikannus ja dereferencing-- se todella tärkeää saada näitä suoraan.
Minulla on vielä virkistää aina silloin tällöin.
Ja minä olen kuin odottaa, kumpi haluan?
Niin & -merkki todella antaa te viittaus tai osoite.
Joten se palauttaa osoitteeseen muisto jonka muuttuja on tallennettu.
Niin se tulee todella palata sinulle heksadesimaar taas dereferencing se
on todella menossa antaa teille tiedot, jotka on varastoitu.
OK?
Joten olemme menossa katsomaan esimerkki todella nopeasti, tai oikeastaan ​​jopa seuraavaksi.
>> OK.
Joten meidän täytyy ajatella todella huolellisesti tästä.
Joten tässä meillä on kokonaisluku x.
Aion yrittää tehdä tämän ulos parhaan kykyni mukaan.
Joten olemme menossa on tähän rakoon x.
Ja se on tallennuskapasiteetti on viisi.
Sen osoite on 0x4.
Cool?
Kaikki hyvä.
>> Joten nyt meillä on tämä osoitin.
Se oli täällä.
Ja et-merkki antaa meille osoitteen jotain.
Eli tässä tapauksessa se osoite x.
Mikä on osoite X?
04-- ja tämä osoitin on 0x08.
Cool?
Joten voit ajatella tätä osoitin, 04, vain huomauttaa tänne.
Ja niitä kutsutaan osoittimet koska kun saamme lisää tähän,
te tulette näkemään osoittaa asioita.
Ja korttelin viittaa toiseen lohko tekee paljon enemmän järkeä.
Joten tässä on kaksi.
Ja sitten meillä on joitakin kopio, joka on what-- 0x0C.
Ja se tulee dereference meidän osoitin.
>> Niin mitä se sanoo ei OK, tässä on meidän osoitin.
Arvo se tallentaa on 0x04, ja mitä se sanoo, on mennä tähän osoitteeseen
ja kerro, mitä siinä on.
Niin, että tehokkaasti mitä tämä nuoli on tekemässä.
Voit ajatella tätä kuin tähti.
Niin OK, kun teemme tähti, se tarkoittaa seurata.
Mene tähän osoitteeseen.
Ja se on pohjimmiltaan vain seuraavat tämä nuolta tämä muisti murikka.
Ja antaa meille mitä siinä on, joka on 5.
Se, miksi meidän kopio on yhtä kuin 5.
Onko järkeä?
Onko kukaan tarvitse minua läpi että uudelleen tai hitaammin?
Haluatko minun mennä läpi vielä kerran?
OK.
Aiomme piirtää se uudelleen.
Kun aloitamme, olemme kaikki samaa mieltä olemme jotkut kimpale muistia, joka on muuttujan
X, että asetamme yhtä suuri kuin 5.
Emme valvo, missä se on muistissa.
Joten tämä paikka on vain mielivaltaisesti.
Hyvä siellä?
OK.
Sitten alustaa osoitin int.
Siksi se on sallittua viitata x koska meillä on int täällä.
Meillä on toinen kimpale muistiin, koska tämä osoitin
on muuttujan aivan kuin mitään muuta.
Se on mielivaltaisesti tilaa muistissa.
Ja mitä se tallentaa on osoite X.
& -merkki Tarkoittaa osoite x.
Niin mikä on osoite X?
>> Yleisö: Se on zero--
SPEAKER 1: 0x04.
Joten then-- viimeinen.
Meillä on joitakin copy-- uudelleen vain yksi muuttuja.
Joten antaa joitakin mielivaltainen paikka.
Ja me dereference meidän osoitin.
Tähti tarkoittaa mennä osoite tallennettu minun osoitin.
Kerro minulle, mitä siellä.
Joten osoite tallennettu meidän osoitin on 0x04.
Joten menemme kyseiseen osoitteeseen.
Se osoittaa, että osoite.
Mitä sisällä tämä muisti estää?
Se on viisi.
Niin, että mitä me antaa meidän kopio.
Jokainen hyvä?
Cool.
Again-- kuvia.
>> Joten seuranta arvot here-- olen aio antaa te ajattelette tästä.
Voimme piirtää toisen kuvan.
Mutta haluan sinun kokeilla ja syy läpi tämän itse hetken.
>> Koska ne eivät anna meille esimerkiksi osoitteen,
Olen juuri menossa tekemään ampersand x-- jonka pitäisi auttaa ajaa se kotiin.
& -merkki Tarkoittaa osoite.
>> Joten ensimmäinen, kaikille mennä ensimmäinen rivi.
Joitakin X setin five-- joitakin satunnainen slot muistiin.
Int tähti osoitin on yhtä osoitteeseen x, eikö?
Int tähti osoitin luo tämä lohko, vaatii se osoitin,
ja määrittää sen osoitteeseen x.
Olen kauhea -merkit.
>> Nyt mitä teemme on sanomme OK, dereference meidän osoitin.
Joten mennään OK, mitä meidän osoitin?
Se on & -merkki x.
Mene ampersand x ja luovuttamaan sen.
>> Joten nyt, et-merkki X tulee olemaan 35.
Joten periaatteessa, kun olet dereferencing, menet OK.
Aiot olla piirros kuvia, kuten tämä.
Aiot olla piirros nuolia yli, missä se on.
Joten mene tähän rakoon muistiin ja joko anna minulle, että arvo takaisin tai muuttaa sitä.
Tässä tapauksessa, koska olemme tällä arvo, olemme osoitetaan sen olevan 35.
Toteaa, että viimeisten yksi, jos huomaat, me
tehtiin määrittämällä, mitä oli täällä on jotain muuta.
>> Joten heillä on tämä mahtava pöytä.
Se ei ole niin paha.
Te työstää sitä.
Aion vetää sitä pöydällä.
Aiomme täyttää sen yhdessä, OK?
Joten napata joitakin paperia, tartu kumppanin, aloittaa työskentelyn.
Aion saada isompi liidun.
Koska se tulee olemaan paljon.
OK.
PROFESSORI: OK.
Aloitetaan ensimmäisen rivin.
Aloitamme siellä, niin te voi ehkä työn kautta lisää.
OK.
on yhtä kuin b kertaa c niin mikä on?
Se ei ole temppu kysymys, lupaan.
>> Opiskelija: 4 kertaa 5.
>> PROFESSORI: 4 kertaa 5.
20.
Niin mitä b?
Opiskelija: 4.
>> PROFESSORI: ja C?
Opiskelija: 5.
PROFESSORI: 5.
Ja sitten tämä on juuri menossa olla ampersand, et-merkki b,
ampersand C, eikö?
Ei paha.
Se on tarpeeksi yksinkertainen.
OK.
Joten seuraava.
On yhtä kertaa C, mikäli joku oli tunne, että.
On kaikille tuttu ajat on sama?
OK, kaikki tämä means-- tämä on lyhenteenä on yhtä kertaa C.
Voit myös tehdä sen jako, lisäten, vähentäen.
Voit tehdä tasavertaisten tai plus yhtä kuin C tarkoittaa yhtä kuin plus C, miinus yhtäläiset
C olisi yhtä suuri miinus C.
Se on vain syntaktista sokeria.
>> Eli tässä tapauksessa on yhtä suuri kuin kertaa C antaisi meille mitä?
Jälleen, ei ole temppu kysymys.
>> Opiskelija: 100.
>> PROFESSORI: 100.
Onko mitään muuta vaihtaa?
Ei.
Ehkä vihdoinkin paremmin minun -merkit.
>> Opiskelija: OK, anteeksi, miten sait 100?
PROFESSORI: OK.
Joten on yhtä suuri kuin kertaa C, joten kertaa C.
Opiskelija: Ai, sinä käytät varten previous--
PROFESSORI: Kyllä.
Joten nämä ovat viimeisimmät arvot.
Nämä ovat mitä pitäisi olla käyttäen kun siirrymme alas, OK.
Joten, b on ainoa asia muuttuu, eikö?
Joten täyttää kaikki muu.
B. Mikä on b tulee olemaan?
Ollako vai eikö olla.
Joten mitä tämä tekee?
Mikä on tähti pa tekee?
>> Opiskelija: Koodi sijainnin pa.
>> Opiskelija: Ei, ei aivan.
Joten tämä on d viite.
>> Opiskelija: Niin b luovutetaan arvo pa.
>> PROFESSORI: Joo, niin pa on osoitteen, eikö?
Niin se sanoo sinne, missä on varastoida ja antaa se, että arvo.
Joten mikä on b?
Opiskelija: 100.
PROFESSORI: 100.
Perfect.
OK, niin pc on mikä muuttuu.
Kaikki muu pysyy samana.
Mikä PC tulee olemaan?
Yksinkertainen tehtävä.
PC on yhtä pa, ja mikä on pa?
>> Opiskelija: & -merkki.
PROFESSORI: Perfect.
Nyt olemme pääsemässä mielenkiintoinen.
OK, nyt murtaa tämä yksi alas.
Ensinnäkin, mitä b kertaa C, koska se on helppo osa tätä, eikö?
B kertaa C is--
>> Opiskelija: 500.
>> PROFESSORI: Joo, niin mitä tämä tekee,
Jos se on tähti pb, mikä muuttuu?
>> Opiskelija: Mitä the--
PROFESSORI: Mitä b?
Opiskelija: Mikä avaruudessa että pb on osoittaa.
PROFESSORI: Ja PB osoittaa to--
Opiskelija: B.
PROFESSORI: B. Joten ainoa asia on vaihtoväli b, oikea.
Joten b kertaa C, 500.
Niin, että mitä muutoksia nyt.
Cool.
Lovely.
Te teette hyvin.
Okei, murtaa tämä yksi alas.
C muuttuu, eikö?
Joten voimme täyttää kaikki muu.
Katsotaanpa.
OK.
Tiedämme, että C tulee olemaan Kahden luvun, eikö?
Mitä kaksi numeroa, vaikka?
>> Opiskelija: ja C?
>> PROFESSORI: Niin on oikea ensimmäinen.
Joten olemme vrk löytymistä p, eikö?
P pistettä, joten tiedämme, että tämä tulee olemaan 100 kertaa mitä?
Kertaa mitä pc piste?
Viittaa.
Joten 100 kertaa 100 on 10.000.
Onko se järkevää?
Cool.
Loppusuoralla, kaverit, viimeinen rivi.
OK.
Mikä muuttuu täällä?
>> Opiskelija: A.
PROFESSORI: A. Perfect, joten kaikki muu voi pysyä samana.
OK.
Ja mikä on?
Joten se on aina mitä?
Tämä on tähti pb.
Joten tähti pb tarkoittaa tässä pb, pb pistettä b.
>> Opiskelija: 500.
>> PROFESSORI: 500.
Joten meillä on 500 kertaa 100.
Se on 50000.
Vau!
Katsokaa tuota.
>> Opiskelija: Miksi meillä & C last--
PROFESSORI: Anteeksi.
Opiskelija: Ai, OK.
PROFESSORI: My bad.
Paljon kirjallisesti.
Jokainen hyvä?
Ei liian huono, eikö?
Vie vain vähän vaikka työn kautta.
Jos rikot sen alas, ymmärtää, mitä kukin osa
viittaa to-- kuin kaiken sen,
yes-- murtaa se alas hieman ongelmia ja sitten recombine,
ja voit tehdä joitakin mahtavia juttuja.
On vastauksia, mutta me teimme sen.
Pointer aritmeettinen.
Ah.
Käteni ovat kaikki kalkkipitoinen.
Joten lisäämällä tai vähentämällä int säätää osoittimen
koon tyypin osoittimen.
Muistan, kuinka jokainen tyyppi on erikokoisia?
Niin kuin kaksinkertainen tai pitkä pitkä kahdeksan ja int on neljä, mutta nieriä on yksi.
>> Joten mitä haluat tehdä is-- yksi asia muistaa
on vain, että kuinka paljon osoitinarvon todella muuttuu
riippuu tyyppinen osoitin on.
Jokainen hyvä tässä?
Voinko poistaa sen?
Olemme hyviä?
Mahtava.
>> Joten jos meillä on joitakin osoitin that-- tämä tulee be-- olen
aio tehdä sitä int osoitin.
Se tallentaa tämän.
Jos sinun pitäisi sanoa osoitin plus yksi, mitä se aikoo tehdä
on se tulee päivittää sen kokoa int
koska se on tyyppinen osoitin on.
>> C, kaikki on hyvin tiukka ja säännelty.
Int osoitin tulee päivittää mukaan tilan määrä int kestäisi.
Int on neljä tavua.
>> Joten mitä tämä muuttuu?
Olet vain lisäämällä neljä päälle tämä.
Nyt osoitin olisi be-- OK.
>> Joten jos se oli nieriää ja teimme osoitin plus yksi, mikä se olisi nyt?
Jos se started-- teeskentelemällä started-- nyt se on 0x08.
Oletetaan nyt sanoa, että tämä oli char osoitin, ja lisäsimme yhden.
Mitä se muuttaa?
Kuinka monta tavua on char?
>> Yleisö: One.
>> SPEAKER 1: One.
Yleisö: Niin 0x09.
SPEAKER 1: Niin se olisi yhdeksän.
Joten jotain muistaa.
Juuri kun lisäät yhden, se ei ole lisäämällä yksi ellei se merkkiä.
Se lisätään kuinka monta tavua tyyppiä, että se on,
minkä vuoksi olemme tämä yhtälö täällä.
Joten se on int kertaa koko tyypin osoitin.
>> Joten meillä on esimerkki tästä.
Y oli määrätty, että arvo, 0x4, kun teimme y plus vastaa yhtä.
Mitä se, mitä x, ei muutu.
Mitä muutos on mitä on y.
Osoite tallennettu y päivitetty neljä koska on neljä tavua int
ja se on int osoitin.
>> Selvä.
Joten nyt meillä on toinen harjoitus.
Joten kysymys on, mitä tulostetaan.
Onko ideoita?
>> Yleisö: määrä merkkiä onnellinen kissa?
SPEAKER 1: Aivan.
Niin kuin teidän merkkijono.
Onko kaikki tuon?
Haluammeko kävellä läpi?
>> Kyllä, OK.
Eli meillä here-- I näin niin paljon enemmän.
En tarvitse [Kuultavissa] naurettavan.
>> Joten meillä on jono täällä, onnellinen kissa.
Lovely.
Meillä on joitakin laskuri Pidämme kirjaa.
Joten meillä on joitakin char * osoitin että vain asetetaan arvoon str.
Mitä tämä tekee on se osoitetaan joitakin osoitin
alkuun merkkijono.
Koska olen varma, koska se mainittiin luento,
Me olemme antaneet teille kaverit tämän tietotyyppi kutsutaan merkkijono.
>> Mutta todella jouset ovat vain array of-- kuten char *.
Se osoittimen kasan merkkejä jotka ovat vierekkäin muistissa.
Joten tämä vain asettaa se vastaa mitä tahansa merkkijonoa on
tunnistetaan, jos sen ensimmäinen kirjain.
Joten tämä on vain asettamalla jossain vaiheessa yhtä merkkijonon alusta lukien.
Jokainen hyvä siellä?
Cool.
>> Joten tämä on dereferencing meidän osoitin.
Joten se todella tulee antaa meille jotain arvoa täällä,
meidän string että puhumme.
Ja sanomme niin kauan kuin se ei ole null terminaattori.
Joten jatka kunnes saat ja merkkijonon loppuun.
Päivitä osoitinta yhdellä.
Niin R, se todella päivittää yhdellä joka kerta, koska tämä on char,
char *.
>> Niin se menee läpi.
Se tulee päivittää.
Joten ensimmäistä kertaa tässä käynnistetään, se tulee olemaan täällä h.
Se tulee päivittää.
>> Se tulee olemaan.
Se tulee olemaan p, y, ja niin edelleen ja niin edelleen.
Me päivittää laskuri.
Kun se loppuu, se vain tulostaa kuinka pitkälle se on mennyt.
Kyllä.
>> Yleisö: Niin se laskee tilaa kuin yksi, eikö?
OK.
>> SPEAKER 1: Ajattele niin.
Onko se question--
>> Yleisö: [kuulumaton].
>> SPEAKER 1: Ei hätää.
Tämän teen sen.
Okei, joten yksi asia ymmärtää, että array,
Voit myös pitää sitä osoitin koska taulukot ovat vain
jatkuva paikkoja muistia.
>> Joten voit käsitellä sitä samalla tavalla.
Voit käsitellä niitä osoittimet, liian.
Joten sen sijaan tehdä, tässä Tällöin analoginen asia
olisi array 0 on 1.
>> Mutta samalla tavalla, että merkkijono on määritetty
alkuun mennessä, jos sen ensimmäinen merkki on,
array määritetään jossa ensimmäinen alkuaine on.
Koska tiedämme, että olemme taattu, että nämä
tulevat olemaan jatkuvaa lohkot muistia.
Sitähän voimme tehdä tämän.
Tiedämme, että he jatkuvasti lohkot muistia.
>> Joten tässä tapauksessa, jonka dereferencing vain array, joka kertoo meille,
OK, siirry alkua matriisin, joka on täällä.
Joten voit asettaa sen arvoksi otetaan yksi.
Ja tässä tapauksessa, mitä teidän array tyyppi on, kun päivität sen yhden,
että on aivan kuin päivittäminen se seuraavaan indeksiin.
Voit tehdä sen, koska olet tietää mitä teidän array.
Niin se tietää kuinka paljon päivittää osoitinta,
mikä osoite päivittää sen niin että olet seuraavassa välissä.
>> Joten tämä on vain erilainen tapa kirjoitettaessa array 0 on 1,
array 1 = 2, array kiinnike 2 tuloksena on 3.
Se on vain yksi tapa ajatella asiaa.
Koska ne ovat jatkuvia lohkot muistiin,
voit viitata niihin joko jonka array notation--
josta olen itse löytää easier-- mutta ehkä
sinun täytyy käsitellä sitä tiukasti muisti osoitteita.
Ja tämä on tapa voisitte tehdä.
Tavallaan enemmän kuin viileä mitä voi tehdä
vs. ehkä ole jotain olet todella aikoo toteuttaa.
>> Käytän sitä 61.
Te luultavasti ei tarvitse huolehtia siitä liikaa.
Mutta jos olet kiinnostunut, ottaa 61 ensi vuonna.
Olemme loppusuoralla kaverit.
Tiedän, se on pitkä.
Dynaaminen muisti Allocation-- joten tiedämme, että yksi
asioita kun puhuimme aikana meidän ensimmäinen jakso yhdessä,
me katsoimme swap toiminto, jossa se oli
soveltamisalan ulkopuolella tärkein toiminto.
Ja olimme ohimennen näitä arvoja jotka olivat tehokkaasti kopioita.
>> Ja kerran swap päättynyt täytäntöönpanosta, se vain lähti pino.
Muista, meillä on pino runko swap.
Se lähtee ja ne arvoja saanut sitä.
Ja he olivat poissa.
Emme voineet tehdä mitään heidän kanssaan ja olimme surullisia
koska emme voi vaihtaa arvojamme.
>> Mutta C, kuten mainitsin, et on paljon valtaa muistia.
Joten mitä voit tehdä on voit jakaa asioita kasaan täällä
että pysyy siellä, kunnes kerrot heille toisin.
>> Ne ovat kuin hyvä lapsille.
Ne pysyvät siellä.
He eivät jätä.
Ne pysyvät siellä, kunnes olet kuten, OK, voit mennä pois.
>> Ottaa huomioon, että asiat pinoon, who-- he ovat kuin tuhma lapsille.
He vain juosta pois, kun haluat olla siellä ja sitten he ovat poissa.
Et voi saada niitä takaisin.
>> Joten kasaan is-- aiomme puhua malloc ja vapaa, joka
Olen varma, että te kuulleet luento.
Ja se on pohjimmiltaan tapa olevan erittäin pysyviä tietoja.
Joten voit pitää tiedot noin niin kauan kuin haluat.
Mhm.
>> Yleisö: Voitko määritellä kasaan ja pino?
Ovatko he haluavat paikkoja laittaa asioita?
>> SPEAKER 1: Niin he pohjimmiltaan just-- he
Muuten puhumme vain muistiin.
Joten kasaan vain paikoissa, joissa muistista on dynaamisesti,
ottaa huomioon, että pino viittaa lisää pino kehyksiä
jotka ovat keskeisiä toimintoja, jotka ovat todella käynnissä.
Et todellakaan ole määräysvaltaa.
>> Suuri ero, sinulla on valvoa kasan päälle, jos haluat.
Sinulla on vähemmän keinoja valvoa pino.
Pino riippuu toimintoja, jotka ovat käynnissä,
ja järjestyksessä, jossa ne ovat ajaa, ja miten asiat palautetaan.
Taas kasaan, koska näemme, voit sanoa,
OK, haluan tämän arvon olevan noin kunnes kerron teille toisin.
Sinulla ei ole oikeutta päästä eroon siitä.
Et saa ohittaa sitä.
Aiot pitää sen ympärillä niin kauan kuin minä sanon.
Saat olla pomo kasaan, ottaa stack-- ehkä jos
kuten finagle tiesi voit olla pomo.
Mutta ei aivan.
Ja se on oikeastaan ​​vain muisto.
Se on vain eri tavoin viitata muistia.
>> Cool.
Niin, että, miten ohjata muistia.
Se on kanssa malloc, joka aiot saada käyttää.
Joten se on vain lyhyt muistin jakamista.
Sitä se vain on.
On joukko muita hienoja toimintoja, jotka ovat alloc lopussa,
ja he edustavat eri asioita.
>> Joten kun tarvitset varastointi, joka tarvitsee Outlast nykyinen toiminta, jotta
että kun nykyinen toiminto pakenee,
sinulla on vielä tietoja, jotka olet sai siitä, haluatko käyttää malloc.
Se tulee alustaa se kasaan.
Ja kuten sanoin ja pitää sanomalla, sinun pitää se siellä
ennen kuin kerrot sen toisin, mikä on tärkeintä tässä.
>> Niin yksi asia huomata, ja se on yleensä todella tärkeää,
on, että tämä sizeof on erittäin hyödyllistä käyttää
koska riippuen Koneen näytät,
se voi olla vaihtelevia määriä Muistin, että se kestää.
Niin haluat aina käyttää koko niin että et ole kone riippuvainen,
niin, että koodi ajaa millä tahansa koneella.
>> Ja tämä on vain osa kirjoittaa hyvää koodia.
Jos se toimii yhdellä koneella, mutta ei mitään muita,
kuinka hyödyllistä oli ohjelman?
Niin haluat aina Varmista ja käyttää sizeof.
>> Yleisö: Niin on, että kuten koko 10 tuumaa [kuulumaton]?
>> SPEAKER 1: Tämä on koko 10 ints.
joo.
Joten koko Ints palaa Kuinka paljon int kestää.
Tai koko char, miten Paljonko yksi char ottaa.
Ja sitten kuinka monta lohkojen Tämän sinä haluat?
>> Joten tässä tapauksessa, haluamme jotain että voimme varastoida 10 ints kohteeseen.
Ja se toimii riippumatta kone, joka on viileä.
Niin kuinka monta tavua jotka todella antavat sinulle?
Lyhyt matematiikka.
>> Yleisö: 40.
SPEAKER 1: 40.
Täsmälleen.
Niin toinen iso juttu.
Pointer tai malloc voi palauttaa null.
>> Joten jälleen, aina tarkistaa katso jos se palautetaan null
ennen kuin yrität ja tehdä sille mitään.
Jos yrität ja dereference Tämän osoittimen nyt
se on juuri menossa segfault koska menit ja kokeillut
koskettaa null, kun sinun ei pitäisi olla.
Joten aina tarkistaa null.
Jälleen, kaikki mitä voi tehdä.
>> Se saattaa palata null.
Se tulee palauttaa null, jos olet joko tila loppuu, tai mistä tahansa syystä
se törmäsi muistiin bug.
Joskus vain palauttaa null.
Joten sinun tarvitsee vain tarkistaa sitä.
Siinä kaikki tämän dian sanoo.
Ja sitten, mitä meillä on Tässä on kutsu ilmaiseksi.
Niin samalla tavalla, että jos Avaa tiedosto pitää sulkea tiedoston,
jos malloc muistia, teidän täytyy vapauttaa, että muistia.
Ja te saat tehdä todella hienoja juttuja.
>> Ja siellä on ohjelma, voit ajaa katso jos olet joskus vuotaa muistia.
Mutta et halua vuotaa muistia.
Se on todella huono.
Vain sotkea asioita.
>> Se on huono tehdä juuri kuten ohjelmointi viisasta suunnittelun tehokkuutta.
Mutta se on myös vain eräänlainen huono tietokoneellesi.
Joten vapaa asiat kun malloc niitä.
>> Näittekö symmetriat täällä.
Super yksinkertainen.
Vain vapaa ja sitten Mikä tahansa osoitin,
mikä nimi osoitin on, ja se
huolehtivat vapauttaa sen sinulle.
Cool.
>> Sitten meillä on tämä.
Joten olemme juuri menossa kulkea tätä ohjelmaa.
Ja sitten te olette tehneet.
>> Joten [äänetön] vain tärkeimmät.
Joten meillä on joitakin int * osoitin.
Joten meillä on osoitin että menee pitämään ints.
Ja kuinka monta ints se aikoo järjestää?
Vain yksi.
Koko int.
>> Me tarkistaa, onko osoitin on nolla, koska se
on, haluamme sanoa älä tee mitään.
Se on huono.
Joten me painamme jokin virhe ulos muisti, useimmiten palaa 1,
kuten te käytetään.
>> Ja sitten meillä on täällä, me dereference meidän osoitin.
Niin se tarkoittaa, että me aiomme säilyttää jotain sijainti annetaan meille.
Int * osoitin tai malloc, palauttaa osoite, jossa se kumosi tämän
muisti sinua.
Joten se on pohjimmiltaan antaa sinulle like-- jos
ajatella nippu taloja naapurustossa
että haluat laittaa teidän huonekalut, malloc
on kuin OK, saat mennä taloon kolme.
Ja se antaa sinulle osoite talossa kolme.
>> Joten tämä nyt, tämä osoitin tallentaa osoitteen,
tallentaa osoite talosi.
* Ptr keinoin, OK, olen kotonani.
Cool.
Minun täytyy saada joitakin kokonaisluku.
>> Joten pyydät jotakuta antaa sinulle huonekalujen nyt.
Niin saat noin int.
Ja se laittaa sen osoitin jos se osoittaa.
>> Ja sitten se vain tulostaa ulos, annoit missä.
Ja taas, viittaus.
Joten tämä on kuin menit tämän käsitellä ja näit, mitä siellä oli.
Cool?
>> Ja sitten tietysti me vapautamme meidän osoitin.
Älä unohda vapauttaa osoittimen.
Älä unohda tarkistaa null.
Älä unohda vapauttaa osoittimen.
Sinulla on kaksi asiaa muistat tämä, tai että sinun pitäisi muistaa.
Kyllä.
Yleisö: [kuulumaton] juttuja niin, char * s.
Miten ihmeessä me koskaan vapauttamaan?
>> SPEAKER 1: Hm?
>> Yleisö: Ovatko nuo kuten jouset?
Sanoit jouset ovat aivan kuten char * s, eikö?
Joten miksi emme tilaa jouset?
>> SPEAKER 1: Sinä vain ilmaiseksi, jos olet mallocing.
Yleisö: Voi, jos olet mallocing.
SPEAKER 1: Niin malloc ja ilmainen ovat kaksi asiaa
että sinun pitäisi aina olla yhdessä.
f avoin, f lähellä, kaksi asiaa sinulla pitäisi olla yhdessä.
Molemmissa näissä tapauksissa, tarkista null.
Kyllä.
>> Yleisö: Niin vapaa on vain huomasi jotain muuta
varastoidaan siellä jälkeen tämä ohjelma on käyttänyt sitä?
>> SPEAKER 1: Se on vain sanomalla, OK, olen tehnyt tämän.
Sinun ei tarvitse pitää sitä noin.
Muuten tietokone aivan kuten yrittää pitää se siellä.
Ja sitten can't-- se toimii muistiin asioita myöhemmin.
Haluat aina vapauttaa, koska se kertoo tietokoneen, OK, olen
tehnyt tämän paikan muistia.
Voit olla se takaisin minun käyttää myöhemmin.
Cool?
Kyllä.
>> Yleisö: Joten käytimme% d juuri koska kaksinkertainen, joka on tulossa takaisin,
tai miksi is-- [kuultavissa].
>> Yleisö: Voitko käyttää% i?
>> SPEAKER 1: Voit käyttää% i.
Viime hetken kysymyksiä?
Menkää.
Yleisö: Minulla on vain lyhyt kysymys.
Joten PTR muuttuja, that's-- vastaavat, int * ptr = malloc,
että on vain sano, että se osoittaa paikka memory--
SPEAKER 1: Haluatko [kuulumaton]?
Yleisö: --that on koko of-- mitään, se on OK.
Mutta se on vain osoittaa paikka muisti, joka on aivan kuin neljä tavua.
SPEAKER 1: Oikea.
Joten malloc koko int sanoo, OK, aion mennä ajaa pois,
löytää neljä tavua muistia sinulle.
Kun se toteaa, että neljä tavua muistia, se
, antaa sinulle takaisin osoitteeseen missä se alkaa,
ja sitähän tallennettu Pointer tai PTR.
Hyvä.
Te näyttää vähemmän sekava kuin useimmat ihmiset kun puhun osoitin,
joten tunnen melko hyvä juuri nyt.
>> Selvä.
Kuten aina, te pitäisi olla kaikki saanut oman pset2 laadut mennessä.
Tiedän, että on ollut joitakin hutera asioita, jos se sanoo, kaava ei kelpaa
tai jotain.
Jos saat, että kaikki teidän laadut ovat voimassa minun puolellani.
Jotta voin lähettää sinulle ruutukaappauksia laadut.
Juuri minulle niin hyvin, jos olet puuttuu kaikki laadut tai jotain
ei tunnu järkevältä.
Tule luokseni.
>> Olen ollut erittäin ylpeä sinusta kaverit jo, joten keep it up.
Ja on hyvä loppuelämäsi viikolla.
Olen varma, että näet joitakin teistä toimistossa tuntia.