>> [Theme muzika]
>> SPEAKER 1: Sveiki, visi.
Sveiki sugrįžę į skyrių.
Lovely day out-- todėl aš tikiu, Žinoma, yra tik keturios iš jūsų čia
o ne mūsų įprasta pakuotė.
Buvau ligonis šį savaitgalį.
Taigi aš neturiu Starburst jums vaikinai.
Ir aš gali pradėti kosėti siaubingai visoje tai.
Taigi tiesiog būti su manimi.
Aš ruošiuosi tikrai pabandyti ir gauti per tai, pirma,
nors, kol aš turėti kosulys priepuolis.
Bet tik lengva man į mažai bit-- kad viskas, ką aš paklausti.
>> Taigi, mūsų darbotvarkė today-- tiesiog reminder-- jūsų viktorina kitą savaitę.
Sakiau jums šį praėjusią savaitę, todėl nebūtų sugauti jums užklupti.
Taigi, aš priminti jums dar kartą.
Kitą savaitę jūsų viktorina.
Tuo tikslu kitą savaitę skyrius bus daug daugiau
of-- bandysiu ir darbas kai kuriose peržiūros.
Taigi, jei jus vaikinai galėtų padėti man siunčiant manimi
dalykų, kad jūs patogiai su, kad esate susirūpinę,
temos, kuriomis norite už man padengti, kad būčiau didelis.
Taigi aš galiu pabandyti ir dirbti jiems į mūsų skyrių kitą savaitę
arba siųsti Jums papildomos medžiagos ar prep kad jūs negalite gauti kitur.
>> Taip!
Vis daugiau žmonių ateina!
Maniau, aš padariau, kad blogai paskutinis savaitę, kad niekas nenori grįžti?
Aš bijau.
Taigi kitų trijų dalykų kad mes ketiname pereiti
yra nukreipimas, failo I / O, ir tada nurodymus ir dinaminės atminties.
Aš tikiu, kad jūs visi super sujaudintas pointers-- visiems mėgstamiausia tema,
taip paprasta suprasti.
Aš tikiu, kad jūs vaikinai visi turime, kad, tiesa?
>> Taigi Pirmasis dalykus, redirection-- tai iš esmės yra tik būdas
kontroliuoti, kaip jūs įvestį daiktus į savo programą,
Kaip jūs išvesties dalykų iš savo programos.
Pagrindiniai būdų, kad jūs vaikinai buvo su juo bendrauja
tik per standartinę out su spausdinimo ekrane čia.
Tačiau yra būdų, kaip pipe-- kaip matome čia
yra vienas iš mūsų words-- rūšies Vamzdžio kad informacija
arba kad duomenys į ir iš failo failo.
Tai tiesiog skirtingi būdai gauti dalykų į savo programą
ir iš jūsų programos, vietoj tiesiog jų spausdinimą į šį ekraną
ar įvesdami dalykų iš komandinės eilutės.
>> Taigi pirmasis yra mažai didesnis nei ženklu «.
Taigi output-- jis tiesiog spausdina produkcija į failą, o ne ekrane.
Taigi, jei jums buvo kažkas, kad spausdinta "Sveikas, pasauli!" į ekraną,
jei jūs įtraukėte ją vietoj į output.text, kad
sukuria šį failą pavadinimu output.text.
Ir kai jūs jį atidaryti, jis bus sako: "Labas, pasauli!" ten.
Tai gali būti itin naudinga jei turite klaidų tona
iš tikrųjų, kaip matome šį vieną.
Jei tai padarysite du žymekl, jis bus spausdinti pranešimus apie klaidas.
>> Taigi jei turite problemą su kaupimas, ji turi daug klaidų
ir gaunate įklimpo bando slinkti į savo komandinės eilutės
Per visą jų, galite tiesiog atsispausdinti juos į failą,
atverti šį failą taip, kad jums galite slinkti per juos lengviau.
Aš iš tikrųjų naudojamas, kad daug, kai man buvo derinate
mano 181 psets už mašina mokymo.
Todėl ji gali būti super naudinga vėliau.
Tai taip pat naudinga, jei turite programą kad gal generuoja biblioteka
arba generuoti šiek rinkinį Stygų, ir jūs
reikia, kad būtų galima matyti, kad jis generuoja juos tinkamai.
Tai yra būdas, kaip tai padaryti.
>> Taigi, jei jūs juos spausdinti į failą, jus gali lengviau juos išnagrinėti, ar ne?
Versus bando slinkti per savo komandinės eilutės.
Ir tada vienas dalykas, reikia pažymėti yra tai, kad vos didesnis
nei ženklu «, jei rašote į failą, kad jau exists--
taip, pavyzdžiui, jei mes bėgo tai pirmasis laikas, mes įdėti ją į output.text,
ir tada mes turėjo antrą programą kad spausdinama tai, kaip programa dviejų
ir padarė didesnę nei output.text, jis bus perrašyti that-- taip
perrašyti tai, kas buvo kada nors kad byla nuo pat pradžių.
>> Taigi, jei norite pridėti į failą, kaip matome čia,
jūs tiesiog padaryti du didesni už ženklai.
Ir tai bus pridėti į jį.
Jis nebus perrašyti.
Taigi, jei jums reikia paleisti kelis programos ir rūšis laikyti
stebėti, ką visi jie yra grįžti į jums į failą,
tai kaip tai padaryti.
Jei jums nereikia rūpintis, kas yra jūsų failas ir tai leido perrašyti,
Jūs galite tiesiog naudoti vieną didesnis nei.
Ar tai prasminga visiems?
>> AUDITORIJA: Kaip dot slash labas didesnis nei išėjimas dot tekstą, kaip du kartus,
jis bus tiesiog parodyti tik produkcijos dot tekstas antra LAIKĄ_
>> SPEAKER 1: Teisė.
Todėl būtų iš esmės tik visiškai perrašyti tai, kas buvo ten nuo pat pradžių.
Jei šio failo čia output.text jau
egzistuoja, iš esmės viską, ką vadiname kad vėl su vienu Greater
nei galite tiesiog galvoti apie tai, kaip, kaip jis pakeitė failą.
Pavyzdžiui, kai Jūs sutaupysite Word dokumentas ir jūs sutaupyti,
ir jūs išlaikyti tą patį pavadinimą, jis visiškai perrašo it--
tai tos pačios rūšies dalykas.
Kiekvienas turi kokių nors klausimų dėl tiesiog išvedė į failą?
Nuostabus.
>> Taigi akivaizdu, jei atbulinės eigos rodyklės kryptimi, tai gali padaryti įvestį.
Taigi, kai jūs vaikinai turėjo kaip Cezaris ar VISIONEER
ir jums teko įvesties kažką, jūs turėjote komandinės eilutės argumentas
kad iš tikrųjų įėjimo jis.
Tai dar vienas būdas, kaip tai padaryti.
Taigi, o ne laukti už komandinę eilutę,
pavyzdžiui, kai prašėte žinutę Cezaris ar VISIONEER,
jei turėjo tekstinį failą kad gavau jūsų laišką,
galima tiesiog įveskite jį į tą.
>> Taigi, jei tai buvo kaip dot slash Cezaris Mažiau nei 3 rodyklės įvesti tekstą, kuris
Jūsų žinutė, kad būtų paleisti tik baudą.
Kai jūsų Cezaris programa iš tikrųjų paprašė iš įvesties vartotojui,
ji jau turi, nes Jūs įvedėte šį failą.
Tai tik dar vienas būdas.
Tiesiog output-- atvirkštinis tiesiog įvesties savo duomenis.
>> Ir tada paskutinis yra vamzdis.
Taigi tai vienas gana kietas.
Nes jis leidžia jums imtis vienos išvestį
programa, ir įdėti jį kaip indėlis į kitą programą.
Aš nežinau, jei kas nors iš jūsų grojo su iššifruoti
kad CS50 gali turėti davė jums, bet ji
leidžia priimti keletą pavyzdžių file, įrašykite jį į savo šifravimo,
ir tada iš ten įrašykite kad į savo iššifravimas
įsitikinkite, kad jis pasirodė esąs pats.
Taigi, tai lyg trišakio kilpą.
Eiti į jį.
>> AUDITORIJA: Jei programa turi kelis įėjimus,
Ar yra būdas jį priskirti įvesties pasakyti naudoti tekstinį failą arba išėjimas?
>> SPEAKER 1: Jis turi daug sąnaudų.
Nepriklausomai paduoti input-- kai tai prašo įvesti tą pirmą kartą, tai
įgaus Manau, kad tai ketina vamzdis su visa bylos medžiaga.
Taigi, jei turite daug sąnaudų, jūs bus vamzdžiais kelis failus.
Taigi, jei esate klausia pranešimų tris kartus savo kodą,
jūs ketinate būti išleisti trijų skirtingų failus.
Ir jis gauna iš proto.
Ir jūs neturėtumėte jaudintis, kad dabar.
Bet tai idėja.
>> Taigi, taip, vamzdis vos išėjimo vieno Programa naudoja indėlį į kitą.
Kiekvienas geras ten?
Cool.
Gerai.
Jūs tikriausiai neturite padaryti per daug su juo.
Bet jūs turite suprasti, būdų, kaip jūs galite naudoti šią.
Ir yra keletas atvejų, kad galbūt norėsite jį naudoti.
>> Taigi byla I / O-- Aš žinau, ką jūs saying-- mes įpratę skaityti nuo
ir raštu mūsų ekrane ten, tai, koks standartas ir etalonas out.
Ir tai, ką jūs vaikinai buvo daro nuo klasės pradžioje čia.
Bet jūs taip pat galite skaityti ir rašyti failus, kuris yra visų failų įvesties / O-- paveiklėlio įvestį,
produkcija yra visa tai reiškia.
Taigi tai iš esmės reiškia, kad Jūs galite išsaugoti savo duomenis dabar.
>> Kai jums tiesiog atsispausdinti jį ekranas, tai iš esmės dingo, tiesa?
Kaip tik jūs "Hello pasaulis "ir paleisti" Hello world "
jis spausdina "Hello World" į ekraną.
Bet jūs tikrai negali padaryti nieko su juo iš ten.
Jeigu saugote tekste failą, tada staiga
Jūs turite duomenis, kad jums leidžiama manipuliuoti arba įdėti jį į failą,
arba įdėti ją į programą vėliau.
Viena iš priežasčių, kodėl mes darome tai tik
kaip būdas saugoti asmens duomenis vėlesniam naudojimui.
>> Turiu pora žingsnių čia tiesiog vaikštinėjo standartas
I / O. Vieną žingsnį, jūs reikia sukurti nuorodą
į failą su visa kepurės FILE žvaigždė failą.
Kad sukuria žymiklį į failą.
Taigi jūs norite jį atidaryti.
Ir tu sakai, pažodžiui, tiesiog failas lygus fopen.
Ir tai vyksta grįžti žymiklį į failą, kurį ką tik atidarė.
Mačiau jus pora vaikinai darbo valandomis.
>> Bet vienas iš dalykų, yra remember-- patarimų
gali būti šiek adresas arba niekinis, tiesa?
Jei mes kada nors tuo atveju, kai kažkas gali grįžti null,
ką mes turime daryti, kol mes niekada juo naudotis?
Mes turime patikrinti, ar tai niekinis arba ne, tiesa?
Nes kai kurie iš jūsų galėjo Kitas klausimas, kur ir kokia objektas
buvo grąžintas Breakout buvo niekinis.
Jūs mėginate atlikti kai ant jo funkcija.
Ir kompiuteris svetainė yda.
Teisė?
Galiu lažintis iš jūsų pora galėjo jį išspręsti.
>> Taigi su fopen, fopen bus arba grįžti rodyklę į failą,
arba jei kas nors negerai, jis ketina grįžti null.
Taigi jūs visada turite patikrinti kad ji nėra grąžinami null
prieš bandant ką nors daryti.
Tai, kaip ir standartinis paradigma kad jūs ketinate reikia čia.
Jei yra nors tikimybė, kad kažkas gali grįžti null,
įsitikinkite, kad nėra prieš tęsdami.
Priešingu atveju, jūs ketinate gauti gražių svetainės gedimus.
Ir niekas mėgsta elgtis su tomis.
>> Taigi, kaip mes matome čia, pirmojo argumento yra tik iki failo.
Jeigu ši byla neegzistuoja, jis ketina sukurti šį failą.
Ir tai tik bus tuščias.
Ir tada antras argumentas yra būdas, kad jūs norite.
Ar norime, kad skaityti iš šio failo?
Ar norite parašyti iš to?
Ar norite pridėti?
Taigi iš tikrųjų tai, ką aš ką tik said-- jei failas neegzistuoja
ir bandote skaityti jis, ji ketina mesti klaidą.
Jei failas name-- patinka jei file.text dar neegzistuoja
ir norite rašyti į jį, ji sukurs
tuščias failas, vadinamas file.text jums.
Ir jei norite pridėti, jums reikia padaryti tą patį.
Ar tai prasminga?
Jei bandote skaityti iš Failas, dar neegzistuoja,
jis bus mesti klaida.
Priešingu atveju, ji sukurs failą jums tai, ką jūs norite jį.
Cool.
Dabar mes galime skaityti iš failo.
Ir tai tiesiog rūšies eiti per įvairių funkcijų
kad mes turime failą I / O. Ši valis būtina šią savaitę pset,
jei teisingai pamenu.
Taip, tai tikrai bus būtina šią savaitę pset.
Taigi fgetc grąžina kitą simbolį.
fgets tiesiog grąžina teksto eilutę.
Jis grįš nieko iki Naujoji linija, ir ji bus pertrauka.
Taigi fread skaito tikras baitų skaičius ir vietų jiems
į masyvą, kuris yra tai, ką gali
norite daryti su naujo size-- gali būti naudinga.
>> Kiek žmonių skaityti pset spec, beje?
Gerai.
[Nesigirdi]
>> SPEAKER 1: Gerai.
Gerai.
Tikrai skaityti that-- tai įdomus pset.
Gauni susigrąžinti ištrintą atmintį card-- tikrai įdomu, kai jis veikia.
Bet tikrai, pradėti skaityti, kad.
Ateikite pasikalbėti su manimi, jei jums turite klausimų apie tai.
>> Gerai, kad aš sakiau, fread skaito tam tikrą baitų skaičių.
Štai keletas kokiam kad jūs ketinate nustatyti.
Ir tada fseek tik juda į tam tikras pareigas.
Tai gal tu nerūpi apie ateinančius 10 baitų.
Jūs tiesiog norite praleisti į priekį.
Jūs nerūpi tie.
Norite skaityti pradedant baito 11.
fseek leidžia tai padaryti.
Todėl leidžia atsirinkti apie tai, ką jūs skaitote.
Nes fgetc, fgets ir fread perskaitytą iš tam tikros vietos į bylą.
>> Būdas galvoti apie tai, jei tai Mūsų failą, kai jūs pirmą kartą atidaryti,
turite šią poziciją failą kuris prasideda ne pradžioje.
Kiekvieną kartą, kai skambinate fgetc, fgetf arba fread,
jis ketina pradėti nuo ši pozicija žymeklis.
Tarkime, jūs tiesiog norite skaityti Šis atminties riekė čia.
Jūs galite ne tik skambinti.
Turite kreiptis per čia ir tada skaityti iš ten
ar skaityti, gauna arba getc, priklausomai nuo to, ką norite.
Taigi ieškoti tik leidžia jums praleisti porcijas atmintį.
Ir tai tik Taip galite praleisti dalykus
neskaitęs juos į savo buferio.
Ar tai prasminga visiems?
>> Akivaizdu, kad tai daug lygiagrečiai here--
Mūsų produkcija arba įėjimas nukreipimas, Jūs skaityti ir rašyti.
Taigi fputc tiesiog rašo charakteris į failą.
fputs rašo liniją.
Fprintf spausdina Formatuotas.
Taigi, jei turite skirtukų, ar vietos arba Papuošalą.
Ir tada fwrite rašo kai masyvas baitų failą.
Taigi tai yra tas pats būdas fwrite ir fread yra analogiški
opposites-- fgets, fputs ir tada fputc ir fgetc-- sklypai
crazy, greitai dalykų.
>> Tiesiog rūšies išlaikyti šią handy-- turėsite įvairių kartų
kur gal jūs tiesiog norite vienas simbolis vienu metu.
Gal norite visą eilutę.
Su savo žodyno pset-- kurį sudaro dvi psets,
Manau, mes suteikiame Jums visą žodynas teksto formatu
kuri kiekvieną žodį atskiriami linija.
Taigi, jei norite skaityti į vieną žodį vienu metu,
Kas gali naudoti, jei jūs skaitote ir jie visi yra atskirtos naujų linijų,
ir jūs tiesiog norite vieną žodį vienu metu?
>> Auditorija: Fgets
>> SPEAKER 1: Teisė.
Fgets-- nes grįžta kokia yra vienoje eilutėje.
Ir jei kiekvienas žodis yra jos savo linijos, mes galime naudoti fgets.
Cool.
Ar tai prasminga, visi?
Cool?
Taip, mes ketiname gauti įdomus dalis su rodyklėmis
labai greitai, kur jums gauti padaryti kai matematiką.
Ir tai bus puikus.
>> Paskutinis step-- uždaryti bylą.
Su tiek daug dalykų čia vienas iš mūsų paradigmų
jei ji gali grįžti null, patikrinkite null.
Jei atidarote kažką, jūs geriau uždarykite.
Gerai, kad jūs ne padaryti, kol jūs padaryta, nebent jūs ją uždarė.
Tipo kaip tai ne per kol Fat Lady dainuoja.
Štai kaip uždaryti savo failą.
Kaip ji sako čia, tiesiog visada pakartoti,
atidaryti failą, kol Jūs skaityti arba rašyti į jį.
Ir visada uždarykite jį, jei jūs jį atidarė.
Viskas gerai?
Cool.
>> Taigi čia pavyzdys.
Taigi tiny-- aš nežinau, jei jums vaikinai galite pamatyti, kad labai gerai.
Jei tik mes galėtume padidinti ryškumas kažkaip.
Leiskite tikrųjų tai padaryti, jei aš galiu.
Gerai, vaikinai tikrai negali matyti, kad ne visi, jūs galite?
Gerai, kad mes ketiname tai padaryti, tada.
[Nesigirdi]
>> Manau tai yra daug geriau matyti.
Ar kas nors pamatyti, kur mano pelė nuvyko yra klausimas?
Ak, ten jis is-- kas kovoja!
>> Gerai.
Iš esmės, jūs vaikinai turėtų turėti geras iš to, ką ši idėja daro.
Ji nėra tobula.
Bet aš mieliau paaiškinti nei praleisti daugiau laiko bando formatuoti tinkamai.
Iš esmės, kaip matote čia, pradėsime atidaryti failo.
Ir mes kai duomenų bazės failas, kad mes esame
atidarius sako, kad mūsų studentai.
Ir mes ketiname jį rašyti.
Taigi žinoma, grįžti null.
Taigi, mes turime patikrinti null.
Ir tada, jei tai ne null, mes pereiti.
Ir, kaip matote, mes apsisukimo per čia.
Yra studentų.
Studentai yra maišos apibrėžiama kaip trijų.
Ir tai, ką mes darome, yra mes spausdinti į failą, ar ne?
Taigi, ką mes spausdinti mūsų faile?
>> AUDITORIJA: Balai kad yra masyve?
>> SPEAKER 1: Taip.
Balai, kurie yra array-- tiksliai.
Taigi, mes pradedame tai duomenų bazės failas, kuris
Manau yra kažkokios KLASIŲ bazę.
Ir mes tiesiog atspausdinti balai kiekvienam studentui į tą bylą.
Cool?
Geras.
Nuostabus.
Gerai.
Grįžkime to--
>> AUDITORIJA: Turiu greitą klausimą.
Ar printf ne už kilpos?
Tai tiesiog IF kilpa?
SPEAKER 1: Ne, tai iš už kilpa.
Aš nematau savo pele labai gerai čia.
Taigi, aš sunkiai formatas, tinkamai.
Šis laikiklis turi būti perregistruotas.
Ji turėtų būti žemyn čia.
Tai yra tai, ką yra jūsų for ciklas.
Yra.
Dabar tai gana.
Štai kaip jis turėtų be-- išskyrus už pastarojo laikiklio, kad aš atleistas.
Gerai.
Ar tai prasminga visiems?
Gerai.
Mes ketiname pereiti į kitą dalyką then--
kuris, iš tikrųjų, jūs ketinate iki reikia pamatyti kodą.
Taigi, aš tik ketina kopijuoti, kad per dabar.
Gerai.
Taigi, aš ketinu parodyti jums, vaikinai, šis kodas.
Ir aš noriu pabandyti ir figūra , kas tai turėtų daryti.
>> Taigi suteikta that-- trukti minutę ar dvi.
Išbandykite ir išsiaiškinti, kas čia vyksta.
>> Any ideas?
>> Mes žinome, kad mes turime ne mažiau kaip du argumentai komandinėje eilutėje, tiesa?
Manau vienas iš kurių bus kad [nesigirdi] iš mūsų programa yra
ir tada kažkas.
Nes jei [nesigirdi] yra mažiau negu du, mes klykauti į juos.
Teisė?
Ir nuo naudojimo, jis atrodo tai bus kai faile rūšiuoti.
Mes visi sutinkame, kad?
Taigi, dabar, kas kilpa daro?
Kas tai išgyvena?
>> AUDITORIJA: Visi failai.
SPEAKER 1: Būtent.
Jis išgyvena visi failai, mes įvesti ten.
Taigi kiekvieno failo, tai atverdama kai eilutę ten.
Tai atveria failą.
Teisė?
Ir tai skaityti iš jos.
Žinoma, tikrinti, ar tai null.
Ir tada jis nespausdina.
Jei tai niekinis, tai tik mums, kad tai ne failas, egzistuoja.
Nes atsimenu, su Skaitykite mūsų failas turi egzistuoti.
Teisė?
Su rašyti ir prideda, jūs galite išeiti su juo.
Bet skaityti mūsų failas turi egzistuoti.
>> Ir tada, jei jis egzistuoja, Ką mes darome čia?
Tegul tik prasideda čia.
Kas tai do-- šį pirmąjį simbolį.
Ką jis daro?
Jis gauna vieną simbolį, tiesa?
Taigi, kas tai daro?
Tai vis pirmąją raidę.
Kiekvienas žino EOF?
>> AUDITORIJA: failo pabaiga?
>> SPEAKER 1: pabaiga file-- lygiai.
Taigi jis ketina eiti per Visas failo, tiesa?
Ir tada jis ketina atnaujinti iki gauti kiekvienais paskesniais charakterį.
Teisė?
Ir kas tai daro?
AUDITORIJA: Eksploatacijos kad in--
>> SPEAKER 1: Putchar atspaudai Jūsų ekrano užsklandą.
[Nesigirdi] personažas.
Ir tada, kai ji [nesigirdi] tai bus uždaryti bylą.
>> AUDITORIJA: Ar jums nereikės [? nors? ?]
>> SPEAKER 1: Nebūtinai.
Aš turiu galvoje, tai tipo numanomų tai.
Kadangi šis grąžina, nors, kaip ilgai nes tai pagauna ne tai, tu gerai.
Aš turiu galvoje, tai tikriausiai gera praktikuoti tai yra kitas.
Bet dar ne visada reikia ypač
Jei turite kažką kaip grįžti, kuris
reiškia, kad šiuo atveju, jei ji sugavimus tai, jūsų programa ketina baigti
ir ji niekada gausiu tai.
Tai daugiau už bylą, kurioje esate nebūtinai grįžti kažką.
Nes jei tai buvo ne grįžti nieko,
tai reikštų, kad jei tai būtų tiesa, tai pasaulyje būtų dar paleisti.
Ir šiuo atveju, jūs norėtų klaidinga.
Jei jis grįžta, ir Jūsų programos pabaiga,
kita yra nebūtina visi laikas, priklausomai nuo konteksto.
Jokūbas, tu turi klausimą?
AUDITORIJA: Taip.
Taigi, nėra fgetc gauti kitą simbolį?
Kaip simbolis padidinti?
SPEAKER 1: Taip.
Taigi fgetc gauna kitą simbolį.
Jūs galite galvoti apie tai, kaip C ++, tam tikra prasme.
>> AUDITORIJA: Taigi, kas buvo EOF?
>> SPEAKER 1: EOF yra failo pabaigos.
Tai tiesiog žymeklis, kad leidžia jums žinoti, kad esate ne savo failo gale.
Taigi tai ketina spausdinti Jūsų standartą išorę.
Ir tada jis ketina uždaryti failą, kai tai daroma.
Ir tada eime Kitas failas, tiesa?
Taigi apskritai ką ši programa daro?
>> [Nesigirdi]
>> SPEAKER 1: Taip.
Jis tiesiog spausdina viską ten.
Taigi, jei jus vaikinai niekada CAT ir tada kai kurių file-- pavadinimas
Aš nežinau, jei kas nors iš jūsų turite nors padaryta, kad ant jūsų terminale.
Bet jei jūs kada nors naudoti komanda CAT-- C--T--
ir tada viską failą turite there-- jį
spausdina jį į savo terminalą, kuris gali būti itin naudinga, jei kai kurių dalykų.
Aš tai daug naudoja.
Ar tai prasminga visiems?
Cool?
>> Gerai, kad jūsų užduotis now-- nei patys arba su aplink you-- žmonių
yra tiesiog parašyti paprastą programą kad bus tiesiog parašyti "Hello, World!"
iš į failą.
>> [Nesigirdi]
>> SPEAKER 1: Aš, pavyzdžiui, darė Aš padaryti, kad blogai, praeitą savaitę?
Aš ne manau, kad buvo taip blogai.
Džiaugiuosi jūs visi čia.
Jis tikrai daro mane laimingą.
Aš paprastas malonumų mergina.
Aš tik norėčiau kai mano skyriuje lanko.
Taigi, aš tiesiog gauti tai Prasidėjo vaikinai, kad galėtume kodą kartu.
Man nepatinka išleisti NIEKAM vietoje, nebent norite būti.
>> AUDITORIJA: Dėl viktorinos, padaryti turime parašyti programą?
>> SPEAKER 1: Jums gali būti paprašyta rašyti paprastus programas rankomis.
Yup.
>> AUDITORIJA: viktorina kitą savaitę, ar ne?
>> SPEAKER 1: viktorina yra kitą trečiadienį.
Tai reiškia, kad ten yra puikus [? CSE?] šalis klasifikavimo vėliau, kuris
reiškia, kad jūs gausite savo balus atgal, kad night-- kokiu laiku?
Kas žino?
Bet tai bus, kad naktį.
>> Gerai.
Kaip mes norime pradėti šį?
Aš duosiu jums hint-- prasideda šiuo.
>> AUDITORIJA: Turite atidaryti failą.
>> SPEAKER 1: Taip.
Taigi, ką jūs norite tai vadina?
Ar jūs tiesiog norite jį pavadinti "failas"?
Padarykime tai lengva.
Taigi fopen-- koks mūsų išėjimas testas bus?
Vadina jį "Hello".
Ir kas yra mūsų būdas?
Ką mes darome, kad šią bylą?
>> AUDITORIJA: Skaityti.
Rašymas.
SPEAKER 1: Rašome norėdami ją.
Gražus.
Gerai, kad mes turime šį failą dabar.
Ką turime daryti?
AUDITORIJA: Patikrinkite, ar tai null.
SPEAKER 1: Patikrinkite, ar tai null-- tiksliai.
Štai ką aš norėčiau išgirsti.
Kad turėtų būti automatinis, ypač gana daug iš šio taško.
Jei pradėsite segfaulting, tikriausiai nepatikrino NULL kažkur.
Devynis kartus iš dešimties, tai bus jūsų klaida.
Taigi, jei jūs tiesiog gali gauti įprotis, visada patikrinkite, ar jis niekinis,
tavo gyvenimas tai bus gražus ir easy-- ar lengviau.
>> Todėl patikrinkite, ar jis tuščias.
Taigi, jei tai ne null, kuris kas bang lygus
means-- ne null-- tai galioja.
Ką mes norime daryti?
Mes tik norime spausdinti į tą bylą, ar ne?
Taigi, ką mes ketiname naudoti?
>> AUDITORIJA: Fprintf
>> SPEAKER 1: Fprintf-- miela.
Ir fprintf trunka dvi arguments-- tikrais jis vyksta ir ko mes norime spausdinti.
Taigi, kas yra pirmoji?
Kur tai vyksta?
>> AUDITORIJA: Failų.
>> SPEAKER 1: Jis vyksta į failą.
Ir ko mes norime atspausdinti?
"Sveikas, pasauli!"
Gerai.
Mes turime vieną paskutinį thing-- dar vienas didelis paradigma čia.
AUDITORIJA: Uždaryti.
SPEAKER 1: Uždaryti.
There you go.
>> AUDITORIJA: tai vyksta jei failas yra niekinis?
SPEAKER 1: Ne, tai jei jis nėra lygus nuliui.
AUDITORIJA: Oi, jei tai not-- Gerai.
Dėl fopen ir tada du argumentai, kad eiti viduje,
Ką pirmasis argumentas reiškia dar kartą?
>> SPEAKER 1: argumentas yra kaip failo pavadinimas
kad jūs norite eiti į.
Taigi po šios trasos, jūs, turėti tam tikrą failą, pavadintą "labas"
kad turėjo "Labas, pasauli" joje.
Tai viskas.
Tiesiog vardas.
>> AUDITORIJA: O kadangi tai raštu, failas neturi jau egzistuoja.
Yra tai, kad tai, ką jūs sakėte?
>> SPEAKER 1: Teisė.
Tiksliai.
Jei "Hello" kaip failą dar neegzistuoja, tai
sukurs failą pavadinimu Labas "ir į jį rašyti jums.
>> AUDITORIJA: Kai sakai programa parašė failą
kodėl rašote "failą", o ne Bylos ir fprintf-- vardas
>> SPEAKER 1: Nes šiuo atveju, mes turime kad didelis FILE-- visi caps-- žvaigždės
file.
Taigi, tai rodyklė į failą kad jūs kalbate apie.
Tai būdas, kad mes tiesiog nuorodą į jį.
Taigi šiuo atveju, jūs Galima galvoti apie file-- aha,
mes galime naudoti this-- failą čia nurodo atidarymo "Labas"
ir leisti, kad jis rašo.
>> AUDITORIJA: Ar mes galime įdėti "Labas" vietoj [? tiesiog?] f failą?
SPEAKER 1: Ne, nes "Labas" turi būti atviros ir rašomus.
Failo čia yra kaip atliksiantis kad sako OK, mes
turi šią file-- hello-- kad mes ieškome.
Jis buvo atidarytas.
Ir mes ketiname jį rašyti.
Jei naudojate tik "Labas", kad yra aplieti jį.
Taigi jis ketina freak out.
Aš turiu galvoje, jūs galėjo pavadino.
Jūs galėjote padaryti failą žvaigždė, "Labas", prilygsta.
Bet visa esmė yra ta, kad jūs reikia failo žvaigždė žymeklį, siekiant
gebėti naudoti šias funkcijas.
AUDITORIJA: Gal galite padaryti failas, žvaigždė, failo, "Labas"
ar jūs turite įdėti file žvaigždė, failą jį?
SPEAKER 1: Tu gali padaryti failo, žvaigždė, "Labas".
Galite jį pakeisti kokio pavadinimo norite.
Tai visiškai savavališkas ką ši pavardė.
Galite pavadinti ją nieko.
Vardas jis plaukioja spagečiai, jei norite.
>> AUDITORIJA: Kas yra "w" į kabutes ieškote?
>> SPEAKER 1: "w" yra tik būdas.
Taigi mes norime šį failą.
Kiekvienas geras?
Išvalyti?
Taip.
>> AUDITORIJA: Taigi, kai jis rašo tai byla, kurioje mes tada rasti šį failą?
>> SPEAKER 1: Tai bus iš tos pačios katalogas, kuriame esate.
Jei esate pset trijų ir Paleidus šią per savo pset
trys aplankas bus Šis failas vadinamas "Labas".
Cool?
Kiekvienas geras?
Jaučiu, kaip jūs visi vartų, kuris yra puikus.
Gerai.
Taigi atgal prie mano skaidrių show-- Man patinka, kai viskas dirba.
Gerai, pointers-- Ar jus vaikinai susijaudinęs?
Pointeriai yra puikus.
Jie priima truputį wrap savo galvos aplink.
Tai mano antrasis metų mokymo patarimų.
Ir aš manau, kad aš pagaliau gavo jį.
Taigi, jei jums sunku, viskas OK.
Kaip minėjau anksčiau, piešimo nuotraukas padeda daug dalykų, į CS,
kiek aš manau, kad žmonės yra linkę galvoti oh, mes į kompiuterį.
Mes tiesiog reikia kodą.
No-- piešimo nuotraukos tikrai padės jums.
Ir aš tikrai rekomenduojame bakstelėkite į savo kindergartner pusėje
ir atneš pieštuku arba žymekliai ir lygiosiomis.
Nes tai padės jums.
Ir jei matote mane darbo valandomis, aš bus nešioti šūsnis popieriaus
su rašikliai piešimo dalykus.
>> Taigi ypač pointers-- piešti.
Ir aš tikiu, kad mes iš tikrųjų ketiname piešimo keletą nuotraukų čia.
>> Taigi jūs vaikinai visi turime pamatyti Binky, šis šaunus Claymation dalykas.
Ir mes manome, kad tai tikrai juokinga, kai Jis sprogsta į keletą gabalų krūva.
Tai kai Comic Relief už klasę.
C [nesigirdi] tai puikus gebėjimas gebėti kontroliuoti atmintį.
Ir tai vienas iš dalykų, kad tikrai leidžia tokią galingą kalbą.
Bet su didele galia ateina didelė atsakomybė.
Ir beprotiškai gali atsitikti jei nesate atsargūs.
Taigi, kai jūs naudojate rodykles, jūs norite, kad
tikrai tikrai suprasti ką jūs darote.
Tikimės kitais truputis laikas padės jums tikrai suprasti
rodykles, kaip juos naudoti, ir kaip jais manipuliuoti.
>> Taigi memory-- aš tikiu, mes prieš nematė šio diagramą.
Taigi tai yra tik paprastas schema kaip viskas gali būti saugoma atmintyje.
Taigi iš esmės jūs turite juos didžiuliai masyvai vienas baitas blokai
yra tai, ką mes turime here-- nežymus didėja po vieną kiekvieną kartą.
Tai hex [nesigirdi] todėl aštuonių bitų blokai.
Ir kiekvieną bloką asocijuojasi su kai šešioliktainį adresu.
Taigi, jei jūs kada nors pamatyti 0x, tai tik notating
kad tai šešioliktainėje adresas.
Galite manyti, tai reiškia, kai atmintis adresas.
Mes kalbame apie atminties adresų kai matai šešioliktainis.
>> Turime Ints yra kintamieji, plūdės yra kintamieji, kurie saugo.
Taigi Ints parduotuvės int.
Plūdės parduotuvė plūdės.
Taigi mes taip pat turime patarimų kad parduotuvė atminties adresai.
Štai fiksuoti rūšiuoti.
Pointeriai yra išimtinai atminties adresus.
Štai kaip savo rūšies ten.
Jūsų prietaisas yra 32 bitų, o tai reiškia, kad jūsų atminties adresas yra keturių baitų.
Taigi bet koks žymeklis, kad jūs turite Taip pat bus keturi baitai.
Arba, jei tai keturi baitai, atmintis keturių baitų.
Pointeriai parduotuvė atmintis.
Todėl jie keturi baitai.
Cool-- tiesiog norite sustiprinti, kad.
>> Jūs turėtumėte gauti šį komiška dabar.
Aš nežinau, kaip daugelis iš jūsų yra xkcd gerbėjai, bet aš myliu xkcd.
Tai puiku.
>> Gerai.
Taigi kuriant pointers-- kaip sakiau, tai gana daug tiesiog patinka ką nors.
Jūs turite tipą.
Turite vardą.
Teisė?
Štai ką mes turime čia. [? Hex?] Žvaigždutė reiškia, kad jis žymeklis,
ir tada ką jūs norite jį pavadinti.
Taigi tipas atstovauja ką jūs galite laikyti.
Viskas gerai?
Tokiu pat būdu, kad jei mes int, mums žinoti saugoti int ten.
Su rodykle, tai turi atminties adresą.
Bet ką tai reiškia, that-- čia, kur brėžinys ketina praversti.
Taigi šiuo atveju, mes turime kai value-- tarkim keturi.
Keturi yra adresu vieną.
Gerai?
>> Tai pirmasis čia reiškia kad tai žymeklis 2x.
Teisė?
Tai kai žymeklis x.
x gali būti kažkas, ką nors.
Nepriklausomai x is-- pasakyti x yra keturi.
Jis ketina laikyti Adresas atminties čia.
Taigi int, žvaigždė, x-- tai kai kurios kitos lizdą memory--
kas žino, kas tai yra.
Bet ji vyksta čia laikyti adresą.
Taigi tai būtų like-- šiuo atveju, kas,
yra saugomi 0x1-- kokia yra saugomas adresu, kad mūsų žymeklis valdo,
turi sutapti su ką mes paskirta.
Tad 0x1, šiuo atveju, tai yra x.
Tai gali kada nors būti tik int o mes naudojame tai.
>> Panašiai, jei mes turime kitas 1y, nepriklausomai
adresas yra saugomas su y turi būti char-- pats su Ž.
Tuo pačiu būdu, kai jums pabandykite ir padaryti intx lygus 0,4,
jis ketina klykauti ne jums, ir būti kaip niekas, jūs sakėte, jūs norėjote int.
Tai turėtų būti int.
Stotelė bando padaryti tai plūdės.
>> Taigi leiskite įvyks tai, ko jie nori būti.
Tegul viskas bus patys.
Taigi didelis dalykas yra tik bet kokios rūšies rodyklė
tai yra, kad tai tik ką galite ten laikyti.
Gerai?
Su praktika, kaip su Praėjusią savaitę, viskas
Atrodo tikrai rūšies abstrakti.
Mes ketiname padaryti šiek tiek praktikos.
Reikia padaryti daugiau prasmės.
>> Taigi nuorodos ir dereferencing-- tai Labai svarbu, kad būtų gauti tiesiai.
Aš vis dar turiu atnaujinti kas dabar ir tada.
Ir aš kaip laukti, kuris iš jų aš noriu?
Taigi ampersand tikrai duoti Jūs iš nuorodos arba adresas.
Todėl grąžina į adresą Atminties kintama saugomi.
Taigi ji vyksta iš tikrųjų grįžti į jums šešioliktainis, o dereferencing jį
iš tiesų norėčiau duoti jums Duomenis, kurie yra saugomi ten.
Gerai?
Taigi mes ketiname pažvelgti pavyzdys tikrai greitai, ar tikrai iki kito.
>> Gerai.
Taigi, mes turime galvoti tikrai atidžiai apie tai.
Taigi čia mes kai sveikasis x.
Aš einu bandyti ir daryti tai iš į geriausias savo sugebėjimus.
Taigi, mes ketiname turėti šią angą x.
Ir tai saugoti penkis.
Jo adresas yra 0x4.
Cool?
Viskas gerai.
>> Taigi dabar mes turime šį žymeklį.
Tai buvo daugiau nei čia.
Ir ampersand suteikia mums kažko adresas.
Taigi, šiuo atveju, tai x adresas.
Kas yra X adresas?
04-- ir tai žymeklis yra 0x08.
Cool?
Taigi, ką galima galvoti apie tai žymeklis, 04, tik atkreipia čia.
Ir jie vadinami patarimų nes, kaip mes daugiau į tai,
jūs ketinate pamatyti nukreipta į dalykus.
Ir vienas blokas nukreipta į kitą blokas bus daug daugiau prasmės.
Taigi, čia yra du.
Ir tada mes kai egzempliorius, kuris yra what-- 0x0c.
Ir jis ketina dereference mūsų rodyklę.
>> Taigi, ką tai sako yra Gerai, štai mūsų žymeklis.
Vertė ji saugo tai 0x04, ir kas jis sako, yra šiuo adresu
ir pasakyk man, kas yra jame.
Štai efektyviai Ką tai rodyklė daro.
Jūs galite galvoti apie tai, kaip jūsų žvaigždė.
Taigi gerai, kai mes darome žvaigždę, tai reiškia sekti.
Eikite šiuo adresu.
Ir tai iš esmės tik po tai rodyklė į šią atminties riekė.
Ir duoti mums tai, kas joje, kuri yra 5.
Tai kodėl mūsų kopija yra lygus 5.
Ar tai prasminga?
Ar kas nors reikia man eiti per kad dar kartą arba lėčiau?
Tu nori eiti per jį dar vieną kartą?
Gerai.
Mes ketiname perbraižyti jį dar kartą.
Kai mes pradedame, mes visi sutinkame, mes turime kai atminties riekė tai kintamasis
x, kad mes prilyginta 5.
Mes neturime kontroliuoti, kur ji yra atmintyje.
Taigi šioje vietoje yra tik sutartinai priskiriamas.
Geras ten?
Gerai.
Tada mes inicijuoti Rodyklė į tarpt.
Štai kodėl jis leido, kad rodytų į x nes mes turime į čia int.
Mes turime dar vieną gabalą Atminties nes šis žymiklis
yra kintamasis kaip kas nors kitas.
Tai sutartinai priskiriamas kai kurie atminties.
Ir ką ji saugo tai x adresas.
Ženklas reiškia adresą x.
Taigi, kas yra x adresas?
>> AUDITORIJA: Tai zero--
SPEAKER 1: 0x04.
Taigi then-- paskutinis.
Mes turime copy-- vėl tik dar nevienoda.
Taigi galime priskirti tam tikrą sutartinį vietą.
Ir mes dereference mūsų rodyklę.
Žvaigždė reiškia eiti adresas saugomas mano rodyklė.
Pasakyk man, kas ten.
Taigi adresas saugomi mūsų žymeklis yra 0x04.
Taigi mes einame į tą adresą.
Jis nukreiptas į tą adresą.
Kas viduje šis atminties blokas?
Tai penki.
Taigi tai, ką mes priskirti mūsų kopiją.
Kiekvienas geras?
Cool.
Again-- nuotraukos.
>> Taigi sekimo vertybes here-- aš ketina leisti jūs manote apie tai.
Galime daryti kitą nuotrauką.
Bet aš noriu pabandyti ir priežastis per šią savo minutę.
>> Kadangi jie nepasidavė mums pavyzdys adresas,
Aš tik ketina tai padaryti ampersand x-- kuri turėtų padėti vairuoti namo.
Ženklas reiškia adresą.
>> Taigi, pirmasis, visiems eiti su pirmoje eilutėje.
Kai x televizoriaus five-- kai atsitiktinis lizdas atminties.
Žiniasklaida žvaigždė žymeklis yra lygus į x adresą, ar ne?
Žiniasklaida žvaigždė žymeklis sukuria tai blokas, ragina jį žymiklį,
ir priskiria jį prie x adresą.
Aš baisi ne jungimo simboliai.
>> Dabar, ką mes darome, yra sakoma Gerai, dereference mūsų rodyklę.
Taigi mes einame Gerai, kas yra mūsų rodyklę?
Tai ampersand x.
Eiti į ampersand x ir perleisti jį.
>> Taigi, dabar, ampersand x bus 35.
Taigi, iš esmės, kai esate dereferencing, tu gerai.
Jūs ketinate būti brėžinys nuotraukos tai patinka.
Jūs ketinate būti brėžinys jūsų rodyklės virš kur ji yra.
Tad į šią angą atmintyje ir arba duok man tą vertės nugaros arba pakeisti jį.
Šiuo atveju, nes mes esate ne tai vertė, mes priskiriame ji būtų 35.
Kadangi paskutinis vienas, jei pastebėjote, mes
buvo priskirti tai, kas buvo čia į kažką kita.
>> Taigi jie turi šį awesome lentelę.
Tai nereiškia, kad blogai.
Jūs vaikinai dirbti su juo.
Aš ruošiuosi piešti ant lentos.
Mes ketiname ją užpildyti kartu, gerai?
Taigi patraukti kai popierius, grab partneris, pradeda dirbti.
Aš ruošiuosi gauti didesnis gabalas kreida.
Nes jis bus daug.
Gerai.
PROFESORIUS: Gerai.
Pradėkime nuo pirmojo eilutės.
Pradėsime ten, tada jūs vaikinai gali gal dirbti per šiek tiek daugiau.
Gerai.
lygus b kartus c todėl kas?
Tai ne triukas klausimas, aš pažadu.
>> STUDENTŲ: 4 kartų 5.
>> PROFESORIUS: 4 kartų 5.
20.
Taigi, kas yra b?
STUDENTŲ: 4.
>> PROFESORIUS: Ir c?
STUDENTŲ: 5.
PROFESORIUS: 5.
Ir tada tai tik ketina būti ampersand a, ampersand b,
ampersand c, tiesa?
Neblogai.
Tai gana paprasta.
Gerai.
Taigi kitą.
Lygus Times c punkto, tuo atveju, kas buvo susipažinę su tuo.
Ar visi žino su laiku lygus?
Gerai, visa tai means-- tai sutrumpintai lygus Times c.
Jūs taip pat galite tai padaryti su padalinio, su to, atimtis.
Tai galite padaryti tiek pat arba plius lygu c reiškia lygus plius c, minuso vienodą
c būtų lygus minus c.
Tai tiesiog sintaksinis cukrus.
>> Taigi, šiuo atveju, yra lygus Times c duos mums tai, ką?
Vėlgi, ne fokusas klausimas.
>> STUDENTŲ: 100.
>> PROFESORIUS: 100.
Ar dar ką nors pakeisti?
Ne.
Gal aš pagaliau gauti geriau mano jungimo simboliai.
>> STUDENTŲ: Gerai, atsiprašau, kaip tu gavai 100?
PROFESORIUS: Gerai.
Taigi yra lygi times c, todėl kartus c.
STUDENTŲ: Oi, jūs naudojate už previous--
PROFESORIUS: Taip.
Taigi tai mūsų naujausi vertės.
Tai yra tai, ką turėtų būti naudojant kaip mes judėti žemyn, Gerai.
Taigi, b yra vienintelis dalykas, keičiasi, ar ne?
Taigi galime užpildyti ir visa kita.
B. Kas yra b bus?
Būti ar nebūti.
Taigi, kas tai daro?
Kas yra žvaigždė pa daryti?
>> STUDENTŲ: Kodas į pa vietą.
>> STUDENTŲ: Ne, ne visai.
Taigi tai yra d nuoroda.
>> STUDENTŲ: Taigi b yra ranka vertė pa.
>> PROFESORIUS: Taip, taip pa yra iš adreso, ar ne?
Taigi jis sako eiti ten, kur yra saugomi ir suteikti jai šią vertę.
Taigi, kas yra b?
STUDENTŲ: 100.
PROFESORIUS: 100.
Tobula.
Gerai, kad kompiuteris yra tai, kas keičiasi.
Visa kita lieka tas pats.
Kas yra kompiuteris bus?
Paprasta užduotis.
Pc yra lygus per metus, o kas pa?
>> STUDENTŲ: Ženklas.
PROFESORIUS: Perfect.
Dabar mes vis įdomesnis.
Gerai, tegul nutraukti šį vieną žemyn.
Pirma, kas yra b kartus c, nes tai lengva dalis tai viena, tiesa?
B laikai c is--
>> STUDENTŲ: 500.
>> PROFESORIUS: Taip, taip, Kas tai yra vienas daro,
Jei tai žvaigždutėmis pb, Kas keičiasi?
>> STUDENTŲ: Kas yra the--
PROFESORIUS: Kas per b?
STUDENTŲ: Kas erdvėje kad PB yra nukreipta.
PROFESORIUS: Ir pb nukreipta to--
STUDENTŲ: B.
PROFESORIUS: tik B. Taigi dalykas keičiasi yra b, tiesa.
Taigi b times c, 500.
Taigi tai, ką keičia dabar.
Cool.
Gražus.
Vaikinai daro puikiai.
Gerai, pažeidę šį vieną žemyn.
C keičiasi, ar ne?
Taigi, mes galime užpildyti ir visa kita.
Pažiūrėkime.
Gerai.
Mes žinome, kad c bus produktas du skaičiai, tiesa?
Ką du skaičiai, nors?
>> STUDENTŲ: c?
>> PROFESORIUS: Taigi yra teisė už pirmąją.
Taigi mes; d nuorodos P, tiesa?
P taškų į, todėl mes žinome, kad tai bus 100 kartų, ką?
Times Ką vnt tašką?
Taškai.
Taigi 100 kartų 100 yra 10.000.
Ar tai prasminga?
Cool.
Baigiamoji, vaikinai, paskutinė eilutė.
Gerai.
Kaip keičiasi čia?
>> STUDENTŲ A.
PROFESORIUS: A. tobula, todėl visa kita gali likti tas pats.
Gerai.
Ir kas?
Taigi, tai laikai ką?
Tai žvaigždė pb.
Taigi žvaigždė pb tai čia pb, pb taškų į b.
>> STUDENTŲ: 500.
>> PROFESORIUS: 500.
Taigi, mes turime 500 kartus 100.
Štai 50.000.
Didysis sėkmė!
Pažvelkite, kad.
>> STUDENTŲ: "Kodėl mes turime & už last-- c
PROFESORIUS: Atsiprašau.
STUDENTŲ: O, gerai.
PROFESORIUS: Mano blogas.
Daug raštu.
Kiekvienas geras?
Neblogai, tiesa?
Tiesiog reikia šiek tiek o dirbti per.
Jei suskaido, suprasti, ką kiekviena dalis
yra nuoroda to-- kaip su viskuo tai,
yes-- ją padalyti į mažas problemos ir tada sujunkite,
ir jūs galite padaryti keletą awesome stuff.
Yra atsakymai, bet mes tai padarė.
Pointer aritmetinis.
Ak.
Mano rankos yra visi kreidos.
Taigi, pridedant arba atimant int sureguliuoja žymeklį
pagal iš rodyklės tipo dydžio.
Prisiminkite, kaip kiekvienas tipas turi skirtingą dydį?
Taigi kaip dvigubai arba ilgai ilgai aštuonių ir int yra keturi, bet char vienas.
>> Taigi, ką jūs norite daryti is-- vienas dalykas prisiminti
yra tik tai, kad, kiek jūsų žymeklis vertė iš tikrųjų keičia
priklausys nuo tipo žymeklis yra.
Kiekvienas geras su tuo?
Ar galiu ištrinti?
Mes gerai?
Nuostabus.
>> Taigi, jei mes kai žymeklis that-- tai vyksta be-- aš
ketina padaryti tai int žymeklis.
Jame kaupiasi tai.
Jei buvo pasakyti žymeklį plius vienas, ką jis ketina daryti
yra jis ketina atnaujinti tai iki int dydis
nes tai tipo žymeklis yra.
>> Su C, viskas yra labai griežti ir reguliuojama.
Int žymeklį ketina atnaujinti iki Tarpas int užtruktų.
Int yra keturi baitai.
>> Taigi, kas būtų tai virsta?
Jūs tik pridėti keturi ant tai.
Dabar jūsų žymeklis būtų be-- Gerai.
>> Taigi, jei tai buvo char ir mes padarėme žymeklį plius vienas, kas tai būtų dabar?
Jei jis started-- apsimeta mes started-- dabar tai 0x08.
Leiskite dabar pasakyti, kad tai buvo char rodyklę, ir pridėjome vieną.
Kas tai pakeisti?
Kiek baitų yra char?
>> AUDITORIJA: Vienas.
>> SPEAKER 1: Vienas.
AUDITORIJA: Taigi 0x09.
SPEAKER 1: Taigi būtų devyni.
Taigi tik ką prisiminti.
Tiesiog kai jūs įtraukiate vieną, tai nėra pridedant vieną nebent tai char.
Jis pridūrė, kiek baitų tipą, kad ji yra,
kuris yra, kodėl mes turime ši lygtis čia.
Taigi, tai int laikai dydis apie rodyklė tipo.
>> Taigi, mes turime pavyzdį čia.
y buvo paskirtas į tą vertę, 0x4, kai mes padarėme y plius lygioje padėtyje.
Kokia iš to nauda, ​​kas in x, nesikeičia.
Ką kaita, kas yra y.
Adresas saugomas y atnaujina keturias nes yra keturi baitai iš int
ir tai int žymeklis.
>> Gerai.
Taigi dabar mes turime kitą pratimą.
Taigi kyla klausimas, kas bus atspausdinti.
Any ideas?
>> AUDITORIJA: iš skaičių simbolių laiminga katė?
SPEAKER 1: Būtent.
Taigi norėčiau jūsų eilutę.
Ar visi gauti, kad?
Ar norime, kad vaikščioti per ją?
>> Taip, gerai.
Taigi, ką mes turime here-- aš kaip tai kur kas daugiau.
Aš neturiu [Nesigirdi] juokingai.
>> Taigi, mes turime eilutę čia laimingas kačių.
Gražus.
Mes kai skaitiklis kad mes sekti.
Taigi, mes turime šiek tiek char * žymeklį kad tiesiog yra lygi g.
Ką tai daro yra tai priskirdami tam tikrą rodyklę
į jūsų eilutės pradžios.
Nes aš tikiu, kad, kaip ji buvo paminėta paskaitos
mes davė jums vaikinai tai duomenų tipas vadinamas eilutė.
>> Bet tikrai stygos tiesiog masyvas of-- kaip char *.
Tai Rodyklė į simbolių krūva kad yra ribotis atmintyje.
Taigi tai tiesiog išskiria jį lygus bet kokia eilutė yra
žymimas kur pirmasis jos charakteris yra.
Taigi tai yra tiesiog nustatyti tam tikrą tašką lygus eilutės pradžios.
Kiekvienas geras ten?
Cool.
>> Taigi tai yra dereferencing mūsų rodyklę.
Todėl jis iš tikrųjų ketina duoti mums šiek tiek vertę čia,
mūsų eilutę, kad mes kalbame apie.
Ir mes sakydamas, kol tai ne null terminatorius.
Taigi nuolat vyksta tol, kol gausite į stringo pabaigos.
Atnaujinkite savo žymiklį vieną.
Taigi r, jis bus iš tikrųjų atnaujinti vienos kiekvieną kartą, nes tai yra char,
char *.
>> Taigi jis ketina pereiti.
Jis ketina atnaujinti.
Taigi pirmą kartą tai veikia, jis ketina būti čia h.
Jis ketina atnaujinti.
>> Tai bus.
Tai bus p, y, ir taip toliau ir taip toliau.
Mes atnaujinti skaitiklis.
Kai jis pasiekia pabaigos, tačiau tai tiesiog spausdina kiek jis įsigijo.
Taip.
>> AUDITORIJA: Taigi jis skaičiuoja erdvė yra viena, tiesa?
Gerai.
>> SPEAKER 1: manau.
Ar tai question--
>> AUDITORIJA: [nesigirdi].
>> SPEAKER 1: Jokių rūpesčių.
Man tai padaryti.
Gerai, taigi vienas dalykas, aš suprasti, kad su masyvo,
Jūs taip pat galite laikyti jį žymeklis, nes matricos yra tik
tęstiniai dėmės atmintyje.
>> Taigi galite laikyti jį tuo pačiu būdu.
Jūs galite valdyti juos su rodyklėmis, taip pat.
Taigi, užuot, šiame atvejis, analogiškas dalykas
būtų masyvas 0 lygus 1.
>> Tačiau tuo pačiu būdu, kad eilutė yra nustatoma
pagal tos vietos, kur pradžioje jos pirmasis simbolis yra
masyvas yra nustatomas pagal kur jų pirmasis elementas yra.
Nes mes žinome, mes garantuojama, kad šie
ketiname būti nuolatinis blokai atmintyje.
Štai ką leidžia mums tai padaryti.
Žinome jie nuolatinis blokai atmintyje.
>> Taigi šiuo atveju, dereferencing tiesiog masyvas, kuris mums sako,
Gerai, eik į pradžią Jūsų masyvas, kuris yra čia.
Taigi galite nustatyti, kad jis lygus vienam.
Ir šiuo atveju, nepriklausomai nuo jūsų masyvas tipas, kai jūs ją atnaujinti vieną,
tai kaip atnaujinti ji į kitą indeksą.
Jūs galite padaryti, kad dėl tavęs žinoti, kas yra jūsų masyvo.
Todėl žino, kiek į atnaujinti savo žymiklį,
kur siust jį į tiek atnaujinti kad esate kitame lizde.
>> Taigi tai tiesiog kitoks būdas rašyti masyvas 0 lygus 1,
1 masyvas lygus 2, masyvo Laikiklis 2 yra lygus 3.
Tai tiesiog dar vienas būdas galvoti apie tai.
Kadangi jie yra nuolatinis blokų atminties,
galite kreiptis į juos arba pagal notation-- masyvo
kurį aš asmeniškai susirasti easier-- bet gal
jums reikia manipuliuoti griežtai atminties adresus.
Ir tai yra būdas jums tai padaryti.
Rūšis daugiau kaip cool dalykas, kurį gali padaryti
prieš Gal ne kažką esate iš tikrųjų ketina įgyvendinti.
>> Aš naudoju jį 61.
Vaikinai tikriausiai nereikia jaudintis dėl to per daug.
Bet jei jus domina, imtis 61 kitąmet.
Mes į namo ruožas vaikinai.
Žinau, tai seniai.
Dinaminė atmintis Allocation-- todėl mes žinome, kad vienas
dalykų, kai mes kalbėjome metu mūsų pirmasis skyrius kartu
mes pažvelgė apsikeitimo sandorio funkcija kur jis buvo
už mūsų pagrindinė funkcija taikymo sritį.
Ir mes eidavo į šių vertybių kad buvo veiksmingai kopijos.
>> Ir kai apsikeitimo sandorio baigė vykdančioji, ji tiesiog paliko krūvelę.
Atminkite, mes turime kamino rėmas apsikeitimo sandorio.
Jis palieka ir tie vertės palikti su juo.
Ir jie buvo dingę.
Mes nieko negalėjo padaryti su jais ir mes liūdna
nes mes negalime apsikeitimo mūsų vertybes.
>> Bet su C, kaip minėjau, jums turi panaudoti valdžią daug atminties.
Taigi, ką galite padaryti, tai galite skirti dalykų krūvos čia
kad liks ten, kol jūs pasakykite jiems kitaip.
>> Jie kaip geri vaikai.
Jie ten.
Jie nepalieka.
Jie ten, kol būsite kaip, gerai, galite eiti toliau.
>> Kadangi dalykų kamino, who-- jie, pavyzdžiui išdykėliams.
Jie tiesiog bėgti, kai norite ten ir tada jie dingo.
Jūs negalite gauti juos atgal.
>> Taigi krūva is-- mes ketiname kalbėti apie malloc ir nemokamai, o
Aš tikiu, kad jūs vaikinai girdėjau apie į paskaitą.
Ir tai iš esmės būdas turėti labai patvari duomenis.
Taigi galite laikyti duomenis maždaug tiek, kiek norite.
Mhm.
>> AUDITORIJA: Ar galite apibrėžti krūvos ir kamino?
Jie panašūs vietų įdėti daiktus?
>> SPEAKER 1: Taigi jie iš esmės just-- jie
Taip mes kreiptis tik į atmintį.
Taigi krūva yra tik ten, kur atmintis yra skirta dinamiškai,
o kamino nuoroda daugiau sukrauti rėmeliai
kad yra labiau pagrindinis funkcijos, kurios iš tikrųjų veikia.
You do not really turite kontroliuoti.
>> Didelis skirtumas, turite kontroliuoti per krūvą, jei norite.
Jūs turite mažiau kontroliuoti kamino.
Kamino priklauso funkcijos, kurios veikia,
ir tvarka, pagal kurią jie yra paleisti ir kaip viskas grįžo.
Kadangi su krūvos, kaip matysime, galite pasakyti,
Gerai, aš noriu tai vertė turi būti aplink, kol aš pasakyti kitaip.
Jūs negalite atsikratyti jo.
Jums neleidžiama jį pakeisti.
Jūs ketinate laikyti jį aplink tiek laiko, kiek aš jums pasakysiu.
Gauni būti bosu krūvos, o stack-- Galbūt, jei
kaip apsukti savo kelią galite būti viršininku.
Bet ne visai.
Ir tai tikrai tik prisiminimas.
Tai tiesiog skirtingi būdai įgaliojimai perduoti į atmintį.
>> Cool.
Taigi su tuo, kaip į kontroliuoti savo atmintį.
Tai su malloc, kuris jūs ketinate gauti naudoti.
Taigi, tai tik trumpas už atminties paskirstymas.
Tai viskas yra.
Yra daug kitų įdomių krūva funkcijos, kurios turi ALLOC pabaigoje,
ir jie stovi už skirtingus dalykus.
>> Taigi, kai jums reikia laikymą, kuris turi į išgyventi esamą funkciją,
kad, jeigu dabartinis funkcija bėga,
jūs vis dar turite duomenų, kad jums gavo iš jo, jūs norite naudoti malloc.
Kad bus inicijuoti ant krūvos.
Ir kaip aš sakiau ir išlaikyti sakydamas, jums laikyti jį ten
kol pasakys kitaip, kuris yra svarbus dalykas čia.
>> Taigi vienas dalykas, kad pranešimas ir tai paprastai labai svarbu,
yra tai, kad ši sizeof super naudinga naudoti
nes priklausomai nuo tipo Mašina dirbate,
ji gali turėti įvairaus kiekio Atminties kad ji ėmėsi.
Taigi jūs visada norite naudoti dydis taip kad nesate priklausomas mašina,
taip, kad jūsų kodas bus paleisti bet kuriame kompiuteryje.
>> Ir tai tik dalis rašyti gerą programinį kodą.
Jei jis veikia viename kompiuteryje, bet ne bet koks iš kitų,
Kokia buvo jūsų programa?
Taigi jūs visada nori įsitikinkite ir naudoti sizeof.
>> AUDITORIJA: Taigi tai, kad, kaip dydis 10 colių [nesigirdi]?
>> SPEAKER 1: Tai 10 int dydis.
taip.
Taigi dydis int sugrįš kiek kainuoja vienas int imtis.
Ar dydžio char, kaip Kiek kainuoja vienas char imtis.
Ir tada kiek blokai to norite?
>> Taigi šiuo atveju, mes norime kažką kad mes galime laikyti 10 int į.
Ir jis veiks nepriklausomai mašina, kuri yra kietas.
Taigi, kiek baitų bus kad iš tikrųjų suteikia jums?
Greita matematika.
>> AUDITORIJA: 40.
SPEAKER 1: 40.
Tiksliai.
Taigi dar vienas didelis dalykas.
Rodyklė arba malloc gali grįžti null.
>> Taigi dar kartą, visada patikrinkite, pamatyti, jei ji grįžo null
Prieš bandydami ir nieko daryti su juo.
Jei bandysite ir dereference tai žymeklis dabar
tai tik ketina segfault nes jūs nuėjo ir bandė
paliesti null kai jūs neturite turėti.
Taigi visada patikrinti null.
Vėlgi, viskas, ką galite padaryti.
>> Tai gali grįžti null.
Tai bus grąžinti null, jei esate arba iš vietos, arba dėl kokios nors priežasties
jis bėgo į kai atminties klaidų.
Kartais tiesiog atkreipia null.
Taigi jūs tiesiog turite patikrinti jį.
Tai viskas, tai skaidrė sako.
Ir tada, ką mes turime Čia yra kvietimas išlaisvinti.
Taigi taip pat, kad jei jus atidaryti failą jums reikia uždaryti failą,
jei jums malloc atminties, galite turi jums nemokamai, kad atmintyje.
Ir vaikinai bus padaryti tikrai įdomių dalykų.
>> Ir ten programa galite paleisti pamatyti, jei jūs kada nors ištekėti atmintį.
Bet jūs nenorite ištekėti atmintį.
Tai tikrai blogai.
Tik bałagan dalykų.
>> Tai blogai daryti kaip programavimo protingas projektavimo efektyvumą.
Bet tai taip pat tik rūšies iš kenkia jūsų kompiuteryje.
Taigi tiesiog be ko kai malloc juos.
>> Vaikinai pamatyti simetrija, čia.
Super paprasta.
Tiesiog nemokamai ir tada kokia jūsų žymeklis,
neatsižvelgiant vardas Jūsų žymeklis, ir jis
rūpinsis išlaisvina jį jums.
Cool.
>> Tada mes turime tai.
Taigi mes tiesiog ketinate vaikščioti per šią programą.
Ir tada jūs vaikinai yra padaryta.
>> Taigi [nesigirdi] tik pagrindinis.
Taigi, mes turime šiek tiek int * žymeklį.
Taigi, mes turime rodyklę kad ketina surengti int.
Ir kiek Ints tai vyksta eiti?
Tik vienas.
Dydis int.
>> Mes patikrinti, ar žymeklis yra niekinis, nes jame
yra, mes norime pasakyti nieko nedarykite.
Tai blogai.
Taigi mes spausdinti keletą iš klaidų atmintis, dažniausiai grįžta 1,
kaip jus vaikinai yra naudojami.
>> Ir tada mes turime čia, mes dereference mūsų rodyklę.
Taigi tai reiškia, kad mes ketiname saugoti kažkas toje vietoje, kurią mums.
Žiniasklaida * žymeklis, arba malloc, gražina adresas, kur ji atidėta tai
Atminties jums.
Taigi tai iš esmės suteikiant Jums like-- jei jus
galvoti apie krūva namai kaimynystėje
kad jūs norite įdėti Jūsų baldai, malloc
yra kaip gerai, jūs gaunate eiti į namus tris.
Ir ji suteikia jums adresas namus trys.
>> Taigi tai dabar, tai rodyklė parduotuvės adresas,
saugo savo namų adresą.
* PTR priemonė, Gerai, aš mano namuose.
Cool.
Man reikia gauti šiek tiek sveikas.
>> Taigi jūs esate klausia kas nors suteikti jums baldus dabar.
Taigi jūs kažkiek int.
Ir tai kelia jį į savo rodyklę kur jis nukreiptas į.
>> Ir tada jis tiesiog atspaudai iš įvedėte kur.
Ir vėl, nuoroda.
Taigi tai, kaip jūs nuėjo į tai spręsti ir matėte, kas buvo ten.
Cool?
>> Ir tada, žinoma, mes atlaisvinti savo žymiklį.
Nepamirškite nemokamai žymeklį.
Nepamirškite patikrinti null.
Nepamirškite nemokamai žymeklį.
Jūs turite du dalykus jūs prisimenate iš tai, ar, kad jūs turėtumėte prisiminti.
Taip.
AUDITORIJA: [nesigirdi] stuff kaip kad, char * s.
Kaip čia mes niekada išlaisvinti tuos?
>> SPEAKER 1: Hm?
>> AUDITORIJA: Ar tie kaip stygos?
Jūs sakėte, stygos kaip char * s, ar ne?
Taigi, kodėl ne mes nemokamai stygas?
>> SPEAKER 1: Jūs tik nemokamai, jei jūs mallocing.
AUDITORIJA: Oi, jei jūs mallocing.
SPEAKER 1: Taigi malloc ir nemokamai yra du dalykai,
kad jūs visada turėtų turėti kartu.
f atvira, f arti, du dalykai reikia turėti kartu.
Iš tikrųjų abiem atvejais patikrinti null.
Taip.
>> AUDITORIJA: Taigi laisvas yra tik leidžiantis kažką kita
turi būti saugomi ten po ši programa jį naudojo?
>> SPEAKER 1: Tai tiesiog pasakyti, Gerai, aš padarysite.
Jums nereikia laikyti jį aplink.
Kitaip jūsų kompiuteris Tiesiog kaip ir pabandyti ir laikyti jį ten.
Ir tada jūs can't-- jis veikia į atminties problemas vėlesniuose.
Jūs visada nori atlaisvinti, nes jis pasakoja savo kompiuterį, Gerai, aš tikiu,
padaryta su šio atminties vietoje.
Jūs galite turėti jį atgal man naudoti vėliau.
Cool?
Taip.
>> AUDITORIJA: Taigi mes naudojome% d tiesiog nes dvigubai ateina atgal,
arba kodėl is-- [nesigirdi].
>> AUDITORIJA: Ar galima naudoti% i?
>> SPEAKER 1: Galite naudoti% i.
Paskutinę minutę klausimų?
Tęsk.
AUDITORIJA: Aš tiesiog greitai klausimą.
Taigi ptr kintamasis, that's-- kaip, su int * ptr = malloc,
kad manimi tiesiog pasakyti, kad tai nukreipta į tam tikrą memory-- vietoje
SPEAKER 1: Ar norite [nesigirdi]?
AUDITORIJA: --that yra dydis of-- ne, viskas OK.
Bet tai tik rodo, kad šio vietoje atmintis, tiesiog kaip keturių baitų.
SPEAKER 1: Teisė.
Taigi malloc dydį iš int sako, Gerai, aš ruošiuosi eiti nubėgti,
susirasti keturis baitųatminties jums.
Kai Komisija nustato, kad keturi baitųatminties, jį
duodančią adresą iš kur ji prasideda,
ir tai, ką saugomos į rodyklės arba PTR.
Geras.
Jūs vaikinai atrodo mažiau sutrikę, nei dauguma žmonės, kai aš kalbu apie rodyklė,
todėl aš jaučiuosi labai gerai dabar.
>> Gerai.
Kaip visada, jums, vaikinai turėtų turėti visi Dotarłeś savo pset2 pažymius dabar.
Aš žinau, ten buvo keletas Niezdrowy dalykų, kur ji sako, Formulė negalioja
ar kažką.
Jei jūs gaunate, kad visi Jūsų rūšių galioja mano pusėje.
Taigi aš galiu siųsti Jums zrzutek savo klasėse.
Tik leiskite man taip pat, jei jūs žinote, trūksta, bet pažymius ar kažką
Neatrodo, kad prasmės.
Ateikite pas mane.
>> Buvau super didžiuojamės jumis vaikinai jau, taigi jį nuolat.
Ir gerai pailsėti savo savaitę.
Aš tikiu, kad aš pamatyti kai iš tu ne darbo valandomis.