>> JASON Hirschhorn: Welcome až A5, všetci.
Máme vzrušujúce týždeň pred nami, hlavne preto, že tam je tak veľa nových
čelí v tejto miestnosti.
Je to úžasné.
Mnoho z vás sa tu náhodou, čo je ešte lepšie.
Takže dúfajme, že budete držať k nám.
>> Tento týždeň budeme tráviť Prevažná časť úseku
príprava na kvíz.
Takže na našom programe, budeme hovoriť niečo o zdrojoch pre triedu,
ale aj pre testu, a potom znovu, trávi väčšinu triedy rozprávanie
o otázkach.
Akonáhle sme hotoví odpovede na vaše otázky, alebo ak vaše otázky
prirodzene nás vedú k nejakej kódovanie, som majú vzorku problémy z midterms
minulosť, že budeme kódovať žiť v sekcii dohromady, že tiež vychovávať iné
dobré téma na pokrytie.
>> Takže prvé, čo sme prešli za posledných pár týždňov, aby vám pripomenul,
chlapi, tam sú tony zdrojov k dispozícii pre tento kurz.
Mnoho z nich bude nesmierne užitočná na vás, ako si aj naďalej
študovať kvíz 0, pretože je to v utorok popoludní.
Takže vy všetci boli študuje na chvíľu.
>> K dispozícii sú skriptá a zdroje kód, ktorý by mal
určite vyskúšať.
Pozrite sa na šortky.
Pozrite sa na study.cs50.net.
A potom, sú uvedené nižšie, rad z iných zdrojov.
>> Opäť platí, že kvíz 0 je zajtra pri 1 hodine.
Ak ste tak ešte neurobili, skontrolujte, či von O Quiz 0 doklad o
Domovská stránka ihrisko je prísť na to, kde berieš kvíz.
Kvíz začína v 01:10 a končí 70 minút neskôr.
Takže ak sa objavíš po 01:10, budete dostaneme, že mnoho menej minút
ako 70, aby sa kvíz.
Takže uistite sa, že ste tam včas.
Ak ste rozšírenie študent alebo majú niektoré ďalšie testovanie úvahy, že
nemusí byť na jedno hodín zajtra.
Ale opäť, skontrolujte O kvíz 0 dokumentovať, aby sa ubezpečil, viete, kedy
užívate kvíz.
Napísal som 75 minút sem.
Myslím, že je to v poriadku, nie 70.
>> To sa vzťahuje na všetok materiál od jedného týždňa 0 sa minulý týždeň prednášky v stredu.
A opäť, v tomto teste, na ktorý dokument, dostanete jeden obojstranný a 8
1/2 do 11 listu papiera, ktoré dostanete použiť ako poznámky počas testu.
Mnoho ľudí, ak nie väčšina ľudí, majú zistil, že jeden z najdôležitejších užitočný spôsob,
k štúdiu na kvíz je vykonať štúdie list,
jedno-Sider, ich vlastné.
Tak sa pozrite na tie posledné, ak ste videli tie predchádzajúce.
Osloviť priateľov, aby videli, čo oni sú umiestnení na ich.
>> Ale hands-dole, najlepší spôsob, ako môžete Štúdia je prejsť všetko a
orezávať ho na to, čo by mal alebo by mal nepatrí na tomto liste
papier, pretože to je proste fakt užitočné ako pre vás, aby sa ubezpečil,
idete cez všetko a mať nejaké znalosti s ním.
Väčšina ľudí, nájdeme, aj keď sa list papiera sedí priamo
vedľa nich na kvíz, neotáčajte na to, pretože, opäť, že veľmi
Proces prechádza informácií pomohol im sa to naučiť.
>> Má niekto nejaké otázky, o kvíz 0?
Má všetkým -
Nebudem robiť show rúk.
To nič.
Chcel som sa opýtať, kto začal študovať.
Ale ja nechcem, aby sa ti všetko nie je zdvihnite ruky.
Takže ako som povedal - áno, Avi, choďte do toho.
>> AVI: Aký by mal byť užitočná vec aby na jednej pager?
>> STUDENT: To záleží na vás.
>> JASON Hirschhorn: Získate používať svoj úsudok.
Užitočné veci, aby na jednej pager, ak ste zmätení o veľké O
runtime rôznych typov vyhľadávania a druhy, daj to tam v
šikovný dandy graf.
Tak, ak ste požiadal, aby na kvíz, nemusíte sa snažiť a číslo
to, alebo dôvod, prečo cez behu.
Stačí si len skopírovať dole.
Ak sa pozriete na kvízy minulosti, veľa časy, tam beží čas na otázky.
Tak to by bolo príkladom dobré čo dať na jednu pager.
>> Ďalšie dobré veci dať na, ak ste zmätená o tom, ako deklarovať
funkcie, alebo to, čo rôzne časti deklarácie funkcie sú, napísať
že tam, generické verzie a potom možno príkladom.
Ak ste zmätení o ukazovatele, diagram, ako ukazovatele práce
asi naozaj užitočné.
Ak ste zmätení o rekurzia, ochutnať rekurzívne funkcie tam
mohol tiež ukázať ako veľmi užitočné.
Znamená to, že vám nejaké nápady?
>> AVI: Musíte pochopiť, Celá kompilácie proces, rovnako ako
ako to všetko funguje?
>> JASON Hirschhorn: Všetko , Ktorá bola pokrytá mohol
ukázať na kvíz.
Otázky -
ale opäť, niektoré veci bude vážené ťažko ako ostatné.
Niektoré veci majú prísť znova až a znovu v triede, v
prednáška a sekcie.
Ostatné veci nemajú prísť tak často.
>> Hovorili sme veľa o # include a -L niečo a čo ty na mysli v
Proces kompilácie.
Hovorili sme veľa o GDB, lepiť, tie rôzne príznaky, ktoré sa používajú pri
sme sa zostaviť niečo, a to make15, napríklad, naozaj
znamená, a naozaj.
Sme nehovorili toľko o každý krok
Proces kompilácie.
Stále ešte sme o tom hovorili.
Takže je to stále niečo, čo by mali byť oboznámení sa.
Ale opäť, my nebude -
veci, ktoré prichádzajú častejšie v triede sú viac pravdepodobné, že prísť viac
často a byť prísnejšie vážené na kvíz.
>> V pohode.
Akékoľvek ďalšie otázky týkajúce sa kvízu 0?
>> OK, tak som dal zoznam témy na palube.
Išiel som cez osnov.
Prešiel som úseku recenzia od včera v noci a tie zábery prísť
s non-vyčerpávajúci zoznam tém že sme sa zaoberali tak ďaleko CS50
a veci, ktoré by mohli sa objaví na kvíz.
Tak som to ísť cez každý jeden z nich.
To by sa oveľa viac čas, než máme teraz.
Ale dal som to sem, aby dúfajme jog pamäť ako k veciam, ktoré môžu byť
alebo nemusia byť oboznámení s vami.
>> A ja by som rád trávi väčšinu časť odpovede na vaše otázky o tom,
Tieto témy, témy, ktorá tu nie sú zahrnuté.
Môžeme písať pseudo kód.
Môžeme napísať skutočný kód aby bolo zaistené, že -
Môžem odpovedať na vašu otázku, a pomôcť všetci v podstate chápať
Mnoho z týchto tém, takže sa budete cítiť pripravený a pohodlne ísť do
zajtra kvíz.
Tak si prečítajte na zoznam.
Vy snáď prišli na úseku s niektorými otázkami rovnako.
Až budete pripravení, zdvihni ruku a my sme sa mohli začať.
>> Majte na pamäti, že otázky, ktoré ste, neexistujú hlúpe otázky.
Počuli sme, že veľa.
A otázky, ktoré ste, som ochotný staviť, mnoho iných ľudí aj
sedím a sledovanie on-line sú tiež.
Takže môžete pomôcť len ľudí kladením otázok.
Marcus.
>> MARCUS: Medzi zásobníka a haldy, je tu predbežne pridelené
percento pamäti, ktorá je definovaná ako to je na zásobníku alebo haldy?
Alebo ako to funguje, presne?
>> JASON Hirschhorn: Veľká otázka.
Idem zistiť spätne trochu.
Má všetkým -
prosím tu úprimný.
Viem, že žiadam vás, aby ste zvýšiť vaše ruka pred svojimi rovesníkmi.
Ale sú tu ľudia, ktorí sa cítia nepríjemný zásobníka a haldy
a chcel by som ísť cez ktoré a čo ty myslíš?
Ak Zdvihnite ruku -
OK.
Ďakujem.
Takže sme ísť stoh a haldy naozaj rýchlo a potom
presunúť do odpovede na vašu otázku.
>> Takže ak budeme čerpať z krabice, aby zastupoval pamäť na vašom počítači, aké sú niektoré
veci, ktoré idú v tomto poli?
Hlavné.
Hlavnou funkciou.
Tam, kde sa hlavná ísť?
>> STUDENT: [nepočuteľné].
>> JASON Hirschhorn: Takže budeme kladený hlavný sem.
Čo iného ide v tomto poli?
>> STUDENT: Funkcie, ktoré voláte.
>> JASON Hirschhorn: Funkcia ktoré nazývame.
A kam idú?
>> STUDENT: V zásobníku.
>> JASON Hirschhorn: Oni ísť na stack.
Takže budeme nazývať čo tu dole zásobník.
A až hore, máme hromadu.
Takže pamäť nie je box, rovnako ako to.
Ale to je vlastne celkom podobné.
Bude to mať veľa krabíc cez a viac, v závislosti na tom, aká veľká je vaša
Počítač je alebo aká veľká je vaša pamäť.
>> Na quote-koniec citátu "zdola" je zásobník.
A existuje niekoľko vecí, že idú na stack.
A tí, závisí od funkcií Máte vo vašom kóde.
Vždy máte jednu funkciu vo vašej Kód tzv hlavné, takže je tu vždy
Sekcia tu dole v zásobník venovaná hlavné.
>> Tieto oddiely v zásobníku sa nazývajú zásobník rámy.
Pri volaní iné funkcie, povedal hlavný volá binárne vyhľadávacie funkcie,
dáme ďalší rám na zásobníku.
Presnejšie povedané, budeme darovať kus pamäte na našich
počítač ukladať binárne vyhľadávanie je miestna premenné a spustiť binárny
Hľadanie kód.
>> Tak nazývame binárne vyhľadávanie.
V tomto kusu pamäti, ideme ukladať svoje lokálne premenné.
Budeme ukladať svoje printf volaní.
Nech sa stane čokoľvek, že funkcia je bude uložený priamo tam.
Binárne vyhľadávanie je bude vykonávať.
To sa chystá dokončiť spustenie.
Čo je to slovo v jazyku C, ktorý označuje že funkcia by mala
dokončiť jeho výkon?
>> STUDENT: Návrat.
>> JASON Hirschhorn: Návrat.
Takže keď vidíte, príkaz return, funkčné konca
keď to udrie to.
Takže binárne vyhľadávanie zasiahne jeho návrat.
Táto časť pamäte bude v podstate sa uvoľnilo.
A hlavné pôjdu späť do výkonu.
Takže hlavné sa zastaví tam, kde bol, volanie binárne vyhľadávanie, trochu návratovú hodnotu,
a pokračovať v realizácii.
Tento stack frame pôjde preč.
>> Ak hovoríme rekurzívne funkciu, ktorá je funkcia, ktorá volá sama seba cez
a viac, mohli by sme dostať - povedať, že sme urobil binárne hľadanie rekurzívne.
Mohli by sme sa binárne vyhľadávacie verzia jedného, binárne vyhľadávanie dvaja, binárne vyhľadávanie
tri, štyri binárne vyhľadávanie, binárne vyhľadávanie päť.
A potom je to konečná binárne vyhľadávanie päť zasiahne základné veci, a zásobník
rámy sa vrátiť späť a udržať zatváranie až sa dostaneme späť do hlavného.
Môžeme ísť na rekurziu v trochu.
Ale to všetko znamená, že ak ste volanie viac funkcií naraz,
tam bude viac stack rámy na zásobníku.
>> Haldy, na druhej strane, a to až tu, nie je pre funkcie,
nie pre lokálne premenné.
Je to pre dynamicky prideľované premenné.
To sú premenné, ktoré môžu byť inicializovaný buď hlavné alebo
funkcia, ktorá hlavné hovory.
Kdekoľvek v kóde, ktoré môžu byť inicializované.
A inicializovať dynamicky pridelená premenné.
Aké funkcie v jazyku C máme používať?
>> STUDENT: malloc.
>> JASON Hirschhorn: malloc.
Zavoláte malloc.
Získate priestor pamäte.
A to je priestor pamäti je na hromadu.
A to je priestor pamäti zostane tam, kým budete volať zadarmo.
>> Takže dynamicky alokované premenné haldy bude existovať tak dlho, ako ty
chcete, aby existovať, a nebudú odísť, kým explicitne
povedzte im, nech idú preč.
Môžete ich vytvoriť v jednej funkcii.
Táto funkcia je zásobník rámček zmizne.
Ale, že premenná bude naďalej existovať v hromadu, kým nie je oslobodený,
potenciálne funkcií, ktorý sa nazýva binárne vyhľadávanie alebo čokoľvek iného.
>> Takže tie haldy premenné zostať tam tak dlho, ako budete chcieť
im, aby zostali tam.
A oni sa sem dostal.
A potom ďalší, kto sa dostane tam dal.
Udržujú sa plní do, a oni zostať tam, kým sa volanie zadarmo.
>> A v podstate, haldy a zásobníka, dostať sa Marcus otázku,
rastie smerom k sebe navzájom.
A ak sa dostanete do seba, ste spotrebovať všetku pamäť vo vašom
počítač, a váš program bude prestať pretože nemáte žiadnu ďalšiu pamäť
doľava na použitie.
Medzi nimi existuje prípadne ďalšie veci.
Ale pre rozsah tohto kurzu, vám Nemusíte sa obávať, že.
>> Takže to bola odpoveď na vašu otázku.
Nerobte si starosti.
Ale to bola dlhá odpoveď.
Všetko, čo potrebujete vedieť, je haldy a zásobníka bude -
jeden začína v dolnej časti.
Stack robí.
Haldy je tam hore.
Budú rásť bližšie k sebe.
>> A ak sa dotknú, to je problém.
Utiekol si z pamäte.
Ale tiež, okrem vedieť, kde sú to, čo je uložené v oboch
stack a heap.
Curtis.
>> CURTIS: Keď sa zrazí, je, že pretečeniu zásobníka?
>> JASON Hirschhorn: Keď sa zrazí, to nie je pretečeniu zásobníka.
Pretečenie zásobníka je iná oblasť že môžeme ísť na, ak chcete.
OK, vrátime sa k tomu za chvíľu.
>> STUDENT: Aké je to slovo s názvom keď hit navzájom,
stack a heap?
>> JASON Hirschhorn: Pre túto chvíľu, nemusíte obávať.
Len viem -
Ja odpoviem na túto otázku po triede.
Ak sa dostanete do seba, si vybehol pamäti, pretože tam je viac
priestor tam.
>> STUDENT: Je nám ľúto, čo je chyba seg?
>> JASON Hirschhorn: Segment Porucha môže byť volaný k -
záleží prečo volal seg chyba je.
Niekedy, váš stack overflow, bude to povedať seg chyba ako chyba.
>> STUDENT: Čo dereferencing null premenné?
Je to chyba seg?
>> JASON Hirschhorn: Získavanie null pointer -
OK, takže ak máte ukazovateľ, ktorý vám rovná null, ukazovatele, odvolanie,
Memory adresy ich hodnoty.
A nulový ukazovateľ je v podstate skladovanie 0, 0-teho
riešenie v tejto premennej.
Takže 0x, 0, 0, 0, 0, a tak ďalej.
Že 0-teho adresu v pamäti, že to nie je v našom obrázku, je to tam
niekde, že je vyhradená pre počítač.
Sme nesmie sa ho dotknúť.
>> Takže keď váš program je realizovať, ak niečo, čo sa snaží ísť do pamäti
adresa 0, vie, že že je prázdna hodnota.
Vie, nič by tam mala byť.
Takže ak sa pokúsite a použiť niečo, čo tam a liečiť niečo ako tam, alebo
snažia sa prejsť do tohto umiestnenia, ste bude mať poruchu seg alebo chybu.
Znamená to, že odpoveď na vašu otázku?
>> A teraz pôjdeme naspäť k pretečeniu zásobníka.
Veci v zásobníku, ako vy majú nevidel, v - poďme nakresliť blízko
zo zásobníka rámu.
Každý môže vidieť, že?
Takže máme rámček zásobníka.
Šetríme pole sa ako miestny premenná v tejto funkcii.
Tak, že naša rada má päť miest.
Všetkých päť z nich sa uloží v tomto zásobníku ráme.
>> Ak začneme písať za hranice tohto poľa -
takže ak začneme písať do, povedzme, že je 0.
Tí, ktorí sú päť indexy naše pole.
Ak začneme písať do indexu 5, ktorý nemáme, keď máme
pole o veľkosti 5, začneme písať do index 6, 7, 8, 9, môžeme získať Stack
Pretečeniu chyba.
>> Všeobecne platí, že to nie je -
budete pravdepodobne dostanete do ťažkostí ak pôjdete cez jeden.
Ale všeobecne, dostanete do najväčšie ťažkosti, pokiaľ idete nad tým veľa
a ísť tak ďaleko, cez ktorý môžete napísať na spiatočnú adresu, ktorá
funkcie, ktoré sa nachádza na Dno zásobníka rámu.
>> Vzhľadom k tomu, že jo?
Vy - v - Ospravedlňujem sa.
Nie ", pretože v poriadku."
>> V zásobníku ráme, máte vaše lokálne premenné.
Na samom dne zásobníka Rám je spiatočná adresa.
To je miesto, kde funkcia ide, keď je po všetkom.
A ak ste prepísať, že návratnosť adresa, potom keď to stack frame,
keď idete cez zásobníka rám a realizáciu každého riadku, ty si
ísť do svojho nového spiatočnú adresu že je tam napísané miesto
Skutočný jeden.
A to je, ako sme videli Niektoré narušenia bezpečnosti
sa môže stať s počítačmi.
>> Takže pretečeniu zásobníka, v krátkosti, ak je prepísať časť v zásobníku
máš používať, miestne Premenná ste mal použiť, a
najmä pri spustení prepisovaní dôležité veci, ako je
spiatočnú adresu.
A to je miesto, kde budete mať chybu.
Alebo snáď dokonca by ste mohli začať dokonca aj zápis do -
povedať, binárne vyhľadávanie bolo priamo nad hlavnou.
Ak prepísal veľa, vám mohol napísať do hlavnej.
Ale všeobecne, dostanete chybu pred potom, pretože vie, že počítač
robíte niečo, čo vás nemali robiť.
Jo.
>> STUDENT: Aký je rozdiel medzi pretečeniu zásobníka
a buffer overflow?
>> JASON Hirschhorn: Buffer overflow je všeobecnejší typ
to, čo som práve opísal.
>> Žiak: Takže pretečeniu zásobníka je Príkladom pretečeniu vyrovnávacej pamäti.
>> JASON Hirschhorn: Presne tak.
To je pole si môžeme predstaviť ako vyrovnávacej pamäti, priestor pre veci, ísť dovnútra
To je pretečeniu bufferu.
Mohli by sme mať pretečenie bufferu v.
Ak by došlo k vyrovnávacej pamäte, ktorá sa často je pole halda, a my
prepísal tie hranice, potom by sme majú pretečeniu bufferu v.
>> A nad rámec tohto kurzu, oni sú detekované trochu inak.
Kompilátor má zvláštnu spôsoby detekcie každého.
Ale buffer overflow je všeobecnejší typ, čo som popísal,
ktorý bol pretečeniu bufferu.
Vedeli, že odpoveď na vašu otázku?
Sladké.
>> Boli tam nejaké ďalšie otázky súvisiace na zásobníku alebo halde?
Jo.
>> STUDENT: Viem, že máte na voľné reťazca pretože sú v halde
a nechcete, aby k úniku pamäte.
Ale máte oslobodiť globálne premenné a tak podobne?
Alebo sú automaticky oslobodení?
>> JASON Hirschhorn: Dobrá otázka.
Takže v CS50.H, tvoríme túto vec pre vás volal reťazec.
Reťazec je naozaj to, čo?
>> STUDENT: Char hviezda.
>> JASON Hirschhorn: char hviezda, ukazovateľ na znak, ukazovateľ na
pole znakov.
To je to, čo je reťazec.
Takže ho musíme oslobodiť, pretože GetString, ktorý sme použili veľa -
Názov reťazca sa rovná GetString -
že mallocs pre nás nejakú spomienku na haldy a vráti ukazovateľ na
Prvý znak, ktorý string, char hviezda.
>> Takže zdanlivo, ak ste neboli písanie zadarmo založiť na niektorý z vašich reťazcov
že ste volal tak ďaleko, budete mať uniká časť pamäte.
Samozrejme sme nehovorili o to, aby nikto nedostal do
problém pre to robí.
Ale do budúcnosti, áno.
Ak voláte GetString, že ste mallocing nejaký priestor na halde.
A ak nechcete volať zadarmo neskôr, že reťazec, máte pretečeniu pamäte.
To je odpoveď na vašu otázku?
>> Jo
>> Žiak: Takže k tomu, že budeme používať zadarmo priamo pred návratom?
Rovnako ako v rámci, myslím, že v prípade, hovoríme, ako, int main, v rámci
Rozsah kódu, ktorý je v tých zložené zátvorky, priamo pred -
Viete, kde by ste zvyčajne dať návrate.
Myslíte si, dať voľný pred tým?
>> JASON Hirschhorn: Takže si môžete dať zadarmo všade tam, kde chcete dať zadarmo.
Pretože sa jedná o dynamicky prideľované premenné, pretože môžu
žiť nad rámec najmä funkcie, ak budete volať malloc v
samostatné funkcie, napríklad, GetString, môžete volať zadarmo do hlavnej.
Nemusíte to hovoriť v konkrétnej funkcii
kde je malloc nazýva.
Ale vy potrebujete, aby to nazvať pred hlavnými vráti.
>> A to naozaj záleží.
Záleží na tom, prečo ste malloced, že priestor na prvom mieste.
Niektorí ľudia budú volať oslobodiť celkom rýchlo.
Niektorí ľudia budú volať zadarmo až do koniec svojho programu.
A oni si prejsť a voľný všetko.
Záleží na tom, prečo si volala malloc.
>> STUDENT: A čo by ste povedal ak ste volali použitie GetString?
Človek by povedal zadarmo, čo?
>> JASON Hirschhorn: Tak syntaxe zadarmo je jednoducho voľný, otvorené zátvorka, v blízkosti
zátvorka, a názov ukazovatele.
Takže ak napíšete názov reťazca rovná GetString, dáte meno tu.
To je názov ukazovateľa.
A vie, že k uvoľneniu, že pamäť.
>> Žiak: Takže, keď sa uvoľní, že pamäť, ukazovateľ ukazuje stále na tomto mieste
v pamäti?
Alebo je ukazovateľ taktiež zbavená adresa, na ktorú odkazuje.
>> JASON Hirschhorn: Mali by sme to skúsiť.
Mali by sme kód, ktorý.
Poďme späť, keď sa dostaneme do kódovanie, a poďme kód, ktorý.
A ak chcete zistiť odpoveď na to, že môžete tiež kód, ktorý
do tej doby.
Ale to je veľká otázka.
>> STUDENT: Je možné, aby zadarmo niečo príliš skoro?
Takže si ešte potrebovať pre váš program, a oslobodil túto pamäť?
>> JASON Hirschhorn: Áno.
To je možné, ak sa niečo zadarmo a potom ju znova použiť, budete
naraziť na chybu.
Ale to je na vás, pretože ste oslobodení niečo, a potom zavolal neskôr.
Takže to bol programátorský chyba.
Ale áno.
Dalo by sa napísať, že.
>> Nejaké ďalšie otázky týkajúce sa -
Áno.
>> Žiak: Takže ak ste mali len uvoľniť, všeobecne pred
program skončí, či to znamená, Program končí a nechcete ho uvoľniť,
že pamäť je stále pridelené?
>> JASON Hirschhorn: Ak je váš program končí a zabudnete uvoľniť niečo, potom
že pamäť bola pridelená v priebehu životnosť vášho programu.
Keď váš program ukončí úplne, že pamäť nebude
zostať tam navždy.
Počítač je dosť chytrý, aby vedel , Že pri ukončení programu, je
by sa zbaviť všetky pamäti, že bola spojená s týmto programom.
>> Avšak, tam sú nástroje, ktoré môžete spustiť o programe pre detekciu v prípade, kedy
Program skončil, si zabudol uvoľniť nejakú pamäť.
A ďalší problém, v miestach, kde budete používať malloc a použitie
ukazovatele, budete beží to program na vašom programe, aby zistili, či,
keď hlavný vráti, ste mali nejaké veci, ktoré boli ponechané unfreed.
>> Takže to nebude zostať malloced navždy vo vašom počítači.
To by bolo nehospodárne, pretože veľmi rýchlo, počítače
by k vyčerpaniu pamäte.
Ale v prípade, že beží až do konca vášho programovanie a oni nie sú oslobodení a vaše
Program ukončí, je to stále problém že tento nástroj vám pomôže riešiť.
>> STUDENT: Je to Valgrind?
>> JASON Hirschhorn: Je to volal Valgrind.
A budete -
>> STUDENT: Ale my nemusíme vedieť že k testu, ale?
Myslím, že to bol hovoril o trochu v prednáške.
>> JASON Hirschhorn: Tak Valgrind je názov tohto nástroja.
Vedieť, čo to robí, je dosť pre kvíz.
Ale vy ste ho nevyužili ešte na vašom problém nastaviť, pretože sme nemali
Problém set, ktorý sa výslovne zaoberal s malloc alebo pomocou malloc.
Takže ste nepoužili ešte Valgrind.
Ale budete používať skôr skôr ako neskôr.
>> STUDENT: Dokážete opakovať čo Valgrind je?
>> JASON Hirschhorn: Je nám ľúto?
>> STUDENT: Dokážete opakovať to, čo Účelom Valgring je?
>> JASON Hirschhorn: Valgrind je názov -
ako GDB pomáha pri ladení programu, Valgrind vám pomôže zistiť, či
veci, ktoré neboli uvoľnené keď váš program ukončí.
Takže budete spustiť na vašom programe.
A váš program ukončí, a to poviem Váš program s názvom malloc to veľa
krát k tomuto počtu bytov, a vy iba tzv voľný tento mnohokrát.
A tak si odišiel týchto veľa bajtov bez toho, aby bol oslobodený.
Alebo to poviem, že ste oslobodení všetko.
Dobrá práca.
>> STUDENT: OK.
A volá sa Valgring?
>> JASON Hirschhorn: V - L-G-R-I-N-D.
>> STUDENT: otázka o ukazovatele.
Takže povedať, že ste n hviezda x sa rovná niečo.
To sa rovná, čo ste uvedenie tam, je to, že to, čo je dať dovnútra
čo x smeruje k, alebo ukazovateľ x?
>> JASON Hirschhorn: Môžeš zopakovať otázku?
Môžeme kresliť, keď to hovoríte?
>> STUDENT: V teste, v skutočnosti, ten, ktorý nám poslal, to bolo ako, char
hviezda pravda rovná CS50 skaly, nie?
Takže to znamená, že toto CS50 skaly je to, čo je pravda ukazuje na?
>> JASON Hirschhorn: Takže hovoríte o char hviezdy v reťazci, ako
že funguje?
Jo.
OK.
Poďme nakresliť to tu.
>> [SIDE konverzácie]
>> JASON Hirschhorn: Takže táto premenná bude typu char hviezdy.
Aký veľký je variabilný z typu char hviezdy?
Koľko bajtov?
>> ŠTUDENTI: Štyri.
>> JASON Hirschhorn: Je to štyri bajty.
Koľko práva je variabilný z typu int hviezdy?
>> ŠTUDENTI: Štyri.
>> JASON Hirschhorn: štyri bajty.
Ak je to ukazovateľ, potom je vždy štyri byty, pretože ukazovatele, ich
hodnota je adresa pamäti.
A pamäťové adresy na CS50 Zariadenia sú štyri bajty dlhé.
Takže keď hovoríme GetString, alebo keď povedzme, jmeno_string rovná, a potom v
dvojité úvodzovky dať reťazec, kladieme -
dobre, že je to trochu inak.
Budeme sa GetString ako príklad.
Alebo char hviezda niečo rovná reťazec.
Ospravedlňujeme sa, daj mi príklad že ste si prečítali?
>> STUDENT: char hviezda pravda rovná "CS50 skaly" v úvodzovkách.
>> JASON Hirschhorn: Tak to hviezda, to zavoláme túto premennú x pre naše
všeobecné účely.
Vytvorili sme premennú s názvom x.
Je to typ char hviezda.
Je to ukazovateľ na rade znakov.
Tak tu -
>> Tak to je, ako to by pracujú v pamäti.
To by uloženie pamäťovej adresu.
To by neskladujte pamäťovú adresu prvý znak v poli.
A potom, keď ste postupovali ukazovateľ, by ste
získať prvý znak.
>> A ak čítate túto vec ako reťazec, počítač je šikovný
stačí vedieť, prečítajte si celú túto vec až sa dostane k odporu 0..
Ale ak ste to čítal znak na čas, takže ste iterácie
Tento reťazec, potom budete len čítať znak v čase, kým sa nedostanete na
spätné lomítko 0.
To nemusí zodpovedať vašej otázka, hoci.
>> STUDENT: Jo, ale nemáte malloced, že priestor
ale pre tento ukazovateľ.
>> JASON Hirschhorn: Takže si nie som celkom istý, presne to, čo hľadáte na,
pretože som nemal robiť, že kvíz.
To mal byť užitočné zdrojov z iného TF.
Ak vytvárate reťazec na zásobník alebo ako lokálne premenné, bude to
byť len rad poplatkov, skôr než všeobecne char hviezda ukazujúce na
iný reťazec.
Ale ja neviem.
To by mohlo byť ukazovateľ na ďalšie reťazec na zásobníku rovnako.
Jo.
>> STUDENT: Ja viem, že je potrebné, aby alokovať pamäť v prípade, že ukazovateľ je
ako sa deklarované vnútri iné funkcie.
Potrebujete si urobiť to isté, ak je to boli vyhlásené vo vnútri hlavnej,
budete používať vnútri hlavnej?
>> JASON Hirschhorn: Takže áno.
Môžete deklarovať ukazovateľ na akýkoľvek adresa pamäte v pamäti.
To môže byť pamäť adresa miestnej variabilný, aj keď často,
ľudia nemajú vyhlásiť adresy pamäti do lokálnych premenných, pretože idú
preč raz, že funkcia vracia, čo je dôvod, prečo sme sa všeobecne malloc veci.
Ale áno, môžete deklarovať ukazovateľ iné lokálne premenné.
Je to len všeobecne nerobí.
Ale môžem sa na to pozrieť špecifická vec, ktorú po hodine.
Jo.
>> STUDENT: Myslím, že to je niečo čo je žiadaný.
Zdá sa to divné, byť inicializácia nie ako ukazovateľ
adresu, ale ako to, čo Vyzerá to, že hodnoty.
Vyzerá to, že CS50 je to, čo je vo vnútri to je ukázal a
nie je skutočná adresa, nie?
>> JASON Hirschhorn: Tak to je nie je tento prípad, hoci.
To nie je to, čo sa deje.
Keď deklarujete char hviezdu, to je adresa pamäti.
Ukazovatele sú všetky pamäťové adresy ukazuje na niečo iné.
To je niečo iné, môže byť na stack, ale takmer vždy je na
haldy v spôsobe, akým budeme vidieť skôr.
Ale jmeno_string rovná dvojité úvodzovky "GetString," môžeme vidieť, že aj my
môžete prehliadnuť, že aj kód, ktorý.
GetString reťazec nie je uložený v že premenná, alebo čokoľvek reťazec
názov nie ukladaný v tom, že variabilný, pretože to nie je ako
ukazovatele pracovať.
Má to zmysel?
>> STUDENT: Jo.
>> JASON Hirschhorn: OK.
Dúfajme, že to nie je mätúce pre každého.
Ale keby to bolo, môžeme sa na to pozrieť znova vo chvíli, pretože sme vlastne deje
kódovať niečo, čo bude dúfajme, prácu s reťazcami a pomôže vám cítiť sa
viac pohodlne s nimi.
>> Akékoľvek ďalšie otázky týkajúce sa týchto témy a ďalšie témy, ktorá
Dám späť?
A -
práve teraz.
Áno, Alden.
>> ALDEN: Tak toto je absolútne nesúvisí, ale nemôžeme jednoducho ísť cez
veľmi rýchlo, čo potrebujete vedieť o rozdiele medzi 32 a
64-bit stroj?
>> JASON Hirschhorn: Áno.
Takže 32 bitov je, koľko bajtov?
>> ALDEN: Je to štyri bajty.
>> JASON Hirschhorn: Je to štyri bajty.
A 64 bitov je, koľko bajtov?
>> STUDENT: Osem.
>> JASON Hirschhorn: Osem bajtov.
Takže znovu, osem bitov je jeden bajt.
Váš CS50 spotrebič je 32-bitový stroj.
Takže adresy pamäte sú štyri bajty dlhé.
K dispozícii sú 2 až 32 adresy pamäti.
0-2 až 32 mínus 1.
A ja nie som pozitívny, ale to je Pravdepodobne rozsah toho, čo budete potrebovať, aby
vedieť, pre 32-bitové stroje, ktoré pamäť adresy sú opäť štyri bajtov,
a to je maximálna suma, pamäťových adries.
>> Tiež, dátové typy -
to by mohlo byť niečo ako dobre, že to stojí za zmienku.
Veľkosť dátového typu závisí na stroj, s ktorým pracujete.
Takže char, znak, je to, ako počtu bytov na našom CS50 zariadení?
Jeden byte.
A to je vlastne jeden bajt ako aj na 64-bitovom počítači.
>> A väčšina dátové typy sú rovnaké číslo z bytov na oboch strojoch.
Ale niektoré typy dát sa bude líšiť na oboch strojoch.
Tak, že by sa mohli Jediná vec, ktorú potrebujete vedieť.
>> Ale aj to, že si myslím, je za hranicami -
Som si takmer istá, keď sa pozriete späť na staré kvízy, hovorí, prevziať za
kódovanie problémy, ktoré používate 32-bitový stroj.
Ale tam sú, ísť spolu s tým v prípade, že máte záujem, tu sú
dátové typy, ktoré sú rovnaké veľkosť na všetkých strojoch.
>> Ak ste videli niečo také uint32_t, môže alebo môžu
Nie je vidieť, že.
To je typ dát.
To sa hovorí, byť 32 bitov bez ohľadu na čo stroj je to na.
Takže keď ľudia píšu prenosné Kód, že pravdepodobne nebude používať ints.
Budú namiesto toho použiť tieto ďalšie údaje typy, ktoré vedia, bude rovnaký
veľkosť na každom stroji.
Madhu.
>> Madhu: Mal som otázku Proces kompilácie.
Takže ak píšete program, ktorý používa knižnica ako CS50, alebo tak niečo
rovnako ako to, že viem, že knižnica je, v určitom okamihu, bude
zostavené a spojené palcov
Ale ako veľmi sa to stane počas zostavenie vášho programu?
Aká časť tejto knižnice procesu nastane, keď ste
zostavovaní vlastného programu?
>> JASON Hirschhorn: Tak poďme na všeobecne kroky tohto procesu.
Môžete napísať. C súboru.
Vo svojej. C súboru, # include svoj knižnice záhlavie, napríklad, cs50.h.
Čo znamená, že ostrý patrí linka urobiť, aby váš program?
Akchar.
>> AKCHAR: Dodáva prototypy funkcie z hlavičky
súborov v knižniciach.
>> JASON Hirschhorn: Presne tak.
Dodáva týchto funkčných prototypov do svojho kódu.
Takže ak je váš kód je zostavený v včasné štádia, kompilátor vie,
že tieto funkcie skutočne existujú, a že niekde boli definované.
K. H súbory nezahŕňajú definície týchto funkcií, alebo ako
skutočne pracujú.
Cs50.h práve obsahuje niečo, čo sa hovorí, GetString je skutočná vec, ktorá
sa môže stať.
A standardio.h hovorí printf je skutočná vec, ktorá sa môže stať.
>> Takže váš jazyk C s tým. Záhlavie súbor sa premenil v niektorých
strojovo čitateľný kód, ktorý sa nakoniec dostane sa obrátil na binárne
kód 0 a 1 je.
A to je kód, ktorý nakoniec dostane popravený.
-L CS50 linky - napríklad, keď píšete zvonenie -
a potom sú-l CS50, píšete, že palcov
A uvidíte, že.
Keď napíšete robiť, budete si musieť vybrať pozri tento riadok tu.
A uvidíme, že vo chvíli, keď my kód alebo neskôr, keď sme kódu.
>> Ale to-l CS50 linka robí niečo trochu iný, než
# Include cs50.h.
Čo to-l CS50 linka robiť?
Avi?
>> AVI: Chcem povedať, že spája Knižnica pre funkciu
volanie, ako Õ. súborov.
>> JASON Hirschhorn: Takže veľmi blízko, ak nie spot-on.
-L CS50 má binárny súbor a spája ju s binárnym súboru.
Takže cs50.h, že to nemá zmysel otáčania cs50.h z jazyka C v sústave binárne každý
jeden čas sa to používa.
To by bolo hlúpe, pretože to by odpad veľa času.
Tak to už bol zostavený a obrátil sa do spustiteľného súboru.
A teraz sa chystá byť zlúčené s súboru na konci.
Takže tie 1 a 0 sa deje spojiť so svojimi tie
a 0 je na konci.
Takže teraz budete skutočne mať skutočný 1 a 0, ktoré definujú, ako GetString,
napríklad funguje, alebo ako printf, napríklad funguje.
>> A pre viac informácií, tam je krátke kompilátory, že Nate dáva, že
by ste sa mali pozrieť na to, že ide prostredníctvom týchto krokov.
Ale -
Áno.
>> STUDENT: Sú vždy o súbory. keď sú vo forme knižnice,
pripravení byť zlúčené, súvisí - ako sú v binárnom kóde?
>> JASON Hirschhorn: OK.
Čo -
>> STUDENT: Je to vždy pre knižnice, keď je prepojiť?
>> JASON Hirschhorn: Áno.
Takže tam je. S. súborov, ktoré budú strojový kód, ktorý bude tiež
mystický pre vás.
Nemusíte sa starať o tie.
Ale všeobecne, jo, oni budú byť. o súbory pripravený ísť.
>> Žiak: Takže, keď sa loď na knižnica, máte len loď
. Ha. O?
Nemusíte loď. C alebo. S..
>> JASON Hirschhorn: So -
a to je v tomto krátkom rovnako, ak táto informácia sa zdá, že prichádza
trochu rýchlejšie.
Ale krátky na prekladača hovorí o tom, to rovnako.
Keď loď knižnicu, ak loď . H súbor hlavičky, ktoré
funkčné prototypy, a 1, a 0 je, to je všetko, čo potrebujete dať.
Nemusíte dať, ako Funkcia pracuje, c súbor ..
Vzhľadom k tomu, miesto odberu, alebo bod API, bod v tomto SPL,
prenosná knižnica Stanford, je to aby ste sa starať o tom, ako nová
GRect funguje, alebo ako sa pohybovať práce, alebo, ako pridať diela.
Všetko, čo potrebujete vedieť, je, že doplnok je funkcia, ktorá môžete
použiť, a to robí to.
Takže si naozaj nemusíte vedieť, ako je to napísaný v jazyku C. stačí
Viete, tu sú funkcie, čo robiť, a tu sú ich 1 a 0
keď budete naozaj chcieť použiť.
>> V pohode.
Nejaké ďalšie otázky týkajúce sa kompilátory alebo ďalšie témy na palube?
>> STUDENT: Mám otázku , Ktorým sa vykonáva rekurzívne funkcie.
Otázka o rekurziu.
Mal som pocit, že by sa prísť.
Takže poďme rýchlo prejsť rekurzia s konkrétnou
Napríklad faktoriál funkcie.
Vzhľadom k tomu, to je príklad, ktorý často prichádza, alebo sa používa
pre ilustráciu rekurzia.
>> Takže "4!" je čítať ako 4 faktoriálu.
A čo 4 faktoriál znamená?
Čo to bolo?
Ako si vypočítať 4 faktoriál?
4 krát 3 krát 2 krát 1.
>> Takže ďalší spôsob, ako napísať 4 faktoriálu je to napísať.
4x 3 faktoriál.
Vzhľadom k tomu, 3 faktoriál je 3 krát 2 krát 1.
Takže 4 krát 3 faktoriál je 4 krát 3 krát 2 krát 1.
To je dôvod, prečo faktoriál je skvelý kandidát na rekurziu, pretože je to
jasné, že tam je niečo, čo stane znova a znova a znova na
menší počet vecí, kým sa dostanete na koniec.
Keď sa dostanete na 1, 1 faktoriál je 1.
Nemôžete ísť oveľa ďalej.
0 faktoriál je tiež definovaná ako 1.
Takže, keď sa dostanete na 1 alebo 0, ste na konci, a môžete
začať chodiť hore.
Takže ak by sme chceli napísať rekurzívne funkcie pre výpočet faktoriálu,
budeme písať nejaké pseudokódu na to teraz.
Než sme sa napísať tento pseudokódu -
Dám si chalani pár minút písať pseudo kód alebo jednoducho myslím,
o tom - tam sú dve veci, ktoré každý rekurzívne funkcie potrebuje.
Aké sú tie dve veci?
>> JACK: To má volať sám.
>> JASON Hirschhorn: Noah?
Oh, Jack.
Len do toho.
>> JACK: To má volať sám.
>> JASON Hirschhorn: Tak rekurzívne funkcie potrebuje rekurzívne volanie,
volať k sebe.
To je jedna.
A čo je tá druhá vec?
>> JACK: base-case.
>> JASON Hirschhorn: base-case.
Základný scenár je, tu je, keď sme sa zastavili.
Takže vaše funkcia volaná.
Referenčný prípad nastane skôr.
Chcete vedieť, či ste na konci.
A ak nie ste na konci, budete Urob si svoj rekurzívne volanie.
A idete cez túto funkciu znovu, skontrolujte znovu vaše základné prípad.
Ak si nie ste koniec, urobíte ďalšie rekurzívne volanie,
et cetera, et cetera.
>> To je dôvod, prečo rekurzívne funkcie vždy Potrebujeme tie základné veci, a tie
rekurzívne volanie.
Ak nemáte rekurzívne volanie, je by nemal byť rekurzívne funkcie.
Ak ste nemali základné veci, by ste ísť na veky
tam by bol žiadny koniec.
A referenčný prípad vždy na prvom mieste, pretože budete vždy chcieť skontrolovať
ak ste na konci prvej.
Takže ako sme sa urobiť nejaké pseudokódu, prečo nie sa chvíľu premýšľať o tom,
ako rekurzívne funkcie pre výpočet faktoriálu by byť napísaná?
>> Tiež, ako veľa, ako robíte, písanie že sa na jeden list papiera
to, čo budete mať na robiť na kvíz zajtra.
Takže asi dobré praxe, aby Uistite sa, že kód píšete
sa na list papiera -
alebo si môžete urobiť, že.
Viete, kde sú bodkočiarkami.
Pamätáš si syntax.
Vzhľadom k tomu, že ste neboli schopní mať Kompilátor ti urobili chybu.
>> Aj v tomto smere, zajtra, kedy ste kódovanie problémy, ak
sa vrhli na čas, alebo ak ste veľmi zmätený, ako máš
napísať konkrétnu vec C, by slušať vám písať pseudo-kódu
alebo píšte svoje pripomienky, rovnako.
Vzhľadom k tomu, že je čiastočný úver pre Veľa otázok, na kvíz.
Takže môžete byť ponáhľal, alebo môže byť len zmätený.
Písanie v komentároch alebo pseudo-kódu sú často spôsoby, ktoré
Môžete získať čiastočnú úver.
>> Takže nenechávajte niečo prázdne na kvíz.
Je tu žiadne sankcie za uvedenie veci palcov
V skutočnosti, uvedenie v pseudo-kódu alebo komentáre bude pomáhať porovnávač
zistiť, či ste skutočne vedieť, čo hovoríte, a možno ocenenie
si niektoré čiastkové ocenenie za to.
>> Aj v tomto smere, písať jasne.
Ak sa nám podarí naozaj to, čo píšete, nie sme ti zavolať
o polnoci zajtra na obrázku z toho, čo ste napísal.
Sme len tak zložiť body.
Napíšte jasne, takže môžeme počuť, alebo skôr, môžeme prečítať, čo ste napísal.
>> A keď sa hovorí, že dve vety, nepíšte odsek.
Postupujte podľa pokynov.
Jasne napísať.
A napísať v týchto pripomienok alebo pseudokódu na otázky, ktoré by mohli
ocenenie čiastočné úver.
>> OK, poďme sa faktoriál.
Takže máme funkciu faktoriál.
Ak by som mal vlastne píšem v C, to, čo potrebujem, aby pred menom
funkcie?
Návratový typ, ktorý, v tomto prípad, dáme mu int.
A potom vnútri zložených zátvoriek, je čo sa deje vo vnútri zložených zátvoriek za
funkcie?
>> ŠTUDENTI: Typ Argument.
>> JASON Hirschhorn: Jej argumenty.
Takže faktoriál bude pravdepodobne prijať argument.
Je to pravdepodobne len mať jeden argument.
A my, že to bude trvať celé číslo s názvom x.
A opäť, pri písaní prototyp funkcie alebo písomne ​​funkciu
v kóde pred jeho definíciu, vás napísať dátový typ a názov
táto premenná iba pre túto funkciu.
Takže si môžete prejsť nejaké číslo do tohto funkcie, bude to len x
interne.
>> Máme pre výpočet faktoriálu funkcie.
Potrebujeme dve veci, základné prípad a rekurzívne volanie.
Aká je základný dôvod pre faktoriál?
Niekto, kto to napísal a kto nemá ešte hovorí, čo je základom
puzdro pre faktoriál?
>> STUDENT: Ak n je menej ako 2, vráti 1.
>> JASON Hirschhorn: Ak n je menej ako 2, vráti 1.
Páči sa mi to, pretože to sa stará o 0 a 1.
Takže budeme robiť x <2, vráti 1.
Ak by sme si prešiel 0, ak dostaneme prešiel 1, bude táto funkcia
okamžite vráti 1.
Ak by sme si prešiel nejaké číslo väčšie než alebo rovná 2, ideme do
máme rekurzívne volanie.
>> A tak, ako je to, že bude fungovať?
Môže niekto, kto pracoval na tejto ktorý doteraz neprehovoril mi
rekurzívne volanie pre túto funkciu v pseudokódu?
Ak by sme si prešiel v počte x a to je väčší ako 2, čo
chceme robiť?
Sme tiež príklad napísaný na strana, ktorá vám môže poskytnúť radu.
>> STUDENT: Call x krát faktoriál x mínus 1?
>> JASON Hirschhorn: Presne tak.
Budeme sa vracať x-krát faktoriál x mínus 1.
A to, aj keď som spísal, v podstate to, čo ste povedal v angličtine,
táto funkcia pre výpočet faktoriálu bude sa znovu zavolal.
Bude vykonávať na x mínus 1.
Je to vrátim s nejakým celé číslo, a potom to bude násobiť tieto dva
spoločne, a táto hodnota bude vrátil sa na čokoľvek nazval
faktoriál funkcie, ktoré by mohli byť iná inštancia
táto funkcia pre výpočet faktoriálu.
>> Takže to je príklad rekurzívny funkcie, čo je veľmi
jednoduché rekurzívne funkcie.
Ale väčšina z nich bude takto.
Ak by ste chceli dobrý rekurzívne výzva pre kvízu, skúste kódovanie
binárne vyhľadávanie rekurzívne.
Pretože ak ste binárne vyhľadávanie problém nastaviť tri, pravdepodobne to urobil
iteratívne v slučke while.
>> Ale môže to byť tiež písomné rekurzívne.
Budeš musieť napísať svoj vlastný samostatné funkcie, ktorá zoberie niektoré
rôzne argumenty príkazového riadku - alebo nie argumenty príkazového riadku, z ktorých niektoré
Rôzne len pravidelné argumenty.
Ale vy ste mohol napísať binárne hľadanie rekurzívne rovnako.
>> Žiak: Takže ste mohli tiež napísané, miesto x mínus 1, vy
by tiež písali x mínus mínus, alebo by ste mohli mať
napísal mínus mínus x.
Môžete len vysvetliť, naozaj rýchlo, prečo tie by sa rôzne veci,
ako to, čo je rozdiel medzi x mínus mínus a mínus mínus x?
>> JASON Hirschhorn: Nie, nie som ísť do toho.
Ale budem s vami hovoriť o tom po trieda. x mínus mínus mínus mínus x
decrement x o 1.
Ale robia to trochu inak.
Ale ja nechcem ísť do toho.
Ostatné otázky týkajúce sa rekurzia alebo je táto funkcia?
To naozaj nie je ani pseudokódu.
To je v podstate kód C by ste písať pre to.
>> OK, všetky ostatné otázky o témach tu?
Jo.
>> STUDENT: Mám rýchly prehľad s plávajúcou desatinnou čiarkou a presnosť.
>> JASON Hirschhorn: Plávajúce bod a presnosť.
Môže niekto naozaj rýchlo daj mi námety
s plávajúcou desatinnou čiarkou a presnosť?
Všetci ste musel urobiť pre váš problém nastaviť, takže ste všetci
oboznámení s tým.
Alebo možno nie všetci z vás.
Každý, kto?
Daj mi začal miesto.
S plávajúcou desatinnou čiarkou a presnosť.
V čom je problém?
Áno.
Victoria?
>> VANESSA: Vanessa.
>> JASON Hirschhorn: Vanessa.
Prepáčte.
>> VANESSA: K dispozícii je len obmedzené množstvo čísiel, ktoré môžu byť zastúpené
pretože ste na, v našej púzdro, 32-bitový systém.
Takže tak nejako si aby sa nejaké čísla.
>> JASON Hirschhorn: Tak to je Presne tak.
K dispozícii sú len určité množstvo čísla, ktoré môžu byť zastúpené.
Ak máte násobiť dve veľmi veľké čísla, môže pretiecť čiastku
priestorov máte zastupovať celé číslo.
To je dôvod, prečo niekedy používame long long namiesto int.
To má viac medzier.
To môže mať väčší počet.
>> Plávajúce bod presnosť má čo do činenia s , Ale tiež má čo do činenia s
Skutočnosť, že desatinné čísla nie vždy predstavoval.
Prepáčte.
Dovoľte mi, aby som to späť nahor.
Desatinné číslo 1.0 nie je vždy predstavoval ako vy by sa dalo očakávať,
1,000000000.
To je niekedy reprezentovaný ako 1,000000001 alebo 0,999999999.
To by mohlo byť dokonca 89 hodená tam niekde.
Takže tie desatinné čísla nie sú zastúpené presne tak, ako by ste
očakávať, že budú zastúpené.
>> Takže problém nastaviť -
to bolo dva? -
problém nastaviť dva, kde sme sa zaoberali čísla s plávajúcou desatinnou čiarkou, keď sme chceli
to, že predstavujú presne to, čo sme chceli to, že predstavujú, číslo
o haliere, alebo počet centov, vynásobíme je 100..
Zaoblené sme ich.
A potom sme odrezaní všetko za desatinnou čiarkou.
To bolo zaistené, že by v skutočnosti rovná presne to, čo sme chceli
im rovná.
>> Pretože keď budete mať niečo, čo je float a otočte ho do int, môžete
odrezať všetko na pravej strane desatinnej čiarky.
Vzhľadom k tomu, že je nejaký plávajúcou desatinnou čiarkou nepresnosť, 100.000 mohlo byť
reprezentovaný ako 99,999999999.
A ak ste práve odrezať všetko vpravo hneď, budete
dostať zlé číslo.
Jo.
>> STUDENT: Mal som otázku o liatie.
V akom poradí sa to objaviť v?
Ak by som to plávať, držiaky, 1 rozdeliť o 10, to robí 1 delené 10,
potom 0,1, potom zase je do plaváku?
>> JASON Hirschhorn: Ak tak urobíte float 1 delené 10 -
>> STUDENT: Jo, a potom rovná -
dobre, to by za normálnych okolností má to rovnaký v -
Jo.
Ak chcete, aby to plavák, nie?
>> JASON Hirschhorn: OK, tak ideme na použiť k segue do zisťuje,
Odpovede na tieto otázky pomocou kódovania.
Vzhľadom k tomu, budete pravdepodobne mať veľa Tieto minute otázky, a dobrý spôsob,
na ich riešenie je cez kódovanie.
Takže budeme kódovať práve teraz, a potom budeme vrátiť a
kód na otázku, na ktorú mal.
>> Takže prvý riadok -
Nemal som napísal to - to, čo je Prvá vec, ktorú chcete urobiť, keď sme
otvoriť nový súbor v gedit?
>> STUDENT: Zahrnúť.
>> JASON Hirschhorn: Zahrnúť, čo?
>> STUDENT: CS50 knižnica.
>> JASON Hirschhorn: OK.
Čo iné by sme mali zahrnúť?
Sme jednoducho ísť skontrolovať čo sa deje keď obsadil niečo plaváku.
Ale čo musíme zahrnúť, ak sme bude napísať program v jazyku C?
>> STUDENT: Standard I / O.
>> JASON Hirschhorn: stdio.h.
Sme vlastne nepotrebujú, pretože to programu, cs50.h, aj keď je to
vždy užitočné, aby ju zahrnúť.
Ale my vždy potrebujeme stdio.h.
>> STUDENT: Pri kódovaní v C?
>> JASON Hirschhorn: Pri kódovaní v C.
>> Tak som ju uložiť ako tento c súboru ..
Mám nejaké pekné zvýraznenie syntaxe.
Napísal som prázdnotu vo vnútri hlavnej.
Čo void znamená?
>> STUDENT: nepreberá žiadnu argumenty príkazového riadku.
>> JASON Hirschhorn: odpadá prostriedky, v tomto prípad, hlavné neponesie
argumenty príkazového riadku.
V iných prípadoch, to znamená, že funkcia neberie argumenty príkazového riadku.
Alebo funkcie, keby som písať prázdno main (void), ktorá by sa povedať sieťovom
nevracia nič.
Takže void proste nič neznamená.
Čo by som napísať, keby som prijať argumenty príkazového riadku?
>> STUDENT: int oblúk c string oblúk v.
>> JASON Hirschhorn: int argc reťazec argv.
Je to pravda?
>> STUDENT: Je to char hviezda argv zátvorky.
>> JASON Hirschhorn: Takže ste mohol napísať string argv zátvorky alebo znak hviezda argv
držiaky, ale budete potrebovať držiaky.
Vzhľadom k tomu, argv je pole reťazcov, pamätať.
Nie je to len jeden reťazec.
Takže reťazec argv je, tu je jeden reťazec s názvom argv.
String argv držiaky sa, tu je pole reťazcov.
Takže int argc reťazec argv držiaky by bolo niečo, čo som
pravdepodobne písať.
>> Takže ste chceli uložiť do celé číslo?
>> STUDENT: Jo, celé číslo.
Alebo v plaváku.
>> JASON Hirschhorn: V plaváku?
Rovnako ako float x sa rovná 1 delené 10.
>> JASON Hirschhorn: OK.
Ako môžem vytlačiť plavák v printf?
Čo je?
>> STUDENT:% f
>> JASON Hirschhorn:% f
Čo je to číslo?
d alebo i
Čo je to reťazec?
>> STUDENT: s
>> JASON Hirschhorn: s
Ako môžem získať novú linku?
>> STUDENT: Spätné lomítko n
>> JASON Hirschhorn: Čo mám vrátiť ak hlavný beží správne?
>> STUDENT: 0.
Musím napísať, že línie, aj keď?
>> STUDENT: Nie
OK, nebudeme písať, potom.
Každý môže prečítať, že?
Vyzerá to trochu malé.
Každý môže vidieť, alebo by Robím to väčšie?
Myslím, že pre kameru, urobíme je to trochu väčšie, hoci.
>> JASON Hirschhorn: Ak chcem zapnúť túto . C súbor do spustiteľného súboru, čo
mám napísať?
>> STUDENT: Urobiť test.
>> JASON Hirschhorn: Je nám ľúto?
>> STUDENT: Urobiť test.
>> JASON Hirschhorn: Urobiť test.
Rozprávali sme si o tento riadok predtým.
Zvonenie.
Čo je to zvonenie?
Názov prekladača.
Čo je to linka?
>> STUDENT: Nastaví to pre použitie GDB.
>> JASON Hirschhorn: Sady je pre použitie GDB.
Táto linka, čo je to?
>> STUDENT: Zdrojový kód.
>> JASON Hirschhorn: To je zdrojový súbor, c súbor ..
Čo tieto dva riadky robiť?
Alebo tieto dve nie linky.
>> Žiak: Mená to vyskúšať.
>> JASON Hirschhorn: Tak pomlčka o hovorí, Pomenujte ju niečo inak.
A tu voláte ho testu.
Ak som nemal, že, čo by to pomenovať to?
>> STUDENT: a.out.
>> JASON Hirschhorn: a.out.
Čo je to?
>> STUDENT: Odkazy na matematickú knižnicu.
>> JASON Hirschhorn: Je odkazy v matematickej knižnici.
My neobsahoval matematickú knižnicu, ale pretože to je tak bežné, že som
napísal make vždy obsahovať matematická knižnica.
A podobne, to zahŕňa knižnica CS50.
>> OK, takže ak sme zoznam, teraz máme spustiteľný súbor s názvom Test.
Ak to chcete vykonať, skúšku som písať.
Vidím, že môj plávajúcou desatinnou čiarkou, , Ako sa očakávalo, rovná 0.
Znamená to, že -
takže -
>> Žiak: Takže keď dáte vznášať sa, ako by ste ju obsadil ako float -
>> JASON Hirschhorn: Cast 1 až plaváku?
>> STUDENT: Nie, obsadenie plné vec -
jo.
Ak ste práve urobil, by že, aby bolo 0.1?
>> JASON Hirschhorn: OK, tak naozaj rýchlo, 1 delené 10, ktoré sú
celé čísla je rozdelený.
Takže keď si rozdeliť celé čísla, sú 0, a šetríte, že 0 v
plávať, pretože lomka je len delení.
Takže teraz sme sústruženie niečo do plaváku.
>> Pozrime sa, čo sa stane.
Urobíme test.
Takže teraz vidíme, že lomítko nebolo číslo divízie, to bolo plávajúce
bod rozdelenia.
Vzhľadom k tomu, jeden z jeho argumentov bol obsadený do plaváku.
Takže teraz to bolo hovoril, zaobchádzať s týmto divízie, ako máme čo do činenia s
plávajúce body, nie s celými číslami.
A tak dostaneme odpoveď očakávame.
>> Pozrime sa, čo sa stane -
Oops.
Keby som chcel vytlačiť viac desatinné miesto škvrny, ako som to mohla urobiť?
>> STUDENT: Point bodka f, alebo ako mnoho desatinné miesta, ako chcete.
>> JASON Hirschhorn: Tak som vytlačiť 10 desatinných miest.
A teraz vidíme dostávame nejaký divný veci.
A to ide späť k vašej otázke o plávajúcou desatinnou čiarkou nepresnosti.
K dispozícii je divné veci uložené v tu.
>> OK, to, že odpoveď na vašu otázku?
Čo iné chceš kódovať rýchlo?
>> STUDENT: Len som chcel vidieť, či nie, ak sa uvoľní nejaký ukazovateľ,
či je tento ukazovateľ ešte stále uložené v je adresa toho, čo bolo
ukázal skôr.
>> JASON Hirschhorn: OK, tak sa poďme to urobiť.
Char hviezda ptr, vytvára premennú tzv ptr typu char hviezdy.
Ako môžem písať malloc?
Alden?
>> ALDEN: Len malloc.
Ale potom to musí byť veľkosť a v tomto prípade, myslím, že by som
smerovať k char.
Tak to by bolo char.
>> JASON Hirschhorn: OK, takže viac všeobecne, Inside -
poďme upravovať.
Vnútri malloc, chcete číslo z bytov na halde.
Všeobecne platí, že to, čo sme videli, že sme robí sa budeme malloc
reťazca, napríklad, alebo pole celých čísel.
Ak teda chceme 10 celých čísel, alebo 10 znaky, 10 nám dá 10.
A potom sa veľkosť znakov bude dať nám, že veľkosť znakov, ktoré
V tomto prípade je 1 byte.
Dostaneme 10 bajtov.
Ak by sme mali napísať veľkosť int, že by nám 40 bajtov.
>> Takže viac druhovo, vnútri malloc je počet bajtov chcete.
V tomto prípade sa dostávame 1 bajt.
Ktorý vyzerá ako podivný použitie malloc, ale pre naše
účely dáva zmysel.
Takže tam je to.
>> Budeme volať zadarmo.
My sa toho zbaviť a používame PTR znova.
A to, čo si chcel skontrolovať?
>> STUDENT: Len som chcel zistiť, či alebo tam bolo niečo
vnútri nej.
>> JASON Hirschhorn: Takže nech už to ukázal na niečo?
>> STUDENT: Jo, presne, či stále mal adresu v pamäti.
>> JASON Hirschhorn: Takže ty chceš skontrolovať hodnotu PTR?
>> STUDENT: Jo, presne tak.
>> JASON Hirschhorn: Čo mám napísať tu keď chcem skontrolovať hodnotu
bod - to, čo je, Jordan povedal, hodnota?
Alebo to, čo je uložené vnútri PTR?
>> STUDENT: adresa pamäti.
>> JASON Hirschhorn: adresa pamäti.
Takže keď napíšem len to, že bude daj mi hodnotu PTR.
A ako môžem vytlačiť adresa pamäti?
Čo je formátovací reťazec na adresu pamäti?
>> STUDENT:% p
>> JASON Hirschhorn:% p
% S je reťazec.
% P na ukazovateľ.
Je to pravda?
To je v poriadku.
Takže ptr rovná -
to ešte má niečo v ňom.
To je pravdepodobne viac zaujímavá otázka.
Čo to linka robiť?
>> STUDENT: seg chyby.
>> JASON Hirschhorn: Čo?
>> STUDENT: Myslím, že seg chyby.
>> JASON Hirschhorn: Hm?
>> STUDENT: Myslím, že to seg poruchu.
>> JASON Hirschhorn: Tak tento riadok o kód, hviezda PTR, čo
sa hviezda znamená?
>> STUDENT: Obsah.
>> JASON Hirschhorn: Jo.
Prejsť na ten obsah.
Tak to je ísť do pamäti riešiť tam a daj mi to.
Použil som% c tu, pretože tam sú znaky uložené.
Takže sme ísť na túto adresu my práve videli - alebo to bude pravdepodobne
trochu iný to keď sme sa spustiť program.
Ale pôjdeme na túto adresu ktoré vieme, že ešte existuje
a vidieť, čo tam je.
>> Takže to nebolo seg závadu.
Jednoducho nám nedal nič.
Mohlo by sa nám skutočne uvedený niečo, sme jednoducho nemôže vidieť.
A že ide späť do tohto nápadu -
a my nebudeme mať moc do to, pretože to je nad rámec
rozsah tohto kurzu.
Ale hovorili sme o tom tu, keď sme prekročil hranice poľa podľa
1, mohli by sme sa dostať do problémov.
>> Niekedy, keď si len tak vypnúť 1, robíte niečo zle, a vy
mohol dostať do problémov.
Ale nemusíte vždy dostať do problémov.
Záleží na tom, ako veľmi zlú vec, ktorú to, budete sa dostať do problémov.
Čo však neznamená, byť nedbanlivý s kódom.
Ale to znamená, že program nebude vždy skončiť, aj keď idete niekam
ste nemal ísť.
>> Dobrým príkladom toho je, veľa ľudia v ich problému nastavenia 3, ktoré
bolo 15, nekontroloval Hranice na palube.
Takže ste sa pozrel doľava, pozrel sa na právo, pozrel sa na vrchol, pozrel sa
až na dno.
Ale vy ste skontrolovať, či horná bol vlastne bude na palube.
A veľa ľudí, ktorí robili, že aj sa obrátil, že v ich programe pracoval
dokonale, pretože ak to doska bola uložená v pamäti, ak ste išiel jeden
nad ňou alebo skontrolovať, či je pamäťová adresa, nebolo nič
obzvlášť hrozné o tom, takže program nebol
bude kričať na vás.
>> Ale my by sme ešte zložiť body, ak ste si skontrolujte, či je, pretože vám
robili niečo, čo neboli robiť, a tie by mohli mať
dostal do ťažkostí.
Kurzy sú, aj keď pravdepodobne nie.
Tak toto je ukázať, že áno, stále ešte môžeme ísť na to.
A my nie sme dostať do Problém v tomto prípade.
Ak sme sa snažili urobiť si ďalších 100 znakov, by sme
pravdepodobne dostanete do problémov.
A môžete kódovať čítaní ďalšie 100 znaky, ak chcete, tým, že robí niektoré
druh slučky for.
Jo.
>> STUDENT: Pretože sme boli pridelení, že priestor skutočná hodnota, neboli by sme
v skutočnosti byť schopní vidieť nič.
Mali by sme to skúsiť s nastavením, ktoré rovná ako je C alebo tak niečo?
>> JASON Hirschhorn: Veľká otázka.
Ako môžem nastaviť túto hodnotu -
čo riadok kódu môžem napísať on-line sedem robiť to, čo si povedal?
>> STUDENT: Hviezda ptr rovná sa jeden quote c ukončiť jednu ponuku.
>> JASON Hirschhorn: Tak to je uvedenie charakter, c, na tomto mieste,
pretože opäť, že hviezda znamená ísť tam.
A ak je použitý na ľavej strane Operátor priradenia, ktorá sa rovná
podpísať, nebudeme sa dostať, že hodnotu tak, ako je uvedené, že hodnoty.
Teraz sa poďme pozrieť, čo sa stane.
>> Tam dáme niečo a bolo to tam.
Volali sme zadarmo.
Niektoré veci asi stalo na halde.
Takže to tam nie je.
Ale znova, nie sme stále problémy pre ísť tam.
>> Robím to v kóde pre ilustráciu že mnoho z nich
otázky, ktoré máte, sú naozaj zaujímavé
zodpovedá veľa času.
A sú naozaj dobré otázky.
A môžete prísť na ne na vlastné-li, napríklad,
nie sme v sekcii.
Jo.
>> STUDENT: Vzhľadom k tomu, že nie ste odoslanie ukazovateľ kdekoľvek, potrebujete, aby
používať malloc?
>> JASON Hirschhorn: Tak toto ide späť do pôvodného otázku.
[? ?]
Je to len lokálna premenná?
Malloc tu nie je tak presvedčivý.
Použitie malloc tu nie je že presvedčivé, pretože je to
len lokálna premenná.
>> Žiak: Takže si to mohol urobiť char hviezda ptr rovná ahoj?
>> JASON Hirschhorn: Oh.
Takže budeme teraz získať späť do pôvodného otázku.
Myslím, že ste neboli spokojní s mojou odpoveď.
OK?
Rovnako ako, že?
>> STUDENT: Jo.
Počkajte.
>> JASON Hirschhorn: A kde chcete tlačiť?
Takže budeme tlačiť reťazec takého?
>> STUDENT: Zaujímavé.
>> JASON Hirschhorn: Tak to hovorí, že to argument je typ znaku.
Tak by to malo byť znak.
>> STUDENT: Len sa prvý.
>> JASON Hirschhorn: Tak toto je to, čo som povedal predtým.
Ako som povedal, že to nie je ukladanie reťazec v premennej ukazovateľ.
Je to skladovanie -
>> STUDENT: prvá hodnota reťazca.
>> JASON Hirschhorn: Adresa prvá hodnota reťazca.
Ak by sme mali vytlačiť tento, sme získanie hodnoty vnútri ukazovateľ.
A uvidíme, že je naozaj adresa pamäti.
>> Má to zmysel?
Prepáčte.
Počkajte, to, že odpoveď na vašu otázka, nie?
>> STUDENT: Jo.
>> JASON Hirschhorn: Tento riadok kódu je vytvoriť reťazec a potom ďalšie
variabilný ukazovateľ, ktorý sa ukázal tohto reťazca, ktoré polia.
Jo.
>> STUDENT: Takže keď sme išli jednu pamäť zaoberať ďalej, dostali by sme sa na h?
To bolo uložené ako reťazec?
>> JASON Hirschhorn: Rovnako ako sme urobili -
tak to je cenná robiť.
To je bod, aritmetika, ktoré vy nevideli, a mali by byť
relatívne dobre.
To je podobné písanie -
ak by sme mali napísať tento riadok kódu, sme predtým videli polia notáciu.
To by nám malo dať druhý Hodnota v tomto poli, h
>> Ak sme to urobili, malo by to tiež dať us druhá hodnota v tomto poli.
Vzhľadom k tomu, že sa bude, aby do pamäti adresa prvého vec, ale
pamäť adresa vec jeden cez.
A potom sa operátor hviezda dereferences že ukazovateľ.
A opäť, poďme sa pozrieť.
Dostaneme zase h.
>> STUDENT: Čo presne robí dereferencia znamená?
>> JASON Hirschhorn: Získavanie je fantázia slovo pre ísť.
Choďte na to a dostať to, čo je tam je dereferencia ukazovatele.
Je to len fantázia slovo pre to.
>> STUDENT: Ak by sme chceli k tlači celý reťazec, mohli by sme
to ampersand ukazovateľ?
>> JASON Hirschhorn: OK, sme ísť na tú pauzu.
Sme skončí tu.
Ampersand vám adresu umiestnenie, takže keď robíte ampersand z
premenná, to vám dáva adresu ak je táto premenná uložená.
Ampersand ukazovateľ vám adresa ptr kde ptr je v pamäti.
>> Nebudeme ísť na v tomto príklade.
Môžete zistiť, tieto veci na vlastnú päsť.
Ale znovu, to by mohlo byť dokonca hraničí bit rámec toho, čo potrebujete vedieť
Rozsah tejto polovici -
alebo to kvíz, skôr.
Prepáčte.
>> Budeme sa ďalej, pretože by som Páči sa mi urobiť jednu kódovanie problém
než čas vypršal.
A budeme kódovať, čo si myslím je najzávažnejšie z nich
príklady, atoi.
Tak toto bola otázka quiz pred dvoma rokmi.
A mám ho na doske tu.
>> Ľudia boli požiadaní o kvízu -
dostali trochu viac tesxt v otázka, ale ja eliminované
texte, pretože to bolo zbytočné pre naše účely teraz.
Bol to len nejaký pozadia na to, čo atoi urobil.
Ale vy všetci poznáme a sú veľmi oboznámení s atoi.
>> Navrhujem, aby ste kód tejto na jeden list papiera.
Ja tiež odporúčam vám použiť stratégiu že sme prešli
veľa v našej sekcii.
Po prvé, uistite sa, že ste pochopili, čo atoi robí.
Nakreslite si obrázok alebo prísť s niektorými mentálny obraz o tom vo vašej hlave.
Ďalej vypíšte pseudokódu na to.
Na teste, keď všetko, čo dostanete, je pseudokódu, aspoň
dať niečo dole.
A potom sa mapa, ktorá pseudokódu na C. Ak máte kontrolu vo vašom
pseudokódu, rovnako ako zistiť, či niečo je 1, ktorá mapuje na ak
stav, a tak ďalej.
A konečne, kód programu v C.
>> Takže späť k atoi a päť minút kódovať to na jeden list
Papier, ktorý je asi o množstvo času by ste vziať na
kvíz kódu atoi.
Päť až 15 minút, päť až 12, päť až 10 minút, sa o výške
Doba by ste stráviť na to otázka v kvíze.
Takže päť minút, prosím.
A ak budete mať nejaké otázky, zvýšiť tvoja ruka a ja prídem okolo.
>> [SIDE Konverzácia]
>> JASON Hirschhorn: OK, tak to bolo päť minút.
To bolo asi o množstve Doba by ste stráviť na ktoré na kvíz,
Možno low-end v tej dobe.
Budeme zhrnúť v trochu.
Začnime kódovanie to.
A ak sa nám nepodarí získať celú cestu cez, Odpovede na túto a túto
Kontrolná otázka sú k dispozícii, znova, Jeseň 2011, ak je táto otázka
sa objavil na kvíz.
>> A stálo to za osem bodov na kvíz potom.
Osem bodov je na hornom konci množstvo bodov niečo stojí.
Väčšina otázok sa pohybuje v rozmedzí s jedným až šiestimi bodov.
Tak to je náročnejšie otázka, pre istotu.
Môže niekto, aby som začal?
>> Všeobecne platí, že to, čo sa nám deje chcieť robiť s tým
fungovať atoi, logicky?
Čo chceme robiť?
Takže budeme písať niektoré pseudokódu.
>> STUDENT: Prevod znakov na celé čísla.
>> JASON Hirschhorn: Prevod znakov na celé čísla.
OK.
Takže, koľko znakov sme bude musieť prejsť?
>> STUDENT: Všetci z nich.
>> STUDENT: Všetky postavy v reťazci.
>> JASON Hirschhorn: Všetky znaky v reťazci.
Takže ak by sme chceli prejsť každý znak v reťazci, to je vec
v C sme videli, že umožnila nám prejsť každý
znak v reťazci?
>> ŠTUDENTI: pre sláčiky.
>> JASON Hirschhorn: pre sláčiky.
Takže budeme prechádzať každá postava v s.
>> Tak čo budeme chcieť robiť keď dostaneme špecifický charakter?
Povedzme, že sme stále schválil 90.
Dostávame 9.
Je to postava.
Čo chceme urobiť s že postava 9?
>> STUDENT: odčítajte to z povahy 0?
>> STUDENT: Pridať 0?
>> JASON Hirschhorn: Odpočítať je z povahy 0?
>> STUDENT: Jo.
>> JASON Hirschhorn: Prečo Ak chcete robiť, že?
>> STUDENT: [nepočuteľné]
hodnota.
Jeho int hodnotu.
>> JASON Hirschhorn: OK, takže sme sa znak 9, odpočítame od
znak 0, aby sa aktuálne číslo 9.
Sladké.
A ako viete, že charakter 9 mínus 0 postava je 9?
Čo chart ste sa na?
>> STUDENT: K dispozícii sú logicky deväť miesta medzi 9 a 0..
Alebo by ste sa mohli pozrieť na tabuľku ASCII.
>> JASON Hirschhorn: ASCII tabuľka.
Ale áno, máte pravdu rovnako.
Takže odpočítame 0.
Takže teraz máme číslo 9.
A to, čo chceme robiť, že?
Ak budeme mať 90, to je prvé číslo sme, čo chceme robiť?
>> STUDENT: ja by som dal do dočasného celé číslo pole, urobte matematiku na to
neskôr, aby to do konca.
>> JASON Hirschhorn: OK.
>> STUDENT: Môžete začať na konci roka pole a potom sa presunúť dopredu tak,
že zakaždým, keď budete pohybovať vpred, to vynásobte 10.
>> JASON Hirschhorn: OK.
To znie ako celkom presvedčivý nápad.
Môžeme začať na konci nášho poľa, a môžeme použiť strleng.
Môžeme použiť strleng tu.
Dostaneme dĺžku nášho reťazca.
Začneme na konci.
A + prvé, len sme sa, že integer, a možno by sme vytvoriť ako
Nová integer premenná up top, kde sme ukladanie všetko.
Tak sme slučka cez všetky char v S z späť na prednej strane, odpočítame 0, a
potom sme si to, a v závislosti na tam, kde je, sme to násobiť
o sile 10.
Pretože prvé, čo máme násobiť krajné znak?
>> STUDENT: 10 na 0.
>> JASON Hirschhorn: 10 na 0.
Čo sa množiť druhej najpravejšie znak by?
>> STUDENT: [nepočuteľné].
>> JASON Hirschhorn: Čo?
>> STUDENT: 10 na 1.
>> JASON Hirschhorn: 10 na 1.
Tretia najviac vpravo znak?
>> STUDENT: 10 na 2.
>> JASON Hirschhorn: 10 na 2.
>> STUDENT: Ospravedlňujem sa, ale nerozumiem to, čo tu robíme.
>> JASON Hirschhorn: OK, vráťme sa teda.
Takže budeme mať prešiel v reťazci.
Pretože sme písať atoi.
Tak sme si prešiel v reťazci.
Povedzme, že sme stále prešiel v reťazci 90.
>> Prvá vec, ktorú sa chystáte urobiť, je nastaviť nové číslo premenné, ktoré sme
len tak k vytvoreniu ako naše nové číslo.
To je to, čo budeme Pre návrat na konci.
Musíme prejsť každý znak v reťazec, pretože sme došli k záveru,
že sa musíme dotknúť každý z nich a potom ho pridajte do našej novej číslo.
>> Ale nemôžeme len pridať ako číslo.
Nemôžeme len tak 9 a pridať 9 do našej celé číslo.
Záleží na tom, aké miesto je v reťazci.
Budeme musieť násobiť je to o sile 10.
Vzhľadom k tomu, že to, ako základňa 10 diel.
>> Takže budeme mať skutočný znak, alebo skutočné číslo
číslo, odpočítaním znak 0 od znaku 9, ako sme to urobili s
odpočítaním znak kapitálu od bez ohľadu na charakter sme mali v jednom
tieto problémy.
Takže budeme vlastne mať číslo od 0 do 9 uložený ako reálne číslo, a my budeme
vynásobte to o sile 10 v závislosti na tom, kde sme v reťazci.
A potom budeme pridať späť do našej novej celočíselné premenné.
>> Tak čo to bude vyzerať by byť - budeme čerpať tu.
Ak by sme si prešiel v reťazci 90 -
>> STUDENT: [nepočuteľné].
>> JASON Hirschhorn: Ale atoi vezme reťazec.
Takže ideme prejsť hospodárstva.
Budeme si prešiel v 90..
Ideme zo zadnej na prednej strane.
Berieme 0.
>> STUDENT: Ospravedlňujem sa.
Možno je to hlúposť.
Ak budeme sa prešiel v reťazci, Prečo je 90, čo sme
ako prešiel v roku?
Pretože 90 je celé číslo.
>> JASON Hirschhorn: Vzhľadom k tomu, atoi sa string a zmení to na celé číslo
zastúpenie tohto reťazca.
Ale reťazec 90 nie je celé číslo 90 alebo číslo 90.
Reťazec 90 je pole z dvoch, alebo tri postavy, skôr, 9
znak, znak 0, a spätné lomítko 0 znak.
>> A budeme písať atoi, pretože pre Napríklad, keď budete mať príkaz
argument riadok, a to je uložené v argv, je to uložené ako reťazec.
Ale ak chcete, aby ju liečiť ako číslo, musíte ho previesť na
aktuálne číslo.
Čo sme urobili jeden z našich problémov sád.
Ktoré sme urobili v rade našich problémových sád.
Každý, kto sa celé číslo ako argument príkazového riadku.
Takže to je dôvod, prečo naše atoi funkcie berie reťazec.
>> Takže znovu, v našom príklade tu, sme bude trvať ten posledný.
Budeme odpočítať charakter 0 z toho, pretože znaky 0
odpočíta charakterom 0 vám Skutočný počet 0, v závislosti na
ASCII matematika, čo robíme.
>> Vzhľadom k tomu, znaky sú reprezentované ako iný ako ich skutočný -
charakter, napríklad, malá 97.
Nie je to - oops!
Nie je to, čo by ste čakali aby to bolo, 0, napríklad.
Takže budete musieť odpočítať charakter, aby sa 0..
>> Takže ideme na to, že tu získať skutočný počet.
A potom budeme násobiť ju sila 10, v závislosti na tom, kde
je v reťazci, a potom, že a pridajte ju do našej držiaku miesto
variabilný, takže môžeme prísť s naše posledné nové číslo.
Znamená to, že má zmysel pre každého?
>> Takže nebudeme kódovať tento práve teraz, pretože sme
ako málo času.
Ospravedlňujem sa za načasovanie, že.
Ale je to to, čo, dúfajme, že by ste byť schopní to urobiť na kvíz - na
Prinajmenšom si to pseudokódu napísaný.
>> A potom, keď sme boli písať pseudokódu, v skutočnosti, môžeme to urobiť
celkom rýchlo.
Každý riadok komentárov sme napísali sme tu prekladá do asi
jeden riadok C kódu.
Vyhlásenie novej premennej, písanie slučky, niektoré odčítanie, niektoré
násobenie, a niektoré priradenie.
Mali by sme asi tiež chcieť, aby napísať vratné potrubie.
Tiež by sme mohli chcieť, aby niektoré kontroly v tu.
Jo.
>> Žiak: Takže môžeme liečiť s ako skutočné reťazca?
Pretože viem, že je to len adresa.
Rovnako ako, ako by ste si dĺžku reťazec je prešiel?
>> JASON Hirschhorn: Tak ako ste dĺžka reťazca?
Strlen.
>> STUDENT: strlen, jo.
Ale môžete si dať s ako Argument, že?
>> JASON Hirschhorn: Tak strlen trvá char hviezdu.
A z toho vyplýva, že char hviezdu, a to udržuje v počítaní, kým sa dostane do
spätné lomítko 0. strlen bol vlastne jeden z ďalších programov sme
išli do kódu.
To je ďalší dobrý kódu.
To je jedna to trochu jednoduchšie, pretože ak budete premýšľať o tom, že
koncepčne -
Len som to povedal nahlas - strlen takto ukazovateľ a stále deje, a
počítanie a sledovanie, kým dostanete spätné lomítko 0.
>> STUDENT: OK, to mám.
>> JASON Hirschhorn: Takže najlepšie šťastie na kvíz 0 zajtra.
Ak máte nejaké otázky, budem byť vonku po tomto.
Neváhajte a napíšte mi.
Osloviť svoje vlastné TF, ak ste Nie je v mojej časti, alebo sa my
e-mail, ak budete chcieť.
>> Ak chcete šalieť a pošlite mi e-mail, třeštění e-mail, budem
poslať ťa späť, ako, emotikony, alebo, ako, vtip alebo tak niečo.
Tak neváhajte to urobiť rovnako.
Veľa šťastia znova, a budem Uvidíme sa budúci týždeň.