[Powered by Google Translate] [Tjedan 2, nastavak]
[David J. Malan, Sveučilište Harvard]
[Ovo je CS50. - CS50.TV]
U redu. Ovo je CS50, i to je kraj tjedna dva.
Ako očekujete da ćete biti gladni oko tog vremena sutra,
znam da ćemo sazvati kao male skupine sutra, četvrtak, 13:15.
Tu je ovaj URL ovdje ako želite RSVP.
Prostor je ograničen, pa molimo oprostiti ako oblik je popunio u vrijeme kada ispunite ovo.
Drugi URL, ipak, da bi moglo biti od interesa je to.
U samo oko mjesec dana, tečaj će biti dostupan
sve više šire putem EDX, preko kojeg ljudi na internetu će se moći pratiti uz,
uključe u tijeku prilično aktivno, u stvari.
Oni će se koristiti CS50 CS50 Appliance i Raspravljajte
a većina od različitih programskih alata koje smo već koriste ovaj semestar.
A jedna od inicijativa bismo željeli da se na kao eksperiment ove godine
je da se vidi koliko sadržaj možemo prevesti
u drugim izgovorenih i napisanih jezika.
Dakle, ako ste možda imaju interes za sudjelovanje u ovom projektu
kojim ćemo osigurati engleskog transkripte i titlova za tečaj predavanja
i gaćice i seminari i profili i slično,
ako tečno ili pisati tečno neki drugi jezik,
mi bi voljeli da vam se uključe u ovaj projekt kojim vas odvesti na jedan ili više videozapisa,
ih prevodio na jezik znate prilično dobro.
>> Da vam dati osjećaj sučelja, tu je ova web-based korisničko sučelje
da ćemo se pomoću koje će stvoriti bitno je UI ovako.
To je mene učeći neke Halloween prije,
i na desnoj strani tamo u crnoj pored tih vremenskih pečata,
ćete vidjeti razne stvari koje su došle iz usta taj dan,
i onda ispod njega ćete moći prevesti na neki drugi jezik
točno ono što je mapiranje između, u ovom slučaju, engleski i, recimo, španjolski.
Dakle, to je zapravo vrlo user-friendly alat.
Možete premotati i brzo naprijed vrlo lako s prečaca na tipkovnici.
Dakle, ako želite sudjelovati u ovom eksperimentu i imati svoje riječi vidjeti i pročitati
potencijalno tisuća ljudi vani, molimo Vas da se slobodno sudjelovati.
Jedna riječ o mačića od ponedjeljka.
Da ne smo poslali pretjerano zastrašujuće poruku, učinite shvatiti da, kao radno vrijeme sugeriraju
i kao dijelovi sugeriraju, dizajn naravno je vrlo
da su učenici surađuju i govori da rade kroz problema seta
i problemi zajedno, i stvarno linija samo svodi na,
opet, rad u konačnici poslati trebao biti vaš vlastiti.
I tako sasvim iskreno, u uredovno vrijeme to je sasvim normalno,
to totalno očekuje se čak, da se razgovor s nekim prijateljem pored vas.
>> Ako on ili ona se bori s nekim temu, a ti si kao,
"Oh, dobro, neka mi vam dati uvid u neke linije koda koji sam ja napisao," to je u redu,
se to dogodi, a to je jako puno pridonosi, mislim, s procesom učenja.
Gdje je linija dobiva prešao je kada je glava vrsta naginje ovamo za daleko previše sekundi
ili minuta za to stvarno samo su deblokadi prilika za svog prijatelja,
i svakako kada se stvari mijenjaju preko e-maila i Dropbox i slično,
tamo je linija.
Dakle, svim sredstvima osjećaju ugodno i osjećaju ohrabreni da razgovor s prijateljima
i kolege o psets i više i samo shvatiti da je ono što u konačnici predati
stvarno treba biti proizvod vašeg stvaranja, a ne netko drugi.
I tako jedan od domena specifičnih problema za pset2,
koji će izaći kasno sutra navečer, je zaroniti u svijet kriptografije,
što je umjetnost šifriranjem ili remećenje informacije,
i to u konačnici odnosi na svijet sigurnosti.
Sada, sigurnost za većinu nas dolazi u obliku prilično svjetovnim mehanizama.
Svi od nas imaju korisnička imena i lozinke,
i svi mi imamo jako loš korisnička imena i lozinke, najvjerojatnije.
>> Ako je vaša lozinka je isti na više stranica, to vjerojatno nije najbolja ideja,
kao što ćemo raspraviti prema semestra kraja.
Ako je vaša lozinka je napisan na sticky note - nije šala - na monitoru,
da previše ne mora nužno biti najbolji dizajn, ali sasvim uobičajena pojava.
A ako ne koristite kriptografiju za šifriranje vaše lozinke,
oni su posebno osjetljivi.
Dakle, ako mislite da ste se super pametan vlasništvo skriveni Word dokument
negdje na tvrdom disku koji ima sve svoje lozinke
ali to je u mapu da nitko ne ide gledati u, da previše nije vrlo siguran mehanizam.
I tako ono što pset2 će uvesti je ova umjetnost kriptografije
i remećenje informacije, tako da stvari kao što su lozinke sve više siguran.
Kontekst je da s nesigurnim podacima
dolazi priliku da ga šifriranje i da ga otimati.
I tako to, na primjer, je primjer šifrirane poruke.
To zapravo govori nešto na engleskom, ali to očito nije u potpunosti jasno.
I mi ćemo doći puni krug danas zafrkavati, osim što je to tajna poruka ovdje je.
No, u stvarnom svijetu računala, stvari uopće ne izgledaju kao da bi mogao biti engleski izrazi.
Na primjer, to je ono što bi mogli naći na standardnom Linux ili Mac ili UNIX računala
u datoteku koja je nekad davno nazvao lozinka datoteku.
>> Danas je bio premješten na drugim mjestima.
No, ako pogledate na pravom mjestu na sustavu, vidjet ćete ne samo svoje korisničko ime
ili da od drugih ljudi u sustavu, ali vidjet ćete šifriranu verziju svog lozinkom.
Doista, riječ kripta postoji sugerira da sljedeća stvar je šifriran,
i ova serija naizgled slučajnih slova i znakova i brojeva i tako dalje
može dešifrirati samo općenito znajući neke tajne -
tajna riječ, tajni broj -
i tako doista, umjetnost kriptografije konačnici svodi na povjerenje nekakve
i znajući nešto što netko drugi ne.
Dakle, mi ćemo istražiti to malo detaljnije i danas u pset doći.
A sada riječ o pass / fail.
Pogotovo što neki od vas su zaronili u pset1, aparati,
i vrlo novi svijet za sebe, shvatiti da frustracije i zbunjenost
i samo tehničke poteškoće su prilično se očekuje,
pogotovo s prvim pset, gdje postoji samo toliko nova,
samo upoznati sa ls i cd i svi ovi skrivenim naredbe
i novo okruženje, te da je odvojen od stvarnog materijala i sama programiranje.
Dakle, shvatite previše da postoje sigurno radno vrijeme koje postoje kao potpornu strukturu.
>> Sekcije početi ovaj dolazak nedjelja.
Ali što je najvažnije, ako ste osjećaj samo da to nije svijet za vas,
shvatiti da je to zapravo samo ne uzeti vremena.
A da nije za ovu priliku godina za mene uzimanje klase pass / fail,
iskreno, ja nikad ne bi ni kročiti u učionici.
A možete to promijeniti do, recimo, peti ponedjeljak je, naravno,
pa ako ste na rubu sada, shvatite da umjesto glave u nekim drugim vodama uopce,
ne sigurno uzeti u obzir samo mijenjaju proći / ne.
Opet, ne postoji stvarno ta kultura ovdje na Harvardu uzimanja stvari proći / ne
jer svatko stvarno želi postići ili overachieve,
ali iskreno, ovo je prekrasan način pokušava nešto
da ne bi moglo biti poznato na vas, a vi ćete završiti radi, u većini slučajeva, sasvim u redu,
možda puno na svoj iznenađenje.
I u više konkretnim uvjetima, što mislim proći / ne općenito ne,
posebno kao što ste možda doživjeli s pset0,
ako ste stavili u 10 sati, 15 sati, 25 sata na nekom pset
a vi ste samo lupanje glavom o zid i to je sve super kasno noću
ali ste uzeli pset 90% na putu, a vi jednostavno ne mogu shvatiti jednu stvar,
proći / ne stvarno potrebno rub off klase kao što je ovaj,
gdje možete sortirati od sretno reći: "Dobro, znam da neće biti savršena,
ali sam radila moje dupe off na to, prilično sam sretan s kojima je završio ",
i da će ispuniti očekivanja za pass / fail.
Dakle, ne to na umu. U redu.
>> Dakle, one od vas koji su se borili za korištenje Harvard University Wi-Fi,
znam da postoji CS50 SSID, Wi-Fi veze, plutajući oko
da li možda imati više sreće za.
To je malo ironično da lozinka za to, ako želite probati povezivanje to
za boljim brzinama - i javite nam ako to nije bolje - je 12.345, sve do 8
jer 8 je sigurniji od pet.
Dakle, ako vam je potrebna Wi-Fi lozinku, povezati CS50 bežično ovdje, 12345678,
i post na CS50 Raspravljajte ako još uvijek imate problema s povezivanjem s prekidima,
a mi ćemo pustiti ovlasti koje se znaju za taj prostor. U redu.
Tako brzo zadirkivač, pogotovo za one od vas koji su ventilator dječaci i djevojčice od svih stvari Apple.
Ono što sam iskopao od prije nekoliko godina vratio je ovu sliku ovdje, iUnlock.c,
samo vrsta čine više betona i složenije
neke od osnovnih C programa smo pisali.
Tako sam otvorio ovu sliku, iUnlock.c. To je dostupan na stranici Predavanja za danas.
Na lijevoj strani možete vidjeti dugačak popis funkcija.
Dakle, čovjek koji je napisao ovo napisao gore puno funkcija, više nego samo glavni.
On se koristi cijela hrpa knjižnicama ovdje, a ako počnemo listanje,
što to zapravo je prvi, ja vjerujem, prasak za originalni iPhone.
>> Kada ste htjeli jailbreak izvorni iPhone, što znači da untether iz AT & T
i zapravo instalirati poseban softver na njega i raditi stvari koje Apple nije želio ljudi učiniti,
netko uzeo vremena za shvatiti točno kako bi mogli iskoristiti softverske nedostatke,
pogreške, kukci, u Apple softvera, a time je rođen iUnlock.c--
da, ako ga sastavio na računalu i instalirati na iPhone
koji je povezan s računalom putem, recimo, USB kabel,
to bi vam dati administrativne ili korijen privilegije na vašem iPhone
i neka vas učiniti prilično puno što god želite.
I tako je bilo to fascinantno mačka i miš igra
između Apple i ostatka svijeta, posebice jer se oni, kao i mnogih tvrtki,
pokušati zaključati svoje stvari dolje, tako da možete učiniti samo s njim što namjeravaju.
No, zahvaljujući ljudima kao što je ovaj i razumijevanje low-level detalja -
i, u ovom slučaju C programiranje - i puno poznatih konstrukata
da smo počeli igrati sa, vi ste u mogućnosti da se stvarno iskoristiti hardver
na način što vidite stane, a ne nužno neki korporativni entitet.
Tako na primjer, nemam pojma što se sve ovo radi,
ali GetVersion zvuči prilično jednostavan,
i to izgleda ovako je funkcija da je ta osoba napisala.
Potrebno je nekakav cijeli kao argument, ne vraća ništa,
ali čini se da petlja s for petlje ovdje i ako stanje, ako se stanje pauze,
i nekako se odnosi na brojeve verzija, ako mi se pomaknite prema dolje,
iako mnoge od tih ključnih riječi će biti nova.
I tu je cijeli niz funkcija u ovdje nikada nismo vidjeli i nikad ne može vidjeti
tijekom semestra.
>> Na kraju dana, slijedi ista pravila i logike da smo igrati s tako daleko.
Dakle, ovo je daleko prestara za ispucati svoj iPhone 3S 4ke ili će uskoro 5s ovih dana,
ali znam da je to sve jako puno izvedeni iz ovog svijeta da smo zaronili u.
Ajmo pogledati malo više jednostavnom primjeru:
ovaj jedan, samo da bi se grijao s nekom sintaksom i neki drugi tip podataka
da smo razgovarali o, ali nisu stvarno vidio u C.
Ovo je datoteka zove positive1.c, a po komentarima na vrhu,
to samo zahtijeva da korisnik pružiti pozitivan broj.
Dakle, to je primjer ne-while petlje, koja je lijepo za korisnika interaktivne programe
gdje morate reći korisniku da učinite nešto,
a ako oni ne surađuju li vikati na njih ili odbiti njihov doprinos.
Slučaj u točki: Ja ću učiniti linije 19 do 24
tako dugo dok korisnik nije mi dao pozitivan broj.
Ovaj detalj ovdje na liniji 18, zašto sam proglasiti n iznad cijele ove petlje gradnje
za razliku od tik do linije 22, gdje sam zapravo stalo da se n? Da.
[Student] Opseg. >> Da, tako da je ovo pitanje opsega.
I u laik uvjete, što se odnose na opseg?
Da. >> [Nečujno učenik odgovor] >> Možete li govoriti malo glasnije?
[Student] Gdje možete pristupiti tu varijablu. >> Savršeno.
Gdje možete pristupiti određenu varijablu.
I općenito, pravilo dosad je bio da je opseg nekih varijabla
definiran posljednjim vitičastih zagrada koje ste vidjeli.
>> I tako, u ovom slučaju, ako sam napravio pogrešku tvrdeći n na liniji 22, da linija će raditi.
Ja bih dobiti int, i ja bih ga stavio u tu varijablu n u skladu 22,
ali koja linija koda sada bi imao pojma što pričam? >> [Student] 25.
[Malan] 25, i to ispada 24, kao i zato što je u ovom slučaju pada izvan vitičastih zagrada.
Dakle, samo malo smetnja, ali vrlo lako riješiti jednostavno izjavljujući varijabla
izvan funkcije sama.
Vidjet ćemo kasnije danas možete otići korak dalje
čak i ako bi mogao dobiti malo lijeni.
A to je da se ne preporučuje u cjelini, ali čak mogao dobiti lijen
i staviti varijablu na globalnoj razini, da se tako izrazim, ne unutar funkcije, a ne unutar petlje,
ali u datoteci sama, izvan svih funkcija ste napisali, kao što sam učinio ovdje na liniji 15.
To se obično frowned, ali shvatite ovo je rješenje ponekad do drugih problema,
kao što smo na kraju ćemo vidjeti.
Dakle, za sada ćemo ga ostaviti kao što je ovaj, ali neka je vidjeti ako mi može prepisati ovo
samo za početak izražavanje sebe malo drugačije.
Ovaj program, samo da bude jasno, je positive1.
Dopustite mi da ide naprijed i ovdje u mom terminal prozoru napraviti positive1, Enter.
Sastavlja ok. Idem pokrenuti positive1, pritisnite Enter.
Zahtijevam da li mi dati pozitivan cijeli broj. Reći ću -1. To nije uspjelo.
0, 99. To mi se čini da rade.
Možda ne najrigoroznije testiranje, ali barem je lijepo razum ček
da smo na pravom putu.
>> Pa sada neka mi ići naprijed i otvoriti verziju dva toga,
i ono što je drugačije već?
Ona provodi istu stvar, ali ono što je iskakanja kao jasno različite ovom trenutku?
Ovo bool u zelenom. To je istaknuto u zeleno, ovo ključnih poznat kao bool, koji je tip podataka.
To ne dolazi ugrađen u svim verzijama C.
Trebate uključiti određenu biblioteku.
U našem slučaju, ja uključen CS50 knjižnicu, tako da imamo pristup bool.
No, u skladu 18, mi se čini da imaju Boolean vrijednost ovdje zove zahvalni.
Mogao sam nazvao ništa, ali sam to nazvao zahvalan
samo da nekako prenijeti neke semantičke značenje.
Dakle, u početku na liniji 18, ja sam očito nije zahvalan
jer Boolean vrijednost zahvalni inicijaliziran na false u skladu 18.
A onda čini ono što sam učinio ovdje u linijama 21 do 23.
je sam samo vrsta prepisivati ​​moj logiku.
Dakle, ne funkcionalno različiti, ali u skladu 22 sada sam provjeriti je li int korisnik je pružio
je veća od 0, onda sam jednostavno promijenite vrijednost zahvalni istina.
A zašto mi to učiniti? Budući da je u skladu 25, očito ću provjeriti stanje.
Učinite ovu petlju dok zahvalna je lažna.
Tako sam predložio ovo kao alternativa za verziju 1
jer to je barem malo više intuitivno možda, to je malo više utemeljena na engleskom jeziku.
Dakle, učiniti sljedeće dok niste zahvalni ili dok zahvalna je lažna.
I ovaj put sam previše očito ne zanima da zapamtite ono što korisnik unese u
jer najave nema varijabla n, tako da zapravo, malo bijelog laž postoji.
>> Funkcionalno, program je malo drugačija kad dođemo do dna to
jer nisam sjećanja na ono što je n.
Ali ja sam htjela pokazati ovdje da, iako smo vidjeli GetInt
i GetString se koristi i na desnoj strani znaka jednakosti dosad
tako da mi se sjetiti vrijednost, tehnički, to nije nužno potrebno.
Ako iz bilo kojeg razloga jednostavno ne briga za spremanje vrijednosti,
samo želite provjeriti vrijednost, primijetiti da možemo jednostavno napisati ovo kao GetInt,
otvorena zagrada, blizu zagr.
To je funkcija će vratiti vrijednost, kao da smo bili govori.
To će vam vratiti int.
I tako, ako ste mentalno mislim da se to dogodi,
kad sam upisati 99, GetInt vraća broj 99,
i tako konceptualno, to je kao da mi je kod su zapravo to.
Dakle, ako 99 je doista veći od 0, tada zahvalni postaje istina,
zatim linija 25 shvaća ooh, mi smo učinili jer sam sada zahvalni,
te u skladu 26, mi jednostavno reći: "Hvala za pozitivan cijeli broj!"
bez obzira na to dogodilo se.
Sada ćemo napraviti malu sintaktičkih šećer ovdje, da se tako izrazim.
Hajdemo vidjeti možemo li počistiti ovu liniju 25 sa ovom trećem i posljednjem varijanti u positive3.
>> Obavijest jedina razlika sada je ono linija koda? >> [Student] 25. >> [Malan] Da, 25 godina.
I nismo si stvarno vidio ovaj trik samo još, ali mi nisu vidjeli uskličnik u ponedjeljak,
koja označava što? >> [Student] Ne. >> Ne ili negacija.
Tako se Boolean vrijednost i okrenuti svoju vrijednost.
Istina postaje lažno, lažno postaje istina.
Dakle, ovo, ja bih predložiti, je čak i malo više intuitivan način pisanja koda
jer sam još uvijek inicijalizirati zahvalan lažna, ja još uvijek učiniti sljedeće,
Postavio sam zahvalan istina kad dođe vrijeme,
ali sada zaista možete jednostavno prevesti ovaj kod verbalno lijeva na desno,
dok je (zahvalni!), jer prasak ili uskličnik označava pojam ne,
pa dok ne zahvalni.
Pa opet, ne bismo uveli neke nove koncepte po sebi.
Razgovarali smo o logičke natrag kada smo igrali s nule,
ali shvatite sada možemo samo početi pisati našu kôda na mnogo različitih načina.
Dakle, posebno u pset1 ako ste vrsta bore shvatiti način da se napiše neki program,
izgledi su da ste u sreću, jer ne može biti bilo koji broj rješenja
da li se može dogoditi nakon.
Na primjer, ovo je samo 3 za čak najjednostavniji programa. U redu.
I sad sjetiti u ponedjeljak smo otišli na ove bilješke s povratnih vrijednosti.
Tako je za vrlo prvi put pisali smo program koji ne samo da imaju glavno;
ona također ima svoju vlastitu prilagođenu funkciju da sam napisao ovdje.
Dakle, u skladu 31 do 34 sam provela kocke funkciju.
To nije složen. To je samo * * u ovom slučaju.
No, ono što je važno o tome da je uzimam ulaz u obliku
i sam vraća izlaz u obliku * a *.
Dakle, sada imam sposobnost, baš kao i ja se s prinf sama,
pozvati ovu funkciju pozivom na kocke funkciju.
>> A kocka funkcija uzima neki ulaz, a kocka funkcija vraća neku izlaz.
Nasuprot tome, printf upravo učinio nešto.
To nisu vratili ništa da mi stalo, iako kao stranu to ne vratiti vrijednost;
samo općenito ga ignorirati.
Printf upravo učinio nešto. Ona je imala nuspojava ispis na zaslonu.
Za razliku od ovdje, imamo kocke funkciju, koja je zapravo vraća nešto.
Dakle, za one upoznati s ovim, to je prilično jednostavan ideja.
No, za one manje upoznati s ovom idejom prolazi u ulaza i izlaza dobivanje natrag,
pokušajmo samo nešto super jednostavna.
Je li itko ugodno dolazi na pozornicu nakratko?
Morate biti udoban s kamerom na vas kao dobro. Da? Ok.
Koje je vaše ime? >> [Student] Ken. >> Ken. U redu. Ken, dolaze na gore.
Ken će biti funkcija sorti ovdje.
Idemo naprijed i to učiniti. Idemo malo fancy.
Drago mi je. Dobrodošli na središnjoj pozornici. U redu.
Ajmo pogoditi ovaj gumb ovdje. U redu.
Dakle ovdje imate modernu školsku ploču,
i što sam je glavna funkcija, na primjer,
i nemam iPad u ruci.
>> Ja stvarno ne sjećam kako - Pa, ja ne mogu reći da.
Ja ne stvarno imati dobar rukopis,
i stoga želim da nešto ispisati na zaslonu za mene.
Ja sam se glavni program, a ja ću imati što reći
ga pisati u mom pilećeg nule i onda prolazi vam ulaz.
Dakle, iako je glup ova vježba je pojam funkcije i poziva funkciju
i vraća funkciju zapravo svodi na to.
Ja sam glavni, ja sam samo napisao printf, citat-završiti citat nešto na ekranu,
Ja sam trčanje ovaj program, i čim printf dobiva zove,
to traje jedan argument ili jedan parametar ponekad između dvostrukih navodnika.
Ovdje je taj argument. Ja sam ga prolazi na Kena.
On je crna kutija napisao neki broj godina prije
izgleda da je samo zna kako ispisati stvari na zaslonu.
Dakle izvršiti.
To nije loše. Vrlo dobro.
Tako sada Ken je učinio izvršenja. Da li je potrebno predati mi ništa natrag?
Nije da smo vidjeli dosad.
Opet, printf zapravo ne vraća broj, ali mi ćemo zanemariti činjenicu da za sada
jer nikada nismo ga koristiti. Dakle, to je to za Kena.
I tako sada glavni preuzima kontrolu programa ponovno
jer je to linija koda, printf, radi izvršenja.
I idemo o našem putu, izvršenje bilo druge linije su tu.
Dakle, sada idemo pokušati malo drugačiji primjer.
Ovaj put ovdje neka prvi brisanje zaslona, ​​a ovaj put ćemo napraviti cubing funkciju,
ali ovaj put, ja očekujem izlaznu vrijednost.
>> Dakle, idemo naprijed i to učiniti.
Sada imam liniju koda koji kaže x dobiva kocku x.
Linija koda, podsjetimo, izgleda ovako: x = kocka (x);
Pa kako će to raditi? Idemo naprijed i dati vam bijeli zaslon opet.
Ja ću zapisati sada vrijednost x,
koja je u ovom trenutku događa da se, recimo, dva držati ga jednostavno.
Napisao sam dolje na komad papira vrijednost 2, što je moja vrijednost x.
Ja ga predati na Kena. >> I ja sam samo napisati odgovor? >> Da, hajdemo samo napisati odgovor.
Ok. I sad on mora vratiti mi nešto. Savršeno. Lijepo segue.
Dakle, sada mi je ruke unatrag vrijednost 8, u ovom slučaju, i što da radim s njim?
Zapravo - ajmo vidjeti, dobili to pravo. Što ću učiniti s njom?
Sada ću uzeti tu vrijednost i zapravo ga pohraniti u tim istim bitova u memoriji.
Ali primijetite Nekako sam bori ovdje.
Ja sam malo zbunjen, jer gdje sam zapravo napisati vrijednost x,
jer ono što sam upravo učinio je fizički ruka Ken komad papira koji je imao vrijednost 2,
koji je bio x, i doista, to je upravo ono što se dogodilo.
Tako ispada da kada nazovete funkciju i da prođe u argumentu
kao halo, svijet ili što prođe u argument kao 2,
općenito, ti si u prolazu primjerak tog argumenta.
I tako kao što sam zapisao broj dva ovdje i predao ga Ken,
da mora značiti da još uvijek imam kopiju vrijednosti dva negdje
jer doista, sad da sam se vratio vrijednost 8, moram se vratiti u RAM
i zapravo napiši 8 gdje sam nekada imao broj dva.
Dakle, vizualno, zapamtiti ovaj pojam prolaze, doslovno, kopiju vrijednosti.
>> Ken radi njegova stvar, mi pruži natrag nešto - u ovom slučaju vrijednost kao 8 -
i onda moram nešto učiniti s tom vrijednosti, ako želim to zadržati.
Dakle, sve to će se vratiti u biti sve previše upoznat prije dugo.
Hvala vam toliko za ovaj demo ovdje, Kena. [Pljesak]
Vrlo dobro učinio.
Idemo vidjeti kako to u konačnici odnosi na neke od funkcija poziva da smo radili ovdje.
Dopustite mi ići naprijed i vratiti nas u cubing primjer ovdje.
Primjetite da ako želimo da se zapravo početi uzimati ovo dalje,
ćemo morati biti svjesni činjenice da je broj x koji je prošao se ovdje
se razlikuje od onoga što je zapravo prenosi u funkciji.
Pa opet, to proći primjerak će postati vrlo povezan u samo trenutak.
Idemo pogledati nešto što ne sasvim rade upravo gostiju.
Ja ću ići naprijed i otvoriti trećine lud primjer, koji je manjkav po prirodi,
i to se zove buggy3 i implementira zamjene funkciju.
Ovdje imamo glavnu funkciju da je x i y samovoljno pokrenutog na jedan i dva, respektivno.
Mogli bismo koristiti GetInt, ali samo mi treba jednostavan vježbe,
tako da je teško kodirana kao jedan i dva.
U linijama 21 i 22, što je očito isprintati X i Y, jedan po retku.
Tada se na liniji 23, tvrdim ja sam zamjene tih vrijednosti, točka, točkica, točaka.
Ja očito pozvati funkciju u skladu 24 tzv zamjena koja uzima dva argumenta.
Totalno čitljiv za funkcije uzeti dva argumenta. Vidjeli smo printf to već.
>> Dakle, zamjena očito ima X i Y, i kao što mu ime sugerira,
Ja se nadam da će to zamijeniti ove dvije vrijednosti.
Pa onda ja tvrdim na liniji 25 "zamijenili!" i ja ispišite xiy
pod pretpostavkom da su oni zapravo ste bili zamijenili.
Ali, ako sam zapravo pokrenuti ovaj program - neka mi otvoriti prozor terminala,
neka mi napraviti buggy3 - kao što ime sugerira, to ne ide do kraja i
jer kad sam pogodio Enter, primijetiti da x je 1, y je 2,
i još na kraju programa, oni su još uvijek, u stvari, isto.
Dakle, na temelju demonstracije samo sada s Kenom, što se zapravo događa?
Ajmo zaronite u ovom swapu funkciji. To je super kratka. To je samo nekoliko linija koda dugo.
No, ono što je temeljni problem temelji se na jednostavnom priča se ovdje s Kenom?
Zašto je zamjena slomljena?
[Student] Ti si pohranu na kopiju, a ne varijabilnom.
Točno. Mi pohranu na kopiju, a ne varijabla sama.
Drugim riječima, swap navodno traje dva argumente, Int,
i to samovoljno zove i b,
i ovdje sam prošao u X i Y, koji su redom 1 i 2,
ali ja ne doslovno prolazi u x, nisam doslovno prolazi u y,
Ja sam prolazeći kopiju x i kopiju y.
To je gotovo kao da ste kopirati i zalijepiti u swapa
vrijednosti koje želite to zapravo manipulirati.
Dakle, ako je to slučaj, kada sam program početak izvršenja liniju 35 onda 36,
kad dođem na liniji 37, u ovom trenutku u priči, što je vrijednost?
U ovom trenutku u priči, linije 37, što je vrijednost u ovom trenutku? >> [Student] 1.
[Malan] To samo treba biti 1, desno, jer x donesen kao prvi argument,
i ova funkcija samo proizvoljno poziva svoj prvi argument je.
Slično je y drugi argument, a to je samo proizvoljno pozivom drugi argument b.
>> Ova dihotomija je zapravo prilično jednostavno objašnjeno. Razmislite o tome.
Nitko od nas su se susreli osobu koja je napisao printf,
pa sigurno, on ili ona nema pojma što naši varijable 30 godina kasnije se ide da se zove.
Dakle, mora postojati razlika između onoga što nazivamo varijable u funkcijama pišete
i ono što nazivamo varijable u funkcijama ste pozivali ili korištenjem.
Dakle, drugim riječima, ja sam napisao moje varijable kao X i Y,
ali ako netko je napisao swap funkciju, on ili ona sigurno ne bi znao
što moji varijable će se zvati,
tako shvatiti da je to razlog zašto ste ovu dvojnost imena.
Tehnički, mogao sam to učiniti slučajno,
ali oni će i dalje biti donesen kao kopija.
To bi bila samo čista slučajnost estetski ako je ta osoba koja je napisala zamjenu
imao koristi ista imena.
Dakle, u ovom trenutku u priči, linije 37, 1, b 2, a sada sam nastaviti kako bi ih zamijeniti.
Prije svega, dopustite mi da zapravo to učiniti mnogo više jednostavno.
Ne znam što ti tri linije koda su radili.
Dopustite mi samo to: b =; = b; učinjeno.
Zašto je to slomljen, logično?
To je vrsta intuitivnog stvar, zar ne?
Tako postaje b i b postaje,
ali problem je u tome da čim linije 37 izvršava, što je vrijednost A i B?
Isti, jedan, jer ste razbijen, da se tako izrazim, ti si se promijenio b jednaka.
Tako jednom linije 37 je pogubljen, to je super, sada imate dvije kopije broj 1
unutar ove funkcije, pa onda kad kažeš u skladu 38 = b,
ste vrsta pijan jer ste samo dodjeljivanjem 1 do 1.
Vi ste vrsta izgubila vrijednost koju stalo.
Dakle, u originalnoj verziji to primijetiti ono što sam učinio.
Ja umjesto imao trećine liniju koda koji je izgledao ovako.
Izjavljujem privremenu varijablu.
>> MPT je vrlo čest naziv za privremenu varijablu, a to je int
jer mora odgovarati što želim napraviti kopiju.
Ja pohraniti kopiju unutrašnjosti tmp, pa nakon linije 37 je pogubljen,
vrijednost je - brzo razum ček - 1, vrijednost b je 2,
i vrijednost tmp je 1.
Dakle, sada sam izvršiti liniju 38.
Nakon linija 38 izvršava, preuzima vrijednosti b. I b je 2, pa je sada dvije.
Tako u ovom trenutku u priči, je 2, b je 2, a tmp je 1,
pa sad logično, mi može samo pasti MPT je vrijednost u b i mi smo gotovi.
Tako smo riješiti taj problem.
Nažalost, kad sam pokrenuti ovaj program u ovom obliku, to zapravo ne zamijene nikakve vrijednosti.
Ali da bude jasno, zašto?
Sredio sam logički problem od samo trenutak prije,
ali opet, ako sam pokrenuti ovaj program, x i y ostaju nepromijenjene
do kraja programa izvršavanja.
[Nečujno učenik komentar] >> nismo vratili ništa, tako da je to istina.
No, ispostavilo se da je malo problem ovdje jer dosad,
Jedino smo bili u mogućnosti vratiti je jedna stvar, a to je ograničenje C.
Vi samo mogu vratiti stvarno jedna vrijednost, u kojem slučaju Nekako sam zapeo ovdje
jer bih se mogao vratiti na novu vrijednost x ili bih se mogao vratiti na novu vrijednost y,
ali ja želim i leđa.
Dakle povratka nije jednostavno rješenje ovdje.
No, problem je fundamentalno zašto? Što smo zapravo zamijenili?
[Student] i b. >> A i b.
No, i b su kopije X i Y, što znači da upravo učinio sve ovo djelo,
samo smo proveli tri minuta govori o swap funkciju i sve tri od tih varijabli,
i to je super, savršeno točno u izolaciji,
ali i B opseg samo je u tim linijama ovdje.
>> Dakle, baš kao i za petlju, ako proglasiti integer ja unutar for petlje,
Isto tako, ako ste proglašenja A i B unutar funkcije koje ste pismeni,
oni vrijede samo unutar te funkcije, što znači da čim swap učinio izvršenja
i idemo iz linije 24 do linije 25, X i Y nisu uopće promijenio.
Vi samo izgubiti puno vremena zamjene kopije varijabli.
Tako ispada da je rješenje za to je zapravo ne-očigledan.
To nije sasvim dovoljan za povratak vrijednosti, jer samo možemo vratiti jednog vrijednost,
a ja stvarno ne želim mijenjati i xiy u isto vrijeme,
tako da ćemo morati vratiti na to.
Ali za sada, shvatite da je problem u osnovi izvedena iz činjenice da su A i B primjeraka
i oni su u svom djelokrugu.
Idemo pokušati riješiti to na neki način.
Dopustite mi zapravo dođite ovamo i otvoriti, recimo, četvrtina varijantu to, buggy4.
Što je to?
To je slično, ali jednostavniji problem pogledati prije nego što smo se rana na to rješavanje.
Ovaj program se zove prirast, a to očito inicijalizira je x cijeli broj 1 na liniji 18.
I onda zahtjevu x je 1, onda sam zahtjevu "povećavanjem ..."
I onda nazvati prirast, ali onda u redovima 22 i 23, ja tvrdim da je bio porastao,
Tvrdim x je sada bez obzira na to je - dva, vjerojatno - ali ovaj program je lud.
U čemu je problem?
Da. >> [Nečujno učenik response] >> Točno.
Dakle, x je proglašen, očito, na liniji 18.
To je u glavnom u vitičastim zagradama.
Dakle, jednostavan odgovor je da, dok x ne postoji ovdje,
to ne postoji u liniji 32, tako da je ovaj program zapravo uopće neće sastaviti.
Prevodilac kad sam probati sastavljanju ovaj kod će vikati na mene
o nekim neprijavljenog identifikator ili nešto u tom smislu. U stvari, pokušajmo.
Ovo je napraviti buggy4. Tu je.
Koristite neprijavljenog identifikator "X" u skladu 32.
A zapravo, budimo precizniji danas ovdje, tako da je to korisno
u uredovno vrijeme i kod kuće.
>> Primijetit ćete da je to malo šifrirano napisano.
No, činjenica da zveka ima vikao na nas, rekavši buggy4.c: 32:5, je zapravo korisno.
To znači da je pogreška na liniji 32 u znaka pet.
Dakle 1, 2, 3, 4, 5. To je, u stvari, gdje je problem.
I također, također, imati na umu u uredovno vrijeme i kod kuće, ja sam sretan ovdje.
Imam jedan pogrešku. To će biti relativno lako popraviti.
Ali ako se cijeli ekran pun neodoljiv poruka o pogrešci,
opet shvatiti da najniži jedna samo može biti simptomatična najviši jedan.
Dakle, uvijek juriti dolje svoje greške iz vrha prema dolje
jer postoji samo može biti učinak lančana
koji se upućuje imate način više problema nego što zapravo rade.
Dakle, kako bismo mogli popraviti ako mi je cilj povećavati x? >> [Student] Make x globalno.
Ok, tako da možemo napraviti x globalno.
Ajmo uzeti prečac koji sam upozorio ranije, ali dovraga, samo mi treba brzo popraviti,
pa recimo samo int x ovdje. To čini x globalno.
Dakle, sada glavni ima pristup do njega i prirast ima pristup do njega,
pa neka mi ići naprijed i sastaviti to sada.
Napravite buggy4, Enter. Čini se da sastaviti sada.
Ajmo pokrenuti buggy4. A čini se da se zapravo radi.
Ovo je jedna od tih stvari koje se rade kao što sam rekao, ne kao ja,
kao što sam učinio ovdje, jer u cjelini,
naši programi su idući u dobiti mnogo zanimljivije i puno više od toga,
i ako je vaš rješenje životnih problema samo staviti sve varijable na vrhu datoteke,
vrlo brzo ne programi dobili horrifically teško upravljati.
Ona dobiva teže smisliti nove varijable imena,
to dobiva teže shvatiti što varijabla radi ono,
i tako u cjelini, to nije dobro rješenje.
Pa hajdemo to učiniti bolje.
Mi ne želimo koristiti globalnu varijablu ovdje.
>> Ja ne želim da prirast x, tako da sam mogao očito -
Na kraju dana, to je poput glupog priče, jer smo upravo to -
ali ako ne znam o tom operateru ili nisam smjela da ga promijeniti u glavnom sama,
kako bi drugi mogao sam provesti Kena ovamo ovaj put ne kocka, ali povećajte?
Kako mogu promijeniti tu stvar ovdje? Da.
[Student] Pass u x, a zatim se vratiti [nečujno] >> Dobro, dobro.
Pa zašto ne bih proći u x i onda umjesto da ga vrate,
zašto ne bih baš ne vratiti x + 1.
Par više stvari moraju promijeniti ovdje. Ja sam na pravom putu.
Što još trebam Tweak? Netko drugi. Da.
[Nečujno učenik odgovor]
Trebam promijeniti povratnu vrstu prirasta, jer to ne poništava.
Void znači ništa se ne vraća, ali jasno je sada,
pa to treba promijeniti - >> [student] int.
int biti u skladu s god sam zapravo vraćaju.
Sada je nešto drugo još uvijek lud ovdje. Da.
[Nečujno učenik odgovor] >> [Malan] Pa moram povećavati x?
[Nečujno učenik odgovor] >> [Malan] Ah, pa moram proći x.
Dakle, moram to učiniti ovdje. >> [Nečujno učenik komentar]
[Malan] Pa prototip, moram promijeniti ovaj ovdje.
Dakle, to mora postati int, to mora postati -
hmm, ja zapravo imaju bug ovdje dolje. Ajmo riješiti ovo jednom prvi.
Što bi to zapravo biti? To je dobio biti int nešto.
To bi mogao biti x, ali iskreno, ako početi zovete sve svoje varijable x,
to će dobiti manje i manje jasno što je što.
>> Dakle, neka je samo proizvoljno odabrati neku drugu konvenciji imenovanja za moje pomagač funkcije,
funkcije pišem. Mi ćemo ga nazvati, ili možemo ga nazvati -
Nazovimo to broj biti još precizniji.
Pa onda moram vratiti ono što je broj plus 1,
i sada moram promijeniti jednog druga stvar ovdje i jedna druga stvar ovdje.
Što moram promijeniti na liniji 21 prvi? >> [Nečujno učenik odgovor]
[Malan] Moram ga dodijeliti x. Ja ne mogu samo pozvati prirasta (x).
Moram se sjetiti odgovor promjenom vrijednost od x na lijevoj strani.
I premda x je sada na lijevo i desno, to je potpuno u redu
jer desna strana dobiva pogubili prvi onda dobiva plopped u lijevoj stvar -
x u ovom slučaju.
I onda na kraju, to je lako popraviti sada.
Ovo je samo trebao odgovarati što je dolje, int broj.
Dakle, cijela hrpa promjena za stvarno glupo funkciji
ali predstavnik stvari koje mi se sve ćete želite učiniti.
Tako bi buggy4. Ja sam zeznuo negdje.
Oh, moj Bože. Pet pogrešaka u 6-line programa.
Dakle, ono što je krivo na liniji 18, lik 5?
Dakle, moram da objavim ovo, Int.
Idemo vidjeti. Postoji cijela hrpa drugih pogrešaka.
Oh, moj Bože - 19, 18, 21 -, ali opet, neka je samo brisanje zaslona, ​​Upravljačka L ovdje,
i ponovno jeka.
Dakle, pet problema je zapravo samo da je 1.
Dakle, sada idemo pokrenuti buggy4, Enter. Uh, x je porastao ispravno.
U redu. Sva pitanja o tome kako za povećanje broja? Da.
[Nečujno učenik pitanje] >> Dobro pitanje.
Kako to da ja mogu samo promijeniti x broju i program će odmah znati?
>> Opet, mislim da je to ovaj apstrakcije.
Dakle, ako sam glavni i Ken je prirast, iskreno, ne zanima me što Ken poziva svoju ipad.
Ne zanima me što on naziva sve što ima veze s njegovom provedbom ove funkcije.
Ovo je implementacija detalj koji sam, uglavnom, ne morate brinuti o tome.
I tako jednostavno mijenja dosljedno unutar funkcije - broj ovdje i broj ovdje -
Sve je to traje tako dugo kao što sam rekompiliranje.
To je vrsta kao i ako mislite o tome mnogi od nas, one od vas s vozačkih dozvola
koji su vođeni ili ako čak sam odvezao u automobilu,
većina nas nema pojma kako se auto radi ispod haube.
I doslovno, ako vam se otvoriti haubu, većina nas - uključujući i mene -
se ne događa da znam što gledamo,
vrsta kao što ste možda osjećaju stvari kao što je ovaj sada.
Ali mi stvarno ne moraju brinuti kako automobil radi,
nemamo da briga što sve šipke i klipova i kablova unutar od auta
se zapravo radi.
Dakle, nešto poput onoga što vi zovete klip ne smeta ovdje, u ovom slučaju. Sve ideja.
Da. >> [Nečujno učenik pitanje]
Ako postoji više koristi od varijabilnog Xa trenutak prije,
ti, programer, morat će ih promijeniti posvuda.
Ili ste doslovno mogli učiniti File, Izbornik, a zatim Nađi, Zamijeni - takvo nešto -
ali ti si idući u morati napraviti tih promjena sebe.
Morate biti dosljedna. >> [Student] Ako postoji više varijabli [nečujan]
Posebno bi kao ovdje, ako je to int drugi broj? >> [Student] Točno.
[Malan] Aha. Red je važno kada se zovete funkciju.
>> Dakle, ako sam se zovete prirast ovdje s nečim zarez nešto,
postoji izravna mapiranje.
Prvi varijabla, bez obzira na to zove, je napravio kopiju prve svađe oko ovdje.
Oprostite. To ne bi trebalo biti zagrada.
Drugi argument linije se s jednom drugom. Tako bi, da je bitno. U redu.
Oprostite. Uzeo sam dug put kako do njih doći. Ostala pitanja? U redu.
Dakle, neka je vidjeti ako ne možemo slikati sliku o tome što se zapravo događa ovdje
ispod haube, da se tako izrazim.
To je pravokutnik koji bi mogli predstavljati memoriju računala.
Čak i ako nemate pojma koliko memorije radi ili koliko RAM djela,
barem pretpostaviti da imate grozdovima to ovih dana.
Imaš megabajta njega, imaš gigabajta njega,
a znamo iz tjedna 0 da bajt je samo ono što? >> [Student] 8 bita.
8 bita, zar ne? Dakle, osam nula i jedan.
Dakle, ako vaše računalo ima koncert RAM-a, 2 gigs od RAM-a ovih dana,
imate milijardu ili dvije milijarde bajtova memorije ili otprilike 8000000000 ili 16 milijarda bitova
unutar vašeg računala.
Za razliku od malog wooly Willy primjer, to nije magnetske čestice obično više.
Sve - u prijenosnim računalima barem - to je solid state diskova, SSD-ovi,
samo da nemaju pokretnih dijelova. To je sve elektronički. To je sve struja-based.
Dakle, mislite o ovom pravokutnika kao samo predstavlja jedan ili dva gigabajta memorije koje imate.
>> Dakle, to je komad memorije.
Svijet informatike je vrsta odvojen
komadi memorije učiniti različite stvari.
Na primjer, ako je to vaše računalo RAM-a, kako je predloženo od strane pravokutnika tamo,
ispada da po konvenciji, na vrhu vašeg RAM-a, da se tako izrazim,
općenito je ono što se zove tekst segmentu.
Oni su 0s i 1s da ste sastavili.
Dakle, kada smo gledali ispod haube na ono što je a.out,
sve ove 0s i 1s, kada pokrenete program,
one 0s i 1s se učitava s tvrdog diska u nešto što se zove RAM-a,
i u RAM oni stavili na vrhu.
U međuvremenu, imate i druge stvari: inicijalizirati podatke, uninitialize podatke.
Ti dvije swaths memorije pogledajte globalnih varijabli, koje često ne koriste
ali ponekad ako to ne učinite, oni završiti tamo gore, kao dobro.
Zatim tu je neke druge stvari: varijable okruženja, koje nećemo potrošiti puno vremena na,
ali onda dvije važne stvari koje će se vratiti tijekom semestra,
stog i hrpa.
Dakle, većina računala memorije rezerviran kada je pokrenut program
za nešto što se zove snop i nešto što se zove hrpu.
Nećemo govoriti o hrpi danas, ali mi ćemo govoriti o dimnjaka.
Stog je značilo da dočarati vizualni od blagovaonici obrok ladice u Mather House
ili gdje god vam se dogoditi da bude gdje osoblje blagovaonica čiste ih svaki dan,
ih stog gore od poda na gore,
i slično, u sjećanju, tu je ova ideja stavljanja nešto na hrpu,
stavljajući nešto na hrpu, stavljajući nešto na hrpi.
A što mi znači ova?
>> Ajmo povećate samo u donjoj polovici ove slike, na računalu RAM,
predložiti sljedeće.
Ispada da kad pokrenete program kao što je a.out ili Hello -
god program je da ste pismeni -
opet, oni 0s i 1s se učitava s tvrdog diska, što je dugoročno skladištenje,
ostaje tamo, čak i kada ste povucite utikač, učita u RAM.
RAM je brže od tvrdih diskova - to je manji od tvrdih diskova -
ali to je gdje programi živjeti dok god ih izvodi.
Dakle, dvostruko kliknuti program na Mac ili PC, to je učitan s tvrdog diska u RAM.
Čim se to učita u RAM, 0s i 1s ići na putu vrhu,
Takozvani tekst segmentu, ali onda čim se vaš program zapravo počinje prikazivati,
glavna funkcija se zove, a glavni, kao što smo vidjeli, često ima lokalne varijable,
i ima Ints i gudače i znakovi i slično.
Dakle, ako vaš program koji ste napisali ili program koji ste dvostruko su kliknuli
koristiti neke varijable unutar glavnih,
oni završiti na dnu stog memorije, da se tako izrazim.
Konkretnije, što to zapravo znači?
To samo znači da ako idemo na broj bajtova RAM na računalu,
primijetiti da bi to moglo biti byte broj 0, to može biti byte broj 1, 2, 3, 4, 5, 6,
sve do 2 milijarde će biti sve gore na vrhu.
Dakle, drugim riječima, kada govorimo o RAM-a ili memorije u smislu bajtovima,
to samo znači da je netko odlučio što će prebrojiti svaki od tih komade memorije.
Dakle, kada vam je potrebno 32 bita za int ili trebate osam bitova za char,
gdje su završiti u sjećanju?
>> Koncepcijski, oni samo završiti na dnu ove stvari zove stog.
No, ono što je zanimljivo sada kada je glavni poziva funkcija -
Pretpostavljam funkciju pod nazivom Foo, samo proizvoljna ime -
što se događa je glavni je na dnu ovog stog memorije;
foo sada staviti na vrhu glavni u sjećanju.
Dakle, sve lokalne varijable koje foo je završiti neku vrstu konceptualno iznad onih u glavni.
Ako foo zove drugi funkciju zvanu bar one varijable završiti ovdje.
Ako bar zove nešto drugo, ovdje, ovdje, ovdje.
Dakle, ono što je zanimljivo o pokretanju programa je u tome što vi zovete funkcije
i kao one funkcije poziva funkcije kao i one funkcije poziva funkcije,
da podigne ovu hrpu funkcija u memoriji.
I samo jednom funkcija vraća ne počnete dobivanje tog memoriju natrag.
Dakle, jedan od najlakših načina da ponestane memorije računalnog programa
je napisati funkcije koje nikada ne vrate.
Tako na primjer, neka je pokazati koliko s namjerom buggy programa.
Pusti me naprijed i nemojte # include ,
int main (void),
i ja ću to učiniti dok (2> 1), koji vjerojatno neće nikada neće promijeniti na nas,
i neka mi sada ići naprijed i učiniti printf.
Zapravo, to će biti manje vizualno zanimljiva. Ajmo to učiniti.
Za int i = 0; ja> 0 - ajmo napraviti takvu pogrešku - i + +.
I nemojmo printf ovdje. Ajmo vježbati ono što sam propovijedao.
Popijmo metodu ovdje, šupljikave zbor, a mi ćemo reći int i,
i onda ću reći printf - ne, ajmo napraviti ovo više zanimljiv.
Ajmo zapravo ne ispisivati ​​ništa at svi. Ajmo to: zbor (ja).
U redu. Dakle, ovo je lud, jer zašto?
Ja izmišljam kao što sam ići jer je program zapravo ne učiniti ništa od interesa.
>> No, to nije cilj.
Cilj je napisati program čiji je glavna funkcija što radi, očito?
Se poziva. I zapravo, ne trebamo petlju.
Ajmo još pojednostaviti to samo kako ne bi izgubili iz vida stvarno temeljnog bug.
Glavni pozivi zbor pjevati neki refren,
onda sam učinio nešto glupo i imao sam refren zborski poziva
jer sam preuzeo netko drugi će to provesti, možda,
a sad to ne ide sastaviti još. Trebam učiniti što?
Trebam prototip, zapamtite.
Dakle, moram imati ovdje void refren (int i);
Pa sad ako odem ovdje dolje - zapravo, ajmo koristiti veći prozor.
Idemo naprijed i napraviti refren.
Korištenje neprijavljenog identifikatora i.
Oh, to je glupo. Mi ne trebamo argument. Ajmo to učiniti.
Volio bih da smo počeli na ovaj način. To bi bilo puno lakše program za pisanje.
Tu. Sada idemo do mog prozora terminala, repriza zveka, i ovdje mi ići.
To je bilo jako brzo.
Što se zapravo dogodilo baš, iako?
Pa, sada ću dodati liniju ispisa tako možemo vidjeti.
Dopustite mi da kažem printf ("Ja sam ovdje") - nema varijable. Mi ćemo ga ostaviti kao što je to.
Dopustite mi ponoviti napraviti. Dopustite mi ponoviti refren.
I ... hajde. Imajte ide.
Kao na stranu, zašto je ne srušio još?
Segmentacija kriv dogodilo superbrzo prije.
[Nečujno učenik odgovor] >> Točno. Dakle, potrebno je mnogo vremena za ispis, zar ne?
Potrebno je samo više raditi na računalu je dio.
I to je to: Segmentacija kriv.
>> Dakle primijetiti koliko brzo programi pokrenuti.
Ako ne ispisuje ništa, super brzo.
Ali mi još uvijek imamo ovu segmentacije grešku jer ono što se događa?
Ako mislite o tome vašeg računala memorije rasprostire se,
se to dogodi, biti glavni, ali ovdje ćemo samo nazovite ovaj refren, a nazovimo ovu refren.
I sad, ako ja moje estetiku pravo, ovo je samo htio reći zbor, zbor, zbor,
zbor, zbor, zbor, zbor, oglas nauseum, i na kraju, ono što će se dogoditi?
Ako velika slika, doslovno, je to, što se upravo događa konceptualno?
Stog prekoračenja hrpi.
Ili, još gore, samo prekoračenje sve, uključujući tekst segmentu,
koji je 0s i 1s da predstavljaju svoj program.
Ukratko, to je samo super, super loše.
Vaš program spiralu izvan kontrole.
Vi koristite način više memorije nego što namjerava
sve zbog glupog pogreške u ovom slučaju,
ili u ovom slučaju vrlo namjerno učinio funkcija se zove.
Sada, to nije sve loše.
Funkcije se pozivaju zapravo ima veliku moć kada ga koristite pravilno.
Nisam ga se pravilno koristi ovdje.
Dakle, to nije sve loše, ali je činjenica da sam zapravo nikada prestati sebe zove
je temeljna slabost ovdje ovog programa.
Dakle, gdje ćemo uz sve ovo? Što se zapravo događa?
Kad sam nazvati prirast funkcije kao što smo radili u tim primjerima,
Imam vrijednost kao jedan koji sam proći u.
Ja proći u kopiji broj jedan, tako da sljedeće dogoditi.
Idemo u prirasta primjer, ovaj tip upravo ovdje.
Evo što se zapravo događa.
Kad sam nazvati prirasta i ja proći u x, slikovito, ono što se ovdje događa je to.
>> Ako imam vrijednost jednog pohranjeni ovdje, a ja zapravo nazvati prirasta,
koji se sada zove refren - ipad me bacanje izvan ovdje.
Nazovimo ovu prirasta, a mi ne znamo što je to sljedeća funkcija će biti.
Dakle, ono što se zapravo događa je ovdje negdje u glavni imam komad memorije
da je spremanje broj 1.
Kad sam nazvati prirasta, ja sam koristeći drugi komad memorije,
ali sada imam jedan primjerak.
Kad sam povećajte tu vrijednost, to postaje 2,
ali onda ono što se događa čim prirasta vraća?
Ova memorija samo dobiva vrati na operativnom sustavu,
što znači sve što ste učinili ništa korisno.
1 koji je izvorno bio sadržan u glavnom je još uvijek zapravo postoji.
Dakle, gdje ćemo s tim?
Ispada da je u sjećanju imate ovaj back-to-back slijed bajtova
da možete staviti stvari u, a ispada da smo već vidjeli nešto
koja uključuje stavljanje stvari natrag na leđa natrag na leđa.
Što je niz temelji na tjedan 1 i sada tjedan dva?
To je samo skup znakova.
Tako ispada baš kao što možete staviti brojeve u memoriji,
Slično možete staviti znakove u sjećanju.
A kad ćemo početi stavljanjem znakova u memoriji natrag na natrag na leđa uz leđa,
ispada da koriste najjednostavnije stvari kao za petlje ili while petlja,
možemo ponoviti s lijeva na desno preko znakova u nizu
i početi ih masirati u različite likove uopce -
mogla postati b, b mogao postati c -
tako da u konačnici, možemo uzeti englesku rečenicu koja zapravo ima smisla
i pretvoriti svaki od tih slova jednu po jednu
šetnjom kroz naše memorije računala s lijeva na desno kako bi zapravo šifriranje.
Tako ćemo uzeti našu pet minuta pauze ovdje,
a kad se vratimo, bit ćemo početi ovaj proces remećenje informacije.
>> U redu.
Prije nego što zaronite u nekim kripto i te stvari naziva polja,
neka mi pauza za sva pitanja jer se osjećam kao da sam stvarno vrsta promašeni
neke od tih tema. Tako ćemo popraviti sada, ako možemo.
Mi smo samo razgovarali o povratnih vrijednosti, razgovarali smo o argumentima,
i razgovarali smo o tom pojmu, što ćemo se vratiti u tjednima koji dolaze,
gledanja memoriju kao cijela hrpa ovih naslaganih ladice, da se tako izrazim,
od dna na gore, tako da je svaka ladica da se stavi na stog
predstavlja funkciju koja trenutno se zove.
Ima li pitanja?
Dopustite mi postaviti pitanje ovdje.
Dopustite mi da pojednostaviti ovaj leđa na ono što je bilo prije neke naše ranije Q & A.
Činjenica da je prirast ima otvorenu zagradu, int broj, zatvoren zagradama -
što ne int broj predstavlja?
[Student] argument. >> Argument. Ok. No, ono što je argument?
[Nečujno učenik odgovor] >> Što je to? >> [Student] Nešto što prođete u.
Ok, tako nešto da prođe u. I općenito, to je samo ulaz.
Ako ste pisali funkciju i tu funkciju je svrhu u životu
je učiniti nešto malo drugačije svaki put kada ga koristiti,
onda jedini način da se to dogodi stvarno čini da bi se to osigurati sa ulaza
tako da se može napraviti nešto drugačije s tim input svaki put.
>> Dakle, potrebno je navesti dvije stvari kada funkcija uzima ulaz.
Morate navesti naziv koji želite dati taj ulaz
čisto za svoju korist, tako da se može odnositi na njega
u funkciji da ste sami pišete, kao što sam učinio ovdje u liniji 32.
No, također je potrebno da odredite svoj tip jer je C programski jezik
samo da zahtijeva da ako želite varijablu, morate reći računalu što tip podataka je,
u velikom dijelu, tako da se ne zna koliko je bita izdvojiti za tu varijablu
jer bi to moglo biti 6 - Nažalost, to neće biti šest.
To može biti 16, to može biti 8, to može biti 32, čak i 64,
ali računalo mora znati.
Sada, int na lijevoj strani predstavlja ono što je, za razliku?
[Nečujno učenik odgovor] >> Što je to? >> [Student] Tip funkciji.
Vrsta funkciju i, točnije, tip njegove proizvodnje. Točno.
Dakle, dok je stvar u zagradi predstavlja njegov ulaz, ako ih ima,
stvar s lijeve strane predstavlja svoj izlaz.
I u ovom slučaju, prirast očito vraća int,
i tako int je povratni tip ove funkcije.
Što to znači da se vrate?
Doslovno, koristite ključne povratak i onda ako je ono što se vraćaju
desno od ključne riječi je cijeli broj,
zatim da je doista u skladu s onim što smo obećali.
Vi ne bi mogao učiniti nešto ovako - Zdravo, svijet - jer to je niz.
>> Očito, to nije cijeli broj.
Dakle, u kratko, teret je stvarno na nas, programer, biti specifičan
kao što smo se vraćaju i onda zapravo ide o tome povratka.
Kontekst ovdje sada da vaše računalo 'pamćenje je gigabajt, dva gigabajta -
god - možda je to i više, možda je manje,
ali računalo ga pogleda kao da različite dijelove.
Nešto ide tamo dolje, nešto drugo ide gore,
različite stvari ide u sredini, a danas smo samo početi ispričati priču,
ali vratit ćemo se na ovaj tijekom vremena.
Za sada, samo komad memorije mi stvarno stalo je tekst segment
jer da samo predstavlja 0s i 1s da zveka je outputted.
Dakle, kada ste pokrenuti naredbu na tipkovnici kao a.out
ili dvaput kliknite ikonu na Mac OS ili Windows,
Vaš program se učitava s tvrdog diska u RAM
i to je plopped na vrhu vašeg računala RAM-a, da se tako izrazim.
U međuvremenu, kao i vaš program počinje prikazivati ​​i glavni dobiva zove
u programu što je napisao ili program Microsoft ili Apple je napisao,
bilo koji od njegovih lokalnih varijabli završiti tamo dolje na dnu vašeg računala memorije.
Ali ako glavni pozivi još jedna funkcija koja sama ima varijable ili argumenti, oni završiti iznad nje.
A ako je to funkcija poziva nešto, oni kraj gore iznad njega, iznad njega, iznad njega.
>> I samo jednom funkcija se obavlja izvršenje ne stog ladice, da se tako izrazim,
početi da se niže i niže.
A to je ono što se tada, u malom, objašnjava zašto kada nazovete kocku
ili nazovete prirasta, koju prolazi u kopiju vrijednosti.
A što to znači slikovito je da doslovno pišeš broj 1
u drugom dijelu memorije, promjene koje jedan do dva u slučaju prirasta
ili da se sastoji od 8 u slučaju kocke, a zatim bacanje da pamćenje daleko
čim prirasta ili kocka funkcija vraća. Pitanje.
[Student] Gdje su globalne varijable pohranjuju?
Globalne varijable su pohranjene u ono što se trenutno zove se inicijalizirati podatke ili nepokrenute podataka,
Razlika je u tome, ako imate globalnu varijablu, a vi ga odmah dodijeliti vrijednost
sa znakom jednakosti, to završi na vrhu tamo,
i ako samo reći int x; bez vrijednosti, to završi nešto niži u RAM
jednostavno konvenciji.
Ostala pitanja? U redu.
Dakle, ova slika će se vratiti kao što smo dobili više snažan
s tim što možemo učiniti s računalom,
ali za sada, neka je imaju kratak uvod u kriptografiju,
specifična vrsta kriptografije koja ne riješiti sve svjetske probleme
ali ne rješava neke od njih.
U ovom slučaju ovdje, imamo nešto što se zove tajna-ključ kriptografija.
Tajna-ključ kriptografija, kao što ime sugerira, potječe iz sigurnosti tajnu.
>> Na primjer, ako ste bili u osnovnoj školi i da ste bili prolazi malo slovo tajnu ljubavnu
na dječaka ili djevojčicu ste bili zaljubila, ako ste htjeli da prođe tu poruku kroz publiku,
vjerojatno ne bi napisati takvo znanje engleskog ili što god vaš materinji jezik je.
Umjesto toga, možda ćete ga kodirati ili možda samo im poslati SMS poruku ovih dana.
No, možda zapravo prođe im notu cijelom razredu.
A za to sigurno na takav način da vaši prijatelji i nastavnike
ne znam što ti pišeš, možda ćete doći do prilično jednostavnog algoritma,
Mlada iako bi moglo biti, samo otimati riječi.
Dakle, umjesto pisanja možda pisati b,
umjesto b možda pisati c,
umjesto c možda napisati d, i tako dalje.
Ili ste mogli doći do više sofisticirane prijevoda
slova na različitim slovima.
No, kvaka je dječak ili djevojčica na koju šaljete ovu bilješku
treba nešto znati, a to je ono što, očito? >> [Student] Što šaljete.
Što tvoja tajna je, poput onoga da je mapiranje između-a i B i C je i d'e.
Je li to samo dodao jedan za svaki od slova ići od A do B, B i C?
Je li to složeniji od toga?
>> Dakle, vi i vaš simpatiju trebaju imati ovu tajnu informaciju,
ali tu je vrsta ulova-22 ovdje.
Ako je ovo vrlo prvi put šaljete ovo ljubavno pismo preko klase,
kako je da je dječak ili djevojčica će znati što je tajna, čak je?
Dakle, tajna-ključ kripto ne riješiti sve svjetske probleme,
i tu je zapravo odnos ovdje da ćemo se vratiti prema semestra kraja.
Isto to većina od nas ne zna nekoga da radi, na primjer, na Amazon.com,
i još mnogi od nas vjerojatno su kupili stvari na Amazon.com,
a mi smo učili pretpostaviti da ti e-commerce transakcija sigurna.
URL vjerojatno kaže HTTPS, tu je možda glupo lokota ikona negdje,
postoji neka vrsta kriptografije osiguravanje vaše podatke o kreditnoj kartici
između vas i Amazon.com.
A još ako kriptografija uključuje znajući neke tajne
i još ne znam nikoga na Amazonu, a ja sam sigurno nije dogovoreno bilo kakve tajne
s nekim na Amazonu, kako je moje računalo ili moj preglednik to?
Ispada da je druge vrste kriptografije uopce da riješi taj problem.
No, za danas, mi ćemo se fokusirati na jednostavan jedan
gdje možete dogovoriti unaprijed znati neke tajne
kao jedan ili nekom mapiranje između a i b-a.
A proces kriptografije općenito uključuje ovo.
Imate neki običan tekst, prikazano ovdje na lijevoj strani,
ćete ga pokrenuti kroz neku vrstu algoritma ili postupka za šifriranjem -
možda je to samo postaje b, b postaje c -
a zatim ćete završiti s šifrirana.
U međuvremenu, nakon što svoju simpatiju prima ovu tajnu notu,
on ili ona mora onda dešifrirati to po pravilu unazad da algoritam
kako da biste dobili leđa običan tekst.
Postoje fizičke inkarnacije to.
>> Na primjer, to je mala tajna dekoder prsten,
i to je prsten u smislu da postoje dvije biranja ovdje.
Na vanjskom rubu ove stvari, tu je slova od A do Z,
iako su u slučajnim redoslijedom,
i iznutra, tu je zapravo neki brojevi
tako da s ovim prstenom možete vrsta okrenuti izvana, ali ne unutar
kako bi se postroje brojeve sa slovima.
Iz filma pod nazivom Božićna priča, vidjet ćete da je malo Ralphie
bio toliko nestrpljiv da shvatiti što malo siroče Annie tajna poruka bila s njim
koji je komunicirao, mislim, u obliku brojčanih poruka na kutiji žitarica
i morali ste da se akumuliraju sve malo kartice koje ste dobili u kutiji žitarica,
imali ste ih poslati u, morali ste se vratiti tajni dekodera prsten
tako da napokon mogu shvatiti što je mapiranje između slova i brojki
ili slova i slova.
Kako u računalu možemo ići o primjeni ili predstavljaju stvari kao što je ovaj?
Trebamo način izražavanja sebe malo više fleksibilno
nego naši varijable dosad su dozvoljeni.
Mi smo imali Ints, imali smo slova, imali smo pliva i dubl i nekoliko drugih,
ali oni su pojedini komadi memorije koja stvarno ne dozvoljavaju nam da izraziti stvari
kao riječi i rečenica i fraza.
Doista, mi smo pozvani takve stvari konce,
ali smo obećanje da je to zapravo samo pojednostavljenje u CS50 knjižnici
da smo s namjerom da guliti natrag.
I tako krenimo učiniti da se ovdje.
Pusti me naprijed i otvoriti datoteku -
sve ove datoteke dostupni su, kao i obično, on-line - tzv array.c
riješiti problem nevezano za gudače, ali da daje sliku ovdje
kako bismo mogli koristiti nešto što se zove polje.
>> Niz je tip podataka.
To je tip varijable vrsta koja ima više manjih vrsta podataka u njoj
natrag na leđa natrag na leđa.
Tako na primjer, ako smo htjeli napisati mali program koji vam daje svoj komentar prosjek
za tečaj kao 50 koji ima dva kvizove,
da bi se vrlo lako napisati ovaj program koji se temelji i na neke od prošlotjednog materijala
pomoću GetInt i nekoliko varijabli: int quiz1, int quiz2.
I to je prilično jednostavan.
To je možda 10, 20 linija koda max provesti program
da pita korisnika za dva kviz rezultate i zatim izračunava njihov prosjek
dodajući ih zajedno, dijeljenjem dva, a zatim ispisuje rezultate.
Vjerojatno smo mogli učiniti da prilično lako sada nakon nekog broja minuta.
No, problem je u tome da pretpostavimo da je 50 imala 3 ili 4 kvizova.
Pretpostavimo da ste htjeli koristiti isti program za klasu koja je imala tjedno kvizova.
Razmislite o razredu koji je tjednik kvizovi.
Ako je 16 ili tako tjedana u semestru, sada imate 16 varijabli:
int quiz1, int quiz2, int quiz3, int quiz4.
Čim počnete vidjeti ovu redundantnost, to kopiranje i lijepljenje kôda,
to bi trebalo početi da želite tamo bili bolji način.
I hvala bogu, jer matrica je. Tako ćemo to učiniti.
Prvo, neka mi predstaviti vrlo jednostavnu stvar da nismo ste koristili do sada,
ali vidjet ćete ga povremeno u kodu.
>> To je ono što se općenito zove konstanta.
Dakle, to je konstanta u smislu da ta vrijednost ne mijenja.
Ljudska konvencija pri izradi konstanta
je koristiti sva velika slova samo tako da se stvarno ističe u svom kodu,
i posebna ključna riječ koju koriste u C # define.
Dakle, možemo reći # define, zatim razmak, a zatim riječ koju želite koristiti za konstantu imena
a zatim se za vrijednost konstante.
Obavijest to je razlikuje od dodjele nešto u varijablu.
Nema znaka jednakosti, nema zarez.
To je ono što je općenito poznat kao preprocesor direktive,
ali više na tom drugom vremenu.
Za sada, to stvara nepromjenjivu vrijednost zove KVIZOVI
čiji je stvarni numerička vrijednost je 2.
Pa gdje ste vidjeli kvizovi, kvizovi, kvizovi tijekom ove datoteke,
to je samo broj 2.
Ako gledam glavni sada, hajdemo vidjeti kako se to radi.
Prvo to izgleda malo zagonetan, ali to je sve stvari iz tjedna 1.
Pitajte korisnika za ocjenama. Kako ćemo to učiniti?
U skladu 22 - ovo je stvarno sočan dio - Ja proglasiti plovak
ali ne samo jedan plovak. Ja sam izjavljuje, nego niz plutajući-point vrijednosti.
To varijabla će biti pozvani razreda, kao podrazumijevana ovdje,
ali samo dio nove sintakse onda su ti četvornih zagrade.
Činjenica da sam rekao plutaju razreda, a zatim otvoriti konzole i zatim broj -
primijetiti ako je to konstanta je to baš kao što smo to učinili -
to znači, "Hej računalo, daj mi dvije pliva i ajmo kolektivno nazivaju ih razreda."
>> To je u suprotnosti s puno više zamoran proces ovako: float Grade1;
plutaju grade2, i tako dalje.
Dakle, niz nam omogućuje da provedbu tu ideju, ali mnogo manje messily,
na takav način da možemo napisati jedan redak koda umjesto, recimo, 16 za 16-tjednu semestra.
Nisam želio da teško kod dvije, jer ako mislite o tome sada logično,
Pretpostavljam da iduće godine CS50 promjene 3 kvizovi umjesto
i imala sam broj dva ovdje, imao sam broj dva ovdje,
Imao sam broj dva ovdje, broj 2 ovdje.
To postaje vrlo zamorno i vrlo lako zeznuti
i da slučajno promijeniti jednog vrijednost 3 i propustiti neke druge vrijednosti dva.
Dakle, ja ću umjesto apstraktne to daleko i koristiti ovu konstantu koja,
kao što mu ime sugerira, nikada ne mijenja.
A sada, bez obzira da li imamo različite kvizove ovu godinu ili sljedeću,
Samo moram ga promijeniti na jednom mjestu ovdje na vrhu.
Dakle, to je sve što je konstanta.
U međuvremenu, novi konceptualni značajka je da je niz.
Dakle uglatih zagrada mi dati toliko pliva i omogućuje mi da kolektivno zovemo ih razreda ovdje.
Dakle, sada ćemo vidjeti što ću učiniti.
Ovdje u skladu 24 je početak za petlju.
>> Ovo je stvarno ništa fancy. To je samo pomoću KVIZOVI umjesto tvrdog kodiranom broju.
Ali nema ništa intelektualno drukčiji postoji od prošlog tjedna.
Ovo je samo printf, pa printf ("Kviz #% d od% d:")
jer ja samo želim isprintati daj mi kviz broj 1 u 2, a zatim 2 od 2.
Dakle, ovo je čisto estetska stvar.
No, najzanimljiviji dio je sada u redu 27.
Kako bi se popunila u jednom od dva rezerviranih s pomičnim zarezom,
opet koristiti uglate zagrade.
U ovom slučaju, ja sam pomoću jer to za petlje je započeo s ja izjednačavanje što vrijednost, očito?
[Student] 0. >> [Malan] 0.
Dakle, na prvoj iteraciji ove petlje, to je kao da sam ovo napisao u kodu,
ali na drugoj iteraciji ove petlje, to je kao da sam ovo napisao u mom kodu.
No, činjenica da sam koristeći varijablu je savršen, jer, kao što ime sugerira,
to je različite svoju vrijednost na svakoj iteraciji
pa sam popunjavanje tom obilju jedno mjesto na vrijeme.
Što to polje izgleda?
Razlog zbog kojeg sam nacrtao super jednostavan pravokutnik na zaslonu ovdje prije bio iz tog razloga.
Niz je samo komad memorije slijedi drugi komad memorije
slijedi drugi komad memorije i tako dalje.
Dakle, ako moj polje je veličine 2 u ovom slučaju ovdje, sve bih raditi
upisivanjem u mojim kviz rezultate ovdje sviđa - Dobio sam 100 na ovom jednom, a onda sam dobio 99 na ovom jednom -
onda ova memorija možda čak i ne mogu koristiti jer sam samo pitao računalo
za niz veličine 2.
Ti kvadrati su još uvijek tamo, zar ne?
Vi još uvijek imate dva gigabajta RAM-a, čak i ako samo pitate za dva kola.
Dakle, ideja iza polja je da računalo traje samo komad memorije
a zatim razdijeliti manjih komada natrag na leđa natrag na leđa.
I tako to je sve niz je.
>> To je granični komad memorije unutar kojih možete staviti stvari.
To se događa onda napraviti samo neki dosadan aritmetiku.
Ako sam dođite ovdje, ovo je mjesto gdje sam tada ponoviti preko polja.
Ja se s zbroja svih vrijednosti u polju,
i onda sam koristiti okrugli funkciju ovdje zapravo zbroj podijeljen kvizovima.
No, dopustite mi mahati moje ruke na to kao svojevrsno dovoljno aritmetike za sada.
No, sve što radi za mene konačnici je računanje prosjeka.
Tako je prvi kviz plus drugi kviz podijeljena dva, a zatim ga ispisuje kao int.
Ali neka je sada prijelaz na drugi primjer zove string1,
koji oslikava sličnu sliku, ali pomoću žice.
Pusti me naprijed i pojednostaviti to samo na trenutak.
Oprosti uvlačenje za sada.
Obavijest u skladu 19. ovoga primjer, ja dobiti niz od korisnika.
No, ono što sam primijetio pored radim u redovima 22 naprijed.
Ja sam zapravo Ponavljanje iz i do - i to je novi trik - strlen, dužina niza.
To je funkcija koja dolazi s C da ako prođe ga niz,
to vam govori koliko su likovi u tom nizu. To je sve.
A činjenica da je strlen umjesto niza duljine je samo zato što je više jezgrovit.
Prije trideset godina, ljudi volio pisati stvari kao jezgrovito je to moguće,
pa smo je zadržao tu konvenciju ovdje.
i + + samo znači da sam povećavati u svakoj iteraciji.
I sada primijetiti, što je jako zanimljivo.
U skladu 24, kažem, "Računalo, daj mi znak, 8 bita, i to nazvati c."
No, ono što je ovaj na desnoj strani govori?
U engleskom jeziku, što znači da predstavljaju?
[Student] Prvi znak u polju.
Točno. Daj mi prvi znak u nizu.
Ili, općenito, daj mi ith znak u polju.
I shvatiti da je važno da sada kao računalnih znanstvenika,
mi zapravo računajući od 0.
>> Vi nemate diskrecije sada početi raditi ovo.
Sada imate da se ponašaju u skladu s računalom očekivanja i brojati od 0
jer [0] će biti prvi znak u nizu,
[1] će biti drugi, [2] će biti treći, i tako dalje.
Dakle, ovaj program, ako sam ga sastaviti, to je opet string1, tako da bi string1,
i sada sam pokrenuti string1 u mom prozor terminala.
To je čekao ulaz, pa ću upisati u Davidu, Enter
a sada ispisuje Davidu sve na različitim linijama, jer obavijest što radim.
Ja sam ispis jednog znaka na vrijeme.
Nećemo ulaziti u detalje i danas o tome, ali sam izbrisao trenutak prije ove provjere ovdje.
Ispada da ako korisnik ispravno, suparnički, ili samo zbunjeni,
zapravo možete uspjeti dati niz neke dužine.
Ako pogodak pogrešnu tipku na tipkovnici, možda ne daju niz na sve,
ili ako ste zlonamjerni, možete pokušati zalijepiti u gigabajt vrijedi za esej
ispuniti ovaj niz, a ako računalo ponestane memorije,
Ispada da ćemo dobiti natrag ovu posebnu vrijednost zove NULL.
Dakle, za sada, samo znam da je ovo posebna vrijednost zove NULL
koji će nam omogućiti da provjerite kada smo iz memorije, između ostalog.
Ali, ako sam otvoriti sada string2, primijetit jedan razliku ovdje.
Obavijest jedna razlika ovdje s string2.
S string2, to za petlje je malo drugačija.
>> Dopustite mi izbrisati ugašenih, tako da možemo govoriti o onima drugi put.
Što je drugačije u for petlji ovaj put?
Ja mogu ići natrag u prethodnom primjeru.
Tako da je verzija 2, ovo je verzija 1. 1, 2.
1, 2.
Strlen poziv je gdje?
To je u prvom dijelu za petlju.
Bilo misli o tome zašto radim ovo? Da.
[Student] Pa ne zovu funkcija svaki put.
[Malan] Dakle, mi ne poziva funkcija svaki put. Točno.
Podsjetimo iz petlje za koje su oni super jednostavna
nakon što vrsta shvatiti da je to inicijalizacije, stanje i ažuriranje.
Problem je u tome što uvjet događa na svakom iteracija petlje.
I tako u ovom primjeru ovdje, ono što je loše o činjenici da je ovo moje stanje?
[Student] Ti si pozivom strlen.
[Malan] Vi zovete strlen opet i opet i opet.
Ali jednom sam upisali u Davida, duljina tog niza je 5,
i to se neće promijeniti na svakom iteracija petlje
jer je string još D-a-v-i-d.
Dakle, ovo je naznaka na ono što će postati sve važniji ideja
poznat kao dizajna odluke gdje jednostavno ne bi računalo učiniti nepotreban posao.
>> Baš kao doušnik pregled pset2, pset2 u standardnom izdanju
će vam izazov da se zapravo provesti neki broj šifre,
neki broj algoritme šifriranja, tako da možete i šifriranje
i dekriptirati tajne poruke puno poput jednog Ralphie postoji dekodirati.
U hakerske izdanju pset2, idemo ići malo dalje.
Mi ćemo predati vam datoteku iz stvarnog računalnog sustava
koji sadrži hrpu korisničkih imena i lozinki stvarnih šifrirane,
i izazov za hakerske izdanje će biti ispucati one lozinke
i shvatiti što kriptografije ili ono što je tajna koristi za generiranje zapravo one lozinke.
A mi ćemo to učiniti pomoću novu značajku ovdje o C
da ću vam dati samo demo poznat kao naredbenog retka argumente.
Ispada, kao što neki od vas možda vidio u dijelu ili u udžbenicima,
Glavna ne mora uvijek biti nevažeće u zagradama.
Ispada da glavna također može pisati ovako, s dva argumenta,
argc i argv, gdje argc je broj riječi
da upišete nakon što je program imena na naredbenog retka
i argv je stvarni riječi.
I kao uglatim zagradama tamo sugeriraju, argv je očito polje.
To će biti niz nakon niza nakon niza u sjećanju.
>> Dakle, ono što ćemo biti u mogućnosti to učiniti počevši s pset 2 je nešto poput ovoga.
Ako sam napraviti argv1, što je primjer vratit ćemo se u ponedjeljak, i pokrenuti ga,
primijetiti da to ne čini ništa učiniti još.
To samo ispisuje svoje ime.
Ali ako kažem zbogom klase, obavijest da je ovaj program očito ponovi
tijekom svake od riječi koje su upisali u redak.
A način na koji ćemo dobiti pristup riječi koje korisnik unese u redak
je promjenom glavni počinju ovog vikenda od int main (void) int main (argc, argv)
i tako će biti rođen naredbenog retka argumente.
I jednom kada se stvarno sofisticiran na to, vi ćete biti u mogućnosti pisati stvarno trippy programe
kao što je ovaj ovdje, koji ide iznad i izvan
neke od funkcionalnosti koje smo učinili do sada, ali sve vrlo moćan.
>> Dakle, ostavit ćemo to s tim na ekranu, a mi ćemo vas vidjeti u ponedjeljak.
>> [CS50.TV]