[Powered by Google Translate] [Nedēļa 2, turpinājums] [David J. Malan, Hārvarda universitātes] [Tas ir CS50. - CS50.TV] Labi. Tas ir CS50, un tas ir beigas 2 nedēļas. Ja jūs gaidīt, lai būtu izsalcis ap šo laiku rīt, zināt, ka mēs ejam uz sasaukt kā nelielu grupu rīt, ceturtdien, 13:15. Tur šis URL šeit, ja jūs vēlaties, lai RSVP. Telpa ir ierobežota, tāpēc, lūdzu, piedod, ja veidlapa ir piepildīts ar laiku jūs aizpildīt šo veidlapu. Vēl URL, lai gan, ka varētu būt interesanti tas ir. Tikai par mēneša laikā, ko persona gatavojas darīt pieejamu vēl plašāk izmantojot EDX, pa kuru ļaudis internetā varēs sekot līdzi, iesaistās gaitā diezgan aktīvi, patiesībā. Tie būs, izmantojot CS50 Appliance un CS50 Apspriest un lielākā daļa no dažādām programmatūras rīki, kas mums jau ir, izmantojot šo semestri. Un viena no iniciatīvām mēs gribētu uzņemties kā eksperiments šogad ir redzēt, cik daudz satura mēs varam tulkot citos runā un raksta valodās. Tātad, ja jūs varētu būt interese piedalīties šajā projektā kuru mēs nodrošināsim angļu stenogrammas un subtitrus gaitā lekcijām un šorti un semināri un sekcijas un tamlīdzīgi, ja tu runā tekoši vai rakstīt tekoši kādu citu valodu, Mēs labprāt vēlētos iesaistīties jums šajā projektā, kurā jūs uzņemties vienu vai vairākiem video, tulkojot tos valodu jūs zināt gluži labi. Lai dotu jums sajūtu interfeisu, tur tas ir interneta lietotāja saskarne ka mēs, izmantojot kas radīs būtībā UI kā šis. Tas bija man māca daži Halloween atpakaļ, un labajā pusē tur melnā blakus šiem laika zīmogiem, Jūs redzēsiet dažādas lietas, kas nāca no manas mutes, ka dienā, un tad zem tā jūs varēsiet tulkot kādā citā valodā ko tieši kartēšana ir starp, šajā gadījumā, angļu un, teiksim, spāņu. Tātad, tas ir tiešām ļoti lietotājam draudzīgs rīks. Jūs varat attīt un ātri uz priekšu ļoti viegli ar tastatūras īsceļus. Tātad, ja jūs vēlaties piedalīties šajā eksperimentā un ir jūsu vārdi redzējis un lasīt potenciāli tūkstošiem ļaudīm, kas tur, lūdzu, justies brīvi piedalīties. Viens vārds par no pirmdienas ar kaķēnu. Citādi mēs esam nosūtījuši pārāk biedējošu ziņu, saprotu, ka darba laiks liecina un kā sekcijas liecina, kursa dizains ir ļoti daudz , ir skolēni sadarbojas un runājot strādāt ar problēmu kopas un problēmas kopā, un tiešām līniju vienkārši nāk uz leju, lai, atkal, darbs jūs galu galā iesniegt būtu savu. Un tā pavisam godīgi, jo darba laikā tas ir pilnīgi normāli, tas ir pilnīgi sagaidāms pat, lai čatā ar kādu draugu pie jums. Ja viņš vai viņa cīnās ar kādu tēmu, un jūs, piemēram, "Ak, labi, ļaujiet man sniegt jums nelielu ieskatu par līnijas kodu, kas man rakstīja:" Tas ir labi, kas notiek, un tas ir ļoti daudz labvēlīga, es domāju, ar mācību procesā. Ja līnija izpaužas šķērsoja ir tad, kad galva ir veida noliec nekā šeit, lai pārāk daudz sekundes vai minūtes, kas īsti ir tikko atbloķēšanas iespēja savu draugu, un protams, ja lietas iegūt apmaiņa pa e-pastu un Dropbox un tamlīdzīgi, Arī tur ir līnija. Lai ar visiem līdzekļiem justies komfortabli un tas, lai tērzēt ar draugiem un klasesbiedru par psets un vairāk, un tikai saprast, ka tas, ko jūs galu galā iesniegt patiešām ir produkts no jūsu radīšanu un nevis kāds cits. Un tā viena no domēnspecifiskas problēmas pset2, kas iznāks vēlu rīt naktī, ir nirt vērā pasaulē kriptogrāfija, kas ir māksla šifrējot vai šifrēšanas informāciju, un tas galu galā ir saistīts ar pasaules drošību. Tagad, drošības lielākā daļa no mums nāk kā diezgan ikdienišķa mehānismu. Visi no mums ir lietotājvārdus un paroles, un mums visiem ir ļoti slikti lietotājvārdus un paroles, visticamāk. Ja parole ir tāda pati uz vairākām vietnēm, kas, iespējams, nav labākā ideja, kā mēs apspriedīsim uz semestra beigām. Ja parole ir rakstīts uz līmlapas - nav joks - uz jūsu monitora, kas arī ir ne vienmēr labākais dizains, bet diezgan bieži sastopama parādība. Un, ja jūs nelietojat kriptogrāfija, lai šifrētu paroles, viņi ir īpaši neaizsargāti. Tātad, ja jūs domājat, ka jūs ir super gudrs, ņemot slēptu Word dokumentu kaut kur uz cietā diska, kas ir visas jūsu paroles bet tas mapē, ka neviens gatavojas meklēt, kas arī nav ļoti droša mehānisms. Un tā, kādi pset2 ieviesīs tas māksla kriptogrāfiju un kodēšanas informāciju, ka lietas, piemēram paroles visi drošāku. Konteksts ir tāda, ka ar nedrošām datiem nāk iespēja šifrēt to un motokross to. Un tā tas, piemēram, ir piemērs no šifrētu ziņu. Tas tiešām saka kaut ko angļu valodā, taču tas noteikti nav pilnīgi skaidrs. Un mēs būsim pilnu apli šodien kaitināt intervālu ko šis noslēpums ziņa šeit ir. Bet reālajā pasaulē datoriem, lietas nav pat izskatās viņi varētu būt angļu frāzes. Piemēram, tas ir tas, ko jūs varētu atrast standarta Linux vai Mac vai UNIX datora failu, kas bija reiz sauc parole failu. Mūsdienās tā ir pārvietota uz citām vietām. Bet, ja paskatās īstajā vietā sistēmu, jūs redzēsiet ne tikai savu lietotājvārdu vai citu cilvēku uz sistēmu, bet jūs redzēsiet šifrētu versija savu paroli. Patiešām, vārds kapenes tur liecina, ka šādi sīkumi tiek šifrēta, un šis šķietami izlases burtu un rakstzīmju un ciparu sēriju un tā tālāk var atšifrēt tikai vispārīgi zinot kādu noslēpumu - noslēpums vārdu, noslēpums numurs - un tā tiešām, par kriptogrāfiju galu galā vārīties uz leju māksla uzticēties kaut kāda un zinot kaut ka kāds cits nav. Tāpēc mēs izpētīt šo mazliet sīkāk šodien un PSET nākt. Un tagad vārdu par der / neder. It kā daži no jums ir ienira pset1, Appliance, un ļoti jaunu pasauli sev, saprotam, ka neapmierinātība un apmulsums un tikai tehniskas grūtības ir diezgan paredzams, sevišķi ar pirmo PSET, kur tur ir tikai tik daudz jauna, tikai iepazīties ar ls un CD un visi šie Arcane komandas un jauna vide, un tas ir atsevišķi no faktisko materiālu un pašu programmu. Tāpēc saprotam arī to, ka ir noteikti darba laiks, kas pastāv kā atbalsta struktūras. Sadaļas sākt šo nāk svētdiena. Bet pats galvenais, ja jūs sajūta tikai, ka tas nav pasaules jums, saprotam, ka tas tiešām tikai vajadzīgs laiks. Un ja nebūtu šo iespēju gadiem man par ņemot klases der / neder, godīgi, es nekad nebūtu pat kāju klasē. Un jūs varat mainīt šo līdz, teiksim, piektā kursa Pirmdien, Tātad, ja jūs esat uz malas tagad saprotam, ka nevis galva uz dažiem citiem ūdeņos vispār, Vai noteikti jāapsver tikai mainot nodot / neizdoties. Atkal, tur nav īsti šī kultūra šeit Hārvarda no ņemot lietas / neatbilstības jo visi patiešām vēlas sasniegt vai overachieve, bet godīgi sakot, tas ir brīnišķīgs veids, kā mēģināt kaut ko kas varētu būt pazīstams ar jums, un jūs galu galā darīt, vairumā gadījumu, diezgan labi, varbūt daudz jūsu pārsteigums. Un vēl konkrēti, ko es domāju / neatbilstības parasti dara, jo, kā jūs varētu būt pieredzējuši ar pset0, ja jūs nodot 10 stundas, 15 stundas, 25 stundas vērā daži PSET un jūs vienkārši banging galvu pret sienu un tas kļūst super vēlu vakarā bet tu esi PSET 90%, un Jūs vienkārši nevar izrēķināt viena lieta, / neatbilstības patiešām ņem malas off no klases, piemēram, tas, kur var kārtot no laimīgi saka: "Labi, es zinu, tas nav ideāls, bet es strādāju manu ass off par šo, es esmu diezgan apmierināts ar kur tas beidzās, " un kas atbilst cerības garāmbraukšanas / neder. Tātad paturēt to prātā. Labi. Tātad tiem no jums, kuri ir cīnījušies, lai izmantotu Harvard University Wi-Fi, zinu, ka tur ir CS50 SSID, Wi-Fi savienojums, peldošs ap ka Jums varētu būt labāk veicas par. Tas mazliet ironiski, ka parole šim, ja jūs vēlētos, lai mēģinātu izveidot savienojumu ar šo par labāku ātrumu - un dariet mums zināmu, ja tas nav labāk - ir 12345, visu ceļu līdz 8 jo 8 ir drošāks nekā 5. Tātad, ja jums ir nepieciešama Wi-Fi paroli, izveidojiet savienojumu ar CS50 bezvadu šeit, 12.345.678, un post CS50 Pārrunājiet, ja jums vēl ir neregulāra savienojumu jautājumiem, un mēs pieņemsim pilnvaras, kas būtu jāzina par šo telpu. Labi. Tik ātri ķircinātājs, jo īpaši tiem no jums, kas ir fanu zēni vai meitenes no visām lietām Apple. Ko es izraka no pāris gadus atpakaļ bija šo failu šeit, iUnlock.c, tikai veida padarīt konkrētākas un sarežģītāka dažas no pamata C programmu mēs esam rakstiski. Tāpēc es atvēra šo failu, iUnlock.c. Tas ir pieejams par lekcijas lapā šodien. Kreisajā pusē jūs redzēsiet garš saraksts funkcijas. Tātad puisis, kurš rakstīja šo uzrakstīja daudz funkciju, vairāk nekā tikai galvenais. Viņš izmantoja visu ķekars bibliotēku šeit, un, ja mēs sāktu ritināt, ko tas patiesībā ir, ir pats pirmais, es uzskatu, kreka par sākotnējo IPHONE. Ja jūs vēlaties, lai jailbreak sākotnējo iPhone, kas nozīmē untether to no AT & T un faktiski instalēt īpašu programmatūru par to un darīt lietas, kas Apple nevēlējās cilvēki darīt, kāds bija laiks, lai noskaidrotu, kā tieši viņi varētu izmantot programmatūru trūkumus, kļūdas, bugs, jo Apple programmatūru, un tādējādi ir dzimis iUnlock.c-- ka, ja jūs apkopot to savā datorā un uzstādītas to uz iPhone kas bija savienota ar datoru, izmantojot, teiksim, izmantojot USB kabeli, tas dod jums administratīvus vai saknes privilēģijas uz jūsu iPhone un ļaut jums darīt diezgan daudz, ko jūs vēlaties. Un tā tur ir bijis šis aizraujoši kaķa un peles spēle starp Apple un pārējo pasauli jo īpaši to, kā daudzi uzņēmumi, mēģināt, lai bloķētu to stuff leju, lai jūs varētu darīt tikai ar to, ko viņi vēlas. Bet, pateicoties tādiem cilvēkiem kā šis un zema līmeņa detaļas izpratne - un šajā gadījumā C programmēšanas - un no pazīstamajiem konstrukcijas partija ka mēs esam sākuši spēlēt ar, jums ir iespēja patiešām sviras aparatūru tādā veidā jūs ieskatiem un ne vienmēr kādu komersantu. Tātad, piemēram, man nav ne jausmas, ko tas viss dara, bet GetVersion izklausās diezgan vienkārši, un izskatās, ka tas ir funkcija, ka šī persona rakstīja. Tas aizņem kādu skaitlim kā argumentu, neatgriežas neko, bet šķiet, cilpa ar par cilpu šeit un ja nosacījums, ja stāvoklī pārtraukuma, un kaut attiecas uz versiju numuri, ja mēs ritiniet uz leju, pat ja no šiem atslēgvārdiem partijas būs jauns. Un tur ir visai daudz funkciju šeit mēs nekad neesmu redzējis, un, iespējams, kādreiz redzēt gaitā semestra. Beigās, dienā, tas ievēro tos pašus noteikumus un loģiku, kas mēs esam spēlē ar līdz šim. Tātad tas ir pārāk vecs, lai kreka jūsu iPhone 3s vai 4s vai drīz 5s šīs dienas, bet zinu, ka tas viss ir ļoti daudz iegūst no šīs pasaules, ka mēs esam ienira. Pieņemsim to apskatīt nedaudz vairāk vienkāršs piemērs: šo vienu, tikai, lai iesilda ar kādu sintaksi un arī dažas citas datu tips ka mēs esam runājuši par to, bet nav īsti redzams C. Tas ir fails sauc positive1.c, un vienu augšpusē komentāriem, Tas tikai prasa, lai lietotājs sniedz pozitīvu skaitli. Tātad, tas ir piemērs do-kamēr cilpa, kas ir jauki, lai lietotāju interaktīvo programmu kur jums ir nepieciešams, lai pastāstītu lietotājam kaut ko darīt, un ja tie nav sadarboties jūs kliegt uz viņiem vai noraidīt savu ieguldījumu. Lieta punktā: Es esmu gatavojas darīt līnijas 19 līdz 24 tik ilgi, kamēr lietotājs nav devis man pozitīvu skaitli. Šī detaļa šeit 18 līnijas, kāpēc es apliecinu n iepriekš visa šī looping uzbūvēt nevis blakus līdz 22 līnijas, kur es tiešām rūp, lai iegūtu n? Yeah. [Students] joma. >> Jā, tāpēc šis jautājums par darbības jomu. Un lajs izteiksmē, ko tas joma attiecas uz? Yeah. >> [Dzirdams studentu reaģēšanas] >> Vai tu runā nedaudz skaļāk? [Students] Kur jūs varat piekļūt šo mainīgo. >> Perfect. Kur jūs varat piekļūt konkrētu mainīgo. Un vispār, īkšķis noteikums līdz šim ir bijis, ka joma dažu mainīgo nosaka pēc jaunākajiem cirtaini bikšturi ka esat redzējuši. Un tāpēc šajā gadījumā, ja es sniedza kļūda paziņojot n 22 līnijas, ka līnija varētu strādāt. Es vēlos saņemt int, un es liktu to, ka mainīgais n 22 līnija, bet kas rindā kodu, tagad nav ne jausmas, ko es runāju par? >> [Students] 25. [Malan] 25, un izrādās, 24, kā arī tāpēc, ka šajā gadījumā tas neiekļaujas cirtaini lencēm. Tik vienkārši nedaudz par traucējumu mazliet, bet ļoti viegli atrisināt, vienkārši paziņojot, mainīgo ārpus funkciju pati. Redzēsim vēlāk šodien jūs varat iet vienu soli tālāk un jūs pat varētu saņemt nedaudz slinks. Un tas nav ieteicams vispār, bet jūs pat varētu saņemt slinks un nodot mainīgo globāli, tā sakot, nevis iekšpusē funkciju, nevis iekšpusē cilpas, bet failu pati, ārpus visas funkcijas jūs esat rakstiski, jo es darīju šeit 15 līnijas. Tas parasti sarauca pieri, bet saproti tas ir risinājums reizēm citas problēmas, kā mēs beidzot redzēt. Tātad tagad mēs atstāt to kā šis, bet pieņemsim redzēt, ja mēs varam pārrakstīt šo tikai, lai sāktu pašizpausmei nedaudz savādāk. Šī programma, tikai, lai būtu skaidrs, ir positive1. Ļaujiet man iet uz priekšu šeit un manā termināļa logā padarīt positive1, Enter. Apkopo labi. Es esmu gatavojas palaist positive1, hit Enter. Es pieprasu, ka jūs man vesels pozitīvs skaitlis. Es saku -1. Tas nestrādāja. 0, 99. Tas, šķiet, darbojas. Varbūt ne visvairāk stingra pārbaude, bet vismaz tas ir jauki veselība pārbaudītu ka mēs esam uz pareizā ceļa. Tāpēc tagad ļaujiet man iet uz priekšu un atvērt versija 2 par šo, un kas ir atšķirīgs jau? Tā īsteno to pašu, bet to, kas lekt kā nepārprotami atšķiras šajā laikā? Tas bool zaļā krāsā. Tas ir iezīmēts zaļā krāsā, tas atslēgvārdu pazīstams kā bool, kas ir datu tips. Tas nenāk uzcelta uz visiem C. versijām Jums nepieciešams iekļaut konkrētu bibliotēka. Mūsu gadījumā, es iekļauta CS50 bibliotēku, lai mums ir pieeja bool. Bet 18 līnijā, mēs, šķiet, ir Būla vērtība šeit sauc pateicīgi. Es varētu būt sauc šo neko, bet es to sauca pateicīga tikai veida izteikt dažus semantisko nozīmi. Tātad sākotnēji 18 līnijas, es neesmu acīmredzot nav pateicīgs jo Būla vērtība pateicīgi tiek inicializēts ar viltus 18 rindā. Un tad šķiet, ko es esmu darījusi šeit 21 līnijām līdz 23 ir es esmu tikai veida pārrakstīt manu loģiku. Līdz ar to nav funkcionāli atšķirīgas, bet 22 rindā tagad es pārbaudītu, int lietotājs ir sniedzis ir lielāks par 0, tad es vienkārši mainīt vērtību pateicīgs taisnība. Un kāpēc es varu darīt? Jo 25 līnija, acīmredzot es esmu gatavojas pārbaudīt stāvokli. Vai šī cilpa, kamēr pateicīgi ir nepatiesa. Tāpēc es ierosināju šo kā alternatīvu 1 versija jo tas ir vismaz nedaudz vairāk intuitīvu varbūt, tas nedaudz vairāk balstīta angļu valodā. Tā darīt tālāk, kamēr jūs neesat pateicīgi vai kamēr pateicīgi ir nepatiesa. Un šoreiz arī es acīmredzot negribu atcerēties, ko lietotājs ievadījis jo paziņojuma tur nav mainīgo n, tāpēc patiesībā, mazliet balts meli tur. Funkcionāli, programma ir nedaudz atšķirīgs, kad mēs nokļūt apakšā tā jo es neesmu atcerēties to, ko n. Bet es gribēju parādīt arī šeit, ka, lai gan mēs esam redzējuši GetInt un GetString ko izmanto par labajā pusē vienādības zīme līdz šim lai mēs atceramies vērtību, tehniski, tas nav obligāti nepieciešams. Ja kāda iemesla dēļ jūs vienkārši nav aprūpi, lai saglabātu vērtību, jūs vienkārši vēlaties, lai pārbaudītu vērtību, pamanīsiet, ka mēs varam vienkārši rakstīt šo kā GetInt, atvērt paren, tuvu paren. Ka funkcija ir gatavojas atgriezties vērtību, jo mēs esam teikuši. Tas notiek, lai dotu jums atpakaļ int. Un tā, ja jūs garīgi domā par šo notiek, kad es rakstīt 99, GetInt atgriež skaitli 99, un tā konceptuāli, tas ir, it kā mans kods ir faktiski šo. Tātad, ja 99 ir patiešām lielāks par 0, tad pateicīgs kļūst patiess, tad līnijas 25 saprot ooh, mēs esam darīts, jo es esmu tagad pateicīgs, un 26 līnija, mēs vienkārši pateikt: "Paldies par pozitīvu skaitlim!" neatkarīgi no tā gadījās būt. Tagad pieņemsim do nedaudz sintaktisko cukura šeit, lai runāt. Redzēsim, vai mēs varam sakopt šo pozīciju 25 ar šo trešo un pēdējo variantu positive3. Pamanīt vienīgā atšķirība tagad ir kāda līnija kodu? >> [Students] 25. >> [Malan] Jā, 25. Un mēs esam nav īsti redzējuši šo triks tikai vēl, bet mēs neesam redzēt izsaukuma zīmi pirmdien, kas apzīmē ko? >> [Students] Nav. >> Ne vai noliegums. Tātad to Būla vērtību un uzsist savu vērtību. Patiess kļūst nepatiess, viltus kļūst patiesa. Tātad, es ierosinu, ir pat nedaudz vairāk intuitīvu rakstīšanas kodu veidā jo es vēl sāktu pateicīgs nepatiesa, es joprojām darīt tālāk, Es noteikti pateicīgs taisnība, kad pienāks laiks, bet tagad jūs tiešām var tikai tulkot šo kodu mutiski kreisās uz labo, kamēr (pateicīgs!), jo sprādziena vai izsaukuma zīme apzīmē jēdzienu nav, tāpēc, kamēr nav pateicīga. Tātad vēlreiz, mēs esam nav ieviesusi jaunus jēdzienus par sevi. Mēs runājām par booleans atpakaļ, kad mēs spēlējām ar nulles, bet saprotu, tagad mēs varam tikai sākt rakstīt savu kodu daudzos dažādos veidos. Jo īpaši tāpēc pset1 ja jūs esat veida cīnās, lai noskaidrotu veidu, kā rakstīt kādu programmu, izredzes ir tu esi veiksmi, jo tur var būt jebkurš skaits risinājumu ka jūs var notikt pēc. Piemēram, tas ir tikai 3, pat vienkāršāko programmu. Labi. Un tagad atceros pirmdien devāmies uz šo piezīmi ar atgriešanās vērtībām. Tātad par ļoti pirmo reizi mēs uzrakstīja programmu, kas nav vienkārši ir galvenais; Tā arī ir sava pielāgotu funkciju, ka es uzrakstīju šeit. Tātad 31, kas iet caur 34 Es esmu īstenojusi kuba funkciju. Tas nav sarežģīti. Tas ir tikai * * šajā lietā. Bet kas ir svarīgi par to, ka es esmu ņemot ieguldījumu formā un es esmu atpakaļ izejas formā * *. Tāpēc tagad man ir iespēja, līdzīgi man, lai ar prinf vien izmanto, lai izsauktu šo funkciju, zvanot uz kuba funkciju. Un kubs funkcija prasa zināmu ieguldījumu, un kuba funkcija atgriež kādu produkciju. Savukārt, printf vienkārši darīja kaut ko. Tā nav atgriešanās neko, kas mums nerūp, lai gan, jo malā tas atgrieztu vērtību; Jums tikai parasti ignorēt to. Printf tikko izdarīja kaut ko. Tas bija blakus efekts drukāšanas uz ekrāna. Turpretī šeit, mums ir kuba funkcija, kas faktiski atgriežas kaut. Tātad tiem iepazinušies ar to, tas ir diezgan vienkārši ideja. Bet tiem, kas mazāk pazīstami ar šo ideju iet uz izejvielu un saņemt atpakaļ rezultātus, pamēģināsim tikai kaut super vienkārši. Vai kāds ērti nāk uz skatuves īsi? Jums ir apmierināti ar kameru uz jums kā labi. Yeah? Labi. Kāds ir Jūsu vārds? >> [Students] Kens. >> Ken. Labi. Ken, nākt uz augšu. Ken būs funkcija veidu šeit. Iesim uz priekšu un darīt to. Būsim mazliet iedomātā. Priecājos ar jums iepazīties. Laipni lūdzam skatuves centrā. Labi. Pieņemsim skārusi šo pogu šeit. Labi. Tātad šeit jums ir moderna tāfeles, un ko es esmu, ir galvenā funkcija, piemēram, un man nav iPad manā rokā. Man nav īsti atcerēties, kā - Nu, es nevaru teikt, ka. Man nav īsti ir labs rokraksts, un tik tāpēc es gribu, lai jūs drukāt kaut uz ekrāna par mani. Es esmu to galvenās programmas, un es esmu nāksies jums saku , rakstot to manā vistas nulles un tad iet jums ievadi. Tik muļķīgi, lai gan šis pasākums ir, funkciju jēdziens un aicinot funkciju un atgriežoties funkciju tiešām vārīties uz leju, lai šo. Es esmu galvenais, es tikko rakstījis printf, citēju-likt pēdiņas beigās kaut uz ekrāna, Es esmu darbojas šo programmu, un, tiklīdz printf izpaužas sauc, tas aizņem vienu argumentu vai viens parametrs dažreiz starp pēdiņas. Šeit ir tas, ka arguments. Es esmu iet to Ken. Viņš ir melnā kaste rakstisku dažas vairākus gadus atpakaļ kas acīmredzot tikai zina, kā drukāt lietas uz ekrāna. Tik izpildīt. Tas nav slikti. Ļoti labi. Tāpēc tagad Ken tiek darīts izpildes. Vai viņš ir roku man neko atpakaļ? Ne ka mēs esam redzējuši līdz šim. Atkal, printf tas faktiski atgriežas numuru, bet mēs ejam, lai ignorēt, ka tagad jo mēs nekad neesmu to izmanto. Tā ka tas uz Ken. Un tāpēc tagad galvenais pārņem kontroli par programmas atkal jo šī koda līnijas, printf, tiek darīts izpildes. Un mēs iet par mūsu ceļu, izpildot neatkarīgi citām līnijām ir tur. Tāpēc tagad pamēģināsim nedaudz atšķirīgu piemēru. Šoreiz šeit pieņemsim vispirms notīrītu ekrānu, un šoreiz mēs izdarīsim cubing funkciju, bet šoreiz, es gaidu produkcijas vērtību. Tāpēc pieņemsim iet uz priekšu un darīt to. Tagad man ir līnijas kodu, kas saka x izpaužas kubs x. Koda līnijas, atsaukšana, izskatās šādi: x = kubs (x); Tātad, kā tas notiek uz darbu? Iesim uz priekšu un sniegt jums baltu ekrānu. Es esmu gatavojas rakstīt uz leju tagad vērtību x, kas šajā brīdī notiek, ir, teiksim, 2, lai saglabātu tā vienkārši. Man ir uzrakstītas uz papīra vērtība 2, kas ir mana vērtība x. Es to nodod Ken. >> Un es vienkārši uzrakstīt atbildi? >> Jā, pieņemsim tikai uzrakstīt atbildi. Labi. Un tagad viņš ir atgriezties man kaut ko. Perfekta. Nice segue. Tāpēc tagad viņš rokas mani atpakaļ vērtību 8 Šajā gadījumā, un ko man darīt ar to? Patiesībā - redzēsim, iegūt šīs tiesības. Kas es esmu gatavojas darīt ar to? Tagad es esmu gatavojas izmantot šo vērtību un faktiski uzglabāt to, ka tajos pašos bitu atmiņas. Bet pamanīt es esmu veida cīnās šeit. Es esmu nedaudz mulsina, jo, kad man tiešām rakstīt vērtību x, jo tas, ko es esmu tikko izdarīt fiziski roku Kens papīra gabaliņš, kas bija vērtība 2, kas bija x, un, protams, tas ir tieši tas, kas notika. Tātad izrādās, ka tad, kad jūs zvanu funkciju, un jums iet uz argumentu piemēram sveiki, pasaules vai jums iet ar argumentu, piemēram 2, vispār, jūs iet uz kopiju šo argumentu. Un tā tāpat kā es pierakstīju numuru 2 šeit un pasniedza to Ken, ka ir nozīmē, ka man joprojām ir kopija no vērtības 2 kaut kur jo patiesi, tagad, ka es esmu gotten atpakaļ vērtību 8, man ir nepieciešams, lai dotos atpakaļ uz RAM un faktiski pierakstīt 8 Ja man reiz bija numuru 2. Tātad vizuāli, atcerieties šo jēdzienu aizrit, burtiski, kopiju vērtību. Ken dara viņa lieta, rokas mani atpakaļ kaut ko - šajā gadījumā ir vērtība, piemēram, 8 - un tad man ir kaut kas jādara ar šo vērtību, ja es gribu, lai saglabātu to apkārt. Tātad tas viss nāks atpakaļ būs pārāk pazīstams pirms ilgi. Paldies tik daudz par šo demo šeit, Ken. [Aplausi] Ļoti labi darīts. Paskatīsimies, kā tas galu galā ir saistīts ar kādu no funkcijām izsaucēja ka mēs esam bijuši dara šeit. Ļaujiet man iet uz priekšu un mūs atpakaļ uz cubing piemēram, šeit. Ievērojiet, ka, ja mēs vēlamies, lai faktiski sākt lietot šo tālāk, mēs spēsim jābūt uzmanīgiem par to, ka numurs x kas ir izciesti šeit atšķiras no tā, ko patiesībā tiek pieņemts uz funkciju. Tātad vēlreiz, ko kopiju caurlaide kļūs diezgan piederīgs tikai brīdi. Pieņemsim to apskatīt kaut ko, kas nav gluži darbu labi vēl. Es iešu uz priekšu un atvērt 1/3 buggy piemērs, kas ir kļūdains pēc būtības, un to sauc buggy3 un tā īsteno swapping funkciju. Šeit mums ir galvenā funkcija, kas ir x un y patvaļīgi inicializēts ar 1 un 2, attiecīgi. Mēs varētu izmantot GetInt, bet mums vienkārši ir nepieciešams vienkāršs izmantot, tāpēc iekodēts kā 1 un 2. Līnijās 21 un 22, mēs acīmredzot izdrukāt x un y, 1 vienu līniju. Tad 23 līnijas, es varu pieprasīt es esmu pārnešana šīs vērtības, dot, dot, dot. Es acīmredzot zvanu funkcija līnija 24 sauktais mijmaiņas ka aizņem 2 argumentus. Tas ir pilnīgi legit, lai funkcijas, veikt 2 argumentus. Mēs esam redzējuši printf darīt jau. Tātad mijmaiņas acīmredzot ņem X un Y, un jo tā nosaukums liecina, Es ceru, ka tas notiek uz mijmaiņas šos 2 vērtības. Tātad, tad es varu pieprasīt uz līnijas 25 "Aizstāja!" un es pārdrukāt x un y pieņemot, ka tie esam patiešām ir mijmaina. Bet, ja es tiešām palaist šo programmu - ļaujiet man atvērt termināla logu, ļaujiet man buggy3 - kā liecina nosaukums, tas nav gatavojas pārtraukt labi jo, kad es hit Enter, ievērosiet, ka x ir 1, y 2, un vēl pēc programmas beigām, tie joprojām ir, faktiski, tas pats. Tātad, pamatojoties uz demonstrāciju tikai tagad ar Ken, kas patiesībā notiek? Pieņemsim pikējošais šajā mijmaiņas funkciju. Tas ir super īss. Tas ir tikai dažas rindiņas kodu ilgu. Bet kas ir būtiska problēma, pamatojoties uz vienkāršu stāsts šeit ar Ken? Kāpēc mijmaiņas bojāta? [Students] Jūs glabāšanai uz kopiju, ne mainīga. Tieši tā. Mēs glabāšanai uz kopiju, nevis uz mainīgo pati. Citiem vārdiem sakot, mijmaiņas acīmredzot aizņem 2 argumentus, Int, un tas ir patvaļīgi sauc un b, un šeit es esmu pagājis X un Y, kas ir attiecīgi 1 un 2, bet es neesmu burtiski iet uz x, es neesmu burtiski iet y, Es esmu pieņemot no x kopiju un y kopija. Tas ir gandrīz tā, it kā tu nokopēt un ielīmēt swap vērtības, kas jūs vēlaties, lai tiešām manipulēt. Tātad, ja tas ir gadījumā, kad es programma starta izpildītāja līnija 35, tad 36, kad man ar 37 līniju, šajā brīdī stāsts, kāda ir vērtība? Šajā brīdī stāsts, 37 līnija, kāda ir vērtība šajā brīdī? >> [Students] 1. [Malan] Tas būtu vienkārši 1, pa labi, jo x tika pieņemts kā pirmo argumentu, un šī funkcija tikai patvaļīgi zvana pirmais arguments ir. Tāpat ir y otro argumentu, un tas ir tikai patvaļīgi zvanot uz otro argumentu b. Šis dalījums ir faktiski diezgan vienkārši izskaidrot. Padomā par to. Neviens no mums ir tikās persona, kas rakstīja printf, tā protams, viņš vai viņa ir ne jausmas, ko mūsu mainīgajiem 30 gadiem gatavojas saukt. Tāpēc ir jābūt atšķirībai starp to, ko jūs saucat mainīgie funkciju jūs rakstāt un ko tu sauc mainīgie funkciju jūs zvanāt vai izmantojot. Tātad citiem vārdiem sakot, es esmu uzrakstījis manu mainīgos kā x un y, bet, ja kāds cits bija rakstīts mijmaiņas funkciju, viņš vai viņa noteikti nebūtu zināt kāds ir mans mainīgie gatavojas saukt, lai saprastu, ka tas ir iemesls, kāpēc jums ir šī divdabība nosaukumiem. Tehniski, es varētu darīt sagadīšanās, bet tie joprojām būtu pieņemts kā kopijas. Tas būtu tikai tīra sakritība estētiski ja šī persona, kas rakstīja swap bija izmantojusi tos pašus vārdus. Tātad šajā brīdī stāsts, 37 līnija, ir 1, b ir 2, un tagad es doties uz mijmaiņas tiem. Pirmkārt, ļaujiet man patiesībā darīt daudz vienkāršāk. Es nezinu, ko šie 3 rindiņas kodu darām. Ļaujiet man tikai darīt: b =; = b; darīts. Kāpēc tas ir salauzta, loģiski? Tas ir sava veida intuitīvo lieta, vai ne? Tātad kļūst b un b kļūst, bet problēma ir tā, ka tiklīdz 37 līnijas izpilda, kāda ir vērtība un B? Pats, 1, jo jūs esat clobbered, tā sakot, jūs esat mainījuši b vienāds. Lai vienreiz līnija 37 ir izpildīts, tas ir lieliski, jums tagad ir 2 kopijas numuru 1 iekšpuses šo funkciju, lai tad, kad jūs sakāt 38 rindā = b, Jūs esat veida ieskrūvē, jo jūs esat tikai piešķirot 1 līdz 1. Jūs esat veida zaudējis vērtību jums nerūp. Tātad sākotnējā versijā šis, pamanīt to, ko es darīju. Es tā vietā bija trešajā rindā kodu, kas izskatījās. Es paziņoju pagaidu mainīgo. TPP ir ļoti kopīgs nosaukums pagaidu mainīgo, un tas ir int jo tā ir saskaņot to, ko es gribu, lai kopiju. Es glabāt kopiju no iekšpuses TPP, lai vienreiz līnija 37 ir izpildīts, gada vērtība ir - ātri veselība pārbaudītu - 1, no b vērtība ir 2, un par tmp vērtība ir arī 1. Tāpēc tagad es izpildīt līnija 38. Kad līnija 38 izpilda, uzņemas ar b vērtību. Un b bija 2, tāpēc tagad ir 2. Tātad šajā brīdī stāsts, ir 2, b ir 2, un TPP ir 1, tāpēc tagad loģiski, mēs varam tikai plunkšķis TPP vērtība uz B un mēs esam darīts. Tātad mēs esam atrisināt šo problēmu. Diemžēl, kad es palaist šo programmu šādā veidā, tas nav reāli mijmaiņas nekādas vērtības. Bet, lai būtu skaidrs, kāpēc? Es noteikti loģisku problēmu no tikai pirms brīža, bet atkal, ja man palaist šo programmu, x un y paliek nemainīgs gada beigās programmas izpildi. [Dzirdams students komentārs] >> Mēs neesam atgriezušies neko, tā ka ir taisnība. Bet izrādās, tur ir par problēmu, mazliet šeit, jo līdz šim, Vienīgais, ko mēs esam spējuši atgriezties, ir viena lieta, un tas ir ierobežojums C. Jūs varat atgriezties tikai patiešām vienu vērtību, un tādā gadījumā es esmu veida iestrēdzis šeit jo es varētu atgriezties jaunu vērtību x vai es varētu atgriezties jaunu vērtību y, bet es gribu gan atpakaļ. Tāpēc atgriežoties nav vienkāršs risinājums šeit. Bet problēma būtībā ir, kāpēc? Ko mēs patiesībā samainīti? [Students] un b. >> Un b. Bet a un b ir kopijas X un Y, kas nozīmē, mēs vienkārši darīja visu darbu, mēs tikko pavadīja 3 minūtes runā par mijmaiņas funkciju un visu šo mainīgo 3, un tas ir lieliski, pilnīgi pareizi atsevišķi, bet A un B darbības joma tikai šajās līnijās šeit. Tik vienkārši kā par cilpu, ja jūs atzīt skaitlim es iekšā cilpa, Tāpat, ja jūs deklarējot un b iekšpusē funkciju, kas jūs esat rakstiski, viņi tikai derīgs iekšā šī funkcija, kas nozīmē, tiklīdz mijmaiņas tiek darīts izpildes un mēs aiziet no līdz 25 līnija 24 līnijas, x un y nav mainījies vispār. Jūs vienkārši izšķērdēta visai daudz laika pārnešana kopijas mainīgajiem. Tātad izrādās, ka risinājums ir tas tiešām nav skaidrs. Tas nav gluži pietiekami, lai atgrieztos vērtības, jo mēs varam atgriezties tikai 1 vērtība, un es tiešām gribu, lai mijmaiņas gan x un y, tajā pašā laikā, tāpēc mēs esam nāksies atgriezties pie šī. Bet tagad, saprotam, ka jautājums būtiski atvasināts no tā, ka a un b ir kopijas un tie ir savā darbības jomā. Mēģināsim atrisināt kautkādā veidā. Ļaujiet man tiešām ritināt atpakaļ šeit un atvērt, teiksim, ceturto variantu tas, buggy4. Ko par šo? Tas ir līdzīgi, bet vienkāršāk problēma apskatīt, pirms mēs pieņemt stab ir atrisināt to. Šī programma sauc pieauguma, un tas acīmredzot inicializē ar x skaitlis līdz 1 18 rindā. Es tam jāpieprasa x ir 1, es pēc tam jāpieprasa "palielināšanai ..." Tad es aicinu pieaugumu, bet tad līnijās 22 un 23, man apgalvo, tas ir bijis pieaudzis, Es apgalvo x ir tagad kāds tas ir - 2, iespējams - bet šī programma ir bagijs. Kāda ir problēma? Yeah. >> [Dzirdams studentu reaģēšanas] >> Tieši tā. Tātad x ir atzīta, protams, 18 līnija. Tas ir iekšā Main s cirtaini lencēm. Tik vienkārša atbilde ir, ka, kamēr x pastāv šeit, tā nepastāv 32 līnijas, tāpēc šī programma tiešām nav pat sastādīt. Kompilators kad mēģinu apkopojot šo kodu gatavojas kliegt uz mani par kādu nedeklarētu identifikatoru vai kaut kas šajā sakarā. Faktiski, pamēģināsim. Tas ir padarīt buggy4. Tur tas ir. Izmantot nedeklarētu identifikators "X" 32 rindā. Un tiešām, būsim precīzāk šeit šodien, lai tas ir lietderīgi biroju stundās un mājās. Ievērojiet, ka tas ir mazliet cryptically rakstīts. Bet fakts, ka šķindēt ir kliedza uz mums, sakot buggy4.c: 32:5, ir faktiski noderīga. Tas nozīmē, ka kļūda ir par pie raksturs nostāju 5 32 līniju. Tātad 1, 2, 3, 4, 5. Tas ir, faktiski, kur ir problēma. Un arī, arī paturēt prātā darba laika un mājās, es esmu laimīgs šeit. Man ir viena kļūda. Tas būs salīdzinoši viegli noteikt. Bet, ja jūs saņemsiet visu ekrānu pilns milzīgs kļūdu ziņojumiem, vēlreiz saprast, ka viszemākais viens var tikai simptomātiska no augšējais vienu. Tāpēc vienmēr tramdīt nosaka jūsu bugs no augšas uz leju jo tur var tikai ziedlapķēde efekts kas liek domāt, jums ir veids, vairāk problēmu, nekā jūs faktiski darīt. Tātad, kā mēs varētu noteikt šo ja mans mērķis ir, lai pieauguma x? >> [Students] Marka x pasaules. Labi, lai mēs varētu veikt x globāla. Paņemsim saīsni, kas man brīdināja par agrāk, taču heck, mēs vienkārši ir nepieciešams ātrs risinājums, tāpēc pieņemsim tikai teikt int x šeit. Tas padara x globāla. Tāpēc tagad galvenais ir pieeja tai, un pieaugums ir pieejama, un tāpēc ļaujiet man iet uz priekšu un apkopo šo tagad. Padarīt buggy4, Enter. Šķiet, lai apkopotu tagad. Pieņemsim palaist buggy4. Un tas, šķiet, faktiski strādā. Šī ir viena no šīm lietām, kas ir darīt, kā es saku, nevis kā man, kā es tikko darīts šeit, jo kopumā Mūsu programmas ir gatavojas iegūt daudz vairāk interesantu un daudz ilgāk, nekā tas, un, ja jūsu risinājums dzīves problēmām ir tikai nodot visus mainīgos augšpusē jūsu failu, ļoti ātri do programmas nokļūt horrifically grūti pārvaldīt. Tā kļūst grūtāk izdomāt jaunus mainīgo nosaukumi, tā kļūst grūtāk saprast, ko mainīgais ko dara, un tāpēc kopumā, tas nav labs risinājums. Tāpēc pieņemsim darīt labāk. Mēs nevēlamies, lai izmantotu globālu mainīgo šeit. Es vēlos, lai pieauguma x, tāpēc es varētu, protams - beigās, dienā, tas ir sava veida dumjš stāsts, jo mēs vienkārši darīt - bet, ja es nezināju par šo operatoru vai man nebija atļauts mainīt galvenajā pati, Kā vēl es varētu īstenot Ken nekā šeit šoreiz nevis kubu bet pieauguma? Kā es varu mainīt šo lietu šeit? Yeah. [Students] jo x Pass un pēc tam atgriezties [dzirdams] >> Labi, labi. Tātad, kāpēc nav man iet X un tad nevis atdot, kāpēc ne es vienkārši atgriezties x + 1. Pāris vairāk lietas ir jāmaina šeit. Es esmu uz pareizā ceļa. Kas vēl man ir nepieciešams nomainīt? Kāds cits. Yeah. [Dzirdams studentu reaģēšanas] Man vajag, lai mainītu atgriešanās veidu pieauguma, jo tas nav anulēta. Anulēts līdzekļi nekas netiek atgriezta, bet skaidri tagad tas ir, tāpēc to nepieciešams mainīt uz - >> [students] int. int jāsaskan ar ko es esmu faktiski atgriežas. Tagad kaut kas cits vēl ir bagijs šeit. Yeah. [Dzirdams studentu reaģēšanas] >> [Malan] Tāpēc man vajag, lai pieauguma x? [Dzirdams studentu reaģēšanas] >> [Malan] Ah, tāpēc man ir nepieciešams, lai iet x. Tāpēc man ir nepieciešams to darīt šeit. >> [Dzirdams students komentārs] [Malan] Tātad prototips, man ir, lai mainītu šo šeit. Tāpēc šī ir kļūt int, tas ir kļuvis - hmm, man tiešām ir bug leju šeit. Pieņemsim noteikt šo vienu vispirms. Kas būtu tas patiesībā ir? Tas ir got būt int kaut. Tas varētu būt x, bet atklāti sakot, ja jūs sākat aicinot visas jūsu mainīgajiem x, tas notiek, lai saņemtu mazāk un mazāk skaidrs, kas ir kas. Tāpēc pieņemsim tikai patvaļīgi izvēlēties citu nosaukumu konvencija par maniem palīgs funkciju, funkcijas es esmu rakstiski. Mēs to saucam, vai mēs varētu to saucam - Sauksim to skaits būs vēl skaidrāks. Tātad, tad man ir atgriezties kāds numurs ir plus 1, un tagad man ir jāmaina 1 cita lieta šeit un viena cita lieta šeit. Kas man ir jāmaina uz 21 līniju pirmais? >> [Dzirdams studentu reaģēšanas] [Malan] man ir piešķirt to x. Es nevaru vienkārši zvanīt pieaugumu (x). Man vajag atcerēties atbildi, mainot vērtību x kreisajā pusē. Un pat ja x ir tagad pa kreisi un pa labi, tas ir pilnīgi naudas sodu jo labajā pusē izpaužas izpildīts pirmais tam izpaužas plopped uz kreisā lieta - x šajā gadījumā. Un tad visbeidzot, tas ir viegli noteikt tagad. Tas būtu tikai saskaņot to, ko ir zemāk, int skaits. Tātad viss ķekars izmaiņas par patiešām stulba funkcijas bet pārstāvis lietām, ka mēs arvien vairāk vēlas darīt. Lai padarītu buggy4. Es esmu ieskrūvē augšu kaut kur. Ak, mans Dievs. Piecas kļūdas ar 6-line programma. Tātad, kas ir nepareizi, 18 līnija, raksturs 5? Tāpēc man ir atzīt šo, int. Pieņemsim redzēt. Ir viss ķekars citu kļūdām. Ak, mans Dievs - 19, 18, 21 - bet atkal, pieņemsim tikai notīrītu ekrānu, Control L šeit, un atkārto šķindēt. Tātad 5 problēmas ir faktiski tikai, ka 1. Tāpēc tagad pieņemsim darboties buggy4, Enter. Whew, x ir palielināts pareizi. Labi. Kādi jautājumi par to, kā pieauguma skaitļus? Yeah. [Dzirdams students jautājums] >> Labs jautājums. Kā tas ir, ka es varu tikai mainīt x uz numuru un programma uzreiz zinās? Atkal, domā par to, kā šo abstrakciju. Tātad, ja es esmu galvenais un Ken ir pieaugums, atklāti sakot, man vienalga, ko Kens aicina savu iPad. Man vienalga, ko viņš prasa kaut kas ir jādara ar savu īstenot šo funkcionalitāti. Tas ir īstenošana detaļa, kas man, galvenais, nav rūp. Un tā vienkārši mainot to konsekventi iekšpusē funkciju - skaits šeit un numurs šeit - ir viss tas notiek tik ilgi, kā es recompile. Tas ir veida, piemēram, ja jūs domājat par daudziem no mums, tiem no jums, ar vadītāja apliecību kuri brauc vai ja esat pat brauc ar automašīnu, lielākā daļa no mums nav ne jausmas, kā auto darbojas zem motora pārsega. Un burtiski, ja jūs atvērtu kapuci, lielākā daļa no mums - mani ieskaitot - nav gatavojas, lai tiešām zināt, ko mēs meklējam, ir, veida, piemēram, jūs varētu justies ar stuff kā šīs tiesības tagad. Bet mums nav īsti ir vienalga, kā auto darbojas, Mums nav vienalga, ko visi stieņi un virzuļu un kabeļu iekšpusē no automašīnas patiesībā dara. Tātad kaut kas līdzīgs, ko jūs saucat virzulis nav svarīgi šeit, šajā gadījumā. Pati ideja. Yeah. >> [Dzirdams students jautājums] Ja ir vairāk izmantojumu mainīgo Xa brīdi atpakaļ, Jūs, programmētājs, būtu jāmaina tos visur. Vai jūs varētu burtiski darīt File, Menu, un pēc tam atrast, Aizstāt - kaut kas līdzīgs, ka - bet jums nāksies izdarīt šīs pārmaiņas sevi. Jums ir jābūt konsekventiem. >> [Students] Ja ir vairāki mainīgie [dzirdams] Īpaši secībā, piemēram, šeit, ja tas bija int citu numuru? >> [Students] Pareizi. [Malan] Jā. Lai jautājumiem, kad jūs zvanāt funkciju. Tātad, ja es bija aicinot pieaugumu šeit ar kaut komats kaut ko, tur tieši kartēšanu. Pirmais mainīgais, neatkarīgi no tā sauc, ir izgatavots kopiju pirmo argumentu nekā šeit. Žēl. Tas nedrīkst būt iekavas. Otrs arguments līniju līdz ar otru. Tātad, lai, jā, jautājumi. Labi. Žēl. Man bija garš ceļš, lai saņemtu tur. Citi jautājumi? Labi. Tātad, pieņemsim redzēt, ja mēs nevaram uzzīmēt zīmējumu par to, kas patiesībā notiek šeit zem motora pārsega, lai runāt. Tas ir taisnstūris, kas varētu pārstāvēt datora atmiņā. Pat ja jums nav ne jausmas, cik atmiņa strādā vai cik RAM darbi, vismaz pieņemu, ka jums ir ķekarus to šajās dienās. Jūs esat ieguvuši megabaiti no tā, jūs esat ieguvuši gigabaiti tā, un mēs zinām no 0 nedēļā ka baits ir tieši tas, ko? >> [Students] 8 biti. 8 biti, labi? Tā 8 nulles un 1. Tātad, ja jūsu datoram ir GIG RAM, 2 gigs RAM šajās dienās, jums ir miljards vai 2 miljards baitu atmiņas vai aptuveni 8 miljardiem eiro jeb 16000000000 bitiem iekšpusē datora. Atšķirībā no mazā Wooly Willy Piemēram, tas nav magnētiskās daļiņas parasti vairs. Arvien vairāk - arī klēpjdatorus vismaz - tas ir cietas diskus, SSDs, ka tikai nav kustīgu detaļu. Tas viss elektroniski. Tas viss elektroenerģijas bāzes. Tāpēc domāju, ka šī taisnstūra kā tikai pārstāv 1 vai 2 gigabaitu atmiņu, kas jums ir. Tāpēc tas rieciens atmiņas. Gada datorzinātņu pasaulē ir sava veida atdalīta gabalos atmiņas darīt dažādas lietas. Piemēram, ja tas ir jūsu datora atmiņa, kā to ierosināja taisnstūra tur, izrādās, ka pēc vienošanās, augšpusē jūsu RAM, tā teikt, parasti, ko sauc teksta segments. Tie ir 0s un 1s ka jums ir apkopojusi. Tātad, kad mēs esam paskatījās zem motora pārsega pie kāda a.out ir, visi šie 0s un 1s, palaižot programmu, tiem 0s un 1s tiek ielādēta no cietā diska kaut ko sauc atmiņa, un RAM viņi likts augšpusē. Tikmēr, jums ir citas lietas: inicializēt datus, uninitialize datus. Šie 2 swaths atmiņas atsaucas uz globālo mainīgo, kas jums nav bieži izmanto bet dažreiz, ja jūs darāt, viņi galu galā tur augšā, kā arī. Tad tur ir daži citi sīkumi: vides mainīgos, ko mēs ne tērēt daudz laika, bet tad 2 svarīgas lietas, kas nāks atpakaļ visā semestrī, kaudze un kaudze. Tātad lielākā daļa no jūsu datora atmiņa ir rezervēta, kad darbojas programma par kaut ko sauc kaudzīti un kaut sauc kaudze. Mēs nebrauksim runāt par kaudzes šodien, bet mēs runājam par kaudze. Kaudze ir domāts, lai uzburt vizuālo par ēdamzālē Paplātes jo Mather namā vai kur tev gadās būt, ja ēdamzāle darbinieki tīrīt tos katru dienu, viņi kaudze tos no grīdas uz augšu, un līdzīgi, jo atmiņas, tur ir šis liekot kaut uz kaudze ideju, liekot kaut uz steku, liekot kaut uz kaudze. Un ko mēs saprotam ar šo? Pieņemsim tuvinātu uz tikai apakšējā pusē, šajā attēlā, datora RAM, ierosināt sekojošo. Izrādās, ka tad, kad jūs darbināt programmu, piemēram a.out vai Hello - neatkarīgi programma ir, ka jūs esat rakstiski - atkal tie 0s un 1s tiek ielādēta no cietā diska, kas ir ilgtermiņa uzglabāšanu, paliek tur pat ja jūs kontaktdakšu, iepildīta RAM. RAM ir ātrāks nekā cieto disku - tas ir mazāks nekā cietajiem diskiem - bet tas ir, ja programmas dzīvot, bet jūs tos palaižot. Tātad jūs dubultklikšķi programmu uz Mac vai PC, tas ielādēta no cietā diska uz RAM. Tiklīdz tas ir iepildīta RAM, 0s un 1s aiziet pie ceļam augšā, ts teksta segmentā, bet tad tiklīdz jūsu programma faktiski sāk darboties, galvenā funkcija sauc, un galvenais, kā mēs esam redzējuši, bieži ir vietējo mainīgie, un tas ir Ints un stīgas un simboli un kā. Tātad, ja jūsu programma, kas jums ir rakstisks vai programma, kas jums ir dubultā noklikšķinājuši izmanto daži mainīgie iekšpusē main, viņi galu galā apakšā jūsu kaudze atmiņas, lai runāt. Konkrētāk, ko tas patiesībā nozīmē? Tas tikai nozīmē, ka, ja mēs gatavojamies skaits bytes RAM savā datorā, pamanīt, ka tas varētu būt baitu skaits 0, tas varētu būt baitu skaits 1, 2, 3, 4, 5, 6, visu ceļu līdz pat 2 miljardiem būtu visu ceļu tur augšā. Tātad, citiem vārdiem sakot, ja mēs runājam par RAM vai atmiņas ziņā baitos, tas tikai nozīmē, ka kāds ir nolēmis, ko skaitu katram no šiem atmiņas gabalos. Tātad, ja jums ir nepieciešams 32 bitus int vai jums ir nepieciešams 8 bitus char, kur tie nonāk atmiņā? Konceptuāli, viņi vienkārši galu galā pie šī lieta apakšā sauc kaudze. Bet kas ir interesanti tagad ir, kad galvenā aicina funkcija - pieņemsim funkciju sauc foo, tikai patvaļīgi nosaukums - kas notiek, ir galvenais ir apakšā šo kaudzi atmiņas; foo tagad tiek likts uz augšu no galvenā atmiņā. Tātad kādi vietējie mainīgie ka foo ir galu galā veida konceptuāli iepriekš tiem, kas galvenais. Ja foo aicina citu funkciju sauc bārs, šie mainīgie galu galā šeit. Ja josla aicina kaut ko citu, šeit, šeit, šeit. Tātad, kas ir interesanti par darbības programmu ir, ka jūs saucat funkcijas un kā tās funkcijas Zvanu funkcijas un kā tās funkcijas zvanu funkciju, Jūs veidot šo kaudzīti funkciju atmiņā. Un tikai vienu reizi funkcija atgriež jūs sākat saņemt šo atmiņu atpakaļ. Tātad viens no vienkāršākajiem veidiem, kā pietrūkt atmiņas ar datorprogrammu ir rakstīt funkcijas, kas nekad vairs neatgriezīsies. Tātad, piemēram, pieņemsim demonstrēt tik daudz ar apzināti buggy programmu. Ļaujiet man iet uz priekšu un darīt # ietvert , int galvenais (spēkā neesošs), un es esmu gatavojas darīt, kamēr (2> 1), kas, iespējams, nebūs nekad mainās uz mums, un ļaujiet man iet uz priekšu tagad un darīt printf. Faktiski, tas būs mazāk vizuāli interesants. Darīsim to. Par int i = 0, i> 0 - pieņemsim šo kļūdu - i + +. Un pieņemsim nav printf šeit. Pieņemsim praktizēt to, ko man bija sludināja. Pieņemsim ir metode šeit, void koris, un mēs teikt int i, un tad es esmu gatavojas teikt printf - nē, pieņemsim padara šo vairāk interesants. Pieņemsim faktiski nav drukāt neko. Darīsim šo: koris (i). Labi. Tātad tas ir bagijs, jo kāpēc? Es esmu padarot šo augšu, kā es iet, jo programma nav reāli darīt kaut interesi. Bet tas nav mērķis. Mērķis ir uzrakstīt programmu, kuras galvenā funkcija ko dara, acīmredzot? Zvanu pati. Un patiesībā, mums nav vajadzīga cilpa. Pieņemsim pat vienkāršos tas vienkārši tā, lai aizmirst par tiešām fundamentālo bug. Galvenie zvani koris dziedāt kādu koris, tad es tomēr kaut ko stulbu, un man bija koris zvanu koris jo es pieņemts kāds cits gatavojas to īstenot varbūt, un tagad tas nav gatavojas sastādīt vēl. Man vajag darīt? Man vajag prototips, atcerēties. Tāpēc man ir nepieciešams, lai būtu šeit void koris (int i); Tāpēc tagad, ja es iet uz leju šeit - patiesībā, pieņemsim izmantot lielāku logu. Iesim uz priekšu un veikt koris. Iesim uz priekšu un veikt koris. Izmantot nedeklarētu identifikators i. Ak, tas bija muļķīgi. Mums nav vajadzīga argumentu. Darīsim to. Es vēlētos, lai mēs būtu sākuši šo ceļu. Tas būtu bijis daudz vieglāk programma rakstīt. Tur. Tagad iesim uz manu termināļa logā, atkārto šķindēt, un šeit mēs iet. Tas bija ļoti ātri. Kas patiesībā vienkārši notika, lai gan? Nu, tagad es ņemšu pievienot drukas rindu, lai mēs varētu redzēt. Ļaujiet man teikt printf ("Es esmu šeit") - nav mainīgie. Mēs atstāt to tāpat. Ļaujiet man atkārto darīt. Ļaujiet man atkārto koris. Un ... come on. Saglabātu turpinās. Kā malā, kāpēc tā nav avarēja vēl? Segmentācija vaina notika super ātri pirms tam. [Dzirdams studentu reaģēšanas] >> Tieši tā. Tāpēc ir nepieciešams laiks, lai drukātu, labi? Tas tikai ņem vairāk darbu par datora daļas. Un tur tas ir: segmentācija vaina. Tātad paziņojums cik ātri programmas darbojas. Ja jūs neesat drukāšanas neko, super ātri. Bet mēs joprojām got šo segmentācijas vaina, jo to, kas notiek? Ja jūs domājat par to, kā jūsu datora atmiņā ir izklāstīts, Tas notiek, ir galvenais, bet šeit pieņemsim tikai nosaukt šo koris, un sauksim šo koris. Un tagad, ja man darīt manu estētiku labi, tas ir tikai gatavojas teikt koris, koris, koris, koris, koris, koris, koris, ad nauseum, un galu galā, kas notiks? Ja liels attēls, burtiski, tas ir, kas vienkārši notiek konceptuāli? Kaudzīti pārtēriņš kaudzi. Vai, vēl ļaunāk, jūs vienkārši pārsniegts viss, ieskaitot teksta segmentā, kas ir 0s un 1s kas pārstāv savu programmu. Īsāk sakot, tas ir vienkārši super, super slikti. Jūsu programmā ir spiraled ārpus kontroles. Jūs izmantojat kā vairāk atmiņas nekā paredzēts visi, jo stulba kļūda šajā gadījumā, vai šajā gadījumā ļoti apzināti darīts funkcija zvana pati. Tagad tas ir ne visi slikti. Funkcijas, kas sevi dēvēja tiešām ir ļoti liels spēks, ja jūs to izmantot pareizi. Man ir neizmanto to pareizi šeit. Tātad tas nav viss slikti, bet tas, ka es nekad tiešām pārtraukt zvana sevi ir būtisks trūkums šeit par šo programmu. Tātad, ja mēs ejam ar visu šo? Kas īsti notiek? Kad es zvanu pieauguma funkcijas, piemēram, mēs darām arī šiem piemēriem, Man ir vērtība, piemēram, 1 ka es iet iekšā Es iet uz kopiju skaitu 1, lai šādi notiek. Iesim uz pieauguma, piemēram, šis puisis tiesības pār šeit. Lūk, kas patiesībā notiek. Kad es aicinu pieaugumu un es iet uz X, piktogrammām, kas notiek šeit tas ir. Ja man ir vērtība 1 glabājas šeit, un es tiešām aicinu pieaugumu, ko tagad sauc koris - iPad ir throwing mani šeit. Sauksim šo pieaugumu, un mēs nezinām, ko tas nākamais funkcija būs. Tātad, kas patiesībā notiek, ir šeit kaut kur galvenais man ir rieciens atmiņas kas ir glabāšanas numuru 1. Kad es aicinu pieaugumu, es esmu, izmantojot citu rieciens atmiņas, bet tagad man ir kopija 1. Kad es pieauguma šo vērtību, tas kļūst 2, bet tad kas notiek ātrāk pieauguma atdevi? Šī atmiņa vienkārši izpaužas nodota atpakaļ uz operētājsistēmu, kas nozīmē, ka visi jūs esat darījuši, ir nekas noderīgs. 1, kas sākotnēji tika ietverts galvenais ir joprojām faktiski tur. Tātad, kur mēs nokļūsim ar šo? Izrādās, ka atmiņa jums ir šī back-to-back baitu secība kas jums var likt stuff, un izrādās, ka mēs jau esam redzējuši kaut kas ietver liekot lietas atpakaļ atpakaļ atpakaļ atpakaļ. Kas ir virkne balstīta uz nedēļu 1 un tagad nedēļa 2? Tas ir tikai kolekcija rakstzīmes. Tātad izrādās, tāpat kā jūs varat ievietot numurus atmiņā, Tāpat jūs varat nodot rakstzīmes atmiņā. Un, kad sāksim rakstzīmes atmiņā atpakaļ atpakaļ atpakaļ uz muguras, izrādās, ka, izmantojot vienkāršāko lietām, piemēram, par cilpu vai kamēr cilpa, mēs varam atkārtot no kreisās uz labo pāri rakstzīmes virknē un sākt masāžas tos dažādos burtiem pavisam - varētu kļūt b, b, varētu kļūt c - tā, ka galu galā, mēs varam pieņemt kādu teikumu angļu valodā, kas faktiski ir jēga un pārvērst katru no šiem burtiem vienā laikā ejot caur mūsu datora atmiņā kreisās uz labo, lai faktiski šifrēt. Tāpēc pieņemsim mūsu piecu minūšu pārtraukumu šeit, un kad mēs atkal, mēs sāksim šo procesu kodēšanas informācija. Labi. Pirms mēs pikējošais kādu crypto un šīs lietas sauc bloki, ļaujiet man pauze, lai kādi jautājumi, jo es jūtu, ka man tiešām veida neskaidri daži no šiem tematiem. Tāpēc pieņemsim noteikt tagad, ja mēs varam. Mēs tikko runājām par atgriešanās vērtībām, mēs runājām par argumentiem, un mēs runājām par šo jēdzienu, ko mēs būsim atpakaļ uz nedēļās nākt, apskatei atmiņas par visu ķekars no šiem stacked paplātes, tā teikt, no apakšas uz augšu, tādā veidā, ka katrs paplātes, kas izpaužas likts uz skursteņa atspoguļo funkcija, kas pašlaik tiek sauc. Kādi jautājumi? Ļaujiet man uzdot jautājumu šeit. Ļaujiet man vienkāršot šo atpakaļ uz kāda tā bija pirms dažiem mūsu agrāk Q & A. Fakts, ka pieaugums ir atvērta iekavas, int skaits, slēgts iekavu - Kāda int skaits pārstāv? [Students] arguments. >> Arguments. Labi. Bet kas ir arguments? [Dzirdams studentu reaģēšanas] >> Kas tas ir? >> [Students] Kaut kas jums iet iekšā Labi, lai kaut kas jums iet iekšā Un vispār, tas ir tikai ieejas. Ja tu būtu rakstot funkciju un kuru funkcijas ir mērķi dzīvē ir darīt kaut nedaudz atšķiras katru reizi, kad lietojat to, tad vienīgais veids, lai to panāktu patiešām šķiet, būtu nodrošināt to ar ieejas lai tā varētu darīt kaut ko citu, ar šo ieejas katru reizi. Tātad jums ir nepieciešams norādīt divas lietas, kad funkcija tiek ievadi. Jums ir nepieciešams norādīt vārdu, kas jūs vēlaties, lai dotu šo ievadi tikai jūsu pašu ērtībai, lai jūs varētu atsaukties uz to ar funkciju, ka jūs pats rakstāt, kā es šeit 32 rindā. Bet jums arī nepieciešams norādīt tā tipu, jo C ir programmēšanas valoda kas tikai prasa, ka, ja jūs vēlaties mainīgo, jums ir pateikt datoram, ko datu tips tas ir, liela daļa tā, ka tā zina, cik bitus piešķirt uz šo mainīgo jo tas varētu būt 6 - piedodiet, tas nebūs 6. Tas var būt 16, tas var būt 8, tas var būt 32, pat 64, bet dators jāzina. Tagad, par kreisajā pusē int atspoguļo to, tieši pretēji? [Dzirdams studentu reaģēšanas] >> Kas tas ir? >> [Students] veids funkcijas. Par funkciju tipa un, konkrētāk, veidu no saražotā. Tiesības. Tātad tā lieta iekavās pārstāv tās ieejas, ja tādi ir, lieta kreisi pārstāv savu produkciju. Un šajā gadījumā, pieauguma acīmredzot atgriež int, un tā int ir atgriešanās tips šīs funkcijas. Ko tas nozīmē ar atgriešanu? Burtiski, jūs izmantojat atslēgvārdu atdevi, un tad, ja tas, ko jūs atgriežaties pa labi no atslēgvārds ir skaitlis, tad tas ir patiešām saskan ar to, ko mēs esam solīja. Jūs nevar darīt kaut kas līdzīgs šim - sveiki, pasaules - jo tas ir virkne. Acīmredzot, tas nav vesels skaitlis. Tātad īsumā, slogs ir tiešām par mums, programmētājs, par īpašu par to, ko mēs esam atgriežas un tad tiešām iet par to atpakaļ. Konteksts šeit tagad ir tas, ka datora atmiņa ir gigabaiti, 2 gigabaitus - kāds - varbūt tas ir vairāk, varbūt tas ir mazāk, bet dators uzskata to par tādu, kam dažādas sadaļas. Kaut kas tur lejā, kaut kas cits iet uz augšu tur, tēmām iet pa vidu, un šodien mēs vienkārši sākt stāstīt stāstu, bet mēs būsim atpakaļ uz šo laika gaitā. Tagad, vienīgais gabals atmiņas mums patiešām rūp ir teksta segments jo tas tikai atspoguļo 0s un 1s ka šķindēt ir izvadīt. Tātad, ja jūs palaist komandu pie tastatūras kā a.out vai jūs dubultklikšķi uz ikonas uz Mac OS vai Windows, Jūsu programma tiek ielādēta no cietā diska uz RAM un tas ir plopped augšpusē datora RAM, lai runāt. Tikmēr, kā jūsu programma sākas un galvenais izpaužas sauc programmā jūs rakstījāt vai programmu Microsoft vai Apple rakstīja, tās vietējās mainīgo galu galā tur lejā apakšā datora atmiņā. Bet, ja galvenais zvani cita funkcija, kas pati ir mainīgie vai argumentus, viņi galu galā virs tā. Un, ja šī funkcija prasa kaut ko, viņi galu galā virs tā, virs tā, virs tā. Un tikai tad, kad funkcija tiek darīts izpildes pozīciju par paplātes kaudze, tā teikt, sāk iegūt zemākas un zemākas. Un tas ir tas, ko tad, īsumā, izskaidro, kāpēc, kad jūs zvanu kubu vai jūs zvanīt pieaugumu, jūs iet uz kopiju vērtības. Un ko tas nozīmē piktogrammām ir, ka jūs burtiski rakstot numuru 1 citā daļā atmiņu, mainot ka 1 līdz 2, ja pieauguma vai par 8 gadījumā kuba un tad izmet atmiņu prom tiklīdz pieauguma vai kuba funkcija atgriež. Jautājums. [Students] Ja ir pasaules mainīgie uzglabāti? Globālie mainīgie tiek glabāti to, kas pašlaik sauc inicializēts dati vai neinicializēts dati, Atšķirība ir, ja jums ir globālā mainīgā un jums piešķirt to nekavējoties vērtību ar vienlīdzības zīmi, tas beidzas līdz augšā tur, un, ja jūs vienkārši pateikt int x; ar nekādas vērtības, tas beidzas līdz nedaudz mazāks RAM vienkārši pēc vienošanās. Citi jautājumi? Labi. Tātad šo attēlu nāks atpakaļ, jo mēs vairāk spēcīgu ar ko mēs varam darīt ar datoru, bet tagad, pieņemsim ir īss intro kriptogrāfija, īpaša veida kriptogrāfijas tas neatrisina visas pasaules problēmām bet atrisināt dažus no tiem. Šajā gadījumā šeit, mums ir kaut ko sauc slepeno atslēgas kriptogrāfiju. Slepeno atslēgas kriptogrāfijas, kā norāda nosaukums, kas savu drošību no noslēpumu. Piemēram, ja jums bija atpakaļ pakāpē skolā, un jūs gāja mazliet noslēpums mīlestības vēstuli uz zēns vai meitene tu drupināšanas par, ja jūs vēlaties, lai iet šo piezīmi pa auditoriju, jūs, iespējams, nebūtu uzrakstīt šādu piezīmi angļu vai kāds jūsu dzimtā valoda ir. Drīzāk, jūs varētu šifrēt to, vai jūs varētu vienkārši nosūtīt tos īsziņu šajās dienās. Bet jūs tiešām var iet viņiem piezīmi visā klasē. Un tas ir jādara droši tādā veidā, ka jūsu draugi un skolotājs nezinu, ko jūs esat rakstiski, jūs varētu nākt klajā ar diezgan vienkāršu algoritmu, Jauns gan jūs varētu būt, lai tikai motokross vārdiem. Tā vietā rakstot jūs varētu rakstīt b, vietā B jūs varētu rakstīt C, vietā C jūs varētu rakstīt D, un tā tālāk. Vai jūs varētu nākt klajā ar daudz sarežģītu tulkojumu vēstuļu uz dažādiem burtiem. Bet nozveju ir zēns vai meitene, kuram jūs sūtāt šo piezīmi nepieciešams zināt kaut ko, kas ir tas, protams? >> [Students] Ko jūs sūtāt. Kāds jūsu noslēpums ir, piemēram, kādi ir, ka kartēšana starp s un B darbības, un C ir un d's. Tas ir tikai pievienojot 1 līdz katra no burtiem, lai iet no A uz B, B līdz C? Tas ir daudz sarežģītāka, nekā? Tātad jūs un jūsu simpātiju ir nepieciešama šo slepeno informāciju, bet tur ir sava veida nozvejas-22 šeit. Ja šī ir pirmā reizi, kad jūs sūtāt šo mīlestības vēstuli caur klasi, kā tas, ka zēns vai meitene dodas uz zināt noslēpums pat ir? Tā slepeno atslēgas Šifrēšanas neatrisina visas pasaules problēmas, un tur tiešām attiecības šeit, ka mēs atgriezīsimies pie virzienā semestra beigām. Tāpat lielākā daļa no mums nevar zināt kādu, kas darbojas, piemēram, pie Amazon.com, un vēl daudzi no mums ir iespējams iegādāties sīkumi pie Amazon.com, un mēs esam mācīti domāt, ka šie e-komercijas darījumiem ir droši. URL, iespējams saka https, tur varbūt muļķīgi mazliet atslēdziņa ikonas kaut kur, tur ir dažas no kriptogrāfijas veida nodrošināt savu kredītkartes informāciju starp jums un Amazon.com. Un tomēr, ja kriptogrāfija ietver zinot kādu noslēpumu un tomēr es nezinu, kāds pie Amazon, un es esmu, protams, nav sakārtoti kādu slepenu ar kādu Amazon, cik ir mans dators vai mana pārlūkprogramma to izdarīt? Izrādās, ka ir citi veidi, kriptogrāfija pavisam kas atrisinātu šo problēmu. Bet šodien, mēs koncentrēties uz vienkāršs, kur var organizēt iepriekš zināt, kādu noslēpumu piemēram +1 vai kādu no s un B darbības kartēšana. Un par kriptogrāfiju process parasti ietver šo. Jums ir dažas teksta, kas attēlota šeit kreisi, jūs palaist to caur kādu algoritmu vai kārtības šifrējot to - varbūt tas ir tikai kļūst b, b kļūst c - un tad jūs galu galā ar ciphertext. Tikmēr, kad jūsu simpātiju saņem šo slepeno piezīmi, viņš vai viņa ir, tad atšifrēt ar vispārēji atpakaļgaitas ka algoritms lai saņemtu atpakaļ teksta. Ir fiziski iemiesojumi šo. Piemēram, tas ir mazliet noslēpums dekodera gredzenu, un tas ir gredzens, kas nozīmē, ka tur ir divas ciparnīcas šeit. Uz ārējās perifērijā šī lieta, tur ir burti no A līdz Z, kaut viņi nejaušā secībā, un no iekšpuses, tur tiešām daži skaitļi tāds, ka ar šo gredzenu jūs varat veida vērsties ārpuses, bet ne iekšā lai rindā skaitļus ar burtiem. No filmu sauc Ziemassvētku stāsts, jūs redzēsiet, ka maz Ralphie bija tik ieinteresēts, lai noskaidrotu, ko maz bārenis Annie slepeno ziņu bija viņam kas bija paziņoti, es domāju, kā skaitlisku ziņojumus par graudaugu kastē un jums bija uzkrāt visu maz kartes, kas nāca no labības kastē, jums bija uz pastu tos, jums bija, lai saņemtu atpakaļ slepeno dekodera gredzenu lai jūs varētu beidzot izdomāt kartēšana ir starp burtiem un cipariem vai burti un burti. Kā datorā, mēs varam iet par īstenošanu vai pārstāv lietas, kā šis? Mums ir nepieciešams veids, kā izteikt sevi mazliet elastīgāk nekā mūsu mainīgie līdz šim sniegtie pakalpojumi. Mēs esam bija Ints, mēs esam bija chars, mēs esam bija pludiņus un dubultspēlēs un daži citi, bet tie ir unikāli atmiņu, kas nav īsti ļauj izteikt lietas tāpat vārdus un teikumus un frāzes. Patiesi, mēs esam sauc tādas lietas stīgas, bet mēs apsolām, ka tas patiešām ir tikai vienkāršošanai CS50 bibliotēkā ka mēs esam plāno mizu atpakaļ. Un tāpēc sāksim to darīt šeit. Ļaujiet man iet uz priekšu un atvērt failu - visi šie faili ir pieejami, kā parasti, internetā - sauktās array.c lai atrisinātu problēmu nav saistīta ar stīgas bet krāsām attēlu šeit par to, kā mēs varētu izmantot kaut ko sauc masīvs. Masīvs ir datu tips. Tas ir veids, mainīgais par veidu, kas ir vairākas mazākas datu tipu iekšpusē no tā atpakaļ atpakaļ atpakaļ atpakaļ. Tātad, piemēram, ja mēs vēlējāmies, lai rakstītu maz programmu, kas dod jums jūsu viktorīna vidējo kursu, piemēram, 50, kas ir 2 viktorīnas, jūs varētu ļoti viegli rakstīt šo programmu, pamatojoties pat uz dažām pagājušās nedēļas materiālu izmantojot GetInt un mainīgo lielumu pāris: int quiz1, int quiz2. Un tas ir diezgan vienkārši. Tas ir varbūt 10, 20 līnijas kodu max īstenot programmu kas prasa lietotājam uz 2 viktorīnu punktus un pēc tam aprēķina to vidējais pievienojot tos kopā, dalot ar 2, un pēc tam izdrukāt rezultātu. Mēs droši vien varētu izdarīt diezgan viegli tagad pēc kāda minūšu skaitu. Bet problēma ir tā, ka pieņemsim, ka 50 bija 3 viktorīnas vai 4. Pieņemsim, ka jūs vēlaties izmantot to pašu programmu klase, kas bija nedēļas viktorīnas. Padomā par klasi, kas ir nedēļas viktorīnas. Ja tur ir 16 vai tik nedēļas semestrī, tagad jums ir 16 mainīgie: int quiz1, int quiz2, int quiz3, int quiz4. Tiklīdz jūs sākat redzēt šo atlaišanu, tas kopējot un ielīmējot kodu, tas ir jāsāk, lai jūs vēlaties, tur bija labāks veids. Un par laimi, jo masīvi tur ir. Tāpēc pieņemsim darīt. Pirmkārt, ļaujiet man iepazīstināt ļoti vienkārša lieta, ka mēs esam ne izmantots līdz šim, bet jūs redzēsiet to reizēm kodu. Tas ir tas, ko parasti sauc nemainīgs. Tāpēc tas konstanti nozīmē, ka šī vērtība nekad nemainās. Cilvēka konvencija veidojot pastāvīgu ir izmantot visus lielos burtus tikai tāpēc, ka tas patiešām izceļas savu kodu, un īpašu atslēgvārdu, ka jūs izmantot C ir # definēt. Tāpēc mēs sakām # define, tad atstarpi, tad vārdu, kuru vēlaties izmantot konstanti vārdu un tad vērtība nemainās. Pamanīt tas ir atšķirīgs no piešķirot kaut mainīgo. Nav vienādības zīmes, nav semikolu. Tas ir tas, ko parasti sauc par apstrādātāju direktīvas bet vairāk par šo citā laikā. Tagad, tas rada nemainīgu vērtību sauc viktorīnas kura faktiskā skaitliskā vērtība ir 2. Tātad visur jūs redzēt viktorīnas, viktorīnas, aptaujas visā šajā failā, tas ir tikai numurs 2. Ja es apskatīt galvenais tagad, pieņemsim redzēt, kā tas darbojas. Sākumā tas izskatās nedaudz noslēpumains, bet tas viss ir sīkumi, no 1 nedēļas. Pieprasīt no lietotāja pakāpēs. Kā mēs to darām? 22 rindā - tas ir patiešām sulīgs daļa - Es paziņoju, apgrozāmos bet ne tikai viena peldēt. Es esmu paziņojot, drīzāk masīvs peldošo vērtībām. Ka mainīgais tiks sauc pakāpes, kā jau minēts šeit, bet vienīgais gabals jaunās sintakses tad ir šie kvadrātiekavas. Fakts, ka es esmu teica peldēt pakāpes un tad atklātu kronšteinu un tad cipara - paziņojums, ja tas ir nemainīgs tas ir tāpat kā mēs to darījām - tas nozīmē, "Hei dators, dod man 2 pludiņus un pieņemsim kolektīvi sauc tos pakāpes." Tas ir pretstatā daudz garlaicīgs process, piemēram, šo: pludiņš Grade1; peldēt Grade2, un tā tālāk. Tāpēc masīvs ļauj mums īstenot šo ideju, bet daudz mazāk messily, tādā veidā, ka mēs varam rakstīt 1 līnija kodu, nevis, teiksim, 16 par 16 nedēļu semestrī. Es negribēju, lai grūti kodu 2, jo, ja jūs domājat par šo tagad loģiski, pieņemsim nākamgad CS50 maiņas 3 viktorīnas vietā un man bija numuru 2 šeit, man bija numuru 2 šeit, Man bija numurs 2 šeit, numuru 2 šeit. Tā kļūst ļoti garlaicīgs un ļoti viegli skrūvējamu augšu un nejauši mainīt vērtību 1 līdz 3 un garām kādu citu vērtību 2. Tāpēc es esmu gatavojas nevis abstrakti šo prom, un izmantot šo konstante, ka, Kā tā nosaukums liecina, nekad nemainās. Un tagad nav svarīgi, vai mums ir dažādi viktorīnas šogad vai nākamā, Man vienkārši ir jāmaina tā vienā vietā šeit augšā. Tā ka viss konstante ir. Tikmēr jaunā konceptuālā iezīme ir tā, ka no masīva. Tātad kvadrātiekavas man šo daudz pludiņus un ļauj man kolektīvi viņiem piezvanīt pakāpes šeit. Tāpēc tagad pieņemsim redzēt, ko es esmu gatavojas darīt. Šeit 24 līnija ir par sākums cilpu. Tas ir patiešām nekas iedomātā. Tas ir vienkārši, izmantojot aptaujas nevis iekodēts numuru. Bet tur nekas intelektuāli atšķiras no tiem pagājušajā nedēļā. Tas ir tikai printf, tāpēc printf ("Quiz #% d no% d:") jo es tikai vēlos, lai izdrukātu dot man viktorīna no 2 1 numuru un tad 2 no 2. Tātad šis ir tīri estētisks lieta. Bet interesanti daļa tagad ir 27 rindā. Lai aizpildītu vienā no divām vietturu ar peldošo punktu vērtības, Jūs atkal izmantot kvadrātiekavas. Šajā gadījumā, es esmu, izmantojot i, jo šis cilpa ir sācies ar I iedots kāda vērtība, acīmredzot? [Students] 0. >> [Malan] 0. Tātad pirmajā atkārtojuma šīs cilpas, tas ir, it kā es uzrakstīju šo kodu, bet otrajā atkārtojuma šīs cilpas, tas ir, it kā es uzrakstīju šo manā kodu. Bet fakts, ka es esmu, izmantojot mainīgo ir ideāls, jo, kā liecina nosaukums, tas mainās savu vērtību par katru atkārtojuma, tāpēc es esmu aizpildot šī masīva vienas vietas laikā. Ko tas masīvs izskatās? Iemesls es vērsa super vienkāršu taisnstūri uz ekrāna šeit pirms šī iemesla. Masīvs ir tikai atmiņas rieciens seko cita rieciens atmiņas seko cits rieciens atmiņas un tā tālāk. Tātad, ja mans masīvs ir 2 izmēru, šajā gadījumā šeit, viss, ko es varētu darīt ierakstot manu viktorīnu punktus patīk šeit - es saņēmu 100 par šo vienu, un tad es saņēmu 99 par šo vienu - tad šī atmiņa varētu pat tikt izmantots, jo es esmu tikai lūdza datoru par masīva 2 izmēru. Šie laukumi ir vēl tur, labi? Jums vēl ir 2 gigabaiti RAM, pat ja jūs tikai lūdzot par 2 pludiņi. Tātad aiz masīviem ideja ir tāda, ka dators vienkārši ņem rieciens atmiņas un tad proporcionāli sadala mazākos gabalos atpakaļ atpakaļ atpakaļ atpakaļ. Un tā tas viss masīvs. Tas ir blakusesoši rieciens atmiņas iekšā kas var nodot lietas. Tas notiek, lai tad darīt tikai daži garlaicīgs aritmētika. Ja es ritiniet uz leju šeit, tas ir, ja es tad atkārtot pa masīva. Es nāku klajā ar summējot visu masīvā vērtībām, un tad es varu izmantot apaļo funkciju šeit, lai faktiski darīt summu dala ar viktorīnas. Bet ļaujiet man vilnis savu roku tajā kā sava veida pietiekami aritmētikas tagad. Bet viss, kas dara man beidzot ir skaitļošanas vidēji. Tāpēc vispirms viktorīna plus 2. viktorīna dalīts ar 2 un tad izdrukāt to ārā kā int. Bet pieņemsim tagad pāreja uz citu piemēru sauc virkne1, kas krāsām līdzīgu ainu, bet, izmantojot stīgām. Ļaujiet man iet uz priekšu un vienkāršot tikai brīdi. Piedot iedobi tagad. Paziņojums šā piemērā 19 līnijā, man string no lietotāja. Bet pamanīt to, ko es esmu nākamais dara rindās 22 vēlāk. Es esmu tiešām atkārtojot no i līdz - un tas ir jauns triks - strlen, stīgu garumu. Tas ir funkcija, kas nāk ar C, ka, ja jūs iet to virkni, tā stāsta, cik daudz rakstzīmes šajā virknē. Tas arī viss. Un fakts, ka tas ir strlen vietā virknes garums ir tikai tāpēc, ka tas ir vairāk īss. Trīsdesmit gadus atpakaļ, cilvēki patika rakstīt lietas kā īsi vien iespējams, tāpēc mēs esam tur, ka konvenciju šeit. I + + tikai nozīmē pieauguma i katrā atkārtojuma. Un tagad paziņojums šo, kas ir patiešām interesanti. 24 līniju, es saku, "Dators, man raksturs, 8 biti, un to sauc par c." Bet kas tas ir par labajā pusē saka? Angļu, ko tas pārstāv? [Students] pirmā rakstzīme masīvā. Tieši tā. Dodiet man pirmo rakstzīmi masīvs. Vai, plašākā nozīmē, dod man kārtējam rakstzīmi masīvs. Un saprast, tas ir svarīgi, ka šobrīd kā datorzinātnieku, Mēs esam patiešām skaitot no 0. Jums nav rīcības brīvības tagad, lai sāktu to darīt. Tagad jums ir rīkosies saskaņā ar datoru cerībām un skaitīt no 0 jo [0] būs pirmā rakstzīme virknē, [1] būs otrais, [2] būs trešais, un tā tālāk. Tātad šī programma, ja es apkopot to, tas ir atkal virkne1, lai padarītu virkne1, un tagad es esmu palaist virkne1 manā termināļa logā. Tas gaida ievadi, tāpēc es esmu gatavojas rakstīt Dāvidam, Enter, un tagad tas drukā Dāvidu viss dažādās līnijās, jo informācija, ko es esmu dara. Es esmu izdevējdarbība vienu rakstzīmi laikā. Mēs ne iedziļināties sīkāk šodien par šo jautājumu, bet es svītrots brīdi pirms šīs pārbaudes šeit. Izrādās, ka tad, ja lietotājs nedarbojas atbilstoši, sacīkstes, vai vienkārši sajaukt, Jūs faktiski var neizdoties, lai sniegtu virkni kādu garumu. Ja jūs hit nepareizu taustiņu uz tastatūras, jūs varētu dot nekādu stīgu vispār, vai, ja jūs ļaunprātīgu, jūs varētu mēģināt ielīmēt gigabaitu vērts esejas aizpildīt šo stīgu, un ja dators darbojas no atmiņas, izrādās, ka mēs esam gatavojas saņemt atpakaļ šo īpašo vērtību sauc NULL. Tātad tagad, tikai zinu, ka tur ir šī īpašā vērtība sauc NULL kas ļaus mums pārbaudīt, kad mēs esam no atmiņas, cita starpā. Bet, ja es atvērt tagad virkne2, paziņojums viena atšķirība šeit. Paziņojums viena atšķirība šeit ar virkne2. Ar virkne2, šis cilpa ir nedaudz atšķirīgs. Ļaujiet man izdzēst nulls, lai mēs varētu runāt par tiem citā laikā. Kas ir atšķirīgs par cilpa šoreiz? Es varu doties atpakaļ uz iepriekšējo piemēru. Tā ka ir versija 2, tas ir versija 1. 1, 2. 1, 2. Strlen zvans ir kur? Tas pirmajā daļā attiecībā uz cilpas. Jebkurš domas par to, kāpēc es esmu to izdarīt? Yeah. [Students] Tātad jums nav zvanu funkciju katru reizi. [Malan] Tātad mums nav saucam funkciju katru reizi. Tieši tā. Atceros no uz cilpas, kas viņi super vienkāršs Tiklīdz jūs veida saprast, ka tas ir inicializācijas, nosacījums, un atjauninājumā. Problēma ir tā, ka nosacījums notiek par katru atkārtojuma no cilpas. Un tāpēc šajā piemērā šeit, kas ir slikti par to, ka šis ir mans stāvoklis? [Students] Jūs aicinot strlen. [Malan] Jūs aicinot strlen atkal un atkal un atkal. Bet tad, kad es esmu drukāti Dāvidu, šī virknes garums ir 5, un tas nav gatavojas mainīt uz katru atkārtojuma no cilpas jo virkne joprojām D--V-i-d. Tātad tas ir mājiens par to, kas notiek, lai kļūtu arvien svarīga ideja pazīstams kā dizaina lēmumu, ja vienkārši nav padarīt datoru darīt nevajadzīgu darbu. Tāpat kā ložņāt preview par pset2, pset2 no standarta izdevums gatavojas apstrīdēt jums tiešām īstenotu dažas vairākus cipariem, daži skaits šifrēšanas algoritmu, lai jūs varat gan šifrēt un atšifrēt slepenos ziņojumus daudz, piemēram, no vienas Ralphie tur dekodēt. Jo hakeru izdevumā pset2, mēs gatavojamies iet mazliet tālāk. Mēs ejam, lai rokas jums failu no faktiskā datorsistēmā kas satur visu ķekars, lietotājvārdus un faktisko šifrētu paroles, un par hakeru izdevuma uzdevums būs kreka tās paroles un izdomāt, ko kriptogrāfija vai kāds noslēpums tika izmantota, lai tiešām radītu tās paroles. Un mēs esam gatavojas darīt, izmantojot jaunu funkciju šeit no C ka es jums došu tikai no demo sauc par komandrindas argumentus. Izrādās, kā daži no jums var būt redzējis sadaļā vai mācību grāmatas, Galvenais ne vienmēr ir jābūt spēkā neesošu iekavās. Izrādās, ka galvenais var būt arī rakstīts kā šis, ar diviem argumentiem, argc un argv, kur argc ir vārdu skaits ka tu rakstīt pēc programmas nosaukumu uz jūsu komandrindas un argv ir faktiskie vārdi. Un kā kvadrātiekavas tur liecina, argv acīmredzot masīvs. Tas būs virkne pēc virknes pēc virknes atmiņā. Tātad, ko mēs ejam, lai varētu izdarīt sākot ar 2 PSET ir kaut kas līdzīgs šim. Ja es argv1, kas ir piemērs mēs atgriezīsimies pie pirmdien, un palaist to, paziņojums, ka tā nav, šķiet, darīt kaut ko vēl. Tā vienkārši izdrukā savu vārdu. Bet, ja es saku ardievas klase, paziņojums, ka šī programma acīmredzot vairākkārt uzsvērts pār katru vārdu, kas tika drukāti uz ātru. Un līdzekļus, ar kuriem mēs iegūtu piekļuvi vārdiem, ka lietotājs ir ievadījis pie tūlītēja ir, mainot galvenā sākot ar šo nedēļas nogali no int galvenais (spēkā neesošs) int galvenais (argc, argv) un tādējādi būs piedzimis komandrindas argumentus. Un, kad jums patiešām sarežģīta šajā, jūs varēsiet rakstīt tiešām trippy programmas piemēram, šo vienu šeit, kas iet augstāk un tālāk daži no funkcionalitātes mēs esam darījuši līdz šim, bet visi ir diezgan spēcīgs. Tāpēc mēs atstāt to ar šo uz ekrāna, un mēs redzēt jūs pirmdien. [CS50.TV]