>> [THEME MUSIC]
>> SPEAKER 1: Ahoj, všichni.
Vítejte zpět na části.
Krásný den out--, což je důvod, proč jsem Jistě, tam jsou jen čtyři z vás
a není náš obvyklý balíček.
Byl jsem nemocný tento víkend.
Takže nemám Starburst pro vás.
A já, může začít kašlat strašně po celou dobu to.
Takže jen mějte se mnou.
Budu opravdu snažit a dostat se přes to první,
ale předtím, než jsem se kašle útok.
Ale jen se snadno na mě s málo bit-- to je vše, co jsem se zeptat.
>> Takže náš program pro today-- jen reminder-- váš kvíz je příští týden.
Řekl jsem vám to poslední týden, takže to by se chytit tě nepřipraveného.
Tak jsem tě znovu připomínat.
Příští týden si kvíz.
Za tímto účelem, příští týden je část bude mnohem
of-- Budu se snažit a pracovat v nějaké recenzi.
Takže pokud vy mohl pomozte mi tím, že mi posílá
věci, které vám vyhovuje se, že jste starosti,
témata, která byste chtěli pro me k pokrytí, to by bylo skvělé.
Tak jsem si vyzkoušet a pracovat je do naší sekci příští týden
nebo zaslat vám další materiál nebo prep že byste mohli dostat jinde.
>> Yeah!
Stále více lidí se blíží!
Myslel jsem si, že jsem to udělal špatně poslední týden, že nikdo nechce, aby se vrátil?
Bojím se.
Takže další tři věci že budeme jít přes
jsou přesměrování, soubor I / O, a pak ukazatele a dynamické paměti.
Jsem si jistý, že jste všichni mimořádně nadšeni pointers-- oblíbené téma každého z nás,
tak jednoduché pochopit.
Jsem si jistý, kluci všichni dostali, že jo?
>> Takže popořadě, redirection-- to je v podstatě jen způsob,
kontrolovat, jak se vstup věci do svého programu,
jak vy výstupní věci z programu.
Mezi hlavní způsoby, jak kluci Byly interakci s ním
je jen přes standardní výstup s tiskovým obrazovky zde.
Ale existují způsoby, jak pipe-- jak vidíme zde
je jedním z našich words-- druhu z potrubí, aby informace
nebo že data do souboru ze souboru.
Je to jen různé způsoby dostat věci do vašeho programu
a ze svého programu, místo toho, jen je tisk na této obrazovce
nebo zadáním věci z příkazového řádku.
>> Takže první je malá větší než stříšky.
Takže output-- to prostě vytiskne výstup do souboru místo na obrazovce.
Takže pokud jste měli něco, co tištěné "Hello, world!" na obrazovku,
pokud jste to místo k output.text, že
vytvoří tento soubor s názvem output.text.
A když jej otevřete, bude to říci: "Hello, world!" tam.
To může být super užitečná Pokud máte spoustu chyb
ve skutečnosti, jak vidíme v tomto jednom.
Pokud tak učiníte dvě stříšky, že to bude vytisknout chybové zprávy.
>> Takže pokud máte problém s kompilace, má mnoho chyb
a jste stále utápí ve snaze listovat v příkazovém řádku
přes všechny nimi, můžete jen vytisknout do souboru,
otevřít tak, aby tento soubor můžete jimi procházet snadněji.
Vlastně jsem používal to hodně, když jsem byl ladění
moje 181 psets pro strojové učení.
Takže to může být super užitečné později.
Je to také užitečné, pokud máte program že možná je generování knihovny
nebo vytváření nějakého souboru řetězců, a
musí být schopni vidět, že je to generování je správně.
To je způsob, jak to udělat.
>> Takže pokud si je vytisknout do souboru, vás mohou snadněji zkoumat je, že jo?
Versus snaží posouvat prostřednictvím příkazového řádku.
A pak jedna věc k poznámce je to, že jen s větším
než stříšky, pokud píšete do souboru, který již exists--
tak jako když jsme běželi to první čas, dáme ji do output.text,
a pak jsme měli druhý program že vytisknout to jako programu dva
a dělal větší než output.text, přepíše that-- tak
přepsat to, co bylo kdy v tento soubor začít.
>> Takže pokud chcete připojit do souboru, protože zde vidíme,
stačí udělat dva větší než znaky.
A připojí k ní.
Nebude jej přepsat.
Takže pokud budete potřebovat ke spuštění více programy a druh udržet
Trať, co všechno z nich jsou se vracet k vám do souboru,
to je způsob, jak to udělat.
Pokud vás nezajímá, co je ve vašem souboru a to smí být přepsány,
stačí použít jeden větší než.
Znamená to, že smysl pro každého?
>> Diváků: Jako tečka lomítko ahoj větší než výstup dot textu, jako je dvakrát,
to bude jen ukázat pouze na výstupu dot textu druhé time--
>> SPEAKER 1: Správně.
Tak to by v podstatě jen zcela přepsat, co se tam začít.
Pokud tento soubor zde, output.text již
existuje, v podstatě cokoliv, co říkají že opět s jedním Greater
než si můžete jen myslet na to, as, jako by nahradil soubor.
Stejně jako když jste ukládání Word dokument a vy uložit jako,
a budete mít stejný název, a úplně přepíše to--
je to stejný druh věci.
Každý, kdo má nějaké otázky týkající se jen výstup do souboru?
Úžasné.
>> Takže samozřejmě, pokud jste zvrátit směru šipky, můžete to udělat vstup.
Takže když vy jste měl jako Caesar nebo Visioneer
a vy jste museli na vstup něco, jste měli řádce příkazu
že ve skutečnosti je to vstup.
To je další způsob, jak to udělat.
Takže namísto čekání na příkazovém řádku,
jako když jste požádáni o zpráva v Caesar nebo Visioneer,
pokud byste měli textový soubor která měla svou zprávu,
můžete jen zadejte jej do toho.
>> Takže kdyby to bylo jako tečka lomítko Caesar 3 méně než šipky vstupního textu, který
je vaše zpráva, že poběží v pohodě.
Když je váš program Caesar skutečně požádáni o zadání od uživatele,
to by už mít, protože které jste zadali v tomto souboru.
To je jen další způsob, jak.
Jen zpáteční output-- stačí zadat pro vaše data.
>> A pak ten poslední je trubka.
Tak tohle je docela v pohodě.
Vzhledem k tomu, že vám umožní mít výstup jednoho
Program a dát ho jako vstup do jiného programu.
Nevím, jestli někdo z vás hrál si s rozluštit
že CS50 může mít vám dal, ale to by
vám umožní vzít nějaký vzorek souboru, zadejte jej do šifrování,
a potom odtud typ že do dešifrování
aby se ujistil, že se ukázalo stejné.
Takže je to něco jako třícestného smyčky.
Jít na to.
>> Diváků: Pokud program má více vstupů,
existuje způsob, jak to říct, který vstup použít textový soubor nebo výstup?
>> SPEAKER 1: Má více vstupů.
Ať už soubor s input--, když je to žádá o vstup, který poprvé, je to
bude předpokládat, myslím, že je to bude potrubí v celém souboru.
Takže pokud máte více vstupů, ty jsi bude potrubí ve více souborech.
Takže pokud se ptáte zpráv třikrát v kódu,
budete se uvedení ve třech různých souborů.
A to bude šílené.
A neměli byste mít obávat, že právě teď.
Ale to je nápad.
>> Tak jo, trubka je jen výstup jednoho program používá vstup do druhé.
Každý, kdo tam dobře?
V pohodě.
OK.
Vy pravděpodobně nebudete mít se dělat příliš mnoho s ním.
Ale měli byste pochopit, způsobů, jak můžete použít.
A tam jsou některé případy, které budete chtít používat.
>> Takže souboru I / O- vím, co jsi saying-- jsme zvyklí čtení
a písemně na naši obrazovku tam, který je standardem v a standardní výstup.
A to je to, co vy jste byli dělá od začátku třídy zde.
Ale můžete také číst a zapisovat soubory, což je vše, soubor I / O-, tak vstupní soubor,
Výstup je vše, co znamená.
Takže to v podstatě znamená, že můžete ukládat data.
>> Když si jen vytisknout na obrazovka, je to v podstatě pryč, že jo?
Jakmile budete dělat "Dobrý den, svět "a spusťte" Hello world "
vytiskne "Hello World" na obrazovku.
Ale nemůžete opravdu cokoliv s ním odtamtud.
Uložíte-li v textu soubor, pak se najednou
máte tato data, která máte dovoleno manipulovat nebo jej do souboru,
nebo dát do programu později.
Jedním z důvodů, proč proč to děláme je to jen
jako způsob, jak ukládat data pro pozdější použití.
>> Mám pár kroků zde jen procházky standardní
I / O. V prvním kroku, budete je třeba vytvořit odkaz
do souboru se všemi čepice FILE hvězda souboru.
Tak, že vytvoří ukazatel na soubor.
Takže chcete otevřít.
A vy říkáte, a to doslova, jen soubor rovná fopen.
A to bude návrat ukazatel na soubor, který jste právě otevřeli.
Viděl jsem pár z vás chlapi v úředních hodinách.
>> Ale jedna z věcí, je remember-- ukazatele
mohou být některé adresa nebo null, že jo?
Pokud bychom někdy případ, kdy něco, co se může vrátit null,
co máme dělat předtím, než jsme vůbec používat?
Musíme zjistit, zda je null nebo není, že jo?
Vzhledem k tomu, že někteří z vás mohli mít problém, kdy bez ohledu na předmět
byl vrácen v útěku byl nulový.
Pokusili jste se provést některé funkce na to.
A počítač místo porušené.
Je to tak?
Vsadím se, že pár z vás může měli tuto otázku.
>> Tak s fopen, bude fopen buď vrátí ukazatel na soubor,
nebo když se něco pokazí, to bude vrátit NULL.
Takže vždy je třeba zkontrolovat že se nevrátil null
předtím, než se pokusíte udělat něco jiného.
To je jako standardní paradigmatu že budete potřebovat tady.
Pokud je to vůbec možné, že něco, co by se mohl vrátit null,
zkontrolujte, zda je není, než budete pokračovat.
V opačném případě budete získat krásné chyb webu.
A nikdo rád s nimi zacházet.
>> Tak jak vidíme tady, první argument je jen cesta k souboru.
Pokud neexistuje, že soubor, to bude vytvořit tento soubor.
A je to jen bude prázdné.
A pak druhý argument je režim, který chcete.
Chceme číst z tohoto souboru?
Chcete napsat z něj?
Chcete se připojit?
Takže vlastně to, co jsem právě said-- v případě, že soubor neexistuje
a vy se snažíte číst je to, že to bude házet chybu.
Pokud je soubor name-- líbilo, kdyby file.text ještě neexistuje
a chcete psát na to, bude to vytvořit
prázdný soubor s názvem file.text pro vás.
A pokud se chcete připojit, kterou byste měli udělat totéž.
Dává to smysl?
Pokud se snažíte číst soubor, který ještě neexistuje,
to bude házet chybu.
V opačném případě bude vytvoření souboru pro vás to, co chcete, na to.
V pohodě.
Nyní můžeme číst ze souboru.
A to je jen trochu jde mezi různými funkcemi
že máme pro soubor I / O. Tato vůle je nutné tento týden v pset,
pokud si dobře vzpomínám.
Ano, je to naprosto bude nutné tento týden v pset.
Takže fgetc vrací další znak.
fgets právě vrací řádek textu.
Vrátí se nic až do nový řádek, a to zlomí.
Takže fread čte určitý počet bytů a umístí je
do matice, která je něco, co by mohlo
chcete udělat s re-size-- by mohla být užitečná.
>> Kolik lidí si přečetla pset spec, mimochodem?
OK.
[Neslyšitelné]
>> SPEAKER 1: OK.
Dobrá.
Rozhodně číst that--, že je to legrace pset.
Dostanete se obnovit smazané paměť card-- opravdu vzrušující, když to funguje.
Ale určitě, začít číst, že.
Pojď se mnou mluvit, pokud vás máte otázky o tom.
>> OK, tak jak jsem říkal, fread čte určitý počet bajtů.
To je nějaký libovolný počet že budete nastavit.
A pak fseek jen pohyby do určité polohy.
Takže možná je vám to jedno o dalších 10 bajtů.
Jen chcete přeskočit dopředu.
Ty nezajímá ty.
Chcete si přečíst již od bytu 11.
fseek vám umožní udělat.
Tak to vám umožní být selektivní o tom, co čtete.
Vzhledem k tomu, fgetc, fgets a fread čtení z určitého místa v souboru.
>> Způsob, jak přemýšlet o tom, zda se jedná je náš soubor, když jste poprvé otevřete,
máte tuto pozici v souboru který začíná na začátku.
Kdykoli budete volat fgetc, fgetf nebo fread,
to bude začít od tento ukazatel polohy.
Řekněme, že chcete jen číst tento kus paměti sem.
Nemůžeš jen tak zavolat.
Musíte hledat tady a pak si přečtěte odtud
nebo číst, dostane, nebo getc, V závislosti na tom, co chcete.
Takže hledat jen vám umožní přeskočit části paměti.
A to je jediný způsob, jak můžete přeskočit věci
bez jejich přečtení do vyrovnávací paměti.
Znamená to, že smysl pro každého?
>> Je zřejmé, že je Hodně paralelní here--
náš výstup, nebo vstup přesměrování, jste číst a psát.
Takže fputc jen píše znak do souboru.
fputs píše čáru.
Fprintf vytiskne formátovaný výstup.
Takže pokud máte karty, nebo prostor, nebo kdoví co ještě.
A pak fwrite píše některé pole bajtů do souboru.
Tak tohle je stejným způsobem fwrite a fread jsou analogické
opposites-- fgets, fputs, a pak fputc a fgetc-- spousta
Crazy, rychlé věci.
>> Jen tak, aby tento handy-- budete mít různé časy
kde možná jen chcete jeden znak najednou.
Možná, že chcete celý řádek.
S vaší slovníku pset-- který se skládá ze dvou psets,
Věřím, že jsme vám celek slovník v textovém formátu
který má každé slovo odděleny linií.
Takže pokud byste chtěli číst jedním slovem v době,
co můžete použít, pokud čtete a všichni jsou odděleny na nových tratích,
a chcete jen jedno slovo v čase?
>> Diváků: fgets
>> SPEAKER 1: Správně.
Fgets-- proto, že se vrátí co je na jednom řádku.
A je-li každé slovo je jeho vlastní linie, můžeme použít fgets.
V pohodě.
Dává to smysl, všichni?
V pohodě?
Jo, budeme se dostat do ta zábavná část s ukazateli
velmi brzy, kde na vás si udělat nějaké matematiky.
A bude to skvělé.
>> Poslední step-- zavřete soubor.
S tolika věcí tady, jeden z našich vzorů
je-li to možné vrátit null, zkontrolujte null.
Pokud otevřete něco, radši zavřete jej.
OK, takže to není vše, dokud jste dělat, pokud jste je zavřel.
Něco jako, že to není více než dokud tlustá dáma zpívá.
To je jako zavření souboru.
Jak se říká, prostě zopakovat, a to vždy
otevřete soubor dříve, než jste čtení nebo zápisu na něj.
A vždy jej zavřete, pokud jste si ji otevřel.
V pořádku?
V pohodě.
>> Tak tady je příklad.
Tak tiny-- já nevím, jestli vás kluci je vidět, že velmi dobře.
Kéž bychom mohli zvýšit jas nějak.
Dovolte mi, abych vlastně dělat to, jestli můžu.
OK, můžete si kluci opravdu vidět, že vůbec, že?
OK, budeme dělat to, pak.
[Neslyšitelné]
>> Předpokládám, že to je mnohem lepší vidět.
Může někdo zjistit, kde my myš šel je otázka?
Aha, tady je to je-- co bojuje!
>> OK.
V podstatě, vy by měl mít typ z myšlenky na to, co to dělá.
Není to dokonalé.
Ale raději bych to vysvětlit, než trávit více času se snaží správně naformátovat.
V podstatě, jak vidíte zde, začneme se soubor otevřít.
A máme nějaké databázový soubor, který jsme
otvoru, který říká, že je naši studenti.
A budeme zapisovat.
Tak samozřejmě, vrátit null.
Takže musíme zkontrolovat null.
A pak, pokud to není null, projdeme.
A jak vidíte, jsme průchozí zde.
Tam jsou studenti.
Studenti je hash definována jako tři.
A to, co děláme, je, že jsme tisk do souboru, ne?
Takže to, co jsme tisk do našeho souboru?
>> Diváků: Skóre které jsou v poli?
>> SPEAKER 1: Jo.
Skóre, které jsou v array-- přesně.
Tak jsme se otevřít tento databázový soubor, který
Předpokládám, že je nějaký druh ze stupně databáze.
A my jsme jen tisk skóre každého studenta do tohoto souboru.
V pohodě?
Dobře.
Úžasné.
OK.
Vraťme se to--
>> Diváků: Mám rychlý dotaz.
Je printf není pro smyčce?
To je jen v pokud smyčce?
SPEAKER 1: Ne, to je v cyklu for.
Nevidím myš velmi dobře se zde.
Takže jsem se snažil formát, který správně.
Tento držák by měl být pryč.
Mělo by to být tady.
To je to, co je ve vašem cyklu for.
Tam.
Teď je to dost.
Tak to je, jak to má be-- kromě k té poslední konzole, které jsem zamítl.
OK.
Znamená to, že smysl pro každého?
OK.
Budeme se pohybovat na na další věc then--
které ve skutečnosti, budete muset vidět kód.
Tak jsem jen tak Kopírování, že více než právě teď.
OK.
Tak jdu vám ukázat kluci tento kód.
A chci, abyste se pokusila obrázek na to, co to má dělat.
>> Takže vzhledem k tomu that-- trvat minutu nebo tak.
Pokuste se zjistit, co se tady děje.
>> Nějaké nápady?
>> Víme, že máme alespoň dva argumenty příkazového řádku, je to tak?
Předpokládám, že jeden z nich bude že [neslyšitelné] našeho programu je
a pak něco jiného.
Vzhledem k tomu, když je [neslyšitelné] je méně než dva jsme křičet na ně.
Je to tak?
A z použití, vypadá to, že to bude nějaký soubor.
Všichni jsme se shodli na to?
Takže teď, co je smyčka dělá?
Co to prochází?
>> Diváků: Všechny soubory.
SPEAKER 1: Přesně tak.
To se děje přes všechny soubory, které jsme tam vstup.
Takže pro každý soubor, je to otevírá nějaký řetězec tam.
Je to otevření tohoto souboru.
Je to tak?
A to čtení z něj.
Samozřejmě, kontrola, jestli je to null.
A pak je to tisk.
Pokud je null, je to jen nám říká, že to není soubor, který existuje.
Vzhledem k tomu, pamatujte, že se Přečtěte si náš soubor má existovat.
Je to tak?
S zápis a připojit, se můžete dostat pryč s ním.
Ale s čtení, náš soubor má existovat.
>> A pak, pokud existuje, Co tady děláme?
Řekněme, začněte zde.
Co je to do-- tento první znak.
Co to dělá?
Dostává jeden znak, ne?
Takže to, co je tohle dělá?
Začíná to první znak.
Každý, kdo ví EOF?
>> Diváků: Konec souboru?
>> SPEAKER 1: Konec file-- přesně.
Takže to půjde přes celý soubor, je to tak?
A pak se to bude aktualizovat podle dostat všechny následné charakter.
Je to tak?
A co to dělá?
Diváků: Uvedení že in--
>> SPEAKER 1: putchar výtisky na spořič obrazovky.
[Neslyšitelné] znak.
A pak, když se [neslyšitelné] to zavřete soubor.
>> Diváků: Myslíte si, nepotřebujete [? jiného? ?]
>> SPEAKER 1: Ne nutně.
Myslím, že je to trochu naznačil v tomto.
Protože tento vrátí, i když, jak dlouho protože nezachycuje to, že jsi v pořádku.
Myslím, že je to asi dobrý praxi udělat jiného.
Ale jinak není vždy nutné zejména
Máte-li něco jako návrat, který
Znamená to, že v tomto případě, pokud se zachytí to, váš program se skončí
a to nikdy nebude mít v této oblasti.
Je to spíš pro případ, kam nemusí nutně vracet něco.
Vzhledem k tomu, pokud to nebylo vracet něco,
to by znamenalo, že pokud by to byla pravda, Zbytek by stále běží.
A v tom případě by chtěl false.
Pokud je to vrací, a Váš program je konec,
jinak není nutné celý čas, v závislosti na kontextu.
Jacobe, jsi nějakou otázku?
Diváků: Jo.
Tak se fgetc získat další znak?
Jak zvýšit postava?
SPEAKER 1: Jo.
Takže fgetc dostane další znak.
Můžete si ji představit jako C ++ v jistém smyslu.
>> Diváků: Takže to, co bylo EOF?
>> SPEAKER 1: EOF je konec souboru.
Je to jen značka, která umožňuje zjistit, že jste na konci souboru.
Takže to bude tisknout na vaší standardní výstup.
A pak, že to bude zavřít soubor, když se to dělá.
A pak jdeme na Další obrázek, ne?
Takže celkově, co tento program dělá?
>> [Neslyšitelné]
>> SPEAKER 1: Jo.
Je to prostě vytiskne všechno tam.
Takže pokud vy jste někdy použité CAT a pak název nějakého file--
Já nevím, jestli někdo z vás má kdy udělal, že na vašem terminálu.
Ale pokud jste někdy použít Příkaz CAT-- C-A-T--
a poté, co soubor Máte there-- ji
vytiskne ji na vašem terminálu, který může být super užitečné pro některé věci.
Používám to hodně.
Znamená to, že smysl pro každého?
V pohodě?
>> OK, takže váš úkol now-- buď sami nebo s lidmi kolem you--
je prostě napsat jednoduchý program že bude jen napsat "Hello, World!"
do souboru.
>> [Neslyšitelné]
>> SPEAKER 1: Byl jsem rád, že ne Dělám to špatně minulý týden?
Nemyslím si, že to bylo tak špatné.
Jsem rád, že jsi tady.
Je to opravdu dělá mi to radost.
Jsem holka jednoduchých potěšení.
Jen jsem rád, když můj oddíl navštěvuje.
Takže jsem jen na to, to začalo pro vy, takže můžeme kódovat společně.
Nelíbí se mi dávat nikomu na místo, pokud chcete být.
>> Obecenstvo: pro kvízu, dělat Máme napsat program?
>> SPEAKER 1: Můžete být vyzváni k psát jednoduché programy ručně.
Jo.
>> Diváků: Kvíz je příští týden, ne?
>> SPEAKER 1: kvíz je příští středu.
To znamená, že je krásný [? CSE?] třídění strana poté, což
znamená, že budete mít své skóre zpět že night-- v kolik hodin?
Kdo ví?
Ale bude to, že v noci.
>> Dobrá.
Jak chceme začít to?
Dám vám hint-- začíná tímto.
>> Diváků: Musíte otevřít soubor.
>> SPEAKER 1: Jo.
Takže to, co chceš nazývat?
Myslíte si jen chcete volat to "file"?
Pojďme usnadňují.
Takže to, co je naše fopen-- test výstupů bude?
Nazvěme to "Ahoj."
A co je naším režim?
Co budeme dělat s tímto souborem?
>> Diváků: Přečtěte si.
Psaní.
SPEAKER 1: Píšeme na to.
Lovely.
OK, takže máme tento soubor.
Co musíme udělat?
Diváků: Zkontrolujte, zda je null.
SPEAKER 1: Zkontrolujte, zda je to přesně null--.
To je to, co jsem chtěl slyšet.
To by mělo být automatické, a to zejména do značné míry od tohoto okamžiku.
Pokud začnete segfaulting, budete pravděpodobně ani kontrolovat null někde.
V devíti případech z deseti, to je bude váš chybě.
Takže pokud byste mohl jen dostat zvyk, vždy zkontrolujte, jestli je to null,
Váš život se bude pěkné a easy-- nebo jednodušší.
>> Tak zkontrolujte, zda je null.
Takže pokud to není null, což je to, co bang rovná
means-- ne null-- je to platný.
Co chcete dělat?
Chceme jen vytisknout do tohoto souboru, ne?
Takže to, co budeme používat?
>> Diváků: fprintf
>> SPEAKER 1: Fprintf-- krásné.
A fprintf má dvě arguments-- kde je to to bude a co chceme vytisknout.
Takže to, co je první?
Tam, kde to jde?
>> Diváků: File.
>> SPEAKER 1: Jde to do souboru.
A co chceme vytisknout?
"Hello, world!"
Dobrá.
Máme poslední thing-- další velká paradigma zde.
Diváků: Zavřít.
SPEAKER 1: Close.
Tady to je.
>> Diváků: Je to happening v případě, že soubor je null?
SPEAKER 1: Ne, to je v případě, že to není null.
Publikum: Oh, je-li to ne-- OK.
Pro fopen a poté dva argumenty, které jdou dovnitř,
co první argument na mysli znovu?
>> SPEAKER 1: argument je stejně jako jméno souboru
že chcete jít.
Takže po tomto běží, byste nějaký soubor s názvem "ahoj"
že měl "Hello, World" v něm.
To je všechno.
Jen název.
>> Diváků: A protože je to psaní, Soubor nemusí již existují.
Je to to, co jsi řekl?
>> SPEAKER 1: Správně.
Přesně tak.
Pokud je "Hello" jako soubor dosud neexistuje, je to
chystáte vytvořit soubor s názvem Hello "a napište na něj pro vás.
>> Diváků: Když říkáte program napsal do souboru,
proč píšeš "file" místo název souboru a fprintf--
>> SPEAKER 1: Protože v tomto případě máme že velké FILE-- vše v caps-- hvězdy,
souboru.
Takže je to ukazatel na soubor že mluvíš.
To je způsob, jakým jsme prostě na něj odkazují.
Takže v tomto případě je může myslet file-- Aha,
můžeme použít tohle-- soubor zde odkazuje na otevření "Hello"
a nechat ho zapsat.
>> Diváků: Mohli bychom dát "Hello" místo toho [? pouhého?] f soubor?
SPEAKER 1: Ne, protože "Hello" musí být otevřené a zapisovat.
Soubor je zde jako označení, které říká, že OK,
tuto file-- hello-- že se díváme.
To byl otevřen.
A budeme zapisovat.
Pokud stačí použít "Hello", který je zapouzdřen v něm.
Takže to bude šílet.
Myslím, že byste mohli mít pojmenovali.
Dalo by se udělat soubor, hvězda, "Hello", rovná.
Ale celá věc je, že vás Potřebujete souboru hvězdy ukazatel v pořadí
aby mohli tyto funkce využívat.
Diváků: Mohla bys soubor, hvězda, soubor, "Hello"
nebo si budete muset dát soubor hvězdu, soubor to?
SPEAKER 1: Dalo by se dělat souboru, hvězda, "Dobrý den."
Můžete změnit to, aby bez ohledu na jméno, které chcete.
Je to zcela libovolně co to jmenuje.
Můžete pojmenovat to cokoliv.
Pojmenujte ji létání špagety, pokud jste chtěli.
>> Diváků: Co je to "w" v uvozovkách pro?
>> SPEAKER 1: "w" je jen režim.
Takže jsme zápis do tohoto souboru.
Každý dobrý?
Clear?
Ano.
>> Diváků: Takže když to píše toto souboru, kam jsme pak zjistíme, že soubor?
>> SPEAKER 1: Bude to ve stejném adresář, který jste v současné době.
Pokud jste v pset tři a spuštění toho přímo ve Vašem pset
tři složky bude Tento soubor s názvem "Hello".
V pohodě?
Každý dobrý?
Mám pocit, že jste všichni jak se to, což je skvělé.
OK.
Takže zpět k mé prezentaci show-- Mám rád, když věci fungují.
OK, pointers-- Jste kluci nadšení?
Ukazatele jsou skvělé.
Berou trochu zabalit hlavu kolem.
Toto je můj druhý rok výuky ukazatele.
A myslím, že jsem se konečně dostal to.
Takže pokud jste se snaží, je to OK.
Jak jsem již řekl dříve, kreslení obrázků hodně pomáhá s věcmi v CS,
stejně jako já, že lidé mají tendenci přemýšlet oh, my jsme na počítači.
Bychom měli jen kód.
No-- obrázky kreslení vám opravdu pomůže.
A opravdu doporučujeme vám proniknout do vašeho učitelka mateřské školy stranu
a vyvedu pastelky nebo fixy a draw.
Vzhledem k tomu, že vám pomůže.
A jestli mě vidět na úředních hodinách, jsem bude nosit stohy papíru
s pera kreslení věci.
>> Tak zejména pointers-- kreslit obrázky.
A jsem si jistý, že jsme vlastně bude sestavuje několik fotografií zde.
>> Takže vy všichni dostali vidět Binky, to v pohodě claymation věc.
A myslíme si, že je to opravdu legrační, když on exploduje do banda kusů.
Je to nějaký komická pro třídu.
C [neslyšitelné] tento skvělý schopnost aby bylo možné kontrolovat paměti.
A to je jedna z věcí, které opravdu je to takový silný jazyk.
Ale s velkými schopnostmi přichází i velkou zodpovědnost.
A bláznivé věci se může stát pokud si nedáte pozor.
Takže, když používáte ukazatele, chcete, aby se
že jste opravdu pochopit přesně to, co děláte.
Doufejme, že příští trochu Čas vám pomůže opravdu pochopit,
ukazatele, jak je používat, a jak manipulovat s nimi.
>> Takže memory-- Jsem si jistý, máme viděl tento diagram.
Takže je to jen jednoduchý diagram jak by se věci uložené v paměti.
Takže jste v podstatě mají tyto obrovské pole jednoho bytu bloků
je to, co máme here-- mírný zvyšuje se po jedné pokaždé.
To je v hex [neslyšitelné] tak osm-bitové bloky.
A každý blok je spojen s nějakým hexadecimálním adresu.
Takže pokud jste někdy vidět 0x, to je jen notating
že je to hexadecimální adresu.
Můžete Předpokládám, že to znamená, některé adresy v paměti.
Mluvíme o adresy paměti Kdykoli vidíte hexadecimální.
>> Máme ints jsou proměnné, plováky jsou proměnné, které uchovávají.
Takže ints ukládání ints.
Plováky obchod plave.
Takže máme také ukazatele že obchod adresy paměti.
To je druh mapování.
Ukazatele jsou výhradně pro paměťové adresy.
Tak to je jako tvůj typ tam.
Váš spotřebič je 32-bit, což znamená, že vaše adresa paměti je čtyři bajty.
Takže jakýkoli ukazatel, který máte se také bude čtyři bajty.
Anebo jestli je to čtyři byty, paměti čtyři bajty.
Ukazatele obchod paměti.
Proto, že jsou čtyři byty.
Cool-- jen chci zdůraznit, že.
>> Měli byste si tento komiks teď.
Nevím, kolik z vás jsou xkcd fanoušci, ale mám rád xkcd.
Je to skvělé.
>> Dobrá.
Tak vytváření pointers-- jak jsem řekl, je to do značné míry stejně jako cokoliv jiného.
Máte typ.
Máte jméno.
Je to tak?
To je to, co máme tady. [? Hex?] Hvězdička znamená, že je to ukazatel,
a pak, co chcete říkat.
Takže typ představuje co můžete uložit.
V pořádku?
Stejným způsobem, že pokud budeme dělat celých čísel, víme, že jsme tam ukládání int.
S ukazatelem, je má adresu v paměti.
Ale co to znamená, that-- tady je místo, kde výkres bude hodit.
Takže v tomto případě máme některé value-- řekněme čtyři.
Čtyři je na adrese jedna.
OK?
>> To první, kdo zde znamená že je to ukazatel 2x.
Je to tak?
Je to nějaký ukazatel x.
x může být něco, cokoliv.
Ať už x je-- říci x je čtyři.
Bude to uložit adresa zde paměť.
Takže int, hvězda, x-- to je nějaký jiný slot v memory--
kdo ví, co to je.
Ale bude to tady uložit adresu.
Takže by to bylo like-- v tomto případě, bez ohledu,
je uložen na 0x1--, co je uloženo na adresu, kterou náš ukazatel má k dispozici,
se musí shodovat s To, co jsme určen.
Takže na 0x1, v tomto případě je to x.
To může být jedině int, když jsme pomocí tohoto.
>> Podobně, pokud máme další 1R, bez ohledu na
adresa je uložena s y má být char-- totéž se z.
Stejným způsobem vždy, když vyzkoušet a udělat intx rovná 0,4,
to bude řvát na vás a bude jako ne, říkal jste, že chtěl int.
To má být int.
Přestaň se snažit, aby to float.
>> Takže nechat věci být tím, čím chtějí být.
Nechat věci být sami sebou.
Takže velká věc je jen bez ohledu na typ ukazatel
to je, to je jediný věc, kterou tam můžete uložit.
OK?
S praxí, jako u minulý týden, všechno
Zdá se, opravdu trochu abstraktní.
Chystáme se udělat nějakou praxi.
To by mělo větší smysl.
>> Tak odkazů a dereferencing-- je to velmi důležité, aby se tyto přímo.
Stále mám obnovit tu a tam.
A já jsem rád čekat, který z nich chci?
Takže ampersand bude skutečně dát si reference nebo adresa.
Tak to vrátí adresu paměť, která je uložena proměnná.
Takže to bude opravdu vrátit k vám hexadecimální, zatímco dereferencing ji
se skutečně děje, aby vám data, která jsou v něm uloženy.
OK?
Takže jdeme se podívat na příklad opravdu rychle, nebo dokonce až příště.
>> OK.
Takže musíme opravdu myslíte, pečlivě o tom.
Takže tady máme nějaké celé číslo x.
Budu se snažit a kreslit to se na to nejlepší z mých schopností.
Takže budeme mít tento slot x.
A to ukládání pět.
Jeho adresa je 0x4.
V pohodě?
Všechny dobré.
>> Takže teď máme tuto ukazatel.
Bylo to tady.
A ampersand nám dává Adresa něco.
Takže v tomto případě, je to adresa x.
Jaká je adresa x?
04-- a tento ukazatel je 0x08.
V pohodě?
Takže si můžete myslet o tom ukazatel, 04, jen upozorňuje sem.
A oni nazývají odkazy protože jak jsme se dostat více do toho
budete vidět, ukazuje na věci.
A jeden blok ukazuje na další blok bude mnohem větší smysl.
Tak tady jsou dvě.
A pak tu máme nějaké kopie, která je what-- 0x0c.
A že to bude dereference naší ukazatele.
>> Takže to, co říká, je OK, tady je náš ukazatel.
Hodnota ukládá je 0x04, A co to říká, je na tuto adresu
a řekni mi, co je v něm.
Tak to je skutečně Co tato šipka dělá.
Můžete myslet na to jako svoji hvězdu.
Tak OK, když budeme dělat hvězdu, znamená to následovat.
Přejděte na tuto adresu.
A to je v podstatě jen po Tato šipka této paměti kus.
A dát nám to, co je v ní, což je 5.
To je důvod, proč naše kopie je rovna 5.
Dává to smysl?
Potřebuje někdo mě projít že znovu, nebo pomaleji?
Chceš, abych šel přes to ještě jednou?
OK.
Budeme ho překreslit znovu.
Když začneme, všichni souhlasíme s tím máme některé kus paměti, že je to proměnná
x, že nastavíme rovna 5.
Nemáme kontrolu tam, kde je v paměti.
Takže toto místo je jen náhodně přiděleno.
Tam dobře?
OK.
Pak jsme se inicializovat ukazatel na int.
To je důvod, proč je dovoleno, aby ukazoval na x, protože máme int zde.
Máme další kus paměti, protože tento ukazatel
je proměnná, stejně jako cokoliv jiného.
Je to náhodně přiděleno nějaký prostor v paměti.
A to, co ukládá je adresa x.
Ampersand znamená adresu x.
Takže to, co je adresa x?
>> Diváků: Je to zero--
SPEAKER 1: 0x04.
Takže then-- poslední.
Máme nějaké copy-- znovu jen další proměnné.
Takže pojďme přiřadit nějaké libovolné místo.
A my dereference naší ukazatele.
Hvězdička znamená jít do adresa uložena v mém ukazatel.
Řekni mi, co tam je.
Takže adresy uložené v našem ukazatel je 0x04.
Tak jdeme na tuto adresu.
Je to ukazuje na tuto adresu.
Co je uvnitř tohoto bloku paměti?
Je to pět.
Takže to je to, co jsme přiřadit svou kopii.
Každý dobrý?
V pohodě.
Again-- obrázky.
>> Takže sledování hodnoty here--, jsem nechám vy si o tom myslíte.
Můžeme čerpat další snímek.
Ale já chci, abyste se pokusila důvod přes to na vlastní pěst po dobu jedné minuty.
>> Vzhledem k tomu nedali nás například adresa,
Já jsem jen dělat ampersand x-- který by měl pomoci řídit ho domů.
Ampersand znamená adresy.
>> Takže v první, všichni jít s prvním řádku.
Některé x set je five-- některé náhodný slot v paměti.
Int hvězda ukazatel je roven na adresu x, ne?
Int hvězda ukazatel vytváří tento blok, volá to ukazatel,
a přiřadí ji na adresu x.
Jsem hrozný na ampersandy.
>> A teď, co děláme, je říci, OK, dereference naší ukazatel.
Tak jdeme na tlačítko OK, co je v našich ukazatel?
Je to ampersand x.
Přejít na ampersand x a přiřadit ji.
>> Takže teď, ampersand x bude 35.
Takže v podstatě, když jste dereferencing, jdete na tlačítko OK.
Budeš se kreslení obrázky, jako je tento.
Budeš se kreslení šípy nad tím, kde je.
Takže jděte do tohoto slotu v paměti, a to buď dej mi tu hodnotu zpět nebo ji změnit.
V tomto případě, protože jsme na to hodnota, my ji přiřadit jako 35.
Zatímco v poslední jeden, pokud si všimnete, my
bylo přiřazení, co bylo tady k něčemu jinému.
>> Takže mají tuto strašlivou tabulky.
Není to tak špatné.
Vy jste na tom pracovat.
Budu čerpat ji na palubě.
Chystáme se vyplnit ho spolu, OK?
Takže uchopit nějaký papír, drapák partner, začít pracovat.
Budu mít větší kus křídy.
Vzhledem k tomu, že to bude hodně.
OK.
PROFESOR: OK.
Začněme s první řadou.
Začneme tam, pak kluci může možná fungovat přes některé více.
OK.
se rovná b krát c, takže to, co je?
Není to chyták, slibuju.
>> STUDENT: 4 krát 5.
>> PROFESOR: 4 krát 5.
20.
Takže to, co je b?
STUDENT: 4.
>> PROFESOR: A c?
STUDENT: 5.
PROFESOR: 5.
A pak je to jen tak být ampersand a, b ampersand,
ampersand c, ne?
To není špatné.
Je to dost jednoduché.
OK.
Tak ten příští.
Rovná časy C, v případě kdo byl neznámý s tím.
Je všichni znají s časy se rovná?
OK, to vše means-- je zkratka pro rovná časů c.
Můžete si také udělat to s rozdělením, Kromě toho se, s odčítání.
Můžete to udělat je rovna, nebo navíc se rovná c znamená, rovná a navíc c, minus rovné
c by se rovná minus c.
Je to jen syntaktický cukr.
>> Takže v tomto případě, se rovná časů c by nám, co se dá?
Opět platí, že není chyták.
>> STUDENT: 100.
>> PROFESOR: 100.
Má něco změnit?
Ne.
Možná, že se konečně dostanu lépe na mé ampersandy.
>> STUDENT: OK, je mi líto, jak jste se dostal 100?
PROFESOR: OK.
Tak se rovná krát c, takže časy c.
STUDENT: Oh, vy používáte pro previous--
PROFESOR: Ano.
Tak to jsou naše poslední hodnoty.
Jedná se o to, co by mělo být použití jak jsme se přesunout dolů, OK.
Takže, b je jediná věc, změna, ne?
Takže pojďme vyplnit všechno ostatní.
B. Co se b bude?
Být či nebýt.
Takže to, co je tohle dělá?
Co je hvězda pa děláš?
>> STUDENT: Kód pro umístění pa.
>> STUDENT: Ne, ne tak docela.
Takže toto je odkaz d.
>> Žák: Takže b je rukou hodnota pa.
>> PROFESOR: Jo, tak pa je adresa, ne?
Tak to říká jít tam, kde je skladovány a dát mu tuto hodnotu.
Takže to, co je b?
STUDENT: 100.
PROFESOR: 100.
Perfect.
OK, takže pc je to, co se mění.
Vše ostatní zůstává stejné.
Co se pc bude?
Jednoduchý úkol.
Pc je rovna pa, a to, co je pa?
>> STUDENT: ampersand.
PROFESOR: Perfect.
Nyní se dostáváme zajímavý.
OK, pojďme rozbít tenhle dolů.
Za prvé, co je b krát c, protože to je snadná část tohoto jednoho, je to tak?
Časy B c je--
>> STUDENT: 500.
>> PROFESOR: Jo, tak Co je tohle dělá,
Jestli je to hvězda pb, co se mění?
>> STUDENT: Co je v the--
PROFESOR: Co je B?
STUDENT: Co je v prostoru že pb ukazuje.
PROFESOR: A pb ukazuje to--
STUDENT: B.
PROFESOR: B. Takže jediný věc změna je b, pravdu.
Tak b krát c, 500.
Takže to je to, co se mění teď.
V pohodě.
Lovely.
Vy jste skvěle.
V pořádku, porušení tohoto jeden dolů.
C se mění, že jo?
Takže můžeme vyplnit všechno ostatní.
Pojďme se podívat.
OK.
Víme, že c je bude součin dvou čísel, je to tak?
Co dvě čísla, i když?
>> STUDENT: A a C?
>> PROFESOR: Tak je právo na první.
Takže jsme d Menu odkazující p na, ne?
P z bodů A, takže víme, že to bude 100 krát, co?
Times, co dělá pc bod?
Body se.
Tak 100 krát 100 je 10,000.
Má to smysl?
V pohodě.
Home úsek, kluci, poslední řádek.
OK.
Co se mění tady?
>> STUDENT: A.
PROFESOR: A. Perfect, tak vše ostatní může zůstat stejná.
OK.
A co je to?
Takže je to doba, co?
To je hvězda pb.
Takže hvězda pb znamená, tady je to, pb, Pb bodů b.
>> STUDENT: 500.
>> PROFESOR: 500.
Takže máme 500 krát 100.
To je 50,000.
Páni!
Podívejte se na to.
>> Žák: Proč máme & C pro last--
PROFESOR: Omlouvám se.
STUDENT: Oh, OK.
PROFESOR: Moje chyba.
Spousta písemně.
Každý dobrý?
Není to tak zlé, ne?
Stačí jen málo zatímco k práci.
Máte-li vyrazit, pochopit, co každá část
odkazuje to-- jako se vším, co je to,
yes-- vyrazit na malý problémy a pak se spojí,
a můžete udělat nějaké úžasné věci.
Tam jsou odpovědi, ale my jsme to.
Pointer aritmetika.
Ah.
Mé ruce jsou křídově bílé.
Takže přidáním nebo odečtením int nastaví ukazatel
podle velikosti typu ukazatel.
Vzpomeňte si, jak každý druh má jinou velikost?
Tak jako double nebo long long znamená osm a int je čtyři, ale je jeden znak.
>> Takže to, co chcete dělat, je-- jednu věc mít na paměti,
je právě to, jak moc jsou vaše Hodnota ukazatele se právě mění
bude záviset na typ ukazatel je.
Každý dobrý s tím?
Mohu vymazat?
Jsme dobří?
Úžasné.
>> Takže pokud máme nějaký ukazatel that-- to bude be-- jsem
bude dělat to ukazatel int.
Ukládá to.
Pokud byste měli říct, ukazatel plus jedna, co to bude dělat
se to bude aktualizovat to podle velikosti int
protože to je typ ukazatel je.
>> S C, je všechno velmi přísné a regulované.
Ukazatel int bude aktualizovat podle množství prostoru int bude trvat.
Int je čtyři bajty.
>> Takže to, co by to proměnit?
Jste právě přidáním čtyři na to.
Nyní ukazatel by be-- OK.
>> Takže pokud je to char a my ukazatel plus jedna, co by to bylo teď?
Pokud je started-- předstírat jsme started-- teď je to 0x08.
Pojďme se nyní říci, že to byl char ukazatel, a přidali jsme jeden.
Co by to změnit?
Kolik bytů je char?
>> Diváků: One.
>> SPEAKER 1: One.
Diváků: Tak 0x09.
SPEAKER 1: Tak to by bylo devět.
Takže jen něco zapamatovat.
Stačí, když si přidat jeden, není to Přidáte-li jedno, pokud je to char.
Je to přidáním kolik bytů typu, že je,
což je důvod, proč máme Tato rovnice se zde.
Takže je to int krát větší typu ukazatel.
>> Takže máme příklad zde.
y byl přidělen do té hodnoty, 0x4, když jsme y a roven jedné.
Co je v tom, co je v x, nemění.
Co dělá změny je to, co je v y.
Adresa uložena v y aktualizován o čtyři protože tam jsou čtyři byty v int
a je to ukazatel int.
>> Dobrá.
Takže teď máme další cvičení.
Takže otázka je, co se bude tisknout.
Nějaké nápady?
>> Diváků: Počet znaky spokojenou kočku?
SPEAKER 1: Přesně tak.
Tak rád se svým řetězcem.
Má každý dostat, že?
Chceme jít přes něj?
>> Ano, OK.
Takže to, co máme here-- I takhle mnohem víc.
Nemám na [Neslyšitelné] směšně.
>> Takže máme řetězec tady šťastná kočka.
Lovely.
Máme nějaké počítadlo, které jsme sledování.
Takže máme nějaký char * ukazatel že právě je rovna Str.
Co to dělá, je, že je to přiřazení nějaký ukazatel
na začátku svého řetězce.
Protože jsem si jistý, jak to byl zmíněn v přednášce,
dali jsme ti kluci to datový typ nazvaný řetězec.
>> Ale opravdu řetězce jsou jen pole of-- jako char *.
Je to ukazatel na spoustu postav že jsou souvislé paměti.
Takže to jen nastaví ji rovná libovolný řetězec je
identifikován kde jeho první znak.
Takže je to jen nastavení nějaký bod rovnající se začátek řetězce.
Každý, kdo tam dobře?
V pohodě.
>> Tak tohle je náš dereferencing ukazatel.
Takže to vlastně bude nám nějakou hodnotu tady,
v našem řetězci, že mluvíme o.
A říkáme tak dlouho, jak to není null zakončení.
Takže pokračuj, dokud se nedostanete na konec řetězce.
Aktualizujte svůj ukazatel o jeden.
Tak R, bude ve skutečnosti aktualizuje jeden pokaždé, protože to je char,
char *.
>> Takže to bude procházet.
Bude to aktualizovat.
Takže poprvé v tomto běží, to bude zde na h.
Bude to aktualizovat.
>> Bude to.
Bude to p, y, a tak dále a tak dále.
Budeme aktualizovat počítadlo.
Když se dostane na konec, to právě tiskne, jak daleko to dostal.
Ano.
>> Diváků: Tak to se počítá prostor jako jeden, ne?
OK.
>> SPEAKER 1: Myslíš, že ano.
Je to question--
>> Diváků: [neslyšitelné].
>> SPEAKER 1: Žádné obavy.
To jsem udělal.
Dobře, tak jedna věc, kterou jsem pochopit, že s řadou,
můžete také zacházet s ní jako ukazatel, protože pole jsou jen
kontinuální místa paměti.
>> Takže můžete zacházet s ní stejným způsobem.
Můžete je manipulovat s ukazateli, taky.
Takže místo toho dělá, v tomto případ je analogický věc
bude pole 0 se rovná 1.
>> Ale stejně, že řetězec je určen
do začátku, kde jeho první znak,
pole je určena kde jeho první prvek.
Protože víme, že jsme zaručeno, že tyto
se bude kontinuální bloky paměti.
To je to, co nám umožňuje, jak to udělat.
Víme, že kontinuální bloky paměti.
>> Takže v tomto případě, by dereferencing jen pole, která nám říká,
OK, přejděte na začátek vaše pole, které je zde.
Takže si můžete nastavit, že se rovná jedné.
A v tomto případě, bez ohledu na své pole typ je, když ho aktualizovat po druhém,
to je stejně jako aktualizace se na další index.
Můžete to udělat, protože vás Víte, co je ve vašem poli.
Tak to ví, kolik se aktualizovat ukazatel by,
jakou adresu ho na to aktualizovat že jste v dalším slotu.
>> Takže je to jen jiný způsob, jak psaní pole 0 se rovná 1,
pole 1 se rovná 2, pole držák 2 se rovná 3.
Je to jen další způsob, jak přemýšlet o tom.
Vzhledem k tomu, že jsou spojité bloky v paměti,
můžete se na ně odkazovat buď u pole notation--
což já osobně najít easier-- ale možná
je třeba manipulovat s ním striktně podle adresy paměti.
A to je tak, jak byste to udělal.
Druh víc jako v pohodě, co můžete udělat
proti možná není něco, co jste ve skutečnosti bude provádět.
>> Používám ji v 61.
Vy pravděpodobně nebudete potřebovat se starat o to příliš mnoho.
Ale pokud máte zájem, trvat 61 příští rok.
Jsme v cílové rovince kluci.
Já vím, že je to dlouho.
Dynamic Memory Allocation-- tak víme, že ten,
věcí, když jsme si povídali během náš první část společně,
jsme se podívali na swapu funkce, kde je to
mimo rámec naší hlavní funkce.
A my jsme byli kolem těchto hodnot že byly účinně kopie.
>> A jakmile swapu dokončení provedení, to prostě nechal hromadu.
Pamatujte si, že máme stack rámec pro swap.
Ponechává a ty Hodnoty odejít s ním.
A oni byli pryč.
Nemohli jsme nic dělat s nimi a my jsme byli smutní
protože nemůžeme vyměnit naše hodnoty.
>> Ale s C, jak jsem již zmínil, vás mají velkou moc nad paměti.
Takže to, co můžete udělat, je můžete přidělovat věci na haldě zde
že zůstane tam, dokud řeknete jim jinak.
>> Jsou jako hodné děti.
Oni tam zůstat.
Nemají odejít.
Budou tam zůstat, dokud jste jako, OK, můžete odejít.
>> Vzhledem k tomu, co v zásobníku, who-- jsou jako zlobivé děti.
Budou prostě utéct, když chcete aby se tam a pak jsou pryč.
Nemůžete dostat je zpět.
>> Takže haldy je-- budeme mluvit o malloc a zdarma, což
Jsem si jistý, kluci slyšel o v přednášce.
A to je v podstatě způsob, mají velmi perzistentní data.
Takže můžete mít data kolem tak dlouho, jak budete chtít.
MHM.
>> Diváků: Můžete definovat haldy a zásobníku?
Jsou rádi místa, jak dát věci?
>> SPEAKER 1: Takže jsou v podstatě prostě-- jsou
způsob, jakým se vztahují jen na paměti.
Takže haldy jen místa, kde paměť je alokována dynamicky,
vzhledem k tomu, stack odkazuje více na sebe rámy
které jsou zásadní pro funkce, které jsou ve skutečnosti běží.
Ty opravdu nemají kontrolu.
>> Velký rozdíl, máte kontrolu přes hromadu, pokud chcete.
Máte menší kontrolu nad komínem.
Zásobníku závisí na funkce, které jsou spuštěny,
a pořadí, v jakém jsou běží, a jak se vrátí věci.
Vzhledem k tomu, s haldy, as uvidíme, můžete říci,
OK, chci se tuto hodnotu kolem, dokud jsem ti to říct jinak.
Není dovoleno, aby se ho zbavit.
Nesmíš ji přepsat.
Budeš mít kolem tak dlouho, jak vám říkám.
Dostanete se být šéfem v haldě, vzhledem k tomu, stack-- Možná, pokud budete
jako podvádět svou cestu můžete být šéf.
Ale ne tak docela.
A je to opravdu jen vzpomínka.
Je to jen různé způsoby, jak se odkazovat na paměti.
>> V pohodě.
Takže s tím, jak se ovládat své paměti.
Je to s malloc, který budete mít k použití.
Takže je to jen krátká pro přidělení paměti.
To je vše, co je.
Je tu spoustu dalších pěkných funkce, které mají Alloc na konci,
a oni kandidují na různé věci.
>> Takže když budete potřebovat úložiště, které je třeba přečkat aktuální funkci tak,
že pokud Vaše současná Funkce uteče,
stále máte data, která vás dostal od něj chcete používat malloc.
To bude inicializovat ji na hromadu.
A jak jsem řekl, a udržet říká, budete ho tam udržet
dokud to říct jinak, což je důležité zde.
>> Takže jedna věc je si všimnout, a to je obvykle velmi důležité,
je, že tento sizeof je super vhodné použít
proto, že v závislosti na typu stroje vedete,
může mít různá množství paměti, že to trvá.
Takže chcete vždy používat velikost tak, že nejste závislí stroj,
aby váš kód bude spustit na jakémkoli počítači.
>> A to je jen část psaní dobrý kód.
Pokud to funguje na jednom počítači, ale ne žádné z ostatních,
Jak užitečný byl váš program?
Takže chcete vždy ujistěte se, že i použití sizeof.
>> Diváků: Tak je to, že stejně jako velikost 10 palců [neslyšitelné]?
>> SPEAKER 1: Jedná se o velikost 10 ints.
jo.
Takže velikost ints vrátí kolik jeden int trvat.
Nebo velikost char, jak hodně dělá jednu char vzít.
A pak, kolik bloků z toho chceš?
>> Takže v tomto případě, chceme něco které můžeme ukládat 10 celých čísel na.
A to bude fungovat bez ohledu na stroje, který je v pohodě.
Tak kolik bytů bude že vlastně dát?
Rychlé matematika.
>> Diváků: 40.
SPEAKER 1: 40.
Přesně tak.
Takže další velká věc.
Pointer nebo malloc může vrátit hodnotu null.
>> Takže znovu, vždy zkontrolujte, uvidíme, jestli to vrátil null
než se pokusit s ním nic udělat.
Pokusíte-li se dereference tento ukazatel nyní,
to jen tak segfault protože jsi šel a snažil
dotknout null, pokud byste neměli mít.
Takže vždy zkontrolujte, zda null.
Opět platí, že vše, co udělat.
>> To může vrátit hodnotu null.
Bude to návrat null, pokud jste buď z vesmíru, nebo z jakéhokoli důvodu
to běželo do nějaké paměti chyba.
Někdy se prostě vrátí hodnotu null.
Takže stačí zkontrolovat to.
To je vše slide říká.
A pak to, co máme Zde je volání zdarma.
Takže stejným způsobem, že pokud máte otevření souboru musíte zavřít soubor,
pokud se vám malloc paměti, můžete musíte uvolnit, že paměť.
A vy dostanete udělat opravdu cool věci.
>> A tam je program, který lze spustit na zjistit, jestli jste někdy netěsní paměti.
Ale nechcete, aby k úniku paměti.
Je to opravdu špatné.
Jen zkazit věci.
>> Je to špatné, dělat, stejně jako programování moudré, účinnost návrhu.
Ale je to také tak nějak ze špatné pro váš počítač.
Takže jen volné věci když je malloc.
>> Vy jste vidět symetrie zde.
Super jednoduché.
Jen volný, a následně bez ohledu na ukazatel,
bez ohledu na název ukazatel je, a to
se postará o uvolnění za vás.
V pohodě.
>> Pak jsme to.
Takže jsme jen tak projít tohoto programu.
A pak vy je hotovo.
>> Takže [neslyšitelné] jen hlavní.
Takže máme nějaké int * ukazatel.
Takže máme ukazatel že to bude držet celých čísel.
A kolik ints to bude držet?
Jen jeden.
Velikost int.
>> Zkontrolujte jsme se zjistit, zda ukazatel je null, protože to
je, chceme říci, nedělají nic.
Je to špatné.
Tak jsme vytisknout nějakou chybu ven paměti, nejčastěji vrátí 1,
jako vy zvyklí.
>> A pak tady máme, jsme dereference naší ukazatele.
Takže to znamená, že budeme ukládat něco, co na místě nám byl dán.
Int * ukazatel, nebo malloc vrací adresa, kde zrušil tento
Paměť pro vás.
Takže je to v podstatě která vám like-- pokud vás
přemýšlet o tom, banda domy v okolí
které chcete, aby Váš nábytek, malloc
je jako v pořádku, dostanete jít do domu tři.
A to vám dává Adresa domu tři.
>> Takže to teď, to Ukazatel se ukládá adresa,
uloží adresu Vašeho domu.
* PTR znamená, OK, já jsem v mém domě.
V pohodě.
Musím se dostat nějaké číslo.
>> Takže se ptáte na někoho aby vám nábytek teď.
Takže jste si nějaké int.
A klade ji do ukazatele kde to ukazuje.
>> A pak se to jen tisk ven, které jste zadali kdekoli.
A opět, reference.
Tak to je, jako byste šli na to adresu a viděl, co tam bylo.
V pohodě?
>> A pak samozřejmě můžeme osvobodit naši ukazatel.
Nezapomeňte osvobodit svou ukazatel.
Nezapomeňte zkontrolovat null.
Nezapomeňte osvobodit svou ukazatel.
Máte dvě věci si pamatujete z to, nebo které byste měli pamatovat.
Ano.
Diváků: [neslyšitelné] věci jako to, char * s.
Jak to, že jsme se nikdy osvobodit ty?
>> SPEAKER 1: Hm?
>> Diváků: To jsou jako nitky?
Říkal jste, že řetězce jsou stejně jako char * s, ne?
Tak proč ne my osvobodit nitky?
>> SPEAKER 1: pouze zdarma, pokud jste mallocing.
Publikum: Oh, pokud jste mallocing.
SPEAKER 1: Takže malloc a zdarma jsou dvě věci,
že byste měli mít vždy společně.
f open, f zavřít, dvě věci, měli byste mít k sobě.
V obou těchto případech, zkontrolujte, zda null.
Ano.
>> Diváků: Takže zdarma, je jen což něco jiného
má být uložen tam po Tento program se používá, že?
>> SPEAKER 1: Je to jen říct, OK, jsem udělal s tím.
Nemusíte se držet kolem.
V opačném případě bude váš počítač jen rád vyzkoušet a udržet ji tam.
A pak can't-- běží do paměti otázky později.
Vždy chcete uvolnit, protože to vám řekne váš počítač, OK, já jsem
udělal s tohoto místa paměti.
Můžete ho mít zpět Pro mě pro pozdější použití.
V pohodě?
Ano.
>> Diváků: Tak jsme na% d jen protože double že se vrátí,
nebo proč je-- [neslyšitelné].
>> Diváků: Můžete použít i%?
>> SPEAKER 1: Můžete použít% i.
Na poslední chvíli otázky?
Jděte do toho.
Diváků: Mám jen rychlý dotaz.
Takže proměnná ptr, that's-- jako s int * ptr = malloc,
to je jen říká, že je to ukazuje na místo v memory--
SPEAKER 1: Chceš [neslyšitelné]?
Diváků: začaly uznávat takzvané je velikost of-- ne, je to OK.
Ale je to jen ukazuje na místo v paměť, která je stejně jako čtyři bajty.
SPEAKER 1: Správně.
Takže malloc, jejichž velikost int říká, OK, já jdu utéct,
najít čtyři bajty paměti pro vás.
Když zjistí, že čtyři bajtů paměti to,
vám dává zpět adresu na to, kde začíná,
a to je to, co ukládají v ukazateli nebo PTR.
Dobře.
Vypadáte méně zmatený než většina lidé, když mluvím o ukazatel,
tak jsem docela dobrý pocit teď.
>> Dobrá.
Jako vždy, vy by měli mít všichni dostal své pset2 známky nyní.
Vím, že tam byly nějaké váhavý věci, kde se říká, vzorec není platný
nebo tak něco.
Pokud jste stále, že všechny Vaše stupně platí na mé straně.
Takže mohu poslat vám screenshoty vaše stupňů.
Jen mi dej vědět, jak dobře, pokud jste chybí jakékoliv známky nebo něco
Nezdá se, že smysl.
Pojď ke mně.
>> Byl jsem výborný na tebe pyšný kluci už, tak jen tak dál.
A mít dobrý odpočinek vašeho týdne.
Jsem si jistý, že budu vidět některé z vás v úředních hodinách.