Tip:
Highlight text to annotate it
X
>> SPEAKER 1: Tere kõigile.
Me alustada.
Ma arvan, et inimesed on ikka veel tuleb filtreerimise sisse
Aga aja huvides, et saaksime saada teid siit välja õigel ajal,
me alustada.
Nii teretulnud CS50 Quiz 0 arvustus.
Neile, kes pole veel aru saanud veel, siis on küsimus kolmapäeval.
Woo-hoo.
>> Kui sa ei ole alustatud õpib veel või pole veel aru saanud, et see on olemas veel,
Viimase viktoriinid ja kogu info oma viktoriin olete cs50.net/quizzes.
Seal on mõned päris head kraami seal, Viimase viktoriinid 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 tuli need lambid.
Nii et sisuliselt kõik, mis läheb kapoti alla arvuti on
teha binaarne.
Binary tähendab see kõlab nagu 0-ja 1 on.
Sellel on kaks väärtust, mis võib olla esindatud.
>> Nii nagu ka esimesel päeval jagu kui David sisselülitamist valgus
pirn esindama kohta, või 1, meie arvuti mõistab binaarne kui 0-ja
1 on, sisse või välja.
Põhitõed Binary.
Iga koht on esindatud aastal aluse kaks.
Nii et teil lisada 2 0 1 kuni 2 kogu tee üles.
>> Selleks et arvutada, milline teie binaarne on kohaga, siis järgige selle võrrandi
kirjuta midagi.
Kui teil on 1 üheski neist kohtadest, sa korrutada see iganes
rajada see on, lisab ta üles, ja saad kohaga.
Nii et see on see, kuidas te count 5 kahendsüsteemis.
Just nagu mida me teeme viimane slaid on see, kuidas sa
esindada 1 kuni 5.
>> Samamoodi nagu sa saab lisada ja lahutama kümnendsüsteemis või alus 10, või
tegelikult igasugune alus, on võimalik lisada ja lahutada kahendsüsteemis.
Täpselt, mida te ootate, kui te lisage kaks üles, kui see võrdub suurem
kui 1, siis viia 1, oleks 0, ja seda veel, et viis, lihtsalt
nagu te eeldaks regulaarset koma või muu alus.
Lahe.
>> Nii nagu ma enne ütlesin, kõik, mis läheb kapoti alla meie arvuti
tehakse 0-ja 1-ndatel, 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 keel, nagu on, B, C on, rõhutada, kriipsud ja
midagi sellist.
Ja see pakub, et ASCII väärtus.
ASCII väärtus on lihtsalt number, mis võib mõista arvuti.
Ja just nagu saate teha lisaks ja lahutamine numbrid, 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 ning välja trükkida A.
>> Samamoodi saab deklareerida see märk.
Ja kui sa printida kasutades protsenti C, siis see tõlgendama, et kui
protsenti D. Ja just nagu saate lisada number, mida saab lisada tegelased
ASCII väärtused, antud juhul.
>> Nii vähe pointer kõigile.
5, kui string, ei tegelikult võrdne 5.
Niisiis, kuidas võiks me muutma string 5 täisarvuni, 5?
Iga ideid?
Jah.
>> Nii et kui meil on 5 string, me saame lahutada 0.
Ja see annab meile 5.
Ja samamoodi, kui meil on 5 nagu 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 algoritm.
Midagi veidi keerulisem kui just lihtne aritmeetika.
>> Algoritm on lihtsalt samm-sammult komplekt instruktsioonid, kuidas teha
teatava ülesande -
Täpselt nagu retsept.
Sa võid mäletan esimesest päevast klassis, kus David oli meil loota tuba
inimesed ja kui palju inimesi toas olid.
Sa võid kasutada loendamise ükshaaval.
1, 2, 3, 4.
Sellisel juhul lineaarne algoritm.
>> Kuid David tutvustas algoritm sa loeksid 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 ***üüsida, kui tõhus algoritm põhineb see läbijooksuaeg.
Aga me räägime natuke rohkem sellest hiljem.
>> Nii et kõik algoritmid saab ka kirjutatakse pseudokoodi.
Pseudocode on just inglise moodi süntaksit kasutatakse esindama
programmeerimiskeelt.
Näiteks, kui me tahtsime küsida kasutaja vist mu lemmik number, et me
Võib-olla pseudokoodi sellisena.
>> Hangi kasutajate arvan.
Kui oletus on õige, siis ütle neile *** õige, muidu ütlen neile,
*** ei ole õiged.
Ja pseudokoodi on viis hõlpsasti esindavad idee või algoritm.
Nüüd me võiksite tegelikult kirjutada seda keelt, et arvuti
võib mõista.
Nii et me võiks kirjutada meie pseudokoodi ja tõlgendada seda arvesse lähtekoodi.
>> Seni lähtekoodi peab järgima Lisa teatud süntaksi
programmeerimiskeelt.
Ja siiani on CS50 oleme kasutan enamasti c.
Nii et see võib olla lähtekoodi c.
Hiljem muidugi, sa öösel tulema 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 programm keeles on see kuidas me võiksime kirjutada lähtekoodi
pseudokoodi algoritm, mis Ma varem kirjeldatud.
>> Niisiis, kuidas teie arvuti tegelikult sellest aru?
Nagu ma enne ütlesin, see vaid tõesti mõistab nulli ja ones.
Niisiis, kuidas see saada allikast koodi midagi, mis võib olla
arusaadav?
Noh, meil on midagi nimetatakse tõlkija.
>> Kui te mäletate tagasi enamiku oma psets, siis tuli mingi programm
kirjutatud dot c faili.
Ja siis oleks tüüp make.
Mis siis teha teed?
>> Sa võid kirjutada make kompileerida programmi, sest keegi -
kes kirjutas oma p set; arvatavasti David -
loodud make faili.
Ja see ütleb tegema teadma, et käivitada oma koostaja ehk rõkkama, et tahe
siis kompileerida lähtekoodi objekti kood, mis on nulli ja need
et arvuti aru saab.
Aga veidi hiljem, me läheme rohkem sügavuti umbes koostajad.
>> Nii meenutavad pset 0, kui - jah, teil on küsimus?
>> Publik: [kuuldamatu]?
>> SPEAKER 1: Jah.
Ma arvan, et *** tegelikult peaks olema võrgus.
Jah.
>> Publik: Kas see on nagu [kuuldamatu]?
>> SPEAKER 1: Ei ole.
Olete cs50.net/quizzes.
>> Publik: Slash viktoriinid, kärpida 2013 kaldkriips 0 ja kliki kaudu
viktoriinid 2013 ja viktoriin 0, vaadata jagu slaidid.
>> SPEAKER 1: Jah, nii et kui te tahate tõmmake see üles ja vaata seda oma
oma arvuti, see on hea ka.
Ütle, et jälle.
>> Publik: [kuuldamatu].
>> SPEAKER 1: Jah, [kuuldamatu] on fiktiivne muutuja.
Oh, jah?
>> Publik: [kuuldamatu]?
>> SPEAKER 1: Ei, streigid ei ole eksami.
Vabandame, tema küsimus oli, oli lööb eksami.
Ja see ei ole.
Nii pset 0, kutid peaks olema kõik ellu midagi kasutades nullist.
Ja me õppisime mõned põhiprogrammeerimist ehitusplokkide kasutades nullist.
>> Võtame pilk mõned Nende ehitusplokkide
mis moodustavad programmi.
Esiteks on Boole'i avaldis.
Loogiline väljendid on need ja 0-või midagi, mis on
kaks võimalikku väärtust.
Sel 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 Loogiline
väljendus siin.
>> Nii et Boole'i avaldised kasulik meil Boole'i operaatorid.
Need on operaatorid, mida saab kasutada võrrelda teatud väärtusi.
Nii et meil on ja ega ole sellega võrdne, väiksem 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 suuda nende baasil
tingimustel.
>> Nii et te võiks meeles pidada nullist ja oma p määrab, et me
pidi tingimustel.
*** on sisuliselt nagu kahvlid loogika oma programm, mis
hukatakse sõltuvalt kas tingimus on täidetud.
Nii üks tingimus, et meil oli kasutatakse palju kordi see muidugi on
kui muud, kui, ja muud tingimused.
>> Siin on näide sellest, kuidas võite seda kasutada.
Kas keegi teab, vahest lihtsalt kasutades kui avaldused kõik
tee alla salme, kui mujal, siis ja veel ühendada?
Jah?
>> Publik: [kuuldamatu].
>> SPEAKER 1: Täpselt.
Kui mul oleks, kui kogu tee alla selle Nii, isegi kui see tingimus tagasi
Tõsi, see on siiski jätkuvalt testides kahe järgmise.
Arvestades, mujal kui muidu avaldus, kui üks tagastab tõsi,
teised ei ole kontrollitud.
Kõik küsimused selle kohta?
Lahe.
>> Nii te kasutate, kui-teine on teine avaldus, kui sa tead, et ta saab ainult
üks neist juhtudest.
Seega me teame, kui x on väiksem kui 0, on see kindlasti ei kavatse olla
suurem kui 0.
>> Järgmine, teine ehituskivi et 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, tuleb teil otsustada,
milline kolmest soovite kasutada.
Niisiis, kuidas me otsustada, milline neist?
>> Me üldiselt kasutada loop kui me teame, Mitu korda me tahame kinnitada,
kaudu midagi või mitu korda tahame täita ülesanne.
Me kasutame samas silmuseid, kui me vajame tingimus, et olla tõsi, et hoida töötab.
Ja me kasutame seda kui väga sarnane aega, kuid me tahame, et meie kood joosta
vähemalt üks kord.
>> Nii et samal ajal, kõik, mis on ta teeb, käivitatakse alati vähemalt üks kord.
Arvestades, kui see ei pruugi üldse töötada, kui
tingimus ei ole täidetud.
Küsimusi on?
>> Nii struktuuri silmus.
Te olete kõik näinud seda.
Sa vormindamiseks.
Sul on mingi haigus.
Nii näiteks, võiksime initsialiseerida kui i on 0.
i on väiksem kui 10.
Ja i + +.
Väga lihtne, et me oleme teinud.
>> Sest kuigi loop, samamoodi, teil on et on mingi käivitamine,
mingi tingimus, ja mingi uuendus.
Nii saame rakendada meie jaoks loop ka kui samas loop kasutades seda.
Ja sarnaselt do samas loop, me võib-olla mõned käivitamine,
täita midagi, ajakohastab seda ning kontrollige seisundit.
>> Nüüd funktsioone.
Panime kõik koos.
Me võiksite kirjutada mõned selline funktsioon.
Ühine funktsiooni, mida võiks näinud juba on peamine.
Põhiline on funktsioon.
See on naasmise tüüp int.
See on funktsiooni nimi, peamised.
Ja see on veel argumente, argc ja argv.
Nii põhiline on lihtsalt funktsioon.
>> 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, sealhulgas see CS50.h raamatukogu või
I / O teek.
Jah, küsimus?
>> Publik: Kas peamine lihtsalt omane c?
Kas see lihtsalt selline [kuuldamatu]?
>> SPEAKER 1: Küsimus on selles, kui peamine on omane c.
Ning jah, kõik funktsioonid on peamine funktsioon.
See on selline, mis on vajalikud arvuti teada, kust alustada
töötab kood.
>> Publik: Nii et te ei [kuuldamatu]?
>> SPEAKER 1: Ei
Muid küsimusi?
Lahe.
Nii nagu te võite kasutada funktsiooni , mis on kirjutatud, saate ka
kirjutada oma funktsiooni.
See on funktsioon, mis keegi võiks Kirjutasin mahu arvutamiseks
ning q, näiteks.
Seal on tagasipöördumine tüüp siin, sel juhul int, meie ülesanne nimi q ja meie
parameetrite loetelu.
>> Ja pange tähele, et teil on kirjutada andmed tüüpi parameeter, mida soovite
kasutada või teine funktsioon ei teada, millist
parameeter ma peaksin nõustudes.
Niisiis, käesoleval juhul me soovime täisarv, kui meie panus.
Miks võiks tahame kasutada funktsioone?
>> Esiteks, suur organisatsioon.
Need aitavad lõhkuda oma koodi rohkem organiseeritud tükkideks ja teeb
lihtsam lugeda.
Lihtsustamine.
See on hea disain.
Kui sa loed koodijupi ja peamine funktsioon on tõesti,
tõesti pikk, võib see olla raskem Põhjus selle kohta, mis toimub.
Nii et kui sa jaotada see funktsioone, oleks lihtsam lugeda.
Ja taaskasutamist-võime.
Kui teil on patakas kood, mis kuramuse helistanud 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 väliskeermestamiseks.
Teema on mõiste mitmekordne järjestused kood
täidesaatva samal ajal.
Seega arvan, et tagasi päeval, kus David oli kutid loota off arvu
inimesed ruumis.
>> Sisuliselt, mis toimub edasi on kõik kutid olid
töötab eraldi teemad.
Ja need niidid tulevad kokku saada mingi vastus.
Samamoodi Scratch, kui teil on mitu sprites, võite
on kass ja koer.
Ja *** oleksid üheaegselt töötab oma skripte.
See on näide väliskeermes.
>> Ja teine mõiste, mis oli sisse scratch oli üritusi.
Ja sündmusi kui mitu osad koodi omavahel suhelda.
Scratch, see oli siis, kui kasutatakse eetrisse kontrolli ja kui ma
Saada plokke.
>> Ja ka sisse Ülesanded 4 nägime natuke ürituste samuti.
Te võib-olla kasutada Gevent raamatukogu.
Ja seal oli üks funktsioon waitForClick kus sa ootasid
kasutaja klikkima.
Ja kliki, sel juhul oleks sündmus ja ootama click on oma
sündmus.
>> Ja ka kogu reklaamide psets ja töötavad oma psets, siis
võisid kokku puutuda mõned neist käske.
See on see, mida sa kirjutasid oma terminalis või mis iganes aknas
, mis näitab üles oma g redigeerida, sisuliselt navigeerida arvuti.
>> Nii näiteks, LS loetleb kataloogi sisu.
Tee kataloog loob uue kausta.
CD, muutus kataloog.
RM, eemaldada kustutab faili või mõned kataloog.
Ja seejärel kataloog eemaldab kataloogi.
>> Publik: [kuuldamatu]?
>> SPEAKER 1: Jah, kindlasti.
Vabandust, küsimus oli, kui te soovitan panna see
on petma lehte.
See võiks aidata.
Kui sul on ruumi, saate 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 lihtsam.
Kas ma vastust oma küsimusele?
>> Nüüd, me rääkisime natuke lühidalt raamatukogudes.
Kuid kaks peamist need, mis me oleme kasutades siiani käigus on
I / O ja CS50.
Milliseid asju on kantud standardse I / O teek?
>> Jah, siiani oleme kasutatakse printf.
In CS50 oleme kasutatakse GetInt ja getString.
Ja andmete liiki string ka juhtub tuleb tunnistada selles CS50 raamatukogu.
Räägime natuke rohkem sügavuti kohta kuidas raamatukogud töötavad ja kuidas ***
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 esindab või kuidas
palju baite iga liik vajab -
int, 4 baiti, paalia, 1 bait.
Float on 4 baiti.
Mis on topelt?
>> Publik: [kuuldamatu].
>> SPEAKER 1: Jah, nii float aga kahekordistada.
Aga kaua?
>> Publik: [kuuldamatu].
>> SPEAKER 1: OK.
Mis on pikk?
>> Publik: [kuuldamatu].
>> SPEAKER 1: Jah, topelt int.
Jah.
>> Publik: [kuuldamatu].
>> SPEAKER 1: Pikk [kuuldamatu].
Ja siis pikk pikk on kahekordne.
>> Publik: Ei, ei.
Kaua on lihtsalt int.
See sõltub arhitektuur enne [kuuldamatu]
ja int on sama suurusega.
[Kuuldamatu].
>> SPEAKER 1: Nii pikk ja int on sama.
Ja siis pikka on topelt int.
Lahe.
Ja siis, mis on viimane liik?
>> Publik: Pointer.
>> SPEAKER 1: Jah, me oleme õppinud natuke sellest.
Ja hoolimata sellest, mida osuti on osutades - see võiks olla char star
või int star -
see on alati 4 baiti pointer.
Küsimused, mis?
Jah?
>> Publik: [kuuldamatu]?
>> SPEAKER 1: Nii pikk ja int on Samal selles CS50 aparaat.
>> Publik: seade on täielikult vahetatavad.
>> SPEAKER 1: Jah.
Nii siis pikka on topelt int.
>> Publik: See on 32-bitine?
>> SPEAKER 1: 32 bit, jah.
>> Publik: So [kuuldamatu]?
>> SPEAKER 1: Jah, kui see ei ole selgesõnaliselt öelda, siis
peaks võtma 32 bit.
>> Publik: Oleks midagi öelda nagu eeldades
arhitektuur nagu aparaat.
64 bit, ainsad asjad, mis muutus on pikad ja suunanäitajaks.
*** mõlemad [kuuldamatu].
>> SPEAKER 1: Jah?
>> Publik: Küsimus.
Seega on üks tava testid, ta küsib unsigned int.
Niisiis, kuidas see kindlaks alates int [kuuldamatu]?
>> SPEAKER 1: allkirjastamata aastal on 4 baiti.
Aga milline on erinevate allkirjastatud int ja unsigned int?
>> Publik: [kuuldamatu].
>> SPEAKER 1: Nii.
Üks võimalik esindada negatiivsed väärtused.
Aga kuidas see seda teha?
>> Publik: [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.
>> Publik: OK.
Nii te ütlete, et topelt ei kaks korda suurem float?
>> SPEAKER 1: Double on kaks korda suurus float, jah.
>> Publik: Kuidas pointer et pikka [kuuldamatu]?
>> SPEAKER 1: Seega on küsimus selles kuidas kursor pikka -
kuidas on see, et ainult neli baiti Kaua selle 8 baiti.
Seega pidage meeles, mis on pointer, sisuliselt on väga baasi väärtust.
>> Publik: [kuuldamatu].
>> SPEAKER 1: Jah, nii pointer on lihtsalt mälu asukohta.
Nii et see ei ole tähtis, kui palju ruumi et osuti osutab.
See vajab ainult 4 baiti jälgida selle mälu asukohta.
Muid küsimusi?
Lahe.
>> Seega on viimane asi, mul on on standardväljundisse.
Sa peaksid kasutama neid sageli piisavalt, et sa ei mäleta.
Aga see, kui me kasutame printf, näiteks.
Ja meil on neid kohatäidete kutsutud formaadis koodi.
>> Nii 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 pikka pikka ja protsenti s keelpilliorkestrile.
>> Samuti oleme kasutanud paar Nende Paojada.
Näiteks kurakriips n uus rida.
See on ainult siis, kui sa vormindamist Sinu kood print f.
Jah?
>> Publik: Mis on protsent d jaoks?
>> SPEAKER 1: Seega on küsimus on see, mis on protsent d jaoks?
Protsenti d on ints.
Protsenti d ja protsenti i on sama.
>> Publik: Mis vahe on kurakriips n ja kurakriips r?
>> SPEAKER 1: Seega on küsimus selles, mida on vahe loks n ja
loks r?
Arvan kurakriips r -
>> Publik: Nii kurakriips 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 minna tagasi algusesse rida
siis printida rohkem kraami, siis kirjutatakse asju, mis on juba
[Kuuldamatu].
Arvestades, et n tegelikult läheb uus line ja läheb [kuuldamatu].
>> SPEAKER 1: No muid küsimusi?
Hea küll.
Ma lähen käsi see ära Dan, kes jätkavad.
>> [APLAUS]
>> DAN: Olgu.
Nii et ma rääkida veel lai palju ideid klassist, mis on
jämedalt esindaja nädal kaks ja alguse nädal kolm liikumahakkamist
valamise, mis on lihtsalt viis ravivad väärtus teatud tüüpi nagu
väärtus erinevat tüüpi.
Nii et me saame seda teha koos jutumärke ints, ujukite ints ja
kaua igatseb kahekordistada.
>> Kõik need saab kasutada viisidel ravivad mõned arvuline väärtus
miinus char nagu mõned teised arvuline väärtus.
Nii on mõned küsimused selle, ning Muidugi, mis tekib siis, kui enamus
asjad nagu ujuk ints.
Nii et see on natuke imelik.
Meil on ujuk, mis on 1,31.
Me korrutada see 10000.
Ja siis printida kui int.
Mida see väljund?
10000 korda 1.31.
Niisiis 13000, on see, et vist?
>> Publik: Ma arvan, et see on 10000.
>> DAN: Nii et ma olen korrutatakse 10000 enne ma casting ta.
>> Publik: Oh.
Kas siis ei tekiks üks 9 ja mõned 0 numbrid?
>> DAN: Sul võib olla mõned imelik numbrit.
Nii õige, see on 1,3 korda 10.000.
Nii et 13000.
Ja see ekstra imelik -
>> Publik: 13100.
>> DAN: 13100.
Aitäh, Rob.
Ja see pildi kummalisus -
Selle 9,9 -
on lihtsalt sellepärast, et see casting sattus ümardatuna kus
see ei tohiks olla.
Jah.
>> Publik: casting juhtub pärast veel midagi?
>> DAN: Nii, kuna mul on see trükis, seda teeb seda korrutamine enne selle
teeb see valu.
>> Publik: [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äpsust.
>> Ujub ei ole täiuslik.
*** ei esinda ainult numbreid teatud hulk olulisi näitajaid.
Nii et kui me välja printida 8 sig viigimarjad edasi see ujuk, 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
natuke liiga 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, 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üliti muutuja nimi.
Siis loodud juhtudel võimalik väärtustab see võiks olla.
Nii kui üks, ütlevad, et see on väike.
Ja siis sa murda välja tulla lüliti seisund nii
sa ei pea minema.
>> Järgmisel korral -
nii juhul kaks ja juhul kolm -
kui see on juhul kaks ta lihtsalt langeb alla esimene rida koodi ta peab koos
kohtuasja kolm kuni ta näeb vaheaega.
Seega põhjus saate puhul üks ainult print madal on, sest ma
on see break siin.
Kui ma, ütleme, ignoreeritakse seda break - kui ma viskasin selle separatistliku -
oleks printida madal, ja siis see oleks prindi keskel ja siis murraks.
>> Nii katkestused on oluline osa lüliti tingimused ja
*** peavad seal olema.
Kõik juhtumid, mis ei ole selgesõnaliselt haldab default
juhul lüliti ja heidetakse.
>> Publik: Nii 1, 2, 3, ja 4 oleks n?
>> DAN: Väärtused, mis n võib olla.
Jah.
Jah?
>> Publik: Nii et kui teil on et [kuuldamatu]?
>> DAN: Te printida madala ja seejärel oleks printida keskel ja
siis murraks.
>> Publik: Miks see printida keskel, kui [kuuldamatu]?
>> DAN: Nii kõik alla juhul enne vaheaega kuulub.
Nii kui üks print all juhul üks on see järgmine print.
Jah?
>> Publik: [kuuldamatu]?
>> DAN: Nii et see arv on vaid konkreetse väärtus, et see muutuja
võib võtta, eks?
Kas see on mõtet?
Jah.
>> Publik: [kuuldamatu]?
>> DAN: Jah, juhul kaks oleks printida keskel ja siis murda.
>> Publik: [kuuldamatu]?
>> DAN: Ma arvan, et see on olemas?
Mis muud tüüpi andmeid saate üle minna?
>> Publik: saate vahetada mis tahes tüüpi andmeid.
Aga see ainult tähendab, 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 koormad, kui ta isegi olgem kui seda teha, sest ujukoma
täpsus, siis ei ole tõesti taha seda teha niikuinii.
Nii päris palju, just ints ja tähemärki ja värki.
>> DAN: Jah, see on, 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 ulatub.
Nii see väike patakas kood mul on, oleks täis vigu.
Ja põhjus on mul tunnistada see int i jooksul käesoleva silmus.
Ja siis ma üritan viide, et i väljaspool, et loop ulatus.
>> Niisiis, te ei saa mõelda ulatus nagu midagi, mida sa tunnistada
koos sees kogum looksulg ainult olemas nendes lokkis traksid.
Ja kui sa püüad ja kasutada muutuja väljaspool neid lokkis traksid, saate
saada veateate koostaja.
Jah?
>> Publik: Nii see ei toimi?
>> DAN: See ei tööta, jah.
Strings.
String char *.
*** on täpselt sama.
*** on lihtsalt vihjeid tähemärki.
Ja iga stringe, mis teil peaks lõppema koos kurakriips null, mis on vaid
c konventsiooniga.
>> Seda nimetatakse NULL terminaator.
Ja NULL -
kapitali N, kapitali U, kapitali L, kapitali L -
ei ole sama NULL terminaator.
See on kursor.
See on iseloomu.
*** on väga erinevad.
Jäta see.
See toimub viktoriin, arvatavasti.
Ma ei ole näinud viktoriini.
Jah?
>> Publik: Nii NULL on, ütleme, pointer?
>> DAN: Jah.
>> Publik: Mida teeb [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, kui funktsioon on peaks tagasi pointer, siis
vaja kontrollida vastu NULL sest NULL on päris hea -
see on, omamoodi, prügi väärtus.
See on null niipalju kui osuti minema.
>> Kui te helistate funktsiooni mis tagastab viida.
Sa lähed soovite kontrollida, et olla kindel, et osuti ei ole NULL
kuna NULL on väga levinud.
See on omamoodi prügi tagasi.
Nii et kui midagi ei lähe õigus, lihtsalt tagasi NULL asemel.
>> Publik: [kuuldamatu]?
>> DAN: Jah, ja see on see.
>> Publik: [kuuldamatu]?
>> DAN: Õigekirja seda, sest see.
See on NULL terminaator.
See on väiketähed N-U-L-L, kui sa õigekirja see.
>> Publik: Ja ma läksin tagasi ja seda testinud.
Ja kui te proovige panna ujukoma väärtuse switch, siis see ütleb teile:
ütles avalduses nõuab väljendus täisarv tüüp.
>> DAN: Ole lahke.
Aga jah, milline oli küsimus jälle?
>> Publik: [kuuldamatu]?
>> DAN: Nii kapitali N, kapitali U, kapitali L, kapitali L on tegelik c asi.
See on NULL pointer ja tahe ainult sellisena käsitleda.
Sa ei ole kunagi proovida ja kirjutada NULL iseloomu ja näe
muul viisil, kui see.
Jah?
>> Publik: Nii naasmist char max või midagi lisades, oleks see
kehastavad sama funktsioon kui [kuuldamatu]?
>> Publik: Nii te silmas peate tagastamise char max alates getchar või
mis see on?
>> Publik: Jah.
>> Publik: Jah, nii üldise termin kõigi nende asjade
on kontroll väärtused.
Nii nagu tagastamise int max alates GetInt ja char max alates getchar, see on
peaks olema nagu kõik korras, kui need asjad on jälle meile,
midagi läks valesti.
>> Vihjeid, me just on see kontroll raha, 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.
>> Publik: Seega, kui olete katsetamise getchar, Kas te saaksite panna NULL?
Kas see muudab?
>> DAN: Te ei saa lihtsalt vaadata NULL.
Sa pead kontrollima char max sest tagastatav väärtus on funktsioon
märk ei viida.
Jah?
>> Publik: See küsimus puudutab seda, stringi pikkus.
Kas see sisaldab NULL iseloomu?
>> DAN: Ei
Ja see on tegelikult kuidas string pikkusega teab, et lõpetada, sest see läheb läbi
oma rida märke kuni see näeb NULL iseloomu.
Ja siis see on nagu kõik Olgu, ma olen teinud.
>> Publik: [kuuldamatu] viis?
>> DAN: Tere oleks viis.
Yep.
Nii massiivid on pidev plokid mälu.
*** on vahetu juurdepääs, öeldes nimi massiivi ja siis, lokkis
traksid, olenemata indeksi tahad minna et, *** indekseeritud nullist läbi
pikkus massiivi miinus 1.
>> Ja *** on deklareerinud tüübi asi, et sa oled salvestamine
massiivi nimi massiivi ja siis suurusele vaatamata on selle massiivi.
Nii et see on char massiiv pikkusega kuus, mis on need väärtused.
Jah?
>> Publik: [kuuldamatu]?
>> DAN: Jah.
>> Publik: [kuuldamatu]?
>> DAN: Kui teil on, mis toimub arvesse array juba tehtud.
Nii võib määrata see hoopis, öelda, char, mis iganes nime oma
massiiv on tühi sulgudes võrdub lokkis traksidega H komaga E komaga L komaga L koma
O komaga NULL iseloomu ja lokkis traksidega.
See oleks ka töö deklaratsioon.
>> Publik: [kuuldamatu]?
>> DAN: Siis peate suurus juba tehtud.
>> Publik: [kuuldamatu]?
>> DAN: Jah.
Olgu.
Käsurea argumendid on viis saada sisend kasutaja
argumendid peamine.
Main võtab kaks argumenti.
Mitmeid argumente, mis on edasi mööda käsurida ja
string vektor või string array 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 konkreetsel juhul.
Jah?
>> Publik: [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 ütlesin, oleks ARGV 0 on punkt välja.
argv 1 on 1.. argv2 on 2. argv 3 on 3.
argv 4, mis on üks suuremaid kui argc oleks NULL.
>> Ja see on NULL pointer.
Jah.
Ja seda sellepärast, string char täht on viit.
Seega peab olema sama tüüpi.
Jah?
>> Publik: Kaks küsimust.
Nii et üks, mis on vahe see ja getString muu kui üks liik
kasutaja mootor?
Ja kaks, on see salvestatud oma viimastel mälu?
Nii nagu getString oleks olla [kuuldamatu]?
>> DAN: Kus on see salvestatud?
Ma ei tea, kus see on salvestatud.
>> Publik: Niisiis, tegelikult, sa tead, kuidas tahes funktsioon, mida nimetame seda argumendid
hoitakse virnas?
Nii argc ja argv on argumendid, et peamine ja *** on virnas või tegelikult
napilt, mida sa arvad, kui algust pinu.
Milline oli teine osa küsimuse?
>> Publik: Mis siis [kuuldamatu]?
>> DAN: Jah, see on lihtsalt teistmoodi saada sisend kasutaja.
See üks on veidi efektiivsem ja see handier skripte, sest sa
lihtsalt edasi argumendid oma peamise funktsiooni asemel, et oodata
kasutajatele, kui sul ei ole veel ühtegi kasutajat.
>> Publik: Ja jah, saan stringid oleks [kuuldamatu].
Oleks salvestada asju, mida vaja.
>> DAN: Jah?
>> Publik: [kuuldamatu]?
>> DAN: Jah, argv 0 on alati dot kaldkriipsuga funktsiooni kõne.
Jah?
>> Publik: [kuuldamatu]?
>> DAN: Jah, kõik argumendid on lõppes NULL iseloomuga, sest ***
on stringid.
>> Publik: [kuuldamatu]?
>> DAN: Jah, argv argc on NULL pointer.
>> Publik: [kuuldamatu]?
>> DAN: Oh yeah.
Jah, vabandust.
>> Publik: So [kuuldamatu]?
>> DAN: Seega on küsimus selles, kui teil oleks käsurea dot kaldkriipsuga dot välja 1, 2,
oleks mitmeid käsurea argumendid olema kaks või oleks kolm?
>> Publik: Ma arvan, et see ei tegelikult küsimus.
Ma pigem öelda, oh, te ei liigu käsurea argumente, kui
Ilmselt sa kutsutud funktsioon.
Nii et ma kaldun vokaalselt välistada funktsioon käsurealt
argumendid, kuigi see on lisatud argv.
>> DAN: Aga kui see oli test -
jah - ja ka siis kui sa midagi öelda nagu argc võrdub 3,
sa oled ohutu seismise.
Jah?
>> Publik: [kuuldamatu]?
>> DAN: Ma arvan, et kui selle asemel, kutsudes seda aastal argc ja string argv sulgudes
kuid hoitakse sama tüüpi ja just helistas neile midagi nagu
ja b, oleks see ikka toimib?
Ja ikkagi tööle, Sa lihtsalt -
asemel argc - soovite kasutada ja b.
Jah?
>> Publik: [kuuldamatu]?
>> DAN: Seega on küsimus getString on lähed salvestada mälu hunnik
sest getString on char *.
See salvestab mälu hunnik, sest see kutsub nüüd malloc tegelikus
rakendamise getString.
OK, liigub edasi.
>> 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 ilmselt
ärge ühendage muid masinaid Interneti kaudu.
Seega arvutid on ebakindel.
*** tegelikult on.
Me peame usaldama teisi inimesi.
>> Ja idee turvalisus on see, et sa oled üritab piirata summa
loodan, et sa vajad.
Ja üks vahend sul seda teha kaudu krüptograafia.
Krüptograafia on sisuliselt meil on saladusi.
>> Mõnikord peame edasi oma saladused koos läbi, ütleme, internet või
muid asju.
Ja me ei taha, et inimesed teada nende saladusi.
Nii me krüptida oma saladusi arvesse viis et me loodame, et keegi ei suuda välja selgitada.
>> Nii me kasutasime -
kaudu muidugi selle klassi -
asjad nagu Caesar salakiri ja [Kuuldamatu], mis on mõlemad väga
ebakindel, kuidas krüpteeritakse asju.
*** on lihtne aru saada, mida *** oled ja mida teie riigisaladusi.
Reaalses maailmas kasutab palju keeruline krüpteerimisskeemid.
Ja me ei hakka palju rohkem.
>> Silumine.
GDB on parim.
Ma rõhutan seda veel kord.
Kasutage GDB kogu aeg iga kord, kui on probleem.
Käske, mis on kasulikud GDB on murda, mis teil läbida kas joon
number funktsiooni nime, sisuliselt kus oma koodi soovid peatuda,
ning olema võimeline võtma kontrolli.
>> Prindi võtab muutuja ja prindib välja mis iganes see muutuja on sel
juhtida oma täitmise.
Järgmine liigub oma täitmise mööda üks samm.
Ja samm sammu sees funktsioon Teie täitmine.
>> Muud asjad töötavad, mis on see, kuidas sa tegelikult käivitada oma koodi.
Jätka võtab kõik vajalikud sammud saada järgmisele murdepunkt.
Ja seal on palju, palju muud.
Vaata neid.
*** on suurepärased.
Jah?
>> Publik: [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 erinevaid päringuid, mis me rääkisime umbes selles klassis on lineaarne otsing,
mis on lihtsalt, et sa vaatad läbi iga element otsing ruumi, üks
element korraga, kuni leiad, mida otsite või kuni jõuate
lõpuks oma otsingut ruumi, kus Point te ütlete, et te ei suutnud leida
element, et sa olid otsivad.
Ja see võtab parimal pidevalt aega, mis on 0, 1. ja halvimal lineaarne
aega, mis on 0 ja n.
>> Binary otsing, mis vajab räpane elemente.
Lähed keset oma elemendid, kas element otsite
on suurem või väiksem kui element et sa oled keskel.
See on suurem, siis ütlen, et alumine Teie otsing ruum on oma
praegust asukohta, keskel, ja taaskäivitamist protsess.
Kui see on väiksem, siis vaata öelda et - jah, mis toimub?
>> Publik: [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 lahendamist, see on õiglane
mäng test.
>> Publik: Kas me läheme selle üle, kuidas -
>> DAN: See on läinud üle.
>> SPEAKER 2: tegelik kood [Kuuldamatu] on study.cs50.net.
Nii et kui te vaatate tava probleem ühendamise sort lehel
study.cs50.net on kood rakendamise merge sort.
Nii et sa ei pea rakendama ise täna.
Aga veenduge, et saate aru, see pigem kui lihtsalt meeldejätmist see.
>> Publik: [kuuldamatu]?
>> SPEAKER 2: Tarkvaraprojekteerimise lehekülge study.cs50.net on tava
probleem, et kui klõpsate kaudu probleemi juures väga otsas on
lahendus, mis on kooste Sorteeri rakendamist.
Aga veenduge, et saate aru, see mitte lihtsalt meeldejätmist see
või kopeerides selle maha.
>> Publik: Ja täiesti kehtiv probleem eksamiks oleks
midagi siin on nimekiri.
Mida see nimekiri näeb välja pärast üks samm valikuid sort või
sisestamise sort või mis iganes.
Üks täielik 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 muuta see massiiv.
>> DAN: See on see minu jaoks.
>> [APLAUS]
>> LUCAS: Hei kõigile.
Minu nimi on Lucas.
Ma ei kavatse rääkida rekursioon, kõik kehvasti, et me oleme õppinud, ja
natuke kõik suunanäitajaks.
OK?
Nii esiteks, rekursioon.
Mis see tähendab, et öelda, et funktsioon on rekursiivne?
>> Publik: nõuab ise.
>> LUCAS: OK, nimetab ennast, jah.
Nii nagu see pilt, näiteks.
See on nagu pildi sees kohta pilt ja nii edasi.
Nii näiteks, sul võib olla - nagu Dan et rääkisin binaarne otsing.
Üks viis, kuidas binaarne otsing on kirjutan on see, et sa oled
püüdes leida number.
Nii et sa minna keskel.
Ja siis vaadata, kui numbrid on aastal vasakul ja paremal.
>> Ja siis, kui leiate, et number on saab otsustada, et see on sama
asi nagu teed otsida uuesti, kuid just vasakus nimekirja.
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õik numbrid 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
asi nagu liidetakse numbrid kuni n miinus 1.
Nii et ma ei saa öelda summa võrdne summa võrdub n pluss summa n miinus 1.
Kas see on mõtet?
>> Ja ma ka oleks midagi nimetatakse tugipunkti, mis seisneb selles, et
summa numbrid üles null on null.
Seega niipea, kui ma saan number null, peatun lugedes.
Kas see 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ähem või võrdne nulliga.
Nii et kui see on väiksem või võrdne nulliga, I tagasi nulli, mis on meie tugipunkti.
Muidu ma ei saa lihtsalt tagasi n pluss summa numbrite
üks kuni 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 stack oma programm on see, mida ta näeb.
>> Esiteks, meil on peamine funktsioon.
Ja siis põhiülesanne nimetatakse summa 2.
Ja siis summa 2 läheb öelda, oh, summa 2 võrdub 2 pluss summa üks.
Nii lisan summa 1 korstnat.
Ja summa 1 läheb helistada summa 0, mis on ka kavatse lisada
korstnat.
Ja seejärel iga nimetatud 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 peamine.
Kas see on mõtet?
>> See on tõesti oluline, et mõista, kuidas stack töötab ja proovida
vaata, kas see on mõistlik.
OK, nii et sorteerimine.
Miks on sorteerimine oluline, kõigepealt?
Miks me peaks hoolima?
Keegi?
Anna näide?
Jah?
>> Publik: [kuuldamatu].
>> LUCAS: Jah, OK.
Nii saate otsida tõhusamalt.
See on hea viis.
Nii näiteks on meil palju asju, tegelikult meie elu, et
on järjestatud.
Näiteks sõnastikke.
>> See on väga oluline, et kõik sõ*** mingi et saaksime
pääseb kergesti.
Nii et see, mida ta ütles.
Võite otsida tõhusamalt.
Mõtle, kui raske see oleks, sõnastik, kus sõ*** on
juhuslikus järjekorras.
Sa pead vaatama, päris palju, iga sõna, kuni leiad
sõna, mida sa otsid.
>> Kui te kasutate Facebook ka siis, kui sa vaatad oma sõpradele, et sa oled
näeme, et Facebook pane lähemale sõber on peal need
et sa ei räägi nii palju.
Kui te lähete kõik viis põhja Teie sõber nimekirja, sa lähed, et näha
inimesed, et sa ilmselt ei ole isegi meeles pidada, et sinu sõbrad.
Ja seda sellepärast, Facebook kehvasti Sõprade põhineb kuidas
kui lähedal te neid.
>> Nii korraldab andmed.
Ka Pokemon.
Nii et näete, et kõik Pokemons on numbrid.
Ja see on nagu kerge juurdepääsutee andmeid.
>> Publik: Juurdepääs Pokemon.
>> LUCAS: Jah.
>> Publik: [kuuldamatu].
>> LUCAS: Yep.
OK, nii et valik sort.
Selection sort läheb valima Väikseim sortimata loetelu väärtusest iga
kord iga iteratsiooni.
See on nagu omamoodi, et sa su peas, kui sa üritad
sorteeri nimekiri käsi.
>> Põhimõtteliselt kõik, mida teha, on teil vaadata jaoks väiksema arvu.
Sa pane see järjestatud nimekirja.
Ja siis sa ootad Järgmise väikseim number.
Ja siis edasi teha et ja nii edasi.
>> Seega valik sort on põhimõtteliselt sa valida iga kord väikseim
sortimata väärtus.
Pane lõpus sorditud osa nimekirjast.
Ja hoida seda, et.
Teeme kiiresti näha, millised see välja näeb.
Nii et siin on järjestatud ning sortimata nimekirja.
>> Nii sorteeritud nimekirja, see on esialgu tühi.
Ja siis ma lähen valima Väikseim number siin, mis on 2.
Nii et ma saan number 2 ja panin aastal ees nimekirja.
Ja siis ma vaatan järgmine kahanevas element, mis on 3.
Nii panin lõpus on järjestatud nimekirja.
Ja siis ma edasi teha.
Ma leian, 4 ja pane see lõpus.
Leia 5 ja pani selle aasta lõpus.
>> Ja vaadata, kuidas kõik need korda Ma ütlen pane see lõpus on
Põhimõtteliselt vahetada kaks väärtust.
OK?
Ja siis viimane, sa lihtsalt on veel üks element.
Nii et see on juba järjestatud.
>> OK, nii sisestamist sort.
Lisatakse sort sa lähed olema ka et asi, millel on sorteeritud ja
sortimata nimekirja.
Ainuke asi on see, et iga kord, kui olete lisatud element sorditud
nimekirja, siis lihtsalt valida element, mis ees on sortimata nimekirja.
Ja siis sa lähed leida, mida positsioneerida peaks olema järjestatud
osa nimekirjast.
>> Vaatame, mida see nii see mõttekam.
Seega esialgu näiteks Püüan sisestada number kolm
järjestatud osa nimekirja.
Nii nimekiri ei ole midagi.
Nii et ma ei saa lihtsalt panna number 3.
>> Nüüd, ma tahan, et lisada number 5 Sorteeritud nimekirja osana.
Nii ma vaatan number 5.
Märkan, et see on suurem kui 3.
Ma tean, et see peab olema pärast 3.
Nii panin 3 ja 5.
>> Siis ma tahan, et sisestada number 2.
Märkan, et number 2 on tegelikult viimane siis mõlemad 3 ja 5.
Nii et ma tegelikult panna see kõik kuidas alguses nimekirja.
Nii et ma pean, selline, vahetustega kõik elementide järjestatud loend, 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 siia.
Ja lõpuks, ma vaatan number 4.
Ja märkan see peaks olema vahemikus 3 ja 5.
Ja siis ma panen selle sinna ja nihe kõik muud elemendid.
Mõtet?
>> Bubble Sort.
Nii mull sorteerida on põhimõtteliselt mida sa oled teeme - me nimetame seda mull
sort, sest sa lähed läbi nimekirja - see on tegelikult parem, kui ma lihtsalt näitan
teile meeldib see -
ja sa lähed võrrelda külgneva numbrid.
Ja sa lähed, et vahetada oma seisukohti, kui need ei ole
õiges järjekorras.
>> Ühesõnaga, mis toimub juhtuda, on siin, näiteks,
sul on 8 ja 6.
Sa tead, et sorteeritud viida tegelikult on 6 ja 5, eks?
Nii et sa lähed swap tellimusi.
Siis ma näen 8 ja 4 siin.
Ja ma teen sama asja.
Vaheta uuesti.
Ja lõpuks, 2 ja 8.
Ma ka vahetada neid.
>> Seda nimetatakse Bubble Sort sest pärast kusjuures iteratsioonide, tegelikult
suurim arv nimekirjas saab kõik viis lõpuks nimekirja.
Kas see on mõtet?
Sest see hoiab see vahetada ning selle liigutamine paremale.
>> OK, nii et see on teist iteratsiooni.
Oleks sama asi.
Ma teen ühe swap ja siis viimane.
Ma, et ei ole vahetustehingud ja nimekiri on sorteeritud.
Nii Bubble Sort, me põhiliselt hoida läbimas nimekiri ja vahetada
asjad kuni märkan, et ma ei teinud tahes vahetuslepingute teed, et korduse mis
tähendab, et nimekiri on juba valmis.
Mõtet?
>> Räägime natuke umbes sõiduaega.
Nii et ärge te meeles pidada Big O, Omega ja Theta?
Jah?
OK, mis on Big O kõigepealt?
>> Publik: [kuuldamatu].
>> LUCAS: Jah, seda nimetatakse halvima runtime, mis tähendab lihtsalt, et see on
kui palju te ootate programm võtta joosta.
Nagu poolest -
sel juhul - n.
Elementide arv list halvimal juhul.
Like, halvimal võimalikul.
>> Nii mull sortimine näiteks meil on Big O n ruut.
Miks me peame seda?
Miks on Bubble Sort Big O n ruut?
>> Publik: [kuuldamatu].
>> LUCAS: Jah, halvimal juhul on mis ma pean tegema n iteratsiooni.
Nii iga iteratsiooni läheb tuua suurima elemendi lõppu
nimekirja.
Nii halvimal juhul on see, et mul on mida teha, et asi n korda.
Ja kõik need ajad, ma pean teha n vahetustehingud, 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 ruudu sest iga iteratsiooni, ma pean
pilk iga element aastal nimekirja.
Ja siis leida väikseim mis tähendab, et ma pean
vaadata läbi n elementi.
Ja ma pean tegema, et n korda, sest Mul on valida kõik n elementi.
>> Sisestamise sort on ka n ruudu sest halvimal juhul tahe
tuleb üks, ma pean lisada n numbrid, kas pole?
Nii et ma juba tean, et ma lähen on n iteratsiooni.
Aga kõik need numbrid, kui mul oleks vaatama kõik numbrid
järjestatud nimekiri ja panna see kõik viis ees, mis on n ruudu
kuna seda n korda n uuesti.
Mõtet?
Aga omega?
>> Publik: [kuuldamatu].
>> LUCAS: See on parim stsenaarium.
Nii et see on nagu, et palju korda sorteerimine, parimal juhul on
kui nimekiri on juba valmis.
Nii et sa tõesti ei pea midagi teha.
Bubble Sort on parim stsenaariumit, n.
Kas te teate, miks?
>> Publik: [kuuldamatu].
>> LUCAS: Jah, kui sa jälgida kas andmed suhe olnud vahetus või
mitte, kui sul on midagi nagu seatud tõsi, kui seal oli korduse kui
Nimekiri on juba järjestatud, põhimõtteliselt Mis juhtub on, et 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 juures n elementi.
Miks valida sort n ruutu?
>> Jah, isegi kui nimekiri on järjestatud jaoks iga iteratsiooni valik sort, I
on valida minimaalne element.
See tähendab, et ma pean välja otsima üldse elemendid sortimata
nimekirja ja leida minimaalse iga iteratsiooni.
Kas see on mõtet?
>> Ja sisestamise mõõk on N, sest nii, et ma üritan sisestada
numbrid ja kõik numbrid, kui ma proovite lisada neid, ma näen, et ***
on õiges asendis.
Ma ei pea minema kontrollima kõiki teisi numbrite sortimata nimekirja.
Nii et miks on see n.
Mõtet?
Ja mis on teeta?
>> Publik: [kuuldamatu].
>> LUCAS: mida, palun?
Ütle seda uuesti.
>> Publik: [kuuldamatu].
>> LUCAS: Täpselt.
Nii et näete, et ainult valik salvestatud Merge sort on teetast.
Ja see on, sest sul on ainult beta kui mõlemad Big O ja Omega sama.
OK.
Ja lõpuks, liita sort on log n.
>> Ja siis, kui Dan ütles, Tarkvaraprojekteerimise On selline nagu samal viisil, et
sa binaarne otsing.
Nii saad nimekirja.
Ja sa lähed pooleks.
Ja siis, kui lõigata väiksemates pooleks.
Ja siis hakka neid.
Te mäletan seda, eks?
OK, kui ta rääkis.
>> OK, viiteid.
Mis on pointer?
>> Publik: [kuuldamatu].
>> LUCAS: aadress.
OK.
Ma tean, et David näitab kamp videod binky ja asjad juhtides
üksteist.
Aga mulle meeldib mõelda vihjeid kui lihtsalt aadress.
Nii et see on muutuja, mis läheb salvestada aadress.
>> Nii et see on lihtsalt see eriline muutuja mis on neli baiti.
Pea meeles, et kursor midagi on alati neli baiti meie 32-bit
masin nii puhul 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 saa olla osuti osutab
kõik need aadressid.
Niisiis, miks me kasutame osuti on kui ma pean meeles pidama asukoha
et konkreetsed muutuja on mälu.
>> Ja te meeles pidada, et üks neist juhtudel oli, kui mul on funktsioon
kui ma tegelikult tahan, et sa swap reaalarvud, ma tegelikult
saatma pointer.
Mitte muutuv.
Kas te meeles pidada, et?
Vahe -
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 kõne funktsioon
koos suunanäitajaks, ma olen võimeline tegelikult andmete muutmiseks, mis oli peamine.
Mõtet?
>> Kuigi osuti on koopia, osuti on veel reaalne aadress
muutuja, et ma tahan muuta.
Mõtet?
>> Nii luuakse suunanäitajaks.
Pea meeles, et osuti on alati tüüp, et see osutavad
ja siis täht.
Ja siis paned nime.
Seega pidage meeles, et kui teil on mis iganes täht, see on nagu osuti
mis tahes muutuja tüüp, et teil oli.
>> Nii et siin on täht, näiteks, see on pointer ja täisarv.
Ja siis char täht on viit char star ja nii edasi.
Jah?
>> Publik: Mis siis, kui meil on kursor n täht x.
Ma tean, mis loob kursor x.
Kas see ka tunnistada x täisarv?
>> LUCAS: OK, nii et kui te ütlete, n täht x, sa ei loo viit
muutuja x.
Sa lood pointer nimega x.
>> Publik: [kuuldamatu].
>> LUCAS: Nii et kui ma ütlen n täht x, ma olen ütlesid, hei, mälu, ma lähen
saada üks neist kolm kasti.
Ja ma ütlen, et see saab olema x, mis on
läheb osuti.
Ja midagi huvitavat viiteid on see, et me ütleme, et *** on
4 baiti 32-bit masin.
Ja selle põhjuseks on asjaolu, 4 baiti on 32-bitti.
>> Ja masinad, mis on 64 bitti tegelikult on suunanäitajaks aadressid
, mis on 64 bitti pikk.
Nii lihtsalt see suurus aadressid masin on erinev.
>> Nii Viitamine ja viite mahavõtmine.
Seal on kaks ettevõtjat, et te peaksite meeles pidama.
Esimene on ampersand.
Teine on star.
Ärge saage segaduses, et täht ja see STARi vääriliseks, sest mäletan, et
Sel juhul on teil n täht.
>> 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 muutuv täht, sa oled
Kõne all.
>> Kui te olete just täht ja siis muutuja nimi, tähendab see, et
te viite mahavõtmine pointer, mis tähendab, et te vaatate
pointer, leida aadress on osutades, läheb sellele aadressile,
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 kursor ja te teha star pointer, see on
sisu pointer.
Nii et sa minna iganes seda osutades ja vaata pidev sisu.
Ja ampersand on sama asi nagu aadress.
>> Nii et kui mul on muutuv - 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 vahendid, 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õrdub ampersand.
Nii kõigepealt, n star pa.
Mida ta teeb?
>> Publik: [kuuldamatu].
>> LUCAS: Jah, nii n star pa esiteks deklareerib pointer nimega pa.
Ja siis see, määrates väärtus et osuti olema aadress.
Nii ampersand.
Siis, kui ma seda teen star pb, Mis on staar pb?
>> Oh, vabandust.
See on ka puudu. n täht pb.
Ma mõtlen star pc.
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?
>> Publik: [kuuldamatu]?
>> LUCAS: Jah.
Nii et kui te lähete mälu ja te lähete kast, mis on tähis, PA,
sa oled tegelikult toimub vaata aadressi.
OK?
Jah?
>> Publik: [kuuldamatu]?
>> LUCAS: Jah, osuti on aadress.
Ära kunagi unusta, et.
See on nagu kõige olulisem osa kohta vihjeid.
Seal on hoidmiseks ja aadress teatud muutuja.
Midagi veel?
Muid küsimusi?
OK.
>> Nii Näiturid 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 pointer konkreetse koha mälus, kus ma
eraldatud kolm teenindusajad täisarvud.
Kas see on mõtet?
>> Nii et kui ma int massiiv 3, mida ma teeme, põhimõtteliselt on luua kolm
slots mällu.
Nii et ma lihtsalt leida kolm pilude mälu.
Nii et kui ma seda teen, siis star massiiv, see Sisuliselt tähendab sisu massiivi
mis tähendab, et ma kustutan pointer, ma lähen selle koha, 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 minna seda seisukohta, tegelikult, ja pane number kaks.
>> Ja siis lõpuks, kui ma array pluss 2, ma lähen sinna, kus
array osutavad.
Ja siis ma liikuda mälu plokki.
Ja siis ma panen number kolm siin.
Jah?
>> Publik: 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 aadress.
>> LUCAS: Jah.
Miks me näiteks öelda massiivi 0, array 1 ja 2 sõ***?
Ma tahan öelda, 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 see, kui sa array 0, see on sama asi, mis teeb massiivi
pluss 0, mis tähendab, ma minema selle seisukoha, ja ma ei ole
jäta ühtegi mälu plokki.
Nii et ma ei liigu ühtegi mälu plokki.
Jah?
>> Publik: [kuuldamatu]?
>> LUCAS: Nii et ta küsib, mis on vahet teed
see või teed malloc.
Üks erinevusi on, et int massiiv 3 loob
array virna.
Ja kui ma seda teen malloc, see loob hunnik.
Kas see on mõtet?
>> Niisiis, kuidas malloc tegelikult toimib?
Miks me isegi vaja kasutada malloc?
Teie koostaja omamoodi arvud välja kõik muutujaid deklareerida.
Ja ta loob ruumi kõigile neist virnas.
Nii et kõik teie muutujad lähevad olema kusagil virnas.
Nii et siin on keskkonna muutujad.
>> Ühesõnaga, ruum nende muutujate mälu on eraldatud
kompileerimise ajal.
Nii et see tähendab, et teie arvuti on teada kõik need muutujad
varem.
See ei pea teadma, mida väärtus sa lähed panna neid.
Aga ta peab teadma, kuidas palju mälu vaja.
>> Aga nüüd ütleme, et näiteks loote array 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älubloki te eraldada, eks?
>> Nii et see ei ole tegelikult mõtet sa öelda pane 100 tähemärki.
Ja mis siis, kui kasutaja kirjutab 150?
Sa lähed kruvitud.
>> Niisiis, te ei saa olla kindel, kui palju mälu sul on vaja eraldada
kui sa kompileerida programmi.
Sa tead, et töötamise ajal.
Nii et miks teil on hunnik.
Nii hunnik läheb on mälu et sa eraldamise ajal
Programmi kestuse töötab.
>> Ühesõnaga, kui sa malloc, mida sa teed eraldab mälu
runtime, mis tähendab, et sa oled otsustades õige sel hetkel, et sa
peaks olema, et mälu.
Nii et kui sa oled eraldamise.
Kas see 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.
>> Publik: [kuuldamatu]?
>> LUCAS: Nii getString on kutsun malloc.
Lubage mul rääkida malloc ja Ma seletan getString.
Nii malloc on sama asi kui mälu eraldamisel.
Nii see läheb eraldada mälu hunnik.
Ja see läheb tagasi pointer kui see mälu olid eraldatud hetkel.
>> Nii et kui sul -
siin näiteks -
n täht pointer.
Ja siis osuti võrdub malloc suurus tolli korda 10.
Ma loon pointer.
Ja siis ma määrates, et kursor väärtus pointer et malloc
on andnud mulle.
>> Nii et ma olen palunud malloc saab eraldada ruumi 10 täisarvud.
Just see on selge.
Ja malloc annab mulle tagasi pointer, et koht.
Mõtet?
OK.
I ja getString on põhiliselt teed helistage malloc nii saab jaotada
mälu ajal käivitamisel.
>> Pea alati meeles, et kontrollida null sest malloc läheb tagasi null
kui seda ei saa eraldada mälu.
Oletame, et te küsite naeruväärne mälu.
Arvuti ei kavatse olla võimalik eraldada nii palju.
>> Nii malloc lihtsalt läheb tagasi null.
Nii et alati meeles, et kontrollida, kas pointer, et sul on malloc on
null või mitte, sest kui ta on, siis võite tuleb viite mahavõtmine pointer 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.
Aitäh.
>> [APLAUS]
>> LUCAS: Iga viimane küsimused enne Rob on?
Ei?
Jah?
>> Publik: ma ei näe Selle ühe online.
Kas olete alla laadinud seda veel?
>> LUCAS: Ma arvan, et Dave on laadige see kohe.
>> DAVE: See saab lähetatud.
>> LUCAS: See saab olema võrgus.
>> Publik: See oleneb.
>> LUCAS: See toimub?
OK.
Jah?
>> Publik: [kuuldamatu]?
>> LUCAS: Jah, sa peaksid vabastama kõik mälu, mis on pandud hunnik.
>> Publik: [kuuldamatu]?
>> LUCAS: Jah.
Iga kord, kui on kultuur 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ädal viis asju.
Esimene asi, mis meil on virnas.
Seega pidage meeles, et seal on ainult üks stack kaadrit aktiivne funktsioon kõne.
Me näeme, et teine.
Ja ka meeles pidada, mida tegelikult läheb Iga freimi saab olema
kohalikud muutujad meie funktsioonid, argumentide vastu meie
funktsioonid koos paari muid asju sa tegelikult ei
pea muretsema.
>> Nii et siin on näiteks programm, kus teate, peamine on printfing tagasipöördumist
väärtus foo 4.
suva lihtsalt läheb tagasi väärtus baar 4 koma 6.
Ja bar saab määrata mõned kohalikud muutuja n võrdub 4 korda 6.
Ja siis tagasi n.
>> Nii vaatame korstna kogu tegelik iteratsiooni programmi.
Nii et seal on põhjas meie stack.
Pea meeles, et stack üles kasvab.
Nii allosas meie virna me on freimi jaoks peamine.
Kui programm käivitub, peamised on alati saab olema
alt meie stack.
>> Ja mis on sees meie freimi jaoks peamine?
Nii et kuigi ei ole kohalik muutujate peamiste, nagu ma enne ütlesin,
meil argc ja rgv asumist ruumi sees peamine freimi.
Seega peamine hakkab nüüd helistada funktsiooni foo.
Ja see tähendab, foo läheb saada oma freimi.
>> Nüüd oleme sees funktsiooni foo.
Ja mida on vaja minna foo on freimi?
Noh, foo on argument n.
Ja n on võrdne 4, sest see on, mida peamine möödub nagu foo argument.
>> Nüüd foo läheb helistada bar.
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 baar
ka kohaliku muutuja n.
Ja n me seatud võrdne 24.
>> Nüüd bar läheb tagasi n.
Nii baar on tagasi 24 freimi suva.
Ja kuna baar on naasmas, et tähendab, et me popping freimi
bar off stack.
Nii et kõik, mälu, baar oli kasutades on nüüd ära pinu.
>> Nüüd foo ka läheb tagasi 24 peamine.
Nüüd, et suva on tagasi, mälu et foo kasutas oma "
freimi on ka läinud.
Ja nüüd, pea läheb helistada printf.
Nii printf on lihtsalt üks funktsioon.
Kui me nõuame printf, see saab olema teise freimi jaoks printf
funktsioon kõne.
>> Mida me kulgeb printf?
See, mis toimub, et minna selle freimi.
Vähemalt, me läbiva et protsenti i Längkriipsu n ja
argument 24.
See võib olla rohkem see freimi kui printf juhtub kasutavad mõned
kohalikud muutujad.
Me ei tea.
>> Aga kõik, mis läheb printf poolt freimi.
See läheb täide printf.
Siis printf tehtud.
Ta naaseb.
Lõpuks peamine on tehtud.
Main naaseb.
Ja siis meie programm on tehtud.
Jah?
>> Publik: Kas olete näinud [kuuldamatu]
argumendid [kuuldamatu]
parameetreid?
>> ROB: Nii on väike erinevus vahel argumente ja parameetreid.
Ja tõesti, üldises keeles inimesed kipuvad lihtsalt segada neid kogu aeg.
Aga parameetrid on ametliku nimi asjad.
>> Nii argc ja argv on parameetreid peamine.
Argumendid, mida sa tegelikult liigu nagu need parameetrid.
Nii et kui ma kõne foo 4, 4 on argument ma möödaminnes sisse
Ja parameeter n, sees suva, võtab väärtuse 4
kuna 4 oli argument.
>> Publik: [kuuldamatu]?
>> ROB n on kohaliku muutuja baari.
n on ikka kohalik foo, kuid see parameeter foo.
See ei ole kohaliku muutuja.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: foo on lihtsalt helistan baari ja tagastamise iganes baar tulu.
>> Publik: [kuuldamatu]?
>> ROB: Jah, lihtsalt et näha, mitu Kestab raame.
Jah?
>> Publik: Miks oli suva nimega enne printf?
>> ROB: Miks oli suva nimega enne printf?
Nii et ma oleks selle asemel midagi teinud nagu int x võrdub foo 4
ja seejärel trükitud x.
Kuid selle asemel, I kombineeritud funktsioon sea printf argument.
>> Aga teate, et me ei saa tegelikult täita kõne printf kuni me
aru saada, mis foo 4 on.
Nii et me hinnata seda.
Ja alles siis, kui see on tehtud lähed tagasi tulla ja hinnata seda.
Jah?
>> Publik: Kuna mõlemad bar [kuuldamatu]
väärtus, miks me ei ole [kuuldamatu]?
>> ROB: *** täiesti olema int.
See ei olnud püütud üle mitu keerdu.
Seega peaks olema int baar ja int suva sest need mõlemad
naasevad täisarvud.
Void on ainult siis, kui *** ei kavatse tagasi tegelikke väärtusi.
Jah?
>> Publik: Kui sul oleks joon Vastutasuks [kuuldamatu]?
>> ROB: joon vastutasuks?
>> Publik: Jah.
Nagu siis, kui sa ei printf ja [kuuldamatu] oleks see printida kaks korda?
>> ROB: Nii sees suva?
Kui meil oleks printf siin?
>> Publik: Jah.
>> ROB: Nii et kui meil oli printf õigus Siit oleks printida kord.
Kuna me nõuame foo kord paremale siin, siis löön printf.
Siis helistan baari.
Ja siis suva naaseb.
Ja ongi kõik.
Me ainult kunagi tekib printf kord.
Jah?
>> Publik: [kuuldamatu]
printf helistades suva, sest me oleme esimene kutsudes printf ja siis me läbiva
argumendid.
>> ROB: Nii teoreetiliselt ei ole printf helistades suva?
Seega ei ole.
Just selleks, et c läheb täita need asjad on, enne kui me 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 oma argumente hinnatakse.
Ja nüüd me võime teha helistage printf.
Jah?
>> Publik: Üks küsimus.
Kui teil on tühine funktsioon, peab teil on tagasipöördumine semikoolon?
>> ROB: Sa ei tagasipöördumist semikoolon kui teil on tühine funktsioon.
OK.
Nüüd mõned hunnik asju.
Nii hunnik on, kuidas me tegelema dünaamiline mälu haldamine.
Ja see on otseselt vastuolus korstnat, mis me nimetame automaatne
mälu haldamine.
>> Nii on virnas, siis kunagi on tegeleda, kuidas kohalikud muutujad
surutakse ja hüppasid välja kõik need virna raamid ja kõik see kraam.
Sa ei pea muretsema selle.
See on automaatne.
Nii hunnik on manuaal.
Ja [kuuldamatu]
pärineb nende funktsioonid malloc ja tasuta.
>> Nii et siin on teine programm.
Kõik me teeme on mallocing täisarv.
Me ladustamiseks see täht x.
Muidugi, me peame kontrollima näha, kui x on null.
Siis me lihtsalt määrata, mida x osutades 50.
Trüki mida x osutades, print x, ja siis vaba x.
>> Niisiis, kuidas see tegelikult läheb otsima kui me vaatame meie stack ja hunnik?
Nii et me hakkame uuesti.
Alt meie virna nagu enne.
Pea meeles, et sinu hunnik otse vastu korstnat?
Nii et me ei kavatse olla top meie hunnik seal.
>> Nii põhjas meie stack on meil 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 üleskutse malloc.
>> Nii et me teeme üleskutse malloc.
Malloc on funktsioon.
See läheb aina freimi.
Mida me möödaminnes malloc?
See saab sisse minna magasini raam.
Me kulgeb suurusest n, mis on 4.
Niisiis, mis on möödunud kuni malloc.
>> Mis malloc teha?
See haarab meid ruumi hunnik.
Nii et me ei kavatse minna hunnik.
Ja me ei kavatse haarata 4 baitide hunnik.
Teeme lihtsalt anda, et suvalise aadressi.
0x123 Lihtsalt teeselda, et on aadress, mis on hunnik.
>> Mis on tegelikult sees, et piirkond mälu aadressil Ox123?
Garbage.
Nii et me ei ole salvestatud midagi ta.
Niipalju kui me teame, et võiks olla midagi.
Sa 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 tulu?
Seame mida ta naaseb.
Seame x võrdne sellega, mida ta on tagasi.
Mis on see, tagastades?
Ta naasis 0x123 kuna see on aadress ploki mälu, et see
lihtsalt eraldatud hunnik.
>> Nii 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 et aadress.
Nüüd on meil kontrollida, kui x on null.
See ei ole null.
Meie sooviks, et malloc õnnestunud.
>> Nüüd täht x võrdub 50.
Nii star mäletab see tähendab minge aadressile.
Nii 0x123 Me minge aadressile.
Nii et jõuame sinna.
Mida me teeme sellel aadressil?
Me ladustamiseks 50.
>> Nii et pärast seda joont, mis on see, mis asjad hakkavad nägema.
Nüüd see ei ole enam prügi sinna.
Nüüd me teame, et 50 on selles eelkõige aadress, sest
seadsime ta selle.
OK?
Nüüd me ei kavatse trükkida f.
>> Nii et kõigepealt me trükkida täht x.
Mis on täht x?
Jällegi täht x vahenditega minna asi, mis x osutab.
Nii x on hoidmiseks 0x123 Mine seda.
Me saame 50.
Nii printida f seda.
Ja see tähendab, et see saab printida 50.
Ja siis tagasi.
>> Ja siis on meil teist printf.
Oleme nüüd protsenti p.
Kui te ei ole seda näinud, see on kuidas printimist pointer.
Nii et meil on protsenti I protsenti f, ja kõik need juba.
Nii protsenti p trükkima pointer.
>> Nii x on viit.
Nii et kui me tahame, et printida x ise me trükkimiseks, mis on tegelikult sees
x, mis on 0x123 Nii et esimene print f trükkimineku 50.
Teine trükk f läheb printida 0x123 Jah?
>> Publik: Kas sa kasutad protsenti x printida pointer?
>> ROB: Nii et te kasutate protsenti x printida pointer?
Nii saate vaid protsendi x on lihtsalt, Üldisemalt, nagu siis, kui teil on
täisarv ja soovite printida see nagu kuueteistkümnendsüsteemis.
See on lihtsalt, kuidas sa seda teed.
>> Arvestades, protsenti d oleks prindi kohaga.
See oli me protsenti d. i on lihtsalt täisarv.
protsenti p on konkreetselt Vihjeid.
>> Nii x on viit.
Me tahame kasutada protsenti p.
Aga protsenti x võiks toimida.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: Jah.
Vähemalt see call - nii I 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 ei
protsenti p kurakriips n ja mis iganes x väärtus on, mis on 0x123.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: See saab printida midagi mis näeb välja selline.
>> Publik: [kuuldamatu].
>> ROB: Nii et see prindib see aadress kujul.
Tundub aadress.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: Miks on mis?
>> Publik: [kuuldamatu]?
>> ROB: Miks on see pointer 4 baiti?
Seega on terve hunnik 0 on ees sellest.
Nii et see on tõesti 0x0000000123.
On 64-bitine süsteem, oleks terve hunnik rohkem nulle.
Jah?
>> Publik: [kuuldamatu].
>> ROB: Nii et esimene printf läheb trükkida -
>> Publik: [kuuldamatu].
>> ROB: Jah, see läheb print Mida x osutab.
Star ütleb mis see on asi osutades.
Haara see.
Mis on see, mis osutab?
50.
Haara see.
See, mida me printida.
Arvestades, et järgmise, me oleme lihtsalt printimine x ise.
Mis on sees f?
0x123.
OK.
>> Ja siis lõpuks, meil on vaba.
Mida me möödaminnes tasuta?
Me kulgeb x.
See kord, kui ma tegelikult kuvata selle freimi.
>> Nii et me möödaminnes väärtus 0x123 vabastamiseks.
Nüüd vaba teab, eks, Ma pean minema kuni hunnik
ja vaba, et mälu.
Seda enam ei kasuta, mida on aadressil 0x123.
>> Nii vaba läheb vabastama et alates hunnik.
Nüüd meie hunnik on tühi jälle.
Meil ei ole mälu lekked.
Nüüd tasuta tagasi.
Pange tähele, et x on ikka 0x123.
Aga see on nüüd kehtetu mälu.
Me ei tohi olla käivitatav x.
Jah?
>> Publik: Return 0 üleliigne?
>> ROB: Kas returen 0 üleliigne?
Jah.
Me lihtsalt panna, et kuna meil tagasi üks õhku.
Nii et see on nagu, jah, saab sisaldavad return 0.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: Nii et pärast vaba x, mis juhtub, kui püüame endid 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 tähendab midagi võib juhtuda.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: Ei, nii et kui teil määrata x midagi muud.
Nii et kui siin ütlesime x võrdub malloc midagi muud -
malloc suurus sündmus -
siis et originaal plokk mälu ei vabanenud.
Ja me oleme ametlikult kaotanud.
See on mälu leke.
Me kaotasime kõik viited selle ploki mälu.
Seega ei saa kuidagi me ei saa kunagi vabastada ta.
OK, nii et siis tagasi 0 vahenditega tehtud.
>> Olgu, stack overflow.
Milleks see hea on siin?
Seega pidage meeles, hunnik läheb alla.
Stack tõuseb.
Nii oli see näiteks loeng, 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 alumine korstna raami.
Siis peamiseks läheb kutsuvad suva mis ei hakka freimi.
>> Siis foo läheb helistada suva 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üüdi enne Siinkohal aga jah.
>> Publik: Kas core dump sama seg süü?
>> ROB: Nii näete segmenteerimine süü core 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?
>> Publik: [kuuldamatu]?
>> ROB: Nii killustatust süü tähendab seal stack overflow.
Nii ei pea.
Killustatust süü tähendab, et sa oled liigutav mälu viisil
sa ei tohiks olla.
Nii et üks viis, et juhtub, on, kui sa korstnat ülevoolu hakkame liigutav
mälu nii, et me ei peaks olema.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: Nii sees lõputu silmuse.
Like, see on nagu rekursiivne lõpmatu silmuse ja nii saame teise
freimi iga kord.
Aga sees regulaarvedude lõpmatu, kui üks -
noh, ärme isegi printida f -
midagi teha.
Mida iganes.
>> Me ei kavatse saada teise freimi.
Me lihtsalt hoiame silmukoiminen üle see üksik käsk.
Stack ei kasva.
On fakt, et iga rekursiivne kõne annab meile freimi.
Sellepärast saame stack overflow.
Jah?
>> Publik: Nii et kui te ütlesite, et saada samas silmus ja seejärel [kuuldamatu]?
>> ROB: Nii et kui sees, samas loop oli printf, sa ikka oleks
ei seg süü.
Ma lihtsalt ei taha segada asju.
Oleks loop.
Sa saad ühe korstna raam printf.
>> Siis printf tagastab.
Siis Sa silmus uuesti.
Sa saad ühe korstna raam printf.
Oleks tagasi.
Single freimi.
Nii et sa ei saa seda lõpmatu kuhjuvad stack raame.
>> Publik: [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 stack raame.
Ja siis me ei korstnat ülevoolu.
Ja see, miks teil on vaja tugipunkti isikliku funktsioone.
Jah?
>> Publik: Kas võimaliku suuruse ja pinu kuhi sama
kõik programmid?
>> ROB: Umbes.
Kas võimaliku suuruse kohta virna ja hunnik sama kõigis programmides?
Umbes.
On mõningaid randomiseerimisest kus stack algab ja
kui hunnik hakkab.
Kui juhtub, et on terve hulk globaalsete muutujate ja asju, siis võib
ära võtta ruumi oma hunnik.
>> On 64-bitine süsteem, siis praktiliselt lõputu mälu.
Seal on lihtsalt nii palju.
Ajavahemikus 32 bitti ja 64 bitti, mis on oluline erinevus.
>> Sa lähed, et saada palju rohkem korstnat ja hunnik ruumi 64-bit
süsteem, sest seal on lihtsalt rohkem aadressid, et *** saavad kasutada.
Kuid individuaalne süsteem, siis enam-vähem sama palju stack
ja hunnik ruumi.
Hea küll.
>> Seega viimane asi on koostamisel.
Nii et sa peaksid teadma seda protsessi.
Seal on neli suurt sammu.
Nii esimene peaks lihtne meeles pidada.
Eeltöötlust.
See on eesliide eelnevalt selles.
Seega tuleb enne kõike muud.
>> Meeles pidada, hash.
Nii hash määratleb ja hash sisaldab kõigis neist.
Need on kõik eelnevalt protsessor direktiivid.
Need on asjad, mis pre-protsessor hoolitseb.
>> Mis siis pre-protsessor teha?
See on tõesti loll asi.
Kõik see on võimeline on kõik need koopia ja lõigatud, ja kleepida 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, et hash sisaldab standard i0 dot h.
>> Ja iga hash määratlema, mida me oleme näha, mis see teeb?
Selle kopeerimine väärtus, räsi määratletud on määratletud ja kleepida, et
kus te kasutate raha.
Nii eeltöötluse lihtsalt ei tõesti lihtne tekstipõhine operatsioone.
Ta ei tee midagi, tark.
Nii on kõik muu keerulisemaks.
>> Nüüd, et Preprocessor tehtud, me tegelikult koguda.
Mis siis kompileerimine tähendab?
Jälgime nüüd läheb c kood kokkupanemise kood.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: Jah, me leiame, et.
Nii koostamisel.
Me läheme c-st koost.
Nii et see on tegelikult keel muutus.
Koostamine ise tähendab siirdumine kõrgema keele
madalamal tasemel keelt.
>> Ja c on kõrgetasemeline keel võrreldes koost.
Mis on ASSEMBLY?
Tema juhiseid, mis on päris palju näha 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 nende juhiseid
oma CPU mõistab ja tegelikult tõlgib need, et
ühtesid ja nulle.
>> Nii C kokkupanemise kahekomponentsete.
Aga ma ei ole käivitatav veel.
Nii arvavad CS50 raamatukogu.
Me oleme pakkunud teile binaar see CS50 raamatukogu, kus on getString
ja GetInt ja kõik.
>> Aga CS50 raamatukogu -
ja iseenesest - ei ole täidetavad.
See ei pea põhifunktsiooni.
See on lihtsalt hunnik binaarne , mida saab kasutada.
Nii ühendab on see, kuidas me omavahel kokku viia Nende erinevate binaarne faile
arvesse tegelik käivitatav.
Üks, mis saab kirjutada dot kaldkriipsuga dot välja.
>> Nii et see on nagu fail, mida kirjutas - olenemata Teie programm -
Ceaser dot c.
Aga nüüd on see koostatud alla binaarne.
Nii Ceaser dot o.
Ja see on meie CS50 raamatukogud binaarne.
Ja *** on ühendatud ühte täitmisfaili.
Jah?
>> Publik: [kuuldamatu]?
>> ROB: Nii esimese hulka, pidage meeles, hash hulka on tegelikult
pre-protsessor samm.
Aga see on eraldi.
Kui sa ei kasuta funktsioone on väljaspool oma ühe faili siis,
Ei, sa ei pea siduda midagi sest sul on kõik.
>> See tähendab, et printf on seotud sisse
Kui sa kunagi kasutada printf, et midagi mis tuleb omavahel seotud
sest sa ei kirjutanud seda.
Ja tõepoolest, Printf automaatselt seotud sisse
Sa tead, kuidas, mida käsurea või kui kirjutad teha, näed see on
kriips l CS50, mis on link aastal CS50 raamatukogu?
Printf ja värki, läheb seotakse automaatselt.
Lisaküsimusi midagi?
>> Publik: [kuuldamatu]?
>> ROB: ühendab?
Meil on terve hunnik erinevate binaarne faile.
See on kanooniline näide et 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, siis ei saa tegelikult käivitada oma programmi, sest getString string
ole veel täielikult määratletud.
>> See on ainult siis, kui sa link oma binaarne mis sisaldab getString et nüüd on kõik
Olgu, ma ei saa tegelikult täita getString.
Minu fail on valmis.
Ja ma ei saa käivitada.
Jah?
>> Publik: Kas ühendavad teisendada binaarne Teostatavad?
Nii et isegi kui teil ei ole muid raamatukogud, poleks see ikkagi
vaja tõlkida [kuuldamatu]?
>> ROB: Nii käivitatava on ikka kahendsüsteemis.
See on lihtsalt ühendades kogu hunnik Binaarpaketid.
>> Publik: Tänan sind nii palju.
>> ROB: No problem.
Muid küsimusi?
Muidu me oleme valmis.
Hea küll.
Aitäh.
>> [APLAUS]
>> Publik: Aitäh.
>> ROB: Jah.