JASON Hirschhorn: Tere kuni A5, kõigile. Meil on põnev nädal ees, peamiselt seetõttu, et seal on nii palju uusi seisab selles toas. See on imeline. Palju sa siin juhuslikult mis on veelgi parem. Loodetavasti sa hoian meiega. Sel nädalal me veeta Suurem osa jagu valmistub viktoriini. Nii iga meie päevakorras, me räägime natuke ressursse klassi vaid ka tegema ja siis taas veedavad põhiosa klassi talking kohta küsimusi. Kui me oleme valmis vastates teie küsimusi või kui teie küsimustele loomulikult viib meid mõned kodeerimine, I on valimi probleeme midterms varem, et me koodi live rubriigis kokku, et toob kaasa ka mõned muud hea teemasid katta. Nii et esimene, kui oleme läbi käinud, et Viimase paari nädala jooksul, et teile meelde tuletada, poisid, seal on ton ressursside saadaval seda muidugi. Paljud neist on uskumatult kasulik et sa nagu te jätkuvalt õppida viktoriin 0, sest see teisipäeva pärastlõunal. Nii et kõik teist on olnud õpib veidi. On loengumaterjalid ja allikas koodi, mida peaks kindlasti kontrollida. Vaata püksid. Tutvu study.cs50.net. Ja siis, mis on loetletud allpool, number muid ressursse. Jällegi viktoriin 0 on homme kell 01:00. Kui te pole seda veel teinud, siis kontrollige välja About Quiz 0 dokumenti Muidugi kodulehte nuputada kus te võtate viktoriini. Viktoriin algab kell 01:10 ja lõpeb 70 minutit hiljem. Nii et kui sa näidata üles pärast 01:10, sa oled hakka, et palju vähem minutit kui 70 võtta viktoriini. Seega veenduge, et sa oled seal õigel ajal. Kui oled pikendamine õpilane või on mõned teised katsetamine kaalutlusi, ei pruugi olla 01:00 homme. Aga jälle, vaadake Info Quiz 0 dokument, et sa tead, kui te võtate viktoriini. Ma kirjutasin 75 minutit siin. Ma arvan, et see on õige, mitte 70. See hõlmab kõiki materjale nädal 0 eelmise nädala loengu kolmapäeval. Ja jälle see viktoriin kohta, et dokument, saad ühe kahepoolne ja 8 1/2 11 paberilehte, et saate kasutada kui ajal märkmeid tegema. Paljud inimesed, kui mitte enamik inimesi on Leiti, et kõige kasulik viis õppida viktoriin on teha uuring lehel üks-sider, oma. Nii vaatame viimase ones kui olete näinud viimase ones. Jõuda sõpru näha, mida nad hakanud ise. Aga käed ette, kuidas oskad Uuring on läbida kõik ja nikerdama seda ette, mida peaks või ei kuulu selle lehe paber, sest see on lihtsalt tõesti kasulik viis, kuidas saate veenduda, sa lähed läbi kõik ja mõned tuttavad on. Enamik inimesi, leiame, kuigi nad on paberileht istub nende kõrval on viktoriin, ärge lülitage seda, sest jällegi, et väga protsessi läbimas info on aidanud neid õppima. Kas kellelgi on küsimusi umbes viktoriin 0? On kõik - Ma ei kavatse seda teha käetõstmisega. Pole viga. Ma tahtsin küsida, kes aastal asus. Aga ma ei taha sind kõik ei tõsta käed. Nii nagu ma ütlesin - jah, Avi, edasi minna. AVI: Mida oleks kasulik asi panna üks piipar? Õpilane: See on sinust. JASON Hirschhorn: Sa saad kasutada oma otsuse. Kasulikud asjad panna üks piipar, Kui teil on segaduses, suur O runtime erinevate otsingud ja kehvasti, pane see sinna sisse mugav dändi diagrammi. Nii, kui sa palusid, et viktoriin, siis ei ole vaja proovida ja joonis it out või põhjus läbi tööaega. Sa võid kopeerida selle alla. Kui te vaatate viktoriinid minevikus palju korda, siis jookseb aeg küsimusi. Nii oleks näiteks hea asi panna oma üks-piipar. Muud head asjad panna, kui sa oled segaduses, kuidas kuulutada funktsiooni või mida eri osade Funktsiooni deklaratsioon on kirjutada et seal, geneeriline versioon ja siis võib-olla näiteks. Kui oled segaduses suunanäitajaks, skeem, kuidas viiteid töö ilmselt tõesti kasulik. Kui oled segaduses, rekursioon, proovi rekursiivne funktsioon on olemas võib osutuda ka väga kasulik. Kas see annab teile mõned ideed? AVI: Sa pead aru saama, kogu koostamise protsessi, nagu kuidas see kõik toimib? JASON Hirschhorn: Everything mis on kaetud saaks näidata üles viktoriini. Küsimused - kuid jällegi, mõned asjad on kaalutud kõrgemalt kui teised. Mõned asjad on tulnud jälle ja uuesti klassi, in loeng ja sektsioon. Muud asjad ei ole tulla, et tihti. Me oleme palju rääkinud # include ja -L midagi ja mida need tähendavad koostamise protsessi. Me oleme palju rääkinud GDB, klammerduma, neid erinevaid lippe, mida me kasutame, kui oleme kompileerida midagi, ja mis make15 näiteks tõesti tähendab ja tõepoolest. Me ei räägi, kui palju iga samm koostamise protsessi. Me oleme ikka veel rääkinud. Nii et see on ikka midagi, mida peaksid olema tuttavad. Aga jälle, me ei kavatse olla - asjad, mis tulevad sagedamini klass on tõenäolisem, et tulla enam sageli ja rängemalt kaalutud viktoriini. Lahe. Muid küsimusi viktoriin 0? OK, nii et ma panin nimekirja teemasid laual. Läksin läbi õppekava. Läksin läbi läbivaatamise sektsiooni eile ja slaidid üles koos mittetäielik nimekiri teemadel et meil on kaetud nii kaugele CS50 ja asju, mis võivad ilmuvad viktoriini. Nii, et ma ei lähe läbi iga üks neist. See võtab palju rohkem aega kui praegu. Aga ma panen selle siia, et loodetavasti jog oma mälu, et asju, mis võivad või ei pruugi olla nii tuttav teid. Ja ma armastan kulutada suurema osa lõik vastates küsimustele need teemad, teemad, siin ei käsitleta. Me võime kirjutada pseudo kood. Me võime kirjutada tõeline kood tagada, et teil - Ma võin vastata teie küsimusele ning aitab kõik täiesti aru palju neid teemasid, et sa tunned ennast valmis ja mugav laskumist viktoriin homme. Nii et loe üle nimekirja. Sa loodetavasti jõudnud jagu mõned küsimused ka. Kui olete valmis, tõsta oma käsi ja me alustada. Pidage meeles, teil on küsimusi, ei ole rumalaid küsimusi. Oleme kuulnud, et palju. Ja teil on küsimusi, olen valmis kihla, et paljud inimesed nii istun siin ja vaatan Internetis on samuti. Nii saab ainult aidata inimestel küsides küsimusi. Marcus. MARCUS: hinnavahemikus korstnat ja hunnik, kas on eelnevalt eraldatud protsent mälu, mis on määratletud kui see on virnas või hunnik? Või kuidas see toimib täpselt? JASON Hirschhorn: Hea küsimus. Ma lähen tagasi jälgida natuke. Kas igaüks - palun olla aus siin. Ma tean, et ma palun teil tõsta oma käsi ees oma eakaaslastega. Aga on olemas inimesi, kes tunnevad ebamugavalt stack ja hunnik ja tahaks minna üle, et ja mida need tähendab? Tõsta käsi, kui - OK. Aitäh. Nii et me läheme üle korstna ja hunnik tõesti kiiresti ning seejärel liikuda vastates teie küsimusele. Nii et kui me venitama box esindama mälu arvutisse, mis on vaid mõned asju, mis lähevad selles kastis? Main. Põhiülesanne. Kust peamised minna? Õpilane: [kuuldamatu]. JASON Hirschhorn: nii me pane peamine siin. Mida veel läheb see kast? Üliõpilane: funktsioonid, mis te helistate. JASON Hirschhorn: funktsioonid mida me nimetame. Ja kui nad lähevad? Üliõpilane: virnas. JASON Hirschhorn: nad minna virna. Nii et me nimetame seda asi siin pinu. Ja üleval on meil hunnik. Nii mälu ei ole kast lihtsalt niimoodi. Aga see on tegelikult üsna sarnased. See saab olema palju kastid üle ja üle, sõltuvalt sellest, kui suur on teie arvuti on või kui suur on teie mälu on. At viisi kraami "alt" on virnas. Ja seal on mitu asja et minna virna. Ja need sõltuvad funktsioonid olete oma koodi. Teil on alati üks funktsiooni kood kutsus peamine, et seal on alati jagu maha siin Kestab pühendatud peamine. Need osad on seadmes kutsutakse stack raame. Kui helistate teise funktsiooni, st peamise kutsub binaarne otsing funktsioon, paneme teise raami pinu. Täpsemalt me annetada tüki mälu meie arvuti salvestada binaarne otsing kohalik muutujad ja joosta binaarne Otsi koodi. Nii me nimetame binaarne otsing. Selle tüki mälu, me salvestada oma kohalikud muutujad. Me säilitada oma printf kõned. Mis ka ei juhtuks, et funktsioon on läheb hoitakse seal. Binary otsing läheb täide. See saab lõpetada täitmist. Mis on sõna C, mis tähendab et peaks säilima täitma selle täitmiseks? Üliõpilane: Return. JASON Hirschhorn: Tagasi. Nii et kui näed tagastamise avalduse funktsiooni otsas kui see tabab seda. Nii binaarne otsing tabab selle tagasi. See osa mälu sisuliselt vabanenud. Ja peamine läheb tagasi täitmine. Seega peamine peatub kus oli kõne binaarne otsing, saaksin tagastatav väärtus, ja jätkata täitmist. See freimi lähevad ära. Kui me nimetame rekursiivne funktsioon, mis on funktsioon, mis nimetab ennast üle ja üle selle, me võiks saada - ütleme, et me tegin binaarne otsing rekursiivselt. Me võime saada binaarne otsing versioon üks, Kahendotsingupuu kaks, binaarne otsing kolm, binaarne otsing neli, binaarne otsing viis. Ja siis see viimane Kahendotsingupuu viis tabab tugipunkti ja korstna raamid läheb tagasi ja hoida sulgemine kuni me naasta peamine. Me võime minna üle rekursioon natuke. Aga see kõik tähendab, kui sa oled kutsudes mitmeid funktsioone korraga, seal saad mitu korstnat raamid pinu. Kuhja, teiselt poolt, kuni siin ei ole ülesandeid, mitte kohalike muutujate. See on dünaamiliselt eraldatud muutujad. Niisiis on need muutujad, mis võivad olla vormindatud kas põhi-või funktsioon, mis peamine helistada. Kõikjal oma kood, nad saab initsialiseerida. Ja initsialiseerida dünaamiliselt eraldatud muutuja. Mis funktsiooni C me kasutame? Üliõpilane: malloc. JASON Hirschhorn: malloc. Sa kutsud malloc. Sa saad ruumi mälu. Ja et ruumi mälu on hunnik. Ja et ruumi mälu jääb seal seni, kuni te helistada tasuta. Nii dünaamiliselt eraldatud muutujad hunnik on olemas nii kaua, kui te tahan, et nad on olemas ja nad ei ära minema, kuni te selgesõnaliselt öelda, et nad minema. Saate luua neid ühes funktsioon. See funktsioon on virnas raam läheb ära. Aga see muutuja on veel olemas hunnik kuni ta on vabastatud, potentsiaalselt selle funktsiooni järgi, mida nimetatakse binaarne otsing või mis iganes. Nii et need, hunnik muutujaid seal nii kaua, kui soovite neil seal. Ja nad saavad panna siin. Ja siis järgmine saab panna siin. Nad saan täidetud, ning nad seal seni, kuni te helistada tasuta. Ja sisuliselt hunnik ja korstna saada Marcuse küsimusele kasvavad üksteise suunas. Ja kui nad joosta üksteist, olete kasutanud ära kogu mälu oma arvuti ja teie programm loobuda sest sa ei pea enam mälu vasak kasutada. Nende vahel on potentsiaalselt muid asju. Aga ulatus selle kursuse, siis ei pea selle pärast muretse. Nii et see oli vastus Teie küsimusele. Ärge selle pärast muretsege. Aga see oli pikk vastus. Kõik, mida vaja teada on, hunnik ja korstnat - üks algab alt. Stack teeb. Hunnik on seal üleval. Nad kasvavad üksteisele lähemale. Ja kui nad puudutada, see on probleem. Sa jooksid välja mälu. Aga ka, lisaks teada, kus need, mis on salvestatud nii korstnat ja hunnik. Curtis. CURTIS: kui nad põrkuvad, on see, et stack overflow? JASON Hirschhorn: kui nad põrkuvad, see pole stack overflow. Stack overflow on erinev ala et me ei lähe üle, kui soovite. OK, me tuleme tagasi, et natuke. Üliõpilane: Mis on sõna, mida nimetatakse kui nad tabanud üksteise korstnat ja hunnik? JASON Hirschhorn: Praegu ärge muretsege. Lihtsalt tean - Ma vastan sellele küsimusele peale tunde. Kui nad satuvad üksteise otsa mälu, sest seal ei ole enam ruumi seal. Üliõpilane: Vabandust, mis see seg süü? JASON Hirschhorn: segment viga võib nõudnud - see sõltub miks seg süü on kutsutud. Mõnikord oma stack overflow, siis see öelda seg viga, kui viga. Üliõpilane: Mis viite mahavõtmine null muutuja? Kas see seg süü? JASON Hirschhorn: viite mahavõtmine null pointer - OK, nii et kui teil on pointer, et sa mis võrdne null, suunanäitajaks, tagasikutsumine, store mälu aadressid nende väärtused. Ja null pointer on sisuliselt ladustamiseks 0, 0-nda käsitleda muutuja. Nii 0x, 0, 0, 0, 0, jne. Et 0-nda aadress mällu, et see pole meie pilt, mis on seal üleval kuskil, mis on reserveeritud jaoks arvuti. Me ei tohi seda puudutada. Nii et kui teie programm on täidesaatva, kui midagi üritab minna mälu aadress 0, see teab, et see on tühi väärtus. Ta ei tea midagi peaks seal olema. Nii et kui te proovida ja kasutada midagi seal ja ravida midagi seal või üritavad minna sellesse asukohta, oled hakka seg rike või viga. Kas see vastab su küsimusele? Ja nüüd me läheme tagasi korstnat ülevoolu. Asjad korstnat, kui teiega on näinud, et - Joonistame lähedal up freimi. Kas kõik nägid seda? Nii et meil on meie freimi. Me säästa massiivi kui kohaliku muutujal seda funktsiooni. Nii öelda meie array on viis laigud. Kõik viis nende salvestatakse selle freimi. Kui hakkame kirjalikult kaugemale piire selle massiivi - Nii et kui me hakake arvesse, Ütleme, et see on 0. Need on viis indeksid meie massiivi. Kui hakkame kirjutades sinna index 5, mis meil ei ole, kui meil on massiivi suurus 5, hakkame kirjutades sinna punktid 6, 7, 8, 9, saame Stack Overflow viga. Üldiselt see ei ole - siis ilmselt hätta kui te lähete üle ühe. Aga üldiselt, siis satuvad enamik probleeme, kui te lähete üle palju ja sa lähed seni üle, mis sa kirjutad üle saatja aadressi selle funktsioon, mis paikneb põhja freimi. Sest, eks? You - in - sorry. Ei ", sest õige." In freimi, siis on kohaliku muutujad. Praegu väga põhja pinu raam on saatja aadress. See, kui funktsioon läheb, kui see on läbi. Ja kui te kirjutate, et tagasipöördumine aadress, siis millal see freimi, kui sa lähed läbi korstna raam ja täidesaatva iga rida, sa oled lähen oma uue saatja aadress , mis on kirjutatud seal asemel tegelikule. Ja see, kuidas me oleme näinud mõned turbemurrete võib juhtuda arvutitega. Nii stack overflow, lühidalt, on see, kui sa kirjutada osa korstnat sa peaksid kasutama, kohaliku muutuja sa peaksid kasutama ja eriti siis, kui hakkate üle kirjutada tähtsad asjad saatja aadress. Ja see, kui sa saad viga. Või äkki isegi siis võiks alustada isegi kirjutades sinna - öelda binaarne otsing oli õigus eespool peamised. Kui te overwrote palju, siis võiks kirjutada meie peamine. Aga üldiselt, sa saad viga enne Seejärel, sest arvuti teab sa teed midagi, mida sa ei peaks seda tegema. Jah. Üliõpilane: Mis vahet vahel stack overflow ja buffer overflow? JASON Hirschhorn: Buffer overflow on üldisemat tüüpi mida ma just kirjeldasin. Üliõpilane: Nii stack overflow on näiteks buffer overflow. JASON Hirschhorn: Täpselt. See on massiiv me ei mõtle nagu puhvris ruumi asjad sisse minna See on stack buffer overflow. Meil võiks olla hunnik buffer overflow. Kui oli puhvrit, mis on sageli on massiiv hunnik, ja me overwrote neid piire, siis me on hunnik buffer overflow. Ja väljapoole seda muidugi nad avastatud veidi erinevalt. Koostaja on eriline kuidas avastada iga. Aga buffer overflow on üldisem tüüpi, mida ma kirjeldasin, mis oli stack buffer overflow. Kas see vastab su küsimusele? Sweet. Kas on muid küsimusi, sellega seotud korstnat või hunnik? Jah. Õpilane: Ma tean, et sa pead tasuta stringid sest nad on hunnik ja sa ei taha lekkima mälu. Aga sa pead vabastama globaalsed muutujad ja värki? Või on nad automaatselt vabanenud? JASON Hirschhorn: Hea küsimus. Nii CS50.H loome seda asja eest, et sa helistasid string. String on tõesti, mida? Üliõpilane: Char star. JASON Hirschhorn: char star, pointer tärk viit array tähemärki. Seda string. Nii et me peame vabastama, sest getString, mis meil kasutada palju - string nimi võrdub getString - et mallocs meile mõned mälu hunnik ja siis naaseb kursor esimene märk, et string, char star. Seega näiliselt, kui sa ei ole olnud kirjalikult tasuta kõigis oma stringid et olete kutsutud seni, pead välja lekib mõned mälu. Muidugi me ei rääkinud see, et keegi ei saanud sisse vaeva teeb. Aga läheb edasi, jah. Kui helistate getString, oled mallocing ruumi hunnik. Ja kui sa ei helista tasuta hiljem, et string, sul on mälu leke. Seda vastust oma küsimusele? Jah Õpilane: Niisiis, mida teha, et me kasutame tasuta õigus enne naasmist? Nagu piires, ma arvan, et kui ütleme, nagu int main jooksul ulatus kood, mis on nendes looksulg, eks enne - sa tead, kus sa tavaliselt pannakse tagasi. Kas paned tasuta enne seda? JASON Hirschhorn: Nii saab asetada tasuta kus iganes sa tahad panna tasuta. Kuna need on dünaamiliselt eraldatud muutujad, sest nad ei elama väljapoole eriti funktsioon, kui te helistate malloc sisse eraldi funktsiooni, näiteks getString, võite helistada tasuta peamine. Teil ei ole vaja seda kutsuda aastal konkreetse funktsiooni kus malloc nimetatakse. Aga sa ei pea seda kutsuda enne peamist tulu. Ja see tõesti sõltub. See sõltub sellest, miks sa malloced et ruumi esiteks. Mõned inimesed kutsuvad tasuta päris kiiresti. Mõned inimesed ei helista tasuta kuni lõpuks oma programmi. Ja nad lähevad läbi ja tasuta kõike. See sõltub sellest, miks sa helistasid malloc. Õpilane: Ja mida sa ütleksid kui sa helistasid kasutamine getString? Sa ütleks vaba mis? JASON Hirschhorn: Nii süntaks tasuta on lihtsalt vaba, avatud paren lähedal paren, ja nime pointer. Nii et kui sa kirjutad string nimi võrdsete getString, paned nime siin. See nimi pointer. Ja ta teab, et vabastada see mälu. Üliõpilane: Nii et kui see vabastab see mälu, osuti osutab endiselt, et koht mällu? Või on osuti ka tühjendatud aadress, mis osutab ta. JASON Hirschhorn: Peaksime proovida. Peaksime koodi. Lähme tagasi tulla, kui saame kodeerimine ja olgem koodi. Ja kui sa tahad, et aru saada, et vastus selle saab ka koodi vahepeal. Aga see on suur küsimus. Üliõpilane: Kas on võimalik tasuta midagi liiga kiiresti? Nii et sa ikka pead seda oma programmi, ja sa vabanevad mälu? JASON Hirschhorn: Jah. See on võimalik, kui sa tasuta midagi ja siis seda uuesti kasutada, sa ei sattunud viga. Aga see on teile, sest te vabanenud midagi ja siis kutsus ta hiljem. Nii et oli programmeerija viga. Aga jah. Sa võid kirjutada seda. Enam küsimustele - Jah. Üliõpilane: Nii et kui sa peaksid lihtsalt vaba ta üldiselt enne Programm lõpeb, kas see tähendab siis, kui Programm lõpeb ja sa ei tasuta seda, et mälu on ikka eraldatud? JASON Hirschhorn: Kui teie programmi lõppemist ja te unustate tasuta midagi, siis et mälu eraldati kogu eluiga oma programmi. Kui teie programm sulgub täielikult, et mälu ei kavatse jääda sinna igavesti. Arvuti on piisavalt targad, et teavad et kui programm sulgub see peaks vabanema kõik mälu aastal selle programmiga seotud. Siiski on vahendeid, mida saab käivitada programmi kohta, et tuvastada, kas, millal programmi lõpetanud, sa unustasid vabastamiseks mälu. Ja oma järgmise lahendamist kus sa kasutad malloc ja kasutades suunanäitajaks, siis töötab see programmi oma programmi, et näha, kui kui peamine tulu, siis tuli mõned asju, mis jäid unfreed. Nii nad ei kavatse jääda malloced igavesti arvuti. See oleks raiskamine, sest väga kiiresti, arvutid oleks otsa mälu. Aga kui nad juhivad lõpuni oma programmi ja nad ei vabanenud ja oma Programm väljub, see on ikka veel probleemiks et see tööriist aitab teil tegeleda. Õpilane: et Valgrind? JASON Hirschhorn: On nimetatakse Valgrind. Ja saate - Õpilane: Aga meil ei ole teada et viktoriin, kuigi? Ma mõtlen, et see oli rääkinud natuke loeng. JASON Hirschhorn: Nii Valgrind on nimi, et vahend. Teades, mida ta teeb, on piisavalt viktoriini. Aga sa ei ole seda veel oma lahendamist, sest meil ei ole olnud Ülesanded, mis on otseselt reguleeritud koos malloc või te kasutate malloc. Nii et sa ei ole kasutanud Valgrind veel. Aga siis kasuta seda varem mitte hiljem. Üliõpilane: Kas te kordate mida Valgrind on? JASON Hirschhorn: Vabandust? Üliõpilane: Kas sa korrata eesmärgil Valgring on? JASON Hirschhorn: Valgrind on nime - nagu GDB aitab siluda oma programmi Valgrind aitab teil aru saada, kui asjad ei ole vabastatud kui teie programm sulgub. Nii saad kasutada seda oma programmi. Ja sinu programm väljub ja see ütlen oma programmi nimega malloc see palju korda nii palju baite ja te ainult nn vaba seda mitu korda. Ja nii sa jätsid need palju baite ilma vabanevad. Või siis see, et te olete vabastatud kõik. Hea töö. Üliõpilane: OK. Ja seda nimetatakse Valgring? JASON Hirschhorn: V-L-G-R-I-N-D. Üliõpilane: küsimus sellest. Nii et teil on n täht x võrdub midagi. See võrdub, mis iganes sa oled pannes seal on see, et mis pannakse sees Mida x osutades, või kursor x-st? JASON Hirschhorn: Kas te küsimust korrata? Kas me saame teha seda kui sa seda ütled? Üliõpilane: viktoriin, tegelikult, saatsid meile, et see oli nagu, char star tõde võrdub CS50 kivid, eks? Nii kas see tähendab, et CS50 kivid on see, mis tõde on suunaga? JASON Hirschhorn: Nii sa räägid umbes char täht string, kuidas mis töötab? Jah. OK. Joonistame seda siin. [SIDE vestlust] JASON Hirschhorn: Nii et see muutuja saab olema tüüpi char star. Kui suur on muutuv tüüpi char star? Mitu baiti? Õpilased: Four. JASON Hirschhorn: See on neli baiti. Mitu õigused on muutuja tüüpi int star? Õpilased: Four. JASON Hirschhorn: neli baiti. Kui see on pointer, siis on alati neli baiti, kuna viiteid, nende väärtus on mälu aadress. Ja mälu aadresse CS50 seade on neli baiti. Nii et kui me kutsume getString või kui me ütleme, stringname võrdne ja seejärel jutumärgid pane string, me esitame - Noh, see on natuke erinev. Me ei getString nagu näiteks. Või char star midagi võrdub string. Vabandust, mulle näiteks et sa loed? Üliõpilane: char star tõde võrdub "CS50 kivid" jutumärkidega. JASON Hirschhorn: Nii et see täht, see me kutsume seda muutujat x meie generic eesmärkidel. Lõime muutuja nimega x. See tüüp char star. See on kursor rea märke. Nii siin - Nii et see on, kuidas see töötavad mälu. See salvestab mällu aadress. See salvestab mällu aadress esimene märk massiiv. Ja siis, kui sa järgisid pointer, siis oleks saada esimene märk. Ja kui sa loed seda asja nagu string, arvuti on tark piisavalt teada, lugege kogu see asi kuni ta saab tagasilöögi 0. Aga kui sa loed seda märgi aega, nii et sa iterating kaudu see string, siis lihtsalt lugeda märgi korraga kuni jõuad kurakriips 0. See ei pruugi vastata küsimus, kuigi. Üliõpilane: Jah, aga sa ei ole malloced et ruumi veel ette, et osuti. JASON Hirschhorn: Nii et ma olen päris kindel, täpselt, mida te vaatate, sest ma ei teinud seda tegema. See pidi olema kasulik ressursi teise TF. Kui loote string Kestab või kohaliku muutuja, siis see lihtsalt massiivi eest mitte üldiselt char star osutades teine ​​string. Aga ma ei tea. See võiks olla pointer teise string stack samuti. Jah. Õpilane: Ma tean, et sa pead mälu eraldada, kui kursor on saada deklareeritud sees teise funktsiooni. Kas teil on vaja teha sama asja, kui see on deklareeritakse sees peamine, te kasutate seda seestpoolt main? JASON Hirschhorn: Nii et jah. Võite kuulutada kursor mistahes mälu aadress mällu. See võib olla mälu aadress kohalike muutuja, kuigi mitmeid kordi, inimesed ei deklareeri mälu aadressid et kohalikud muutujad, sest nad lähevad ära kohe, et funktsioon tagastab, mis Sellepärast me üldiselt malloc asju. Aga jah, siis võiks kuulutada pointer teise kohaliku muutuja. See on lihtsalt üldiselt ei tehta. Aga ma ei saa, kui heita pilk et konkreetse asja peale tunde. Jah. Õpilane: Ma arvan, et see on omamoodi sellest, mis on palutud. See ei tundu imelik olla algväärtustamisel pointer mitte aadressi, kuid mida tundub väärtus. Tundub CS50 on, mis seal sees asi on märganud ja mitte tegelik aadress, eks? JASON Hirschhorn: Nii et ei ole, kuigi. See ei ole see, mis juhtub. Kui te deklareerite char star, see on mälu aadress. Näiturid on kõik mälu aadressid osutades veel midagi. Et midagi võiks olla stack, kuid peaaegu alati on hunnik, kuidas me näeme seda kasutada. Aga stringname võrdub kahekordse quote "GetString," me näeme, et me võite vaadata läbi selle ja koodi. getString stringi ei salvestata muutuja, või mis iganes string nime ei salvestata, et muutuv, sest see ei ole, kuidas suunanäitajaks tööta. Kas see on mõtet? Üliõpilane: Jah. JASON Hirschhorn: OK. Loodetavasti see ei olnud segane kellelegi. Aga kui see oli, me võime seda uuesti vaadata natuke, sest me tegelikult toimub koodi midagi, mis loodetavasti töötada stringid ja aitab teil ennast rohkem rahul nendega. Kõik muud küsimused, mis on seotud nende teemasid või muude teemade Panen varundada? Ja - kohe. Jah, Alden. ALDEN: Nii et see on täiesti sõltumatu, kuid kas me ei lähe üle tõesti kiiresti, mida meil on vaja teada umbes vahe 32 ja 64-bit masin? JASON Hirschhorn: Jah. Nii 32 bitti on mitu baiti? ALDEN: See on neli baiti. JASON Hirschhorn: See on neli baiti. Ja 64 bitti on mitu baiti? Üliõpilane: Kaheksa. JASON Hirschhorn: Kaheksa baiti. Nii et taas, kaheksa bitti on üks bait. Teie CS50 seadme 32-bit masin. Nii mälu aadressid neli baiti. Seal on 2 kuni 32 mälu aadresse. 0-2 kuni 32 miinus 1. Ja ma ei ole positiivne, kuid see on ilmselt ulatust, mida sa vajad, et tean 32-bit masin, et mälu aadressid on jälle neli baiti, ja see on suurim summa mälu aadresse. Samuti andmetüübid - See võib olla midagi nii hästi, et väärib märkimist. Suurus andmetüüp sõltub masin te töötate. Nii char, üks sümbol, on see, kuidas palju baite meie CS50 seade? Üks bait. Ja see on tegelikult üks bait nagu hästi 64-bit masin. Ja kõige andmetüübid on sama number baitide nii masinaid. Aga mõned andmed tüübid on erinevad nii masinaid. Nii et oleks potentsiaalselt Ainuke asi, mida vaja teada. Aga isegi, et ma arvan, et on piiridest - Ma olen peaaegu positiivne, kui sa vaatad tagasi vanu viktoriinid, ta ütleb, eeldame kodeerimine probleeme te kasutate 32-bit masin. Aga on, minna koos, et Kui sa oled huvitatud, on Andmete tüübid, mis on sama suurus kõigil seadmetel. Kui olete näinud midagi uint32_t, siis võib või ei näinud seda. See andmetüüp. Seda öeldes on 32 bitti ükskõik mis masin see on. Nii et kui inimesed kirjutavad kaasaskantav kood, nad ilmselt ei kasuta ints. Nad kasutavad selle asemel need muud andmed tüüpi, et nad teavad, on sama suurus on iga masin. Madhu. MADHU: Mul oli küsimus koostamise protsessi. Nii et kui sa oled kirjutamise programm, mis kasutab raamatukogu nagu CS50 või midagi nagu, et ma tean, et see raamatukogu on, et mingil hetkel olla koostanud ja mis on seotud sisse Aga kui palju see juhtub ajal koostamist oma programmi? Millist osa raamatukogu protsess tekib siis, kui sa oled koostamisel oma programmi? JASON Hirschhorn: Nii lähme üle üldiselt sammud selle protsessi. Sa kirjutad oma. C failist. Teie. C fail, # lisada oma kaudu raamatukogud, näiteks cs50.h. Mida see terav hulka line teha oma programmi? Akchar. AKCHAR: Ta lisab prototüübid funktsioonide kaudu failide raamatukogudes. JASON Hirschhorn: Täpselt. Ta lisab need funktsiooni prototüüpe oma koodi. Nii et kui teie kood on kompileeritud algstaadiumis, tõlkija teab et need funktsioonid on tõesti olemas, ja et kuskil nad on määratud. . H failid ei sisalda Mõisted neid funktsioone või kuidas nad tegelikult töötavad. Cs50.h lihtsalt on midagi, mis ütleb, getString on reaalne asi, võib juhtuda. Ja standardio.h ütleb printf on reaalne asi, mis võib juhtuda. Nii et teie c keeles seda. Header faili saab muuta mõningaid masinloetaval kood, mis lõpuks saab muuta binaarne kood, 0-ja 1 on. Ja see on kood, mis lõppkokkuvõttes läheb täide. -L CS50 line - näiteks kui olete kirjalikult rõkkama - ja siis hõlmama-l CS50, sa kirjutad, et sisse Ja te näete, et. Kui Sa kirjutad teha, siis saad näha, et joon siin. Ja me näeme, et teine ​​kui me koodi või hiljem, kui me koodi. Aga see-l CS50 liin ei midagi natuke teistsugune kui # include cs50.h. Mida see-l CS50 line teha? Avi? AVI: Ma tahan öelda, et see ühendab raamatukogu funktsioon helistada, nagu. o faili. JASON Hirschhorn: Nii väga lähedal, kui mitte kümnesse. -L CS50 võtab binaarfailiga ja ühendab see oma binaarne fail. Nii cs50.h, pole mõtet keerates cs50.h pärit C keele kahekomponentsete iga kord, kui see on kasutusel. See oleks rumal, sest see oleks jäätmete palju aega. Nii et see on juba koostatud ja muutunud käivitatav. Ja nüüd ta läheb liita oma faili lõpus. Nii et need, 1-ja 0-lähed ühineda oma ones ja 0 on lõpus. Nüüd saate tegelikult on tegelik 1-ja 0-et määratleda, kuidas getString, Näiteks töötab, või kuidas printf, Näiteks toimib. Ja rohkem teavet, seal lühike koostajad, et Nate annab selle siis tuleb vaadata läbi, mis läheb läbi need sammud. Aga - Jah. Üliõpilane: Kas nad on alati. O faili kui nad on raamatukogu kujul valmis liita, mis on seotud - nagu Nad on kahendkoodi? JASON Hirschhorn: OK. Mis - Õpilane: et alati kehtib raamatukogud, kui sa ühendada need? JASON Hirschhorn: Jah. Nii et seal on. S faili, mis on masin kood, mis on samuti segasena sulle. Sa ei pea muretsema need. Aga üldiselt, jah, nad olema. o failid valmis minema. Üliõpilane: Nii et kui sa saata raamatukogu, sa ainult laev . h ja. o? Sa ei toimeta. C või. S. JASON Hirschhorn: So - ja see on selle lühikese samuti, kui Sellekohane teave on tulemas veidi kiiremini. Aga lühike koostajad räägib see samuti. Kui laev, raamatukogu kui sa laeva . h, Failipäises need funktsiooni prototüüpe ning 1-ja 0 on, see on kõik, mida vaja, et saada. Sa ei pea andma, kui funktsioon töötab,. c failist. Kuna koht võtmiseks või punkt APIs, punkt selles SPL, Stanford kaasaskantav raamatukogu, see on teile ei muretse, kuidas uued GRect töötab, või kuidas liikuda tööde või kuidas lisada töid. Kõik, mida vaja teada on, et add on funktsioon, mis saab kasutada ja see teeb. Nii et sa tõesti ei pea teadma, kuidas See on kirjutatud C. Teil on vaja ainult tean, et siin on funktsioone, mida nad teha, ja siin on 1-ja 0- kui sa tõesti tahad neid kasutada. Lahe. Enam küsimustele koostajad või muude teemade laual? Õpilane: Mul on küsimus rakendamise rekursiivne funktsioone. Küsimus rekursiooni. Mul oli tunne, et oleks tulla. Teeme kiiresti läbi minema rekursioon koos konkreetsete Näiteks faktoriaalses funktsiooni. Sest see on näide sellest, et Sageli kerkib või kasutatakse illustreerimiseks rekursiooni. Nii "4!" tõlgendatakse 4 faktoriaal. Ja mida see 4 faktoriaal tähendab? Mida see teeb? Kuidas arvutada 4 faktoriaali? 4 korda 3 korda 2 korda 1. Seega teine ​​viis kirjutada 4 faktoriaal on kirjutada seda. 4 korda 3 faktoriaal. Kuna 3 faktoriaal on 3 korda 2 korda 1. Seega 4 korda 3 faktoriaal on 4 korda 3 korda 2 korda 1. See on põhjus, miks faktoriaal on suur kandidaat rekursioon, sest see on selge, et seal on midagi, mida juhtub ikka ja ikka ja jälle väiksema arvu asjad kuni jõuad lõppu. Kui jõuad 1, 1 faktoriaal on 1. Sa ei saa minna palju kaugemale. 0 faktoriaal on ka defineeritud kui 1. Nii et kui sa saad 1 või 0, oled aasta lõpus, ja te saate algus läheb varundada. Nii et kui me tahame kirjutada rekursiivne funktsiooni arvutada faktoriaali me kirjutada mõned pseudokoodi selle nüüd. Enne kui me kirjutame selle pseudokoodi - Ma annan teile kutid paar minutit kirjutada pseudo kood või lihtsalt arvan sellest - on kaks asja, iga rekursiivne funktsioon vajab. Mis on need kaks asja? JACK: See on helistada ise. JASON Hirschhorn: Noah? Oh, Jack. Lase käia. JACK: See on helistada ise. JASON Hirschhorn: Nii rekursiivne funktsioon vajab rekursiivne kõne, helista ise. See on üks. Ja milline on see teine ​​asi? JACK: tugipunkti. JASON Hirschhorn: tugipunkti. Aluspõhimõtted, on siin, kui me lõpetama. Nii et teie ülesanne muutub nn. Baasjuhtumi jõuab. Sa tahad teada, kas sa oled lõpus. Ja kui sa ei ole lõppu, siis teha oma rekursiivne kõne. Ja sa lähed läbi selle funktsiooni uuesti, kontrollida oma tugipunkti uuesti. Kui sa ei ole lõppu, teete teine ​​rekursiivne kõne, jne, jne. Sellepärast rekursiivne funktsioone alati vaja neid baasi juhtudel ja need rekursiivne kõne. Kui sul ei ole rekursiivne kõne, see ei oleks rekursiivne funktsioon. Kui sa ei ole alust juhul sa ei tahaks minna igaveseks ja ei oleks lõpp. Ja tugipunkti alati esikohal, sest sa alati tahad kontrollida kui sa oled end esimesena. Nii et enne teeme mõned pseudokoodi, miks sa ei võta minut aega, et mõelda kuidas kirjutan faktoriaal funktsioon oleks kirjutatud? Ka nii palju kui te teete, kirjalikult see läbi paberileht mida sa lähed pea teha viktoriini homme. Nii ilmselt hea tava teha kindel kood olete kirjalikult alla paberileht - või te ei saa seda teha. Sa tead, kus semikoolonit on. Mäletad süntaks. Sest sa ei saa olla koostaja ütleb teile teinud vea. Samuti sinnakanti, homme, kui olete kodeerimine probleeme, kui te on tormas aeg, või kui sa oled väga segaduses, kuidas sa peaksid kirjuta eriti asi c, siis oleks behoove kirjutada pseudo-kood või kommentaarid, samuti. Sest seal osaline laenu Palju küsimusi viktoriin. Nii võite olla kiirustades, või siis võib lihtsalt segi. Kirjutamine kommentaarides või pseudo-kood Sageli võimalusi, mida saab osaliselt õigeks. Nii et ärge jätke midagi tühjaks tegema. Ei ole karistused paneb asjad sisse Tegelikult kasutusele pseudo-kood või Kommentaarid aita teehöövel aru saada, kui sa tegelikult tead, mida sa räägid, ja võibolla sõlmimine mõned osaliselt õigeks selle eest. Ka sinnakanti, kirjutada selgelt. Kui me ei saa tõesti, mida sa oled kirjalikult, me ei kavatse teile helistada keskööl homme näitaja välja, mida sa kirjutasid. Me lihtsalt võtame maha punkte. Kirjutage selgelt, et me ei kuule, või pigem saame lugeda, mida sa kirjutasid. Ja kui ta ütleb kaks lauset, ärge kirjutage punkt. Järgige juhiseid. Kirjutage selgelt. Ja kirjutada neid märkusi või pseudokoodi küsimusteks, mis võiks andmise osaline krediiti. OK, lähme faktoriaal. Nii et meil on funktsioon faktoriaali. Kui ma tegelikult kirjutada seda C, mida ma pean panna nime ees funktsiooni? Naasmise tüüp, mis käesoleval juhul anname seda int. Ja siis sees lokkis traksid, on mis toimub sees lokkis traksid funktsioon? Õpilased: Argument tüüp. JASON Hirschhorn: oma argumendid. Nii faktoriaal tõenäoliselt jääb võtta argument. See ilmselt ainult võtta üks argument. Ja me ütleme siis võtan täisarv nimetatakse x. Ja veel, kui kirjalikult prototüüp funktsioon või kirjutamise funktsioon Teie kood defineerimist, siis kirjutada andmeid liik ja nimi et muutuja, mis toimivad üksnes. Nii saab läbida mõned number sellesse funktsioon, siis saad edaspidi x sisemiselt. Meil on faktoriaal funktsioon. Meil on vaja kahte asja, tugipunkti ja rekursiivne kõne. Mis on tugipunktiks faktoriaali? Keegi, kes kirjutas selle välja ja kes ei ole räägitakse veel, mis on aluseks puhul faktoriaali? Üliõpilane: Kui n on väiksem kui 2, tagastab 1. JASON Hirschhorn: Kui n on vähem kui 2, tagastab 1. Mulle meeldib see, sest see hoolitseb 0 ja 1 vahel. Nii me teeme x <2, tagastab 1. Kui me möödunud 0, kui saame vastu 1, siis see funktsioon kohe tagasi 1. Kui me möödunud mõned number suurem kui või võrdne 2, me läheme on meie rekursiivne kõne. Ja nii, kuidas on, et läheb tööle? Kas keegi teine, kes töötas sellel kes ei rääkinud veel mulle rekursiivne kõne Selle funktsiooni aastal pseudokoodi? Kui me möödunud aastal mitu x ja see on suurem kui 2, mis me tahame teha? Meil on ka näiteks kirjutatud külg, mis võib anda teile vihje. Üliõpilane: Call x korda faktoriaali x miinus 1? JASON Hirschhorn: Täpselt nii. Me läheme tagasi x korda faktoriaali x miinus 1. Ja kuigi ma kirjutasin üles, Põhimõtteliselt, mida sa ütlesid, inglise, see faktoriaal funktsioon saavad nimetatakse uuesti. Ta hukkab x miinus 1. Seda saad tagasi mõned täisarv, ja siis ma korrutan need kaks kokku, ja et raha on tagasi ükskõik kuidas seda nimetatakse seda faktoriaal funktsioon, mis võib olla teise astme Selle faktoriaali funktsiooni. Seega on see näide rekursiivne Funktsiooni väga lihtne rekursiivne funktsioon. Aga enamik neist on selline. Kui soovite hea rekursiivne väljakutse viktoriini proovida kodeerimine binaarne otsing rekursiivselt. Sest kui sa binaarne otsing lahendamist kolme, siis ilmselt tegi seda korduvalt on samas silmus. Kuid see võib olla ka kirjaliku rekursiivselt. Sa lähed vaja kirjutada oma eraldi funktsioon, mis võtab mõned erinevate käsurea argumente - või ei käsurea argumente, mõned erinevad lihtsalt regulaarselt argumendid. Aga sa võiksid kirjutada binaarne otsing rekursiivselt samuti. Üliõpilane: Nii et sa oleks võinud ka kirjutatud, asemel x miinus 1, siis oleks ka kirjaliku x miinus miinus, või siis võiks olla kirjutatud miinus miinus x. Kas sa lihtsalt seletada tõesti kiiresti miks need oleksid erinevad asjad, nagu mida vahe on x miinus miinus ja miinus miinus x? JASON Hirschhorn: Ei, ma ei ole lähen sinna. Aga ma teile rääkida, see pärast klass. x miinus miinus miinus miinus x aland x 1. Aga nad teevad seda natuke teistmoodi. Aga ma ei taha minna sinna. Muud küsimused rekursioon või seda funktsiooni? See pole isegi pseudokoodi. See on põhiliselt koodi C Te ei kirjuta seda. OK, kõik muud küsimused teemadel siin? Jah. Õpilane: Mul on kiire hooletussejäetud ujukoma ja täpsust. JASON Hirschhorn: ujuvad punkti ja täpsust. Kas keegi tõesti kiiresti mulle hooletussejäetud ujukoma ja täpsus? Te kõik oli seda teha oma lahendamist, nii et teil on kõik tuttav. Või äkki ei te kõik. Keegi? Anna hakkas kohapeal. Ujukomajagamist ja täpsust. Milles on probleem? Jah. Victoria? VANESSA: Vanessa. JASON Hirschhorn: Vanessa. Vabandust. VANESSA: On vaid piiratud arvu numbrid, mida esindab sest sa oled, meie juhul 32-bit süsteemi. Nii et teil selline on moodustavad mõned numbrid. JASON Hirschhorn: Nii et täpselt õige. On ainult teatud kogus numbrid, mis võib olla esindatud. Kui sa korrutad kaks väga suurtes kogustes, see võiks ülevoolu summa ruumide pead esindama täisarv. Sellepärast mõnikord me kasutame pikka asemel int. See on rohkem ruume. See võib olla suurem number. Ujukoma täpsus on pistmist , kuid on ka pistmist Asjaolu, et pärast numbrid mitte alati esindatud. Vabandust. Las ma panen selle varundada. Kümnendmurruna 1,0 ei ole alati esindatud, nagu ikka, 1,000000000. Mõnikord on esindatud 1,000000001 või 0,999999999. See võib olla isegi 89 visatud seal kusagil. Nii et need kohaga numbrid ei ole esindatud täpselt nagu sa oleks loodame, et nad esindavad. Nii et probleem komplekt - see oli kaks? - lahendamist kaks, kus tegelesime ujukoma numbrid, kui tahtsime esindavad just seda, mida me tahtsime neid esindama arvu penne või mitu senti me korrutame need 100. Me ümardatakse neid. Ja siis katkestas kõik taga koma. See oli tagada, et nad oleksid tegelikult võrdne täpselt see, mida tahtsime neil võrdsed. Sest kui te võtate midagi, mis on float ja muuta see int, siis katkestas kõik paremale koma. Sest seal on mõned ujukoma ebatäpsuse, 100,000 võib olla esindatud 99,999999999. Ja kui sa lihtsalt lõigata kõike õige kohe, sa lähed saada vale number. Jah. Üliõpilane: mul oli küsimus umbes casting. Mis järjekorras see tekkida? Kui soovite teha float, sulgudes, 1 jagatud 10, see ei 1 jagatud 10, siis saad 0,1, siis keera see float? JASON Hirschhorn: Kui sa Ujuk 1 jagatud 10 - Üliõpilane: Jah, ja siis võrdub - Noh, see tavapäraselt on see võrdne - Jah. Sa tahad teha seda float, eks? JASON Hirschhorn: OK, nii et me ei kavatse kasutada, et rännata figuring Vastused nendele küsimustele kaudu kodeerimine. Sest sa oled ilmselt palju Nende minut küsimustele ning hea võimalus neid lahendada on läbi kodeerimine. Nii et me kodeerida seda praegu, ja siis me läheme tagasi ja koodi küsimus teil oli. Nii et esimene rida - Ma ei oleks kirjutanud -, mis on Esimene asi, mida me tahame teha, kui me avada uue faili gedit? Üliõpilane: Kaasa. JASON Hirschhorn Kaasa mis? Üliõpilane: CS50 raamatukogu. JASON Hirschhorn: OK. Mida peaks me hulka? Me lihtsalt kontrollida, mis juhtub kui te enamus midagi float. Aga mida me vajame, et lisada kui me oleme kavatsete kirjutada C programmi? Üliõpilane: Standard I / O. JASON Hirschhorn: stdio.h. Me tegelikult ei vaja, sest see programmi cs50.h, kuigi see on alati kasulik arvestada. Aga me alati vaja stdio.h. Õpilane: kodeerimist C? JASON Hirschhorn: Kui kodeerimine C. Nii et ma selle salvestada see. C failist. Ma saaksin kena süntaksi esiletõstmine. Kirjutasin void sees peamine. Mis void tähendab? Üliõpilane: ei võta käsurea argumente. JASON Hirschhorn: Void, tähendab see juhul peamine ei võta käsurea argumente. Teistel juhtudel, see tähendab funktsiooni ei võta käsurea argumente. Või funktsioon, kui ma kirjutada void main (void), mis ütleks, peamine on ei tule midagi. Nii void lihtsalt ei tähenda midagi. Mida ma kirjutan, kui ma võtab käsurea argumendid? Üliõpilane: int arc c string kaar v JASON Hirschhorn: int argc string argv. Kas see on õige? Õpilane: See char star argv sulgudes. JASON Hirschhorn: Nii et sa võiksid kirjutada string argv sulgudes või char star argv sulgudes, kuid teil on vaja kinnitada. Kuna argv on massiiv stringid, mäletan. See ei ole lihtsalt üks string. Nii string argv on, siin on üks string nimega argv. String argv sulgudes, siin on massiivi stringe. Nii int argc string argv sulgudes oleks midagi, mida ma ilmselt kirjutada. Nii et sa tahad salvestada täisarv? Üliõpilane: Jah, täisarv. Või sularahaga. JASON Hirschhorn: In float? Like, float x võrdub 1 jagatud 10. JASON Hirschhorn: OK. Kuidas printida välja Ujuk printf? Mida? Üliõpilane:% f. JASON Hirschhorn:% f. Mis on täisarv? d või i. Mis string? Üliõpilane: s. JASON Hirschhorn: s. Kuidas saada uus rida? Üliõpilane: Längkriipsu n. JASON Hirschhorn: Mida ma tagasi kui peamine töötab korralikult? Üliõpilane: 0. Kas mul on vaja kirjutada, et joon, kuigi? Õpilane: Ei OK, me ei kirjuta, siis. Kas igaüks lugeda, et? See tundub natuke väike. Kas kõik võivad näha, või peaks Ma teen selle suuremaks? Ma arvan, et kaamera, teeme see on natuke suurem, kuigi. JASON Hirschhorn: Kui ma tahan, et muuta see . C failina käivitatava, mis ma kirjutan? Üliõpilane: Tee test. JASON Hirschhorn: Vabandust? Üliõpilane: Tee test. JASON Hirschhorn: Tee test. Me rääkisime see rida varem. Rõkkama. Mida rõkkama? Koostaja nimi. Mis see on piir? Üliõpilane: Määrab see üles kasutamine GDB. JASON Hirschhorn: Komplektid see üles kasutamine GDB. See joon, mis see on? Üliõpilane: lähtekood. JASON Hirschhorn: See on lähtefaili. c failist. Mida need kaks joont teha? Või need kaks ei jooned. Õpilane: See nimesid ta proovile. JASON Hirschhorn: Nii kriips o ütleb: nime ei määra teisiti. Ja siin te helistate see test. Kui ma ei ole, et, mis see nimi on? Üliõpilane: a.out. JASON Hirschhorn: a.out. Mida see teeb? Üliõpilane: Viited matemaatika raamatukogu. JASON Hirschhorn: See ühendab aasta matemaatika raamatukogu. Me ei sisaldanud matemaatika raamatukogu, kuid sest see on nii tavaline, nad on kirjutatud make alati sisaldama matemaatika raamatukogu. Ja samuti sisaldab see CS50 raamatukogu. OK, nii et kui me loetleda, on meil käivitatava nimega test. Et täita seda, ma kirjutan test. Ma näen, et minu ujukoma, ootuspäraselt, on 0. Kas see - nii - Üliõpilane: Siis kui paned float nüüd, nagu te enamus seda float - JASON Hirschhorn Loo 1 float? Üliõpilane: Ei, enamus täis asi - jah. Kui sa seda tegid, oleks et muuta see 0,1? JASON Hirschhorn: OK, nii et tõesti kiiresti, 1 jagatud 10, need on täisarvud jaguneva. Nii et kui sa jagad täisarvud, nad 0, ja sa oled säästes et 0. float, sest kaldkriips on lihtsalt täisarv rajoon. Nüüd oleme pöördunud midagi arvesse sularahaga. Vaatame, mis juhtub. Me teeme testi. Nüüd me näeme, et see kaldkriips ei olnud täisarv rajoonis ulpis punkt rajoon. Sest üks tema argumendid oli enamus sularahaga. Nüüd ta ütles, käsitleda seda jaotus nagu me tegeleme ujuva punkti, mitte täisarvud. Ja nii me vastust ootame. Vaatame, mis juhtub - oops. Kui ma tahtsin printida rohkem kohaga laigud, siis kuidas ma seda teen? Üliõpilane: Point dot f või nii palju pärast koma, kui soovite. JASON Hirschhorn: Ma printida 10 kohaga laigud. Ja nüüd näeme me saada mingi imelik värk. Ja see läheb tagasi oma küsimus umbes ujukoma ebatäpsus. On imelik värk salvestatud siin. OK, see et teie küsimusele vastata? Mida sa veel tahad koodi kiiresti? Õpilane: Ma tahtsin näha, kas ei, kui sa vabanevad mõned pointer, kas see osuti ikka oli salvestatud see aadress, mis see oleks olnud osutades varem. JASON Hirschhorn: OK, nii teeme seda. Char star ptr, tekitab see muutuja nimetatakse ptr tüüpi char star. Kuidas kirjutada malloc? Alden? ALDEN: Just malloc. Aga see peab olema suuruse ja Sel juhul ma arvan, et sa osutades märk. Nii et see oleks märk. JASON Hirschhorn: OK, nii et rohkem üldiselt, Inside - olgem muuta. Toas malloc soovite number baitide hunnik. Üldiselt, mida oleme näinud, mida me oleme teeme, on me malloc stringid, näiteks või massiive täisarvud. Nii et kui me tahame 10 täisarvud või 10 tähemärki, 10 annab meile 10. Ja siis suurus tähemärki annaks meile, et suurus sümbolid, mis Sellisel juhul on 1 bait. Me saame 10 baiti. Kui me kirjutada suurus int, mis annaks meile 40 baiti. Seega rohkem üldmõistena, sees malloc on baitide arv, mida soovite. Sellisel juhul me saame 1 bait. Mis tundub imelik kasutamine of malloc, kuid meie eesmärkidel on mõtet. Nii et seal on see. Me helistada tasuta. Me vabaneda seda ja me kasutame ptr uuesti. Ja mida sa tahad vaadata? Õpilane: Ma tahtsin kontrollida, kas või ei oleks midagi, sees on. JASON Hirschhorn: Niisiis, kas ta osutas midagi? Üliõpilane: Jah, täpselt, kas siis oli tal mälu aadressi. JASON Hirschhorn: Nii et sa tahad et kontrollida väärtust ptr? Üliõpilane: Jah, täpselt. JASON Hirschhorn: Mida ma kirjutan siia kui ma tahan, et kontrollida väärtust punkt - mis see on, Jordan ütles väärtus? Või mis on salvestatud sees ptr? Üliõpilane: mälu aadressi. JASON Hirschhorn: mälu aadressi. Nii et kui ma kirjutan lihtsalt seda, siis see mulle väärtus ptr. Ja kuidas ma välja printida mälu aadressi? Mida vormingustringile jaoks mälu aadressi? Üliõpilane:% p. JASON Hirschhorn:% p. % S on string. % P pointer. Kas see on õige? See on õige. Nii ptr võrdub - see on veel midagi seal. See on ilmselt rohkem huvitav küsimus. Mida see rida teeb? Üliõpilane: SEG vigu. JASON Hirschhorn: Mis on? Õpilane: Ma arvan, et see seg vigu. JASON Hirschhorn: Hm? Õpilane: Ma arvan, et see seg süü. JASON Hirschhorn: Nii et see rida koodi, star ptr, mida Mis täht tähendab? Üliõpilane: sisu. JASON Hirschhorn: Jah. Mine saada sisu. Nii see läheb minema mälu tegeleda seal ja mulle seda. Ma kasutasin% c siin, sest seal on märke seal ladustatud. Nii et me läheme sellele aadressile meil just nägin - või siis see ilmselt natuke erinev see aeg käivitada programmi. Aga me läheme sellele aadressile mida me teame, on endiselt olemas ja vaata, mis seal on. Nii et see ei seg süü. See lihtsalt ei ole meile midagi. See oleks tegelikult andnud meile midagi, me lihtsalt ei näe seda. Ja see läheb tagasi see mõte - ja me ei hakka liiga palju seda, sest see on üle ulatus see muidugi. Aga me rääkisime siin, kui me läks piiridest massiivi 1, me ei pruugi saada hädas. Mõnikord, kui sa lihtsalt minema välja, 1, sa teed midagi valesti, ja sa võiks saada hädas. Aga te ei pea alati pahandusi. See sõltub sellest, kui palju halba te ei, sa lähed, et saada hädas. Mis ei tähenda, lohakas oma koodi. Aga see tähendab, siis programm ei alati loobuda, isegi kui te lähete kuhugi sa ei tohiks minna. Hea näide sellest on palju inimesi nende lahendamist 3, mis oli 15, ei kontrollinud piire pardal. Nii et sa vaatasid vasakule vaadanud õige, vaatasin üles, vaatas põhja. Aga sa ei vaadata, kui top tegelikult saab olema pardal. Ja palju inimesi, kes seda tegi ja välja, et nende programm töötas täiesti, sest kui kõnealune organ oli salvestatakse mällu, kui sa läksid üks kohal või kontrollida, et mälu aadressi, ei olnud midagi eriti jube sellest, nii et teie programm ei olnud läheb peale karjuma. Aga me ikkagi startida punkte kui sa ei kontrollinud, et kuna te tegid midagi, mida ei olnud peaks tegema, ja siis võiks olla saanud hädas. Koefitsiendid on, kuigi te ilmselt ei ole. Nii see on, et jaa, saame ikka minna seda. Ja me ei lähe Probleem selles asjas. Kui üritasime ei loe Järgmise 100 tähemärki, olime ilmselt pahandusi. Ja saate koodi lugemist järgmise 100 märki, kui soovite, tehes mõned omamoodi silmus. Jah. Üliõpilane: Kuna meil oli määratud, et ruumi tegelik väärtus, et me ei tegelikult oleks võimalik näha midagi. Kui me püüame seda, millega see võrdne meeldib c või midagi? JASON Hirschhorn: Hea küsimus. Kuidas ma seda väärtust - mida koodirida ma kirjutan on line seitse teha seda, mida sa ütlesid? Üliõpilane: Star ptr võrdub ühe quote c lõppu ülakoma. JASON Hirschhorn: Nii et paneb iseloomu, c, selles kohas, sest jällegi, et täht tähendab minna sinna. Ja kui kasutada vasakul küljel omistamisoperaatorile, mis võrdub kirjutada, et me ei hakka, et väärtus nii palju, nagu on sätestatud, et väärtus. Nüüd vaatame, mis juhtub. Panime sinna midagi ja see oli seal. Me kutsusime tasuta. Mõned asjad ilmselt juhtus hunnik. Nii et see ei ole enam seal. Aga jälle, me ei saa hädas sinna minna. Ma teen seda läbi koodi illustreerimiseks et on palju neid küsimustele, mis sul on, et nad on väga huvitav vastab palju aega. Ja nad on tõesti head küsimused. Ja saate aru neid läbi oma kui näiteks me ei ole osa. Jah. Üliõpilane: Sest sa ei saada pointer kuhugi, sa pead kasutada malloc? JASON Hirschhorn: Nii see läheb tagasi oma esialgse küsimuse. [? ?] Kas see on lihtsalt kohaliku muutuja? Malloc siin ei ole, et veenvad. Kasutamise malloc siin ei ole mis mõjuvad, sest see on lihtsalt kohaliku muutuja. Üliõpilane: Nii sa said char star ptr võrdub tere? JASON Hirschhorn: Oh. Nii et me läheme nüüd tagasi saada oma esialgse küsimuse. Ma arvan, et sa ei ole rahul minu vastus. OK? Niimoodi? Üliõpilane: Jah. Oota. JASON Hirschhorn: Ja kus sa tahad välja printida? Nii me välja printida string niimoodi? Üliõpilane: Huvitav. JASON Hirschhorn: Nii et see ütleb, et see argument on tüüpi tegelane. Nii et see peaks olema iseloomu. Üliõpilane: Lihtsalt võtab esimene. JASON Hirschhorn: Nii et see on see, mida ma enne ütlesin. Nagu ma ütlesin, see ei ole hoidmine string sees muutuja pointer. See ladustamiseks - Üliõpilane: esimene väärtus stringi. JASON Hirschhorn: aadress esimene väärtus string. Kui me välja printida seda, et me oleme saada raha sees osuti. Ja me näeme, et on tõepoolest mälu aadressi. Kas see on mõtet? Vabandust. Oota, kas see vastab teie küsimus, kuigi? Üliõpilane: Jah. JASON Hirschhorn: See rida koodi luua string ja seejärel teine muutuja pointer, mis on suunaga selle string, et massiivi. Jah. Üliõpilane: Nii et kui me läksime ühte mälu edasiste oleks me h? Kas see on salvestatud stringi? JASON Hirschhorn: Nagu me tegime - nii et see on väärtuslik teha. See on punkt aritmeetika, mis te varem näinud ja see peaks olema suhteliselt rahul. See on sarnane kirjalikult - kui me kirjutada rida koodi, oleme näinud hulgaliselt märke enne. See peaks andma meile teise väärtus selle massiivi, h. Kui me seda tegime, see peaks andma ka meile teine ​​väärtus, et massiivi. Sest see läheb mitte mälu aadressi esimene asi, kuid mälu aadress asi üks üle. Ja siis täht operaator dereferences et kursor. Ja veel, vaatame. Me saame h uuesti. Õpilane: Mida see käivitatav tähendab? JASON Hirschhorn: käivitatav on väljamõeldud sõna minna. Mine seda ja saada seda, mida seal on käivitatav pointer. See on lihtsalt väljamõeldud sõna eest. Üliõpilane: Kui me tahtsime print terve rida, kas me teha ampersand pointer? JASON Hirschhorn: OK, me oleme läheb pausi siin. Me lõpetame siin. Ampersand annab sulle aadressi asukohta, nii et kui sa ampersand kohta muutuja, see annab sulle aadressi kus muutuja on salvestatud. Ampersand pointer annab teile aadress ptr kus ptr on mälu. Me ei kavatse minna Selle näite. Saate aru, need asjad ise. Aga jälle, see võib isegi verging natuke kaugemale, sa pead teadma, ulatus see vahekokkuvõte - või selle viktoriini, pigem. Vabandust. Me edasi liikuda, sest ma meeldib teha üks kodeerimine probleem enne kui aeg on läbi. Ja me koodi, mis ma arvan on kõige kaalukaid nendest näited, atoi. Nii et see oli küsimus viktoriin kaks aastat tagasi. Ja mul on laual siin. Inimesed paluti edasi viktoriin - anti neile veidi rohkem tesxt sisse küsimus, kuid ma kõrvaldanud teksti, sest see oli tarbetu meie eesmärkidel nüüd. See oli lihtsalt mingi taust millistel atoi tegi. Aga te kõik teate ja on väga tuttav atoi. Ma soovitan teil kodeerida seda kohta paberilehele. Ma ka soovitan teil kasutada strateegia et oleme läinud üle Palju meie osakonda. Esiteks, veenduge, et mõistate mida atoi teeb. Joonista pilt või tulla mõned vaimse pilt see oma peaga. Seejärel kirjutada välja pseudokoodi eest. On viktoriin, kui kõik teil on pseudokoodi, vähemalt sa pane midagi maha. Ja siis map et pseudokoodi peale C. Kui teil on kontrolli oma pseudokoodi, nagu vaadata, kas midagi on 1, mis kataks kui seisund ja nii edasi. Ja lõpuks, Code programmi C. Nii et mine tagasi atoi ja võtab viis minutit kodeerida seda lehte paber, mis on tõenäoliselt umbes palju aega teil oleks võtta viktoriin kood atoi. Viis kuni 15 minutit, viis kuni 12, viis kuni 10 minutit, umbes summa aega sa kulutada seda küsimust viktoriini. Nii, et võta viis minutit nüüd, palun. Ja kui teil on küsimusi, tõsta oma käsi ja ma tulen umbes. [SIDE CONVERSATIONS] JASON Hirschhorn: OK, nii mis oli viis minutit. See oli ilmselt umbes summa aega sa kulutada, et viktoriin, võibolla pessimistlikuma sel ajal. Me veel kord natuke. Alustagem kodeerimine see. Ja kui me ei saa kogu aeg, vastused selle ja selle viktoriini küsimus on olemas, jälle, Fall 2011 on siis see küsimus ilmus viktoriin. Ja see oli väärt kaheksa punkti Euroopa viktoriin siis. Kaheksa punkti on kallite palju punkte on midagi väärt. Enamik küsimusi on vahemikus ning 1-6 punkti. Nii et see on keerulisem küsimus, kindlasti. Kas keegi oskab mind hakkas? Üldiselt, mida me et tahad teha seda toimida atoi loogiliselt? Mida me tahame teha? Nii et me ei kavatse kirjutada mõned pseudokoodi. Üliõpilane: Convert tähemärki arvesse täisarvud. JASON Hirschhorn: Convert tähemärki arvesse täisarvud. OK. Niisiis, kui palju märke on meil läheb vaja läbida? Üliõpilane: kõik. Üliõpilane: Kõik tegelased stringi. JASON Hirschhorn: Kõik märkide string. Nii et kui me tahtsime minna läbi iga märgi string, mis on jäänud C oleme näinud, mis on võimaldanud meil läbida iga märgi string? Õpilased: silmus. JASON Hirschhorn: silmus. Nii et me läheme ahela kaudu iga tegelane s. Siis mida me tahame teha, kui me eripära? Ütle, et me teeme möödunud 90. Me saame 9. See on iseloomu. Mida me tahame teha et märk 9? Üliõpilane: lahutama selle iseloomu 0? Üliõpilane: Lisa 0? JASON Hirschhorn: Lahuta seda laadi 0? Üliõpilane: Jah. JASON Hirschhorn: Miks sa tahad seda teha? Õpilane: [kuuldamatu] väärtus. Selle int väärtust. JASON Hirschhorn: OK, nii et me võtame märgi 9, lahutama selle iseloomu 0 saada tegelik täisarv 9. Sweet. Ja kuidas sa tead, et märk 9 miinus 0 iseloom on 9? Mis skeem ei te vaatate? Üliõpilane: On loogiliselt üheksa kohad 9 kuni 0. Või siis võiks vaadata ASCII tabelis. JASON Hirschhorn: ASCII tabelis. Aga jah, sa oled õige ka. Nii me lahutame 0. Nüüd on meil täisarv 9. Ja mida me tahame teha on? Kui meil on 90, see on esimene täisarv oleme, mida me tahame teha? Üliõpilane: ma panna ajutine täisarv massiiv, siis teha matemaatika see hiljem, et sellest saaks lõpuks. JASON Hirschhorn: OK. Üliõpilane: Te võite alustada aasta lõpus massiivi ja siis edasi liikuda nii et iga kord, kui te edasi liikuda, sa korrutada see 10. JASON Hirschhorn: OK. See kõlab üsna kaalukaid idee. Saame alustada lõpus meie massiivi ja me saame kasutada strleng. Saame kasutada strleng siin. Me saame pikkuse meie string. Alustame lõpus. Ja + esimene, me lihtsalt võtta, et täisarv, ja võib-olla loome nagu uus täisarv muutuja üleval kus me ladustamiseks kõike. Nii me silmus läbi iga char s tagurpidi, me lahutame 0, ja siis me võtame selle ja sõltuvalt kus see on, me korrutame by võimsus 10. Kuna esimene, mida me korrutada parempoolsem iseloomu? Üliõpilane: 10 0. JASON Hirschhorn: 10 0. Mida me korrutame teine parempoolsem iseloomu? Õpilane: [kuuldamatu]. JASON Hirschhorn: Mis on? Üliõpilane: 10 1. JASON Hirschhorn: 10 1. Kolmanda parempoolsem iseloomu? Üliõpilane: 10 2. JASON Hirschhorn: 10 2. Üliõpilane: Vabandust, ma ei saa aru mida me siin teeme. JASON Hirschhorn: OK, lähme tagasi siis. Nii et me ei kavatse saada aastal vastu võetud string. Sest me kirjalikult atoi. Me saame sooritanud string. Ütle, et me kaldume edasi string 90. Esimene asi, mida me teeme, on kehtestatud uus täisarv muutuja, mida me oleme lihtsalt kavatse luua nagu meie uus täisarv. See, mida me tagastama lõpus. Me peame minema läbi iga tegelane string, sest leidsime, et meil on vaja puudutada iga üks ja siis lisada see meie uus täisarv. Kuid me ei saa lihtsalt lisada selle number. Me ei saa lihtsalt võtta 9 ja Lisa 9 meie täisarv. See sõltub sellest, mida koht see on string. Me peame korrutama seda võimu 10. Sest see, kuidas alus 10 tööd. Nii et me ei kavatse saada tegelik isiksuse või tegeliku täisarv number, lahutatakse iseloomu 0 alates iseloom 9 nagu tegime lahutades iseloomu kapitali alates olenemata iseloomu meil oli üks need probleemid. Nii me tegelikult saada number vahemikus 0 kuni 9 salvestatakse reaalne number, ja me korrutada see võimsus 10 olenevalt sellest, kus me oleme string. Ja siis me liidame selle tagasi meie uus täisarv muutuja. Mis siis see näeks välja nagu oleks olla - me teha siin. Kui me möödunud string 90 - Õpilane: [kuuldamatu]. JASON Hirschhorn: Aga atoi võtab stringi. Nii et me läheme läbi põllumajandusettevõttes. Viime möödus 90. Me läheme tagant ette. Võtame 0. Õpilane: Mul on kahju. Võibolla see on loll. Kui me jõuame möödunud string, Miks on 90, mida me saada möödus? Kuna 90 on täisarv. JASON Hirschhorn: Kuna atoi võtab string ja muudab see täisarv esindatus, et string. Aga string 90 ei ole täisarv 90 või number 90. String 90 on massiivi kaks või kolm märki, pigem 9 iseloomu, 0 iseloomuga ja kurakriips 0 iseloomu. Ja me kirjalikult atoi seepärast, et Näiteks, kui te võtate käsk line argument, ja see on salvestatud argv, see on salvestatud stringi. Aga kui sa tahad pidada seda arvu, sa pead muutma selle tegelik täisarv. Mis me tegime üks meie probleem komplekti. Mis me tegime number meie probleem komplekti. Igaüks, kes võttis täisarv kui käsurea argument. Nii et miks meie atoi funktsioon võtab stringi. Nii et taas, meie näites siin, me oleme kavatseme viimane. Me lahutame iseloomu 0 sellest, et märgid 0 lahutatud iseloomu 0 annab teile tegelik arv 0, vastavalt ASCII matemaatika, mida me teeme. Kuna tegelased on esindatud teistsugune kui nende tegelik - iseloomu, näiteks väiketähed on 97. See ei ole - oops! See ei ole mida sa oodata seda, 0, näiteks. Nii et sa pead lahutama märk saada 0. Nii et me ei kavatse seda teha siin saada tegelik number. Ja siis me korrutame seda võimsus 10 sõltuvalt sellest, kus see on string ja seejärel võtta, et ja lisada selle oma koha omanik muutuja, et saaksime tulla meie viimane uus täisarv. Kas see on mõistlik kõigile? Nii et me ei kavatse kood Siin just nüüd, sest me oleme saada vähe aega. Vabandan ajastus, et. Aga see on see, mis loodetavasti sa oleks olema võimeline tegema viktoriin - kell Äärmisel juhul saan selle pseudokoodi välja kirjutatud. Ja siis, kui me kirjutada pseudokoodi, tegelikult me ​​võiks seda teha päris kiiresti. Iga rida märkusi me kandsime siin tõlgib umbes üks rida C koodi. Kuulutatakse uus muutuja, kirjalikult loop, mõned lahutamine, mõned korrutamine ja mõned ülesanne. Me tahaks ilmselt ka soovi kirjuta tagastamise liin. Me võime ka taha panna mõned kontrollid siin. Jah. Üliõpilane: Nii et me saame ravida s kui tegelik string? Sest ma tean, et see on lihtsalt aadress. Meeldib, kuidas sa saad pikkus string on läbi? JASON Hirschhorn: Nii et kuidas pikkus string? Strlen. Üliõpilane: strlen, jah. Aga kas te panete s kui argument on? JASON Hirschhorn: Nii strlen võtab char star. Ja selgub, et char star, ja see hoiab lugedes, kuni see jõuab kurakriips 0. strlen oli tegelikult üks teised programmid me ei kavatse kood. See on veel üks hea üks kood. See üks on natuke lihtsam, sest kui sa lähed mõelda, et kontseptuaalselt - Ma just ütlesin seda valjusti - strlen järgmiselt pointer ja peab minema ja lugedes ja jälgida kuni jõuad längkriipsu 0. Üliõpilane: OK, sain aru. JASON Hirschhorn: Nii et palju õnne viktoriin 0 homme. Kui teil on küsimusi, ma tulen olema väljaspool pärast seda. Julgelt emaili mulle. Jõuda oma TF kui sa oled minu jagu saada või minu kiri, kui soovite. Kui soovite närvi ja saatke mulle email, freakout email, ma tulen saadan sulle tagasi, nagu naerusuu või, nagu nali või midagi. Nii et võid vabalt teha ka. Õnne veelkord ja ma näen teid kõiki järgmisel nädalal.