>> [Muusika mängib]
DAVID J. Humala: See on nagu uustulnuk seminar täna.
OKEI.
Nii väga vihmane välja.
See kipub juhtuma kolmapäeviti kuid kõik suuremad võimalused
küsimustele täna.
Nii alustame tegelikult film vaid hetkeks.
Aga hakkame suurejooneliselt nagu alati.
>> See on CS50 ja see on nädala lõpuks 4.
Nii et kui te olete kunagi vaatasin TV ja filmi, kus
seal on mõned arvuti eksperdid ja politsei või FBI või mõni asutus
üritab jõuda mõned Vastane, noh, sa oled
ilmselt kuulnud väljendit "parandada" kusjuures see tehnik kuidagi
võluväel suumib lõpmatult kaugele näha kurjategijad
identiteedi või numbrimärk isegi virvendama peegel
või helk kellegi silma.
Nii tõesti, võtame pilk mõned sellised stseenid Hollywood.
[Video taasesitus]
-OK, Nüüd lähme hea vaadata teid.
>> -Hoia seda.
Jookse, et tagasi.
>> -Oota hetk.
Mine õige.
>> -On, Külmutada, et.
-Täisekraan.
-OK, Külmutada, et.
-Tighten Üles, et sa?
-Vector Sisse, et mees poolt tagarattal.
-ZOOM Aastal siinsamas kohapeal.
Hindajaks õige varustus, pilt võiks laiendada ja teritatud.
-Mis see on?
-See Lisaseadmete programmi.
-Kas Sa selge, et kuni kõik?
Ma ei tea.
Olgem tõsta see.
>> -Enhance Osa A6.
>> -Ma Suurendanud detail, and-- Ma arvan, et
piisavalt suurendada, vabastage see minu ekraanil.
-Ma Suurem peegeldus oma silmaga.
>> Vaatame käivitada läbi video parandamiseks.
-Edgar, Saab parandada seda?
>> -Oota.
>> -Ma Olen töötanud selles peegeldus.
>> -Someone Peegeldus.
-Reflection.
-On See peegeldus mehe nägu.
-The Peegeldus.
-On See peegeldus.
-ZOOM In peeglisse.
-Sa Ei näe peegeldus.
-Kas Sa parema pildi siit?
-Kas Teil suurendada teda siin?
-Kas Teil suurendada seda?
Kas teil suurendada seda?
>> -Kas Me parandada seda?
>> -Kas Teil suurendada seda?
Hoia teisel, ma tõsta.
-ZOOM In uksele.
-Times 10.
-zoom.
-Sisse kolima.
-Rohkem.
Oota, peatus.
-Stop.
-Pause Ta.
-Keerake Juures 75 kraadi ümber vertikaalse, palun.
-Stop.
Mine tagasi osa umbes ukse uuesti.
>> -Got Pildi tugevdaja, mis võib bitmap?
>> Hei, äkki saame kasutada Pradeep Sen meetod näha arvesse aknad.
-See Tarkvara on nüüdisaegse.
>> -The Eigenvalue on välja lülitatud.
>> Hindajaks õigus kombinatsioon algorithm--
>> -Ta Võetud kõrvaldamine algoritme järgmisele tasemele,
ja ma ei saa neid kasutada suurendada selle foto.
>> -Lock Kohta ja suurendada z-telje.
>> -Enhance.
-Freeze Ja parandada.
>> [Taasesituse lõpetamiseks]
>> DAVID J. Humala: Okei, nii et Kõigil neil on tegelikult sõnu.
Nad lihtsalt nöörile kokku nii, et see ei ole tegelikult mõistlik.
Ja tegelikult, CS50 ja kursusi, nagu see kipub rikud palju TV ja filmid
Sinu jaoks.
Sest kui need arvuti eksperdid on surmamise tingimused ja öelda
väljamõeldud asju eigenvectors ja z-telg,
ja mis tahes hulk teisi tegelikult rohkem tehnilisi tingimusi,
nad tõesti lihtsalt nöörile sõnad koos liigagi tihti.
Kas see on üks meie lootusi, on see, kui kõrvaltoime kursustel
niimoodi, hakkab rohkem inimesi Kogu maailmas on võimalik lööma
ja lihtsalt kunagi nii veidi mõjutada kvaliteedi ja täpsuse filmid?
>> Tegelikult võtame pilk reaalsus.
Nii et siin on personal foto Mary, üks meie õpetamise stipendiaatide.
Ja oletame, et ta on kahtlustatakse midagi.
Ja veel, seal kumama mõned tõend oma silmaga,
või peegeldus tema prillid.
Noh, kui me teeme täpselt nii, nagu filmid ettepaneku, milles me zoom ja "parandada",
see on, kui palju teavet on Mary nägu
kui pildistate selle algse resolutsiooni.
>> Ja tegelikult, näed neid dots.
Ja need, mis on piksleid, P-I-X-E-L-S,
mis on lihtsalt ruudu tavaliselt mis on dot et komponeerib pildi.
Ja juba järgmisel päeval ja tegelikult isegi täna mõned tänapäeva LED televiisorid
või LCD-telerid, kui sul üks oma toas või kodus,
kui sa tahad minna super lähedal, ja eriti kui see on veidi vanem TV,
saab vist isegi need täpid ja see on, mida kirjutada pildi.
>> Ja ei ole enam teavet kui see.
Võiksime "parandada", selles mõttes, silumiseks asjad üle ja omamoodi
aimates selline, omamoodi mida värv peaks olema kõrval Mary silma
nii, et see ei ole tegelikult nii pixelated.
Aga kui ma saan suum, seal on paha poiss oma silmaga.
Nagu see on kõik informatsiooni meil.
Te ei saa luua informatsiooni eimillestki.
Seal on ainult piiratud bittide arv seal.
>> Nii Ülesanded 4, kus Teil on võimalus
mängida sellist maailma.
In Ülesanded 4, saate uurida maailma graafika ja kriminalistika,
ja tegelikult kirjutada koodi mis taastab kaotatud pilte.
Te kirjutate koodi manipuleerib olemasolevaid pilte
ja lõpuks aru, mida on toimub all kapuuts.
>> Ja selgub, et see on tegelikult mitte kõik nii keeruline.
Näiteks, kui me tahtsime esindavad naerusuu kus
Nende musti piksleid, või need mustad täpid,
Noh, me võiksime lihtsalt esindavad neid tõeliselt bitmap.
Ja kui sa kunagi kuulnud, et Väljend bitmap ehk
nüüd hakkab tegema vähe mõttekam täna.
>> Me juba teame, mida natuke on.
On 0 või 1.
Ja kaardil on lihtsalt midagi nagu paberileht
mis annab teile juhiseid ja on võibolla ruudustik x- ja y-koordinaadid.
Nii et siin on bitmap.
On kaarti bitti mille kohaselt 1 on ilmselt
läheb esindama valge piksel, ja 0 läheb esindama must piksel.
Aga me võiksime kindlasti pöörake ümber.
See ei ole tegelikult küsimus, et Niikaua kui me järjekindlalt.
Ja siin on, kuidas saavad binary-- sees Arvutiprogrammi mällu või isegi sees
faili kõvakettal drive-- võiks salvestada
lihtsaim naerusuu pilte.
Aga mida me muidugi puudub see pilt?
Värv, eks?
See on ilmne järgmine samm või suurendamine, et parandada seda värvi.
Nii kahjuks vaid ühe natuke, 0 või 1, võiksime esindada värvi.
See võiks olla punane või sinine või must või valge või roheline või roosa,
või paari värve.
Aga lihtsuse huvides, siis me lihtsalt eeldada, must ja valge.
>> Mis siis loogiliselt me ​​peame, kui me soovite rakendada värvi pilt?
Mida me peame tegema?
Nagu kui piiravaks teguriks siin on see, et üks natuke saab ainult
esindavad kaks riiki, 0 või 1, valge või mustad, mida sa teha tahad?
Sihtrühm: Rohkem andmeid.
DAVID J. Humala: Rohkem bitti, yeah rohkem andmeid, rohkem bitte.
Ja tõepoolest, see on täpselt, kuidas värvipilte on esindatud.
Selle asemel, et kasutada ühte bitti, et 0 või 1 iga piksli iga dot,
sa lihtsalt kasutada mitut.
Võib-olla kasutada 8, võibolla sagedamini kasutada 24, ning selles, Ülesanded
4, siis sa mängid faili formaat, mis kasutab 24 bitti tavaliselt.
>> Aga enamik teist on ilmselt tuttav JPEG.
Kui olete kunagi võtnud Foto telefoni,
või laaditakse või näinud midagi Facebook või Flickr iga number
foto baasil veebilehed, olete ilmselt näinud JPEG enne.
Ja selgub, et see on faili formaadis me ei kavatse kasutada pset 4,
millega sa lähed on taastuda pildid
et ma olen kogemata kustutati vigane mälukaart kaamerasse
kui soovite.
>> Ja selgub, et kuigi JPEG on päris sophisticated--
see on palju keerukam kui must ja valge dots
nägime hetk tagasi, sest seal on tegelikult väljamõeldud algoritme, et
kasutatakse suruma JPEG, nii et sul võib olla tore,
pildikvaliteet kuid kasutades suhteliselt vähe bitti.
Ja me tuleme tagasi compression enne pikk.
Selgub, et esimene kolm baiti JPEG image--
ükskõik, mida olete võtnud foto of-- on väärtused, 255, 216, 255.
>> Teisisõnu, kui sa just vaata, et muster bitti,
siin esindatud kolm baiti või 24 bitti kokku,
Suure tõenäosusega saab järeldada, et sa vaatad seda esimese kolme
baiti JPEG.
Ja see on see, mis on tuntud kui allkiri JPEG.
Palju failivorminguid seal kipuvad alustada
teatud mustrid 0. ja 1s, nii, et Windows ja Mac OS ja iOS,
ja Android teada, millist faili nad on lisaks nn faili
laiendamine, et palju faile on.
Kui teil on .jpg, mis on teise aimugi arvutiga.
>> Nii saab nüüd vaadata seda veidi tehniliselt.
Me teame koma Süsteem on 0 kuni 9.
Me teame, binaarne on 0 ja 1.
Ja kui te arvate tagasi pset 0, meil oli teile maadelda,
jaoks natuke midagi nimetatakse kuueteistkümnesüsteemis
kus sul on 16 numbrit, 10 asemel või selle asemel 2.
Ja need numbrid Tavapäraselt on 0 kuni 9 ja seejärel
läbi f, kus f näitab, mida kümnendnumbrina, nagu kiire meelerahu
vaadata?
Niisiis, 15.
Ja peab moodustama 10, lihtsalt iseloomu tellimise et ma olen andnud.
See on lihtsalt suvaline konventsioon, kuid see on üsna standard.
>> Nii et kui me vaatame seda mustrit Kolme bytes-- olgem
hakka lihtsalt vaadata seda kooskõlas kuidas
arvuti teadlased üldiselt vaadata ja mõelda faile.
Te saate kindlasti mõelda Failide 0. ja 1s, ja kohaga,
aga tegelikult, meil on kombeks kasutada binaarse või sagedamini hexadecimal--
tagasi pset 0.
Nii et lubage mul teha ettepaneku, et 255, 216 ja 255 on vaid need mustrid 0. ja 1s.
Ja sa võid vaadata seda, kui sa tahan teha matemaatika nädalast 0.
Aga nüüd, lihtsalt eeldada et see on tõepoolest õige.
Ma olen lihtsalt ümber kirjutada kolm koma numbrite kolm binaarväärtus.
Nüüd, mida ma lähen tegema, on lihtsalt lisada mõned valge ruum,
ainult loetavuse huvides.
Ja teate, ma lähen lihtsalt liikuda asju välja.
Nii enne, pärast enne, pärast.
Ma teen midagi huvitavat teistele kui lihtsalt levib asjad nii
Selle teatise iga kaheksat bitti nüüd kahed nelja bitti.
See on kasulik, sest kuueteistkümnendsüsteemis Eriti moes
sest iga kuueteistkümnendkoodis 0 kuni f ehk täpsemalt 0 kuni 15,
saab esitada täpselt neli bitti.
Teisisõnu, kuueteistkümnendsüsteemis kui te tahan kujutada 0, see on lihtsalt 0000,
neli nulli.
Ja kui sa tahad esindada 15, see on 1111, mis on neli bitti.
Ja kui sa matemaatikat, kui see on need olemas,
see on 16s koht, mis on annan sina--
pigem, et läheb mina-- kahju, binaarne,
mis läheb teile 15, neist koha twos koht, püksid ja kaheksad koht.
Nii et lubage mul ettepaneku, et seatud neli bitti vasakule
on see, mida me ei kavatse helistada f.
See on suurim number, mida võib esindada neli bitti.
Ja me juba teame kuueteistkümnesüsteemis f on suurim number kuueteistkümnendsüsteemis.
Meil teise f seal, kaks seal.
Ja nüüd, võtke usu mis ma olen teinud matemaatika õigus
ning et vasakul poolel nende osad, 1101,
on sama asi nagu d kuueteistkümnendsüsteemis.
Ja parem käsi, 1000, on vaid 8.
>> Ja et üks lihtne näha, eks?
8 represents-- on õige all, et kaheksad koht.
Nii et meil on üks kaheksad veerus ja miski püksid, kahekesi või ones.
Nüüd enam tavapäraselt, inimesed kipuvad kirjutada kuueteistkümnendarvudega niimoodi,
sa lihtsalt lirts neid koos, ja siis eesliide neid 0x.
See ei tähenda midagi muud kui visuaalne aimugi kuni human--
siin on kuueteistkümnendsüsteemis value-- sest see muidu ei ilmne.
>> Mis tähendab, lõpuks, et muster ühtede ja nullide,
või muster kuueteistkümnendsüsteemis numbrit samaväärselt et sa oled
läheb otsima in Ülesanded 4 on see--
Ja probleem Set 4 spec kõnnime Teile selle kaudu rohkem detail--
aga aru, kui mingi kauge kui Seda saab teha esmapilgul
sa lähed alustada nähes seda palju.
Ja tegelikult, isegi GDB on siluri tutvustasime esmaspäeval
ja Dan tutvustatud pset 3, läheb tihti näitan sulle kuueteistkümnendväärtused
lihtsalt sellepärast, et nad kipuvad olema rohkem tavaliste kui koma või binaarsed
maailma arvuteid.
Nüüd paneme selle konteksti.
Paljud teist ehk mäletavad seda pilt siin, mis tulid siis?
Vista, nii et isegi varem kui et Windows XP tegi seda debüüdi.
Nii et see on ilus maastik.
Ja tegelikult, kui te tuhnima online-- Ma arvan, et see on Wikipedia article,
kus keegi väga hämmastavalt läks leidsin selle kohas maailmas loodud
tema kaamera täpselt õige place--
ja täna tundub like-- kuid see on täpselt sama seade.
See pilt on aga faili vormi nimetatakse bitmap, b-m-p.
Ja me läheme super Kiire pilk, mida see tähendab.
>> Aga bitmap on lihtsalt teistmoodi esindavad pildid ikka kasutada pikslit
in 0. ja 1s, lõpuks.
Aga kiire pilgu, see on rohkem huvitavaid allkiri
alguses fail.
See ei ole lihtsalt kolm baiti, pigem seal
terve hunnik mustreid baitide mis on ettemääratud tähendus.
Näiteks kuskil paar esimest baiti bitmap image
saab olema suurusest Pildi laius pilti,
kõrgus pilti, nii kasulik metaandmed, kui soovite.
Kasulik info, et Photoshop või graafika programmi te kasutate
võiks tegelikult hoolivad.
>> Nii rohkem seda Ülesanded 4, kuid selle
on ainult öelda, et lõpus päeval
kõiki failivorminguid olete kasutanud jaoks years-- Microsoft Word failid,
Numbrid faile, Excel faile, ükskõik kui palju failivorminguid
et võib-olla mõned tuntud faililaiend
on vaid 0. ja 1s all kapuuts.
Ja inimesed on otsustanud mida konventsioonid on,
Mis mustrid 0. ja 1s esindavad Wordi faili versus Excel fail,
versus mõnel teisel failivorminguid.
Nii pset 4, sul on võimalus mängida seda.
>> Aga mida see tähendab, et on struct.
See on tegelikult kena Segue nüüd viiakse C, kus on vaid paar
lisavõimalusi et me ei ole tutvunud veel.
See on üsna väike keel ja üks kena funktsioonid umbes C on struct.
Näiteks, kui sa tahtsin represent-- olgem
ütled tahtnud muutuja esindab õpilane mõnes programmis.
Äkki olid kirjutamise kursus registreerimise programmi või core shopping
näitaja, või midagi sellist.
Mis on tükid seotud andmed õpilasele meelde tulevad?
Nagu üliõpilane on esindatud, milliseid väärtushinnanguid?
Jah?
Sul on nimi õpilasena.
Mida ei tüüpiline üliõpilane on?
>> Sihtrühm: [kuuldamatu]
>> DAVID J. Humala: Nii kahju.
>> Sihtrühm: Age.
>> DAVID J. Humala: vanusega ja sünnipäeva võrreldavalt yep.
Mida veel?
Sihtrühm: ID number?
DAVID J. Humala: Nii ID-number, võibolla telefoninumber, äkki ühiselamus või maja,
või kolledžis, või midagi sellist.
Iga tükiarv andmeid sa oleks võinud oma kontaktide nimekirja
on see, mida võib määratleda üliõpilane.
Nii et kui me tahame seda teha, on kood, me võiks teha midagi lihtsat nagu see.
Oleksime programmi nii, et on oletame, int main (void).
Ja kui ma tahan kujutada õpilase ma võib-olla näiteks
string nimega nime, et õpilane, string nimega Dorm eest, et õpilane,
võibolla int nimega ID et üliõpilane.
Ja kuna ma kasutan string, ma vaja tagasi minna ja panna CS50.h.
Võib-olla ma vajan stdio.h.
Nii et lubage mul ennetavalt teha neid ja ma olen läheb nimetame seda student.c nüüd
ja salvestage see.
>> Ja nüüd ma ei tee midagi Nende muutujaid.
Ja me lihtsalt kirjutame et kui kommentaar on pseudo-koodi
sest see ei ole huvitav mida me teeme nüüd.
OK, nii et see on programm, mis kuidagi salvestab üliõpilane.
Mida ma tahan teha, kui ma tahad salvestada kaks üliõpilast?
Nii et minu esimene instinkt läheb et kõik korras, oodake minut,
kui mul on teine ​​õpilane Miks ma ei lihtsalt ei string nimi 2 string Dorm 2,
int ID2.
Ja me oleme teinud läinud seda teed enne
ja mis oli meie lahendus, mis tundub olema mingi hackish koopia pasta
töö siin?
Sihtrühm: Array.
DAVID J. Humala: Jah, me võiks kasutada massiivi.
Õigus seda väga kiiresti muutub kohmakamaks.
Sa pead sorteerida Meelevaldselt alustada nimetades kõiki neid muutujaid.
Ja sina, inimene, pead hoidma jälgida, et OK nimi2 vastab
koos dorm2 vastab ID2.
See lihtsalt migristub.
Nii et see on palju lihtsam, mäletate paar nädalat tagasi,
lihtsalt võttes nimega string nimed ja võibolla meile neist kolm.
Ja siis äkki on meil string hostelis ning on
kolm neist või konstantse, int IDS ja kolm neist.
Aga isegi nüüd tundub see natuke lohakas, eks.
Me räägime õpilaste ja veel Ma tõesti eluruumi madal
rakendamise üksikasju.
Õpilane on nimi ja ühiselamus ja ID.
>> Miks ma ei saa lihtsalt kuulutada muutuja nimetatakse õpilane ja nimetavad seda s.
Ja kui ma tahan teise üliõpilase, miks ei Kutsun seda t.
Või kui ma tahan terve hunnik õpilaste, miks ma just ei
et mul on terve klass õpilased, ja see on neist kolm.
Teisisõnu, miks ei saa Mu koos oma andmete tüübi, mida nimetatakse
Õpilased, mille sees on Nime on ID, ei ühiselamus,
on mistahes paljudes muudes valdkondades.
Ja selgub, sa saate teha just nii.
>> Nii C on see funktsioon nimega struct.
See on keele funktsioon, mis võimaldab meil teha just seda.
Ma lähen edasi minna ja avada structs.h
kus me näeme järgmised määratlus üliõpilane.
Selgub, - ja see on isegi lihtsam kui ühe hõlmavaid ID
hetk tagasi.
Kui soovite tulla Sinu omatehtud andmete tüübi,
ja lisaks int ja char ja float ja kõik need teised, et on olemas,
saate seda teha sõna otseses mõttes kirjalikult typedef struct,
siis mõned looksulg, mille sees sa
nimekirja muutujate soovid seostavad seda uut custom andmeid
kirjutad nagu nimi ja ühiselamus, ja siis pärast looksulg
sa annad nime uute andmete tüübist.
Nii näiteks üliõpilane.
>> Ja mis on tore see nüüd on, et Kui me vaatame vastava koodi,
Konventsiooni esimene kõik, on panna see
nimelisse faili midagi dot h, päisefailist, mida me ei ole
hakkasin end liiga palju.
Aga me ei kavatse hakata kasutades üsna natuke nüüd.
Ja mida me saame teha seda, lõpuks, need paar rida koodi
on kuulutada täpselt, et andmetüüp, üliõpilane.
Ja nüüd lähme seda kasutada.
>> Ma lähen nüüd minema fail nimega structs1.c.
Ja võtame pilk paari omadused siin.
Nii toppima siin enamasti tuttav, ja me
tagasi tulla, mida ei ole tuttav hetk.
See muidugi on ka minu päisefail, mis on nii uued kui ka,
va pset 3, kus Meenuta, meil helpers.h.
Nii võite meenutada #include helpers.h.
>> Miks küll ma kasutan hinnapakkumisi asemel noolsulge?
Kui ma valin nende vahel?
Peaaegu alati ma ilmselt kasutada noolsulge.
Ja siis, äkki kohta line kuus ma kasutan jutumärkide.
Miks see võiks olla?
Jah?
>> Sihtrühm: [kuuldamatu]
DAVID J. Humala: See on tegelik, mida?
Sihtrühm: See on sinu IDE.
DAVID J. Humala: Jah, see on minu tegelik IDE.
Ja ärgem peatuda IDE, sest see on just see vahend, mis ma kasutan.
See on minu praegune kataloog, konkreetselt.
Nii structs.h on minu faili ei paigaldatud IDE,
operatsioonisüsteemi ise, pigem on see minu praeguse kataloogi.
Nii et konventsioon on, kui soovite lisada oma päisefail,
sa lihtsalt kasutada jutumärkides.
>> Mida me nimetame seda asja line 8 üldiselt?
See on see, mida?
#define midagi.
See on konstandid, eks?
Kui sa tahad olla väärtust oma programmi
mida saate kasutada terve kamp korda, see on
Hea tava kohaselt tegur it out, kuulutada, kus räsi sümbolit
määratleda, siis Tavapäraselt kõik suurtäheks word-- kuigi see ei ole
hädavajalik, kuid see on inimese konventsiooni
ära konstandid nii, et nad välja hüpata
sind visually-- ruumi ja siis väärtus tahad olla
mis on võrdväärne pidev nime.
No semikooloniga, kuid sa lihtsalt jälgida, et muster on.
>> Mida ma teen selle tegelikku koodi.
Võtame pilk Põhiprogrammi siin.
Vastavalt 12 sest ma lisanud structs.h,
Mul on nüüd võluväel minu käsutuses uus andmetüüp.
Ma ei ole lihtsalt juurdepääsu int, ja char ja float ja nööri
ja sinine ja teised.
Mul on nüüd juurdepääs üliõpilane andmete tüübi.
Nii line 12 Ma ühendab kaks ideas-- üks custom andmete tüübi ja kaks,
kasutades massiivi.
Ja nii see programm, kui Ma tahan tegelikult toetada
kolm erinevat õpilased minu programm, ma
lihtsalt öelda mulle muutuja nimetatakse õpilast, millest igaüks
tüübiks õpilased, mis Mul on kohandatud andmete tüübi.
Ja eriti, anna mulle neist kolm minu rida.
>> Nüüd, mida me teeme, on see programm?
Siin on lihtsalt silmus iterating 0-3, sest see on
Mis väärtus õpilased on.
Ma lihtsalt sunnib kasutaja mulle õpilase nimi.
Ja siis vastavalt 17, me on enamasti tuttav line.
Meil on meie vana sõber GetString paremal.
Ja mida tükk süntaks on ilmselt uue,
Kui sa pole kunagi programmeeritud C enne, ja ei ole kunagi kasutanud struktuurideks?
Jah?
>> Sihtrühm: .name.
DAVID J. Humala: .name.
Aga see ei ole liiga palju hüpe, sest nüüd õpilased ümbritsevad i
annab i-nda õpilane.
Ja kui sa tahad sukelduda sees, et struktuuri,
sa lihtsalt kasutada ühte perioodi ja siis nimi muutuja sees,
või vara sees, et soovite saada ligipääs.
Samamoodi siis, kui ma siis ajendab kasutaja, anna mulle õpilase Dorm,
saab sarnaselt salvestada et string ühiselamus muutuja sees
Selle õpilane struktuuri.
>> Ja nüüd on asjad natuke uhke.
Ja see läheb otsima kell ehk palju üsna kiiresti.
Aga näete seda palju rohkem pset 4, nii et vaatame lihtsalt pilk see nüüd.
Selgub, et kooskõlas 23. kaudu 38, mida sa arvad, et ma võib-olla teeme?
Olen eemaldanud kommentaarid täna, kuid versioon
kood onlines Viide on kõik kommentaarid.
Mida ma ilmselt tegema?
>> Sihtrühm: salvestage fail kõik teavet, mida kasutaja sisestatud.
>> DAVID J. Humala: Jah, täpselt, see on uus viis
et me näeme kahte, teine ​​tunnusjoon C,
kusjuures ma ei luua oma faile.
Siiani peaaegu iga programm olete kirjutanud on kodakondsuseta.
Niipea, kui ta on teinud töötab, see on kõik.
Ei ole mälu või mälestus sellest.
Ei ole salvestatud faili.
Aga kui sa ei taha salvestada input, mis on
juhtus, nagu mäng või programmi niimoodi, selgub saame seda teha.
Ja te näete seda rohkem in pset 4 ja §.
Aga see rida 23 sisuliselt loob faili nimega students.csv.
Ja sa võisid seda varem näinud.
Isegi kui sa pole kunagi õppinud CS enne, CSV on komadega eraldatud muutujaid.
See on nagu väga vaese mehe versiooni Exceli faili,
mis tähendab, et seda saaks avada Excel ja Apple numbrid,
ja see on read ja veerud.
Aga see ei ole varaliste formaadis nagu Microsoft või Apple.
See on lihtsalt komadega eraldades väärtused, mida me näeme ühel hetkel.
>> Ja lihtsalt võtta vist.
Vastavalt 23, päris lõpus, minu teine ​​argument
see uus funktsioon nimega f avatud fail avatud on w.
Mis võiks w tähistavad?
Jah?
>> Sihtrühm: See võimaldab teil kirjutada faili?
>> DAVID J. Humala: See võimaldab sa kirjutada faili.
Nii et paar varianti et suudame ühendada siin.
Aga kui tahad lihtsalt lugeda fail, mis on vaadata seda
ja loe see mällu, siis lihtsalt kasutada quote lõppeb "r".
Kui soovite kirjutada faili, mida kasutate quote lõppeb "w".
Seal on ka lisada ja paar muud asjad
Kui soovite muuta olemasolevaid faile.
Nüüd me ei kavatse hoida nähes seda asi, siis me tuleme tagasi liinile 24.
NULL, selgub, on eriline väärtus, mis
saab tagastada teatud funktsioone kui midagi on läinud wrong--
Kui faili ei eksisteeri, kui olete otsa mälu
või hunnik muid vigu.
Aga nüüd, lähme lihtsalt eeldada, et see on lihtsalt tavalised veatuvastuse.
Siin line 26, ma iterating 0-3 üle kõik minu õpilased.
Ja see on selline omamoodi uue funktsiooni, fprintf,
aga lihtsalt võtta vist.
Kui printf on lihtsalt print vormindatud stringi,
mida see fprintf ilmselt tähendab?
Sihtrühm: Printimine faili.
DAVID J. Humala: Printige vormindatud stringi faili.
See, mida täiendavad f vahendid on fail.
Ja uus esimene argument peab olema muutuja, mis esindab oma faili.
Siis me lihtsalt formaadis string nagu printf.
Ja kuigi see süntaks on uus, see lihtsalt
tähendab ühendage õpilase nimi, plug-in õpilane Dorm ja seejärel
koos kirjutamisel, sulgege fail.
Ja siis lastly-- see on uue ja me tuleme tagasi selle
enne long-- ma vabastades õpilase põhjustel
mis juhtus kuni eespool.
Aga me tuleme tagasi sellele enne long--
see on, sest kuidas getString on tegelikult töötavad all kapuuts.
>> Võtame pilgu siin.
Kui ma kirjutada ls hakemistossani, märgata, et ma ei ole
on fail nimega students.csv, lihtsalt ei ole, ei ole olemas.
Nii et kui ma nüüd koostada selle programmi, teha struktuurideks-1,. / struktuurideks-1,
ja ma lähen edasi minna ja kirjutada Andi, kes elab Berkeley Yale'i.
Me läheme on Rob, kes elab Thayer nendel päevadel.
Ja olgem tulla, kus on, ma arvan, Maria on Mather,
kui mul on meeles õigesti.
>> Nii midagi tundub juhtuda.
Aga kui ma tüüpi ls nüüd, on students.csv.
Lähme edasi ja avatud students.csv.
See on jällegi väga kerge vormingus.
Aga ma olen lihtsalt vastu konventsiooni et mul on kaks ridade ja veergude siin.
Esimene veerg on inimeste eesnimed.
Teises veerus on õpilase Dorm või kolledžis või maja, või tühi-tähi.
Ja nüüd ma olen säästetakse alaliselt faili.
>> Nii see ei ole kõik, et huvitav.
Aga see on vaid hüppelauaks nüüd et oleks võimalik püsida info
jäädavalt.
Vaatame nüüd, mida rohkem me saame teha nende ja muid funktsioone.
Aga kõigepealt küsimusi?
See oli palju ja see oli kiire.
Aga näete palju rohkem pset 4, samuti.
Jah?
>> Sihtrühm: Kas on võimalik, et jätkata, lisades nime, et faili?
>> DAVID J. Humala: Hea küsimus.
Kas on võimalik jätkata Lisades nimed, et faili?
Jah.
Ja tegelikult, kui sa lõpuks kuni taasavamise faili
kasutad quote lõppeb "a" append,
mis oleks lihtsalt lisada uus rida, et Uus liin uuesti ja uuesti, täpselt.
Hea küsimus.
Muud küsimused?
Jah?
Sihtrühm: Kui sa jooksid Programm kohe uuesti,
oleks see hoida lisades nimed esitada või oleks avada uus fail?
>> DAVID J. Humala: Ah, hea küsimus.
Kui tegite programm uuesti paremale Nüüd äkki kirjutada uusi nimesid,
oleks see lisada faili või kirjutada faili?
Viimane, sest ma olen ei kasuta append režiimis.
Ja kuna ma olen lihtsalt pimesi avades faili kirjutamiseks,
see on lihtsalt läheb üle kirjutada faili.
Nii et ma tõesti pead tegema, on lisada, kui ma tahan tegelikult on pikaajaline
andmebaasis.
>> Nüüd CSV on kasulik, ausalt, isegi jaoks nagu kui sa oled writing--
ja me lõpuks näha seda hiljem semestri kui
me kasutame CSV-des muudel eesmärkidel.
Kui soovite salvestada kõik inimesed kes on registreeritud mõne sündmuse,
või registreerusin oma õpilase grupp, või midagi sellist,
andmete säilitamise selline formaadis on super mugav.
Sest sõna otseses mõttes, kui ma olid seda faili allalaadida.
Ma võiks double-- ja olgem tegelikult proovida seda
kui mul on Excel või numbrid siin.
>> Ma lähen parem hiireklõps või kontrolli käsku Minu fail.
Oih.
Paremklõpsake või kontrolli käsku Minu fail.
Tule, mu hiir ei teinud koostööd.
Download-- ma lähen lae kõik failid siin nii
lihtsalt, et ma saaks haarata see üks.
Ja vaatame, kas see töötab students.csv-- esimest korda
Olen aktiveeritud.
Nüüd nad tahavad näha oma kontaktid.
Nüüd pean registreeruma.
Vaata, kui lihtne on kasutada CSV-des?
Jah, hoida seda ajakohasena.
OK, nüüd oleme valmis klassi.
OK, oh, mida uut?
OK lähedal.
See oli maagiline.
OK, nüüd peame uuendama.
Ja nüüd, see unustanud, mis faili ma algselt avatud,
aga mis a_N seal me läheme.
OK, nii et nüüd on meil Exceli faili.
Aitäh.
>> OK, nii et mida ma tegin oli lihtne osa.
Muidugi ma oleks eelinstalleeritud Excel või numbrid, või mis iganes programmi.
Aga see on kena, sest nüüd ma ei saa manipuleerida
andmed vormikohase.
>> Nüüd oletame kontekstis minna, kus pooleli jäime
Viimane kord, mis pidi algama startida abirattad.
Aga kõigepealt, sa ei ole vaata seda varem lõunasöök
jälle siin toimub kell Fire ja Ice Cambridge, Sitar New Haven.
Registreeru kohta CS50s veebilehel ASAP liituda CS50 üliõpilased ja töötajad.
>> Nii võtsime abirattad välja esmaspäeval, kui follows--
string on tunnistatud CS50s raamatukogu juba mõnda aega.
Ja see on tore, sest see võimaldab meil rääkida muutujaid on
täielik sõnu ja lauseid ja rohkem.
Aga selgub string ei ole olemas.
See on lihtsalt sünonüüm või varjunime, et oleme loonud midagi, mis
tegelikult on natuke rohkem tehnilise nimetatakse char *.
>> Ja tõepoolest, nägime näiteks programmi esmaspäeval
et ei käitunud üsna nagu me ootasime.
See oli fail, võrrelda-0.
Ja meenutada, et võrrelda-0, kui Ma kompileerida esmaspäeval programmi
ja joosta võrrelda-0 ja kirjuta ema on väiketähed ja ema väiketähtedega uuesti.
Programm nõudis Ma kirjuta erinevaid asju,
kuigi ema, kõik väiketähed, on identsed visuaalselt.
Mis oli lühike vastus miks arvuti mõtleb
Nende kahe stringid on erinevad?
Jah?
>> Sihtrühm: [kuuldamatu]
DAVID J. Humala: Right.
Niisiis, ema, esimest korda Ma kirjuta see on olemine
salvestatud kusagil minu arvuti mälu, kuid teises kohas
kui teist korda ma kirjuta ema.
Nüüd see kindlasti võiks optimeeritud.
Arvuti võiks olla tark ja mõistma nende kahe stringe, hei,
nad identsed.
Lubage mul ei redundantly seda säilitada.
Aga arvutid ei tee seda optimeerimine, kui sa neile öelda, et.
Nii, vaikimisi, et nad lihtsalt läheb lõpuks
kahes erinevas kohas mälus.
Ja nii olema selge, kui meil võrreldes kaks stringi,
Esimeses kutsuti s, Teise kutsuti
t, mida konkreetselt oli mul võrrelda siin on line 13?
Jah.
>> Sihtrühm: See on koht, mälestuseks et muutuja toob välja.
>> DAVID J. Humala: Täpselt, ma olin võrreldes koht mälu
et need muutujad osutas.
Nii öeldes, kui ema oli bait number 1 ja 2 ja 3,
ja 4-- sest mäletan kurakriips 0 peab olema kogu tee lõpus.
Ja teine ​​eksemplar ema, m-o-m, oli aadressiga 10, 11, 12 ja 13.
Olin võrreldes 1, et aadress, et asukohta mälus,
vastu 10, mis on Ilmselgelt ei ole samad.
1 ei ole 10.
>> Nii et see on kena, et see on üsna lihtne.
Aga see on problemaatiline, kuivõrd Me ei saa ilmselt võrrelda stringid.
Nii fundamentally-- ja selles madal,
kui sa tahad ellu Programmi võrrelda
kaks eraldi sõna, et kasutaja on sisestanud kvaliteedi,
nad rivistama char char, vaid üldiselt,
Mida me peame tegema, ilmselt?
See ei ole piisav lihtsalt vaadata neid kahte aadressid.
Mida me peame tegema?
Jah?
>> Sihtrühm: Käi läbi string [kuuldamatu].
>> DAVID J. Humala: Jah, lähme itereerima läbi string.
Kasutame jaoks silmus, samal ajal loop või iganes sa oled kõige mugavamalt.
Ja kui meil kaks stringi kusagil mälu, vaatame iga aasta
Esimene märk, siis iga teine iseloomu, siis kolmas ja neljas,
ja viies, kuni me tabanud Mis eriline valvur väärtus?
Sihtrühm: [kuuldamatu]
DAVID J. Humala: Jah, längkriipsu null, misjärel kas string
saame otsustada, mis see on.
Kas me sobitada iga märk?
Kui ei ole, tagastab false.
Kui jah, siis tagasi tõsi.
Ja nii see on täpselt, mida see versioon Programmi võrrelda-1.c teeb.
See on identne sellega, mida me Vaatasin esmaspäeval välja, et ma olen
saanud lahti sõna string-- kuigi et ei ole funktsionaalne impact-- kõik
Ma teen nüüd on kõrvaldada mõned visuaalsed abirattad,
aga selgelt näha, et s ja t on aadresse.
Ja see, mida täht, tärn, esindab
on aadress, mis on tuntud tehniliselt kui kursor.
>> Nii et kui ma kuulutada s line 9 ja öelda char * s,
see ei tähenda mulle string.
See tähendab mulle muutuja kelle elu mõte on säilitada aadressi.
Sest ma olen umbes panna aadress string ta.
Ja tõepoolest, getString, et selge, ei tagasta string.
See ei tagasta ema kurakriips null, per se.
Mida getString spetsiaalselt ja täpselt tagasi?
Sihtrühm: [kuuldamatu]
DAVID J. Humala: Aadress on aadressi esimene märk
Mõnes string on saanud.
Ja nii nüüd me näeme eriline märksõna uuesti.
Ja ma vihjas sellele varem.
See saab olema hea konventsiooni et me näeme ikka ja jälle nüüd.
Ma kontrollin veenduda, et s ei ole null ja t ei ole null.
Kuna põhineb minu tõesti Kiire varem mainitud,
mida võiks tähendada, kui getString naaseb ole aadress, kuid N-U-L-L, mis on jällegi
mingi eriline väärtus?
>> Sihtrühm: Error.
>> DAVID J. Humala: See on viga.
Midagi läks valesti.
Ja mida tavaliselt Võib juhtuda, eriti
koos strings-- mis võib olla tundmatu pikkus advance--
võibolla arvutid mälu, võibolla
tipitud selline pikk sõna või lause
või kleepida nii suur essee seal lihtsalt ei ole piisavalt mälu.
Ja nii getString ei saa naasta aadressi kogu asi,
nii see lihtsalt tagasi midagi.
Ja ta ütleb viga on juhtunud tagastades eriline väärtus NULL.
See on null aadress, kui nii võib öelda.
>> Nüüd selgub, C kaasas funktsiooni, mis teeb selle kordamise.
Me ei pea rakendama seda jaoks silmus või samas loop ise.
Me saame kasutada funktsiooni, nimetatakse lühidalt
sega comp või string võrrelda, kelle elu mõte on teha just nii.
Sa annad siis kaks suunanäitajaks, kaks aadressi, ja see läheb neile aadressid
ja siis võrrelda kirja kirja kirja kvaliteedi,
peatudes ainult siis, kui see, mis on õige?
Kui intuitiivselt peaks segama comp lõpetate iterating, lihtsalt olla kindel?
Kui ta tabab längkriipsuga 0 kummaski string, misjärel võib ta otsustada
on kõike sobitada, või on seal olnud vastuolu?
>> Seega, kui võtame seda nüüd ja proovige meie väike kapitaliseeritus mängu
nii et võrrelda-1, ./compare-1 ja kirjuta ema väiketähtedega nii korda.
Nüüd on sama asi.
Ja kui ma seda uuesti väiketähed ja siis äkki suur-.
Nüüd küll vahet Suur- ja väiketähed.
Nii ei ole nii raske või maagiline, kuid see ei nüüd seletada
mis toimub all kapuuts.
>> Mida rohkem me saame eraldada Sellist liiki õppetund?
Võtame pilk see.
Ma lähen edasi minna ja kirjutada kiire programm siin nimetatakse koopia-0.
Ja nüüd lähme edasi ja tegelikult teeme see-- kopeerimise-0,
vaatleme, mida mul siin.
Ma esimest öelda kasutaja, midagi öelda.
Siis ma saan string ja ma hoidnud seda s.
Siis ma kontrollida, kas s võrdub võrdub NULL, lihtsalt tagasi 1.
Nii et see on lihtsalt standard veatuvastuse.
Midagi huvitavat on juhtunud.
Ja tegelikult, kui me vabaneda viga kontrollida, see näeb välja nagu nädal 1 koodi
hetkel.
Aga ma olen hakanud saada natuke parem sellest.
>> Nüüd joon 16, nädal tagasi, võibolla isegi paar päeva või minutit tagasi,
Te võite öelda line 16 on luues muutuja nimega t
kopeerimine ja s ta.
Ja see on täiesti mõistliku Buffee.
Aga täpsemalt nüüd.
Mis toimub rida 16?
Mis muutub kopeeritud paremalt vasakule?
Jah?
Sihtrühm: Kas t saada aadress s?
>> DAVID J. Humala: Täpselt, t muutub aadressi s.
Nii et nüüd selge, kui ma lähen tagasi, et varem näiteks
ja ma venitama asi, mida ma olen sisestanud.
Ja mida ma olen tipitud in-- siin on s, ja siin
on see, mida ma olen sisestanud kusagil mälu, ema ja siis längkriipsuga
0, mis on lisatud minu jaoks.
Mida ma hoida siin, mäletate, see on temperatuuril asukoha 1, 2, 3, 4,
see on see, mis on praegu s.
Nii et kui on line 16 Ma ütlen mulle teise muutuja nimega t ja poest
in väärtuses s, mida saab ladustada siin mitte ema
vaid lihtsalt number 1.
>> Nii et kui me vaatame tulevikku selles programmis Nüüd, mida juhtub?
Nii märkate, et seal on Seda funktsiooni võite
on kasutanud seda juba mõnda aega tagasi eest Caesar, või Vigenere, või ehk üldse mitte.
Väidan minu printf, ma olen läheb ära koopia t.
Esimene rida 19, kiire meelerahu Kontrollige, strlen kontrolli pikkus t.
Sest ma ei taha proovida ära midagi
kui pole string seal.
Kui kasutaja lihtsalt Enter, seal on midagi ära.
Nii et ma ei taha teha line 21.
Nii line 21 ära mis kirjas, ilmselt on t?
>> Sihtrühm: m?
DAVID J. Humala: Tundub nagu see on kopeerimine, millest üks?
Sihtrühm: m.
DAVID J. Humala: Uh, m.
OK, nii et esimene m, sest teate, et ma olen
möödaminnes toupper, mis Kui sa pole kunagi näinud seda on
vaid funktsiooni ära oma panus.
t sulg null tähendab anda mulle null iseloomu t.
Ja nii kuidas see pilt muutus, et oleks selge?
Mida on vaja, et saada transkribeeritakse või muutunud seoses s ja t and mom
kurakriips null.
>> Sihtrühm: [kuuldamatu]
>> DAVID J. Humala: Jah, nii see siin lihtsalt
vajab muutunud mina-- määrata see-- vajab muutunud kapitali m.
Aga nüüd, vaatame hiljem Programm, kui ma välja printida
s ja t, kui ma puhastada siin, vaata, mis on juhtub väljatrükk s ja t.
Nii et koopia-0, ./copy-0.
Lubage mul minna ja kirjuta emme kõik väiketähed.
Pange tähele, nii esialgses koopia on kapitaliseeritud.
Miks?
Noh, s ja t on nii osutades, kui soovite, sama tüki mälu.
Ja ausalt öeldes, see muutub tõesti uninteresting-- asjaolu
et me kasutame aadress null siin.
Ma mõtlen, et ma tõesti ei hooli kus asjad on mälu.
Sorry ma kustutamine natuke liiga palju.
Aga ma tõesti ei hooli kus asjad on mälu.
Ja nii tõesti, mida programmeerijad kipuvad mõtlema
on see, et kui te räägite aadressi või osuti,
kes hoolib, kui see on mälu.
Mind ei huvita, kui see on bait üks või ühe miljardi.
Ma lihtsalt huvita, et see muutuja on tõhusalt
osutades, et patakas mälu.
Ja nii edaspidi, mitte Saivartelu üle suvalise mälu aadresse, olgem
hakka lihtsalt juhtida viiteid kui viiteid, nagu nooled.
Mida s ja t tegelikult on, Vastavalt sellele programmile,
sest kuidas ma loodud t, see on lihtsalt kaks eraldi muutujad
juhtides samal patakas mälu.
Ja me ei hooli, kus nad on.
Nii et me võime seda ära, et detail.
>> Niisiis, kuidas ma seda parandada?
Kui ma tahan kirjutada versiooni koopia programm, mis tegelikult kopeerib string
ja suurtäheks ainult koopia, vaid intuitiivselt,
Mis sai olla koostisosa meie lahendus?
Sihtrühm: [kuuldamatu]
DAVID J. Humala: Vajame mida?
Sihtrühm: patakas mälu.
DAVID J. Humala: Vajame teise patakas mälu, eks?
Me ei tea, kuidas seda veel tingimata.
Aga ma sellist vaja, et see juhtub nii et originaal ema väiketähed
jõuab, et ekstra patakas mälu.
Ja siis, kui ma saan muuta koopia, ma ei taha seda muuta koopia siin.
Ma asemel soovite muuta ainult selle koopia nii, et originaal on muutumatu.
>> Nii, vaatame, kuidas me võiksime seda teha.
In koopia-1, mis on juba kooritud kommentaar,
kuid on kommenteerinud online.
Meil asemel teha following-- neid read on identsed, saada mulle string
ja nimetame seda s.
Aga nüüd vaatame meie üks keeruline, kuid viimase keerukusest
mõnda aega, liin 16 ei täpselt seda.
Seega, kui teie hubane koos Pildi me lihtsalt drew--
anna mulle uus patakas mälu kopeerida kõike sinna,
Vaatame, kuidas me tõlkida, et koodi.
>> Nii line 16, vasakul pool, char * t annab mulle seda kasti siin.
See on kõik, mida ta teeb.
Paremal pool, m alloc või malloc,
on mälu eraldamise, super fancy, segasena viis lihtsalt öeldes
mulle patakas mälu.
Kui palju mälu me vajame?
Noh, on selline suur väljendus.
Aga vaatame, mida ta ütleb siin.
Nii see muidugi on anda mulle string pikkusega s.
Niisiis, ema peaks olema siis?
Nii lihtsalt kolm, eks? ema on kolm märki.
Sa ei arvestata kurakriips null, kui
rääkida pikkus string see tegelikult inimese nähtav tähed.
Nii ema, nii et see annab mulle 3.
Aga oota natuke, ma olen nüüd lisades 1.
Miks ma tegelikult tahan eraldada 4 baiti ja mitte ainult 3?
Jah?
>> Sihtrühm: Sentinel väärtus?
>> DAVID J. Humala: Täpselt, eest, et valvur väärtus.
Sest kurakriips null, Vajan 4 baiti kokku.
Nii et ma pean pikkus string pluss 1.
Ja siis lihtsalt hea measure-- kuigi selle süsteemi,
see on alati saab olema 1-- ma räägin korrutada seda suurust paalia.
Selgub Sizeof on operaator C, et
lihtsalt ütleb teile baitide arv, mis on
vajalik teatud andmete tüübi.
See ei tööta massiivid, tavaliselt, mõnikord ta teeb.
Aga üldiselt juhul, ei.
Aga ta ütleb mulle, kui palju baite char on, mis osutub alati 1.
Nii et see on nagu korrutades 1.
>> Nii super segasena otsima rida koodi.
Aga kõik see on annab mul patakas mälu.
Aga see tundub, et kopeerimine midagi sinna mälu?
Mitte veel.
Ja mis ma real 22 ja 23, 24, 25, noh, ma lihtsalt seda teha.
Ja see on omamoodi vana kooli värk nüüd.
See on nagu pset 2, kus sa oled lihtsalt liigub asjad
ringi mälu, või pigem stringid.
>> Nii et ma iterating 0 kuni pikkus string s.
Ja ma kopeerimine i-nda iseloomu s sisse i-nda tegelaskuju t.
Ja kuna ma, programmeerija, tehtud Kindlasti eraldada täpselt nii palju baite
kui mul on vaja, see on täiuslik üks-ühele suhet.
Ja ma kopeerida ema on väiketähed uuega.
Ja siis lõpuks, ma teen seda joont.
Ja nii on mõju ainult ära seda t siin.
Nii palju taluda, kuid kui sa lihtsalt kaaluda
Mis tegelikult toimub kohta all kapuuts
on lihtsalt liigub neid baiti ümber, kõik, mis
on vaja selle probleemi lahendamiseks on lihtsalt annab meile selle tüki mälu.
Nüüd on oht Valdav, las ma näitan
üks teine ​​näide, mis on peaaegu identsed, välja arvatud see üks
rida koodi.
Nii et see on häkker versioon Selle programmi, kui soovite.
Aga olgem lihtsalt ajama see, mis toimub.
Rida 24 varem seda t sulg i saab s sulg i.
Nüüd ma selle muutma palju rohkem segasena star t
plus 1 võrdub star s pluss 1.
>> Mis toimub ja miks Kas meil on star märk?
Me oleme näinud täht enne ja see on kasutusel siin erinevalt.
Me varem näinud char *, nüüd näen Star alguses, ja see on OK.
Kuna selgub me saab omamoodi järeldada ainult
Nendest esimene põhimõtteid, mis toimub.
Nii lihtsalt peab olema selge, milline on s?
Eelmisel nädalal oli see string.
See ei piisa enam.
Mis on s, konkreetselt?
>> Sihtrühm: [kuuldamatu]
>> DAVID J. Humala: See on kursor.
On aadress Esimene täht me kirjutada.
OK, mis on t?
>> Sihtrühm: [kuuldamatu]
>> DAVID J. Humala: aadressi esimene bait
t, et patakas mälu ümber.
Nii selgub, et kui me itereerima 0 edasi kuni string
length-- esmalt i käivitab 0, sest
Selle vana kooli loop asi.
Nii lihtsalt lihtsuse, olgem eeldada, et esimene rida koodi
on tõesti ainult seda, eks.
Kui i on null, lisades null midagi ilmselt
ei kavatse mõjutada.
>> Mis on see sõna?
Tuleb välja, et staar operaator selles kontekstis
on apparent operaator, mis on lihtsalt
fancy viis öelda minna järgmisel aadressil.
Nii et kui s on aadress esimesest iseloomu selles patakas mälu
* s vahendid sinna minna.
Ja kuna me oleme tõmmatud Pildi sel viisil,
võite võtta järgmised vaimne mudel.
Kui see on s, ja sa ütled * s * s selline nagu rennide ja redelid,
Kui sa mäletad seda mängu lapsepõlvest, on nagu järgima, et nool ja minna
aadressile.
>> * t on sama asi.
Nii algab siin, minge oma tüki.
Ma ei saa lihtsalt tugineda see ekraan nii.
* t tähendab, et minna siin.
Ja siis on silmus on lihtsalt öeldes liikuda see märk siin
liikuda see märk siin liikuda see märk siin.
Aga kuidas ma seda teen incrementation?
Mul on vaja tagasi võtta, mida ma lihtsalt kustutatakse.
See on see, mida on tavaliselt nimetatakse pointer aritmeetika, mis
tähendab matemaatikat aadressid.
>> Kui seda loop, Hoian incrementing i,
ja s on aadress ja t on aadress, kui ma lihtsalt hoida lisades 1,
see tähendab lihtsalt hoida liigub edasi, ja edastada ning edastab mällu.
See on nagu Oxford Street on street et CS hoone on.
CS hooned on 33 Oxford Street.
Nii et kui sa teeksid 33 Oxford Street pluss 1,
mis viib sind 34 Oxford Tänav, siis 35 Oxford Street,
siis 36 Oxford Street, olenemata neile Hoonete tegelikult on - siis, kui need on olemas.
Ja nii, et kõik me teeme siin pointer aritmeetika.
>> Nii et see on super kauge tee väljendada end.
Aga kõik, mis toimub all kapuuts
lihtsalt pärast neid aadresse, nagu järgmised kaardil, kui soovite,
või pärast nooled nagu oleme ekraanile joonistada.
OK, palju seedida.
Iga küsimus süntaks, mõisted, suunanäitajaks, malloc vms.
Jah, siin esimene.
>> Sihtrühm: Nii kui see ütleb * t võrdub toupper * t,
on see, et läheb ära kõik tähed või Lihtsalt--
>> DAVID J. Humala: Ah, tõesti hea küsimus.
Nii see rida siin, 31, see läheb ära
esimene täht või kõik tähed.
Nii saab vastata, et minnes tagasi esimesele põhimõtteid.
Ja esimene põhimõtteid siin ma mõtlen minge põhimõisted
mis on seotud.
Nii toupper on funktsioon mis suurtäheks char.
See on kõik.
* t tähendab minna first-- mine aadressile t.
Nii, pildil, kui see on patakas Mälu me eraldamisel malloc,
ja see on t * t tähendab minna siin.
>> Vahepeal sa möödaminnes et väärtus väiketähed m
to toupper, te saate tagasi kapitali M, kuhu sa panemist?
Sa oled pannes seda, et samas kohas.
Ja nii selle loogika nende põhimõisted see on ainult
ära algustäht kui sa itereerima koos i või
for loop või samas silmus, ta ei kavatse teha midagi enamat kui sa küsid.
Hea küsimus.
Jah?
>> Sihtrühm: Miks te kasutate apparent meetod asemel
massiivi?
>> DAVID J. Humala: Ah, hea küsimus.
Miks te kasutate apparent meetod asemel massiivi meetodit?
Ole mingit erilist põhjust, kui aus olla.
Ja tegelikult, sel Selline näiteks õigus,
Ma lihtsalt väites, muutes Programm keerulisem,
rohkem silmad klaasimine üle, inimesed end välja
sest see näeb super kauge, kuid kuigi see teeb sama asja.
Ja nii, ausalt öeldes, see on asjatult visuaalselt kompleksset lahendust
probleemile.
>> See on ikka hea disain, viis viiest projekteerimise,
kas see on sulg märke või kursor märke.
Aga-- eriti kui saame hiljem muidugi pset 5
kui me seda rakendama sõnastik, mis Olen mainitud paar korda--
me tegelikult hoolivad madal mäluaadressid
et me tõesti aru mis toimub.
>> Aga nüüd selgub, et see koodirida siin nurksulgudes
tegelikult ei eksisteeri.
Nad on, mida nimetatakse süntaktiline suhkur, mis
on lihtsalt kummaliselt lahe viis öelda koostaja muudab nurksulgudes olevat
et matemaatiline väljendus.
Nii et see on inimese konventsiooni saaks lihtsalt kirjutada
Nende väga kasutajasõbralik sulgudes.
Aga mida kompilaator, rõkkama, on tõesti teeme igal ajal
sa kirjutad, mida on esile toodud rida 24, all kapuutsiga see on tõesti
konverteerides selle see.
See on lihtsalt rohkem nauditav kui inimese lugeda ja kirjutada koodi nagu line 24.
Aga lõpuks need abirattad liiga maha tulla
kui oma mugavusest tugevneb.
>> Olgu, nii meenutavad siis, et see oli omamoodi suurim probleem
me sattus.
Ja see, mida tekitas kogu see damn vestlus suunanäitajaks,
ja aadressid, kopeerimine ja asju.
See oli, sest me komistada see loll, loll küsimus, millega
Ma ellu logically-- Lauren siin on demo ja apelsinimahl
on milk-- täiesti algoritmiliselt õige funktsiooni
Vahetatakse kahe muutuja " väärtused, kuid kuradi asi
ei ole veel ühtegi püsivat või püsiv, mõjutab minu kood.
>> Ja miks see oli?
Lühidalt, miks see nii on rakendamise swap
loogiliselt õige, kuid ei mõjuta muutujatega, mis on läinud see,
nagu x ja y jaoks peamine?
Mis oli põhisisu küsimus?
Jah?
Sihtrühm: Kuna muutuja tehtud koopiad muutuja pass
läbi funktsioon.
>> DAVID J. Humala: Täpselt, kui te kaotate muutujad funktsiooni või argumendid
funktsiooniks on nad vastu võetud koopia, mis
tähendab, et sa saad identse otsin struktuuris bittide nii x ja y,
nimetatakse siin a ja b.
Ja sa ei saa midagi teha soovite neid koopiaid,
aga nad ei kavatse ei ole mõju helistaja funktsiooni.
Ja tegelikult me ​​juhtis et pilt ekraanil, tagasikutsumine
Viimane kord, mille kohaselt, kui teil tõesti arvad, mida on
toimub all hood-- kui see on arvuti mälu,
ja siin on patakas kasutatavat mälu peamine,
see on patakas kasutatavat mälu vahetada,
ja nii isegi siis, kui peamine on kahe muutuja, x ja y,
swap võib olla identsed otsin väärtusi, mis on mõlemad 1 ja 2,
kuid nad on täiesti erinevat tükkideks mälu.
>> Seega peame lahenduse sellele.
Ja ausalt öeldes tundub, et me nüüd on sellele probleemile lahendus, eks.
Kui me nüüd võime manipuleerida asju teel aadressid
ja omamoodi rennide ja redelid stiilis, järgige nooltega
ja kuhugi minna tahame mälu, ei saanud me
Selle probleemiga suundumiseks peamine swap
ei väärtusi tahame swap, vaid lihtsalt intuitiivselt
Mis võiks võtame vahetada asemel?
>> [Astudes HÄÄLT]
>> DAVID J. Humala: Miks me lihtsalt ei andke seda aadressid, eks?
Miks me ei anna Vaheta aare kaart, kui soovite,
mis viib selle tegelikud väärtused x ja y.
Olgem swap, tegelikult muuta nimetatud algsete bitti, mitte
sõidame koopiad bitti.
Ja nii tegelikult see, mida on saab olema lahendus.
See versioon on siin selgelt halb ja vale.
Ja nüüd, esimesel pilgul, see lihtsalt tundub nagu me lisada kamp tähed juhuslikult
ja ületas meie sõrmede et see oleks koostada.
Aga see nüüd koostada.
>> Aga vaatame, mis need asjad tähendavad.
Ja kahjuks autorid C oleks võinud valida teise sümbol
teha seda veidi selgem, kuid staar operaator
on erinevad tähendus kahes erinevas kontekstis.
Ja me oleme näinud nii, kuid olgem eristada.
>> Nii up ülaosas seal, kui ma olen muutunud ja b
alates on int on ka halb version int tärni, a ja b,
Varem olid täisarvud.
Mis on a ja b nüüd hea, roheline versioon?
Nad aadressid.
Aadressid, mida, teha selgeks?
Aadressid täisarvud.
Nii et ma olen öeldes int star vahendid
see on aadress täisarv, konkreetselt.
>> Nüüd teate rida koodi, midagi on muutunud liiga.
tmp jääb samaks, kuna see on lihtsalt ajutine täisarv,
no mälu magic seal.
Aga nüüd tuleb täht.
Ja tegelikult iga teiste mainita a ja b,
märgata, et kõik, mis on muutuvas punasest roheliseks
on see, et ma prefixing need muutujad tähed.
Sest ma ei taha, et kopeerida ja b.
Sest kui ma lihtsalt kopeerida ja b ja swap A ja B, mida ma tegelikult vahetada?
Just aadressid, ma tahan vahetada Mis on need aadressid.
Ma tahan sinna minna.
Ja nii star operaator sees minu funktsioon,
ei sees parameetrite nimekirja, tähendab, et sa minema need aadressid
ja tegelikult muuta neid väärtusi.
>> Mis siis pilt nüüd nägema asemel.
Noh, kui selle asemel ma möödaminnes jaoks A ja B 1 ja 2--
Ma tegelikult vaja lisada üks teine ​​definitsioon siin.
Nii oletame, et see patakas Mälu on asukohast 10.
>> See on asukoha 11, kuid see on natuke lihtsustada,
Mul on nüüd kaks võimalust ma mööda x ja y või ma anda oma aadressi?
Kui ma edasi nende aadressid niimoodi, ma lihtsalt
Nüüd on vaja rakendada swap ühe rohelise koodi
nii, et kui ta näeb ja kui see näeb b, see ei ole lihtsalt kopeerida ja b
ja liigu piima ja apelsinimahl.
Piima ja apelsinimahl metafoor nüüd ei tööta,
sest need on tassid vedeliku ja mitte kaarte.
Meil asemel vaja minna tegeleda 10 ja me
vaja minna, et lahendada 11, ja Seejärel täita, et vahetada loogika.
>> Nii et loogika on sama, kuid vajame veidi teistmoodi
juurdepääsu nendele muutujatele.
Ja nii lõpuks, mida Programm on välja nägema see.
In swap.c sõnalt kopeeritud ja kleebitud roheline versioon.
Aga mul on vaja teha üks muutus.
See ei ole piisav lihtsalt muuta swap.
Mis muu koodirida ma pean muutma?
Jah?
>> Sihtrühm: Kus see võtab argumente.
>> DAVID J. Humala: Kus see võtab oma väidet.
Nii et kui ma keri üles peamiste ma ei saa lihtsalt liigu x ja y,
ja ma luban, viimase tükk uut süntaks täna.
Mul on vaja läbida mitte x ja y kuid aadress x ja y.
Ja selgub, sümbol et autorid C valisid
on, kui te kasutate ampersand siin, mitte tohi segi ajada bitwise ampersand,
kui te kasutate ampersand siin ja ampersand siin
Selle arvud välja teie jaoks, Mis on aadress x,
äkki see on 10, mida on aadress y, äkki see on
11 ja läbib need asemel.
>> Nii palju absorbeerida kõik korraga.
Aga vaatame nüüd kiiresti Meie ülejäänud neli minutit
kus asjad valesti minna.
Ja kui kõrvale, tegelikult Ma võtsin selle pildi,
TF võtsin selle pildi aasta või kaks tagasi.
Nii et see on tagumises nurgas of Eliot Toitlustus Hall.
Lähtekohad on ehk kõige raskem teema, mida me katta CS50.
Nii et kui te muretsema omamoodi kalle on nagu võibolla on
rohkem hokikeppide niimoodi aru,
me mingi jõudmas haripunkti Seoses kontseptuaalse keerukust.
>> Ja ma tuua selle foto, sest ma vannun
Jumalale, sügisel 1996, kui võtsin CS50 minu õpetamise mehe,
Nishat Mehta, istus ta mulle allapoole nurgas Eliot D. Hall lõunalauas
või õhtusöök, või midagi proovida mind aidata mõista viiteid.
Ja see on koht, kus ma olin nädala pärast see võeti kasutusele loengu kui
Ma lõpuks aru suunanäitajaks.
Ja ma olen lootusrikas, et see kliki palju varem teile.
Aga seda mõistma absoluutselt hulgast keerukamaid teemasid
me vaatasime.
Aga see on kõige võimsam.
Ja kui saad, see on tõesti kõik lihtsalt läheb lõpuks kokku.
Nii võite olla kindel, see ei ole pea kõik valamu täna.
>> Nii et siin on viimane programmi me ei kavatse vaadata.
Ja me ei kavatse lõpeb kiire kolme minuti claymation
mida meie sõber Nick PARLANTE.
Siin on programm, mis peal kaks read deklareerib muutuja x ja y.
Mis mõlemad on aadressid täisarvud, AKA suunanäitajaks.
Siis eraldada piisavalt mälu, et salvestada int
ja hoidke aadress Selle mälu x.
Nii, see on isegi lihtsam kui näiteks varem.
Anna mulle neli baiti mälu, see on suurus int,
ja pane see aadress x.
See joon siin tähendab mine aadressile x
ja pane tähenduses elu, number 42 on.
Aga see rida ärritas mind.
Star y tähendab minna aadressile y, ja pane õnnetu number 13 sinna.
Miks on ohtlik, sel hetkel on story-- kuigi kiiresti rääkinud
Meie vähenemas minuti siin-- miks on see halb
mulle öelda, minge aadressile y?
>> Sihtrühm: Sa pole [kuuldamatu].
DAVID J. Humala: ma ei ole pane midagi y.
Mis on väärtus y, siinkohal lugu?
Me ei tea.
See on mõned prügi väärtus ja ega Binky tea.
Kui meil oleks lõpeb käesoleva märkuse.
>> [Video taasesitus]
>> Hei, Binky, ärka üles.
On aeg pointer lõbus.
>> -Mis see on?
Lugege vihjeid?
Oh, tüdruk.
>> Noh, et alustada, ma arvan, et me oleme läheb vaja paar suunanäitajaks.
>> -OKEI.
See kood eraldab kaks viiteid mis võib tuua täisarvud.
>> -OK, Samuti näen kaks suunanäitajaks, kuid nad
ei tundu olevat osutades midagi.
>> -See On õige.
Esialgu suunanäitajaks ei viita midagi.
Asju, millele need osutavad nimetatakse pointees ja milles neid
on eraldi etapis.
>> Oh, ja õigusega.
Ma teadsin seda.
Pointees eraldi.
Niisiis, kuidas sa eraldada pointee?
>> -OK, Samuti see kood eraldab uus täisarv pointee,
ja see osa komplekti x juhtida seda.
>> Hei, mis näeb parem välja.
Nii et see midagi teha.
>> -OK, Ma apparent kursorit x Numbri salvestamiseks 42 arvesse oma pointee.
Sest see trikk, et ma vajan oma võlukeppi ja dereferencing.
>> -Sinu Võlukeppi ja dereferencing?
Uh, et see on suurepärane.
>> -See On see kood välja näeb.
Ma lihtsalt luua arvu and--
>> [POP SOUND]
>> Hei, vaata seal läheb.
Niisiis, teeme apparent x järgmiselt nool juurdepääsu oma pointee.
Sel juhul salvestada 42 seal.
Hei, proovige seda salvestada number 13 läbi teise osuti, y.
>> -OKEI.
Ma lihtsalt minna üle siin y, ja saada number 13 loodud.
Ja siis võta võlukepp dereferencing ja Lihtsalt--
>> [Helisignaali]
>> Oh, hei, mis ei tööta.
Ütle, uh, Binky, ma ei arvan dereferencing
y on hea mõte, sest milles üles pointee on eraldi etapis.
Ja ma ei usu, et me kunagi tegin seda.
>> -Hmm, Hea punkt.
>> Jah, me eraldatud kursorit, y, kuid me iial seda viitavad pointee.
>> -Hmm, Väga tähelepanelik.
Hei, sa näed hea välja seal, Binky.
Kas sa seda parandada, nii et y punktid samale pointee nagu x.
>> -Sure, Ma kasutan oma võlukeppi kohaviitade ülesanne.
>> -Kas See saab olema Probleem, nagu enne?
>> -Ei, See ei puuduta pointees.
See lihtsalt muudab üks pointer osutada sama asi--
>> [Pauku]
--as teise.
>> Oh, ma näen.
Nüüd y osutab samas kohas kui x.
Nii, oodake, nüüd y on fikseeritud.
See on pointee.
Nii võid proovida võlukepp dereferencing uuesti saata 13 üle.
>> Oh, OK, siin läheb.
>> Hei, vaata seda.
Nüüd dereferencing tööde y.
Ja kuna viiteid jagavad et üks pointee, nad mõlemad näha 13.
>> Jah, jagamise, uh, mida iganes.
Nii me siis kohad vahetada nüüd?
>> Oh, vaatame me läbi aja.
>> -But--
>> -Lihtsalt Mäleta kolm pointer reegleid.
Number 1, põhistruktuur on see, et teil on pointer,
ja see juhib üle anda pointee.
Aga kursorit ja pointee eraldi.
Ja levinud viga on luua pointer
aga unustada, et anda sellele pointee.
>> Number 2, pointer dereferencing algab pointer
ja järgnevalt selle noole üle juurdepääsu oma pointee.
Nagu me kõik teame, see töötab ainult siis, kui on pointee, millist saab tagasi
reegel number 1.
>> Number 3 pointer loovutamise võtab üks pointer
ja muudab seda, et see osutaks Sama pointee teise kursorit.
Nii pärast üleminekut, Kahe viiteid
mis viitavad samale pointee, mõnikord kutsutakse seda jagada.
Ja see kõik on see, tõesti.
Hüvasti nüüd.
>> [Taasesituse lõpetamiseks]
>> DAVID J. Humala: Ongi CS50.
Tänu professor Nick PARLANTE.
Näeme järgmisel nädalal.
>> [ELECTRONIC muusika mängib]