[Powered by Google Translate] [2. nädalal Jätkub] [David J. Malan, Harvard University] [See on CS50. - CS50.TV] Hea küll. See on CS50, ja see on 2. nädala lõpus. Kui arvate, et näljane Umbes samal ajal homme, tean, et me ei kavatse kutsuda nagu väike grupp homme, neljapäeval, 1:15. Seal on see link siin, kui soovite RSVP. Kosmos on piiratud, nii et palun andeks, kui vorm on täis selleks ajaks olete täitke see ära. Teine link küll, et võiks huvi on see. Vaid umbes kuu aja pärast, muidugi saab olema kättesaadav kõik laiemalt kaudu EDX, mille kaudu inimesed Internetis saab jälgida mööda, tegelda muidugi üsna aktiivselt, tegelikult. Nad kasutavad CS50 Appliance ja CS50 Arutage ja enamik erinevate tarkvara vahendeid, mis meil juba on kasutanud sel semestril. Ja üks algatused tahaksime võtta kui katset sel aastal on näha, kui palju sisu saame tõlkida teistesse suuline ja kirjalik tekst. Nii et kui teil olla huvi osaleda selles projektis mille anname inglise ärakirju ja subtiitrid kursuse loengud ja lühikesed püksid ja seminarid ja lõigud jms, kui te räägite soravalt või kirjutada ladusalt mõnda muud keelt, oleks tore kaasata teid selle projekti, mille te võtma ühe või mitme videod teisendades neid keel te teate väga hästi. Et anda teile tunne liides, seal on see veebipõhine kasutajaliides et me kasutame, mis loob sisuliselt UI niimoodi. See oli mulle õpetada mõned Halloween tagasi ja paremal servas on must kõrval need ajatemplid, näete erinevaid asju, mis tuli mu suust, et päeval, ja siis selle all on Teil võimalik tõlkida mõnda muud keelt täpselt, mida kaardistamine on vahel, antud juhul inglise ja, ütleme, Hispaania. Nii et see on tegelikult väga kasutajasõbralik vahend. Saate kerida ja edasi väga kergesti klaviatuuri otseteed. Nii et kui soovid osaleda selles eksperimendis ja olla oma sõnu näha ja lugeda poolt potentsiaalselt tuhanded inimesed seal, palun ärge vastake osaleda. Üks sõna kassipoeg alates esmaspäevast. Muidu oleme saatnud liiga hirmutav sõnum, ei mõista, et tööaega soovitan ja kui lõigud näitavad, disain muidugi on väga palju anda õpilastele võimalus teha koostööd ja räägime läbi töötada probleem komplekti ja probleeme koos, ja tõesti liin lihtsalt taandub, jälle tööd sa lõpuks esitama peaks olema oma. Ja nii päris ausalt, ametis tundi see on täiesti normaalne, see on täiesti oodata isegi, tuleb jututoas mõned sõber sinu kõrval. Kui ta üritab mõne teema ja sa oled nagu, "Noh, lubage mul anda teile pilguheit mõned rida koodi, mis ma kirjutasin," sellest pole midagi, see juhtub, ja see on väga soodusta, ma arvan, kus õppimise protsessis. Kui liin muutub ületanud on kui pea on omamoodi kallutatud siin liiga palju sekundeid või minutid tõesti on just torustikupuhastusvahendid võimalus oma sõber, ja kindlasti siis, kui asjad vahetatud e-posti teel ja Dropbox jms, ka seal on joon. Nii kõigi vahenditega end mugavalt ja tundma motivatsiooni vestelda sõpradega ja klassikaaslastega umbes psets ja rohkem ja lihtsalt aru, et mida sa lõpuks esitama peaks tõesti olema toote oma loomingu ja mitte keegi teine. Ja nii üks valdkonnaspetsiifilist probleeme pset2, mis tulevad läbi homme hilisõhtul, on sukelduda maailma krüptograafia, mis on kunst krüptimine või skrambleerimise andmed, ja see lõppkokkuvõttes on seotud maailma julgeolekut. Nüüd, turvalisusel enamik meist on kujul üsna Ilmalik mehhanismid. Kõigil meil on kasutajanimed ja paroolid, ja meil kõigil on väga halb kasutajanimed ja paroolid, kõige tõenäolisem. Kui teie parool on sama paljudel veebisaitidel, et ilmselt ei ole parim idee, kui me arutame poole semestri lõpus. Kui teie parool on kirjutatud Kleepmärkme - no nali - monitori, et liiga ei ole tingimata parim disain, kuid üsna tavaline nähtus. Ja kui te ei kasuta krüptograafia varjata oma paroole, nad on eriti haavatavad. Nii et kui sa arvad, et oled super tark omades varjatud Wordi dokument kuskil kõvakettal, mis on kõik oma paroolid aga see on kaustas, et keegi läheb vaatama, et liiga ei ole väga turvaline mehhanism. Ja mis pset2 tutvustab on see kunst krüptograafia ja skrambleerimise teavet nii, et asjad paroolid on kõik turvalisemaks. Kontekstis on see, et on ebakindlad andmed on võimalus varjata seda ja rüselus see. Ja nii see näiteks on näide krüpteeritud sõnum. See tegelikult ütleb midagi inglise keeles, kuid see on selgelt ole täielikult selge. Ja me täisringi täna tease peale mida see salajane sõnum on siin. Aga reaalses maailmas arvuteid, asjad ei paista isegi neil võib olla ingliskeelseid fraase. Näiteks see, mida te võite leida standard Linux või Mac ja UNIX arvuti aastal fail, mis oli kunagi ammu kutsus salasõna faili. Tänapäeval on see viidud teistesse kohtadesse. Aga kui sa vaatad õiges kohas süsteem, näete mitte ainult oma kasutajanime või et teiste inimeste kaudu, kuid näete krüpteeritud versioon oma parool. Tõepoolest, sõna krüpt on näidanud, et kodus asjad on krüpteeritud, ja see seeria näiliselt juhuslike tähtede ja tähed ja numbrid ja nii edasi saab dekrüpteerida vaid üldiselt teada mõned saladus - salajane sõna, saladus arv - ja nii tõesti, kunst krüptograafia lõpuks taandub usalda mingisugune ja teades midagi, mida keegi teine ​​ei tee. Nii Uurime seda veidi üksikasjalikumalt täna ja pset tulla. Ja nüüd sõna läbimise / mitteläbimise. Eriti kui mõned teist on sukeldunud pset1, Appliance, ja väga uus maailm ise aru, et frustratsiooni ja segadust ja lihtsalt tehnilised probleemid on üsna ootuspärane, eriti esimene pset, kus on nii palju uut, lihtsalt saada tuttav ls ja cd ja kõik need kauge käsud ja uues keskkonnas, ja see on eraldi tegeliku materjali ja programmeerimine ise. Nii mõistavad ka, et seal on kindlasti tööaega, mis eksisteerivad tugistruktuur. Sektsioonid algab sel pühapäeval. Aga mis kõige tähtsam, kui te ei tunne lihtsalt, et see ei ole maailma teid, aru, et see tõesti ei lihtsalt võtab aega. Ja kui poleks seda võimalust aastat tagasi minu jaoks võtmise klassi läbimise / mitteläbimise, ausalt, ma ei oleks isegi jalg klassiruumis. Ja te võite seda muuta, kuni, ütleme, viienda esmaspäeval muidugi nii et kui sa oled äärel nüüd aru, et mitte pea mõnda muud veed kokku, ei kindlasti kaaluda lihtsalt lendama katse läbimise / mitteläbimise. Jällegi, ei ole tõesti see kultuur siin Harvardi võtta asju katse läbimise / mitteläbimise kuna igaüks tahab saavutada või overachieve, aga ausalt, see on suurepärane võimalus proovida midagi välja mis ei pruugi olla tuttav, ja sa lõpuks teed, enamikul juhtudel üsna hästi, ehk palju oma üllatuseks. Ja konkreetsemalt, mida ma arvan katse läbimise / mitteläbimise üldiselt teeb, eriti kui sa võisid kogenud pset0, kui paned 10 tundi, 15 tundi, 25 tundi mõnda pset ja sa oled lihtsalt peksma oma pead vastu seina ja see muutub super hilisõhtuni aga te olete võtnud pset 90% teed ja sa lihtsalt ei saa aru, üks asi, katse läbimise / mitteläbimise tõesti võtab serv off klassi niimoodi, kus saab omamoodi õnnelikult öelda: "Okei, ma tean, see ei ole täiuslik, kuid olen töötanud my ass off, ma olen päris rahul, kui ta sattus, " ja mis vastavad ootused läbimise / mitteläbimise. Nii et ärge hoidke seda silmas pidades. Hea küll. Nii neile, kes on võidelnud kasutada Harvardi ülikooli Wi-Fi, tean, et seal on CS50 SSID, Wi-Fi ühendus, ujuvad ringi et siin võib olla parem õnne. See on natuke irooniline, et parool, kui soovid proovida ühendades selle parema kiirusega - ja andke teada, kui see pole parem - on 12345, kõik viis kuni 8 sest 8 on turvalisem kui 5. Nii et kui teil on vaja wifi parooli, ühendada CS50 juhtmevabalt siin, 12345678, ja postitustesse CS50 Arutle, kui sul on veel vahelduva ühenduvust küsimusi, ja laseme volitusi, et olla teavad seda ruumi. Hea küll. Nii kiire teaser, eriti neile, kes on fänn poiste ja tüdrukute kõike Apple. Mida ma kaevasin üles mõned aastad tagasi oli see fail siin, iUnlock.c, lihtsalt selline teha rohkem konkreetseid ja keerulisemaks mõned rohkem põhi-C programmide oleme olnud kirjalikult. Nii et ma avanud seda faili iUnlock.c. See on saadaval Loengud lehel täna. Vasakul servas näed pikka nimekirja funktsioone. Nii et mehe, kes kirjutas selle kirjutasin üles palju funktsioone, rohkem kui lihtsalt põhiline. Ta kasutas terve hulk raamatukogude siin, ja kui me hakkame sirvimiseks, Mis see tegelikult on esimene, ma usun, crack jaoks originaal iPhone. Kui sa tahad Jailbreak originaal iPhone, mis tähendab untether see AT & T ja tegelikult installida spetsiaalne tarkvara peal ja teha asju, et Apple ei taha, et inimesed teevad, keegi võttis aega, et aru saada, kuidas täpselt nad võiksid kasutada tarkvara vigu, vigu, vigu, Apple tarkvara, ja seega sündis iUnlock.c-- et kui koostatakse see arvutis ja installitud see peale iPhone mis oli ühendatud arvuti kaudu, ütleme, USB kaabel, see annaks sulle haldus-või administraatoriõigusi oma iPhone ja saate teha päris palju iganes sa tahad. Ja seega ei ole see põnev kassi-hiire mäng vahel Apple ja mujal maailmas eriti kui nad, nagu paljud ettevõtted, proovida lukustada oma kraami maha, nii et saate teha ainult seda, mida nad kavatsevad. Kuid tänu inimestele meeldib see ja mõistmist madala üksikasjad - ja antud juhul C programmeerimine - ja palju tuttavaid konstrueerib et oleme hakanud mängides, siis on võimalik tõesti võimendavat riistvara viisil, näed ja ei pruugi mõned äriühinguks. Nii näiteks, ma ei tea, mida see kõik teeb, kuid GetVersion kõlab üsna lihtne, ja tundub, et see on funktsioon, mis see inimene kirjutas. See võtab mingi täisarv argumendina, ei tagasta midagi, kuid tundub ahelaks jaoks silmus siin ja kui tingimus, kui tingimus pausi, ja kuidagi seotud versiooni numbrite kui me liikuge allapoole kuigi palju need märksõnad hakkavad olema uued. Ja seal on palju funktsioone, siin me pole kunagi näinud ja ei pruugi kunagi näha jooksul poolaastal. Aasta lõpus päev, see kehtivad samad reeglid ja loogika, et oleme mänginud siiani. Nii et see on liiga vana crack oma iPhone 3s või 4s või peatselt 5s nendel päevadel, kuid tean, et see kõik on väga palju saadud siin maailmas, et me oleme sukeldunud. Võtame pilk veidi lihtsa näite: see üks, lihtsalt saada soojendada mõned süntaks ja ka mõned muud andmed tüüp et me rääkisime, kuid pole tõesti näinud C. See on fail nimega positive1.c ja kohta märkusi ülaosas, see lihtsalt nõuab, et kasutaja anda positiivse arvu. Nii et see on näide do-kui ahela, mis on kena kasutaja interaktiivsed programmid kus te rääkima kasutaja teha midagi, ja kui nad ei tee koostööd te kisa neid või tagasi lükata oma panuse. Kohtuasi punktis: ma tegema read 19 kuni 24 nii kaua, kui kasutaja ei ole andnud mulle positiivse numbriga. See detail siin on line 18, miks ma kuulutada N üle kogu see silmuspõletamise ehitada mitte kohe eelarverida 22, kus ma tegelikult hoolivad saada n? Jah. [Üliõpilane] reguleerimisala. >> Jah, nii see küsimus ulatust. Ja üldarusaadavat mõttes, mida see ulatuse viidata? Jah. >> [Kuuldamatu õpilase vastus] >> Kas te räägite veidi valjem? [Üliõpilane] Kui pääsete et muutuja. >> Perfect. Kui pääsete konkreetse tunnuse. Ja üldiselt, rusikareegel on seni olnud, et reguleerimisala mõned muutuja on määratletud Viimane looksulg, et olete näinud. Ja nii sel juhul, kui ma tegin vea tunnistamise n real 22, et rida oleks töö. Ma saaksin int, ja ma paneks see, et muutuja n rida 22, aga mis rida koodi oleks nüüd ei tea, mida ma räägin? >> [Üliõpilane] 25. [Malan] 25, ja selgub 24. Nagu hästi, sest sel juhul jääb väljapoole looksulg. Nii lihtsalt natuke ebameeldivalt, kuid väga kergesti lahendada lihtsalt kuulutab muutuja väljaspool funktsiooni. Me näeme täna hiljem saate minna veelgi kaugemale ja siis võiks isegi natuke laisk. Ja see ei ole soovitatav üldiselt, kuid siis võiks isegi saada laisk ja panna muutuja globaalselt, kui nii võib öelda, ei sees funktsiooni, mitte sees silmus, kuid faili ennast, väljaspool kõiki funktsioone olete kirjutanud, kui ma siin tegin real 15. See on tavaliselt kortsutas kulmu, aga siis on see lahendus mõnikord muid probleeme, kui me lõpuks näha. Nii et nüüd me jätan selle niimoodi, aga vaatame, kas me saame selle ümber kirjutada lihtsalt alustada eneseväljendamisel natuke teistmoodi. See programm, et asi selge oleks, on positive1. Lubage mul minna siin ja minu terminaliakent teha positive1, Enter. Koostab okei. Ma lähen jooksma positive1, Enter. Ma nõuan, et sa annad mulle positiivne täisarv. Ma ütlen -1. See ei õnnestunud. 0, 99. See tundub töötavat. Võib-olla mitte kõige range katse, kuid vähemalt on see kena meelerahu kontroll et me oleme õigel teel. Nüüd lubage mul edasi minna ja avada versioon 2 sellest, ja mis on erinev juba? Ta rakendab sama asi, aga mis siin välja hüpates nii selgelt erinev seekord? See bool roheline. On rõhutatud roheline, see märksõna tuntud bool, mis on andmetüüp. See ei tule ehitatud, et kõik versioonid C. Sa pead lisama konkreetse raamatukogu. Meie puhul ma ka CS50 raamatukogu, nii et meil on juurdepääs bool. Aga liin 18, me tundub, et on Boole'i ​​väärtus siin nimetatakse tänulik. Ma võinuks see midagi, kuid ma helistasin ta tänulik lihtsalt selline edasi mõned semantiline tähendus. Nii et esialgu on line 18, ma olen ilmselt mitte tänulik kuna Boole'i ​​väärtus tänulik vastab algselt vale eelarverea 18. Ja siis tundub, mida ma olen teinud siin ridades 21 kuni 23 on mul lihtsalt selline ümber minu loogika. Seega ei ole funktsionaalselt erinevad, kuid eelarverida 22 nüüd ma saan vaadata kui int kasutaja on sätestatud on suurem kui 0, siis ma lihtsalt väärtust muuta tänulikud tõsi. Ja miks ma seda teen? Kuna vastavalt 25, ilmselt ma lähen vaatan seisukorras. Kas see tsükkel while tänulik on vale. Nii tegin selle alternatiivina versioon 1 sest see on vähemalt natuke rohkem intuitiivne ehk see on natuke rohkem maandatud inglise keeles. Nii et tehke järgmist samas sa ei ole tänulik või kui tänulik on vale. Ja seekord liiga ma ilmselt ei huvita mäleta, mida kasutaja sisestatud sest teate pole muutuja n, nii et tegelikult, väikese valge vale seal. Funktsionaalselt programm on natuke teistsugune kui meil põhjani seda sest ma ei mäleta mida n. Aga ma tahtsin näidata ka siin, et kuigi me oleme näinud GetInt ja getString kasutatakse paremal servas võrdusmärk seni nii et me mäletame väärtus, tehniliselt, see pole hädavajalik. Kui mingil põhjusel sa lihtsalt ei huvita, et säästa raha, tahad lihtsalt näha hinda Pange tähele, et me võime lihtsalt kirjutada seda GetInt, avatud paren lähedal paren. See funktsioon ei kavatse naasta väärtus, nagu me oleme öelnud. See läheb teile tagasi int. Ja kui sa vaimselt arvan see juhtub, kui ma kirjuta 99, GetInt tagastab arvu 99, ja nii kontseptuaalselt, see on nagu minu kood oli tegelikult see. Nii et kui 99 on tõepoolest suurem kui 0, siis tänulikud muutub tõsi, siis rida 25 realiseerib ooh, me oleme valmis, sest ma olen nüüd tänulik, ja kooskõlas 26, me lihtsalt öelda: "Aitäh positiivse täisarvu!" mis iganes see juhtus olema. Nüüd teeme veidi süntaktiline suhkru siin, nii rääkida. Vaatame, kas me saame puhastada seda joont 25 koos selle Kolmas ja viimane variant positive3. Teade ainus erinevus nüüd ongi rida koodi? >> [Üliõpilane] 25. >> [Malan] Jah, 25. Ja me pole tegelikult näinud seda trikki lihtsalt veel, aga me ei vaata hüüumärk esmaspäeval, mis tähendab mida? >> [Üliõpilane] Ei. >> Ei või eitus. Nii, et võta tõeväärtuse ja klapp selle väärtust. Tõsi muutub vale, vale muutub tõsi. Nii et see, ma teeksin ettepaneku, on isegi natuke rohkem intuitiivne viis kirjalikult kood sest ma ikka initsialiseerida tänulikud vale, ma ikka teha järgmist, Seadsin tänulikud tõsi, kui saabub aeg, kuid nüüd saab tõesti lihtsalt tõlkida see kood verbaalselt vasakult paremale, while (! tänulik); sest pauk või hüüumärgiga tähistab mõiste ei, nii et kui ei tänulik. Nii et taas, me ei ole kasutusele mingeid uusi mõisteid iseenesest. Me rääkisime tõeväärtused tagasi, kui me mängisime koos Scratch, kuid mõistan nüüd me võime lihtsalt hakake meie kood mitmeti. Nii et eriti pset1 kui sa oled omamoodi hädas nuputada, kuidas kirjutada mõned programmi koefitsiendid on sul õnne sest ei saa olla suvaline arv lahendused et saate peale sattuma. Näiteks, see on lihtsalt 3 isegi kõige lihtsamaid programme. Hea küll. Ja nüüd meenutada esmaspäeval jätsime selle teadmiseks tagasi väärtused. Nii et väga esimest korda me kirjutasime programmi, mis ei ole ainult peamine; see on ka oma kohandatud funktsiooni, et ma kirjutasin siin. Nii real 31 kaudu 34 Ma olen rakendanud kuubik funktsioon. See ei ole keeruline. See on lihtsalt * * käesoleval juhul. Aga mis on tähtis on see, et ma olen võttes sisend kujul ja ma teen sulle tagasi väljund kujul * *. Nii et nüüd on mul võimalus, palju nagu ma harjunud koos prinf üksi, nimetame seda funktsiooni, kutsudes kuubik funktsioon. Ja kuubik funktsioon võtab mõned sisend, ja kuubik tagastab funktsioon mõned väljund. Seevastu printf lihtsalt tegid midagi. See ei tagastanud midagi, et me hoolinud, kuigi nagu kõrvale see tagastab väärtuse; sa lihtsalt üldiselt ignoreerida. Printf lihtsalt tegid midagi. See oli kõrvalmõjuna trükkimine ekraanile. Seevastu siin, meil on kuubik funktsioon, mis tegelikult tagastab midagi. Neile tuttav, see on üsna lihtne idee. Aga neile vähem tuttav selle idee läbivad sisendite ja saada tagasi väljundid, proovime lihtsalt midagi super lihtne. Kas keegi mugav tulemas laval lühidalt? Sa pead olema rahul kaamera kohta ka teid. Jah? Okei. Mis su nimi on? >> [Üliõpilane] Ken. >> Ken. Hea küll. Ken, tulge siia. Ken saab olema funktsioon sordib siin. Lähme edasi ja tee seda. Lähme natuke uhke. Meeldiv kohtuda. Tere tulemast keskpunkti. Hea küll. Asume teele seda nuppu siin. Hea küll. Nii et siin on kaasaegne kriiditahvel, ja mis ma olen on peamine funktsioon, näiteks ja ma ei pea iPadi minu poolt. Ma tõesti ei mäleta, kuidas - Noh, ma ei saa seda öelda. Ma tõesti ei ole hea käekiri, ja nii seetõttu ma tahan, et sa trükkida midagi ekraanil minu jaoks. Räägin põhiprogramm, ja ma lähen, et sa seda öelda kirjutades seda minu kana nullist ja seejärel läbib teid sisend. Nii tobe kui see harjutus on, mõiste funktsioonid ja kutsudes funktsiooni ja jälle funktsioon tõesti taandub sellele. Olen peamine, ma olen lihtsalt kirjutada printf, tsiteerin-Tsitaat lõppeb midagi ekraanil, Mul töötab see programm, ja niipea kui printf saab nimetada, kulub üks argument või üks parameeter mõnikord vahel jutumärgid. Siin on see argument. Ma panen selle Ken. Ta on musta kasti kirjutada mõned mitu aastat tagasi et ilmselt teab ainult, kuidas printida asju ekraanil. Nii täita. See ei ole halb. Väga hea. Nüüd Ken tehakse täidesaatva. Kas ta pead anda mulle midagi tagasi? Mitte, et me oleme näinud siiani. Jällegi printf ei tegelikult naasta arv, kuid me ei kavatse seda eirata nüüd sest me pole kunagi seda kasutanud. Nii et see on mu Ken. Ja nüüd peamine võtab üle kontrolli programm uuesti sest et rida koodi, printf, tehakse täidesaatva. Ja meil minna oma teed, täidesaatva tahes teistel liinidel on olemas. Nüüd proovime veidi teistsugune näide. Seekord siin teeme kõigepealt selgeks ekraanile ja seekord me teeme cubing funktsioon, kuid seekord ma ootan toodangu väärtus. Nii lähme edasi ja tee seda. Nüüd on mul rida koodi, mis ütleb, x läheb kuubik x. Rida koodi, mäletate, näeb välja selline: x = kuup (x); Niisiis, kuidas see läheb tööle? Lähme edasi ja annab teile valge ekraan uuesti. Ma kavatsen kirjutada nüüd x väärtus, mis selles ajahetkel juhtub olema, ütleme, 2 keep it simple. Ma olen kirjutanud alla paberile väärtus 2, mis on minu x väärtust. Ma käsi selle Ken. >> Ja ma lihtsalt kirjutan vastuse? >> Jah, teeme lihtsalt kirjutada vastus. Okei. Ja nüüd on ta tagasi mulle midagi. Perfect. Tore segue. Nii et nüüd ta käed mulle tagasi raha, 8. antud juhul ja mida ma sellega teen? Tegelikult - vaatame, saada see õige. Mida ma sellega teha? Nüüd ma lähen seda väärtust ja tegelikult seda säilitada samad bitti mälu. Aga märkate Ma olen selline hädas siin. Ma olen natuke segaduses, sest kui ma tegelikult kirjutada x väärtus, sest ma olen lihtsalt teinud on füüsiliselt käsi Ken paberileht, mis oli raha 2 mis oli x, ja tõepoolest, see on täpselt, mis juhtus. Nii tuleb välja, et kui te helistate funktsiooni ja sa läbima argument nagu hello, world või te kaotate ka argument nagu 2 üldiselt, sa läbides koopia sellest argumendist. Ja nii nagu ma kirjutasin number 2 siin ja andis selle Ken, et peab tähendama, et mul on veel koopia väärtus 2. kuhugi sest tõepoolest, nüüd, et ma olen saanud tagasi raha 8, ma pean minema tagasi RAM ja tegelikult kirjutada 8 Kui ma ükskord oli number 2. Nii visuaalselt, mäletan seda mõistet möödaminnes, sõna otseses mõttes, koopia väärtus. Ken teeb oma asja, ulatab mulle tagasi midagi - antud juhul väärtus nagu 8 - ja siis mul on midagi teha, et raha kui ma tahan hoida seda ümber. Nii et kõik see tuleb tagasi olla liigagi tuttav enne pikk. Tänan sind nii palju see demo siia, Ken. [Aplaus] Väga hästi tehtud. Vaatame, kuidas see lõpuks puudutab mõningaid funktsioon nõuab, et me oleme siin teinud. Lubage mul minna ja tuua meid tagasi cubing näiteks siin. Pange tähele, et kui me tahame tegelikult alustavad selles edasi, me ei kavatse olema teadlik sellest, et arv x, mis kuramuse möödunud aastal siin erineb sellest, mida on tegelikult läbitud funktsioonile. Nii et jällegi, see mööda koopia läheb muutunud üsna Sobiv vaid hetk. Võtame pilk midagi, mis ei ole päris tööd õige veel. Ma lähen edasi minna ja avada 1/3 lollakas näide, mis on vigane olemuselt ja seda nimetatakse buggy3 ja ta rakendab Vahetatakse funktsioon. Siin on meil peamine funktsioon, mis on x ja y omavoliliselt algväärtusega 1 ja 2 nimetatud isikud. Me võiksime kasutada GetInt, kuid me lihtsalt peame selle lihtsa harjutuse, nii et see on kodeeritud nagu 1 ja 2. Aastal read 21 ja 22, me ilmselt välja printida x ja y, 1 rea kohta. Siis on line 23, Väidan, ma vahetada neid väärtusi, dot, dot, dot. Ma ilmselt helistada funktsiooni Rida 24 nn swap et võtab 2 argumendid. See on täiesti legit funktsioonide võtma 2 argumendid. Me oleme näinud printf seda juba. Nii swap ilmselt on X ja Y, ja nagu nimigi ütleb, Ma loodan, et see saab vahetada need 2 väärtused. Nii siis ma väita real 25 "vahetasid!" ja ma kordustrükk x ja y eeldusel, et nad on tõepoolest vahetasid. Aga kui ma tegelikult käivitada programm - lubage mul avada terminali aknas las ma teen buggy3 - nagu nimigi ütleb, see ei lõpe hästi sest kui ma Enter, märkate, et x on 1, y 2, ja veel lõpus programm, on nad endiselt, et tegelikult sama. Nii põhineb demonstratsioon just Ken, mis tegelikult toimub? Olgem sukelduda see swap funktsiooni. See on super lühike. See on ainult paar rida koodi pikk. Aga mis on põhiprobleem põhineb lihtne lugu rääkis siin Ken? Miks on vahetustehingu katki? [Üliõpilane] Sa ladustamiseks kuni koopia, mitte muutuja. Täpselt. Me ladustamiseks kuni koopia, mitte muutuja ise. Teisisõnu, swap ilmselt kestab 2 argumente, int, ja see on meelevaldselt nimetatakse a ja b, ja siin ma olen sooritanud x ja y, mis on vastavalt 1 ja 2, aga ma ei sõna otseses mõttes möödaminnes x, ma ei sõna otseses mõttes möödaminnes y, Ma panen koopia x ja koopia y. See on peaaegu nagu sa kopeerida ja kleepida swap väärtused, et sa tahad seda tõepoolest manipuleerida. Nii et kui see on nii, kui ma programmi algust täidesaatva rida 35 siis 36, kui ma saan rida 37, siinkohal lugu, mis on väärtus? Sel hetkel lugu, liin 37, mis on väärtus selles punktis? >> [Üliõpilane] 1. [Malan] Tuleb lihtsalt olla 1, õige, sest x võeti vastu esimese argumendina, ja see funktsioon lihtsalt suvaliselt helistab oma esimese väitega. Samamoodi on y teine ​​argument, ja see on lihtsalt suvaliselt helistades teine ​​argument b. See lõhe on tegelikult üsna lihtsalt ja arusaadavalt. Mõtle sellele. Keegi meist pole täidetud isikule, kes kirjutas printf, nii kindlasti, tal pole aimugi, mida meie muutujate 30 aastat hiljem on nimetama hakatakse. Nii et seal peab olema vahet, mida te nimetate muutujate funktsioonid olete kirjalikult ja mida te nimetate muutujate funktsioonid millele te helistate, või kasutades. Nii et teiste sõnadega, ma olen kirjutanud minu muutujaid x ja y, aga kui keegi teine ​​oli kirjutanud swap funktsiooni, ta kindlasti ei tea mida mu muutujad ei kavatse nimetada, nii aru, et see on põhjus, miks teil on see duaalsus nimed. Tehniliselt, ma võiks seda teha juhus, kuid nad ikkagi vastu võetud koopiana. See oleks lihtsalt puhas juhus esteetiliselt kui see inimene, kes kirjutas swap oli kasutanud samad nimed. Nii et siinkohal lugu, joon 37, 1, b on 2, ja nüüd ma sõita vahetada neid. Esiteks lubage mul tegelikult seda teha palju lihtsamalt. Ma ei tea, mida need 3 rida koodi tegid. Lubage mul seda teha: b =; = b; teha. Miks on see purustatud, loogiliselt? See on selline intuitiivne asi, eks? Nii muutub B And B saab, kuid probleem on selles, et niipea kui rida 37 hukatakse, mis on väärtus ja b? Sama, 1, sest sa oled clobbered, nii et rääkida, sa oled muutunud b võrdseks. Nii et kui rida 37 on täidetud, et on tore, nüüd on 2 eksemplari number 1 sees seda funktsiooni, nii siis, kui te ütlete liini nr 38 = b, sa oled natuke kruvitud, sest sa oled lihtsalt määrates 1-1. Sa oled selline kaotanud väärtust sa hoolisid. Nii originaal versioon sellest, märkate, mida ma tegin. Ma asemel oli kolmas rida koodi, mis nägi välja selline. Kinnitan ajutist muutujat. THK on väga üldine nimetus ajutise muutuja, ja see on int sest see peab sobima, mida ma tahan teha koopia. Ma salvestada koopia sees tmp, nii kui liini 37 on täidetud, väärtus on - kiire meelerahu kontroll - 1 väärtus b on 2, ja väärtus tmp on ka 1. Nii et nüüd ma täita rida 38. Kui rida 38 hukatakse, võtab väärtuse kohta b. Ja b oli 2, seega on nüüd 2. Nii et siinkohal lugu, on 2, b = 2, ja tmp on 1, nii nüüd loogiliselt, saame lihtsalt sulpsti tmp väärtust arvesse B ja me oleme valmis. Nii oleme lahendanud selle probleemi. Kahjuks, kui ma saan selle programmi selles vormis, see ei ole tegelikult vahetada mis tahes väärtusi. Aga peab olema selge, miks? Ma parandasin loogiline probleemi hetk tagasi, aga jälle, kui ma saan selle programmi, x ja y ei muutu aasta lõpuks programmi täitmist. [Kuuldamatu õpilane kommentaar] >> Me ei ole tagasi midagi, nii et see on tõsi. Aga selgub, seal on natuke probleem siin, sest seni Ainus asi mida me oleme suutnud tagasi on üks asi ja see on piirang C. Võite ainult naasta tõesti üks väärtus, mille puhul ma olen selline ummikus siin sest ma tagasi uue väärtuse x ja ma võin tagasi uus väärtus y, aga ma tahan nii tagasi. Nii et tagasi ei lihtsat lahendust. Aga probleem põhimõtteliselt on miks? Mida me tegelikult vahetasid? [Üliõpilane] a ja b. >> A ja b. Aga a ja b on koopiad x ja y, mis tähendab, et me lihtsalt ei kõik see töö, me lihtsalt kulutada 3 minutit räägime swap funktsiooni ja kõik 3 nimetatud muutujate saamiseks, ja see on suurepärane, täiesti õige isoleeritult, aga a ja b reguleerimisalasse üksnes on need read siin. Nii nagu loop, kui te deklareerite täisarv i sees jaoks silmus, Samamoodi, kui sa kuulutatakse a ja b sees funktsiooni, et olete kirjutanud, nad kehtivad ainult seestpoolt, et funktsioon, mis tähendab, niipea kui swap tehakse täidesaatva ja me läheme realt 24 rida 25, x ja y ei ole üldse muutunud. Sa raiskasid palju aega vahetada koopiaid muutujad. Nii selgub, et lahendus on tegelikult mitte-ilmne. See ei ole päris piisav, et tagastada väärtused, sest me saame tagastada vaid 1 väärtus, ja ma tõesti ei taha vahetada nii x ja y samal ajal, nii et me lähed on tulla tagasi sellele. Aga nüüd aru, et küsimus põhimõtteliselt tuleneda ka asjaolust, et a ja b on koopiad ja nad on oma ulatuse. Proovime lahendada seda mingil moel. Lubage mul tegelikult kerida siia tagasi ja avada, oletame, neljandat varianti sellest, buggy4. Aga see? See on sarnane, kuid lihtsam probleem vaadata enne kui me võtke torkehaav at lahendada see. See programm on kutsutud juurdekasvu, ja see ilmselt käivitab x täisarv 1 rida 18. Siis ma väita, x on 1, ma siis väita "incrementing ..." Ma siis helista juurdekasvu, kuid seejärel read 22 ja 23, ma väidavad, et see on olnud suurendatakse, Väidan x on nüüd iganes see on - 2, eeldatavasti - aga see programm on lollakas. Milles probleem? Jah. >> [Kuuldamatu õpilase vastus] >> Täpselt. Nii et x on kuulutatud muidugi eelarverea 18. See on sees peamine on looksulg. Nii lihtne vastus on see, et kui x on olemas siin, see ei ole real 32, siis see programm tegelikult isegi ei kompileerida. Tõlkija, kui ma üritan koostamisel käesoleva koodeksi läheb karju mu peale mõningate deklareerimata tunnus või midagi selle kohta. Tegelikult proovime. See on teha buggy4. Siin see on. Kasutage deklareerimata tunnus "x" real 32. Ja tegelikult, olgem selgem täna siin, nii et see on kasulik aastal tööaega ja kodus. Pange tähele, et see on natuke cryptically kirjutatud. Kuid tõsiasi, et rõkkama on karjus meile, öeldes buggy4.c: 32:5, on tegelikult kasulik. See tähendab, et viga on line 32 on sümboli positsioon 5. Nii et 1, 2, 3, 4, 5. See on tegelikult kui probleem on. Ja ka liiga pidage meeles, kontoris tundi ja kodus, ma olen õnnelik siin. Mul on üks viga. See saab olema suhteliselt lihtne kindlaks määrata. Aga kui sa saad terve ekraani täis valdav veateateid, jälle aru, et alumise võiks lihtsalt olla põhjustatud tähtsaim üks. Nii et alati Chase ette oma vigadest ülevalt alla sest seal võib olla ainult ketjuttaa mõju mis viitab teil on palju rohkem probleeme kui sa tegelikult teha. Niisiis, kuidas me saaksime seda parandada, kui minu eesmärk on juurdekasvu x? >> [Üliõpilane] Mark x globaalne. Okei, nii et me saame x globaalne. Võtame otsetee, et ma hoiatas varem, kuid kuradit, me lihtsalt vaja kiiresti parandada, nii ütleme lihtsalt int x siin. See teeb x globaalne. Nii et nüüd peamine on juurdepääs sellele ja juurdekasvu on juurdepääs sellele, ja las ma edasi minna ja koostada selle nüüd. Tee buggy4, Enter. Tundub, et koguda nüüd. Lähme sõitma buggy4. Ja tundub, et tegelikult töötavad. See on üks neid asju, mis on teha nii, nagu ma ütlen, mitte nagu mina, nagu ma olen lihtsalt teinud siin, sest üldiselt Meie programmid ei hakka palju huvitavam ja palju enam kui see, ja kui teie lahendus elu probleemid on lihtsalt panna kõik muutujad ülaosas oma faili väga kiiresti ei programmides saada hirmsalt raske juhtida. See muutub raskemaks mõelda uusi muutuja nimed, see muutub raskemaks mõista, mida muutuja mida teeb, ja nii üldiselt, et see ei ole hea lahendus. Teeme seda parem. Me ei taha kasutada globaalse muutuja siit. Ma ei taha, et juurdekasvu x, nii et ma võiks ilmselt - aasta lõpus päev, see on selline rumal lugu, sest me lihtsalt teeme seda - aga kui ma ei teadnud, et käitaja või ma ei tohtinud seda muuta põhiline ise, kuidas ma võiksin rakendada Ken siia seekord mitte kuubik kuid juurdekasvu? Kuidas muuta seda asja siin? Jah. [Üliõpilane] Pass x ja siis tagasi [kuuldamatu] >> Olgu, hästi. Miks ma ei läbida x ja siis mitte tagastada, miks ei ma lihtsalt naasta x + 1. Paar rohkem asju muutma siin. Ma olen õigel teel. Mida veel ma pean näpistama? Keegi teine. Jah. [Kuuldamatu õpilase vastus] Mul on vaja muuta tüübi tagastamise juurdekasvu, sest see ei ole tühine. Tühjus ei tähenda midagi on tagastatud, kuid selgelt nüüd on, nii et see vajab muutmist, et - >> [üliõpilane] int. int olema kooskõlas iganes ma olen tegelikult tagasi. Nüüd midagi on ikka lollakas siin. Jah. [Kuuldamatu õpilase vastus] >> [Malan] Nii et ma pean juurdekasvu x? [Kuuldamatu õpilase vastus] >> [Malan] Ah, nii et ma vaja läbida x. Nii et ma pean seda tegema siin. >> [Kuuldamatu õpilane kommentaar] [Malan] Nii prototüüp, ma pean seda muuta siin. Nii et see peab muutuma int, see peab muutuma - hmm, ma tegelikult olla viga siin. Olgem määrata selle ühe esimesena. Mida peaks see tegelikult olema? See ju olema int midagi. See võib olla x, kuid ausalt öeldes, kui te alustada kutsudes kõiki oma muutujad x, see läheb aina vähem ja vähem selge, mis on mis. Nii et olgem lihtsalt suvaliselt valida erinevate nimereeglistik minu helper funktsioone, funktsioonid Ma kirjutan. Me kutsume seda, või me võiksime seda nimetada - Kutsume see arv olema veelgi selgesõnaline. Siis ma pean tagasi arvust olenemata on pluss 1 ja nüüd ma pean muutma 1 muu asi siin üleval ja üks teine ​​asi siin üleval. Mida ma pean muutma on line 21 esimene? >> [Kuuldamatu õpilase vastus] [Malan] Ma pean määrata selle x. Ma ei saa lihtsalt helistada juurdekasvu (x). Pean mäleta vastust, muutes x väärtus vasakul servas. Ja kuigi x on nüüd vasakul ja paremal, see on täiesti trahvi sest paremas servas saab teostada esimene siis saab plopped arvesse vasakpoolne asi - x sel juhul. Ja siis lõpuks, see on lihtne määrata nüüd. See peaks lihtsalt mängu mis on allapoole, int arv. Nii et terve hulk muudatusi tõesti loll funktsioon aga esindaja asju, mida me järjest teha tahad. Nii et buggy4. Olen silmamunad kusagil. Oh, mu jumal. Viis vigu 6-line programm. Nii et mis viga on line 18, iseloomu 5? Nii et ma pean deklareerima, int. Vaatame. On terve hulk muid vigu. Oh, mu jumal - 19, 18, 21 - aga jällegi, lihtsalt selge ekraan, Control L siin, ja uuesti rõkkama. Nii 5 ülesannet on tegelikult lihtsalt, et 1. Nii et nüüd lähme jooksma buggy4, Enter. Ohoh, x on suurendatakse õigesti. Hea küll. Kõik küsimused selle kohta, kuidas juurdekasvu numbrid? Jah. [Kuuldamatu õpilane küsimus] >> Hea küsimus. Kuidas on nii, et ma ei lihtsalt muuta x arvu ja programm kohe teada? Jällegi, ma arvan et kui see abstraktsioon. Nii et kui ma olen pea-ja Ken on juurdekasvu, ausalt öeldes, ma ei hooli, mida Ken kutsub oma iPad. Mind ei huvita, mida ta nimetab kõike, mis on pistmist tema rakendamiseks seda funktsiooni. See on rakendamise üksikasju, et mina, peamine, ei pea hooli. Ja nii lihtsalt muuta see järjekindlalt sees funktsioon - number siin ja number siin - on kõik see võtab nii kaua, kui ma kompileeri. See on omamoodi nagu kui sa arvad paljud meist, neile, teile juhiluba kes juhtida või kui oled isegi sõidetakse autoga, enamik meist ei tea, kuidas auto töötab all kapuuts. Ja sõna otseses mõttes, kui te avada kapuuts, enamik meist - mina kaasa arvatud - ei kavatse tea, mida me vaatame, selline nagu sa võid tunda koos selliseid asju kohe. Aga me tõesti ei pea hooli, kui auto töötab, me ei pea hooli, mida kõik vardad ja kolvid ja kaablid sees auto tegelikult teevad. Nii et midagi, mida te nimetate kolb ei loe siin antud juhul. Sama mõte. Jah. >> [Kuuldamatu õpilane küsimus] Kui on rohkem kasutusalasid muutuja xa Hetk tagasi te, programmeerija, oleks muuta neid kõikjal. Või võid sõna otseses mõttes teha Fail Menüü ja seejärel leida, Asenda - midagi sellist - aga sa ei kavatse on teha need muudatused ise. Sa pead olema järjekindel. >> [Üliõpilane] Kui on mitu muutujad [kuuldamatu] Kindlas järjekorras nagu siin, kui see oli int teine ​​number? >> [Üliõpilane] Õige. [Malan] Jah. Telli küsimustes, kui helistate funktsiooni. Nii et kui ma kutsusid juurdekasvu siin midagi koma midagi, seal on otsene kaardistamine. Esimene muutuja, mis iganes seda nimetatakse, on valmistatud koopia esimest argumenti siin. Vabandust. See ei tohiks olla sulgudes. Teine argument ridade järele teine. Nii et, jah, küsimustes. Hea küll. Vabandust. Võtsin pikk tee sinna jõuda. Muud küsimused? Hea küll. Nii et vaatame, kui me ei saa maalida pilti sellest, mis tegelikult toimub siin all kapuuts, nii rääkida. See on ristkülik, mis võivad viidata arvuti mälu. Isegi kui sa ei tea, kuidas mälu töötab või kuidas RAM töötab, vähemalt eeldada, et teil on kobarad see nendel päevadel. Sul megabaiti see, et sul gigabaiti seda, ja me teame nädal 0, et bait on just see, mida? >> [Üliõpilane] 8 bitti. 8 bitti, eks? Seega 8 nullidega ja 1. Nii et kui arvuti on kaarik RAM, 2 kontserti RAM nendel päevadel, teil miljardit eurot ehk 2 miljardit baiti mälu või jämedalt 8000000000 või 16 miljardit bitti sees arvuti. Erinevalt vähe villane Willy näiteks, see ei ole magnetilisi osakesi tavaliselt enam. Üha - sülearvutid vähemalt - see on SSD ketastele SSDs, et lihtsalt ei ole liikuvaid osi. See kõik on elektrooniline. See kõik elektri-põhine. Nii et mõtle selle ristküliku kui lihtsalt esindavad 1 või 2 gigabaiti mälu, et teil on. Nii et see on patakas mälu. Maailma infotehnoloogia on omamoodi piiretega mäluhulka teha erinevaid asju. Näiteks, kui see on teie arvuti RAM, nagu soovitas ristküliku seal, Selgub, et tavapäraselt ülaosas oma RAM, nii et rääkida, Üldiselt, mida nimetatakse tekstiosa. Need on 0. ja 1s et olete koostanud. Nii et kui me vaatasime all kapuuts, mida a.out on, Kõigi nende 0. ja 1s, kui te käivitate programmi, need 0. ja 1s laadida oma kõvaketta ümber midagi, mida nimetatakse RAM, ja RAM nad panna ülaosas. Vahepeal teil on muid asju: initsialiseerida andmed, lähtestamise andmed. Need 2 vaalu mälu viidata globaalsed muutujad, mida te ei kasutavad sageli kuid mõnikord, kui te seda teete, nad lõpuks sinna samuti. Siis on mõned muud asjad: keskkonnamuutujaid, mida me ei kuluta palju aega, kuid siis 2 tähtsamaid asju, mis tulevad tagasi kogu semestri, korstnat ja hunnik. Nii et enamik arvuti mälu on reserveeritud sõites programmi midagi nimetatakse korstnat ja midagi, mida nimetatakse hunnik. Me ei kavatse rääkida hunnik täna, kuid me räägime pinu. Korstnat on mõeldud võluda visuaalne söögisaal jahu plaate Ema Maja või kus iganes juhtub olema, kus söögisaal personal puhastada neid iga päev, nad pinda need üles põrandale püsti, ja samamoodi, mälu, on see idee panna midagi korstnat kasutusele midagi virna, pannes midagi pinu. Ja mida me öelda? Olgem suurendada just alumises pooles seda pilti, arvuti RAM, ettepaneku järgmiste. Selgub, et kui te käivitate programmi nagu a.out või tere - mis iganes programm on, et olete kirjutanud - jälle need 0. ja 1s laadida oma kõvakettale, mis on pikaajaliseks ladustamiseks, jääb sinna isegi siis, kui te tõmmake alati pistikust, laaditud RAM. RAM on kiirem kui kõvakettad - see on väiksem kui kõvakettad - aga see on kus programmid elavad samas näed neid. Nii et te topeltklõps programmi Mac või PC, see on laaditud kõvaketta mälu. Niipea, kui see on laaditud RAM, 0. ja 1s minna kell viis üles, nn tekstiosa, aga siis kohe, kui teie programm tegelikult käivitub, põhiülesanne on kutsunud, ja peamine, sest me oleme näinud, on sageli kohalikud muutujad, ja see on ints ja keelpillidele ja tähed jms. Seega, kui teie programm, et olete kirjutanud või programm, mida on topelt klõpsatud kasutatud mõned muutujad sees peamine, nad lõpuks allosas oma korstnat mälu, kui nii võib öelda. Täpsemalt, mida see tegelikult tähendab? See lihtsalt tähendab, et kui me ei kavatse arv baiti RAM arvuti, märgata, et see võiks olla bait number 0, see võib olla baidi number 1, 2, 3, 4, 5, 6, kõik viis kuni 2 miljardit oleks täiesti üleval tipus. Nii et teiste sõnadega, kui me räägime RAM või mälu poolest baiti, see tähendab, et keegi on otsustanud, mida nummerdada kõik need mäluhulka. Nii et kui teil on vaja 32 bitti jaoks int või vajate 8 bitti jaoks char, kus nad jõuavad mälu? Kontseptuaalse nad lihtsalt lõpuks allosas see asi, mida nimetatakse pinu. Aga mis on huvitav nüüd on siis peamised kutsub funktsioon - oletame funktsioon nimega foo, lihtsalt suvaline nimi - Mis juhtub, on peamine on allosas see pakk mälu; suva nüüd pannakse peal peamised mällu. Nii et kõik kohalikud muutujad, et suva on lõpuks omamoodi kontseptuaalselt ületavad peamine. Kui foo helistab teisele funktsioon nimega baar, need muutujad sattusin. Kui Kõnede midagi muud, siin, siin, siin. Mis siis huvitavat programmi käivitamist on see, et kui te helistate funktsiooni ja kui need ülesanded kutsuvad funktsioone ja kui need ülesanded kutsuvad funktsioone, teil ehitada see pakk funktsioonide mälu. Ja alles siis, kui funktsioon tagastab sa alustada saada, et mälu tagasi. Nii et üks lihtsamaid viise otsa mälu arvutiprogrammi on kirjutada funktsioone, mis kunagi tagasi. Nii näiteks olgem näidata nii palju koos tahtlikult lollakas programm. Lubage mul minna ja teha # include , int main (void), ja ma teen samal ajal (2> 1), mis ilmselt ei ole kunagi muuta meie peale, ja las ma minna nüüd ja teha printf. Tegelikult, see saab olema vähem visuaalselt huvitav. Teeme seda. Sest int i = 0; i> 0 - teeme selle vea - i + +. Ja ärgem printf siin. Olgem tava, mida ma jutlustada. Teeme meetod siin, tühine kooris, ja me ütleme int i, ja siis ma lähen ütlen printf - ei, teeme sellest enam huvitav. Olgem tegelikult ei prindi üldse midagi. Lihtsalt teeme seda: koori (i). Hea küll. Nii et see on lollakas, sest miks? Ma kujutan seda ette kui ma lähen, sest programm ei tegelikult teha midagi huvi. Aga see pole eesmärk. Eesmärk on kirjutada programm, mille peamine funktsioon teeb seda, mida ilmselt? Helista ise. Ja tegelikult, me ei pea silmus. Olgem isegi lihtsustada seda lihtsalt, et mitte unustada tõesti fundamentaalne viga. Peamised kõned koori laulma mõned koori, siis ma tegin midagi rumalat ja mul oli refrään kõne kooris sest ma eeldasin keegi pidi seda rakendada ehk, ja nüüd see ei kavatse koostada veel. Ma pean tegema mida? Vajan prototüüp, mäletan. Nii et ma pean olema siin tühine koori (int i); Nii et nüüd, kui ma lähen siia alla - tegelikult, olgem kasutada suuremas aknas. Lähme edasi ja teha refrään. Lähme edasi ja teha refrään. Kasutage deklareerimata tunnus i. Oh, see oli loll. Me ei vaja argument. Lihtsalt teeme seda. Soovin, et meil algas sel viisil. Oleks olnud palju lihtsam programmi kirjutada. Seal. Lähme nüüd üle mu terminaliakent, kordamisega rõkkama, ja siin me läheme. See oli tõesti kiire. Mis tegelikult juhtus, kuigi? Noh, nüüd ma lisada trüki rea, et saaksime näha. Ütlen printf ("Ma olen siin") - ei muutujad. Me jätan ta niimoodi. Lubage mul uuesti, teha. Lubage mul uuesti, refrään. Ja ... tule. Lase edasi. Nagu kõrvale, miks on see ole veel kokku varisenud? Killustatust süü juhtus ülikiire enne. [Kuuldamatu õpilase vastus] >> Täpselt. Nii et see võtab aega, et printida, eks? See lihtsalt võtab rohkem tööd arvuti osa. Ja siin see on: segmenteerimine süü. Nii märkate, kuidas kiire programme. Kui te ei prindi midagi, super kiire. Aga saime ikka seda killustatust süü, sest mis juhtub? Kui te arvate, kuidas teie arvuti mälus on sätestatud, see juhtub olema peamine, kuid siin olgem lihtsalt nimetame seda koori ja olgem nimetame seda koori. Ja nüüd, kui ma teen oma esteetika õigus, see on lihtsalt ütlen kooris, koori, koori, kooris, koori, koori, koori, reklaami nauseum, ja lõpuks, mis juhtub? Kui suur pilt, sõna otseses mõttes, on see, mida lihtsalt juhtub kontseptuaalselt? Korstnat ületamise hunnik. Või veel hullem, sa lihtsalt ületanud kõik, sealhulgas teksti segment, mis on 0. ja 1s, mis esindavad oma programmi. Lühidalt, see on lihtsalt super, super halb. Teie programm on spiraled kontrolli. Sa kasutad nii rohkem mälu kui te ette kõik, sest loll viga sel juhul, või antud juhul väga teadlikult teinud funktsiooni kutsutakse ise. Nüüd, see ei ole kõik halb. Funktsioonid kutsuvad end tegelikult on suur võim, kui te kasutate seda õigesti. Ma ei ole kasutanud seda õigesti siin. Nii et see ei ole kõik halb, kuid asjaolu, et ma ei ole kunagi tegelikult ärge kutsuge ise on põhiline nõrkus siin selle programmi. Nii et kui me läheme selle kõigega? Mis tegelikult toimub? Kui ma kutsun juurdekasvu funktsioon nagu me tegime ka neid näiteid, Mul on raha nagu 1, et annan sisse Ma läbida koopia number 1, et järgmine juhtub. Läheme juurdekasvu Näiteks see kutt siin. Siin on, mis tegelikult toimub. Kui ma kutsun juurdekasvu ja annan x, piltlikult, mis siin toimub on see. Kui mul on väärtus 1 ladustatud siin ja ma tegelikult helistada juurdekasvu, mis on nüüd nimega chorus - iPad on viskamine mind siin maha. Kutsume seda juurdekasvu, ja me ei tea, mis see järgmine funktsioon saab olema. Nii et mis tegelikult toimub on siin kusagil peamised mul patakas mälu et on hoidmiseks number 1. Kui ma kutsun juurdekasvu, ma kasutan teise tüki mälu, aga nüüd on mul koopia 1. Kui ma juurdekasvu, et väärtus, see saab 2, aga mis siis juhtub niipea kui juurdekasvu tulu? See mälu lihtsalt saab kätte tagasi operatsioonisüsteemi, mis tähendab, kõik olete teinud midagi kasulikku. 1, et algselt esitatud peamine on ikka tegelikult olemas. Nii et kui me läheme seda? Tuleb välja, et mälu sul on see back-to-back jada bytes , mida saab panna asjad, ja tuleb välja, et me oleme juba näinud midagi mis hõlmab paneb asjad tagasi seljad tagasi. Mis on string põhineb nädal 1 ja nüüd nädal 2? See on lihtsalt kogumise tähemärki. Nii selgub nagu sa ei pane numbrid mällu, samamoodi saab panna märke mälu. Ja kui me alustada pannes tähemärki mälu seljad et seljad, selgub, et kasutades lihtsamaid asju nagu loop või samas silmus, saame kinnitada, vasakult paremale üle märkide jada ja alustada massaging neid erinevaid märke üldse - võiks saada b, b võib muutuda c - nii et lõppkokkuvõttes saame inglise lause, mis tegelikult mõtet ja teisendada kõik need tähed ükshaaval jalgsi läbi meie arvuti mälu vasakult paremale, et tegelikult varjata. Võtame meie viieminutiline paus siin, ja kui me tagasi tuleme, hakkame seda protsessi skrambleerimise andmed. Hea küll. Enne kui me sukelduda mõned krüpto ja neid asju nimetatakse massiivid andke mulle pausi küsimusi, sest ma tunnen, et ma tõesti selline segane mõningaid selliseid teemasid. Nii et olgem määrata nüüd, kui saame. Me lihtsalt rääkisime tagasi väärtused, me rääkisime argumendid, ja me rääkisime seda mõistet, mis me tuleme tagasi ka lähinädalatel, vaatamise mälu terve hunnik neid kuhjata plaate, nii et rääkida, alt ülesse, nii et iga salve, et saab panna virna esindab funktsiooni, mis on praegu nimetatakse. Kas on küsimusi? Las ma küsin küsimuse siin. Lubage mul seda lihtsustada tagasi see oli enne mõned meie varasem Q & A. Asjaolu, et juurdekasv on avatud sulgudes, int arv, suletud sulgudes - mida see int arv koosneb? [Üliõpilane] argument. >> Argument. Okei. Aga mis on argument? [Kuuldamatu õpilase vastus] >> Mis see on? >> [Üliõpilane] Midagi, mis te kaotate sisse Okei, nii et midagi, mis te kaotate sisse Ja üldisemalt, see on lihtsalt sisend. Kui sa olid kirjalikult funktsioon ja mis funktsiooni eesmärk elus on teha midagi veidi erinev iga kord, kui seda kasutada, siis ainus võimalus selle saavutamiseks tõesti tundub olevat seda anda oma panuse nii et seda saab teha midagi erinevat selle sisendi iga kord. Nii et teil on vaja täpsustada kahte asja, kui funktsioon võtab sisend. Sa pead täpsustama nimi, mida soovite anda selle sisendi puhtalt oma mugavuse nii et saad vaadata seda on funktsioon, et te ise ei kirjuta, sest ma tegin siin real 32. Aga siis tuleb ka määrata oma tüüp, sest C on programmeerimiskeel et lihtsalt eeldab, et kui sa tahad muutuja, peate ütleb arvuti, mida andmetüüp on, suures osas nii, et ta teab mitu bitti eraldada selle muutuja sest see võib olla 6 - kahju, see ei ole 6. See võib olla 16, võib see olla 8, võib see olla 32, isegi 64, kuid arvuti peab teadma. Nüüd, int vasakul servas näitab, mida seevastu? [Kuuldamatu õpilase vastus] >> Mis see on? >> [Üliõpilane] Tüüp funktsioon. Tüüpi funktsioon ja täpsemalt, millist tüüpi toodangut. Õigus. Nii et arvestades asja sulgudes tähistab oma panuse, kui üldse, asi vasakule esindab oma toodangut. Ja sel juhul, juurdekasv ilmselt tagastab int, ja nii int on tüübi tagastamise seda funktsiooni. Mis see tähendab, et vastutasuks? Sõna otseses mõttes, kui kasutate märksõna tagasi ja siis, kui see, mida olete tagasi paremal märksõna on täisarv, siis see on tõepoolest kooskõlas sellega, mida oleme lubanud. Sa ei saa teha midagi sellist - hello, world - sest see on string. Ilmselt ei ole täisarv. Nii lühike, koorem on tõesti meile, programmeerija, seda spetsiifiliseks selle kohta, mida me tagasi ja siis tegelikult minna selle tagasi. Kontekstis siin nüüd on, et arvuti mälu on gigabait, 2 GB - mida iganes - võib-olla see on rohkem, võibolla on vähem, kuid arvuti peab seda on eri osades. Midagi läheb sinna, midagi läheb sinna, erinevad asjad lähevad keskel, ja täna me lihtsalt hakkame räägib loo, kuid me tuleme tagasi selle aja jooksul. Praegu ainult tükk mälu me tõesti hoolivad on tekstiosa sest see lihtsalt näitab 0. ja 1s et rõkkama on väljastada. Nii et kui sa jooksed käsk klaviatuuri nagu a.out või te topeltklõps ikoonil Mac OS või Windows, Teie programm on koormatud arvuti kõvakettalt mällu ja see plopped ülaosas oma arvuti RAM, nii rääkida. Samal ajal, nagu teie programm käivitub ja peamised saab nimetada programmis sa kirjutasid või programmi Microsoft või Apple kirjutas, mõni tema kohalik muutujad lõpuks seal allosas arvuti mälu. Aga kui peamine nõuab muu funktsiooni, et endal on muutujate või argumente, nad lõpuks kohale. Ja kui see funktsioon nõuab midagi, nad lõpuks kohal, kõrgemal, selle kohal. Ja alles siis, kui funktsioon on teinud täidesaatva ei virna plaate, nii et rääkida, hakkama saada väiksem ja väiksem. Ja see on siis, lühikokkuvõte, seletab, kui helistate kuubik või helistate juurdekasvu, sa läbides koopia väärtus. Ja mida see tähendab piltlikult, et sa sõna otseses mõttes kirjalikult number 1 teises osas mälu, muutes selle 1-2 puhul juurdekasvu või 8 puhul kuubik ja siis visata, et mälu ära niipea kui juurdekasvu või kuup tagastab funktsioon. Küsimus. [Üliõpilane] Kuhu globaalsed muutujad hoitakse? Globaalsed muutujad hoitakse milline on hetkel kutsus vormindatud andmed või uninitialized andmed, Vahe on selles, kui teil on globaalne muutuja ja siis anna see kohe väärtus koos võrdusmärk, see jõuab ülaosas seal, ja kui sa ütlesid int x; ilma väärtuseta, see jõuab veidi madalam RAM lihtsalt kokkuleppeliselt. Muud küsimused? Hea küll. Nii et see pilt tulevad tagasi, kui saame võimsam mida me saame teha arvuti, kuid nüüd, olgem on lühike sissejuhatus krüptograafia, konkreetset tüüpi krüptograafia see ei lahenda kõiki maailma probleeme kuid ei lahenda mõningaid neist. Sel juhul on meil midagi, mida nimetatakse saladus-võtme krüptograafia. Secret-võtme krüptograafia, nagu nimigi ütleb, saab oma turvalisust saladus. Näiteks, kui sa olid tagasi algkooli ja sa olid läbivad väike saladus love letter et poiss või tüdruk sind purustamine edasi, kui sa tahad läbida, et teadmiseks läbi publiku, siis ilmselt ei kirjuta seda märkust, inglise või mis iganes teie emakeel. Pigem võiksite varjata seda või te võite lihtsalt saata sõnum nendel päevadel. Aga sa võiksid tegelikult andke neile teadmiseks kogu klassiruumis. Ja teha seda turvaliselt nii, et teie sõbrad ja õpetaja ei tea, mida olete kirjalikult, siis võib tulla üsna lihtne algoritm, noor kuigi võite olla, et lihtsalt rüselus sõnu. Nii et selle asemel kirjalikult võite kirjutada b, asemel b võite kirjutada c, asemel c võite kirjutada d, ja nii edasi. Või siis võiks tulla keerukamaid tõlge kirju erinevate tähtedega. Aga saak on poiss või tüdruk, kellele saadate käesoleva märkuse peab teadma midagi, mis on just see, ilmselt? >> [Üliõpilane] Mis te saadate. Mis su saladus on, nagu mis see on kaardistamise vahel ja B ja C-ja D. Kas see on lihtsalt lisades 1 kuni iga tähti minna punktist A punkti B, B c? Kas see keerulisem kui see? Nii et teie ja teie purustada pea olema see salajane info, kuid seal on mingi saak-22 siin. Kui see on esimene kord, kui saadate selle armastuskirja läbi klassi, kuidas on see poiss või tüdruk läheb teada, mis saladus isegi on? Nii salajane võti krüpto ei lahenda kõiki maailma probleeme, ja seal on tegelikult suhe siin, et me tuleme tagasi suunas semestri lõpus. Samamoodi ei enamik meist ei tea keegi, mis töötab näiteks Amazon.com juures, ja veel paljud meist on ilmselt ostetud kraami Amazon.com, ja me oleme õpetanud oletada, et nende e-kaubanduse tehingud on turvaline. URL ilmselt ütleb https, seal on võibolla rumal vähe tabaluku ikoon kuskil, seal on mingi krüptograafia kindlustada oma krediitkaardi andmed Teie ja Amazon.com. Ja veel, kui krüptograafia hõlmab teades mõned saladus ja veel ma ei tea kedagi Amazonist ja ma pole kindlasti mitte korraldada mingit saladust kellegagi Amazonist, kuidas on minu arvutis või minu brauser seda teed? Tuleb välja, seal on teist liiki krüptograafia kokku, et seda probleemi lahendada. Aga täna, me keskenduma lihtne kus saab korraldada eelnevalt teada mõned saladus nagu 1 või mõned kaardistamise vahel ja B. Ja protsess krüptograafia tähendab tavaliselt seda. Sul on mõned lihttekstina kujutatud siin vasakul, sa jooksed ta läbi mingi algoritm või kord krüptimine see - võibolla see lihtsalt muutub B, B saab C - ja siis lõpuks krüptotekstiga. Vahepeal, kui oma kiindumuste saab see saladus teadmiseks, ta peab siis lahti see, mida üldiselt tagurdades, et algoritm et saada tagasi lihttekstina. Seal on füüsilise inkarnatsiooni seda. Näiteks see on väike saladus decoder ring, ja see on ring selles mõttes, et seal on kaks valib siin. Väljastpoolt perifeeria see asi, seal on tähed A kuni Z, kuigi nad on suvalises järjekorras, ja sees, seal on tegelikult mõned numbrid nii, et selle sõrmusega saab omamoodi omakorda väljaspool, kuid mitte sees et rivistama arvud koos tähtedega. Alates filmi nimega jõulujutt, näete, et vähe Ralphie oli nii innukas, et aru saada, mida Little harva Annie salajane sõnum oli temaga mis oli edastatud, ma arvan, vormis numbrilise sõnumeid teravilja kasti ja siis tuli koguneda kõik vähe kaarte, mis tuli teravilja kasti, siis tuli posti neid, siis tuli naasta saladus decoder ring nii et saate lõpuks aru saada, mida kaardistamine on vahel tähti ja numbreid või tähed ja tähed. Kuidas on arvuti me saame minna rakendamisel või esindavad selliseid asju? Vajame viis väljendada end natuke paindlikumalt kui meie muutujad seni on lubanud. Meil on olnud ints, oleme olnud tähemärki, oleme olnud ujukite ja kahekohalised ja mõned teised, kuid need on eravalduses mälu, et tegelikult ei luba meil väljendada asjad nagu sõnu ja lauseid ja fraase. Tõepoolest, me oleme kutsutud selliseid asju stringid, kuid me lubame, et see on tõesti ainult lihtsustamise CS50 raamatukogu et me kavatseb koor tagasi. Ja nii alustame seda teha siin. Lubage mul minna ja avada fail - kõik need failid on olemas, nagu tavaliselt, online - nn array.c lahendada probleemi mitteseotud stringid kuid maalib pildi siia sellest, kuidas me võiksime kasutada midagi, mida nimetatakse massiivi. Massiiv on andmetüüp. See on tüüpi muutuja kehvasti, et on mitu väiksemat tüüpi andmeid sees on seljad et seljad. Nii näiteks, kui me tahtsin kirjutada väike programm, mis annab teile teie viktoriin keskmine jaoks muidugi mingi 50, et on 2 viktoriinid, sa võiksid väga kergesti kirjutada selle programmi alusel isegi mõned eelmise nädala materjali kasutades GetInt ja paar muutujad: Väravavahi quiz1, int quiz2. Ja see on üsna lihtne. See on võibolla 10, 20 rida koodi max rakendada programmi mis küsib kasutaja 2 viktoriini skoorid ja siis arvutab nende keskmise lisades neid koos, jagades 2 ja seejärel printida tulemust. Võiksime tõenäoliselt teha päris kergesti nüüd pärast mõningast mitu minutit. Probleem on aga selles, et oletame, et 50 oli 3 viktoriinid või 4. Oletame, et sa tahtsid kasutada sama programmi klassi, mis oli iganädalane viktoriine. Mõtle klassi, mis on iganädalane viktoriinid. Kui seal on 16 või nii nädalat semester, nüüd on 16 näitajat: int quiz1, int quiz2, int quiz3, int quiz4. Niipea kui hakkate nägema seda koondamine, see kopeerida ja kleepida koodi, see peaks hakkama sind soovin, et oleks parem. Ja õnneks, sest massiivid on. Nii et teeme seda. Esiteks lubage mul tutvustada väga lihtne asi, et me pole kasutatud seni kuid näete seda vahetevahel kood. See on see, mida on üldiselt nimetatakse samaks. Nii et see on pidev selles mõttes, et see väärtus ei muutu kunagi. Inimeste konventsiooni loomisel pidev on kasutada kõik suurtähtedega just nii, et see tõesti paistab silma oma koodi, ja eriline märksõna, mida saate kasutada C # define. Nii me ütleme # define, siis ruumi, siis sõna, mida soovite kasutada pidevalt nimi ja siis väärtus samaks. Teade see erineb määrates midagi muutuja. Pole mingit võrdusmärki, ei ole semikooloniga. See on see, mida on üldiselt tuntud kui eeltöötluse direktiivi vaid pigem, et muul ajal. Praegu tekitab see muutumatu väärtus nimega TESTID kelle tegelik arvuline väärtus on 2. Nii et kuskil näed viktoriine, interaktiivseid viktoriine kogu seda faili see on lihtsalt number 2. Kui ma vaatan peamised nüüd, vaatame, kuidas see töötab. Esiteks tundub veidi segasena, aga see on kõik asjad alates 1. nädalast. Küsi kasutajalt klassid. Kuidas me seda teeme? Kooskõlas 22 - see on tõesti mahlane osa - Ma kuulutan float kuid mitte ainult ühe sularahaga. Ma kuulutatakse pigem massiivi ujukoma väärtuste. See muutuja nimetama hakatakse hindeid, kui sellele viitab siin, kuid ainult tükk uus süntaks siis on need nurksulud. Asjaolu, et ma olen öelnud float klassid ja siis sulg ja seejärel arv - märgata, kui see on pidev see on nagu me seda tegime - see tähendab, "Hei arvuti, anna mulle 2 ujukite ja lähme koos nimetame neid klasse." See on kontrastiks palju tüütu protsess näeb välja selline: float Grade1; float Grade2; ja nii edasi. Nii massiivi võimaldab meil rakendada seda ideed, kuid palju vähem räpakalt, nii et me saame kirjutada 1 rida koodi asemel, ütleme, 16, 16 nädala semester. Ma ei taha kõva-kood 2, sest kui sina arvad sellest nüüd loogiliselt, oletame järgmisel aastal CS50 muudatusi kuni 3 viktoriinid asemel ja mul oli number 2 siin, mul oli number 2 siin, Mul oli number 2 siin, number 2 siin. See muutub väga tüütu ja väga lihtne kägardama ja kogemata muuta 1 väärtus on 3 ja pane mõni muu väärtus 2. Nii et ma lähen selle asemel abstraktne see ära ja kasutavad seda pidevalt, et nagu nimigi ütleb, ei muutu kunagi. Ja nüüd ükskõik, kas meil on erinevad viktoriinid sel aastal või järgmisel, Ma lihtsalt pean seda muuta ühes kohas siin üleval. Nii et kõik on konstant. Vahepeal uut kontseptuaalset omadus on, et massiivi. Nii nurksulgudes anna mulle seda palju ujukite ja laseb mul kollektiivselt nimetada neid klassid siin. Nüüd vaatame, mida ma teen. Siin Rida 24 on algusest jaoks silmus. See on tõesti midagi meeldib. See on lihtsalt kasutades TESTID asemel püsiprogrammeeritud arv. Aga seal on midagi intellektuaalselt erinevate sinna eelmisel nädalal. See on lihtsalt printf, nii printf ("Viktoriin #% d% d:") sest ma tahan välja printida mulle viktoriin number 1, 2 ja siis 2 2. Nii et see on puhtalt esteetiline asi. Aga huvitav osa nüüd on rida 27. Selleks, et täita üks kahest kohatäited koos ujukomaväärtus, sa uuesti kasutada nurksulgudes. Sel juhul ma kasutan i, sest see loop on alanud i võrdub milline väärtus, ilmselt? [Üliõpilane] 0. >> [Malan] 0. Nii et esimese iteratsiooni see ahel, see on nii, nagu ma kirjutasin seda koodi, kuid teist iteratsiooni see silmus, see on nii, nagu ma kirjutasin selle oma kood. Kuid tõsiasi, et ma kasutan muutuja on täiuslik, sest nagu nimigi ütleb, see on erinev selle väärtus igal iteratsiooni nii et ma täita see massiivi ühe kohapeal korraga. Mida see massiivi välja näeb? Põhjus, miks ma joonistasin super lihtne ristkülik ekraanil siin enne oli sel põhjusel. Massiiv on lihtsalt patakas mälu järgneb teine ​​patakas mälu järgneb teine ​​patakas mälu ja nii edasi. Nii et kui minu rida on suurus 2 Käesolevas asjas, kõik, mida ma teeks kirjutades minu viktoriini skoorid meeldib siin - ma sain 100 selle ühe ja siis sain 99 see - siis see mälu ei pruugi isegi kasutada, sest ma olen ainult küsis arvuti array suurus 2. Need väljakud on veel seal, eks? Teil on veel 2 GB RAM isegi kui sa oled ainult küsisin 2 ujukite. Nii et idee massiivid on see, et arvuti lihtsalt võtab tüki mälu ja siis jaotab väiksemateks tükkideks seljad et seljad. Ja nii ongi kõik massiiv on. See on külgnevas patakas mälu sees kuhu saab panna asjad. See juhtub siis tee lihtsalt mingi igav aritmeetika. Kui ma keri siin on see, kus ma siis itereerime massiivi. Ma tulla liitmise kõik väärtuste massiivi, ja siis ma kasutan ringi funktsioon siin tegelikult teha summa jagatud viktoriine. Aga las ma siputan kätt, et kui omamoodi piisavalt aritmeetika nüüd. Aga kõik, mis teeb minu jaoks lõppkokkuvõttes on arvuti keskmine. Nii et esimene viktoriin pluss 2. viktoriin jagatud 2 ja seejärel printida see välja nagu int. Aga olgem nüüd ülemineku erinevaid Näiteks nimetatakse string1, mis on samamoodi, kuid kasutades stringid. Lubage mul minna ja lihtsustada seda hetkeks. Andesta taandus nüüd. Teade kooskõlas 19. Selles näites ma saan stringi kasutaja. Aga teate, mis ma järgmisena teeb eelarveridadel 22 aastast. Ma olen tegelikult itereerimise alates i kuni - ja see on uus trikk - strlen, string pikkusega. See on funktsioon, mis on koos C et kui te kaotate seda stringi, ta ütleb teile, kui palju märke on, et nöör. See on kõik. Ja asjaolu, et see on strlen asemel stringi pikkus on lihtsalt sellepärast, et see on sisutihe. Kolmkümmend aastat tagasi, inimesed tahtnud kirjutada asju lühidalt kui võimalik, nii oleme hoida selle konventsiooni siin. i + + tähendab lihtsalt juurdekasvu i iga iteratsiooni. Ja nüüd märgata seda, mis on tõesti huvitav. Kooskõlas 24, ma ütlen, "Arvuti, anna mulle märk, 8 bitti, ja nimetavad seda c." Aga milline on see paremal servas öelda? Inglise keeles, mida see koosneb? [Üliõpilane] esimene märk massiivi. Täpselt. Anna mulle esimene märk massiiv. Või üldisemalt, anna mulle nda märgi massiiv. Ja mõistma, et see on oluline nüüd, et kui arvuti teadlased, me tegelikult lugedes 0. Sul ei ole kaalutlusõigust nüüd hakata seda tegema. Nüüd on teil käituda vastavalt arvuti ootused ja loota 0 sest [0] saab olema esimene märk string, [1] saab olema teine, [2] saab olema kolmas ja nii edasi. Nii et see programm, kui ma kompileerida see on jälle string1, nii et string1, ja nüüd ma olen joosta string1 minu terminaliakent. See ootab sisend, nii et ma lähen sisestada David, Enter, ja nüüd ta prindib David kõik erinevatel teedel, sest teate, mida ma teen. Ma printimise üks täht korraga. Me ei hakka üksikasjalikult täna sellest, vaid ma välja hetk tagasi selle kontrolli siin. Selgub, et kui kasutaja ei toimi, võistlevuse, või lihtsalt segaduses, saate tegelikult ei anna string põhjalikkusega. Kui põrkad vale klahvi klaviatuuril, siis võiks anda mingit stringi üldse või kui sa oled pahatahtlik, võite proovida kleepida GB väärtuses essee et täita seda stringi, ja kui arvuti mälu, tuleb välja, et me lähme tagasi saada seda erilist väärtust nimetatakse NULL. Nii et nüüd lihtsalt tean, et seal on see eriline väärtus nimega NULL mis võimaldab meil kontrollida, kui me mälu, muu hulgas. Aga kui ma avada nüüd string2, märkate üks erinevus siin. Teade üks erinevus siin string2. Mis string2, seda silmus on veidi erinev. Las ma kustutan NULLS et saaksime rääkida need muul ajal. Mis on erinev umbes jaoks silmus seekord? Ma ei saa minna tagasi eelmisele näiteks. Nii et see versioon 2, see on versioon 1. 1, 2. 1, 2. Strlen kõne on kus? See on esimene osa jaoks silmus. Kõik mõtted, miks ma seda teen? Jah. [Üliõpilane] Nii et sa ei kutsu funktsiooni iga kord. [Malan] Nii et me ei sea funktsiooni iga kord. Täpselt. Meenuta alates jaoks silmuseid, et nad on super lihtne Kui oled omamoodi aru, et see on käivitamise, seisukorra ja uuendus. Probleem on selles, et tingimus juhtub iga iteratsiooni silmus. Ja nii see näide, mis on halba, et see on minu tingimus? [Üliõpilane] Helistate strlen. [Malan] Helistate strlen uuesti ja uuesti ja uuesti. Aga kui ma olen sisestatud David, pikkus, et string on 5, ja see ei muutu iga iteratsiooni loop sest string on ikka D-A-v-i-d. Nii et see on vihje, mida läheb aina olulisem mõte tuntud disaini otsus, kus lihtsalt ei tee arvuti teha lisatöö. Nii nagu vargsi eelvaade pset2, pset2 Standard Edition läheb väljakutse teil tegelikult rakendada mõningaid arvu ciphers mõned hulk algoritme, nii et saate nii krüptida ja dekrüpteerimiseks salajaste sõnumite palju nagu üks Ralphie seal dekodeerida. Kui häkker väljaanne pset2, me läheme veidi kaugemale. Me läheme käe faili tegelik arvutisüsteemi mis sisaldab terve hunniku kasutajanimesid ja tegelikke krüpteeritud paroole, ja väljakutse häkker väljaanne saab olema crack need paroolid ja selgitada, mida krüptograafia või mis saladus kasutati tegelikult tekitavad need paroolid. Ja me ei kavatse seda teha, kasutades uut funktsiooni siin C et ma annan sulle lihtsalt demo tuntud käsurea argumente. Selgub, nagu mõned teist ehk märganud jaos või õpikutes, Peamised alati ei pea olema tühine sulgudes. Tuleb välja, et peamised võib kirjutada ka niimoodi, kusjuures kaks argumenti, argc ja argv, kus argc on sõnade arv et sa peale programmi nime oma käsurida ja argv on tegelikud sõnad. Ja nagu nurksulud seal näitavad, argv on ilmselt massiivi. See saab olema string pärast string pärast stringi mälu. Nii et me ei kavatse olla võimeline tegema alustades pset 2 on midagi sellist. Kui ma argv1, mis on näide me tuleme tagasi esmaspäeval, ja kasutada seda, märgata, et see ei tundu midagi veel. See lihtsalt trükib välja oma nime all. Aga kui ma hüvasti klass, teate, et see programm ilmselt kordab üle iga sõna, mis olid kirjutatud käsureale. Ja vahendid, mille abil me pääseda sõnad, et kasutaja on trükitud käsureale on muutes peamine algab sel nädalavahetusel alates int main (void) int main (argc, argv) ja seega sünnib käsurea argumente. Ja kui sa tõesti kogenud seda, sa pead olema võimeline kirjutama tõesti trippy programmid nagu see siin, mis läheb üle ja kaugemale mõned funktsioonid oleme seni teinud vaid kõik üsna võimas. Nii et jätame selle käesoleva ekraanil, ja me näeme esmaspäeval. [CS50.TV]