[THEME MUSIC] SPEAKER 1: Ahoj, všetci. Vitajte späť na časti. Krásny deň out--, čo je dôvod, prečo som Iste, tam sú len štyri z vás a nie je náš obvyklý balíček. Bol som chorý tento víkend. Takže nemám Starburst pre vás. A ja, môže začať kašľať strašne po celú dobu to. Takže len majte so mnou. Budem naozaj snažiť a dostať sa cez to prvé, ale predtým, než som sa kašľa útok. Ale len sa ľahko na mňa s málo bit-- to je všetko, čo som sa opýtať. Takže náš program pre today-- len reminder-- váš kvíz je budúci týždeň. Povedal som vám to posledný týždeň, takže to by sa chytiť ťa nepripraveného. Tak som ťa znovu pripomínať. Budúci týždeň si kvíz. Za týmto účelom, budúci týždeň je časť bude oveľa of-- Budem sa snažiť a pracovať v nejakej recenziu. Takže ak vy mohol pomôžte mi tým, že mi posiela veci, ktoré vám vyhovuje sa, že ste starosti, témy, ktoré by ste chceli pre me na pokrytie, to by bolo skvelé. Tak som si vyskúšať a pracovať je do našej sekcii budúci týždeň alebo zaslať vám ďalší materiál alebo prep že by ste mohli dostať inde. Yeah! Stále viac ľudí sa blíži! Myslel som si, že som to urobil zle posledná týždeň, že nikto nechce, aby sa vrátil? Bojím sa. Takže ďalšie tri veci že budeme ísť cez sú presmerovanie, súbor I / O, a potom ukazovatele a dynamické pamäte. Som si istý, že ste všetci mimoriadne nadšení pointers-- obľúbené témy každého z nás, tak jednoduché pochopiť. Som si istý, chalani všetci dostali, že jo? Takže poporiadku, redirection-- to je v podstate len spôsob, kontrolovať, ako sa vstup veci do svojho programu, ako vy výstupné veci z programu. Medzi hlavné spôsoby, ako chlapci Boli interakciu s ním je len cez štandardný výstup s tlačovým obrazovky tu. Ale existujú spôsoby, ako pipe-- ako vidíme tu je jedným z našich words-- druhu z potrubia, aby informácie alebo že dáta do súboru zo súboru. Je to len rôzne spôsoby dostať veci do vášho programu a zo svojho programu, namiesto toho, len je tlač na tejto obrazovke alebo zadaním veci z príkazového riadku. Takže prvá je malá väčší než striešky. Takže output-- to jednoducho vytlačí výstup do súboru miesto na obrazovke. Takže ak ste mali niečo, čo tlačené "Hello, world!" na obrazovku, ak ste to miesto k output.text, že vytvorí tento súbor s názvom output.text. A keď ho otvoríte, bude to povedať: "Hello, world!" tam. To môže byť super užitočná Ak máte veľa chýb v skutočnosti, ako vidíme v tomto jednom. Ak tak urobíte dve striešky, že to bude vytlačiť chybové správy. Takže ak máte problém s kompilácie, má veľa chýb a ste stále utápa v snahe listovať v príkazovom riadku cez všetky nimi, môžete len vytlačiť do súboru, otvoriť tak, aby tento súbor môžete nimi prechádzať ľahšie. Vlastne som používal to veľa, keď som bol ladenie moja 181 psets pre strojové učenie. Takže to môže byť super užitočné neskôr. Je to tiež užitočné, ak máte program že možno je generovanie knižnice alebo vytváranie nejakého súboru reťazcov, a musia byť schopní vidieť, že je to generovanie je správne. To je spôsob, ako to urobiť. Takže ak si ich vytlačiť do súboru, vás môžu ľahšie skúmať je, že jo? Versus snaží posúvať prostredníctvom príkazového riadku. A potom jedna vec k poznámke je to, že len s väčším než striešky, ak píšete do súboru, ktorý už exists-- tak ako keď sme bežali to prvý čas, dáme ju do output.text, a potom sme mali druhý program že vytlačiť to ako programu dva a robil väčšie ako output.text, prepíše that-- tak prepísať to, čo bolo kedy v tento súbor začať. Takže ak chcete pripojiť do súboru, pretože tu vidíme, stačí urobiť dva väčšie ako znaky. A pripojí k nej. Nebude ho prepísať. Takže ak budete potrebovať na spustenie viac programy a druh udržať Trať, čo všetko z nich sú sa vracať k vám do súboru, to je spôsob, ako to urobiť. Ak vás nezaujíma, čo je vo vašom súbore a to smie byť prepísané, stačí použiť jeden väčší ako. Znamená to, že zmysel pre každého? Divákov: Ako bodka lomka ahoj väčší ako výstup dot texte, ako je dvakrát, to bude len ukázať len na výstupe dot texte druhej time-- SPEAKER 1: Správne. Tak to by v podstate len celkom prepísať, čo sa tam začať. Ak tento súbor tu, output.text už existuje, v podstate čokoľvek, čo hovoria že opäť s jedným Greater než si môžete len myslieť na to, as, ako by nahradil súbor. Rovnako ako keď ste ukladanie Word dokument a vy uložiť ako, a budete mať rovnaký názov, a úplne prepíše to-- je to rovnaký druh veci. Každý, kto má nejaké otázky týkajúce sa len výstup do súboru? Úžasné. Takže samozrejme, ak ste zvrátiť smere šípky, môžete to urobiť vstup. Takže keď vy ste mal ako Caesar alebo Visioneer a vy ste museli na vstup niečo, ste mali riadku príkazu že v skutočnosti je to vstup. To je ďalší spôsob, ako to urobiť. Takže namiesto čakania na príkazovom riadku, ako keď ste požiadaní o správa v Caesar alebo Visioneer, ak by ste mali textový súbor ktorá mala svoju správu, môžete len zadajte ho do toho. Takže keby to bolo ako bodka lomítko Caesar 3 menej ako šípky vstupného textu, ktorý je vaša správa, že pobeží v pohode. Keď je váš program Caesar skutočne požiadaní o zadanie od užívateľa, to by už mať, pretože ktoré ste zadali v tomto súbore. To je len ďalší spôsob, ako. Len spiatočnej output-- stačí zadať pre vaše dáta. A potom ten posledný je rúrka. Tak toto je celkom v pohode. Vzhľadom k tomu, že vám umožní mať výstup jedného Program a dať ho ako vstup do iného programu. Neviem, či niekto z vás hral si s rozlúštiť že CS50 môže mať vám dal, ale to by vám umožní vziať nejaký vzorku súboru, zadajte ho do šifrovanie, a potom odtiaľ typ že do dešifrovanie aby sa uistil, že sa ukázalo rovnaké. Takže je to niečo ako trojcestného slučky. Ísť na to. Divákov: Ak program má viac vstupov, existuje spôsob, ako to povedať, ktorý vstup použiť textový súbor alebo výstup? SPEAKER 1: Má viac vstupov. Či už súbor s input--, keď je to žiada o vstup, ktorý po prvýkrát, je to bude predpokladať, myslím, že je to bude potrubie v celom súbore. Takže ak máte viac vstupov, ty si bude potrubie vo viacerých súboroch. Takže ak sa pýtate správ trikrát v kóde, budete sa uvedenie v troch rôznych súborov. A to bude šialené. A nemali by ste mať obávať, že práve teraz. Ale to je nápad. Tak jo, trubka je len výstup jedného program používa vstup do druhej. Každý, kto tam dobre? V pohode. OK. Vy pravdepodobne nebudete mať sa robiť príliš veľa s ním. Ale mali by ste pochopiť, spôsobov, ako môžete použiť. A tam sú niektoré prípady, ktoré budete chcieť používať. Takže súboru I / O- viem, čo si saying-- sme zvyknutí čítanie a písomne ​​na našu obrazovku tam, ktorý je štandardom v a štandardný výstup. A to je to, čo vy ste boli robí od začiatku triedy tu. Ale môžete tiež čítať a zapisovať súbory, čo je všetko, súbor I / O-, tak vstupný súbor, Výstup je všetko, čo znamená. Takže to v podstate znamená, že môžete ukladať dáta. Keď si len vytlačiť na obrazovka, je to v podstate preč, že jo? Akonáhle budete robiť "Dobrý deň, svet "a spustite" Hello world " vytlačí "Hello World" na obrazovku. Ale nemôžete naozaj čokoľvek s ním odtiaľ. Uložíte Ak v texte súbor, potom sa naraz máte tieto dáta, ktoré máte dovolené manipulovať alebo ho do súboru, alebo dať do programu neskôr. Jedným z dôvodov, prečo prečo to robíme je to len ako spôsob, ako ukladať dáta pre neskoršie použitie. Mám pár krokov tu len prechádzky štandardné I / O. V prvom kroku, budete je potrebné vytvoriť odkaz do súboru so všetkými čiapky FILE hviezda súboru. Tak, že vytvorí ukazovateľ na súbor. Takže chcete otvoriť. A vy hovoríte, a to doslova, len súbor rovná fopen. A to bude návrat ukazovateľ na súbor, ktorý ste práve otvorili. Videl som pár z vás chlapi v úradných hodinách. Ale jedna z vecí, je remember-- ukazovatele môžu byť niektoré adresa alebo null, že jo? Ak by sme niekedy prípad, kedy niečo, čo sa môže vrátiť null, čo máme robiť predtým, než sme vôbec používať? Musíme zistiť, či je null alebo nie je, že jo? Vzhľadom k tomu, že niektorí z vás mohli mať problém, kedy bez ohľadu na predmet bol vrátený v úteku bol nulový. Pokúsili ste sa vykonať niektoré funkcie na to. A počítač miesto porušenej. Je to tak? Stavím sa, že pár z vás môže mali túto otázku. Tak s fopen, bude fopen buď vráti ukazovateľ na súbor, alebo keď sa niečo pokazí, to bude vrátiť NULL. Takže vždy treba skontrolovať že sa nevrátil null predtým, než sa pokúsite urobiť niečo iné. To je ako štandardná paradigmy že budete potrebovať tu. Ak je to vôbec možné, že niečo, čo by sa mohol vrátiť null, skontrolujte, či je nie je, ako budete pokračovať. V opačnom prípade budete získať krásne chýb webu. A nikto rád s nimi zaobchádzať. Tak ako vidíme tu, prvý argument je len cesta k súboru. Ak neexistuje, že súbor, to bude vytvoriť tento súbor. A je to len bude prázdne. A potom druhý argument je režim, ktorý chcete. Chceme čítať z tohto súboru? Chcete napísať z neho? Chcete sa pripojiť? Takže vlastne to, čo som práve said-- v prípade, že súbor neexistuje a vy sa snažíte čítať je to, že to bude hádzať chybu. Ak je súbor name-- páčilo, keby file.text ešte neexistuje a chcete písať na to, bude to vytvoriť prázdny súbor s názvom file.text pre vás. A ak sa chcete pripojiť, ktorú by ste mali urobiť to isté. Dáva to zmysel? Ak sa snažíte čítať súbor, ktorý ešte neexistuje, to bude hádzať chybu. V opačnom prípade bude vytvorenie súboru pre vás to, čo chcete, na to. V pohode. Teraz môžeme čítať zo súboru. A to je len trochu ide medzi rôznymi funkciami že máme pre súbor I / O. Táto vôľa je nutné tento týždeň v pset, ak si dobre spomínam. Áno, je to úplne bude nutné tento týždeň v pset. Takže fgetc vracia ďalší znak. fgets práve vracia riadok textu. Vráti sa nič až do nový riadok, a to zlomí. Takže fread číta určitý počet bytov a umiestni ich do matice, ktorá je niečo, čo by mohlo chcete urobiť s re-size-- by mohla byť užitočná. Koľko ľudí si prečítala pset spec, mimochodom? OK. [Nepočuteľné] SPEAKER 1: OK. Dobrá. Rozhodne čítať that--, že je to sranda pset. Dostanete sa obnoviť zmazané pamäť card-- naozaj vzrušujúce, keď to funguje. Ale určite, začať čítať, že. Poď so mnou hovoriť, ak vás máte otázky o tom. OK, tak ako som hovoril, fread číta určitý počet bajtov. To je nejaký ľubovoľný počet že budete nastaviť. A potom fseek len pohyby do určitej polohy. Takže možno je vám to jedno o ďalších 10 bajtov. Len chcete preskočiť dopredu. Ty nezaujíma ty. Chcete si prečítať už od bytu 11. fseek vám umožní urobiť. Tak to vám umožní byť selektívne o tom, čo čítate. Vzhľadom k tomu, fgetc, fgets a fread čítanie z určitého miesta v súbore. Spôsob, ako premýšľať o tom, či sa jedná je náš súbor, keď ste prvýkrát otvoríte, máte túto pozíciu v súbore ktorý začína na začiatku. Kedykoľvek budete volať fgetc, fgetf alebo fread, to bude začať od tento ukazovateľ polohy. Povedzme, že chcete len čítať tento kus pamäti sem. Nemôžeš len tak zavolať. Musíte hľadať tu a potom si prečítajte odtiaľ alebo čítať, dostane, alebo getc, V závislosti na tom, čo chcete. Takže hľadať len vám umožní preskočiť časti pamäte. A to je jediný spôsob, ako môžete preskočiť veci bez ich prečítaní do vyrovnávacej pamäte. Znamená to, že zmysel pre každého? Je zrejmé, že je Veľa paralelné here-- náš výstup, alebo vstup presmerovanie, ste čítať a písať. Takže fputc len píše znak do súboru. fputs píše čiaru. Fprintf vytlačí formátovaný výstup. Takže ak máte karty, alebo priestor, alebo ktovie čo ešte. A potom fwrite píše niektoré pole bajtov do súboru. Tak toto je rovnakým spôsobom fwrite a fread sú analogické opposites-- fgets, fputs, a potom fputc a fgetc-- veľa Crazy, rýchle veci. Len tak, aby tento handy-- budete mať rôzne časy kde možno len chcete jeden znak naraz. Možno, že chcete celý riadok. S vašou slovníka pset-- ktorý sa skladá z dvoch psets, Verím, že sme vám celok slovník v textovom formáte ktorý má každé slovo oddelené líniou. Takže ak by ste chceli čítať jedným slovom v dobe, čo môžete použiť, ak čítate a všetci sú oddelené na nových tratiach, a chcete len jedno slovo v čase? Divákov: fgets SPEAKER 1: Správne. Fgets-- preto, že sa vráti čo je na jednom riadku. A ak je každé slovo je jeho vlastné línie, môžeme použiť fgets. V pohode. Dáva to zmysel, všetci? V pohode? Jo, budeme sa dostať do tá zábavná časť s ukazovateľmi veľmi skoro, kde na vás si urobiť nejaké matematiky. A bude to skvelé. Posledný step-- zatvorte súbor. S toľkými vecí tu, jeden z našich vzorov ak je to možné vrátiť null, skontrolujte null. Ak otvoríte niečo, radšej zatvorte ho. OK, takže to nie je všetko, kým ste robiť, ak ste ich zavrel. Niečo ako, že to nie je viac ako kým tučná dáma spieva. To je ako zatvorenie súboru. Ako sa hovorí, jednoducho zopakovať, a to vždy otvorte súbor skôr, než ste čítania alebo zápisu na neho. A vždy ho zatvorte, ak ste si ju otvoril. V poriadku? V pohode. Tak tu je príklad. Tak tiny-- ja neviem, či vás chlapci je vidieť, že veľmi dobre. Kiež by sme mohli zvýšiť jas nejako. Dovoľte mi, aby som vlastne robiť to, či môžem. OK, môžete si chlapci naozaj vidieť, že vôbec, že? OK, budeme robiť to, potom. [Nepočuteľné] Predpokladám, že to je oveľa lepšie vidieť. Môže niekto zistiť, kde my myš šiel je otázka? Aha, tu je to je-- čo bojuje! OK. V podstate, vy by mal mať typ z myšlienky na to, čo to robí. Nie je to dokonalé. Ale radšej by som to vysvetliť, ako tráviť viac času sa snaží správne naformátovať. V podstate, ako vidíte tu, začneme sa súbor otvoriť. A máme nejaké databázový súbor, ktorý sme otvoru, ktorý hovorí, že ich naši študenti. A budeme zapisovať. Tak samozrejme, vrátiť null. Takže musíme skontrolovať null. A potom, ak to nie je null, prejdeme. A ako vidíte, sme priechodná tu. Tam sú študenti. Študenti je hash definovaná ako tri. A to, čo robíme, je, že sme tlač do súboru, nie? Takže to, čo sme tlač do nášho súboru? Divákov: Skóre ktoré sú v poli? SPEAKER 1: Jo. Skóre, ktoré sú v array-- presne. Tak sme sa otvoriť tento databázový súbor, ktorý Predpokladám, že je nejaký druh zo stupňa databázy. A my sme len tlač skóre každého študenta do tohto súboru. V pohode? Dobre. Úžasné. OK. Vráťme sa to-- Divákov: Mám rýchly dotaz. Je printf nie je pre sláčiky? To je len v ak slučke? SPEAKER 1: Nie, to je v cykle for. Nevidím myš veľmi dobre sa tu. Takže som sa snažil formát, ktorý správne. Tento držiak by mal byť preč. Malo by to byť tu. To je to, čo je vo vašom cykle for. Tam. Teraz je to dosť. Tak to je, ako to má be-- okrem k tej poslednej konzoly, ktoré som zamietol. OK. Znamená to, že zmysel pre každého? OK. Budeme sa pohybovať na na ďalšiu vec then-- ktoré v skutočnosti, budete musieť vidieť kód. Tak som len tak Kopírovanie, že viac ako práve teraz. OK. Tak idem vám ukázať chlapci tento kód. A chcem, aby ste sa pokúsila obrázok na to, čo to má robiť. Takže vzhľadom k tomu that-- trvať minútu alebo tak. Pokúste sa zistiť, čo sa tu deje. Nejaké nápady? Vieme, že máme aspoň dva argumenty príkazového riadku, je to tak? Predpokladám, že jeden z nich bude že [nepočuteľné] nášho programu je a potom niečo iné. Vzhľadom k tomu, keď je [nepočuteľné] je menej ako dva sme kričať na ne. Je to tak? A z použitia, vyzerá to, že to bude nejaký súbor. Všetci sme sa zhodli na to? Takže teraz, čo je slučka robí? Čo to prechádza? Divákov: Všetky súbory. SPEAKER 1: Presne tak. To sa deje cez všetky súbory, ktoré sme tam vstup. Takže pre každý súbor, je to otvára nejaký reťazec tam. Je to otvorenie tohto súboru. Je to tak? A to čítanie z neho. Samozrejme, kontrola, či je to null. A potom je to tlač. Ak je null, je to len nám hovorí, že to nie je súbor, ktorý existuje. Vzhľadom k tomu, pamätajte, že sa Prečítajte si náš súbor má existovať. Je to tak? S zápis a pripojiť, sa môžete dostať preč s ním. Ale s čítanie, náš súbor má existovať. A potom, ak existuje, Čo tu robíme? Povedzme, začnite tu. Čo je to do-- tento prvý znak. Čo to robí? Dostáva jeden znak, nie? Takže to, čo je toto robí? Začína to prvý znak. Každý, kto vie EOF? Divákov: Koniec súboru? SPEAKER 1: Koniec file-- presne. Takže to pôjde cez celý súbor, je to tak? A potom sa to bude aktualizovať podľa dostať všetky následné charakter. Je to tak? A čo to robí? Divákov: Uvedenie že in-- SPEAKER 1: putchar výtlačky na šetrič obrazovky. [Nepočuteľné] znak. A potom, keď sa [nepočuteľné] to zatvorte súbor. Divákov: Myslíte si, nepotrebujete [? iného? ?] SPEAKER 1: Nie nevyhnutne. Myslím, že je to trochu naznačil v tomto. Pretože tento vráti, aj keď, ako dlho pretože nezachytáva to, že si v poriadku. Myslím, že je to asi dobrý praxi urobiť iného. Ale inak nie je vždy nutné najmä Ak máte niečo ako návrat, ktorý Znamená to, že v tomto prípade, ak sa zachytí to, váš program sa skončí a to nikdy nebude mať v tejto oblasti. Je to skôr pre prípad, kam nemusí nutne vracať niečo. Vzhľadom k tomu, ak to nebolo vracať niečo, to by znamenalo, že ak by to bola pravda, Zvyšok by stále beží. A v tom prípade by chcel false. Ak je to vracia, a Váš program je koniec, inak nie je nutné celý čas, v závislosti na kontexte. Jacob, si nejakú otázku? Divákov: Jo. Tak sa fgetc získať ďalší znak? Ako zvýšiť postava? SPEAKER 1: Jo. Takže fgetc dostane ďalší znak. Môžete si ju predstaviť ako C ++ v istom zmysle. Divákov: Takže to, čo bolo EOF? SPEAKER 1: EOF je koniec súboru. Je to len značka, ktorá umožňuje zistiť, že ste na konci súboru. Takže to bude tlačiť na vašej štandardný výstup. A potom, že to bude zatvoriť súbor, keď sa to robí. A potom ideme na Ďalší obrázok, nie? Takže celkovo, čo tento program robí? [Nepočuteľné] SPEAKER 1: Jo. Je to jednoducho vytlačí všetko tam. Takže ak vy ste niekedy použité CAT a potom názov nejakého file-- Ja neviem, či niekto z vás má kedy urobil, že na vašom termináli. Ale ak ste niekedy použiť Príkaz CAT-- C-A-T-- a potom, čo súbor Máte there-- ju vytlačí ju na vašom termináli, ktorý môže byť super užitočné pre niektoré veci. Používam to veľa. Znamená to, že zmysel pre každého? V pohode? OK, takže váš úloha now-- buď sami alebo s ľuďmi okolo you-- je jednoducho napísať jednoduchý program že bude len napísať "Hello, World!" do súboru. [Nepočuteľné] [Nepočuteľné] SPEAKER 1: Bol som rád, že nie Robím to zle minulý týždeň? Nemyslím si, že to bolo tak zlé. Som rád, že si tu. Je to naozaj robí mi to radosť. Som dievča jednoduchých potešenie. Len som rád, keď môj oddiel navštevuje. Takže som len na to, to začalo pre vy, takže môžeme kódovať spoločne. Nepáči sa mi dávať nikomu na miesto, ak chcete byť. Obecenstvo: pre kvízu, robiť Máme napísať program? SPEAKER 1: Môžete byť vyzvaní k písať jednoduché programy ručne. Jo. Divákov: Kvíz je budúci týždeň, nie? SPEAKER 1: kvíz je budúcu stredu. To znamená, že je krásny [? CSE?] triedenie strana potom, čo znamená, že budete mať svoje skóre späť že night-- v koľko hodín? Kto vie? Ale bude to, že v noci. Dobrá. Ako chceme začať to? Dám vám hint-- začína týmto. Divákov: Musíte otvoriť súbor. SPEAKER 1: Jo. Takže to, čo chceš nazývať? Myslíte si len chcete volať to "file"? Poďme uľahčujú. Takže to, čo je naša fopen-- test výstupov bude? Nazvime to "Ahoj." A čo je naším režim? Čo budeme robiť s týmto súborom? Divákov: Prečítajte si. Písanie. SPEAKER 1: Píšeme na to. Lovely. OK, takže máme tento súbor. Čo musíme urobiť? Divákov: Skontrolujte, či je null. SPEAKER 1: Skontrolujte, či je to presne null--. To je to, čo som chcel počuť. To by malo byť automatické, a to najmä do značnej miery od tohto okamihu. Ak začnete segfaulting, budete pravdepodobne ani kontrolovať null niekde. V deviatich prípadoch z desiatich, to je bude váš chybe. Takže ak by ste mohol len dostať zvyk, vždy skontrolujte, či je to null, Váš život sa bude pekné a easy-- alebo jednoduchšie. Tak skontrolujte, či je null. Takže ak to nie je null, čo je to, čo bang rovná means-- nie null-- je to platný. Čo chcete robiť? Chceme len vytlačiť do tohto súboru, nie? Takže to, čo budeme používať? Divákov: fprintf SPEAKER 1: Fprintf-- krásne. A fprintf má dve arguments-- kde je to to bude a čo chceme vytlačiť. Takže to, čo je prvý? Tam, kde to ide? Divákov: File. SPEAKER 1: Ide to do súboru. A čo chceme vytlačiť? "Hello, world!" Dobrá. Máme posledný thing-- ďalšia veľká paradigma tu. Divákov: Zatvoriť. SPEAKER 1: Close. Tu to je. Divákov: Je to happening v prípade, že súbor je null? SPEAKER 1: Nie, to je v prípade, že to nie je null. Publikum: Oh, ak je to ne-- OK. Pre fopen a potom dva argumenty, ktoré idú dovnútra, čo prvý argument na mysli znova? SPEAKER 1: argument je rovnako ako meno súboru že chcete ísť. Takže po tomto beží, by ste nejaký súbor s názvom "ahoj" že mal "Hello, World" v ňom. To je všetko. Len názov. Divákov: A pretože je to písanie, Súbor nemusí už existujú. Je to to, čo si povedal? SPEAKER 1: Správne. Presne tak. Ak je "Hello" ako súbor ešte neexistuje, je to chystáte vytvoriť súbor s názvom Hello "a napíšte naň pre vás. Divákov: Keď hovoríte program napísal do súboru, prečo píšeš "file" miesto názov súboru a fprintf-- SPEAKER 1: Pretože v tomto prípade máme že veľké FILE-- všetko v caps-- hviezdy, súboru. Takže je to ukazovateľ na súbor že hovoríš. To je spôsob, akým sme proste na neho odkazujú. Takže v tomto prípade je môže myslieť file-- Aha, môžeme použiť tohle-- súbor tu odkazuje na otvorenie "Hello" a nechať ho zapísať. Divákov: Mohli by sme dať "Hello" namiesto toho [? púheho?] f súbor? SPEAKER 1: Nie, pretože "Hello" musia byť otvorené a zapisovať. Súbor je tu ako označenie, ktoré hovorí, že OK, túto file-- hello-- že sa pozeráme. To bol otvorený. A budeme zapisovať. Ak stačí použiť "Hello", ktorý je zapuzdrený v ňom. Takže to bude šalieť. Myslím, že by ste mohli mať pomenovali. Dalo by sa urobiť súbor, hviezda, "Hello", rovná. Ale celá vec je, že vás Potrebujete súboru hviezdy ukazovateľ v poradí aby mohli tieto funkcie využívať. Divákov: Mohla by si súbor, hviezda, súbor, "Hello" alebo si budete musieť dať súbor hviezdu, súbor to? SPEAKER 1: Dalo by sa robiť súboru, hviezda, "Dobrý deň." Môžete zmeniť to, aby bez ohľadu na meno, ktoré chcete. Je to úplne ľubovoľne čo to volá. Môžete pomenovať to čokoľvek. Pomenujte ju lietanie špagety, ak ste chceli. Divákov: Čo je to "w" v úvodzovkách pre? SPEAKER 1: "w" je len režim. Takže sme zápis do tohto súboru. Každý dobrý? Clear? Áno. Divákov: Takže keď to píše toto súboru, kam sme potom zistíme, že súbor? SPEAKER 1: Bude to v rovnakom adresár, ktorý ste v súčasnej dobe. Ak ste v pset tri a spustenie toho priamo vo Vašom pset tri zložky bude Tento súbor s názvom "Hello". V pohode? Každý dobrý? Mám pocit, že ste všetci ako sa to, čo je skvelé. OK. Takže späť k mojej prezentácii show-- Mám rád, keď veci fungujú. OK, pointers-- Ste chlapci nadšenie? Ukazovatele sú skvelé. Berú trochu zabaliť hlavu okolo. Toto je môj druhý rok výučby ukazovatele. A myslím, že som sa konečne dostal to. Takže ak ste sa snažia, je to OK. Ako som už povedal skôr, kreslenie obrázkov veľa pomáha s vecami v SK, rovnako ako ja, že ľudia majú tendenciu premýšľať oh, my sme na počítači. By sme mali len kód. No-- obrázky kreslenie vám naozaj pomôže. A naozaj odporúčame vám preniknúť do vášho učiteľka materskej školy stranu a vyvediem pastelky alebo fixky a draw. Vzhľadom k tomu, že vám pomôže. A či ma vidieť na úradných hodinách, som bude nosiť stohy papiera s pera kreslenie veci. Tak najmä pointers-- kresliť obrázky. A som si istý, že sme vlastne bude zostavuje niekoľko fotografií tu. Takže vy všetci dostali vidieť Binky, to v pohode claymation vec. A myslíme si, že je to naozaj smiešne, keď on exploduje do banda kusov. Je to nejaký komická pre triedu. C [nepočuteľné] tento skvelý schopnosť aby bolo možné kontrolovať pamäti. A to je jedna z vecí, ktoré naozaj je to taký silný jazyk. Ale s veľkými schopnosťami prichádza aj veľkú zodpovednosť. A bláznivé veci sa môže stať ak si nedáte pozor. Takže, keď používate ukazovatele, chcete, aby sa že ste naozaj pochopiť presne to, čo robíte. Dúfajme, že budúci trochu Čas vám pomôže naozaj pochopiť, ukazovatele, ako ich používať, a ako manipulovať s nimi. Takže memory-- Som si istý, máme videl tento diagram. Takže je to len jednoduchý diagram ako by sa veci uložené v pamäti. Takže ste v podstate majú tieto obrovské pole jedného bytu blokov je to, čo máme here-- mierny zvyšuje sa po jednej zakaždým. To je v hex [nepočuteľné] tak osem-bitové bloky. A každý blok je spojený s nejakým hexadecimálnom adresu. Takže ak ste niekedy vidieť 0x, to je len notating že je to hexadecimálne adresu. Môžete Predpokladám, že to znamená, niektoré adresy v pamäti. Hovoríme o adresy pamäti Kedykoľvek vidíte hexadecimálne. Máme ints sú premenné, plaváky sú premenné, ktoré uchovávajú. Takže ints ukladanie ints. Plaváky obchod pláva. Takže máme aj ukazovatele že obchod adresy pamäti. To je druh mapovanie. Ukazovatele sú výhradne pre pamäťové adresy. Tak to je ako tvoj typ tam. Váš spotrebič je 32-bit, čo znamená, že vaša adresa pamäte sa štyri bajty. Takže akýkoľvek ukazovateľ, ktorý máte sa tiež bude štyri bajty. Alebo či je to štyri byty, pamäti štyri bajty. Ukazovatele obchod pamäti. Preto, že sú štyri byty. Cool-- len chcem zdôrazniť, že. Mali by ste si tento komiks teraz. Neviem, koľko z vás sú xkcd fanúšikovia, ale mám rád xkcd. Je to skvelé. Dobrá. Tak vytváranie pointers-- ako som povedal, je to do značnej miery rovnako ako čokoľvek iného. Máte typ. Máte meno. Je to tak? To je to, čo máme tu. [? Hex?] Hviezdička znamená, že je to ukazovateľ, a potom, čo chcete hovoriť. Takže typ predstavuje čo môžete uložiť. V poriadku? Rovnakým spôsobom, že ak budeme robiť celých čísel, vieme, že sme tam ukladanie int. S ukazovateľom, je má adresu v pamäti. Ale čo to znamená, that-- tu je miesto, kde výkres bude hodiť. Takže v tomto prípade máme niektoré value-- povedzme štyri. Štyri je na adrese jedna. OK? To prvé, kto tu znamená že je to ukazovateľ 2x. Je to tak? Je to nejaký ukazovateľ x. x môže byť niečo, čokoľvek. Či už x je-- povedať x je štyri. Bude to uložiť adresa tu pamäť. Takže int, hviezda, x-- to je nejaký iný slot v memory-- kto vie, čo to je. Ale bude to tu uložiť adresu. Takže by to bolo like-- v tomto prípade, bez ohľadu, je uložený na 0x1--, čo je uložené na adresu, ktorú náš ukazovateľ má k dispozícii, sa musí zhodovať s To, čo sme určený. Takže na 0x1, v tomto prípade je to x. To môže byť jedine int, keď sme pomocou tohto. Podobne, ak máme ďalšie 1R, bez ohľadu na adresa je uložená s y má byť char-- to isté sa z. Rovnakým spôsobom vždy, keď vyskúšať a urobiť intx rovná 0,4, to bude revať na vás a bude ako nie, hovoril ste, že chcel int. To má byť int. Prestaň sa snažiť, aby to float. Takže nechať veci byť tým, čím chcú byť. Nechať veci byť sami sebou. Takže veľká vec je len bez ohľadu na typ ukazovateľ to je, to je jediný vec, ktorú tam môžete uložiť. OK? S praxou, ako u minulý týždeň, všetko Zdá sa, naozaj trochu abstraktné. Chystáme sa urobiť nejakú prax. To by malo väčší zmysel. Tak odkazov a dereferencing-- je to veľmi dôležité, aby sa tieto priamo. Stále mám obnoviť tu a tam. A ja som rád čakať, ktorý z nich chcem? Takže ampersand bude skutočne dať si referencie alebo adresa. Tak to vráti adresu pamäť, ktorá je uložená premenná. Takže to bude naozaj vrátiť k vám hexadecimálne, zatiaľ čo dereferencing ju sa skutočne deje, aby vám dáta, ktoré sú v ňom uložené. OK? Takže ideme sa pozrieť na príklad naozaj rýchlo, alebo dokonca až nabudúce. OK. Takže musíme naozaj myslíte, starostlivo o tom. Takže tu máme nejaké celé číslo x. Budem sa snažiť a kresliť to sa na to najlepšie z mojich schopností. Takže budeme mať tento slot x. A to ukladanie päť. Jeho adresa je 0x4. V pohode? Všetky dobré. Takže teraz máme túto ukazovateľ. Bolo to tu. A ampersand nám dáva Adresa niečo. Takže v tomto prípade, je to adresa x. Aká je adresa x? 04-- a tento ukazovateľ je 0x08. V pohode? Takže si môžete myslieť o tom ukazovateľ, 04, len upozorňuje sem. A oni nazývajú odkazy pretože ako sme sa dostať viac do toho budete vidieť, ukazuje na veci. A jeden blok ukazuje na ďalšie blok bude oveľa väčší zmysel. Tak tu sú dve. A potom tu máme nejaké kópia, ktorá je what-- 0x0C. A že to bude dereferencia našej ukazovatele. Takže to, čo hovorí, je OK, tu je náš ukazovateľ. Hodnota ukladá je 0x04, A čo to hovorí, je na túto adresu a povedz mi, čo je v ňom. Tak to je skutočne Čo táto šípka robí. Môžete myslieť na to ako svoju hviezdu. Tak OK, keď budeme robiť hviezdu, znamená to nasledovať. Prejdite na túto adresu. A to je v podstate len po Táto šípka tejto pamäti kus. A dať nám to, čo je v nej, čo je 5. To je dôvod, prečo naše kópia je rovná 5. Dáva to zmysel? Potrebuje niekto ma prejsť že znovu, alebo pomalšie? Chceš, aby som šiel cez to ešte raz? OK. Budeme ho prekresliť znova. Keď začneme, všetci súhlasíme s tým máme niektoré kus pamäti, že je to premenná x, že nastavíme rovná 5. Nemáme kontrolu tam, kde je v pamäti. Takže toto miesto je len náhodne pridelené. Tam dobre? OK. Potom sme sa inicializovať ukazovateľ na int. To je dôvod, prečo je dovolené, aby ukazoval na x, pretože máme int tu. Máme ďalší kus pamäti, pretože tento ukazovateľ je premenná, rovnako ako čokoľvek iného. Je to náhodne pridelené nejaký priestor v pamäti. A to, čo ukladá ich adresa x. Ampersand znamená adresu x. Takže to, čo je adresa x? Divákov: Je to zero-- SPEAKER 1: 0x04. Takže then-- posledná. Máme nejaké copy-- znova len ďalšie premenné. Takže poďme priradiť nejaké ľubovoľné miesto. A my dereferencia našej ukazovatele. Hviezdička znamená ísť do adresa uložená v mojom ukazovateľ. Povedz mi, čo tam je. Takže adresy uloženej v našom ukazovateľ je 0x04. Tak ideme na túto adresu. Je to ukazuje na túto adresu. Čo je vo vnútri tohto bloku pamäti? Je to päť. Takže to je to, čo sme priradiť svoju kópiu. Každý dobrý? V pohode. Again-- obrázky. Takže monitorovanie hodnoty here--, som nechám vy si o tom myslíte. Môžeme čerpať ďalšiu snímku. Ale ja chcem, aby ste sa pokúsila dôvod cez to na vlastnú päsť po dobu jednej minúty. Vzhľadom k tomu nedali nás napríklad adresa, Ja som len robiť ampersand x-- ktorý by mal pomôcť riadiť ho domov. Ampersand znamená adresy. Takže v prvej, všetci ísť s prvom riadku. Niektoré x set je five-- niektoré náhodný slot v pamäti. Int hviezda ukazovateľ je rovný na adresu x, nie? Int hviezda ukazovateľ vytvára tento blok, volá to ukazovateľ, a priradí ju na adresu x. Som hrozný na ampersand. A teraz, čo robíme, je povedať, OK, dereferencia našej ukazovateľ. Tak ideme na tlačidlo OK, čo je v našich ukazovateľ? Je to ampersand x. Prejsť na ampersand x a priradiť ju. Takže teraz, ampersand x bude 35. Takže v podstate, keď ste dereferencing, idete na tlačidlo OK. Budeš sa kreslenie obrázky, ako je tento. Budeš sa kreslenie šípy nad tým, kde je. Takže choďte do tohto slotu v pamäti, a to buď daj mi tú hodnotu späť alebo ju zmeniť. V tomto prípade, pretože sme na to hodnota, my ju priradiť ako 35. Kým v poslednej jeden, ak si všimnete, my bolo priradenie, čo bolo tu k niečomu inému. Takže majú túto hroznú tabuľky. Nie je to tak zlé. Vy ste na tom pracovať. Budem čerpať ju na palube. Chystáme sa vyplniť ho spolu, OK? Takže uchopiť nejaký papier, drapák partner, začať pracovať. Budem mať väčší kus kriedy. Vzhľadom k tomu, že to bude veľa. OK. PROFESOR: OK. Začnime s prvým radom. Začneme tam, potom chlapci môže možno fungovať cez niektoré viac. OK. sa rovná b krát c, takže to, čo je? Nie je to chyták, sľubujem. STUDENT: 4 krát 5. PROFESOR: 4 krát 5. 20. Takže to, čo je b? STUDENT: 4. PROFESOR: A c? STUDENT: 5. PROFESOR: 5. A potom je to len tak byť ampersand a, b ampersand, ampersand c, nie? To nie je zlé. Je to dosť jednoduché. OK. Tak ten budúci. Rovná časy C, v prípade kto bol neznámy s tým. Je všetci poznajú s časmi sa rovná? OK, to všetko means-- je skratka pre rovná časov c. Môžete si tiež urobiť to s rozdelením, Okrem toho sa, s odčítanie. Môžete to urobiť je rovná, alebo navyše sa rovná c znamená, rovná a navyše c, mínus rovné c by sa rovná mínus c. Je to len syntaktický cukor. Takže v tomto prípade, sa rovná časov c by nám, čo sa dá? Opäť platí, že nie je chyták. STUDENT: 100. PROFESOR: 100. Má niečo zmeniť? Nie. Možno, že sa konečne dostanem lepšie na mojej ampersand. STUDENT: OK, je mi ľúto, ako ste sa dostal 100? PROFESOR: OK. Tak sa rovná krát c, takže časy c. STUDENT: Oh, vy používate pre previous-- PROFESOR: Áno. Tak to sú naše posledné hodnoty. Jedná sa o to, čo by malo byť použitie ako sme sa presunúť dole, OK. Takže, b je jediná vec, zmena, nie? Takže poďme vyplniť všetko ostatné. B. Čo sa b bude? Byť či nebyť. Takže to, čo je toto robí? Čo je hviezda pa robíš? STUDENT: Kód pre umiestnenie pa. STUDENT: Nie, nie tak celkom. Takže toto je odkaz d. Žiak: Takže b je rukou hodnota pa. PROFESOR: Jo, tak pa je adresa, nie? Tak to hovorí ísť tam, kde je skladované a dať mu túto hodnotu. Takže to, čo je b? STUDENT: 100. PROFESOR: 100. Perfect. OK, takže pc je to, čo sa mení. Všetko ostatné zostáva rovnaké. Čo sa pc bude? Jednoduchá úloha. Pc je rovná pa, a to, čo je pa? STUDENT: ampersand. PROFESOR: Perfect. Teraz sa dostávame zaujímavý. OK, poďme rozbiť tento nadol. Po prvé, čo je b krát c, pretože to je ľahká časť tohto jedného, ​​je to tak? Časy B c je-- STUDENT: 500. PROFESOR: Jo, tak Čo je toto robí, Či je to hviezda pb, čo sa mení? STUDENT: Čo je v the-- PROFESOR: Čo je B? STUDENT: Čo je v priestore že pb ukazuje. PROFESOR: A pb ukazuje to-- STUDENT: B. PROFESOR: B. Takže jediný vec zmena je b, pravdu. Tak b krát c, 500. Takže to je to, čo sa mení teraz. V pohode. Lovely. Vy ste skvele. V poriadku, porušenie tohto jeden dole. C sa mení, že jo? Takže môžeme vyplniť všetko ostatné. Poďme sa pozrieť. OK. Vieme, že c je bude súčin dvoch čísel, je to tak? Čo dve čísla, aj keď? STUDENT: A a C? PROFESOR: Tak je právo na prvú. Takže sme d Menu odkazujúce p na, nie? P z bodov A, takže vieme, že to bude 100 krát, čo? Times, čo robí pc bod? Body sa. Tak 100 krát 100 je 10,000. Má to zmysel? V pohode. Home úsek, chlapci, posledný riadok. OK. Čo sa mení tu? STUDENT: A. PROFESOR: A. Perfect, tak všetko ostatné môže zostať rovnaká. OK. A čo je to? Takže je to doba, čo? To je hviezda pb. Takže hviezda pb znamená, tu je to, pb, Pb bodov b. STUDENT: 500. PROFESOR: 500. Takže máme 500 krát 100. To je 50,000. Páni! Pozrite sa na to. Žiak: Prečo máme & C pre last-- PROFESOR: Ospravedlňujem sa. STUDENT: Oh, OK. PROFESOR: Moja chyba. Veľa písomne. Každý dobrý? Nie je to tak zlé, nie? Stačí len málo zatiaľ čo k práci. Ak máte vyraziť, pochopiť, čo každá časť odkazuje to-- ako so všetkým, čo je to, yes-- vyraziť na malý problémy a potom sa spoja, a môžete urobiť nejaké úžasné veci. Tam sú odpovede, ale my sme to. Pointer aritmetika. Ah. Moje ruky sú kriedovo. Takže pridaním alebo odpočítaním int nastaví ukazovateľ podľa veľkosti typu ukazovateľ. Spomeňte si, ako každý druh má inú veľkosť? Tak ako double alebo long long znamená osem a int je štyri, ale je jeden znak. Takže to, čo chcete robiť, je-- jednu vec mať na pamäti, je práve to, ako moc sú vaše Hodnota ukazovateľa sa práve mení bude závisieť na typ ukazovateľ je. Každý dobrý s tým? Môžem vymazať? Sme dobrí? Úžasné. Takže ak máme nejaký ukazovateľ that-- to bude be-- som bude robiť to ukazovateľ int. Ukladá to. Ak by ste mali povedať, ukazovateľ plus jedna, čo to bude robiť sa to bude aktualizovať to podľa veľkosti int pretože to je typ ukazovateľ je. S C, je všetko veľmi prísne a regulované. Ukazovateľ int bude aktualizovať podľa množstvo priestoru int bude trvať. Int je štyri bajty. Takže to, čo by to premeniť? Ste práve pridaním štyri na to. Teraz ukazovateľ by be-- OK. Takže ak je to char a my ukazovateľ plus jedna, čo by to bolo teraz? Ak je started-- predstierať sme started-- teraz je to 0x08. Poďme sa teraz povedať, že to bol char ukazovateľ, a pridali sme jeden. Čo by to zmeniť? Koľko bytov je char? Divákov: One. SPEAKER 1: One. Divákov: Tak 0x09. SPEAKER 1: Tak to by bolo deväť. Takže len niečo zapamätať. Stačí, keď si pridať jeden, nie je to Ak pridáte jedno, ak je to char. Je to pridaním koľko bytov typu, že je, čo je dôvod, prečo máme Táto rovnica sa tu. Takže je to int krát väčšia typu ukazovateľ. Takže máme príklad tu. y bol pridelený do tej hodnoty, 0x4, keď sme y a rovný jednej. Čo je v tom, čo je v x, nemení. Čo robí zmeny je to, čo je v y. Adresa uložená v y aktualizovaný o štyri pretože tam sú štyri byty v int a je to ukazovateľ int. Dobrá. Takže teraz máme ďalšie cvičenia. Takže otázka je, čo sa bude tlačiť. Nejaké nápady? Divákov: Počet znaky spokojnú mačku? SPEAKER 1: Presne tak. Tak rád so svojím reťazcom. Má každý dostať, že? Chceme ísť cez neho? Áno, OK. Takže to, čo máme here-- I takto oveľa viac. Nemám na [Nepočuteľné] smiešne. Takže máme reťazec tu šťastná mačka. Lovely. Máme nejaké počítadlo, ktoré sme sledovaní. Takže máme nejaký char * ukazovateľ že práve je rovná Str. Čo to robí, je, že je to priradenie nejaký ukazovateľ na začiatku svojho reťazca. Pretože som si istý, ako to bol spomenutý v prednáške, dali sme tí chlapci to dátový typ nazvaný reťazec. Ale naozaj reťazce sú len pole of-- ako char *. Je to ukazovateľ na veľa postáv že sú súvislé pamäti. Takže to len nastaví ju rovná ľubovoľný reťazec je identifikovaný kde jeho prvý znak. Takže je to len nastavenie nejaký bod rovnajúcu sa začiatok reťazca. Každý, kto tam dobre? V pohode. Tak toto je náš dereferencing ukazovateľ. Takže to vlastne bude nám nejakú hodnotu tu, v našom reťazci, že hovoríme o. A hovoríme tak dlho, ako to nie je null zakončenie. Takže pokračuj, kým sa nedostanete na koniec reťazca. Aktualizujte svoj ukazovateľ o jeden. Tak R, bude v skutočnosti aktualizuje jeden zakaždým, pretože to je char, char *. Takže to bude prechádzať. Bude to aktualizovať. Takže prvýkrát v tomto beží, to bude tu na h. Bude to aktualizovať. Bude to. Bude to p, y, a tak ďalej a tak ďalej. Budeme aktualizovať počítadlo. Keď sa dostane na koniec, to práve tlačí, ako ďaleko to dostal. Áno. Divákov: Tak to sa počíta priestor ako jeden, nie? OK. SPEAKER 1: Myslíš, že áno. Je to question-- Divákov: [nepočuteľné]. SPEAKER 1: Žiadne obavy. To som urobil. Dobre, tak jedna vec, ktorú som pochopiť, že s radom, môžete tiež zaobchádzať s ňou ako ukazovateľ, pretože pole sú len kontinuálne miesta pamäti. Takže môžete zaobchádzať s ňou rovnakým spôsobom. Môžete ich manipulovať s ukazovateľmi, taky. Takže namiesto toho robí, v tomto prípad je analogický vec bude polia 0 sa rovná 1. Ale rovnako, že reťazec je určený do začiatku, kde jeho prvý znak, pole je určená kde jeho prvý prvok. Pretože vieme, že sme zaručené, že tieto sa bude kontinuálne bloky pamäte. To je to, čo nám umožňuje, ako to urobiť. Vieme, že kontinuálne bloky pamäte. Takže v tomto prípade, by dereferencing len polia, ktorá nám hovorí, OK, prejdite na začiatok vaše pole, ktoré je tu. Takže si môžete nastaviť, že sa rovná jednej. A v tomto prípade, bez ohľadu na svoje pole typ je, keď ho aktualizovať po druhom, to je rovnako ako aktualizácia sa na ďalší index. Môžete to urobiť, pretože vás Viete, čo je vo vašom poli. Tak to vie, koľko sa aktualizovať ukazovateľ by, akú adresu ho na to aktualizovať že ste v ďalšom slotu. Takže je to len iný spôsob, ako písanie polia 0 sa rovná 1, pole 1 sa rovná 2, polia držiak 2 sa rovná 3. Je to len ďalší spôsob, ako premýšľať o tom. Vzhľadom k tomu, že sú spojité bloky v pamäti, môžete sa na ne odkazovať buď u polia notation-- čo ja osobne nájsť easier-- ale možno je potrebné manipulovať s ním striktne podľa adresy pamäti. A to je tak, ako by ste to urobil. Druh viac ako v pohode, čo môžete urobiť proti možno nie je niečo, čo ste v skutočnosti bude vykonávať. Používam ju v 61. Vy pravdepodobne nebudete potrebovať sa starať o to príliš veľa. Ale ak máte záujem, trvať 61 budúci rok. Sme v cieľovej rovinke chlapci. Ja viem, že je to dlho. Dynamic Memory Allocation-- tak vieme, že ten, vecí, keď sme sa rozprávali počas náš prvý časť spoločne, sme sa pozreli na swapu funkcie, kde je to mimo rámec našej hlavnej funkcie. A my sme boli okolo týchto hodnôt že boli účinne kópie. A akonáhle swapu dokončenie prevedenie, to jednoducho nechal hromadu. Pamätajte si, že máme stack rámec pre swap. Ponecháva a ty Hodnoty odísť s ním. A oni boli preč. Nemohli sme nič robiť s nimi a my sme boli smutní pretože nemôžeme vymeniť naše hodnoty. Ale s C, ako som už spomenul, vás majú veľkú moc nad pamäti. Takže to, čo môžete urobiť, je môžete prideľovať veci na halde tu že zostane tam, kým poviete im inak. Sú ako dobré deti. Oni tam zostať. Nemajú odísť. Budú tam zostať, kým ste ako, OK, môžete odísť. Vzhľadom k tomu, čo v zásobníku, who-- sú ako neposlušné deti. Budú proste utiecť, keď chcete aby sa tam a potom sú preč. Nemôžete dostať ich späť. Takže haldy je-- budeme hovoriť o malloc a zadarmo, čo Som si istý, chlapci počul o v prednáške. A to je v podstate spôsob, majú veľmi perzistentné dáta. Takže môžete mať dáta okolo tak dlho, ako budete chcieť. MHM. Divákov: Môžete definovať haldy a zásobníka? Sú radi miesta, ako dať veci? SPEAKER 1: Takže sú v podstate prostě-- sú spôsob, akým sa vzťahujú len na pamäti. Takže haldy len miesta, kde pamäť je alokovaná dynamicky, vzhľadom k tomu, stack odkazuje viac na seba rámy ktoré sú zásadné pre funkcie, ktoré sú v skutočnosti beží. Tie naozaj nemajú kontrolu. Veľký rozdiel, máte kontrolu cez hromadu, ak chcete. Máte menšiu kontrolu nad komínom. Zásobníka závisí na funkcie, ktoré sú spustené, a poradí, v akom sú beží, a ako sa vráti veci. Vzhľadom k tomu, s haldy, as uvidíme, môžete povedať, OK, chcem sa túto hodnotu okolo, kým som ti to povedať inak. Nie je dovolené, aby sa ho zbaviť. Nesmieš ju prepísať. Budeš mať okolo tak dlho, ako vám hovorím. Dostanete sa byť šéfom v halde, vzhľadom k tomu, stack-- Možno, ak budete ako podvádzať svoju cestu môžete byť šéf. Ale nie tak celkom. A je to naozaj len spomienka. Je to len rôzne spôsoby, ako sa odkazovať na pamäti. V pohode. Takže s tým, ako sa ovládať svoje pamäti. Je to s malloc, ktorý budete mať k použitiu. Takže je to len krátka pre pridelenie pamäti. To je všetko, čo je. Je tu veľa ďalších pekných funkcie, ktoré majú Alloc na konci, a oni kandidujú na rôzne veci. Takže keď budete potrebovať úložisko, ktoré je potrebné prečkať aktuálnu funkciu tak, že ak Vaša súčasná Funkcie utečie, stále máte dáta, ktorá vás dostal od neho chcete používať malloc. To bude inicializovať ju na hromadu. A ako som povedal, a udržať hovorí, budete ho tam udržať kým to povedať inak, čo je dôležité tu. Takže jedna vec je si všimnúť, a to je zvyčajne veľmi dôležité, je, že tento sizeof je super vhodné použiť preto, že v závislosti od typu stroje vediete, môže mať rôzne množstvá pamäti, že to trvá. Takže chcete vždy používať veľkosť tak, že nie ste závislí stroj, aby váš kód bude spustiť na akomkoľvek počítači. A to je len časť písanie dobrý kód. Ak to funguje na jednom počítači, ale nie žiadne z ostatných, Ako užitočný bol váš program? Takže chcete vždy uistite sa, že aj použitie sizeof. Divákov: Tak je to, že rovnako ako veľkosť 10 palcov [nepočuteľné]? SPEAKER 1: Jedná sa o veľkosť 10 ints. jo. Takže veľkosť ints vráti koľko jeden int trvať. Alebo veľkosť char, ako veľa robí jednu char vziať. A potom, koľko blokov z toho chceš? Takže v tomto prípade, chceme niečo ktoré môžeme ukladať 10 celých čísel na. A to bude fungovať bez ohľadu na stroja, ktorý je v pohode. Tak koľko bytov bude že vlastne dať? Rýchle matematika. Divákov: 40. SPEAKER 1: 40. Presne tak. Takže ďalšia veľká vec. Pointer alebo malloc môže vrátiť hodnotu null. Takže znovu, vždy skontrolujte, uvidíme, či to vrátil null než sa pokúsiť s ním nič urobiť. Ak sa pokúsite dereferencia tento ukazovateľ teraz, to len tak segfault pretože si išiel a snažil dotknúť null, ak by ste nemali mať. Takže vždy skontrolujte, či null. Opäť platí, že všetko, čo urobiť. To môže vrátiť hodnotu null. Bude to návrat null, ak ste buď z vesmíru, alebo z akéhokoľvek dôvodu to bežalo do nejakej pamäte chyba. Niekedy sa jednoducho vráti hodnotu null. Takže stačí skontrolovať to. To je všetko slide hovorí. A potom to, čo máme Tu je volanie zadarmo. Takže rovnakým spôsobom, že ak máte otvorenie súboru musíte zatvoriť súbor, ak sa vám malloc pamäti, môžete musíte uvoľniť, že pamäť. A vy dostanete urobiť naozaj cool veci. A tam je program, ktorý možno spustiť na zistiť, či ste niekedy netesní pamäti. Ale nechcete, aby k úniku pamäte. Je to naozaj zlé. Len pokaziť veci. Je to zlé, robiť, rovnako ako programovanie múdre, účinnosť návrhu. Ale je to tiež tak nejako zo zlé pre váš počítač. Takže len voľné veci keď je malloc. Vy ste vidieť symetria tu. Super jednoduché. Len voľný, a následne bez ohľadu na ukazovateľ, bez ohľadu na názov ukazovateľ je, a to sa postará o uvoľnenie za vás. V pohode. Potom sme to. Takže sme len tak prejsť tohto programu. A potom vy je hotovo. Takže [nepočuteľné] len hlavné. Takže máme nejaké int * ukazovateľ. Takže máme ukazovateľ že to bude držať celých čísel. A koľko ints to bude držať? Len jeden. Veľkosť int. Skontrolujte sme sa zistiť, či ukazovateľ je null, pretože to je, chceme povedať, nerobia nič. Je to zlé. Tak sme vytlačiť nejakú chybu von pamäti, najčastejšie vráti 1, ako vy zvyknutí. A potom tu máme, sme dereferencia našej ukazovatele. Takže to znamená, že budeme ukladať niečo, čo na mieste nám bol daný. Int * ukazovateľ, alebo malloc vracia adresa, kde zrušil tento Pamäť pre vás. Takže je to v podstate ktorá vám like-- ak vás premýšľať o tom, banda domy v okolí ktoré chcete, aby Váš nábytok, malloc je ako v poriadku, dostanete ísť do domu tri. A to vám dáva Adresa domu tri. Takže to teraz, to Ukazovateľ sa ukladá adresa, uloží adresu Vášho domu. * PTR znamená, OK, ja som v mojom dome. V pohode. Musím sa dostať nejaké číslo. Takže sa pýtate na niekoho aby vám nábytok teraz. Takže ste si nejaké int. A kladie ju do ukazovateľa kde to ukazuje. A potom sa to len tlač von, ktoré ste zadali kdekoľvek. A opäť, referencie. Tak to je, ako by ste išli na to adresu a videl, čo tam bolo. V pohode? A potom samozrejme môžeme oslobodiť našu ukazovateľ. Nezabudnite oslobodiť svoju ukazovateľ. Nezabudnite skontrolovať null. Nezabudnite oslobodiť svoju ukazovateľ. Máte dve veci si pamätáte z to, alebo ktoré by ste mali pamätať. Áno. Divákov: [nepočuteľné] veci ako to, char * s. Ako to, že sme sa nikdy oslobodiť ty? SPEAKER 1: Hm? Divákov: To sú ako nitky? Hovoril ste, že reťazce sú rovnako ako char * s, nie? Tak prečo nie my oslobodiť nitky? SPEAKER 1: iba zadarmo, ak ste mallocing. Publikum: Oh, ak ste mallocing. SPEAKER 1: Takže malloc a zadarmo sú dve veci, že by ste mali mať vždy spoločne. f open, f zavrieť, dve veci, mali by ste mať k sebe. V oboch týchto prípadoch, skontrolujte, či null. Áno. Divákov: Takže zadarmo, je len čo niečo iné má byť uložený tam po Tento program sa používa, že? SPEAKER 1: Je to len povedať, OK, som urobil s tým. Nemusíte sa držať okolo. V opačnom prípade bude váš počítač len rád vyskúšať a udržať ju tam. A potom can't-- beží do pamäti otázky neskôr. Vždy chcete uvoľniť, pretože to vám povie váš počítač, OK, ja som urobil s tohto miesta pamäte. Môžete ho mať späť Pre mňa pre neskoršie použitie. V pohode? Áno. Divákov: Tak sme na% d len pretože double že sa vráti, alebo prečo je-- [nepočuteľné]. Divákov: Môžete použiť aj%? SPEAKER 1: Môžete použiť% i. Na poslednú chvíľu otázky? Choďte do toho. Divákov: Mám len rýchly dotaz. Takže premenná ptr, that's-- ako s int * ptr = malloc, to je len hovorí, že je to ukazuje na miesto v memory-- SPEAKER 1: Chceš [nepočuteľné]? Divákov: začali uznávať takzvané je veľkosť of-- nie, je to OK. Ale je to len ukazuje na miesto v pamäť, ktorá je rovnako ako štyri bajty. SPEAKER 1: Správne. Takže malloc, ktorých veľkosť int hovorí, OK, ja idem utiecť, nájsť štyri bajty pamäte pre vás. Keď zistí, že štyri bajtov pamäti to, vám dáva späť adresu na to, kde začína, a to je to, čo ukladajú v ukazovateli alebo PTR. Dobre. Vyzeráte menej zmätený než väčšina ľudia, keď hovorím o ukazovateľ, tak som celkom dobrý pocit teraz. Dobrá. Ako vždy, vy by mali mať všetci dostal svoje pset2 známky teraz. Viem, že tam boli nejaké váhavý veci, kde sa hovorí, vzorec nie je platný alebo tak niečo. Ak ste stále, že všetky Vaše stupňa platí na mojej strane. Takže môžem poslať vám screenshoty vaše stupňov. Len mi daj vedieť, ako dobre, ak ste chýba akékoľvek známky alebo niečo Nezdá sa, že zmysel. Poď ku mne. Bol som výborný na teba pyšný chalani už, tak len tak ďalej. A mať dobrý odpočinok vášho týždňa. Som si istý, že budem vidieť niektoré z vás v úradných hodinách.