JASON Hirschhorna: Dobrodošli A5, vsi. Imamo razburljiv teden pred nami, predvsem zato, ker obstaja toliko novih sooča v tej sobi. To je čudovito. Veliko vas je tukaj po naključju, , ki je še boljši. Torej, upam, da si bomo še naprej se nam pridružili. Ta teden bomo preživeli Večji del odseka priprave na kviz. Torej na našem dnevnem redu, se bova pogovorila malo o sredstvih za ta razred, ampak tudi za kviz, in nato spet preživijo večino razreda govorjenja O vprašanjih. Ko bomo končali odgovore na vaša Vprašanja, ali če na vaša vprašanja seveda nas pripelje do neke kodiranje, I imajo težave vzorec iz izpiti preteklost, da bomo v živo oznake v oddelku skupaj, da tudi bruhati nekatere druge dobre teme za kritje. Torej, najprej, kot smo šli skozi za mimo nekaj tednov, da vas spomnim fantje, obstajajo ton virov na voljo za ta predmet. Mnogi od njih bodo neverjetno koristno za vas, kot ste še naprej študija za kviz 0, saj to je torek popoldne. Torej, vsi ste bili študira za bit. Obstajajo zapiski in vir koda, da morate vsekakor preverite. Gledam hlače. Odjaviti study.cs50.net. In potem, navedene v nadaljevanju, številka iz drugih virov. Again, kviz 0 jutri ob 01:00. Če tega še niste storili, preverite ven O Kviz 0 dokument o Course na domačo stran, da ugotovimo, kje ste vzeli kviz. Kviz se začne ob 01:10 in se konča 70 minut pozneje. Torej, če pridete po 01:10, ste bo dobil, da je veliko manj minut kot 70, da bi kviz. Zato poskrbite, da ste tam na čas. Če ste študent podaljšanje ali imajo nekateri drugi razlogi za testiranje, da morda ne bo na 1:00 jutri. Ampak še enkrat preverite O kviz 0 dokumentirati, da poskrbite, da boste vedeli, kdaj ste vzeli kviz. Napisal sem 75 minut gor. Mislim, da je prav, ne pa 70. Zajema vse gradivo iz tedna 0. na predavanju v sredo prejšnji teden. In še enkrat, za ta kviz, da na Dokument, dobiš eno dvostransko in 8 1/2 za 11 list papirja, ki ga dobite uporabiti kot pojasnili v kvizu. Mnogi ljudje, če ne večina ljudi, še ugotovljeno, da je ena najbolj koristen način za študij za kviz je da študija lista, ena sider, njihov. Torej, poglej zadnjih tiste če ki ste jih videli v preteklosti narave. Doseči, da prijatelji, da vidite, kaj oni dajanje na njiju. Ampak roke navzdol, najboljši način, da lahko Študija je iti skozi vse in Zmanjšati je na tisto, kar mora ali Ne spadam na ta list papir, ker je to ravno res koristen način za vas, da poskrbite, da greste skozi vse in nekaj domačnosti z njo. Večina ljudi, smo našli, čeprav so list papirja sedi poleg njih na kvizu, ne spremenijo za njo, saj je spet, da je zelo Postopek skozi informacij je pomagal jim ga učijo. Ima kdo kakšna vprašanja O kvizu 0? Ima vse - Ne bom narediti dvigovanjem rok. Never mind. Hotela sem vprašati, kdo začel študirati. Ampak jaz ne želim, da bi vas niso vsi dvignite roke. Torej, kot sem rekel - ja, Avi, pojdi naprej. AVI: Kaj bi bilo koristno stvar da dajo na eno pozivnik? Študent: To je odvisno od vas. JASON Hirschhorna: Dobiš da uporabite svoje sodbe. Uporabne stvari postaviti na eno pozivnik, Če ste zmedeni o veliki O teka različnih vrst iskanj in vrste, dal, da tam v priročen dandy grafikon. Na ta način, če ste prosil, da na kviz, vam ni treba poskusiti in ugotoviti ven ali razlog prek izvajanja. Lahko samo kopirate navzdol. Če pogledaš na kvizi preteklosti veliko krat, tam teče čas vprašanj. Zato, da bi primer dobro stvar, da dajo na svoj ene pozivnik. Druge dobre stvari, ki so bili dani, če ste zmedeni o tem, kako naj ugotovi funkcija ali kaj različni deli Izjava funkcije so napisali da tam, generično različico in nato morda primer. Če ste zmedeni glede kazalcev, diagram kako kazalci delo Verjetno res v pomoč. Če ste zmedeni o rekurzije, a vzorec rekurzivna funkcija tam lahko tudi izkaže, da je res v pomoč. Ali to, da vam nekaj idej? AVI: Morate razumeti, Celoten proces sestavljanje, kot so kako, da vse deluje? JASON Hirschhorna: Vse , ki je bila pokrita bi pokažejo na kvizu. Vprašanja - ampak spet, bodo nekatere stvari lahko močno vrednotena od drugih. Nekatere stvari so prišli spet in spet v razredu, v Predavanje in oddelek. Druge stvari niso prišel gor, da pogosto. Smo se veliko pogovarjali o # include in -L kaj in kaj s tistimi, pomeni v Proces urejanje. Smo se veliko pogovarjali o GDB, oprijemljivo, te različne oznake, ki jih uporabljamo pri bomo prevedite nekaj, in kaj make15, na primer, v resnici pomeni, in res. Nismo govorimo toliko o vsak korak v Proces urejanje. Mi smo vedno govorili o tem. Tako da je še vedno nekaj, kar si morajo biti seznanjeni z. Ampak še enkrat, mi ne bo - stvari, ki pridejo gor bolj pogosto v razredu je bolj verjetno, da bi prišli do bolj pogosto in bolj močno ponderirajo na kvizu. Cool. Katera koli druga vprašanja o kvizu 0? OK, tako da sem dal seznam teme na krovu. Šla sem skozi učni načrt. Šla sem skozi odseku pregleda iz Sinoči in ta stekelca, da pridejo gor z nepopolnim seznamom temah , ki smo jih doslej zajete v CS50 in stvari, ki bi lahko pojavijo na kvizu. Torej, jaz ne bom šel skozi vsak od teh. Da bi bilo potrebno veliko več čas, kot jih imamo zdaj. Ampak jaz sem dal gor na upajmo tek vaš spomin, da se stvari, ki se lahko ali pa morda ne bo tako seznanjeni z vami. In jaz bi rad, da preživijo večino oddelek odgovore na vaša vprašanja o Te teme, teme, ki tukaj niso zajeti. Mi lahko napišete psevdo kodo. Mi lahko napišete resnično kodo zagotoviti, da ste - Ne morem odgovoriti na vaše vprašanje in pomoč vsi bistveno razumeti Veliko teh temah, tako da boste počutili pripravljeni in udobno gredo v kviz jutri. Torej preberite več seznama. Upajmo, da ste prišli na oddelku z nekaterimi vprašanji, kot dobro. Ko ste pripravljeni, naj dvigne roko in bomo začeli. Imejte v mislih, so vprašanja, ki jih imajo, ni neumnih vprašanj. Slišali smo, da je veliko. In vprašanja, ki jih imajo, sem pripravljen staviti, mnogi drugi ljudje tako sedel tukaj in gledal na spletu imajo tudi. Torej si lahko le pomaga ljudem s postavljanjem vprašanj. Marcus. MARCUS: Med sklada in heap, obstaja predhodno dodeljena Odstotek pomnilnika, ki je opredeljena kot to je za dimnik ali kup? Ali pa, kako to deluje točno? JASON Hirschhorna: Great vprašanje. Grem nazaj v sledovih malo. Ali vsi - bodite iskreni tukaj. Vem, da sem vas prosim, da zvišate roko pred svojimi vrstniki. Vendar obstajajo ljudje, ki menijo, ne more sprijazniti s kupa in kup in bi rad šel čez, da in kaj s tistimi pomeni? Dvignite roko, če - OK. Hvala vam. Tako smo šli čez dimnik in kup zelo hitro in potem premakniti v odgovoru na vaše vprašanje. Torej, če potegnemo ven škatlo za zastopanje spomin na vašem računalniku, kaj so nekateri stvari, ki gredo v to polje? Main. Glavna naloga. Kje glavni iti? Študent: [neslišno]. JASON Hirschhorna: Torej bomo dal glavni tukaj. Kaj se dogaja v tej škatli? Študent: Funkcije, ki jih zahtevajo. JASON Hirschhorna: Naloge , ki ga imenujemo. In kam gredo? ŠTUDENT: V dimnika. JASON Hirschhorna: So šel v sklad. Torej bomo to imenujemo stvar tukaj dimnika. In do vrha imamo kup. Torej spomin ni predal, tako kot to. Vendar je dejansko precej podobni. To se dogaja, da je veliko polj več in več, odvisno od tega, kako velik je vaš računalnik ali kako velik je vaš spomin. Na quote-konec citata "od spodaj" je žetonov. In obstaja več stvari da gredo na stack. In tiste, odvisno od funkcije imaš v kodi. Vedno imaš eno funkcijo v vašem Koda se imenuje glavni, tako da je vedno odsek dol v kup posvečen glavni. Ti oddelki na kupu Imenujejo se konzoli okvirji. Ko pokličete drugo funkcijo, pravijo glavni poziva binarno funkcijo iskanja, damo še en okvir na sklad. Natančneje, bomo darovati kos spomin na našega računalnik za shranjevanje binarno iskanje je lokalna spremenljivke in teči binarno iskanje kode. Zato pravimo binarno iskanje. V ta kos pomnilnika, greva za shranjevanje svojih lokalnih spremenljivk. Mi bomo za shranjevanje svojih printf klice. Karkoli se zgodi, da je funkcija bodo shranjene tam. Binarno iskanje se bo izvesti. To bo za dokončanje izvedbe. Kaj je beseda v C, ki pomeni da Funkcija mora dokončati svojo usmrtitev? Študent: Return. JASON Hirschhorna: Vrnitev. Torej, ko vidite izjavo vračanja, konci funkcija ko udari da. Torej binarno iskanje bo udaril svojo vrnitev. Ta del pomnilnika bo bistveno se sprostil. In glavna bom šel nazaj do izvedbe. Torej, glavna bo premor, kjerkoli je bil, klic binarno iskanje, dobim povratno vrednost, in nadaljujejo izvajanje. Ta kup okvir bodo izginile. Če pravimo rekurzivno funkcijo, ki je funkcija, ki sebe imenuje več in več, bomo morda dobili - rekli, da smo naredil binarno iskanje rekurzivno. Morda bomo dobili binarno iskalno različico eno, dvojiško iskalno dva, binarno iskanje tri, štiri binarno iskanje, dvojiško iskalno pet. In potem je to končno binarno iskanje pet bo hit osnovnem scenariju in kup Okvirji bo šel nazaj in naprej zapiranje dokler se ne vrnemo na glavno. Lahko gremo čez rekurzije v bit. Ampak vse to se pravi, če ste kliče več funkcij hkrati, tam bo večkratni dimnika okvirji na kupu. Kopice, na drugi strani, se tu ni za funkcije, ni za lokalne spremenljivke. To je za dinamično dodeljen spremenljivke. Torej, to so spremenljivke, ki jih je mogoče inicializiran bodisi glavna ali funkcijo, glavne klice. Kjerkoli v kodi, ki jih lahko inicializirana. In za inicializacijo dinamično dodeljena spremenljiva. Kakšno funkcijo v C bomo uporabili? Študent: malloc. JASON Hirschhorna: malloc. Pokličete malloc. Boste dobili prostor v pomnilniku. In ta prostor spomina je na kup. In ta prostor spomina ostane tam, dokler ne pokličeš brezplačno. Tako dinamično dodeljenih spremenljivk v Kopica bo obstajala, dokler vas želimo, da obstajajo, in da ne bodo oditi, dokler ne boste izrecno povej jim, da gredo stran. Lahko jih ustvarili v eno funkcijo. Sveženj Ta funkcija je Okvir bodo izginile. Vendar bo, da spremenljivka še vedno obstajajo v kup, dokler se sprostil, lahko s funkcijo, ki se imenuje binarno iskanje ali karkoli. Torej, ti kup spremenljivke ostanejo tam tako dolgo, kot želite, ostanejo tam. In se dajo tukaj. In potem naslednjič dobi tam čaka. Vodijo pridobivanje izpolniti, in jih ostani tam, dokler ne pokličeš brezplačno. In v bistvu kup in kup, dobili na vprašanje Marcus je, raste proti drugemu. In če naletite na drug na drugega, ki ste jih uporablja ves spomin v vašem računalnik, in vaš program bo nehal ker nimate nobenih več pomnilnika levo uporabo. Med njimi obstajajo morebitne druge stvari. Ampak za obseg tega predmeta, vas vam ni treba skrbeti za to. Tako, da je bil odgovor na vaše vprašanje. Ne skrbi. Toda to je bil dolg odgovor. Vse, kar morate vedeti je kup in kup bo - začnemo na dnu. Stack ne. Kopica tam gor. Rastejo bližje drug drugemu. In če se dotakneš, da je to problem. Ti je zmanjkalo pomnilnika. Toda tudi poleg vedo, kjer so, kateri je shranjena v obeh kup in kup. Curtis. CURTIS: Ko trčijo, je, da prekoračitev? JASON Hirschhorna: Ko trčijo, to ni prekoračitev. Prekoračitev je drugačna območje da lahko gremo naprej, če želite. OK, se bomo vrnili k da bit. ŠTUDENT: Kaj je beseda imenuje ko so zadeti medsebojno kup in kup? JASON Hirschhorna: Za zdaj ne skrbi. Samo vem - Bom odgovoriti na to vprašanje po pouku. Če naletite na drug drugega, je zmanjkalo pomnilnika, saj ni več Prostor tam. ŠTUDENT: Žal mi je, kaj je napaka seg? JASON Hirschhorna: Segment Napaka se lahko zahteva - to je odvisno, zakaj se imenuje SEG krivda je. Včasih, vaš prekoračitev, bo pravijo seg napake kot napake. ŠTUDENT: Kaj pa Dereferenciranje null spremenljivka? Je to napaka seg? JASON Hirschhorna: Dereferenciranje null kazalec - OK, tako da, če imate kazalec, ki ste nastavi na nič, kazalci, odpoklic, Trgovina naslovi pomnilnika njihove vrednosti. In null kazalec je v bistvu shranjevanje 0, 0-th obravnavati v tej spremenljivki. Torej 0x, 0, 0, 0, 0, et cetera. Da 0-th naslov v pomnilniku, ki ni v naši sliki, ki je tam gor nekje, ki je rezerviran za računalnik. Ne smemo dotakniti. Torej, če vaš program je izvršiteljica, če Nekaj ​​je poskušal iti v spomin naslov 0, ve, da da je prazna vrednost. To ve nič ne bi smelo biti. Torej, če ste poskusili uporabiti nekaj tam in zdravljenje nekaj podobnega tam ali Poskuša iti na to lokacijo, si bo dobil SEG napako ali napako. Ne da odgovoriti na vaše vprašanje? In zdaj bomo šli nazaj stack overflow. Stvari na kupu, kot ste vi videl, in - dajmo potegniti v bližini s kupom okvirja. Lahko vsi videli to? Torej imamo sveženj okvir. Mi smo varčevanje niz v kot lokalna spremenljivka v tej funkciji. Tako pravijo naši matrika ima pet mest. Vseh pet tistih, ki bodo shranjeni V tem okviru dimnika. Če začnemo pisati preko mejá tem polju - tako da, če začnemo pisati v, recimo, da je 0. Tisti, ki so pet indeksi naše matrike. Če začnemo pisati v indeks 5, ki ne bomo imeli, ko bomo imeli matrika velikosti 5, smo začeli pisati v indeks 6, 7, 8, 9, bomo lahko dobili Stack Overflow napake. Na splošno to ni - boste verjetno dobili v težave če greš čez po enega. Ampak na splošno, boste dobili v Najbolj težave, če greš čez z veliko in si šel tako daleč kot, da napišete v povratni naslov, ki funkcijo, ki se nahaja na Spodnji del dimnika okvirja. Ker je, kajne? Si - v - žal. Ne ", ker je prav." V dimnika okvirja, imate vaše lokalne spremenljivke. Na dnu dimnika Okvir je naslov povratka. To je, če je funkcija gre, ko bo konec. In če si prepiše tega vrnitev naslov, potem ko je ta kup okvir, Ko greste skozi dimnik kompozicije in izvršitve vsako vrstico, ste šli na vašo novo povratni naslov da je tam napisano, namesto dejansko ena. In tako smo videli nekatere kršitve varnostnih se lahko zgodi z računalniki. Torej prekoračitev, skratka, je, ko si prepisati del v plasteh boš smel uporabljati, lokalna spremenljivka ste smel uporabljati, in še posebej, ko začnete prepisovanje pomembne stvari, kot so vrne naslov. In to je, če boste dobili napako. Ali morda celo lahko začnete celo pisanje v - pravijo, binarno iskanje je tik nad glavno. Če ste prepisali veliko, vam Lahko bi napisali v glavni. Ampak na splošno, boste dobili napako pred potem, ker računalnik ve delaš nekaj, kar se ne sme početje. Ja. ŠTUDENT: Kaj je razlika med prekoračitev in buffer overflow? JASON Hirschhorna: Buffer overflow je bolj generično vrsta kaj sem pravkar opisal. Študent: Torej prekoračitev je Primer buffer overflow. JASON Hirschhorna: Točno tako. To je matrika lahko mislimo kot buffer, prostor za stvari, ki gredo noter To je kup buffer overflow. Lahko bi imeli kup buffer overflow. Če je bil pufer, ki je pogosto je matrika kup, in smo prepisali tiste meje, potem bi imajo kup buffer overflow. In presega obseg tega predmeta, oni odkrijejo malo drugače. Prevajalnik ima poseben načini odkrivanja vsakega. Ampak buffer overflow je bolj generično tip, kar sem opisal, ki je bil kup buffer overflow. Ali, da je odgovor na vaše vprašanje? Sladko. Je bilo kaj druga vprašanja, povezana zlog ali kup? Ja. Študent: Vem, da imaš do brezplačnih godala ker oni v kup in ne želite, da pušča spomin. Toda, ali imate do brezplačne globalne spremenljivke in takšne stvari? Ali pa se samodejno sprostil? JASON Hirschhorna: Dobro vprašanje. Torej, v CS50.H, smo ustvarili to stvar za vas, ki se imenuje niz. Niz je res kaj? Študent: Char zvezda. JASON Hirschhorna: char zvezda, kazalec na znak, kazalec nabor znakov. To je tisto, niz. Zato ga moramo osvoboditi, saj getstring, ki smo jo uporabili veliko - Ime niza enaka getstring - da mallocs za nas nekaj pomnilnika na Kopica in nato vrne kazalec Prvi znak, da niz, char zvezda. Torej navidezno, če niso bili brezplačno pisanje na katerokoli izmed vaših strun ki ste jih do sedaj imenovani, imate se pušča nekaj pomnilnika. Seveda nismo govorili to, da nihče ni prišel v težave, za to početje. Ampak gredo naprej, ja. Ko pokličete getstring, si mallocing nekaj prostora na kup. In če ne boste pozneje pokličete brezplačno, da Niz, ki ste jih pomnilnika. Da odgovorim na vaše vprašanje? Ja Študent: Torej za to, bomo uporabili brezplačno tik pred zameno? Tako kot v obsegu, mislim, če rečemo, kot so, int main, v Obseg kode, ki je v tistih, zaviti oklepaji, tik pred - veš, kje boš ponavadi dajo donos. Ali si dal proste pred tem? JASON Hirschhorna: Torej si lahko brezplačno kamorkoli želite dati brezplačno. Ker so ti dinamično dodeli spremenljivke, saj jih lahko živijo izven obsega zlasti funkcija, če pokličete v malloc ločena funkcija, na primer, getstring, lahko pokličete brezplačno v glavnem. Vam ni treba, da ga pokličete v posebne funkcije kjer se malloc klical. Vendar si morate, da ga pokličete pred glavnimi donosov. In res je odvisno. To je odvisno od tega, zakaj ste malloced da Prostor na prvem mestu. Nekateri ljudje bodo pokličite sprostiti precej hitro. Nekateri ljudje ne bodo brezplačno poklicati, dokler konec njihovega programa. In jih bomo šli skozi in brez vsega. To je odvisno od tega, zakaj ste poklicali malloc. Študent: In kaj bi rekli, če si klical uporabe getstring? Ti bi rekel, prost kaj? JASON Hirschhorna: Torej sintaksa brezplačno je preprosto prost, odprta paren, blizu paren in ime kazalca. Torej, če ste napisali String ime je enako getstring, si dal ime tukaj. To je ime kazalca. In da ve, da se sprostite, da spomin. Študent: Torej, ko se sprosti ta pomnilnik, kazalec še vedno kaže na to mesto v spominu? Ali je kazalec tudi izprazni naslov, ki pa opozarja, da. JASON Hirschhorna: Moramo poskusiti to. Morali bi kodo, da. Vrnimo se, ko pridemo do kodiranje, in kaj je oznaka, ki. In če hočeš, da ugotovimo, odgovor na to, da lahko tudi kodo, ki v tem času. Ampak to je veliko vprašanje. ŠTUDENT: Ali je mogoče, da brez nekaj prekmalu? Tako da boste vedno potrebovali za vaš program, in si osvobodil, da pomnilniški prostor? JASON Hirschhorna: Da. Možno je, če si brez nekaj in potem si ga ponovno uporabiti, ne boste mogli naletite na napako. Ampak to je na vas, ker ste osvobojeni nekaj, nato pa jo kasneje poklical. Tako da je bila napaka programer je. Ampak ja. Lahko bi napisali, da je. Še kakšno vprašanje o - ja. Študent: Torej, če se moraš samo ga osvobodi na splošno, preden Program se konča, to pomeni, če Program se konča in ga ne osvobodi, da spomin je še vedno dodelijo? JASON Hirschhorna: Če je vaš program konča in ste pozabili, da sprostite nekaj, potem da spomin je bil dodeljen po vsej Življenjska doba vašega programa. Ko je vaš program v celoti zapre, da spomin ne bo tam ostanejo za vedno. Računalnik je dovolj pameten, da veš, da, ko je program zapre, morali znebiti vseh pomnilnika, ki je bila povezana s tem programom. Vendar pa obstajajo orodja, ki jih lahko vodijo o programu za odkrivanje, če pri Program končana, si pozabil sprostiti nekaj pomnilnika. In za vaš naslednji problem določiti, kjer boste uporabljali malloc in uporabo kazalci, ki jih bo tekmovanje v teku to programirate na vaš program, da vidim, če je ko glavni vrne, ste imeli nekaj stvari, ki so ostale unfreed. Tako da ne boš ostal malloced vedno v vašem računalniku. To bi bilo potratno, ker zelo hitro, računalniki bi zmanjkalo pomnilnika. Če pa traja do konca vašega programiranje in oni niso osvobodili in vaš Program izstopi, da je še vedno problem da bo to orodje, ki vam pomaga obravnavati. Študent: Je to Valgrind? JASON Hirschhorna: To je imenovano Valgrind. In boste - UČENEC: Ampak nimamo vedeti da je za kviz, čeprav? Mislim, da je govoril o malo v predavanju. JASON Hirschhorna: Torej Valgrind je ime tega orodja. Vemo, kaj počne, je Dovolj za kviz. Ampak ste se tega še ne uporabljajo na vašem problem določiti, ker nismo imeli problem niz, ki je izrecno obravnavana z malloc ali uporabljate malloc. Torej ste še ne uporabljajo Valgrind. Vendar ga boste uporabili prej prej. ŠTUDENT: Ali lahko ponovite kaj Valgrind je? JASON Hirschhorna: Oprostite? ŠTUDENT: Ali lahko ponovite, kaj Namen Valgring je? JASON Hirschhorna: Valgrind je ime - kot GDB vam pomaga debug vaš program, Valgrind vam pomaga ugotoviti, če Stvari niso bili osvobojeni če vaš program zapre. Tako boste jih predvajajo na programu. In tvoj program tiskalnika, in to bom rekel vaš program, imenovan malloc to veliko čas za to veliko bajtov, in si Samo imenujemo svobodni to večkrat. In tako ste pustili te veliko bajte ne da bi se sprostila. Ali bomo rekli, da ste osvobodili vse. Dobro delo. ŠTUDENT: OK. In se imenuje Valgring? JASON Hirschhorna: V-A-L-G-R-I-N-D. Študent: vprašanje o kazalca. Tako pravijo, da ste n zvezda x je enako nekaj. To je enako, ne glede na ste dajanje tam, je to tisto, kar se da v notranjosti kaj x kaľe, ali kazalec x? JASON Hirschhorna: Ali lahko Ponavljam vprašanje? Lahko ga pripravi, medtem ko je rekel? ŠTUDENT: V kvizu, pravzaprav, tisti, ki ste nam jih poslali, je bilo všeč, znak zvezda resnica enaka CS50 kamenje, kajne? Torej, ali to pomeni, da ta CS50 kamnine je kaj resnice kaže, da? JASON Hirschhorna: Torej govoriš o znakovnem zvezdo v nizu, kako to deluje? Ja. OK. Narišimo to tukaj. [SIDE POGOVOR] JASON Hirschhorna: Torej, ta spremenljivka se bo tipa char zvezdico. Kako velika je spremenljivka tipa CHAR zvezdo? Koliko zlogov? Študenti: Štiri. JASON Hirschhorna: To je štiri bajte. Koliko pravic je spremenljivka od tipa int zvezdo? Študenti: Štiri. JASON Hirschhorna: štiri bajte. Če je kazalec, potem je vedno štiri bajte, ker kazalci, njihove vrednost je pomnilniški naslov. In pomnilniške naslove na CS50 Naprava štiri bajte. Torej, ko pravimo getstring, ali ko smo recimo, stringname enaka, nato pa v narekovajih dal niz, vlagamo - dobro, da je malo drugačen. Naredili bomo getstring kot npr. Ali char zvezda nekaj enak niz. Žal mi je, daj mi primer da ste prebrali? Študent: char zvezda resnica enaka "CS50 skale" v narekovajih. JASON Hirschhorna: Torej, ta zvezda, to bomo to imenujemo spremenljivko x za naše splošne namene. Ustvarili smo spremenljivko x. To je tip char zvezda. To je kazalec na nizu znakov. Torej, tukaj - Torej je to, kako bi to delujejo v spominu. To bi shranili pomnilniški naslov. To bi shranjevanje pomnilniške naslov Prvi znak v matriki. In potem, ko ste sledili kazalec, bi si dobili prvi znak. In če berete to stvar kot niz, računalnik je pametna dovolj, da bi vedeli, preberite celotno stvar dokler ne pride do protiudarec 0. Ampak, če ste jo prebrali znak na čas, tako da ste ponavljanjem preko ta niz, potem boste pravkar prebral znak v času, dokler ne pridete do backslash 0. To morda ne bo odgovoriti na vaše vprašanje, čeprav. Študent: Ja, ampak še niste malloced, da je prostor Še ta kazalec. JASON Hirschhorna: Torej, nisem čisto prepričan, kaj gledaš, zato, ker mi ni uspelo, da je kviz. , Ki naj bi bila v pomoč Sredstva iz drugega TF. Če ustvarjate niz na kup ali kot lokalno spremenljivko, bo samo se niz dajatev namesto splošno char zvezda kaže na še en niz. Ampak jaz ne vem. To bi lahko kazalec na drugo niz na sklad, kot tudi. Ja. Študent: Vem, da morate dodeliti pomnilnika, če kazalec pridobivanje razglasila notranjosti druge funkcije. Ali morate narediti isto stvar, če je razglasi za notranjost glavni, ste ga uporabljate znotraj main? JASON Hirschhorna: Torej, ja. Lahko razglasi kazalec na katerokoli pomnilniški naslov v pomnilniku. To je lahko pomnilniški naslov v lokalni spremenljivka, čeprav velikokrat, ljudje ne prijavijo pomnilniških naslovov lokalnih spremenljivk, ker gredo stran enkrat, da funkcija vrne, kar Zato smo na splošno malloc stvari. Ampak ja, lahko razglasi kazalec drugi lokalni spremenljivko. To je samo na splošno ni bilo storjeno. Ampak jaz lahko pogledam specifično stvar, po pouku. Ja. UČENEC: Mislim, da je to nekako kaj se je vprašal. To se zdi čudno, da se inicializacija kazalec ne kot naslov, ampak kot tisto, Zdi se, kot vrednoto. Zdi se, kot CS50 je tisto, kar je notri stvar, ki je poudaril, da in ne dejanski naslov, kajne? JASON Hirschhorna: Tako da je V nasprotnem primeru, čeprav. To ni tisto, kar se dogaja. Ko ste razglasi char zvezdo, to je pomnilniški naslov. Kazalci so vsi naslovi pomnilnika kaže na nekaj drugega. Da je nekaj drugega bi lahko na stack, skoraj vedno pa je na Kopica na način, bomo videli to uporablja. Ampak stringname enaka dvojni narekovaj "Getstring", lahko vidimo, da mi Lahko pogledam skozi to in kodo, da. getstring niz se ne shrani v da je spremenljivka, ali karkoli niz Ime se ne shranjuje, da spremenljivka, ker to ni, kako kazalci delo. Ali to smiselno? Študent: Ja. JASON Hirschhorna: OK. Upajmo, da ni bilo zavajajoče za vsakogar. Ampak, če je bilo, smo lahko ogledate še enkrat v nekaj, ker smo dejansko dogaja kodo nekaj, kar bo, upajmo delo z nizi in vam pomaga počutijo bolj zadovoljni z njimi. Katera koli druga vprašanja, povezana s temi teme ali druge teme, ki Jaz bom dal nazaj gor? In - prav zdaj. Da, Alden. ALDEN: Torej je to povsem nepovezani, lahko pa gremo kar Res hitro, kar moramo vedeti o razliki med 32 in 64-bitni stroj? JASON Hirschhorna: Da. Torej, 32 bitov, je, koliko bajtov? ALDEN: To je štiri bajte. JASON Hirschhorna: To je štiri bajte. In 64 bitov, je, koliko bajtov? Študent: Eight. JASON Hirschhorna: Osem bajtov. Torej še enkrat, osem bitov je en bajt. Vaš CS50 Aparat je 32-bitni stroj. Torej pomnilniške naslove dolga štiri bajte. Obstajajo 2 do 32 pomnilniške naslove. 0 do 2 do 32 minus 1. In nisem pozitiven, ampak to je Verjetno obseg kaj morate vedo za 32-bitno stroj, da spomin naslovi so, spet, štiri bajte, in to je najvišji znesek pomnilniških naslovov. Tudi tipi podatkov - to je lahko nekaj tako dobro, da je vredno omeniti. Velikost podatkovni tip odvisen Stroj, s katerim delate. Torej char, sam znak, je, kako veliko bajtov na naši CS50 aparata? En bajt. In to je pravzaprav en bajt kot tudi na 64-bitnih računalnikih. In večina podatkovnih tipov so enako število bajtov na obeh strojih. Vendar bodo nekatere vrste podatkov je drugačen na obeh strojih. Tako da bi bilo potencialno Edina stvar, kar morate vedeti. Toda tudi to, mislim, presegajo meje - Jaz sem skoraj pozitivno, če pogledaš nazaj V starih kvizi, pa pravi, da za kodiranje težave, ki jo uporabljate 32-bitni stroj. Vendar pa obstajajo, da gredo skupaj s tistim iz Če vas zanima, obstaja vrste podatkov, ki so enaki velikost na vseh strojih. Če ste videli nekaj podobnega uint32_t, lahko ali ga lahko ne bi videl. To je vrsta podatkov. To je rekel, je 32 bitov ne glede na kaj je to stroj naprej. Torej, ko ljudje pišejo prenosni Koda, ki jih verjetno ne bo uporabil Ints. Ti bom raje uporabljajo te druge podatke tipi, ki vedo bo enako velikost za vsak posamezen stroj. Madhu. Madhu: Imel sem vprašanje o Proces urejanje. Torej, če pišete program, ki uporablja Knjižnica kot CS50 ali kaj podobnega tako, vem, da se knjižnica mora na neki točki, je zbrani in povezani prijavite Ampak koliko se to zgodi med kompilacija vašega programa? Kateri del tega procesa knjižnice se pojavi, ko ste sestavljanje svoj program? JASON Hirschhorna: Torej gremo preko splošno koraki tega procesa. Napišete. C datoteko. V vašem c. Datoteko, # include vaš Glava knjižnice, na primer, cs50.h. Kaj počne oster vključuje linija storiti, da vaš program? Akchar. AKCHAR: Dodaja tudi prototipe funkcije iz glave datoteke v knjižnicah. JASON Hirschhorna: Točno tako. Dodaja, tiste funkcijske prototipe s svojo kodo. Torej, ko je koda, ki se zbirajo v zgodnjih fazah, prevajalnik ve da te funkcije res obstaja, in da nekje so bili opredeljeni. . H datoteke ne vsebujejo opredelitve teh funkcij ali kako dejansko delajo. Cs50.h samo vključuje nekaj takega, ki pravi, getstring je prava stvar, ki se lahko zgodi. In standardio.h pravi printf je prava stvar, ki se lahko zgodi. Torej vaša c jezik s tem. Header Datoteka gets spremenil v nekaj strojno berljive kode, ki sčasoma gets spremenil v binarno koda, 0 in 1 je. In to je številka, ki na koncu gets usmrtili. -L CS50 linije - npr Ko pišete Jek - in potem boste vključili-l CS50, vnesete da noter In boste videli, da. Ko pišete, da boste glej, da line up here. In bomo videli, da je v sekundi, ko smo kodo ali kasneje, ko smo kodo. Ampak to-l CS50 linija naredi nekaj nekoliko drugačna kot na # include cs50.h. Kaj to-l CS50 linija storiti? Avi? AVI: Hočem reči, da gre za povezavo Knjižnica za funkcijo poklical, tako kot Õ. datotek. JASON Hirschhorna: Tako zelo blizu, če ne opazite-on. -L CS50 meni binarno datoteko in jo združi z binarno datoteko. Torej cs50.h, nima smisla obračanja cs50.h iz jezika C za binarno vsak single čas, ki je uporabljena. To bi bilo neumno, saj to bi zapravljajo veliko časa. Tako je bilo že zbirajo in se spremenila v izvršljiv. Zdaj pa se bo združila z vašo datoteko na koncu. Torej ti 1 in 0 je tekoč da se združijo z vašimi tisti in 0 je konec. Torej, zdaj boste dejansko imajo dejansko 1 in 0 je, da določite, kako getstring, na primer, deluje, ali kako printf, na primer, deluje. In za več informacij, tam je kratke prevajalniki, da Nate daje, da morate preveriti, da gre skozi te korake. Ampak - ja. ŠTUDENT: Ali so vedno vo slik. ko si v obliki knjižnice, pripravljeni, da bi združili, povezana - kot oni so v binarno kodo? JASON Hirschhorna: OK. Kaj - ŠTUDENT: Ali je to vedno velja za knjižnice, ko jih povezati? JASON Hirschhorna: Da. Torej je. Govorite datoteke, ki bodo Stroj kodo, ki bo tudi Grobni za vas. Vam ni treba skrbeti glede tega. Ampak na splošno, ja, jih bomo biti. o files pripravljena iti. Študent: Torej, ko ladja knjižnica, ti samo ladja . h in. o? Vi ne ladja. C ali. S. JASON Hirschhorna: Torej - in to je v tem kratkem, kot tudi, če Zdi se te informacije, ki prihajajo malo hitro. Ampak kratko o prevajalniki govori o tem, kot tudi. Kdaj si knjižnico, če ladja . h, datoteka glave, tisti, Funkcija prototipov in 1'S in 0-jev, to je vse, kar morate dati. Vam ni treba dati, kako Funkcija deluje,. c datoteka. Ker mesto odvzema ali točka API, točka na tej SPL, prenosni knjižnica Stanford, je za vas ne skrbi, kako novo GRect deluje, ali kako premakniti del, ali kako dodati del. Vse, kar morate vedeti, je, da dodatek je funkcija, ki jo lahko uporabiti, in to počne. Tako da vam res ni treba vedeti, kako to je napisana v C. morate samo Veste, tukaj so funkcije, kar so narediti, in tukaj so je 1 in 0 če res želite, da jih uporabljajo. Cool. Še kakšno vprašanje o prevajalniki ali druge teme na forumu? Študent: Imam vprašanje izvajanje rekurzivne funkcije. Vprašanje o rekurzije. Imel sem občutek, da bi prišel gor. Torej, kaj je hitro šel skozi rekurzija s specifično Na primer, faktorski funkcija. Ker je to primer, ki pogosto pride ali se uporablja za ponazoritev rekurzijo. Torej "4!" se glasi 4. fakulteto. In kaj 4. fakulteto pomeni? Kaj naj bi to naredil? Kako ste izračunali 4 fakulteto? 4 krat 3 krat 2-krat 1. Torej še en način, da napišete 4 fakulteto je to pisanje. 4-krat 3 fakulteto. Ker 3 faktorski je 3 krat 2-krat 1. Torej 4-krat 3 faktorski 4 krat 3 krat 2-krat 1. To je razlog, zakaj je faktorjev velika Kandidat za rekurzije, saj je jasno, da je nekaj, kar zgodi, znova in znova in znova na Manjše število stvari, dokler pridete do konca. Ko pridete 1, 1 faktorski 1. Ne moreš iti še dlje. 0 faktorski je prav tako opredeljena kot 1. Torej, ko prideš na 1 ali 0, da si na koncu, in lahko začetek grem nazaj gor. Torej, če smo želeli napisati rekurzivno Funkcija za izračun fakultete, bomo napisali nekaj psevdokoda za to zdaj. Preden smo napisali, da psevdokoda - Bom dal vidva nekaj minut pisati kodo psevdo ali pa samo mislim, o tem - obstajata dve stvari na vsakih rekurzivna funkcija potrebuje. Kaj sta ti dve stvari? JACK: To je sama poklicala. JASON Hirschhorna: Noah? Oh, Jack. Pojdi naprej. JACK: To je sama poklicala. JASON Hirschhorna: Torej rekurzivna Funkcija potrebuje rekurzivni klic, poziv k sebi. To je ena. In kaj je druga stvar? JACK: osnovna. JASON Hirschhorna: osnovna. Osnova je primer, tukaj je, ko smo se ustavili. Tako postane vaš funkcijo imenovan. Osnovna na prvem mestu. Hočeš vedeti, če ste na koncu. In če niste na koncu, vaše rekurzivni klic. In greš skozi to funkcijo ponovno še enkrat preverite svoj osnovnem scenariju. Če niste končni, naredite en rekurzivni klic, et cetera, et cetera. Zato rekurzivne funkcije vedno Potrebujemo te osnovne primere in tiste, rekurzivni klici. Če nimate rekurzivni klic, da ne bi rekurzivno funkcijo. Če niste imeli osnovno zadevo, ti bi šel na veke ne bi bilo konec. In osnovna vedno na prvem mestu, saj boste vedno želeli preveriti če ste na koncu prvi. Torej, preden bomo narediti nekaj psevdokoda, zakaj ne boste vzeli trenutek za razmislek o kako rekurzivna funkcija faktorjev bi napisal? Prav tako, kar počnete, pisanje ven na list papirja je kaj boste morali storite na kviz jutri. Torej je verjetno dobra praksa, da bi Prepričajte koda pišete navzdol na list papirja - ali lahko to storite. Saj veš, kje so podpičja. Se spomnite sintakso. Ker si ne bi mogli imeti prevajalnik povedal, da si naredil napako. Tudi v tej smeri, jutri, ko ti so kodiranje težave, če se rushed za čas, ali če ste zelo zmedeni glede tega, kako si naj napisati posebno stvar v C, je bi vas behoove, da napišete psevdo-kodo ali pisati komentarje v kot dobro. Zato, ker je delno kredit za Veliko vprašanj o kvizu. Torej si lahko planila, ali ste lahko samo zmeden. Pisanje v komentarjih ali psevdo-kodo so pogosto načini, ki jih lahko dobite delni kredit. Torej, ne pustite nekaj blank na kvizu. Tam ni kazni za dajanje stvari noter V bistvu, dajanje v psevdo-kodo ali Pripombe bo pomagal grader ugotovimo, če ste dejansko vedeli, kaj govoriš, in morda nagrado ste nekateri delni kredit za to. Tudi v tej smeri, napišite jasno. Če ne moremo zares tisto, kar pišete, ne bomo, da vas pokliče opolnoči jutri na sliki izvedeti, kaj si napisal. Mi smo le, da bo vzlet točk. Napišite jasno, da bomo lahko slišali, ali bolje, smo lahko prebrali, kaj si napisal. In če je pravi dva stavka, Ne napisati odstavek. Sledite navodilom. Jasno zapisali. In pisati v teh pripombah ali psevdokoda za vprašanja, ki bi lahko Nagrada delni kredit. OK, gremo na fakulteto. Torej imamo funkcijo fakulteto. Če bi dejansko napisati to v C, kaj moram postaviti pred imenom funkcije? Tip donos, ki je v ta primera, ga bomo dal int. In nato znotraj zavitih oklepajih, je kaj se dogaja znotraj zavitih oklepajih za funkcija? ŠTUDENTI: tip Argument. JASON Hirschhorna: Njegove trditve. Torej faktorski bo verjetno sprejeti argument. To bo verjetno trajalo le en argument. In bomo rekli, da bo trajalo število imenovano x. In spet, pri pisanju prototip funkcija ali pisanje funkcijo v kodi, preden jo opredeljuje, vas napišite podatkovni tip in ime da spremenljivka samo za to funkcijo. Torej, lahko prenese nekaj več v to funkcijo, se bo treba v nadaljnjem besedilu x interno. Imamo faktorsko funkcijo. Potrebujemo dve stvari, osnovno zadevo in rekurzivni klic. Kakšna je osnovna za fakulteto? Nekdo, ki ga je napisal, in ki je ni še govorijo, kar je osnova velja za fakulteto? Študent: Če je n manj kot 2, vrnite 1. JASON Hirschhorna: Če je n Manj kot 2, vrnite 1. To mi je všeč, ker je skrbi za 0 in 1. Torej bomo naredili x <2, vrnite 1. Če se bomo opravili 0, če bomo dobili opravili 1, bo to funkcijo takoj vrniti 1. Če se bomo opravili nekaj veliko večji ali enako 2, da bomo imamo rekurzivni klic. In tako, kako je, da bo delovalo? Lahko nekdo drug, ki je delal na tem ki še ni govoril mi rekurzivni klic, za to funkcijo v psevdokoda? Če se bomo opravili v številnih x in to je večje od 2, kar Ne želimo storiti? Prav tako so na primer napisano na strani, da bi vam namignem. ŠTUDENT: Call x-krat Fakulteta x minus 1? JASON Hirschhorna: Točno tako prav. Bomo vrnili x-krat Fakulteta x minus 1. In da, čeprav sem zapisal, v bistvu, kar si rekel v angleščini, to fakulteto funkcija se bo spet poklical. To bo izvesti na x minus 1. To bo vrnil z nekaj celo število, in potem bo to pomnoži ta dva skupaj, in da vrednost bo vrnejo ne glede na to imenoval faktorski funkcijo, ki bi lahko še en primerek To faktorski funkcija. Tako, da je primer rekurzivnih funkcijo, zelo preprost rekurzivna funkcija. Vendar pa bo večina od njih je, kot je ta. Če bi radi dober rekurzivno izziv za kviz, poskusite kodiranje binarno iskanje rekurzivno. Ker če si binarno iskanje Problem nastavite tri, verjetno je to storila ponavljajočim v while zanko. Vendar se lahko tudi pisna rekurzivno. Boste morali napisati sami ločena funkcija, ki traja nekaj različni argumenti v ukazni vrstici - ali ne argumenti v ukazni vrstici nekaj Različne samo redni argumenti. Ampak bi lahko napisali binarno iskanje rekurzivno kot dobro. Študent: Tako bi si tudi napisal, namesto x minus 1, ki jih Lahko bi tudi napisal x minus minus, ali pa bi morali napisal minus minus x. Lahko samo pojasni, res hitro, zakaj tistih, ki bi bili različni stvari, všeč, kaj je razlika med x minus minus in minus minus x? JASON Hirschhorna: Ne, nisem bo šel v to. Vendar bom govoril s tabo o tem po razred. x minus minus minus minus x pojemanje x za 1. Vendar pa to malo drugače. Ampak jaz ne želim iti v to. Druga vprašanja o rekurzije ali je ta funkcija? To ni res, tudi psevdokoda. To je v bistvu koda v C napišete za to. Ok, katera koli druga vprašanja o temah tu gor? Ja. Študent: Imam hiter potek plavajočo vejico in natančnost. JASON Hirschhorna: Plavajoča točko in natančnost. Lahko nekdo res hitro dajte mi potek plavajočo vejico in natančnost? Ste vsi imeli to storiti za svoje problem določiti, tako da ste vsi seznanjeni z njo. Ali pa tudi ne vse vas. Kdorkoli? Daj mi začeli spot. Plavajočo vejico in natančnost. V čem je težava? Da. Victoria? VANESSA: Vanessa. JASON Hirschhorna: Vanessa. Žal mi je. VANESSA: Obstaja samo končno število številk, ki jo lahko predstavimo ker si na, v našem primer, 32-bitni sistem. Tako da boste nekako morali nadoknaditi nekaj številk. JASON Hirschhorna: Tako da je Točno tako. Obstaja le določena količina Številke, ki jih lahko zastopani. Če pomnožimo dva zelo veliko število, da bi se razlivala znesek prostorov imate za zastopanje celo število. Zato včasih uporabljamo dolgo dolgo namesto notr. Ki ima več prostorov. Da lahko imajo večje število. Plavajoči vejici ima opraviti z da, vendar pa ima opraviti z Dejstvo, da so decimalna števila Ne vedno predstavljal. Žal mi je. Dovolite mi dal to nazaj gor. Desetiško število 1,0, ni vedno predstavljal kot si ti, bi pričakovali, 1,000000000. Včasih zastopali 1,000000001 ali ,999999999. To bo morda celo 89 vržena tam nekje. Torej ti decimalna številke niso predstavljal točno tako kot bi jo pričakujejo, da se jih zastopa. Torej, problem set - je bilo dva? - Problem nastavite dva, kjer smo obravnavali številk s plavajočo vejico, ko smo želeli jim predstavljajo točno to, kar smo želeli jim predstavljata število za penijev, ali število centov, smo jih pomnožite s 100.. Mi jih zaokroži. In potem smo se odrezali vse zadaj decimalno vejico. To je bilo, da se zagotovi, da bi jih dejansko enak točno tisto, kar smo želeli jim enako. Ker, ko ste vzeli nekaj, kar je float in ga pretvori v int, si odrezati vse, kar je v desno decimalne vejice. Ker obstaja nekaj plavajočo vejico nenatančnost, 100.000 morda zastopali 99,999999999. In če si odreže vse, da bi uspe takoj, boste dobili napačno številko. Ja. Študent: Imel sem vprašanje o ulivanju. Kaj, da se to zgodi v? Če želite narediti plovec, nosilci, 1 razdeljen za 10, počne 1 deljeno z 10, nato pa dobil 0,1, nato pa je v likvidna sredstva? JASON Hirschhorna: Če vam float 1 deljeno z 10 - Študent: Ja, in potem je enako - No, to bi bilo normalno imajo pa enako - Ja. Želite, da bi bilo float, kajne? JASON Hirschhorna: OK, tako da bomo uporabiti, da segue v kipec jasno odgovori na ta vprašanja s pomočjo kodiranja. Ker boste verjetno imeli veliko Te minute vprašanja in dober način za njihovo reševanje je s pomočjo kodiranja. Torej bomo kodo to prav zdaj, in potem smo šli nazaj in kodo na vprašanje, ki ste jih imeli. Torej prva linija - Ne bi ga napisali - tisto, kar je Prva stvar, ki smo želeli storiti, če smo odpreti novo datoteko v gedit? Študent: Vključi. JASON Hirschhorna: Vključi kaj? Študent: CS50 knjižnica. JASON Hirschhorna: OK. Kaj drugega bi morali vključiti? Mi smo šele tekoč, da preverite, kaj se zgodi ko odda nekaj likvidna sredstva. Ampak kaj moramo vključiti, če smo tekoč napisati program C? Študent: Standard I / O. JASON Hirschhorna: stdio.h. Mi dejansko ne potrebujemo, za to Program, cs50.h, čeprav je vedno koristno, da ga vključite. Ampak mi vedno potrebujejo stdio.h. UČENEC: Ko kodiranje v C? JASON Hirschhorna: Ko kodiranje v C. Zato sem ga shranite kot to. C datoteko. Sem dobil nekaj lepih barvanje sintakse. Napisal sem praznino znotraj glavnega. Kaj void pomeni? Študent: ne sprejme nobenega argumenti v ukazni vrstici. JASON Hirschhorna: odpade pomeni v tem Primer, ki je glavni ne odgovarja za kakršnokoli argumenti v ukazni vrstici. V drugih primerih, to pomeni funkcijo ne sprejme argumente v ukazni vrstici. Ali funkcija, če bi bil jaz pisati praznino main (void), da bi rekel, glavne jev ne vrača ničesar. Zato nična samo pomeni nič. Kaj bi napisali, če bi bil jaz sprejme argumente v ukazni vrstici? Študent: int lok c niz lok proti JASON Hirschhorna: int argc niz argv. Je to res? Študent: To je značil zvezda argv konzole. JASON Hirschhorna: Torej bi lahko napisali Niz argv nosilci ali char zvezda argv nosilci, vendar morate oklepaje. Ker argv je matrika nizov, spomnim se. To ni samo en niz. Torej niz argv je, tu je en niz se imenuje argv. String argv konzole je, tu je matrika nizov. Torej int argc niz argv konzole bi bilo nekaj, kar sem Verjetno bi napisali. Tako da boste želeli shraniti v celo število? Študent: Ja, celo število. Ali v likvidna sredstva. JASON Hirschhorna: V likvidna sredstva? Kot, float x enak 1 deljeno z 10. JASON Hirschhorna: OK. Kako natisniti plovec v printf? Kaj? Študent:% f. JASON Hirschhorna:% f. Kaj je število? d ali i. Kaj je niz? ŠTUDENT: s. JASON Hirschhorna: s. Kako dobim novo linijo? Študent: Leva poševnica n. JASON Hirschhorna: Kaj naj vrnem če je glavna teče pravilno? Študent: 0. Ali moram napisati to vrstico, čeprav? ŠTUDENT: Ne OK, ne bomo napisali, potem. Lahko vsi prebrali? Videti je malo majhen. Lahko vsi videli, ali bi morala Jaz bi bilo večji? Mislim, da za kamero, bomo je malo večji, čeprav. JASON Hirschhorna: Če želim to spremeniti C. Datoteke v izvršljiv, kaj napišem? ŠTUDENT: Naredite test. JASON Hirschhorna: Oprostite? ŠTUDENT: Naredite test. JASON Hirschhorna: Naredite test. Sva se pogovarjala ta vrstica prej. Jek. Kaj je Jek? Ime prevajalnik. Kaj je to meja? ŠTUDENT: vzpostavi za uporabo GDB. JASON Hirschhorna: Kompleti je pripravljen za uporabo GDB. Ta linija, kaj je to? Študent: Izvorna koda. JASON Hirschhorna: To je vir datoteke. c datoteka. Kaj ti dve vrstici storiti? Ali se ta dva ne vodi. Študent: It Imena ga preizkusiti. JASON Hirschhorna: Torej dash o pravi, Ime je nekaj drugače. In tukaj ste ga kliče preizkus. Če ne bi imel, da, kaj bi bilo ime tega? Študent: a.out. JASON Hirschhorna: a.out. Kaj to naredil? Študent: Povezave knjižnice matematike. JASON Hirschhorna: Povezuje v knjižnici matematike. Nismo vključili knjižnice matematike, vendar saj to je tako pogosti, oni ' napisana znamka vedno vključuje math knjižnica. In podobno, to vključuje Knjižnica CS50. OK, tako da, če smo seznam, imamo zdaj izvršljiv imenovan preskus. Za izvršbo, pišem test. Vidim, da je moja plavajočo vejico, kot je bilo pričakovano, je enak 0. Ali to - tako - Študent: Potem, če si dal float zdaj, kot jo odda kot likvidna sredstva - JASON Hirschhorna: Siva 1 plovca? Študent: Ne, oddanih v celoti stvar - ja. Če si to naredil, bi da bi bilo 0,1? JASON Hirschhorna: OK, tako da res hitro, 1 deljeno z 10, to so cela se deli. Torej, ko si delimo cela, oni 0, in ste za varčevanje, da je 0 na plovec, ker je poševnica Samo število delitev. Torej, zdaj smo obrača nekaj v likvidna sredstva. Poglejmo, kaj se zgodi. Naredili bomo test. Torej, zdaj smo videli, da to slash ni bilo število delitev, je bila plava točka delitve. Ker je eden od njegovih argumentov so bili oddani na likvidna sredstva. Torej, zdaj pa je rekel, to zdravljenje delitev, kot imamo opravka z plavajoče točke, ne pa cela. In tako smo dobili odgovor, smo pričakovali. Poglejmo, kaj se zgodi - oops. Če sem hotel natisniti več decimalke lise, kako sem lahko to naredil? Študent: Točka pika f, ali toliko decimalni mesti, kot želite. JASON Hirschhorna: Tako sem natisnete 10 decimalni mesti. In smo zdaj videli smo dobili nek čuden stvari. In da gre nazaj na vaše vprašanje O plavajočo vejico nenatančnost. Tam je čudna stvar shranjena tukaj. OK, ne da odgovoriti na vaše vprašanje? Kaj si želiš hitro kodo? Študent: Hotel sem videti, ali Ne, če si sprostil nekaj kazalec, ali je ta kazalec še vedno shranjeno v je naslov, kaj je bilo kaže, da prej. JASON Hirschhorna: OK, tako da je to naredil. Char zvezda PTR, to ustvari spremenljivko imenovano ptr tipa char zvezdico. Kako napišem malloc? Alden? ALDEN: Just malloc. Vendar pa mora biti velikost ter v tem primeru, mislim, da bi se kaže na znak. Torej bi bilo znak. JASON Hirschhorna: OK, tako da več generično, Inside - dajmo urediti. Inside malloc, hočeš številko bajtov na kup. Na splošno, kar smo videli, da smo delal je, da bomo malloc strune, na primer, ali nizi števil. Torej, če želimo, da cela 10 ali 10 znakov, 10, nam bo dala 10. In potem bi se velikost znakov dajejo nam, da je velikost znakov, ki V tem primeru je 1 bajt. Smo dobili 10 bajtov. Če smo bili, da napišete velikost int, da bi nam dal 40 bajtov. Torej, bolj na splošno, v notranjosti malloc je število bajtov, kar želite. V tem primeru smo dobili 1 bajt. , Ki se zdi kot čudno uporabe z malloc, ampak za naše namene smiselna. Torej, to je to. Bomo pokličite brezplačno. Znebimo njega in smo spet uporabili PTR. In kaj si želite preveriti? Študent: Želel sem preveriti, ali ali je bilo kaj v njem. JASON Hirschhorna: Torej, ali je poudaril, da ničesar? Študent: Ja, točno, ali je še vedno je imel naslov pomnilnika. JASON Hirschhorna: Torej hočeš preveriti vrednost PTR? Študent: Ja, točno. JASON Hirschhorna: Kaj pišem tukaj če želim preveriti vrednost točka - kaj je, Jordan je dejal, vrednost? Ali je kaj shranjeni v notranjosti PTR? Študent: pomnilniški naslov. JASON Hirschhorna: pomnilniški naslov. Torej, če napišem samo to, da bomo dajte mi vrednost PTR. In kako natisnete pomnilniški naslov? Kaj je niz format za pomnilniški naslov? Študent:% p. JASON Hirschhorna:% p. % S je niz. % P kazalca. Je to res? To je pravica. Torej PTR enaka - je še vedno nekaj v njej. To je verjetno bolj Zanimivo vprašanje. Kaj to linijo storiti? Študent: SEG napake. JASON Hirschhorna: Kaj? UČENEC: Mislim, da SEG napake. JASON Hirschhorna: Hm? UČENEC: Mislim, da bom SEG napako. JASON Hirschhorna: Torej, ta vrstica kode, zvezdic PTR, kaj ne pomeni, zvezda? Študent: Vsebina. JASON Hirschhorna: Ja. Iti, da bi dobili vsebino. Torej, to se dogaja, da gredo v spomin tam obravnavajo, in dajte mi to. Včasih sem% c tukaj, ker tam so tam shranjeni znakov. Tako smo šli na ta naslov smo Pravkar sem videl - ali pa bo verjetno Malce drugačna je to Tokrat smo teči program. Bomo, ampak gremo na ta naslov za katero vemo, še vedno obstaja in videti, kaj je tam. Torej ni SEG napake. To pa nam ni dal ničesar. To bi lahko dejansko nam Nekaj ​​smo samo ne more videti. In da gre nazaj na to idejo - in ne bomo dobili preveč v to, ker to je tistega, Obseg tega predmeta. Ampak smo se pogovarjali o prav tukaj, če bomo prekoračilo meje matrike, ki jih 1, morda ne bomo dobili v težave. Včasih, ko greš dol z 1, delaš nekaj narobe, in ti lahko spravil v težave. Vendar ne boste vedno dobili v težavah. To je odvisno, koliko slabih stvari, ki jih Ne, boš spravil v težave. Ki pa ne pomeni, površni s svojo kodo. Vendar pa je povedati, program ne bo Vedno nehal, tudi če greš nekam ne smeš iti. Dober primer za to je veliko ljudje v njihov problem nastaviti 3, ki je bilo 15, ni preverila mejá sveta. Torej si pogledal na levo, pogledal V redu, pogledal na vrhu, pogledal na dnu. Vendar pa ni preveril, da vidim, če vrh se je sploh dogajalo, da je na krovu. In veliko ljudi, ki je to storil, in izkazalo, da je v svoj program deloval odlično, ker če je bil svet shranjene v pomnilniku, če si šel eno nad njo ali pa je preverila, da spomin naslov, ni bilo nič še posebej grozno o tem, tako da vaš program ni bil dogaja, da kričati na vas. Vendar bi še vedno vzlet točk, če vam ni preveril, da zato, ker vam počeli nekaj, kar niso bili naj bi naredil, in bi lahko imeli gotten v težavah. Kvota je, čeprav, boste verjetno ni. Torej, to je pokazati, da, ja, lahko še vedno iti k njej. In ne bomo dobili v Težava je v tem primeru. Če bomo poskušali narediti prebrati Naslednjih 100 znakov, bi verjetno dobili v težavah. In si lahko kodo branje naslednje 100 znakov, če hočeš s tem nekateri nekako zanko. Ja. Študent: Ker smo bili dodeljeni, da Prostor dejanska vrednost, ne bi dejansko lahko videli ničesar. Ali bi morali poskusiti z določitvijo, da enako kot so C ali kaj podobnega? JASON Hirschhorna: Great vprašanje. Kako nastaviti te vrednosti - kakšna vrstica kode napišem na spletu sedem na to, kar si rekel? Študent: Star PTR enaka single quote c konec enojni narekovaj. JASON Hirschhorna: Tako, da je dajanje značaj, c, na tej lokaciji, ker še enkrat, da je zvezda pomeni iti tja. In kadar se uporablja na levi strani Operater naloga, ki je enaka podpisati, da ne bomo dobili, da Vrednost toliko, kot je to vrednost. Zdaj pa poglejmo, kaj se zgodi. Mi je dal nekaj, kar je in da je tam. Poklicali smo brezplačno. Nekatere stvari je verjetno zgodilo na kup. Torej ni več tam. Ampak še enkrat, ne bomo dobili v težavah, za tja. To delam v kodi za ponazoritev da Veliko teh Vprašanja, ki jih imate, oni res zanimivo odgovarja veliko časa. In oni so res dobra vprašanja. In jih lahko ugotovimo na sami, če, na primer, nismo v oddelku. Ja. Študent: Ker si ne pošilja kazalec kjerkoli, si morate uporabljati malloc? JASON Hirschhorna: Torej, ta sega na začetno vprašanje. [? ?] Je to samo lokalna spremenljivka? Malloc tukaj ni tako prepričljiv. Uporaba malloc tukaj ni da je prepričljiv, ker je samo lokalna spremenljivka. Študent: Torej bi lahko naredil char zvezda ptr enaka zdravo? JASON Hirschhorna: Oh. Torej se bomo zdaj dobili nazaj na začetno vprašanje. Mislim, da niso bili izpolnjeni z mojim odgovorom. OK? Všeč? Študent: Ja. Čakati. JASON Hirschhorna: In kje želiš izpisati? Torej bomo izpisal niz takega? Študent: Zanimivo. JASON Hirschhorna: Torej, ta pravi, da je to Argument ima vrsto značaja. Torej mora biti to znak. Študent: Samo meni prvo. JASON Hirschhorna: Torej, ta je tisto, kar sem rekel prej. Kot sem rekel, to ni shranjevanje Niz notranjosti spremenljivo kazalca. To je shranjevanje - Študent: prva vrednost niza. JASON Hirschhorna: naslov prva vrednost niza. Če smo bili, da natisnete to, da smo pridobivanje vrednosti znotraj kazalca. In bomo videli, da je res, pomnilniški naslov. Ali to smiselno? Žal mi je. Čakaj, ne da odgovoriti na vaše Vprašanje, čeprav? Študent: Ja. JASON Hirschhorna: ta vrstica kode je kreiranje niza in nato še spremenljivka kazalec, ki je obrnjena v tem nizu, ki matrika. Ja. Študent: Torej, če smo šli en spomin nadaljnjo obravnavo, bi dobili h? Je bil shranjen kot niz? JASON Hirschhorna: Kot smo naredili - tako je to koristno za narediti. To je točka aritmetika, ki vam fantje ni videl in ga je treba relativno všeč. To je podobno pisanju - če bi napisati to vrstico kode, Videli smo matrično zapis prej. To naj bi nam drugega vrednost v tem polju, h. Če bomo to storili, bi to lahko tudi us druga vrednost v tej matriki. Saj ne gre za spomin naslov prvega stvar, vendar pomnilniški naslov stvar enega več. In potem operater zvezda dereferences se da kazalec. In spet, poglejmo. Spet smo dobili h. ŠTUDENT: Kaj točno počne dereference pomeni? JASON Hirschhorna: dereference je fancy beseda za iti. Pojdi na to in dobili tisto, kar je tam je dereference kazalca. To je samo fancy beseda za to. Študent: Če bi želeli natisniti cel niz, bi lahko narediti ampersand kazalec? JASON Hirschhorna: OK, smo bo tukaj premor. Se bomo, da konča tukaj. Ampersand vam daje naslov mesto, tako da, ko boste to storili 'znak za spremenljivka, saj vam daje naslov kjer je shranjena, da spremenljivka. Ampersand kazalec ste, da bo dala naslov PTR kjer je PTR v pomnilniku. Nismo šli na s tem npr. Lahko ugotovimo, ti stvari na svoje. Ampak spet, to morda celo meji bit tistega, kar morate vedeti za Obseg tega vmesnega - ali je ta kviz, ne. Žal mi je. Se bomo naprej, ker jaz bi rad naredil eno kodiranje problem pred časom je gor. In bomo kodo, kar mislim, je najbolj prepričljiv od teh Primeri, atoi. Torej je bilo to vprašanje na kviz pred dvema letoma. In sem ga imela na krovu tukaj. Ljudje so bile pozvane, na kvizu - Dali so jim malo več tesxt v vprašanje, vendar sem izpadla Besedilo ker je bilo potrebno za naše potrebe zdaj. Bilo je samo nekaj v ozadju o tem, kaj atoi storil. Toda vsi veste, in so zelo seznanjeni z atoi. Predlagam, da to kodo na list papirja. Prav tako predlagamo, da uporabite strategijo da smo šli čez Veliko v našem oddelku. Najprej poskrbite, da boste razumeli kaj atoi počne. Narisati ali prišli do nekaj mentalna podoba tega pa je v tvoji glavi. Dalje, napiši psevdokoda za to. Na kvizu, če vse, kar se je psevdokoda, vsaj dal nekaj dol. In potem karto, da psevdokoda na C. Če imate ček v vašem psevdokoda, kot preveriti, če kaj je 1, ki preslika na če stanje in tako naprej. In končno, kodo programa v C Torej, pojdite nazaj na atoi in se pet minut kodo to na list Papir, ki je verjetno okoli Količina časa, ki bi jih vzeli na Kviz za kodo atoi. Pet do 15 minut, od pet do 12, pet do 10 minut, je o znesku čas, ki ste jo porabili za to vprašanje v kvizu. Zato si vzemite pet minut, prosim. In če imate kakršnakoli vprašanja, dvignite roko in bom prišel naokoli. [STRANSKI POGOVORI] JASON Hirschhorna: OK, tako da je pet minut. To je verjetno zaradi obsega čas, ki ste jo porabili, da se na kvizu, Morda nizka konec tistega časa. Bomo Rekapitulacija v bit. Začnimo kodiranja to. In če ne bomo dobili vse skozi, odgovori na ta in ta kviz vprašanje so na voljo, še enkrat, Jesen 2011, ko je to vprašanje pojavil na kvizu. In to je bilo vredno osem točk na kvizu potem. Osem točk je na odprtem koncu število točk, nekaj je vredno. Največ vprašanj so v območju od 5:59 točk. Torej je to bolj zahtevno Vprašanje, zagotovo. Lahko kdo me začel? Na splošno, kaj bomo bi želeli storiti s tem deluje atoi, logično? Kaj bomo naredili? Torej bomo napisali nekateri psevdokoda. Študent: Pretvarjanje znakov v celih. JASON Hirschhorna: Pretvarjanje znakov v celih. OK. Torej, koliko znakov smo bo treba iti skozi? Študent: Vsi izmed njih. Študent: Vsi znaki v nizu. JASON Hirschhorna: Vse znakov v nizu. Torej, če bi želeli, da gredo skozi vsak znak v nizu, kar je stvar v C smo videli, da je dovoljeno nas, da gredo skozi vsak znak v nizu? ŠTUDENTI: za zanko. JASON Hirschhorna: zanko. Torej gremo v zanko skozi Vsak lik v s. In kaj bomo želeli narediti ko smo dobili poseben značaj? Recimo, da se bova opravili 90. Smo dobili 9. To je znak. Kaj želimo narediti z da znak 9? Študent: ga odštejemo od 0 značaja? Študent: 0 Dodaj? JASON Hirschhorna: Odštevanje da iz značaja 0? Študent: Ja. JASON Hirschhorna: Zakaj hočeš to storiti? Študent: [neslišno] vrednost. Njegova int vrednost. JASON Hirschhorna: OK, tako da vzamemo lik 9, jo odštejemo od znak 0, da bi dobili Dejansko število 9. Sladko. In kako veš, da je znak 9 minus 0 lik je 9? Kaj grafikon si pogledati? Študent: Obstaja logično devet kraji, med 9. in 0. Ali lahko pogledate v tabeli ASCII. JASON Hirschhorna: ASCII tabela. Ampak ja, ste pravilno, kot dobro. Torej odštejemo 0. Torej, zdaj imamo celo 9. In kaj želimo narediti s tem? Če imamo 90, je najprej celo smo, kar smo želeli storiti? Študent: Jaz bi dal v začasno celo matrika, potem računati z njo kasneje, da bi bilo v konec. JASON Hirschhorna: OK. Študent: Začnete lahko na koncu niz in nato premakniti naprej, tako da vsakič, ko se premikate naprej, jo pomnožimo s 10. JASON Hirschhorna: OK. To se sliši kot precej prepričljivi ideja. Začnemo lahko na koncu našega polja, in bomo lahko uporabili strleng. Mi lahko uporabite strleng tukaj. Dobili bomo dolžino našega niza. Začnemo ob koncu. In + prvo, vzameva, da celo število, in morda bomo ustvarili podobno Nova celo spremenljivka up top, kjer bomo shranjevanje vsega. Tako smo zanko skozi vsak char vs od nazaj na sprednji strani, odštejemo 0 in potem smo jo vzeli, in glede na če je, ga pomnožite z močjo 10. Ker je prvi, kaj počnemo pomnožite desnih značaj, ki ga? ŠTUDENT: 10 do 0. JASON Hirschhorna: 10 do 0. Kaj množimo drugega desna lik, ki ga? Študent: [neslišno]. JASON Hirschhorna: Kaj? ŠTUDENT: 10 do 1. JASON Hirschhorna: 10 do 1. Tretjih desna znak? ŠTUDENT: 10 do 2. JASON Hirschhorna: 10 do 2. Študent: Oprostite, ne razumem kaj delamo tukaj. JASON Hirschhorna: OK, pojdimo nazaj, potem. Tako bomo dobili opravili v nizu. Ker smo pisno atoi. Tako smo dobili opravili v nizu. Recimo, da se bova opravili v nizu 90. Prva stvar, bomo storiti, je nastaviti Nova celo spremenljivka, ki smo le, da bo ustvarjanje kot je naš novi celo število. To je tisto, kar bomo vrniti na koncu. Moramo iti skozi vsak lik v Niz ker smo določen da se moramo dotakniti vsakega posebej in nato pa ga dodate na naš novi celo število. Vendar ne moremo preprosto dodate kot številko. Ne moremo sprejeti 9 in dodajte 9 na naše število. To je odvisno od tega, kaj mesto je v nizu. Bomo morali pomnožiti je z močjo 10. Ker to je, kako bazo 10 del. Tako bomo dobili dejanski značaj, ali dejansko število Številka, z odštevanjem znak 0. od značaja 9, kot da je z odšteje znakov kapitala iz ne glede na karakter smo imeli v enem od te težave. Tako da bomo dejansko dobili številko od 0 do 9 shrani kot realno število, mi pa bomo pomnoži z močjo 10 odvisno o tem, kje smo v nizu. In potem se bomo, da ga dodate nazaj v naši novi integer spremenljivko. Torej, kaj bi to izgledal bi treba - bomo pripraviti tukaj. Če se bomo opravili v nizu 90 - Študent: [neslišno]. JASON Hirschhorna: A atoi traja niz. Tako da smo šli skozi gospodarstvo. Mi se bomo opravili v 90. Gremo od zadaj naprej. Peljemo 0. Študent: Žal mi je. Mogoče je to neumno. Če se bova opravili v nizu, zakaj je 90, kar smo pridobivanje sprejet? Ker 90 je celo število. JASON Hirschhorna: Ker atoi traja vrvica in jo pretvori v celo število predstavitev tega niza. Toda niz 90 ni celo število 90 ali 90 številko. Niz 90 je niz dveh ali trije znaki, pač pa 9. značaj, 0 značaj, in backslash 0 značaj. In mi pišete atoi, ker za Na primer, ko ste vzeli ukaz Argument linijo, in je shranjena v argv, je shranjena kot niz. Toda, če želite, da se ga obravnava kot številko, boste morali spremeniti to dejansko število. Ki smo enega od naših problematičnih sklopov. , Ki smo ga v številnih naših problematičnih sklopov. Vsakdo, ki se je celo kot argument v ukazni vrstici. Tako da je, zakaj je naša funkcija atoi traja niz. Torej še enkrat, v našem primeru tukaj, smo bo trajalo zadnjega. Bomo odštejemo značaja 0 od nje, saj liki 0 odšteje z znakom 0 vam dejansko število 0, po katerem math ASCII, kar počnemo. Ker so znaki zastopali razlikuje od njihovega dejanskega - značaja, npr male črke je 97. To ni - ups! To ni vse, kar bi pričakovali , da je, 0, npr. Torej boste morali odšteti lik, da bi dobili 0. Zato bomo storili, da tu da bi dobili dejansko število. In potem se bomo, da ga pomnožite s Moč 10, odvisno, kjer je je v nizu, nato pa, da in ga dodate na naš imetnika mesto spremenljivka, da bomo lahko prišli do naš končni novo število. Ali to smiselno za vsakogar? Torej ne bomo kodo tem prav zdaj, ker smo dobili v stiski s časom. Opravičujem se za čas za to. Ampak to je tisto, kar upam, da bi si biti sposoben narediti na kvizu - na Navsezadnje se to psevdokoda izpisano. In potem, če bi napisali psevdokoda, pravzaprav bi lahko to storite precej hitro. Vsaka linija komentarjev smo pisali smo tukaj pomeni, da približno ena vrstica z oznako C. Razglasitvi nove spremenljivke, pisanje zanke, nekateri odštevanje, nekateri množenje in nekateri naloga. Mi bi verjetno želeli tudi napišete povratni vod. Lahko bi tudi želeli postaviti nekatere preglede tukaj. Ja. Študent: Torej lahko ravnamo i kot dejanski niz? Ker vem, da je samo naslov. Všeč mi je, kako bi dobili dolžino Niz se spusti skozi? JASON Hirschhorna: Torej, kako si dolžino niza? Strlen. Študent: strlen, ja. Ampak si lahko s tako argument za to? JASON Hirschhorna: Torej strlen traja char zvezda. In iz tega sledi, da je zoglenel zvezda, in to ohranja štetje, dokler ne pride do backslash 0. strlen je dejansko eden od drugih programov smo grejo na kodo. To je še ena dobra kodi. Tista je malo lažje, ker če boš, da razmišljajo o tem, da konceptualno - Pravkar sem to rekel na glas - strlen sledi kazalec in gre naprej štetje in sledenja, dokler pridete backslash 0. ŠTUDENT: OK, razumem. JASON Hirschhorna: Torej najboljše sreča na kvizu 0 jutri. Če imate kakršnakoli vprašanja, bom biti zunaj po tem. Vas prosimo, da email mi. Dosegla svoj TF, če ste Ne na mojem oddelku, ali pa si moj email, če želite. Če želite znorel in pošljite me email, freakout email, bom vam poslali nazaj, kot, smeška, ali, recimo, šala ali kaj podobnega. Torej, vas prosimo, da to storite tudi. Vso srečo še enkrat, in bom vidimo vse naslednji teden.