SPEAKER 1: Tere kõigile. Me alustada. Ma arvan, et inimesed on ikka veel olema filtreerimise. Kuid aja huvides, et saaksime saada teid siit välja õigel ajal, me ei kavatse hakata. Nii et tere tulemast CS50 Quiz 0 ülevaade. Neile, kes pole veel aru saanud veel, teil on küsimus kolmapäeval. Hoo. Kui te ei ole alustatud õpib veel või ei märganud, et see eksisteerib veel, Viimase viktoriinid ja kogu teave Sinu viktoriin olete cs50.net/quizzes. Seal on mõned päris head kraami seal, Viimase viktoriine alates viimase 10 aastat, samuti teavet selle viktoriini ja teemad mis kaetakse. Niisiis alustame. Nii et te võiks meeles pidada, esimene päeval klassi David oli neid lampe. Nii et sisuliselt kõik, mis läheb kapoti alla arvuti on teha binaarne. Binary tähendab, mida see kõlab nagu 0-ja 1-d. Sellel on kaks väärtust, mis võib olla esindatud. Nii nagu ka esimesel päeval jagu kui David sisselülitamist valgust pirn esindama kohta, või 1, meie arvuti mõistab binaarne nagu 0-ja 1 aasta, sisse või välja lülitada. Põhitõed Binary. Iga koht on esindatud aastal aluse kaks. Nii et teil lisada 2 kuni 0 1 kuni 2 kogu tee üles. Selleks et arvutada, mida teie binaarne on kohaga, siis järgige seda võrrandit tüüpi asi. Kui sul on 1 üheski neist kohtadest, sa korrutada see iganes rajada see on, lisage see üles, ja saad koma. Nii see on, kuidas sa loota 5 kahendsüsteemis. Just nagu see, mida me teeme on viimase slaidi see on, kuidas sa kujutavad 1 kuni 5. Samamoodi, nagu ka saab lisada ja lahutama kümnendsüsteemis või aluse 10, või tõesti mingit alust on võimalik lisada ja lahutada kahendsüsteemis. Täpselt, mida te ootate, kui te lisada kaks üles, kui see võrdub suurem kui 1, kannad 1, et see 0, ja seda veel, et viis, vaid nagu te ootate regulaarselt koma või muu alus. Lahe. Nii nagu ma enne ütlesin, kõik, mis läheb kapoti alla meie arvuti tehakse 0-ja 1-või binaarne. Niisiis, kuidas me väljendame, näiteks tähtede või numbritega või tähtedega? Ja vastus sellele on ASCII. ASCII on kaardistamise vahel tähemärki et me tavaliselt näha Inglise keeles nagu on, B, C on, rõhutada, kriipsud ja midagi sellist. Ja see kaardistab et ASCII väärtus. ASCII väärtus on lihtsalt number, et saab aru arvuti. Ja just nagu saate teha lisaks ja lahutamist numbritega, mida saate teha, neid ASCII väärtused. Nii selles näites, mida on see välja printida? Jah, nii lihtsalt ruumi B ruum C ruumi D. Kuhu mu hiir minna? Pange tähele, saate määratleda int 65. Ja kui teil on vaja printida, et viia protsenti C, see saab tõlgendada, et kui iseloomu ja trükib välja A. Samamoodi saab deklareerida seda paalia. Ja kui sa seda välja printida, kasutades protsenti C, siis see tõlgendama, et kui protsenti D. Ja just nagu saate lisada number, võite lisada tegelased on ASCII väärtused, käesoleval juhul. Nii et natuke pointer kõigile. 5, kui string, ei tegelikult võrdne 5. Niisiis, kuidas võiks me muuta string 5 täisarv 5? Mingeid ideid? Jah. Nii et kui meil on 5 string, me saame lahutada 0. Ja see annab meile 5. Ja samamoodi, kui meil on 5 kui täisarv, lisada, et string 0. Ja see annab meile string 5. Lahe. Nüüd meenutavad tagasi loengu, kus me rääkisime algoritme. Niisiis, kuidas me tegelikult tahame arvuti teha huvitavaid asju? Tead, lihtsalt lisades ja lahutatakse numbrid ja trükkimine asjad ei ole et põnev. Tavaliselt me ​​tahame, et meie arvuti täidab mingi algoritmi. Midagi veidi keerulisem kui lihtsalt lihtne aritmeetika. Algoritm on lihtsalt samm-sammult komplekt ning juhised, kuidas sooritada teatud task-- Just nagu retsept. Sa võid mäletan esimesel päeval klassis, kus David oli meil loota tuba inimesi ja kui palju inimesi toas olid. Sa võid kasutada loendamist ükshaaval. 1, 2, 3, 4. Sellisel juhul lineaarne algoritm. Kuid David tutvustas algoritm sul loendada inimesed ruumis kus igaüks seisab, ütlete teie numbrit teisele isikule, lisada, et number üles ja üks inimene istub. Ja sa kordama. See on üks tüüp algoritm. Me saame analüüsida, kui tõhus algoritm põhineb see tekib aja jooksul. Aga räägime natuke rohkem sellest hiljem. Nii et kõik algoritmid saab ka kirjutatakse pseudokoodi. Pseudocode on just inglise keelt nagu süntaks kasutada esindama programmeerimiskeelt. Näiteks, kui me tahtsime küsida kasutaja vist mu lemmik number, et me Võib-olla pseudokoodi sellisena. Saa kasutaja arvan. Kui oletus on õige, siis ütle neile nad on õiged, muidu ütlen neile nad ei ole õiged. Ja pseudokoodi on viis kergesti esindavad idee või algoritm. Nüüd tahetakse tegelikult kirjutada seda keelt, et arvuti võiks mõistmist. Nii et me võiks kirjutada meie pseudokoodi ja tõlgendada seda arvesse lähtekoodi. Seni lähtekoodi peab järgima Lisa teatud süntaks programmeerimiskeelt. Ja siiani on CS50, me kasutan enamasti c. Nii et see võib olla lähtekoodi c. Hiljem muidugi sa öösel tuled kontaktis teiste programmide keeltes nagu PHP. Või kui sa isegi võtta teistesse klassidesse, siis võiks teha Java, Python või isegi OCML. Kuid meie C programmi keelt, on see kuidas me võiksime kirjutada lähtekoodi pseudokoodi algoritm, mis Ma lihtsalt varem kirjeldatud. Niisiis, kuidas arvuti tegelikult sellest aru? Nagu ma enne ütlesin, see vaid tõesti mõistab nulli ja ones. Niisiis, kuidas see saada allikas koodi midagi, mis võib olla arusaadav? Noh, meil on midagi nimega kompilaator. Kui te mäletate tagasi enamiku oma psets, siis tuli mingi programm kirjutatud dot c fail. Ja siis oleks tüüp mark. Nii et mida teha teed? Sa võid kirjutada make kompileerida programmi, sest kellestki-- kes kirjutas oma p kogum; ilmselt David-- loodud make faili. Ja see ütleb teeb teadma, et käivitada oma koostaja, nimetatakse rõkkama, et tahe siis kompileerida lähtekoodi vastuväiteid kood, mis on nulli ja need et arvuti aru saab. Aga veidi hiljem, me läheme põhjalikumalt umbes koostajad. Nii meenutavad pset 0, where-- jah, teil on küsimus? Sihtrühm: [kuuldamatu]? SPEAKER 1: Jah. Ma arvan, et nad tegelikult peaks olema internetis. Jah. Sihtrühm: Kas see on nagu [kuuldamatu]? SPEAKER 1: See ei ole. Olete cs50.net/quizzes. Sihtrühm: Slash viktoriinid, kärpida 2013 kaldkriips 0 ja klõpsa kaudu viktoriinid 2013 ja viktoriin 0, vaadata jagu slaidid. SPEAKER 1: Jah, kui te soovite tõmmake see üles ja vaata seda oma oma arvuti, see on hea ka. Ütle, et jälle. Sihtrühm: [kuuldamatu]. SPEAKER 1: Jah, [kuuldamatu] on fiktiivne muutuja. Oh, jah? Sihtrühm: [kuuldamatu]? SPEAKER 1: Ei, streigid ei ole eksami. Kahjuks tema küsimus oli, oli lööb eksami. Ja see ei ole. Nii pset 0, kutid peaks olema kõik rakendada midagi kasutades nullist. Ja me õppisime mõned põhilised programmeerimine ehituskivid kasutades nullist. Võtame pilk mõned Nende ehitusplokkide mis moodustavad programmi. Esiteks on Boolean väljend. Loogiline väljendeid on need ja 0-või midagi, mis on kaks võimalikku väärtust. Sellisel juhul on õige või vale, sisse või välja lülitada, ja jah või ei. Näide lihtne, väga lihtne, programmi, mis kasutab Boolean väljendus siin. Nii et Boole'i ​​avaldised kasulik olla, meil on Boole'i ​​operaatorid. Need on operaatorid, mida saab kasutada võrrelda teatud väärtusi. Nii et meil on ja ega ole võrdne, väiksem kui või võrdne või suurem võrdne ja väiksem kui või suurem. Aga need ettevõtjad ei ole väga kasulik kui me ei saa ühendada need tingimustel. Nii et te võiks meeles pidada nullist ja oma p seab, et me pidi tingimustel. Need on sisuliselt nagu kahvlid loogika oma programm, mis täidab vastavalt sellele, kas tingimus on täidetud. Nii et üks tingimus, et meil oli kasutatakse palju kordi on see muidugi on kui muud, kui, ja muud tingimused. Siin on näide sellest, kuidas võite seda kasutada. Kas keegi teab, vahest lihtsalt kasutab kui avaldused kõik tee alla salme, kui mujal, kui ja teine ​​ühendada? Jah? Sihtrühm: [kuuldamatu]. SPEAKER 1: Täpselt. Nii et kui mul oleks, kui kogu tee alla selle Muide, isegi siis, kui see tingimus tagasi Tõsi, see on jätkuvalt testides kahe järgmise. Ning arvestades, teine-kui muidu avaldus, kui üks tagastab true, teised ei ole kontrollitud. Kõik küsimused selle kohta? Lahe. Nii et te kasutate, kui-teine ​​ja teine avaldus, kui sa tead, et ta saab ainult üks neist juhtudest. Nii et me teame, kui x on väiksem kui 0, siis on Kindlasti ei kavatse olla suurem kui 0. Järgmine, teine ​​ehituskivi et me oleme õppinud on silmused. Meil on kolme tüüpi silmuseid. Sest silmad, samas silmuseid, ja teha samas silmuseid. Ja üldiselt, kui sa istuda kirjutada midagi, sa pead otsustama milline kolmest soovite kasutada. Niisiis, kuidas me otsustada, milline neist? Me üldiselt kasutada loop kui me teame, Mitu korda me tahame kinnitada, läbi midagi või mitu korda tahame täita ülesanne. Me kasutame samas silmuseid, kui me vajame tingimusel, et olla tõsi, et hoida töötab. Ja me kasutame seda, kui väga sarnane aega, kuid me tahame, et meie koodi käivitumise ajal vähemalt üks kord. Nii et samal ajal, kõik, mis on ta teeb käivitatakse alati vähemalt üks kord. Pidades samal ajal, see ei pruugi üldse töötada, kui tingimus ei ole täidetud. Küsimusi on? Nii struktuuri jaoks silmus. Te olete kõik näinud seda. Sa initsialiseerida ta. Sul on mingi haigus. Nii näiteks võime initsialiseerida kui i on 0. i on väiksem kui 10. Ja i ++. Väga lihtne, et me oleme teinud. Sest kuigi loop, samamoodi, pead et on mingi initsialiseerimise mingi tingimus, ja mingi uuendus. Nii saame rakendada meie jaoks silmus ka kui samas silmus, kasutades seda. Ja sarnaselt do samas silmus, Me võib-olla mõned initsialiseerimise täita midagi, ajakohastab seda ning siis kontrollige seisukorras. Nüüd funktsioone. Panime kõik koos. Me võiksite kirjutada mõned sellist funktsiooni. Ühine funktsioon, mida võiks olen näinud juba on peamine. Peamised on funktsioon. See on naasmise tüüp int. See on funktsiooni nimi, peamised. Ja see on veel argumente, argc ja argv. Nii peamine on vaid funktsiooni. Muud funktsioonid, mida oleks võinud kasutada, printf-- printf on funktsioon-- GetInt, toupper. Aga need juhtumisi olnud rakendatakse meile mingi raamatukogu. Kui te meeles pidama, sh Selle CS50.h raamatukogu või standard I / O raamatukogu. Jah, küsimus? Sihtrühm: Kas peamine lihtsalt omane c? Kas see lihtsalt selline [kuuldamatu]? SPEAKER 1: küsimus on kui peamine on omane c. Ning jah, kõik funktsioonid on peamine ülesanne. See on selline, mis on vajalikud arvuti teada, kust alustada töötab koodi. Sihtrühm: Nii et te ei saa [kuuldamatu]? SPEAKER 1: Ei On veel küsimusi? Lahe. Nii nagu võite kasutada funktsiooni , mis on kirjutatud, saate ka kirjutada oma funktsiooni. See on funktsioon, mis keegi võiks kirjutanud arvutada mahu ning q, näiteks. Seal tagastamise tüüp siin, sel juhul int, meie funktsiooni nimi q ja meie parameetrite loetelu. Ja pange tähele, et teil on kirjutada andmeid tüüpi parameeter soovid kasutada või siis funktsioon ei teada, millist parameeter ma peaksin aktsepteerides. Niisiis, käesoleval juhul me tahame täisarv kui meie panus. Miks võib tahame kasutada funktsioone? Esiteks, suur organisatsioon. Nad aitavad lõhkuda oma koodi rohkem organiseeritud tükkideks ja muuta oleks lihtsam lugeda. Lihtsustamine. See on hea disain. Kui sa loed koodijupi ja peamine ülesanne on tõesti, tõesti pikk, siis võib olla raskem Põhjus sellest, mis toimub. Nii et kui sa jaotada see funktsioone, oleks lihtsam lugeda. Ja uuesti-võime. Kui teil on patakas kood, mis kuramuse nimega või käivitada mitu korda, asemel ümberkirjutamist, et kood 10 korda Teie peamine ülesanne, siis võib tahad seda kasutada. Ja siis iga kord, kui on vaja kasutada, et koodijupi, kõne funktsiooni. Nüüd, kui me mäletame tagasi tühjalt, me ka rääkisime mõned mõisted, millest üks on keere. Teema on mõiste mitmekordne järjestused kood täidesaatva samal ajal. Seega arvan, et tagasi päeval, kui Taavet oli kutid loota off arvu inimesed ruumis. Sisuliselt, mis toimub aasta on kõik kutid olid töötab eraldi teemad. Ja need niidid üheskoos saada mingi vastus. Samamoodi Scratch, kui teil on mitu sprites, võite on kass ja koer. Ja nad oleksid samaaegselt töötab oma skripte. See on näide väliskeermestamiseks. Ja teine ​​mõiste, mis oli kasutusele kriimustus oli üritusi. Ja üritusi, kui mitu osad koodi üksteisega suhelda. Scratch, see oli siis, kui kasutatakse saade kontrolli ja kui ma Saate plokke. Ja ka aastal Ülesanded 4 nägime natuke sündmuste samuti. Te võib-olla kasutada Gevent raamatukogu. Ja seal oli üks funktsioon waitForClick kus sa ootasid kasutaja klikkima. Ja kliki, sel juhul oleks korral ja oodake click on oma sündmus. Ja ka kogu reklaamide psets ja tööd oma psets, siis võisid puutuda mõned neist käskudest. See on see, mida sa kirjutasid oma terminali aken või mis iganes aknas , mis näitab üles oma g redigeerida, sisuliselt, navigeerida oma arvutis. Nii näiteks, LS loetleb kataloogi sisu. Tee kataloog luuakse uus kaust. CD, muutus kataloogi. RM, eemaldada kustutab faili või mõne kataloogi. Ja siis eemaldada kataloog eemaldab kataloogi. Sihtrühm: [kuuldamatu]? SPEAKER 1: Jah, kindlasti. Vabandust, küsimus oli, kui te soovitan panna see aasta spikker. See võiks aidata. Kui sul on ruumi, võite panna see. See on ka lihtsalt üldiselt piisavalt hea meeles pidada, sest kui sa seda kasutada võiksite lihtsalt on see meelde. See teeb teie elu palju lihtsamaks. Kas ma oma küsimusele vastust? Nüüd, me rääkisime natuke Lühidalt raamatukogudes. Kuid kaks peamist need, mis me oleme kasutades siiani käigus on standard I / O ja CS50. Milliseid asju on kantud in standard I / O raamatukogu? Jah, seni oleme kasutatakse printf. In CS50 oleme kasutatakse GetInt ja getString. Ja andmete tüüp string ka juhtub deklareeritakse see CS50 raamatukogu. Räägime natuke rohkem sügavuti umbes kuidas raamatukogud töötavad ja kuidas nad suhelda oma ülejäänud kood. Aga need on kaks peamist need, mis me on kokku puutunud seni käigus. Tüübid. Need on hea meeles pidada, kui palju iga liik on esindatud või kuidas palju baite iga tüüpi requires-- int, 4 baiti; char, 1 bait. Float on 4 baiti. Mis on topelt? Sihtrühm: [kuuldamatu]. SPEAKER 1: Jah, nii float aga kahekordistada. Aga kaua? Sihtrühm: [kuuldamatu]. SPEAKER 1: OK. Mis on pikk? Sihtrühm: [kuuldamatu]. SPEAKER 1: Jah, kahekordistub int. Jah. Sihtrühm: [kuuldamatu]. SPEAKER 1: Pikk [kuuldamatu]. Ja siis pikk pikk on kahekordne. Sihtrühm: Ei, ei. Kaua on lihtsalt int. See sõltub arhitektuur enne [kuuldamatu] ja int on ühesuurused. [Kuuldamatu]. SPEAKER 1: Nii pikk ja int on sama. Ja siis pikka on topelt int. Lahe. Ja siis, mis on viimane tüüpi? Sihtrühm: Pointer. SPEAKER 1: Jah, me oleme õppinud natuke vihjeid. Ja hoolimata sellest, mida osuti on juhtides to-- see võiks olla char star või int star-- see on alati 4 baiti pointer. Küsimused, mis? Jah? Sihtrühm: [kuuldamatu]? SPEAKER 1: Nii pikk ja int on Samal selles CS50 seade. Sihtrühm: seade on täielikult vahetatavad. SPEAKER 1: Jah. Nii et siis pikk pikk on topelt int. Sihtrühm: See on 32-bitine? SPEAKER 1: 32 bit, jah. Sihtrühm: Nii [kuuldamatu]? SPEAKER 1: Jah, kui see ei ole selgesõnaliselt öelda, siis peaks võtma 32 bit. Sihtrühm: Oleks midagi öelda nagu eeldades arhitektuur nagu aparaat. 64 bit, vaid asjad, mis muutus on pikad ja suunanäitajaks. Nad mõlemad [kuuldamatu]. SPEAKER 1: Jah? Sihtrühm: Küsimus. Nii ühel praktika viktoriinid küsib ta umbes allkirjastamata int. Niisiis, kuidas oleks, et määrata alates int [kuuldamatu]? SPEAKER 1: allkirjastamata aastal on ka 4 baiti. Aga milline on erinevate umbes allkirjastatud int ja allkirjastamata int? Sihtrühm: [kuuldamatu]. SPEAKER 1: Õige. Üks võimalik esindada negatiivsed väärtused. Aga kuidas see seda teha? Sihtrühm: [kuuldamatu]. SPEAKER 1: Jah, see säästab 1 natuke esindama märk. Allkirjastatud on üks natuke, et tähistab märk. Ja allkirjastamata lihtsalt on kõik positiivsed. Sihtrühm: OK. Nii et te ütlete, et topelt ei kaks suurust ujuki? SPEAKER 1: Double on kaks korda suurus float, jah. Sihtrühm: Kuidas pointer pikk pikk [kuuldamatu]? SPEAKER 1: Seega on küsimus selles kuidas kursor pikk long-- kuidas on see, et ainult neli baiti, kui pikka oma 8 baiti. Seega pidage meeles, mis on osuti, Sisuliselt on väga baasi väärtust. Sihtrühm: [kuuldamatu]. SPEAKER 1: Jah, nii et osuti on lihtsalt mälu asukoht. Nii et see ei ole oluline, kui palju ruumi et osuti osutab. See vajab ainult 4 baiti jälgida Selle mälu asukohta. On veel küsimusi? Lahe. Nii et viimane asi, mida ma pean on standard väljund. Sa peaksid kasutama neid sageli piisavalt, et sa ei mäleta. Aga see, kui me kasutame printf, näiteks. Ja meil on need kohatäitjaid, mis kutsuti vormingu tähistamine. Niisiis protsenti c char, protsenti i jaoks int, ja me saame kasutada ka protsenti d. See on sama asi. Kuid üldiselt on CS50 me proovida kasutada protsenti i. Protsenti f float. Protsenti ld kaua kaua ja protsenti s string. Samuti oleme kasutanud vähe Nende põgeneda järjestusi. Näiteks längkriipsu n uue liiniga. See on ainult siis, kui sa vormindamist Sinu kood print f. Jah? Sihtrühm: Mis on protsent d eest? SPEAKER 1: Seega on küsimus on see, mis on protsendi D? Protsenti d on ints. Protsenti d ja protsenti i on sama. Sihtrühm: Mis vahe on längkriipsu n ja längkriipsu r? SPEAKER 1: Seega on küsimus, mis on vahe tagasilöögi n ja tagasilöögi r? Ma arvan längkriipsu r on-- Sihtrühm: Nii längkriipsu r lihtsalt tähendab, tagasi rea algusesse ilma tegelikult läheb uuele reale. Nii et kui teil on vaja printida längkriipsu r ja te mine tagasi rea algusesse siis printida rohkem kraami, siis kirjutatakse asju, mis on juba [Kuuldamatu]. Arvestades, n tegelikult läheb uus line ja läheb [kuuldamatu]. SPEAKER 1: Noh, kõik muud küsimused? Olgu. Ma anna see ära Dan, kes jätkab. [APPLAUSE] DAN: võibolla tõesti. Seega ma räägin veel lai hulga ideid klassi, mis on umbes esindaja nädal kaks ja alguse nädal kolm liikumahakkamist valamise, mis on lihtsalt viis ravimiseks väärtus teatud tüüpi kui väärtus erinevat tüüpi. Nii et me saame teha seda tähte kuni ints, ujukite ints ja kaua igatseb kahekordistada. Kõik need asjad saab kasutada viisidel ravivad mõned arvuline väärtus miinus char nagu mõned teised arvuline väärtus. Nii et seal on mõned küsimused selle, ning Muidugi, mis tekib siis, kui enamus asjad nagu float ints. Nii et see on natuke imelik. Meil on ujuk, mis on 1,31. Me korrutame selle 10000. Ja siis me printida kui int. Mida see väljund? 10000 korda 1,31. Nii 13.000, on see, et vist? Sihtrühm: Ma arvan, et see on 10000. DAN: Nii et ma korrutades 10000 Enne ma casting ta. Sihtrühm: Oh. Kas siis ei tekiks üks 9 ja mõned 0 numbrid? DAN: Te olete mingi imelik numbrit. Nii õige, see on 1,3 korda 10.000. Nii et see on 13000. Ja see ekstra kummaline-- Sihtrühm: 13100. DAN: 13100. Aitäh, Rob. Ja see ekstra weirdness-- Selle 9,9-- on lihtsalt sellepärast, et see valu sattus ümardamisest kus see ei tohiks olla. Jah. Sihtrühm: casting juhtub pärast veel midagi? DAN: Nii, kuna mul on see trükis, seda teeb seda korrutamine enne selle kas see valu. Sihtrühm: [kuuldamatu]. DAN: Ma arvan, et see seaks esimene, jah, mis oleks 10000. Midagi veel? Lahe. Nii et see on 13099. Miks see nii on? Ebatäpsus. Ujub ei ole täiuslik. Nad võivad esindada ainult numbreid teatud arvu komakohani. Nii et kui me välja printida 8 sig viigimarju see float, saame omamoodi kole vaadata number. Ja seda sellepärast, 1.31 ei saa täpselt esindab lihtne volitused kaks masinat. Nii et see jõuab võttes lähim arvan, mis jõuab olles natuke madal. Mõtet? OK. Nüüd, sisse on teistmoodi teeme tingimisi avaldused, kus kõik me hoolime on ühe muutuja. Nii et see konkreetne näide, et me oleme saada täisarv kasutaja. Ja siis me vaatame mida see täisarv on. Arvatavasti on see number üks kuni neli. See, mida me palume. Nii et sa ei lülitiga muutuja nimi. Siis loodud juhtudel võimalik väärtustab see võiks olla. Nii et juhul kui üks, ütlevad, et see on madal. Ja siis sa murda välja tulla lüliti seisundis, sa ei jätka. Järgmise juhul-- nii juhul kaks ja juhul meeter kui see on juhul kaks ta lihtsalt kukub alla esimene rida koodi ta peab koos kohtuasja kolm kuni ta näeb murda. Nii et põhjus, saad puhul üks ainult print madal on, sest ma on see break siin. Kui ma, ütleme, ignoreeritakse seda break-- kui ma viskasin selle breakaway-- oleks printida madal, ja siis oleks prindi keskel, ja siis see murraks. Nii katkestused on oluline osa Lüliti tingimused ja nad peavad seal olema. Iga juhtudel, mis ei ole selgesõnaliselt haldab default juhul lüliti ja peaks enamus. Sihtrühm: Nii 1, 2, 3, ja 4 oleks n? DAN: Väärtused, mis n võib olla. Jah. Jah? Sihtrühm: Nii et kui teil on et [kuuldamatu]? DAN: Te printida madal ja seejärel oleks printida keskel ja siis murraks. Sihtrühm: Miks see printida keskel, kui [kuuldamatu]? DAN: Nii kõike juhul enne vaheaega kuulub. Nii et juhul kui üks print on all juhul üks on see järgmine print. Jah? Sihtrühm: [kuuldamatu]? DAN: Nii et see arv on vaid eriti väärtus, et see muutuja võib võtta, eks? Kas on mõtet? Jah. Sihtrühm: [kuuldamatu]? DAN: Jah, juhul kaks oleks printida keskel ja siis murda. Sihtrühm: [kuuldamatu]? DAN: Ma arvan, et iga? Mis muud tüüpi andmeid saab üle minna? Sihtrühm: saate lülitada mis tahes tüüpi andmeid. Aga see tähendab ainult midagi üle tähemärki ja ints ja värki, sest kui sa oled vahetamise üle pointer mis ei ole tegelikult mõtet, vahetamise üle koormused, kui see isegi olgem sa seda teha, sest ujukoma täpsus, siis ei oleks tõesti taha seda teha niikuinii. Nii et päris palju, lihtsalt ints ja tähemärki ja värki. DAN: Jah, see on siis, kui sul on selge väärtused, et sa tead, ma arvan, võib olla et lüliti on tegelikult kasulik. Hea? OK. Ulatus on vahemikus, mis on deklareeritud muutuja laieneb. Nii et see väike patakas kood mul on, oleks täis vigu. Ja põhjus on I kuulutas selle int i piires kuuluvad käesoleva silmus. Ja siis ma üritan viidata, et i väljapoole, et loop ulatust. Ühesõnaga, saate mõelda ulatus kas midagi deklareerida kus sees komplekt looksulg ainult olemas nendes looksulg. Ja kui sa püüad ja kasutada, et muutuja väljaspool neid looksulg, saate saada vea tõlkija. Jah? Sihtrühm: Nii et see ei tööta? DAN: See ei tööta, jah. Strings. String char *. Nad on täpselt sama. Nad on lihtsalt vihjeid tähemärki. Ja iga stringe, mis teil on peaks lõppema koos tagurpidi kaldkriipsuga null, mis on just c konventsiooniga. Seda nimetatakse NULL terminaator. Ja NULL-- kapitali N, kapitali U, kapitali L, kapital ma-- ei ole sama NULL terminaator. See on kursor. See on iseloomu. Nad on väga erinevad. Mäletad seda. See toimub viktoriin, ilmselt. Ma ei ole näinud viktoriini. Jah? Sihtrühm: Nii et NULL on, ütleme, pointer? DAN: Jah. Sihtrühm: Mida tähendab [kuuldamatu]? DAN: Kui ütleme, malloc nimetatakse, kui sa ei ole piisavalt mälu, et saada olenemata suurusest palud, malloc tagasi NULL. See on põhiliselt siis, kui see funktsioon on peaksid tagasi pointer, sa vaja vaadata vastu NULL, sest NULL on päris hea-- see, omamoodi, prügi väärtus. See on null niipalju kui osuti läheb. Iga kord, kui te helistate funktsiooni mis tagastab viida. Sa lähed soovite kontrollida, et olla kindel, et see osuti ei ole NULL sest NULL on väga levinud. See on omamoodi prügi tagasi. Nii et kui midagi ei lähe küll, lihtsalt tagasi NULL asemel. Sihtrühm: [kuuldamatu]? DAN: Jah, ja see on see. Sihtrühm: [kuuldamatu]? DAN: Spell, kuna seda. See on NULL terminaator. See on väiketähed N-U-L-L, kui sa õigekirja see. Sihtrühm: Ja ma läksin tagasi ja seda testinud. Ja kui sa püüad panna ujukoma väärtuse lüliti, siis see karjuda ütles avalduses nõuab väljendus täisarv tüüpi. DAN: Ole lahke. Aga jah, milline oli küsimus jälle? Sihtrühm: [kuuldamatu]? DAN: Nii kapitali N, kapitali U, kapitali L, kapital L on tegelik c asi. See on NULL pointer ja tahe ainult sellisena käsitleda. Sa ei ole kunagi proovida ja õigekirja NULL iseloomu ja näe muul viisil kui see. Jah? Sihtrühm: Nii et taas char max või midagi lisades, oleks see kehastavad sama funktsiooni kui [kuuldamatu]? Sihtrühm: Nii et te silmas peate tagastamise char max alates getchar või mis see on? Sihtrühm: Jah. Sihtrühm: Jah, nii üldise termin kõigi nende asjade on kontroll-väärtused. Nii nagu naasmist int max alates GetInt ja char max alates getchar, see on peaks olema nagu kõik korras, kui need asjad on tagasi meile midagi läks valesti. Vihjeid me just on Selle kontroll-väärtus, et igaüks lepib. Ja see on asi, mida tagasi kui asjad lähevad halvasti. Nii char max mida me kasutame esindada midagi nagu NULL või getchar. Sihtrühm: Seega, kui olete katsetamise getchar, kas sa lihtsalt panna NULL? Kas see muudab? DAN: Te ei saa lihtsalt vaadata NULL. Sa pead kontrollima char max sest tagastatav väärtus on funktsioon iseloomu ei viida. Jah? Sihtrühm: See küsimus puudutab seda, stringi pikkus. Kas see sisaldada NULL iseloomu? DAN: Ei Ja see on tegelikult, kuidas string pikkusega teab lõpetada, sest see läheb läbi Teie array märkide kuni see näeb NULL iseloomu. Ja siis see on nagu kõik Olgu, ma olen teinud. Sihtrühm: [kuuldamatu] viis? DAN: Tere oleks viis. Yep. Nii massiivid on pidev blokeerib mälu. Nad on vahetu juurdepääs, öeldes, nimi massiivi ja siis, lokkis traksid, olenemata index tahad minna et, nad indekseeritud nullist läbi pikkus massiivi miinus 1. Ja nad deklareeritud tüüpi asi, mis sa salvestamine massiivi nimi massiivi ja seejärel suurusele vaatamata on selle massiivi. Nii et see on char massiiv pikkusega kuus, mis on need väärtused. Jah? Sihtrühm: [kuuldamatu]? DAN: Jah. Sihtrühm: [kuuldamatu]? DAN: Kui teil on, mis toimub arvesse array juba tehtud. Nii et sa võiksid täpsustada selle asemel näiteks, ütleme, char, mis iganes nime oma massiiv on tühi sulgudes võrdub lokkis traksidega H komaga E komaga L komaga L komaga O komaga NULL iseloomu ja lokkis traksidega. See oleks ka töö deklaratsioon. Sihtrühm: [kuuldamatu]? DAN: Siis peate suurus juba tehtud. Sihtrühm: [kuuldamatu]? DAN: Jah. Võibolla tõesti. Käsurea argumendid on viis saada sisend kasutaja argumente peamine. Main kaht argumenti. Mitmeid argumente, mis on edasi mööda käsurea ja string vektor või stringi massiivi kõiki argumente. Nii et kui ma, ütleme, nimetatakse funktsiooni nagu dot välja 1 ruum, 2 ruumi, kolm, argc oleks 4. Ja argv 0 oleks dot välja. Argv1 oleks 1. argv2 oleks 2. argv3 oleks 3, et konkreetse juhtumi puhul. Jah? Sihtrühm: [kuuldamatu]? DAN: viimane element massiivi sest massiiv on pikkus argc pluss üks argB, viimane element on NULL pointer. On argc pluss 1. Nii juhtub, et ma just ütlesin, see oleks argv 0 on dot välja. argv 1 on 1. argv2 on 2. argv 3 3. argv 4, mis on üks suuremaid kui argc oleks NULL. Ja see on NULL pointer. Jah. Ja see on sellepärast, et string on char star on osuti. Nii peab see olema sama tüüpi. Jah? Sihtrühm: Kaks küsimust. Nii et üks, mis on vahe seda ja getString muud kui üks tüüp kasutaja mootorit? Ja kaks, on see salvestatud viimaste mälu? Nii nagu getString oleks olla [kuuldamatu]? DAN: Kus on see salvestatud? Ma ei tea, kus see on salvestatud. Sihtrühm: Nii, tegelikult, sa tead, kuidas iga funktsioon, mida nimetame seda argumendid hoitakse virnas? Nii argc ja argv on argumendid, et peamine ja nad on virnas, või tegelikult veidi üle, mida te arvate, kui algusest korstnat. Mis oli teine ​​osa küsimuse? Sihtrühm: Mis siis [kuuldamatu]? DAN: Jah, see on lihtsalt teistmoodi saada sisend kasutaja. See üks on veidi tõhusam ja see mugavamaks skripte, sest sa võib lihtsalt mööda argumente oma peamise funktsiooni asemel, et oodata kasutajatele, kui sul ei ole kasutajat. Sihtrühm: Ja jah, saan stringid oleks [kuuldamatu]. Oleks salvestada asju, mida vaja. DAN: Jah? Sihtrühm: [kuuldamatu]? DAN: Jah, argv 0 sisaldab alati dot kaldkriips funktsiooni kõne. Jah? Sihtrühm: [kuuldamatu]? DAN: Jah, iga argumendid lõppes NULL iseloomu, sest nad on stringid. Sihtrühm: [kuuldamatu]? DAN: Jah, argv argc on NULL pointer. Sihtrühm: [kuuldamatu]? DAN: Oh yeah. Jah, vabandust. Sihtrühm: Nii [kuuldamatu]? DAN: Seega on küsimus selles, kui teil on olnud käsurea dot kaldkriips dot välja 1, 2, oleks mitmeid käsurea argumendid on kaks või oleks kolm? Sihtrühm: Ma arvan, et see ei ole tegelikult küsimus. Ma pigem öelda, oh, sa ei liigu käsurea argumente, kui Ilmselt sa nimetatakse funktsiooni. Nii et ma pigem vokaalselt välistada funktsioon käsurealt argumendid, kuigi see on lisada argv. DAN: Aga kui see oli test-- Jaa ja ka siis kui sa midagi öelda nagu argc võrdub 3, sa oled ohutu seismise. Jah? Sihtrühm: [kuuldamatu]? DAN: Ma arvan, et kui selle asemel, nimetades seda aastal argc ja string argv sulgudes kuid hoitakse sama liiki ja just helistas neile midagi nagu ja b, oleks see ikka toimib? Ja see oleks ikka töö, siis oleks lihtsalt-- asemel argc-- soovite kasutada ja b. Jah? Sihtrühm: [kuuldamatu]? DAN: Seega on küsimus getString on kavatse hoida mälu hunnik sest getString on char *. See salvestab mälu hunnik, sest see nõuab nüüd malloc reaalset rakendamise getString. OK, liigub. Turvalisus. Nii et olla tõeliselt turvaline, sa tugineda ei üks ja lubate keegi juurdepääsu mis tahes teie andmeid, mistõttu igaüks ehitab oma masinaid, oma operatsioonisüsteemide kõik oma programmide nullist, ja loomulikult ärge ühendage muid masinaid Interneti kaudu. Nii et arvutid on ebakindel. Nad on tõesti. Me peame usaldama teisi inimesi. Ja idee turvalisus on see, et sa oled püüab piirata summa usun, et teil on vaja. Ja üks vahend sa seda on läbi krüptograafia. Krüptograafia on sisuliselt meil on saladusi. Mõnikord peame läbima oma saladused koos läbi, ütleme, internet või muid asju. Ja me ei taha, et inimesed teada neid saladusi. Nii et me krüptida oma saladusi arvesse nii et me loodame, et keegi saab nuputada. Nii et me used-- kaudu muidugi selle class-- asjad nagu Caesar salakiri ja [Kuuldamatu], mis on mõlemad väga ebakindel, kuidas krüptimine asju. Nad on lihtne aru saada, mida nad oled ja mida teie riigisaladusi. Reaalses maailmas kasutab palju keeruline krüpteerimisskeemid. Ja me ei hakka palju rohkem. Silumine. GDB on parim. Ma veel kord rõhutada. Kasutage GDB kõik kord iga kord, kui on probleem. Käsud, mis on kasulikud GDB on murda, mida läbivad kas liin number, funktsiooni nime, sisuliselt Kui teie kood soovid peatuda, ning olema võimeline võtma kontrolli. Prindi võtab muutuv ja prindib mis iganes see muutuja on sel hetkel oma täitmise. Järgmine kolib oma täitmise mööda üks samm. Ja astuda samme sees funktsiooni Teie täitmine. Muud asjad on joosta, mis on see, kuidas sa tegelikult käivitada oma koodi. Jätka võtab kõik vajalikud sammud et saada järgmisele murdepunkt. Ja seal on palju, palju muud. Vaata neid. Nad on suurepärased. Jah? Sihtrühm: [kuuldamatu]? DAN: Jah, mis on silur. Nii siluri on programm, mis saab siluda oma programmi. See ei ole programm, mis leiab vigu jaoks sa, kuigi see oleks tore. Ja viimane minu jaoks on otsing. Nii liiki otsing, mis me rääkisime umbes Selle klassi on lineaarne otsing, mis on lihtsalt, et teil vaadata läbi iga element otsing ruumi, üks element korraga, kuni leiad, mida otsite või kuni jõuate lõpuks oma otsingut ruumi, kus juhtida te ütlete, et te ei suutnud leida element, et sa olid otsivad. Ja see võtab parimal pidev ajal mis on 0 1 ja halvimal lineaarne aega, mis on 0 n. Binary otsing, mis vajab räpane elemente. Lähed keskel oma elemendid, kas element otsite on suurem või väiksem kui element et sa oled keskel. See on suurem, te ütlete, et põhja Teie otsing ruum on oma praegust asukohta, keskel, ja sa taaskäivitada protsess. Kui see on väiksem, siis vaata öelda et kura jah, mis toimub? Sihtrühm: [kuuldamatu]? DAN: Jah. Mingit sorti, mis on õpetanud klass on aus mäng test. [Naer] DAN: Ja see, et sa ei ole olnud seda teha probleem komplekt, see on õiglane mäng test. Sihtrühm: Kas me läheme selle üle, kuidas to-- DAN: See on läinud üle. SPEAKER 2: Tegelik kood [Kuuldamatu] on study.cs50.net. Nii et kui te vaatate tava probleem ühendamise omamoodi lehel study.cs50.net on koodi rakendamise liita omamoodi. Nii et sa ei pea rakendama ise täna. Aga veenduge, et saate aru, see pigem kui lihtsalt meeldejätmist see. Sihtrühm: [kuuldamatu]? SPEAKER 2: merge sort lehekülje kohta study.cs50.net on praktikas probleem, et kui klõpsate kaudu probleem, päris lõpus on lahendus, mis on nende ühendamise Sorteeri rakendamist. Aga veenduge, et saate aru, see mitte lihtsalt meeldejätmist see kopeerida või alla. Sihtrühm: Ja täiesti kehtiva probleem eksam oleks midagi siin on nimekiri. Mida see nimekiri näeb välja pärast üks samm valikud sort või sisestamise sorti või mis iganes. Üks täis iteratsiooni nimekirja. Nii et isegi kui sa ei jõua, kellel on vaja kood, sa pead aru saama, et piisavalt teada, kuidas see läheb tuleb muutes selle massiivi. DAN: See on see minu jaoks. [APPLAUSE] LUCAS: Hei kõigile. Minu nimi on Lucas. Ma lähen rääkida rekursioon, kõik kehvasti, et me oleme õppinud, ja natuke kõik suunanäitajaks. OK? Nii et kõigepealt rekursioon. Mis tähendab see, et funktsioon on rekursiivne? Sihtrühm: nimetab ennast. LUCAS: OK, nimetab ennast, jah. Nii nagu see pilt, näiteks. See on nagu pildi sees kohta pilt ja nii edasi. Nii näiteks saab peate-- Dan et rääkisin binaarne otsing. Üks viis, kuidas binaarne otsing on kirjutan on see, et sa oled püüdes leida number. Nii et te lähete keskel. Ja siis vaadake, kui numbrid on aastal vasakul ja paremal. Ja siis, kui sa teada, number on saab olema vasakul, see on sama asja nagu teed otsing uuesti, kuid just vasakul nimekirjas. Nii see on, kuidas see kõlab nagu see on rekursiivne. Nii et miks te poisid on rekursiivne lahendus merge sort. OK, nii et siin on näide. Ütleme, et ma tahan, et valida kõiki numbreid 1 kuni n. Ma ei mõista, et summa n number on n pluss n miinus 1 kuni 1. Aga siis, kui ma vaatan n miinus 1 pluss n miinus 2 pluss 1, mis on sama asja nagu liidetakse numbrid kuni n miinus 1. Nii et ma ei saa öelda, summa on võrdne summaga võrdub n pluss summa n miinus 1. Kas on mõtet? Ja ma ka oleks midagi nn aluspõhimõtted, mis seisneb selles, et summa arvuga kuni nulli oleks null. Seega niipea, kui ma saan number null, ma saan lugedes. Kas on mõtet? Nii et siin on näide sellest, kuidas Võin seda rakendama. Nii et mul on see funktsioon mõned. See võtab täisarv n. Nii et siin ma kõigepealt kontrollida, kui n on väiksem või võrdne nulliga. Nii et kui see on väiksem või võrdne nulliga, I tagastab null, mis on meie baasi puhul. Muidu ma ei saa lihtsalt tagasi n pluss summa numbritega üks n miinus üks. Mõtet? OK. Nii et siin on, kuidas see välja näeb. Sul on summa 2 võrdsete 2 pluss summa 1. Ja mõned 1 on 1 pluss summa 0, mis on 0. Mõtet? Nii et kui me vaatame korstnat oma programm on see, mida ta näeb. Esiteks, meil on peamine funktsioon. Ja siis peamine funktsioon nimetatakse summa 2. Ja siis summa 2 läheb öelda, oh, summa 2 võrdub 2 pluss summa üks. Nii lisan summa 1 kuni pinu. Ja summa 1 läheb helistada summa 0, mis on ka kavatse lisada korstnat. Ja siis kõik need need, mis on üksteise peale tagastama enne teisi ones saab edasi. Nii näiteks, siin summa 0, Esiteks läheb tagasi 0. Ja siis valida summa 1. Siis summa 1 läheb tagasi 1 kuni summa 2. Ja lõpuks, summa 2 läheb tagasi 3 esilehele. Kas on mõtet? See on tõesti oluline mõista, kuidas stack töötab ja proovida vaata, kas see on mõistlik. OK, nii sorteerimine. Miks on sorteerimine oluline, kõigepealt? Miks me peaks hoolima? Keegi? Anna mulle näiteks? Jah? Sihtrühm: [kuuldamatu]. LUCAS: Jah, OK. Nii saate otsida tõhusamalt. See on hea viis. Nii näiteks on meil palju asju, tegelikult meie elus, et on järjestatud. Näiteks sõnaraamatud. See on väga oluline, et kõik sõnad mingi Selleks, et me pääseb lihtsalt. Nii et see, millest ta räägib. Võite otsida tõhusamalt. Mõtle, kui raske see oleks, sõnastik, kus sõnad on juhuslikus järjekorras. Sa pead vaatama, päris palju, iga sõna, kuni leiate sõna, mida te otsite. Kui te kasutate Facebook ka, kui sa vaatad oma sõpradele, et sa oled näeme, et Facebook pane lähemale sõbra peal ones et sa ei räägi nii palju. Kui te lähete kõik viis põhja Teie sõber loetelu, sa lähed, et näha, inimesed, et sa ilmselt isegi ei pidage meeles, et sinu sõbrad. Ja see on sellepärast, et Facebook kehvasti Sõprade põhjal, kui lähedal te neid. Nii korraldab andmed. Samuti Pokemon. Nii et näete, et kõik Pokemons on numbrid. Ja see on nagu lihtne juurdepääsutee andmeid. Sihtrühm: Juurdepääs Pokemon. LUCAS: Jah. Sihtrühm: [kuuldamatu]. LUCAS: Yep. OK, nii et valik omamoodi. Valik omamoodi läheb valima Väikseim sorteerimata väärtus nimekirja iga aega iga iteratsiooni. See on nagu omamoodi, et te oma peaga, kui sa üritad sorteeri nimekiri käsi. Põhimõtteliselt kõik, mida teha, on teil vaadata võtta väikseima numbriga. Sa pane see Sorteeritud nimekirja. Ja siis sa ootad Järgmise väikseim number. Ja siis edasi teha seda ja nii edasi. Nii et valik omamoodi on põhimõtteliselt sa valida iga kord väikseim sorteerimata väärtus. Pane lõpus järjestatud osa nimekirjast. Ja hoida teeme seda. Nii et olgem kiiresti näha, millised see näeb välja. Nii et siin on järjestatud ning sortimata nimekirja. Nii järjestatud nimekirja, see on esialgu tühi. Ja siis ma lähen valima väikseima numbriga, mis on 2. Nii et ma saan number 2 ja panin aastal ees nimekirja. Ja siis ma vaatan järgmiseks väikseim element, mis on 3. Nii et kui ma panen selle lõpus on järjestatud nimekirja. Ja siis ma edasi teha. Ma leian, 4 ja pane see lõpus. Leia 5 ja pane see lõpus. Ja vaadata, kuidas kõik need ajad, et Ma ütlen pane see lõpus on Põhimõtteliselt vahetada kaks väärtust. OK? Ja siis viimane, sa lihtsalt veel üks element. Nii et see on juba järjestatud. OK, nii sisestamise omamoodi. Insertion Sort sa lähed on ka et asi, millel on järjestatud ja sorteerimata nimekirja. Ainuke asi on see, et iga kord, kui olete lisatud element järjestatud nimekiri, sa lihtsalt vali element, mis ees on sorteerimata nimekirja. Ja siis sa lähed leida, mida positsioon peaks olema sorteeritud osa nimekirjast. Vaatame, mis see nii on see on mõttekam. Nii et esialgu näiteks Püüan sisestada number kolm Sorteeritud nimekirja osana. Nii et nimekiri ei ole midagi. Nii et ma ei saa lihtsalt panna number 3. Nüüd, ma tahan, et lisada number 5 Sorteeritud osa nimekirjast. Nii et ma vaatan number 5. Märkan, et see on suurem kui 3. Nii et ma tean, et see peab olema pärast 3. Nii et panin 3 ja 5. Siis ma tahan, et sisestada number 2. Märkan, et number 2 on tegelikult viimane siis nii 3 ja 5. Nii et ma tegelikult panna see kõik kuidas alguses nimekirja. Nii et ma pean, selline, suunata kõik elementide järjestatud nimekiri, et ma saaks teha ruumi number 2. Siis ma näen number 6. Ma näen, et see peaks olema pärast 5. Nii et ma panin selle sinna. Ja lõpuks, ma vaatan number 4. Ja märkan see peaks olema vahemikus 3 ja 5. Ja siis panin selle sinna ja nihe kõik muud elemendid. Mõtet? Bubble Sort. Nii mull sorteerida on põhimõtteliselt mida sa oled läheb tegema-- me nimetame seda mull Sorteeri sest sa lähed läbi list-- see on tegelikult parem, kui ma lihtsalt näidata soovid see-- ja sa lähed võrrelda külgneva numbrid. Ja sa lähed vahetada oma seisukohti, kui nad ei ole õiges järjekorras. Ühesõnaga, mis läheb juhtuda, on siin näiteks sul on 8 ja 6. Sa tead, et sorteeritud tellimus tegelikult on 6 ja 5, eks? Nii et sa lähed, et vahetada tellimusi. Siis ma näen, 8 ja 4 siin. Ja ma teen sama asja. Ma vahetada uuesti. Ja lõpuks, 2 ja 8. Ma ka vahetada neid. Seda nimetatakse Bubble Sort sest pärast iga iteratsiooni, tegelikult, suurim arv nimekirjas saab kõik viis lõpuks nimekirja. Kas on mõtet? Sest see hoiab see vahetada ning selle liigutamine paremale. OK, nii et see on teise iteratsiooni. Oleks sama asi. Ma teen ühe swap ja Seejärel viimane. Ma, et ei ole vahetustehingud ja nimekiri on sorteeritud. Nii Bubble Sort, me põhimõtteliselt hoida läbimas nimekiri ja vahetada asjad kuni märkan, et ma ei teinud iga vahetustehingute teed, et korduse mis tähendab, et nimekiri on juba järjestatud. Mõtet? Räägime natuke umbes sõiduaega. Nii et te poisid mäletan Big O, O, ja Theta? Jah? OK, mis on Big O kõigepealt? Sihtrühm: [kuuldamatu]. LUCAS: Jah, seda nimetatakse halvima runtime, mis tähendab lihtsalt, et see on kui palju te ootate programm võtta joosta. Nagu, nii of-- Selles juhul-- n. Elementide arvu nimekiri halvimal juhul. Like, halvimal võimalikul. Nii Bubble Sort näiteks meil Big O n ruut. Miks me peame seda? Miks on Bubble Sort Big O n ruut? Sihtrühm: [kuuldamatu]. LUCAS: Jah, halvimal juhul saab mis ma pean tegema, n iteratsiooni. Nii et iga iteratsiooni läheb tuua suurima elemendi lõppu nimekirja. Nii et halvimal juhul on see, et mul on mida teha, et asi n korda. Ja kõik need ajad, ma pean teha n vahetustehinguid, sest mul on võrrelda iga kahe elemendi. Nii et miks see on n ruudus sest see on n korda n. Siis valiku sort on ka n ruut sest iga iteratsiooni, ma pean vaadata iga element aastal nimekirja. Ja siis leida väikseim, mis tähendab, et ma pean vaadata läbi n elementi. Ja mida ma pean tegema, et n korda, sest Mul on valida, kas kõik n elementi. Sisestamise sort on ka n ruut sest halvimal juhul teeb olla üks, ma pean sisestada n numbrid, eks? Nii et ma juba tean, et ma lähen on n iteratsiooni. Kuid kõik need numbrid, kui mul oleks vaatama kõik numbrid järjestatud nimekiri ja pane see kõik viis aastal ees, mis on n ruudu sest see on n korda n uuesti. Mõtet? Aga omega? Sihtrühm: [kuuldamatu]. LUCAS: See on parim stsenaarium. Nii et see on nagu, et palju kordi, sorteerimine, parimal juhul on Kui loend on juba sorteeritud. Nii et sa tõesti ei pea midagi teha. Bubble Sort on parim stsenaariumi korral n. Kas te teate, miks? Sihtrühm: [kuuldamatu]. LUCAS: Jah, kui teil jälgida kas andmed suhe olnud vahetustehinguid või ei, kui teil on midagi seadistada tõsi, kui seal oli iteratsiooni, kui nimekiri on juba valmis, põhimõtteliselt Mis juhtub on ma lähen Proovige vahetada iga kahe naaberelemendid. Ma näen, et puuduvad vahetustehinguid. Ja ma lihtsalt tagasi kohe. Nii et see tähendab, et ma lihtsalt pidin nimekiri läbi üks kord. Nii et see on n, sest ma vaatan at n elementi. Miks valimine omamoodi n ruutu? Jah, isegi kui nimekiri on järjestatud jaoks iga iteratsiooni valikut sort, I on valida minimaalne element. See tähendab, et ma pean välja otsima üldse elementi sortimata nimekirja ja leida minimaalne iga iteratsiooni. Kas on mõtet? Ja sisestamise mõõk on N sest nii, et ma üritan sisestada numbrid ja kõik numbrid, kui ma proovige neid sisestada, ma näen, et nad on õiges asendis. Ma ei pea minema kontrollima kõiki teisi arvuga sortimata nimekirja. Nii et miks see on n. Mõtet? Ja mis on teeta? Sihtrühm: [kuuldamatu]. LUCAS: Mida, vabandust? Ütle seda uuesti. Sihtrühm: [kuuldamatu]. LUCAS: Täpselt. Nii et näete, et ainult valiku salvestatud Merge sort on teetast. Ja see on sellepärast, et sul on ainult beta kui mõlemad Big O ja Omega on sama. OK. Ja lõpuks, liita omamoodi on log n. Ja siis, kui Dan ütles, Merge sort on selline nagu samamoodi, et sa binaarne otsing. Nii saad nimekirja. Ja sa lähed pooleks. Ja siis lõigata väiksemates pooleks. Ja siis need ühendada. Te meeles pidada, eks? OK, nagu ta ütles. OK, viiteid. Mis on pointer? Sihtrühm: [kuuldamatu]. LUCAS: aadress. OK. Ma tean, et David näitab kamp videod Binky ja asjad juhtides üksteist. Aga mulle meeldib mõelda viiteid pelgalt aadress. Nii et see on muutuja, mis läheb salvestada aadressi. Nii et see on lihtsalt see eriline muutuja see on neli baiti. Pea meeles, et kursor midagi on alati neli baiti meie 32-bit masin nii juhtumi seadet. Ja see lihtsalt on asukoha Muutuva sees on. OK, nii et seal on see mälu, põhimõtteliselt. Nii iga ploki mälu on tegelikult etikett, mis on aadress slotty mälu. See tähendab, et ma ei ole osuti osutab kõik need aadressid. Nii et põhjus, miks me kasutame osuti on kui mul on meeles pidada, asukoha et konkreetse muutuja on mälu. Ja te meeles pidama, et üks neist juhtudel oli, kui mul on funktsioon kui mul on tõesti tahan, et sa swap reaalarvud, ma tegelikult saatma pointer. Ei muutuja. Kas te meeles pidama, et? Erinevus between-- Mis on nimi? Üleskutse väärtusest ja helistaja viidates, eks? OK, jah. Nii kõne maksumus. Kui sa lihtsalt saata muutuja toimida sa lihtsalt saata raha. Nii et te tegelikult saates koopia muutuja. Ja sinu programm ei hooli Aga kui sama muutuja tegelikult teeb koopia. Ja kutsudes viitega tähendab, et Ma tegelikult saates pointer muutuja. Nii et see tähendab, et ma saadan asukoht muutuja. Nii tajuvad mul asukohast muutuja, kui ma kutsun funktsiooni koos suunanäitajaks, ma olen võimeline tegelikult muuta andmeid, mis oli peamine. Mõtet? Kuigi, osuti on koopia, osuti on veel reaalne aadress muutuja, et ma tahan muuta. Mõtet? Nii et luua viiteid. Pea meeles, et osuti on alati tüüp, et ta sihib ja siis täht. Ja siis paned nime. Seega pidage meeles, et iga kord, kui teil on mis iganes täht, see on nagu kursor mis tahes muutuja tüüp, et teil oli. Nii et siin linnas, näiteks, et see on osuti ja täisarv. Ja siis char star on pointer char star ja nii edasi. Jah? Sihtrühm: Mis siis, kui meil on osuti n täht x. Ma tean, mis loob kursor x. Kas see ka deklareerida x täisarv? LUCAS: OK, nii et kui te ütlete, n täht x, sa ei loo viit muutuja x. Loote pointer nimega x. Sihtrühm: [kuuldamatu]. LUCAS: Nii et kui ma ütlen, n täht x, ma olen ütlesid, hei, mälu, ma lähen saada üks neid kolme kasti. Ja ma ütlen, et see saab olema x, mis on läheb osuti. Ja midagi huvitavat viiteid on see, et me ütleme, et nad on 4 baiti 32-bit masin. Ja selle põhjuseks on asjaolu, 4 baiti on 32-bitti. Ja masinaid, mis on 64 bitti tegelikult on viiteid aadressid mis on 64 bitti pikk. Nii lihtsalt see suurus aadressid masin on erinev. Nii Viitamine ja Dereferencing. On kaks operaatorit, et te peaksite meeles pidama. Esimene on ampersand. Teine on staar. Ärge saage segaduses, et linnas ja selle Star, sest mäletan, et Sel juhul on teil n star. See on nagu kogu asja koos. Ei ole n Space Star. Nii et see tähendab, et see tüüp. Pea meeles, et kui teil on muutlik täht, sa oled Kõne all. Kui teil on lihtsalt täht ja siis nimi varieeruv, see tähendab, et sa dereferencing osuti, mis tähendab, et te vaatate pointer, leida aadress on osutades, läheb see aadress, ja vaadates, kui teil seal. Nii et ma ütlen oma õpilastele, et kui teil on star, siis tuleb mõelda, et see on lühend sisu. Nii et kui teil on osuti ja te teha star pointer, see on sisu pointer. Nii et te lähete iganes seda osutades ja vaadata pidevalt sisu. Ja-märk on sama asja nagu aadress. Nii et kui mul on muutuv a-- nagu, olgem öelda, et ma tegin int võrdub 3-- kui ma tahan leida aadressi, et muutuja mälu, ma ei saa lihtsalt teha ampersand. Nii et see on aadress. Mõtet? Nii et siin on näide. See on puudu int b ja int c. Nii int võrdub 3 tähendab, et Ma lähen, et mälu. Ja ma leida pesa ja pane number 3 siin. Ja siis int b võrdub 4. Ma teen sama asja. Mine mälu ja pane number 4 ühes kastid. Ja int võrdub 5. Leia teine ​​kast ja pane number 5. Mis siis on see joon teed? n star pa võrdne-märk. Nii et kõigepealt n star pa. Mida ta teeb? Sihtrühm: [kuuldamatu]. LUCAS: Jah, nii n star pa esiteks kinnitab viit nimetatakse pa. Ja siis see määrates väärtuse et osuti olema aadress. Nii-märk. Siis, kui ma seda teen star pb, mis on star pb? Oh, vabandust. See on ka puudu. n star pb. Ma mõtlen star tk. Mul on nii kahju. See on sama asi. Aga nüüd ma olen hea ar luues pointer et B ja seejärel kursor c. Jah? Sihtrühm: [kuuldamatu]? LUCAS: Jah. Nii et kui te lähete mälu ja lähete kast, mis on tähis, PA, sa oled tegelikult läheb vt aadressi. OK? Jah? Sihtrühm: [kuuldamatu]? LUCAS: Jah, osuti on aadress. Ära kunagi unusta, et. See on nagu kõige olulisem osa kohta vihjeid. Seal on hoidmiseks ja aadress mõningal muutuja. Midagi veel? On veel küsimusi? OK. Nii viiteid ja massiivid. Pea meeles, et kui ma teen int massiiv 3, Põhimõtteliselt, mida ma teen on ma olen, kind kohta, kuulutab pointer. Nii massiiv on selline nagu kursor konkreetse koha mälus, kus ma eraldatud kolm teenindusaega täisarvud. Kas on mõtet? Nii et kui ma teen int massiiv 3, mida ma olen teeme, põhimõtteliselt on luua kolm pilude mälu. Nii et ma lihtsalt leida kolm teenindusajad mälu. Nii et kui ma seda teen, siis star massiiv, see Sisuliselt tähendab sisu massiiv, mis tähendab, et ma kustutan pointer, ma lähen selle asemel, et see osutab, ja panin number üks. Ja siis, kui ma seda teen star array pluss 1 see on sama asi, mis teeb massiivi Sulgudes üks, mis tähendab lihtsalt käin koht, et see osutavad. Ja siis pluss 1 marke mind minema ühes asendis. Nii et ma lähen seda seisukohta, tegelikult, ja pane number kaks. Ja siis lõpuks, kui ma massiivi plus 2, ma lähen sinna, kus massiivi osutavad. Ja siis ma liikuda mälu plokke. Ja siis ma pane number kolm siin. Jah? Sihtrühm: Nii star massiiv on lihtsalt öeldes väga esimene punkt. Ja võite lisada 1, lihtsalt sellepärast, Me oleme tegelikult alles viitamine, et esimene aadressi. LUCAS: Jah. Miks me näiteks öelda massiivi 0, array 1 ja 2 sõnad? Ma ei ütle, miks sa seda teed 0 1, 2, 3 asemel 1, 2, 3? Üks põhjusi on, üks, arvuti programmeerijad eelistavad alustada lugedes 0. Kaks on, sest kui sa seda teed massiivi 0, see on sama asi, mis teeb massiivi pluss 0, mis tähendab, et ma lähen selle seisukoha, ja ma ei ole jäta ühtegi mälu plokke. Nii et ma ei liigu ühtegi mälu plokke. Jah? Sihtrühm: [kuuldamatu]? LUCAS: Nii et ta küsib, mis on vahet tehes see või teed malloc. Üks erinevusi on, et int massiiv 3 on luua massiivi pinu. Ja kui ma malloc, see loob hunnik. Kas on mõtet? Niisiis, kuidas malloc tegelikult töötavad? Miks me isegi vaja kasutada malloc? Teie koostaja omamoodi arvud välja kõik muutujaid kuulutatud. Ja ta loob ruumi kõigile neist virnas. Nii et kõik teie muutujad lähevad olla kusagil virnas. Nii et siin on keskkonna muutujad. Ühesõnaga, ruum nende muutujate mälu on jaotatud at kompileerimise ajal. Nii et see tähendab, et arvuti on teadma kõik need muutujad varem. See ei pea teadma, mis väärtus sa lähed panna neid. Aga ta peab teadma, kuidas palju mälu vajate. Aga nüüd ütleme, et näiteks loote massiiv või võttes string, et te võtate kasutaja. Sa ei tea, kui kaua string saab olema, näiteks. Nii et sa ei tea täpselt, kui palju mäluplokke te eraldada, eks? Nii et see ei ole tegelikult mõtet sa öelda panna 100 tähemärki. Ja mis siis, kui kasutaja kirjutab 150? Sa lähed tuleb kruvitud. Ühesõnaga, te ei saa olla kindel, kui palju mälu teil on vaja eraldada kui sa kompileerida programmi. Sa tead, et on töö aeg. Nii et miks sa pead laduma. Nii hunnik läheb on mälu et sa eraldamise ajal Programmi kestuse töötab. Nii et põhimõtteliselt, kui sa malloc, mida sa teed eraldab mälu runtime, mis tähendab, et sa oled otsustamisel õigus sel hetkel, et sa peaks olema, et mälu. Nii et kui sa oled eraldamise. Kas on mõtet? Seega pidage meeles, stack on muutujad mis on loodud kompileerimise ajal. Ja siis hunnik on muutujad mis on loodud lähete koos malloc, näiteks. Sihtrühm: [kuuldamatu]? LUCAS: Nii getString on ei kutsu malloc. Lubage mul rääkida malloc ja Ma seletan getString. Nii malloc on sama asi kui mälu eraldamise. Nii, et see saab eraldada mälu hunnik. Ja see läheb tagasi pointer kui see mälu olid eraldatud hetkel. Nii et kui te teha-- siin example-- n star pointer. Ja siis osuti võrdub malloc suurus tolli korda 10. Ma loon pointer. Ja siis ma määrates, et kursor väärtus osutiga et malloc annab mulle. Nii et ma palun malloc saab eraldada ruumi 10 täisarvud. See, mida ta ütleb. Ja malloc annab mulle tagasi kursor selle koha. Mõtet? OK. I ja getString on põhiliselt teed helistage malloc nii et saate eraldada mälu jooksul tööaega. Pea alati meeles, et kontrollida null sest malloc läheb tagasi null kui ta ei saa mälu eraldada. Oletame, et te küsite naeruväärne mälu. Teie arvuti ei kavatse olla võimalik eraldada nii palju. Nii malloc lihtsalt läheb tagasi null. Nii et alati meeles, et vaadata, kas pointer, et sul on malloc on null või mitte, sest kui ta on, siis võite tuleb dereferencing osuti ja põhjustades pool vigu. Ja lõpuks, ärge unustage oma vaba mälu. Malloc loob mälu hunnik. Ja sul on vaba mälu enne programmi lõppemist. OK, see on kõik minu jaoks. Vabandame, Rob. Tänan. [APPLAUSE] LUCAS: Kõik viimasel küsimused enne Rob on? Ei? Jah? Sihtrühm: ma ei näe Selle ühe online. Kas olete laadinud seda veel? LUCAS: Ma arvan, et Dave on üleslaadimisel see varsti. DAVE: See saab olema postitatud. LUCAS: See oleks võrgus. Sihtrühm: See oleneb. LUCAS: See toimub? OK. Jah? Sihtrühm: [kuuldamatu]? LUCAS: Jah, sa peaksid vabastama kõik mälu, mis on pandud hunnik. Sihtrühm: [kuuldamatu]? LUCAS: Jah. Iga kord, kui teil on kultuuri malloc, siis peaks olema kultuur tasuta pärast te lõpetate selle muutuja. Nii malloc ja vaba on alati koos. Nende parimad sõbrad. Jah. Rob? ROB: Ma lähen kiiresti. Ja ka video pannakse üles. Mul on mic. OK, nii et nädalas viis asju. Esimene asi, mis meil on pinu. Seega pidage meeles, et seal on ainult üks korstnat kaadrit aktiivne funktsioon kõne. Me näeme, et teine. Ja ka meeles pidama, mida tegelikult läheb Iga freimi ei kavatse olla kohalikud muutujad meie funktsioonid, väiteid, mis on läbinud meie funktsioonid koos paari teisi asju, mida tegelikult ei pea muretsema. Nii et siin on näiteks programm, kus, teate, peamine on printfing tulu väärtus foo 4. suva lihtsalt läheb tagasi väärtus bar 4 komaga 6. Ja baar läheb määrata mõned kohalikud muutuja n võrdub 4 korda 6. Ja siis tagasi n. Nii et vaatame, korstna kogu tegelik iteratsiooni selle programmi. Nii et alt meie pinu. Pea meeles, et stack üles kasvab. Nii et alt meie virna me on freimi jaoks peamine. Kui programm käivitub, peamised alati saab olema alt meie pinu. Ja mis on sees meie freimi jaoks peamine? Nii et kuigi ei ole kohalik muutujate peamine, nagu ma enne ütlesin, oleme argc ja rgv võtavad ruumi sees peamine freimi. Nii et peamine on nüüd läheb helistada funktsiooni foo. Ja see tähendab, foo läheb saada oma freimi. Nüüd oleme sees funktsiooni foo. Ja mida on vaja minna suva on freimi? Noh, foo on argument n. Ja n on 4, sest see on, mida Peamised möödub nagu foo argument. Nüüd foo läheb helistada baar. Mis on baar läheb on sees tema "freimi? See on x on võrdne 4 y võrdne kuue. See pole veel kõik, et me ei kavatse olla aastal freimi sest bar Lisaks on kohaliku muutuja n. Ja n me seatud võrdne 24. Nüüd baar läheb tagasi n. Nii et baar on tagasi 24 freimi suva. Ja kuna baar on naasmas, et tähendab, et me popping freimi bar maha virna. Nii et kõik, mälu, et baar oli kasutades on nüüd ära pinu. Nüüd foo ka läheb tagasi 24 esilehele. Nüüd, et suva on tagasi, mälu et foo kasutas oma " freimi on ka läinud. Ja nüüd, peamised läheb helistada printf. Nii printf on lihtsalt üks funktsioon. Kui me nimetame printf, et see saab olema teise freimi jaoks printf funktsioon kõne. Mida me kulgeb printf? See, mis toimub minna selle freimi. Vähemalt on meil passib et protsenti i Kurakaldkriips n ja argument 24. See võib olla rohkem see freimi kui printf juhtub olema kasutades mõned kohalikud muutujad. Me ei tea. Aga kõik, mis läheb printf poolt freimi. See läheb täide printf. Siis printf on tehtud. Ta naaseb. Lõpuks peamine on tehtud. Main naaseb. Ja siis meie programm on tehtud. Jah? Sihtrühm: Kas olete näinud [kuuldamatu] argumendid [kuuldamatu] parameetrid? ROB: Nii et on olemas väike erinevus vahel argumente ja parameetreid. Ja tõesti, ühist rääkida, inimesed kipuvad lihtsalt segada neid kogu aeg. Aga parameetrid on ametliku nimi asjad. Nii argc ja argv on parameetrid peamine. Argumendid, mida sa tegelikult liigu nagu need parameetrid. Nii et kui ma kutsun foo 4, 4 on argument ma möödaminnes. Ja parameeter n, sees suva, võtab väärtuse 4 alates 4 oli argument. Sihtrühm: [kuuldamatu]? ROB: n on kohaliku muutuja baari. n on ikka kohalik foo, aga see parameeter foo. See ei ole kohalik muutuja. Jah? Sihtrühm: [kuuldamatu]? ROB: foo on lihtsalt helistades bar ja tagastamise iganes baar tulu. Sihtrühm: [kuuldamatu]? ROB: Jah, lihtsalt et näha, mitu korstnat raamid. Jah? Sihtrühm: Miks suva nimega enne printf? ROB: Miks suva nimega enne printf? Nii et ma oleks võinud selle asemel midagi teinud nagu int x võrdub foo 4. ja seejärel trükitud x. Kuid selle asemel, I kombineeritud funktsiooni sea ​​printf argument. Aga teate, et me ei saa tegelikult täidab kõne printf kuni me aru saada, mis foo 4 on. Nii me hinnata seda. Ja alles siis, kui see on tehtud lähed tagasi tulla ja hinnata seda. Jah? Sihtrühm: Kuna mõlemad baari [kuuldamatu] väärtus, miks me ei ole [kuuldamatu]? ROB: nad täiesti peaks olema int. See ei olnud püütud jooksul mitu keerdu. Seega peaks olema int baar ja int suva, sest need mõlemad naasevad täisarvud. Void on ainult siis, kui nad ei kavatse tagasi tegelikke väärtusi. Jah? Sihtrühm: Kui sul oleks joon Vastutasuks [kuuldamatu]? ROB: joon tulu? Sihtrühm: Jah. Like kui sa printf ja [kuuldamatu] oleks see printida kaks korda? ROB: Nii sees suva? Kui meil oleks printf siin? Sihtrühm: Jah. ROB: Nii et kui meil oli printf õigus Siit oleks printida üks kord. Kuna me nõuame foo kord paremale siin, siis me tabame printf. Siis me nimetame baar. Ja siis suva naaseb. Ja ongi kõik. Me ainult kunagi tekib printf kord. Jah? Sihtrühm: [kuuldamatu] printf helistades suva, sest me oleme esimene kutsudes printf ja siis me kulgeb argumendid. ROB: Nii et teoreetiliselt ei ole printf helistades suva? Seega ei ole. Just selleks, et c läheb täita neid asju on, enne kui saame helistada funktsioon, kõik argumendid Lisa funktsioon pea täielikult hinnata. Nii on see täiesti hinnatakse? Jah, see on lihtsalt string. See on lihtsalt raha. Siis on meil täiesti hinnata seda. Kui see on tehtud, nüüd on kõik tema argumendid on hinnatud. Ja nüüd me saame teha helistage printf. Jah? Sihtrühm: Üks küsimus. Kui teil on tühine funktsioon, must teil on tulu semikoolon? ROB: Sa ei ole vastutasuks semikoolon kui teil on tühine funktsioon. OK. Nüüd mõned hunnik asju. Nii hunnik on, kuidas me tegeleme dünaamiline mäluhaldus. Ja see on otseselt vastuolus stack mida me nimetame automaatne mälu haldamine. Nii korstnat, sa ei ole kunagi tegelikult on tegeleda, kui kohalikud muutujad surutakse ja hüppasid välja kõik Nende korstnat raamid ja kõik see kraam. Sa ei pea muretsema selle. See on automaatne. Nii hunnik on kasutusjuhendis. Ja [kuuldamatu] pärineb nende funktsioonid malloc ja tasuta. Nii et siin on veel üks programm. Kõik me teeme on mallocing täisarv. Me talletades seda täht x. Muidugi, me peame kontrollima näha, kui x on null. Siis me lihtsalt määrata, mida x on suunaga 50. Prindi mida x on suunaga, print x, ja siis vaba x. Niisiis, kuidas see tegelikult läheb otsima kui me vaatame meie stack ja hunnik? Nii et hakkame jälle. Alt meie virna nagu enne. Pea meeles, et sinu hunnik otse vastu korstnat? Nii et me ei kavatse olla top meie hunnik seal. Nii alt meie virna oleme meie freimi jaoks peamine. See on ruumi argc, argv ja me Nüüd on kohalik muutuja x, mis on int star. Nii et me ei kavatse kinnitada, käesoleva programmi kaudu. Esimene asi, mis meil on Kõne malloc. Nii et me teeme üleskutse malloc. Malloc on funktsioon. See läheb aina freimi. Mida me tõmmatakse malloc? See saab sisse minna magasini raami. Me möödume suurusest n, mis on 4. Nii et on läinud malloc. Mis malloc teha? See haarab meid ruumi hunnik. Nii et me ei kavatse minna hunnik. Ja me ei kavatse haarata 4 baiti laduma. Nii et olgem lihtsalt anda, et suvalise aadressi. 0x123 Lihtsalt teeselda, et on aadress, et on hunnik. Mis on tegelikult sees, et piirkond mälu aadressil Ox123? Prügi. Nii et me ei ole salvestatud midagi ta. Nii et nii palju kui me teame, et võiks olla midagi. Te ei tohiks eeldada, et see on null. See on kõige tõenäolisemalt ei ole null. Nüüd malloc tulu. Ja mida me siis teeme, kui malloc naaseb? Seame mida ta naaseb. Seame x on võrdne sellega, mida see on tagasi. Mis on see, tagastades? Ta naasis 0x123, kuna see on aadress ploki mälu, et see lihtsalt eraldatud hunnik. Nii et tagasi 0x123 x on nüüd, mis tuleb võrdne 0x123, mis piltlikult, me sageli teha kui x, mille tegelik nool, et blokeerida. Aga x on lihtsalt ladustamiseks aadressil. Nii et nüüd on meil kontrollida, kui x on null. See ei ole null. Meie sooviks, et see malloc õnnestunud. Nüüd star x võrdub 50. Nii star mäletab tähendab see minge sellele aadressile. Nii 0x123 Me minge sellele aadressile. Nii et jõuame sinna. Mida me teeme sellel aadressil? Me hoidmiseks 50. Nii et pärast seda joont, et on, mida asjad hakkavad nägema. Nii et nüüd on see enam prügi sinna. Nüüd me teame, et 50 on selles eriti aadress, sest seadsime ta selle. OK? Nüüd me ei kavatse trükkida f. Nii et kõigepealt me ​​printida star x. Mis on täht x? Jällegi, star x tähendab minna asi, et x on suunaga. Nii x salvestab 0x123 Mine seda. Me saame 50. Nii printida f, et. Ja see tähendab, et see saab printida 50. Ja siis, et naaseb. Ja siis on meil teine ​​printf. Oleme nüüd protsenti p. Kui sa ei ole näinud seda, et see on kuidas printida pointer. Nii et meil on protsenti i, protsenti f, ja kõik need juba. Niisiis protsenti p, printida pointer. Nii et x on viit. Nii et kui me printida x ise, me trükkimiseks, mis on tegelikult sees x, mis on 0x123 Nii esimese print f on trükkimineku 50. Teine print f läheb printida 0x123 Jah? Sihtrühm: Kas sa kasutad protsenti x printida pointer? ROB: Nii et te kasutate protsenti x printida pointer? Siis võite vaid protsendi x on lihtsalt, Üldisemalt, nagu siis, kui teil on täisarv ja te soovite printida see nagu kuueteistkümnendsüsteemis. See on lihtsalt, kuidas sa seda teed. Arvestades, protsenti d oleks prindi kohaga. See on olnud saame protsenti d. i on lihtsalt täisarv. protsenti p on spetsiaalselt Vihjeid. Nii et x on viit. Me tahame kasutada protsenti p. Aga protsendi x võiks toimida. Jah? Sihtrühm: [kuuldamatu]? ROB: Jah. Vähemalt see call-- et ma ei sisalda see siin. Aga need kaks argumenti on tingimata sees selle freimi koos kõigi kohalike muutujate printf juhtub olema kasutades. Ja siis järgmine kõne printf nüüd sees printf freimi on protsenti p längkriipsu n ja mis iganes x väärtus on, mis on 0x123. Jah? Sihtrühm: [kuuldamatu]? ROB: See saab printida midagi mis näeb välja selline. Sihtrühm: [kuuldamatu]. ROB: Nii et see prindib see aadress kujul. Tundub aadress. Jah? Sihtrühm: [kuuldamatu]? ROB: Miks on mis? Sihtrühm: [kuuldamatu]? ROB: Miks on see pointer 4 baiti? Nii et seal on terve hulk 0 on ees see. Nii et see on tõesti 0x0000000123. 64-bitine süsteem, oleks terve hunnik rohkem nulle. Jah? Sihtrühm: [kuuldamatu]. ROB: Nii et esimene printf läheb print-- Sihtrühm: [kuuldamatu]. ROB: Jah, see saab printida Mida x osutab. Star ütleb, milline on see asi osutades. Haara see. Mis on see, mis osutab? 50. Haara see. See, mida me printida. Arvestades, et järgmise üks, me oleme lihtsalt printimisel x ise. Mis on sees f? 0x123. OK. Ja siis lõpuks, meil on tasuta. Mida me möödaminnes tasuta? Me möödume x. See kord, kui ma tegelikult kuvata selle freimi. Nii et me kulgeb väärtus 0x123 tasuta. Nüüd vaba teab, eks, Ma pean minema kuni hunnik ja tasuta, et mälu. Seda enam ei kasuta, mida on aadressil 0x123. Nii et tasuta saab vabastada et alates hunnik. Nüüd on meie hunnik on tühi jälle. Meil ei ole mingit mälu lekked. Nüüd vaba naaseb. Pange tähele, et x on ikka 0x123. Aga see on nüüd kehtetu mälu. Me ei tohiks enam dereference x. Jah? Sihtrühm: Kas tagasi 0 üleliigne? ROB: Kas returen 0 üleliigne? Jah. Me lihtsalt panna, et kuna meil tagasi üks õhku. Nii et see on nagu, jah, laseb sisaldama return 0. Jah? Sihtrühm: [kuuldamatu]? ROB: Nii et pärast vaba x, mis juhtub, kui püüame dereference pointer? On võimalik, et midagi läheb valesti. On võimalik, et me ikka 50. On võimalik ka, et see mälu on nüüd kasutada midagi muud. Nii et see on määratlemata käitumine. Ja määratlemata midagi tähendab võib juhtuda. Jah? Sihtrühm: [kuuldamatu]? ROB: Ei, nii et kui teil määrata x millegi muuga. Nii et kui siin ütlesime x võrdub malloc midagi else-- malloc suurus event-- siis originaal ploki mälu ei ole vabastatud. Ja me oleme ametlikult kaotanud. See on mälu leke. Me kaotasime kõik viited Selle ploki mälu. Nii et ei ole nii, et me ei saa kunagi vabastada ta. OK, nii et siis tagasi 0 vahenditega tehtud. Olgu, korstnat ülevoolu. Mis mõte siin? Seega pidage meeles, hunnik läheb alla. Stack läheb üles. Nii oli see näiteks loeng, Ma arvan, kus peamine on lihtsalt läheb nimetame seda funktsiooni foo, mis läheb helistada ise rekursiivselt üle ja jälle. Nii korstnat raamid hakkavad töötavad täpselt sama. Nii et me ei kavatse alustada peamiste kui põhja freimi. Siis peamised läheb helistada suva, mis ei hakka freimi. Siis foo läheb helistada foo uuesti, mis ei hakka teise freimi. Ja siis uuesti ja uuesti ja uuesti, ja uuesti, kuni lõpuks võtame arvesse hunnik. Nii et see on see, kuidas me saame stack overflow. Ja selles punktis, siis SEG süü. Või sa tõesti SEG süü enne Siinkohal aga jah. Sihtrühm: Kas core dump sama SEG süü? ROB: Nii et te näete segmenteerimine süü tuum dumpinguhinnaga. Sa saad core dump kui sa SEG süü. Ja see on nagu prügila kõik sisu oma praeguse mälu nii et te võite proovida ja kindlaks miks sa SEG heita. Jah? Sihtrühm: [kuuldamatu]? ROB: Nii killustatust süü vahendid seal stack overflow. Nii ei pea. Killustatust süü tähendab, et sa oled liigutav mälu viisil sa ei tohiks olla. Nii et üks võimalus, mis juhtub on see, kui sa korstnat ülevoolu, hakkame liigutav mälu nii, et me ei tohiks olla. Jah? Sihtrühm: [kuuldamatu]? ROB: Nii sees lõputu silmuse. Nagu, see on nagu rekursiivne lõpmatu silmuse ja nii saaksime veel freimi iga kord. Aga sees regulaarne lõpmatu samas keegi-- noh, ärme isegi printida F-- midagi teha. Mida iganes. Me ei kavatse saada teise freimi. Me lihtsalt hoiame silmukoiminen üle selle ühe juhendamine. Stack ei kasva. On fakt, et iga rekursiivse Kõne annab meile freimi. Sellepärast saame korstnat ülevoolu. Jah? Sihtrühm: Nii et kui te ütlesite, et saada samas silmus ja seejärel [kuuldamatu]? ROB: Nii et kui sees, samas loop oli printf, sa ikkagi ei seg süü. Ma lihtsalt ei taha ajada asju. Oleks loop. Sa saad ühe korstna Raam printf. Siis printf naaseks. Siis Sa silmus uuesti. Sa saad ühe korstna Raam printf. Oleks tagasi. Single freimi. Nii et sa ei saa seda lõputult kuhjuvad korstnat raamid. Sihtrühm: [kuuldamatu]? ROB: Jah. Nii et see stack overflow juhtub kuna ükski nendest kõned foo naasmist. Nii et kui me tagasi, siis me alustada kaotamas korstnat raamid. Ja siis me ei korstnat ülevoolu. Ja see, miks teil on vaja tugipunkti oma isikliku funktsioone. Jah? Sihtrühm: Kas võimaliku suuruse ja stack hunnik sama kõik programmid? ROB: Umbes. Kas võimaliku suuruse kohta virna ja hunnik sama kõigis programmides? Ligikaudu. On mõningaid randomisatsiooni kui stack algab ja kus hunnik hakkab. Kui juhtub, et on terve hulk globaalsete muutujate ja asju, siis võib ära võtta ruumi Teie hunnik. 64-bit süsteemi, siis praktiliselt on lõpmatu mälu. Seal on lihtsalt nii palju. Ajavahemikus 32 bitti ja 64 bitti, et on oluline erinevus. Sa lähed, et saada palju rohkem Kestab ja hunnik ruumi 64-bit süsteem, sest seal on lihtsalt rohkem aadressid, et nad saavad kasutada. Kuid üksikute süsteemi, siis olema ligikaudu sama kogus virna ja hunnik ruumi. Olgu. Nii et viimane asi, mida on koostamisel. Nii et sa peaksid teadma seda protsessi. Seal on neli suurt sammu. Nii esimene peaks lihtne meeles pidada. Eeltöötlus. See on prefiks pre ta. Nii et tegemist on enne kõike muud. On meeles pidada, hash. Nii hash määratleb ja hash sisaldab kõigis neist. Need on kõik eelnevalt protsessor direktiividele. Need on asjad, mis pre-protsessor hoolitseb. Mis siis pre-protsessor tegema? See on tõesti loll asi. Kõik see on võimeline on kõik need koopia ning lõigatud ja kleebi operatsioone. Nii hash sisaldab standard I0 dot h. Mis on see, et teed? See haarates standard I0 dot h fail ja kleepida see top kui ta ütleb, hash sisaldab standard I0 dot h. Ja iga hash määratleda, et me oleme näha, mis see teeb? Selle kopeerimine väärtus, räsi defineeritud, on määratletud ja kleepida, et kus te kasutate väärtus. Nii eeltöötluse lihtsalt ei tõesti lihtne tekstipõhine operatsioone. See ei tee midagi, tark. Nii et kõik muu on keerulisem. Nüüd, et eeltöötlus on teha, et me tegelikult koguda. Mis siis koostamine tähendab? Jälgime nüüd läheb c-koodi kokkupanemise kood. Jah? Sihtrühm: [kuuldamatu]? ROB: Jah, saime selle. Nii koostamisel. Me läheme c-st koost. Nii et see on tegelik keel muutus. Koostamine iseenesest tähendab siirdumine kõrgema taseme keele madalamat keeles. Ja c on kõrgkeeles võrreldes koost. Mis on koost? Tema juhiseid, mis on, päris palju, teinud oma CPU. Aga arvuti ikka ei saa aru koost. See ainult neid ühtesid ja nulle. Nii et järgmine samm on koguda, mis toob meid neid juhiseid, et Sinu CPU mõistab ja tegelikult tõlgib neid, et ühtesid ja nulle. Nii C kuni assamblee binaarne. Aga ma ei ole käivitatav veel. Nii et mõtle CS50 raamatukogu. Me oleme pakkunud teile binaar Selle CS50 raamatukogu, mis on getString ja GetInt ja kõik. Aga CS50 library-- aastal ja itself-- ei ole täidetavad. See ei pea põhifunktsiooni. See on lihtsalt hunnik binaarne , mida saab kasutada. Nii ühendab on see, kuidas me koondama kõik Nende eri binaarsed failid arvesse tegelikku käivitatav. Üks, mis saab sisestada dot kaldkriips dot välja. Nii et see on nagu fail, mida kirjutas, - olenemata Teie programm on-- Ceaser dot c. Aga nüüd on see koostatud alla binaarne. Nii Ceaser dot o. Ja see on meie CS50 raamatukogud binaarne. Ja nad on ühendatud üheks käivitatav. Jah? Sihtrühm: [kuuldamatu]? ROB: Nii et esimese hulka, pea meeles, hash hulka on tegelikult pre-protsessor samm. Aga see on eraldi. Kui te ei kasuta mingeid funktsioone, mis on väljaspool oma ühe faili siis, Ei, sa ei pea siduda midagi kuna teil on kõik. See tähendab, et printf on omavahel seotud. Kui te olete kunagi kasutada printf, et midagi mis peab olema ühendatud sest sa ei kirjutanud seda. Ja tõepoolest, printf automaatselt omavahel seotud. Sa tead, kuidas käsureal või kui kirjutad teha, sa näed seda on kriips l CS50, mis on link aastal CS50 raamatukogu? Printf ja värki, läheb seotakse automaatselt. Muude küsimuste kohta midagi? Sihtrühm: [kuuldamatu]? ROB: ühendab? Meil on terve hunnik eri binaarsed failid. See on kanoonilise näiteks mida me kasutame on CS50 raamatukogu. Oleme koostanud ja antakse teile binaarne selle CS50 raamatukogu. Te soovite kasutada getString oma programmi. Nii et sa minna ja kasutada getString. Aga ilma minu kahendkoodi jaoks GetString, kui sa kompileerida koodi alla, ei saa te reaalselt sõita oma programmi, sest getString String on ei ole veel täielikult kindlaks määratud. See on ainult siis, kui sa link minu binaarne mis sisaldab getString et nüüd on kõik Olgu, ma ei saa tegelikult täita getString. Minu fail on täielik. Ja ma ei saa käivitada. Jah? Sihtrühm: Kas sidudes teisendada binaarne täitmisfaili? Nii et isegi kui teil ei ole muid raamatukogud, poleks see ikkagi vaja tõlkida [kuuldamatu]? ROB: Nii et käivitatav on ikka kahendsüsteemis. See lihtsalt ühendab kogu hunnik kahendailid. Sihtrühm: Tänan sind nii palju. ROB: Ei ole probleem. On veel küsimusi? Muidu me oleme valmis. Olgu. Tänan. [APPLAUSE] Sihtrühm: Aitäh. ROB: Jah.