>> PROFESORUL: Deci ordinea de zi în această săptămână, nu atât de mult lucrurile.
Dar sperăm foarte, foarte util și relevante pentru voi în această săptămână.
Dar vom să-și petreacă, poate 15, 20 de minute doar vorbesc repede
despre lista de link-ul.
Listele Link sunt de gând să fi acoperite pe testul.
Deci, poate că ar fi foarte util pentru a afla un pic despre ceea ce este.
>> Mergem să-și petreacă marea majoritate majoritate din secțiunea de astăzi
trecând peste problemele practice test de zero.
Și apoi vom salva, poate 20, 30 minute la sfârșitul pentru orice intrebari lungite
cineva are.
>> Apoi, ultimul cinci minute, am de gând
pentru a da un discurs pompă pentru testul.
Voi toți vor să fie aici pentru asta.
Pentru că va fi un moment bun.
>> Bine, unele material de pe lista de link-ul.
Cum acestea sunt de obicei structurate este aveți ceea ce se numește un nod, nu?
Aveți aceste lucruri numite noduri, care sunt structs.
Voi trece peste modul de a crea un nod in slide-ul urmator.
Dar, în esență, toate legate liste este este de date care
a fost înșirate împreună prin indicii.
>> Și astfel avem avantajul de a folosi o listă legată de peste,
probabil, ca o matrice, este faptul că într-o matrice
aveți nevoie de un bloc continuu de memorie toate în același loc, o
după altul, pentru a putea avea ca.
Întrucât o listă legată, ai putea au biți aleatorii mici de memorie
peste tot computerul insirate de indicii.
>> Și în acest fel pot accesa informații
care vine după o parte, după alta
fără a avea nevoie doar o bucată mare de memoria calculatorului undeva.
Și astfel încât acesta este unul dintre cele mai importante motive pentru care le folosim lista link.
>> În al doilea rând, este foarte ușor să dinamic redimensiona lista link, deoarece în matrice,
atunci când declară o matrice, aveți o anumită valoare stabilită.
Să spun că am vrut să creeze o serie de 10 numere întregi.
Am crea o serie de 10 întregi, și asta este.
E 10.
Nu știu ce să fac după aceea.
Dacă aș fi vrut să fac 11, nu se poate face acest lucru.
Dacă vreau să fac 9, nu se poate face acest lucru.
>> Întrucât într-o listă link, puteți adăuga și șterge și introduceți oriunde doriți.
Puteți redimensiona dinamic dvs. structura aici, structura de date.
Și asta ne dă o mulțime o mai mare flexibilitate a adăugat
că nu de obicei au cu matrice.
>> Oricine confundat pe bază Structura modul în care o listă de link este
sau de ce trebuie să folosim o pe un tablou?
Da, vom trece peste în detaliu Cum de a crea de fapt o.
Dar aceasta este doar un fel de sensul general acum.
Misto.
Și astfel matrice sunt înșirate împreună de aceste lucruri minunate mici
numite noduri.
Toate un nod este este un tip de struct.
Amintiți-vă, o struct este dacă ai vrut pentru a crea un anumit tip de variabilă
în C, care nu deja Există, tu, ca un programator,
pot crea de fapt asta te.
>> Și așa mai departe acest tip de date Structura este numit un nod,
a fost de fapt creată de noi, că nu există în C pe cont propriu.
Și modul în care că crea unul este aveți
antetul typedef struct, care spune compilatorului sunt
pe cale de a crea o struct.
>> Vom nume îl "nod".
Și în interiorul vom să declare o variabilă în,
care este de gând să stoca o valoare.
Și apoi vom merge la asemenea au un pointer numit "next"
care indică spre următoarea nod în lista de link-ul.
Și apoi ați terminat că off doar prin repetarea nod din nou, astfel
compilatorul stie, OK că e sfârșitul struct meu.
>> Și în acest fel, suntem un fel de a crea o gamă drăguț
un fel de lucru, cu o valoare și cu un pointer.
Și le puteți lega toate împreună cu acele indicii.
Astfel încât să poată fi tot felul înșirate împreună într-un lanț.
>> Misto.
Auzi că un pic mai bine?
>> Audiența: Da.
>> PROFESORUL: Bine.
Deci felul în care, așa cum voi poate vedea, o listă tipic link este structurat
este ai un cap.
Ai valoare cap, care nu este fiind indicat de către orice alt pointer.
Dar o să arate la, sau trimitere, un alt nod.
Nodul după va referință nod după aceea, și așa mai departe și așa mai departe
în cele din urmă a lovit până când la sfârșitul listei link-ul.
Și tu chiar nu va avea un pointer acolo.
>> Și astfel, cred ca, pe un lanț, sau chiar dacă oricare dintre voi efectuate, nu știu,
ca cu fructe Loops când erai mic.
Tu ar string-le împreună și le purta în jurul gâtului.
Cred că e exact același lucru.
Aveți aceste lucruri mici pe care le poate șir împreună acest punct de o
după aceasta, la cea de după l, și așa mai departe și așa mai departe
până când veți avea un lanț de o structură de date
pe care le puteți utiliza totuși doriți.
>> Deci modul în care această ne-ar de obicei insera sau șterge
orice nod dintr-un link Lista este foarte diferit
în funcție de cazul în care acest nod este.
Astfel, de exemplu, deoarece indicii sunt întotdeauna
arătând spre o anumită valoare, atunci când ștergeți sau introduceți un nod,
doriți să vă asigurați că indicatorul este tot arătând spre lucrurile corecte.
>> Deci, dacă ai vrut să potential insera un nou nod cu valoarea de un
în interiorul unui link sortat Lista, știm cu toții aici
de la imaginea pe care o să du-te în cap și între două, nu?
Pentru că se potrivește acolo.
Dar modul în care ne-ar face asta este de dereferencing întâi indicatorul
de la cap și trimiterea care unul.
>> Dar noi vin în o problemă aici.
Poate cineva vedea ce problema este dacă noi am fost la prima dereference
indicatorul de la cap la unul?
Ce problemă am putea rula în cazul în care vom încerca pentru a adăuga acest la partea din față a matrice noastre?
>> Audiența: [inaudibil]
PROFESOR: Exact.
Deci, aici avem un pointer, care a fost odată arătând din cap la două.
Dar dacă te scapa de care pointer, îl indica o,
acum avem nici o idee în cazul în care pentru a merge pentru a găsi două.
Pentru că așa cum am spus mai înainte, ai o bucată uriaș de memorie în computer.
Toate aceste noduri ar putea fi intercalate aleator
în orice loc în calculatorul dumneavoastră.
Și tu nu știi cum pentru a merge cu privire la constatarea că.
>> Și așa trebuie să aveți indicii arătând spre toate nodurile la sfârșitul anului.
Sau, dacă din greșeală dereference unul
fără a atribuirea o valoare în primul rând, ești
doar de gând să-și piardă totul după aceea.
>> Deci, ce vom face este, v-ar mai întâi
doriți să creați un pointer pe nodul pe care doriți să inserați.
Punctul acesta de unde ai doriți să-l inserați la,
și apoi după aceea te ar putea indica cap înapoi la unul.
>> Asta face sens pentru toată lumea de aici?
Grozav.
Ganditi-va ca la fel ca un lanț.
Dacă adăugați un lanț, e un fel de intuitiv
cum te duci despre introducerea ai asta.
>> OK, astfel încât este de fapt mult mai scurt decât am gândit că ar fi,
un Spiel de cinci minute pe liste de link.
Doar așa voi avea idee de bază a ceea ce este asta.
>> Aici avem ordinea de zi pentru test zero.
Nu lasa acest lucru vă intimideze.
Știu că o mulțime de informații.
Se pare foarte infricosator.
Este, de asemenea, o mulțime de, am cred, CSC fel de termeni.
Lucruri cum ar fi siruri de caractere hexazecimale, indicatori, alocări de memorie dinamică
sunt termeni de sondare foarte infricosator.
>> Dar vom pentru a le sparge jos, face unele probleme practice
astfel încât voi toți sunt gata pentru acest test.
Câți dintre voi avea deja a inceput sa studieze?
>> OK, voi dori, probabil, pentru a începe a începe
pe faptul că, pentru că testul este mâine.
Sau joi pentru unii dintre voi.
Da, așa că merge asupra unor probleme practice.
Dacă voi toți doresc să ia o foaie de hârtie, un creion.
Vom să-și petreacă doar marea majoritate a secțiunii de astăzi
trecând peste unele din așa voi avea o idee de ce sa se astepte pe testul.
>> BINE.
Un cuplu de logistică Detalii De asemenea, pentru oricine
care nu a fost de a care se leagă acolo, în cazul în care te duci la cs50.yale.edu, pe frontul
această pagină există o legătură care spune "About Quiz Zero."
Link vă duce acolo.
Dacă nu l-au citit, vă rugăm să-l citiți.
Pentru că vă spune foarte important informații cu privire la testul.
>> Am de gând pentru a trage de la acest că doar pentru că, fizic,
dacă voi nu știți de unde pentru a merge, vom avea probleme.
Și astfel, în cazul în care ultima din punct de vedere cu o la N, merge la sala facultatea de drept.
Și dacă ultimele tale începe cu P la A la Z, du-te la Davies Auditorium.
Și acest lucru este valabil numai pentru persoane în secțiunea miercuri.
>> Daca luati testul pe Joi, te duci la SSS 114
în cazul în care de obicei este curs dumneavoastră.
Audiența: [inaudibil]
PROFESORUL: O să Z, ai de gând pentru a merge la sala Davies.
Am de gând să se schimbe asta, nu?
>> Oh, da, tu doar nu în mod automat.
>> Oh, da, că e Christa.
Da, rău mea.
Da, O la A la Z, ai de gând pentru a merge la Davies Auditorim.
Am de gând să se stabilească data asta am încărca.
Da.
>> Și apoi, de asemenea, ceva important de minte
este că, miercuri, în cazul în care sunteți în mod oficial înscriși în secțiunea Miercuri,
trebuie să ia testul pe miercuri.
Și dacă sunteți înscriși în Joi, trebuie să ia testul dumneavoastră joi.
Și e timpul de clasă.
În cazul în care, cred că e ca și cum 01:00 la 02:15 în zilele de miercuri și 2 jumate - 03:45
joia.
>> Dacă aveți un conflict ireconciliabile, Scuze Dean sunt singurul lucru,
Din păcate, putem lua.
Pentru că am avut o marea majoritate a cererilor
pentru a comuta de miercuri spre joi.
Care nu putem onora cu excepția cazului în avem o cerere lui Dean.
>> BINE.
Deci, înainte de a începe pe o câteva probleme de practică,
Mă duc pentru a trece peste Sfaturi utile lui Andy pentru succes.
Voi, atunci când studiezi, chiar doresc să practice scrierea de cod de mână.
Prima dată când am vreodată a luat un test CS, nu am
Codul practică scris de mână înainte și a fost extrem de
șocant la cât de greu a fost.
>> Când voi nu intra în obiceiul de a tasta totul,
este vorba de foarte natural fiind posibilitatea de a avea autocompleted
paranteze și punct și virgulă acolo.
Atunci când îl scrie de mână, uneori e
foarte, foarte usor sa uiti un punct și virgulă, sau uita pentru a închide un suport,
sau uita pentru a închide un colon, sau asa ceva.
>> Deci, atunci când scrie cod de mână, e un foarte diferit simt.
Deci voi, atunci când lucrați prin unele dintre problemele de practică,
ar bună de a practica într-adevăr astăzi.
Sau mâine, cred că, dacă sunteți luând testul de joi.
>> În al doilea rând, avem ultimul, cum ar fi, în valoare de opt ani de practică
chestionare on-line.
Test din acest an va fi, probabil, foarte, foarte asemănătoare cu toate acestea.
Sunt foarte similare.
Tu fel de a lua în Stilul de tipul de întrebări
cerem, de tipul de funcții care vom scrie în,
etc., etc..
>> Deci, ia chestionare practică, mai ales sub constrângeri de timp.
75 de minute pentru a face testul este nu o mulțime de perioadă de timp.
Este foarte, foarte mult timp.
Și așa vreți într-adevăr să vă asigurați că voi sunt
în obiceiul de a scrie Codul de mână repede.
Pentru că nu vrei primul timp pentru a vedea un test de care lungimea
fie pe testul tău.
Voi într-adevăr doriți să vă asigurați pe care le practică în prealabil.
>> În al patrulea rând, pe care doriți să revizuiască curs și diapozitive. secțiune
Nu trebuie să memoreze lucruri.
De fapt, toată lumea este permis un o foaie de note Cărții albe,
fata si spate.
Voi puteți tasta sau scrie.
Dacă vă aflați nevoie să memoreze ceva, pune-l jos pe această foaie.
>> Îți garantez, nu vrei să fi blocat în mijlocul care test
fiind ca, oh da, ceea ce este execuție de acest fel față de acest tip.
Doar pune-l jos și copiați-l direct de la foaia de notă.
Atunci de fapt, puteți folosi doar dvs. creier să se gândească la problemele
mai degrabă decât să se amintească fapte.
Și astfel încât să ia într-adevăr profite de orice detalii de nișă
care credeți că aveți nevoie să memoreze, plop-l pe foaia de revizuire.
>> OK, orice întrebări logistic în ceea ce privește testul
înainte de a începe ceva Probleme test practica?
Da?
>> Audiența: Nu am avut o șansă să se uite la testul [neauzit]
dar este mergi la a fi aplicație cea mai mare parte,
Sau există, de asemenea, va fi, cum ar fi, întrebări de cunoștințe?
>> PROFESORUL: E mult.
Deci, modul în care am ar descris testul
este-- am pus împreună unele probleme practice
că am tras din toate chestionare.
Dar veți vedea că există două principale tipuri de întrebări vă vom solicita.
>> Una dintre ele este un detaliu nivel foarte scăzut de lucruri.
Vă vom oferi o mică bucată de cod și spune, există o eroare aici?
Ce s-ar fi imprimarea aici?
Ce va produce acest cod, etc..
Deci Detalii informatii nivel foarte scăzut.
>> Și pe de alta parte, vom avea foarte înalt nivel întrebări bazate pe cunoaștere.
Poți explica ce diferența dintre o căutare binară
și o căutare liniară este?
De ce ar vrea să ne utilizați una peste alta?
Poate că, ceea ce este GDB?
De ce vrem să utilizați GDB?
Nivel mai înalt, mai fundamental întrebări înțelegere.
Astfel încât veți vedea un amestec de două dintre ele pe testul tău.
>> Orice altceva înainte de a ne capul direct în ea?
BINE.
Audiența: Încă o.
PROFESOR: Oh, unul mai mult.
Scuze.
>> Audiența: Da, e în regulă.
Deci vrei să spui 75 de minute este prea scurt, este puțin probabil ca ea
pe care le vom termina?
Sau, cum ar fi, 75 de minute este exact la fel de mult timp
ca am avea nevoie de, dacă am pregătit corespunzător?
PROFESOR: OK, deci test este o provocare.
Acesta este cu siguranta o provocare.
Veți găsi te scurt la timp.
Esti, probabil, va lovi, cum ar fi 10, 15 minute pentru a merge, și de a fi cum ar fi, rahat.
Am atât de multe de făcut.
Și asta e în regulă.
Toată lumea o să se simtă la fel.
>> Doar să fie foarte conștienți de cât de mult timp ai.
Și așa de aceea vă spun baieti face chestionare practică.
Pentru că într-adevăr dă un sentiment mare de ce testul va fi ca.
Deci, dacă vă aflați fiind posibilitatea de a terminat practica
teste într-o sumă bună de timp, vă puteți ritmul bine,
atunci nu veți avea o problemă miercuri sau joi.
>> Misto.
Deci, dacă toată lumea wants-- cred cei mai mulți oameni au de coli de hârtie
out deja.
Am de gând să, în esență, doar vă dau întrebări eșantion,
vă dau băieți, cum ar fi, un câteva minute să le facă.
Și vom trece peste ca o clasă ceea ce răspunsuri la ele sunt.
>> Deci, aceasta este o foarte tipic Întrebarea devreme am să
vă întreb, doar de conversie numere între diferite baze.
Binare, ca voi poate Reamintim, este baza doi.
Zecimal este de bază 10, sau ceea ce noi ca oameni de obicei interpreta.
Hexazecimal este baza 16, care este zero prin noua precum A prin F.
>> Deci nu e de patru numere Sunt cere voi de a converti aici.
Voi da iti place, de trei până la patru minute să se gândească prin modul în care
ne-ar merge cu privire la rezolvarea acestei.
>> Audiența: Avem voie calculatoare?
>> PROFESORUL: Nu va nevoie calculatoare, da.
Cred plus de bază, cred eu, este toate voi se va cere să facă.
>> Și așa că am un fel de un sentiment de atunci când toată lumea se face, privi în sus,
val, nu știu, zâmbet, uite fericit dacă ați terminat.
Da.
Poate un cuplu mai multe minute.
>> OK, hai să-l aducă în.
Am intenționat de gând să vă dau baieti mai putin timp
decât, probabil, aveți nevoie pentru a face unele dintre aceste probleme,
pur și simplu pentru că vreau să vă asigurați că vom obține printr-o mulțime de probleme.
Deci, nu vă faceți griji dacă nu au o șansă pentru a termina.
Total OK atâta timp cât aveți o idee de cum să meargă despre asta.
Așa că hai să mergem mai departe și de a face primul.
>> Deci în primul rând, nimeni nu vrea să-mi spună în binar, ceea ce fac fiecare dintre aceste cifre
reprezintă din punct de vedere valorile lor?
Da?
>> Audiența: Doi la zero de energie, două la unu.
PROFESOR: Exact.
Asa ca.
>> Corect, așa de obicei atunci când suntem în baza 10
Toate acestea reprezintă sunt, cum ar fi, 10 la baza de la zero, nu?
Asta e locul unul tău.
Toate locul 10 este este 10 la puterea de unul.
Loc unde 100 este 10 la puterea a două.
>> Indiferent de bază sunteți în se întâmplă de a face cu exact același lucru,
doar cu o bază diferită.
Deci binar, tot ceea ce este este baza doi.
Vei pentru a converti toate cifre în două la orice putere
din cifre.
Și astfel, în acest sens, pot avea o cale mai ușoară
de a putea adăuga în sus sau în suma toate numerele în ordine
să se transforme într baza 10.
>> Deci, nimeni nu vrea să-mi spună ce răspuns la prima dintre ele este in baza zece?
>> Audiența: Doi, [neauzit]
PROFESOR: Da.
Audiența: 42.
PROFESOR: 42, acolo te duci.
Deci modul în care am primit acest răspuns a fost de face doua primul, care este de două.
Plus doi al treilea, care este de opt.
Plus doi la a cincea, care este ceea ce este lăsat de peste.
Le-ai rezuma și e 42.
>> Este cineva confuz cu privire la modul avem asta?
Plus Deci de bază, cum ar fi I-am spus, ar trebui să fie OK.
Dacă nu, ei bine, putem practica asta.
Dar asta e în regulă.
Misto.
>> Nimeni nu vrea să-mi dea răspunde la al doilea, precum și?
>> 50?
Bine.
Oricine confuz cu privire la modul avem ca fie?
Rece, voi avea răspunsuri pe slide-ul urmator.
Deci, nu vă faceți griji, dacă trebuie să-l copiați.
>> OK, deci hexazecimal este un pic mai complicată.
dar am de gând să-ți arăt baieti o comandă rapidă pentru cum se face.
Deci hexazecimal, în timp ce amintiți-vă, tot ce este să fie de 16.
Si pentru ca noi ca oameni nu de fapt avea 16 numere pentru a reprezenta,
mergem de la zero la nouă, care prima noastră 10 valori, iar apoi vom face o prin F,
care sunt următoarele șase valori.
>> Și astfel cel mai simplu mod de a merge de la orice număr binar la hexazecimal
este de a le rupe în două părți.
Și astfel orice număr binar vom da va avea, probabil, opt cifre.
Puteți rupe doar le în mijloc.
>> Deci, primul Unu o unul, unul singur, unul, unul, unul singur.
Un fel de ea cred că, știi, trage o bară oblică sau o virgulă între ele.
Și tu poți converti doar direct indiferent
aceasta este la primul numărul de hexazecimal,
și orice aici este de a al doilea hexadecimal.
>> Deci, amintiți-vă de la notație comun, Ce valori hexazecimale începe cu?
>> Audiența: Zero.
>> PROFESOR: 0X.
Deci, noi știm că în orice moment vă rugăm pentru a converti orice număr de hexazecimal,
sau în orice moment veți vedea orice număr care începe cu 0X,
știi că este o valoare hexazecimală.
>> Și apoi vei fi rugat să determina ce aceste două cifre sunt.
Și modul în care face acest lucru, de numărare a voturilor de până că jumătate și de numărare a voturilor în sus că jumătate.
Deci, în acest exemplu, ceea ce ar fi o, unul, unul, unul fi?
Ce valoare ar fi asta?
Ar fi F, nu?
Ar fi de 15.
>> Deci, acest lucru ar fi F. One, unul, unul, unul aici este, de asemenea
F. Deci unul, unul, unul, unul, unul, unul, unul, unul în hexazecimal, tot ce este este 0xFF.
Deoarece această jumătate a reprezentat F, valoarea 15,
și această jumătate a reprezentat F, valoarea 15.
Pentru că amintiți-vă, suntem numărare de la zero la nouă.
O este ca de 10, B este ca 11, F este de 15.
>> Are vreun sens pentru toată lumea cât de am ajuns de la binar la hexazecimal?
>> Audiența: Și așa cum am ajuns 15 din unul, unul, unul, cel?
PROFESOR: Da, aceasta este binar, nu?
Imaginați-vă acest lucru este doar un număr binar.
Deci, aveți două la zero, care este unul.
Audiența: Oh, OK.
Deci, tu doar Total din.
>> PROFESOR: Da, și apoi doar totală asta.
Asta e tot ce este.
>> Audiența: OK.
>> PROFESOR: OK.
>> Audiența: Deci, te duci la binar în zecimal la hexazecimal?
>> PROFESORUL: Asta e cel mai simplu mod de a face acest lucru, da.
Nu te duci în zecimal, deoarece zecimal are numai la zero la nouă.
Suntem doar un fel de divizarea asta în două.
>> Audiența: [inaudibil] folosind zecimal pentru a găsi
ce se potrivește de până la hexazecimal.
PROFESORUL: Vreau să spun, tu ești numărare a voturilor folosind matematica de bază.
Audiența: Da.
PROFESOR: Da, destul de mult.
Este un pic confuz.
Dar știu doar că te poate împărți orice
Această valoare este în doar jumătăți.
Uite, ce e asta în binar?
Ce număr este asta?
O să fie ceva de la zero la F.
>> Aici este, de asemenea, va fi ceva de la zero la F.
Și apoi puteți pune doar cei doi chiar acolo.
>> Audiența: OK.
PROFESOR: Da.
BINE.
Deci, voi doriți să încercați următoarea, atunci?
Zero, unu, zero unul, unu, zero, un zero.
Îți dau tipi ca 30 de secunde, din moment ce, probabil, nu știu
truc pentru a cum se face acest devreme.
>> OK, oricine doriți să obțineți asta o lovitură?
>> 0X5A.
PROFESOR: 0X5A.
5a.
Bine.
Deci, asta aici ar be-- doriți pentru a ne spune cum ai ajuns asta?
În primul rând, cum ai ajuns cinci?
>> Audiența: Pentru că la zero, unu, zero, unul este de cinci.
>> PROFESORUL: Are toată lumea să înțeleagă De aceea zero, unu, zero, unu este de cinci?
Ai o aici.
Nu ai nimic în două la primul.
În două la al doilea, tu unul, care este de patru.
Astfel încât să adăugați patru plus cel, ai cinci.
Toată lumea bună?
BINE.
Și atunci ce să fie aceasta și de ce?
Ce număr are un corespunde?
>> Audiența: 10.
>> PROFESORUL: Și ce acest lucru în baza doi?
Audiența: [inaudibil]
PROFESOR: Exact.
Deci, acest al doilea valoare aici ar fi 0X5A.
>> Toată lumea bună cu privire la modul de a converti?
E mult mai simplu decât credeți că este.
Vreau doar să vă asigurați știi sfaturi utile
si trucuri pentru cum sa fac asta.
>> Audiența: De ce tocmai ați împărți l la mijloc de genul asta?
La fel fie ca, bine, eu sunt doar de gând să pasa de aceste primul [Inaudibil]?
>> PROFESORUL: Pentru că asta e de fapt mod valori hexazecimale sunt reprezentate.
0X, care înseamnă, de fapt nimic altceva decât vă spune
că este un număr hexazecimal.
Și aceasta reprezintă întotdeauna primele patru cifre.
Și aceasta reprezintă întotdeauna ultimele patru cifre.
Și așa mai departe aceste două cifre doar corespund diferitelor biți.
>> Audiența: Deci, vom always--
>> PROFESORUL: Ești mereu mergi la a lua opt biți de valoare.
>> Audiența: Este la fel ca un lucru aici sau un lucru peste tot?
PROFESORUL: Asta e doar un lucru în computere, da.
Audiența: OK.
Incredibil.
>> PROFESOR: De asemenea, astfel încât în ​​acest exemplu am convertit de la binar în zecimal,
și de la binar la hexazecimal.
Vreți să vă asigurați că, de asemenea, practica merge invers.
Deci, dacă am dat 0xFF, ai putea trage ca în binar, nu?
>> Să converti F în binar, care este unul, unul, unul, unul,
converti F la binar, care este unul, unul, unul, unul.
>> Deci vă putem solicita să faceți invers.
Deci zecimal în binar, sau hexazecimal în binar.
Deci, doriți să faceți vă că știți în ambele sensuri.
Vom probabil, pune o combinație între cele două.
>> Da, ai o întrebare?
Pot see-- esti bun?
Audiența: Da.
PROFESOR: OK.
Sunt bun pentru a șterge acest lucru?
Grozav.
>> Bine, așa că răspunsurile sunt aici dacă cineva Este curios mai târziu și a obține confuz.
BINE.
>> Audiența: Contează dacă punem scrisorile noastre din Capitol sau litere mici?
>> PROFESORUL: Aceasta nu, pentru că în hexazecimal, prin convenție,
toate personajele sunt majuscule.
Deci, un prin F sunt O să fie majuscule.
Dacă puneți un minuscule o, nu știu dacă ne-ar marca în mod obligatoriu greșit.
Dar teoretic, asta nu e punct de vedere tehnic
cum că ar trebui să-l aibă.
Astfel încât acestea ar trebui să fie toate majuscule.
Da, bine întrebarea.
>> BINE.
A doua întrebare.
Luați în considerare acest program minunat aici.
Voi pune întrebarea, Voi reveni la această.
>> Deci, în primul rând, ceea ce este în interiorul standardului io.h care este de interes pentru programul?
În al doilea rând, ceea ce face void semnifică în conformitate trei?
Și în al treilea, ce se întorc de la zero, principal, ca linie de șase, în general, înseamnă?
Dacă vreți să scrie cele jos, deoarece am pentru a comuta înapoi
la diapozitivul doar astfel încât să puteți vedea codul.
Acesta este un exemplu de, cum ar fi, poate o Întrebarea nivel mai ridicat în cazul în care cerem
ce lucruri înseamnă într-un program.
>> Toata lumea buna pentru mine să du-te înapoi la slide?
Bine, in regula.
Așa că voi da tipi ca poate trei minute să se uite la asta rapid reală.
>> OK, deci asta e ca destul de usor, conceptual.
Nimeni nu vrea să-mi spui ce-i prima reușită de hash, inclusiv
standardul fișierul nostru de bibliotecă io.h?
De ce avem nevoie de acea bibliotecă inclus pentru acest program?
Ce aici avem nevoie de el pentru?
>> Da?
>> Audiența: este că atunci când ai pus asta printf?
>> PROFESOR: Exact.
Deci printf, oricând ia o intrare de la utilizator
și ceva de imprimare la ecran, care este
intrarea standard, bibliotecă de ieșire.
Ganditi-va ca way-- de intrare, ieșire.
>> Nu am o ieșire?
Da.
Deci, eu știu că am întotdeauna o să nevoie de biblioteca Standardizarea i.o.
>> Deci printf este funcția prin care avem nevoie pentru a accesa
și hashtag Includeți biblioteca standard i.o.
BINE.
>> În al doilea rând, aceasta nu semnifică gol ce?
Avem int main (void), ceea ce face anula aici înseamnă aici pe linia trei?
Da, în spate.
>> Audiența: [inaudibil]
>> PROFESOR: Exact.
Deci ține minte, ne-am învățat incepand cu PSET nostru
pe care le poate de fapt specificați în linia de comandă
argumente care programul, pe care le Funcția principală, are ca și tine, utilizatorul,
numesc.
Dacă avem gol, înseamnă că ați ar putea rula doar programul direct
fără nici un argument în linia de comandă.
Toată lumea clar pe care?
BINE.
>> Și, în fine ce ne facem deranjez acest lucru întoarcere la zero aici?
De ce nu, chiar avem o principală Int?
De ce nu putem avea doar void main void?
Da?
Audiența: Doar astfel încât să putem asigurați-vă că programul este
ieșirea cu succes, așa cum spre deosebire de cazul în care a fost numerotat.
Si ne-ar ști că asta e un alt fel de eroare.
>> PROFESOR: Da, exact.
Aceasta este doar o foarte lucru convențional pe care o facem,
este faptul că doar la sfârșitul programul, doar pentru a vă asigura
că funcția principală se execută corect,
mereu am dori să facem întoarcere la zero.
Chiar dacă ne-am putea în mod necesar Nu vezi că imprimate oriunde.
>> Pentru că așa cum programatori, știi, dacă aveți mai multe linii diferite de cod
și nu știi unde acestea sunt de gând greșit,
și în cazul în care o eroare se pe care doriți să asigurați-vă că veți obține această eroare.
Și astfel de obicei dacă ceva nu merge greșit, vom avea un profit de o doar
pentru a vă asigura că știm că este.
Deci, dacă vedea o revenire la zero, ca de obicei
înseamnă programul tău este executat cu succes.
Bine?
Misto.
>> OK, al doilea program aici.
Consideră că.
Și dacă voi vedea o float, voi poate, probabil,
au o idee bună de ceea ce Sunt pe cale să te întreb.
>> Deci, atunci când acest program execută, după cum puteți vedea,
Sunt de declarare a unei flotor în interiorul funcția mea principală.
Am numind-o "răspunde" și eu sunt stabilirea care egală cu o împărțit la 10.
Sunt imprimarea, la un zecimală, care plutesc.
Și apoi mă întorc la zero am.
>> Deci, atunci când executarea programului, cred că înapoi la lacomi acum,
acest program imprimă 0.0.
După cum știm cu toții, sperăm cu toții Știi, un împărțit la 10, nu este un 0.00,
e 0,1.
Dar explica de ce acest program crede că 1 împărțit la 10 printuri la 0,1 alte
decât 0.1?
O să-ți voi da poate ca 30 secunde să se gândească doar la asta repede
și voi reveni la programul.
>> BINE.
Oricine vrea să-i dea o lovitură?
În trei propoziții sau mai puțin, pentru că de obicei, suntem
O să restricționeze toate răspunsurile la trei fraze sau mai puțin
astfel încât să nu doar regurgitate lucruri aleatorii pe testul ta.
>> Da, să ia o lovitură.
>> Audiența: Deci, eu cred că există această lucrul numit, cum ar fi, [neauzit]
Deci, ar putea fi, de exemplu, ar putea fi, cum ar fi, 0,09,
că în cazul în care imprimați primul cifre, ar fi să 0.0?
>> PROFESOR: Close, nu destul.
Christabell?
>> Audiența: Ești împărțirea unul și 10, și sunt ambele numere întregi.
Și astfel modul în care aceasta va pentru a stoca este ca un întreg.
Și astfel cel mai apropiat număr întreg ar fi 0.0.
Și așa că e de 0,1.
PROFESOR: Da, asta-i foarte bine.
Asta e răspunsul corect.
Deci, aceasta este o foarte confuz Conceptul de o mulțime de copii.
Și chiar vreau să vă asigurați că acest lucru este consolidat în capul tuturor.
>> Deci, ceea ce noi numim plutitoare Punct de imprecizie,
în cazul în care motivul pentru care o mulțime de programele în lacomi
nu au de lucru inițial a fost pentru că ai uitat să arunce variabila.
Deci, ce a spus Christabell a fost în întregime corectă.
>> Un float este în mod inerent imprecise.
Deoarece într-un calculator, drept, avem o cantitate finită de biți de memorie
putem folosi pentru a reprezenta numere.
Deci, de exemplu, acest ID CS50 este-- Cred că e un calculator pe 64 de biți.
>> Un flotor poate fi reprezentat numai de o cantitate finită de aceste biți.
Și astfel 0,1 cu zerouri infinite, care a fost de 0,1, nu?
Dar nu putem stoca de fapt, acest număr în calculatorul nostru.
Noi pur si simplu nu au suficientă memorie pentru a face acest lucru.
>> Și astfel cel mai apropiat apropierea ce stocate în memorie este de fapt
ceva de genul 0.000 ceva, ceva, ceva, ceva.
Care, odată ce trunchia l, până la 0,0 runde.
>> Și așa acest exemplu este doar un care demonstrează o mulțime de probleme
ori de câte ori avem suntem încercarea de a face incorect matematica
fără turnare ca un întreg diferit.
Deci, doar să fie atent la acest lucru se întâmplă.
>> Pe diverse, dacă vă un da bloc de cod și e ca si cum,
ceea ce imprimă la sfârșitul?
Și dacă e ceva de valoare aleatoare te baieti ar trebui să știe de ce se întâmplă.
Da?
>> Audiența: Truncate este a scăpa de totul după un anumit punct?
[Inaudibil]
PROFESOR: Da, așa de fapt acesta este un exemplu foarte rău,
pentru că, de fapt, indiferent de 0,100 ar trunchia jos la 0,1.
Dar dacă ar fi să it-- rula eu nu amintiți-vă, pentru că anul trecut au
a fugit pe un program diferit.
Ei fugit în ceva numit CS50 Appliance, care
este diferit de ID-ul.
Asta a fost un sistem pe 32 de biți, cred.
Și așa s-au numere diferite.
>> Dar, în esență, știu doar că întregul concept de trunchiere
și modul în care doar taie lucruri pe.
Și așa, dacă rounds--
>> Audiența: Fără rotunjire.
>> PROFESOR: Exact.
Da.
Misto.
>> Hi, în spate.
Noi doar a merge peste câteva ÎNTREBĂRI DE REVIZUIRE test.
>> In regula.
Deci, ia în considerare un program diferit aici.
Am de gând să vă dau un baieti câteva minute pentru a citi peste asta.
Acest lucru este ceva care a fost pentru o foarte recent că eu cred că suflat o mulțime de tine
mintea lui. baieti
Dar vom vorbi prin aceasta din nou, doar
pentru a vă asigura că înțeles-o complet.
BINE.
Oricine nevoie de mai mult timp pentru a citit prin acest cod?
BINE.
>> Deci, mi se pare că în acest program sunt
crearea a două șiruri folosind getString.
Cel numit S și unul numit T.
Și dacă sunt egale este egal cu fiecare parte,
aceasta ar trebui să imprimați "Tu tastați același lucru. "
>> Dar elsewise, ar imprima, "Tu tastat lucruri diferite ", nu?
Pare a fi foarte, foarte simplu.
Dar, cu toate acestea, în cazul în care am de fapt încercați să scrie acest program,
se pare că chiar și atunci când intrare aceleași siruri de caractere exacte,
încă afiseaza, "Tu tastat lucruri diferite! "
Vrea cineva să ia o șansă la ce acest program mereu
răspunde că intrările sunt diferite, chiar
atunci când cuvintele înșiși sunt la fel?
>> Deci, dacă ar fi să input-- David dragoste de a utiliza un exemplu ca mama, nu?
Litere mici M-O-M pentru S, T este egal cu litere mici M-O-M.
Dacă am fugit acest lucru prin codul, de ce ar
imprima "ați tastat lucruri diferite?"
>> Are cineva nevoie de mai mult timp să se gândească la asta?
OK, cred că suntem bine.
Da?
>> Audiența: OK, asa ca este ceva despre în cazul în care este stocat în memorie, nu?
>> PROFESOR: Da.
>> Audiența: Unde e ca, în cazul în care acest lucru string s este depozitat la memorie spot--
Am inventat asta: este zero.
PROFESOR: Sigur.
Audiența: Și string T este depozitat la loc de memorie,
cum ar fi, 167, și apoi zero, nu egal 167.
>> PROFESOR: Exact.
OK, deci amintiți-vă acest incredibil Apocalipsa ne-a explicat voi
în această săptămână trecut, că siruri de caractere nu există cu adevărat?
Când ne-am crea ceva numit string suntem, în realitate,
crea ceva numit stea char.
Care tot ce este este un pointer la un șir sau la o serie de caractere.
>> Și astfel, în acest exemplu, dacă am urmau să intrare M-O-M calea
care calculatorul meu ar stoca este în backslash memorie de zero, nu?
Aceste patru caractere, caractere, ar fi depozitate undeva.
>> Și apoi aceste patru caractere, backslash la zero,
sunt stocate în altă parte, nu?
Nu am nici o idee unde adresele sunt, sunt undeva în calculatorul meu.
Dar eu nu știu exact unde sunt.
>> Când m-am crea un șir s, tot ceea ce este într-adevăr
este un pointer la începutul acestui șir.
Și când am crea această valoare t, tot ceea ce este un pointer la aici.
Și așa că atunci când sunteți încercarea de a echivala și verificați
pentru a vedea dacă este de la egal la egal este egal cu t, calculatorul
este de fapt doar a reveni la vă adresa acestui m
și adresa de pe care m.
Și pentru că sunt două piese separate de date
care sunt stocate în două tipuri diferite adresele în calculatorul dumneavoastră,
computerul nu va le recunosc ca fiind la fel.
Nimeni nu vrea să da o lovitură de la ceea ce am
ar trebui să facem dacă am vrut să corecteze acest lucru și au un program de funcționare corectă
in loc?
Gândiți-vă că pentru câteva secunde.
De ce avem nevoie pentru a schimba la obține acest program de funcționare
modul în care doriți să funcționeze?
>> Da, doresc să ia o lovitură de cuțit la el?
>> Audiența: Putem încerca să dereference pointer și verificați prin matrice?
PROFESORUL: Asta e un mod de a face acest lucru.
Deci, ce e numele tău?
Îmi pare rău, amintește-mi.
>> Zee: Zee.
PROFESOR: Da, deci ce Zee a sugerat ar funcționa absolut.
Dreapta?
Am putea dereference indicatorul și de fapt du-te și acces
datele fizice din interiorul aici.
Si putem compara doar tot ecranul.
>> Putem spune, OK, pointer, da-mi ce este în interiorul aici.
Acesta se va întoarce un m.
Și aș spune, pointer, da-mi ce este în interiorul aici.
Întoarceți-o m.
Fac cei meci?
Da.
Apoi ne-am muta pe.
>> Păstrăm verificarea întregii doi siruri de caractere tot drumul până la sfârșitul
și a vedea dacă acestea sunt egale, dacă toate valorile sunt egale.
Și dacă toate valorile sunt egale, atunci știm siruri de caractere sunt adevărate.
Absolut, așa ne-ar face-o?
>> Are cineva confuz cu privire la orice de acest lucru?
Întregul concept de cum siruri de caractere sunt într-adevăr doar indicii,
și modul în care acestea nu există cu adevărat?
Și de ce ne erori ca modul în care-l?
Pentru că vă garantez baieti, indicii și alocarea de coarde și de memorie
sunt de gând să vină.
>> Da?
>> Audiența: [inaudibil] dereference l, ai pus doar o stea [Inaudibil]
PROFESOR: dreapta.
Deci, pentru a derererence un mijloc indicatorul pentru a merge la acea adresă de indicatorul
și obține datele, valoarea acolo.
Și modul de a face acest lucru este pointer stele.
A nu se confunda asta.
>> Audiența: [neauzit].
>> PROFESOR: Da.
Audiența: Deci, puteți scrie doar dacă egal egali stele t stele s.
>> PROFESOR: Ei bine, nu.
Nu.
>> Audiența: Asta nu e destul de bun, nu?
>> PROFESORUL: Nu, pentru că ești numai verificarea prima literă.
Esti, probabil, de gând să nevoie de un fel de buclă care o
reiterează prin fiecare caracter în ambele șiruri.
Da.
Deci, dacă ai vrut să verificați doar pentru a vedea în cazul în care a început cu același lucru,
puteți face în cazul în care, stele s este egal cu stele T.
Atunci știi că cel puțin ei a început cu același caracter.
>> Da?
>> Audiența: Deci calea faci asta ar fi
ca un încorporat pentru buclă sau pointer?
PROFESOR: Da.
Destul de mult doar o buclă pentru.
Amintiți-vă, David în clasa menționată zahărul liber sintactic?
Și el a avut acest lucru foarte lucru confuz de stele T
plus o, în cazul în care aceasta ar integra prin și muta cursorul?
Mai ușor mod de a face acest lucru este doar t de i.
>> Deci e doar o matrice.
Modul în care le-ar avea o pentru buclă, care a fugit de la zero la I, în cazul în care
i este lungimea șir, ai putea doar
scrie că, în loc de a face pointer întreg, lucru de referință.
Deci, aceste lucruri sunt exact echivalent în calculatorul dumneavoastră.
>> Voi probabil, nu va trebuie să știe că,
dar e bine sa doar un fel de au în spate mintea ta.
Știu doar că computerul recunoaște diferite blocuri de cod
ca acelasi lucru.
Deoarece aceasta este doar mult mai de utilizare prietenos pentru noi să-l prezinte ca e
o matrice.
E mai ușor.
>> Audiența: Deci, utilizarea strlen pentru ca, get--
PROFESOR: Da.
Audiența: OK.
PROFESORUL: Ai putea utilizați strlen sau, dacă
nu a avut strlen puteți face doar până până când a lovit backslash zero pentru ambele.
Oricare ar funcționa.
Da.
Audiența: Deci e la dereference fiecare caracter unic, dacă ne-am fost de fapt
scrierea acest cod, am ar putea face doar T paranteze i
Ca și cu steaua in fata ei?
>> PROFESOR: Da, este egal cu Egal cu s suport I, și apoi să păstreze în mișcare i
jos până te-a lovit la sfârșitul anului.
Da, asta e ceea ce ar face.
Și voi avea de fapt un viitor exemplu de când ne-am de fapt,
scrie strlen așa voi va fel de a lua sa te joci cu ea un pic.
>> Deci este clar pentru toată lumea doar pe memorie, siruri de caractere, indicii, adrese de calitate?
Unele concepte de nivel superior pe care le voința sigur trebuie să știu pe testul
mâine.
>> In regula.
Bine.
Da.
OK, deci un lucru pe care vom cere, de asemenea te, așa cum facem în fiecare an pe un test, este,
să presupunem că ați uitat (care se pare că uitați să faceți anual)
în care fișierul header strlen este declarat.
Și așa că trebuie să-l rescrie noi.
>> Aici sunt o listă de linii directoare pe care le puteți prezenta
baieti unde tu a lua să se presupună că S șirul nu va fi nul.
Puteți presupune că s va fi terminat cu un backslash zero.
Deci știi că e ceea ce se va termina cu.
>> Și, de exemplu, că lungime de salut ar fi cinci.
Astfel, puteți presupune că salut va fi de cinci, H-E-L-L-O.
Nu trebuie să presupunem că Reversul zero, conturi pentru lungimea.
>> Acest ultim lucru aici, nu vă faceți griji despre overflow întreg.
Are cineva aminte ce tip integer overflow este?
>> Audiența: merge dincolo de Lungimea [neauzit].
>> PROFESOR: Da, se poate explica un pic, ce înseamnă asta?
>> Audiența: Deci, cred că merge înapoi la exemplul trunchiere devreme.
Dar, dacă aveți doar atât de multe numere care depășesc numărul de biți
pe care îl puteți atribui de fapt că va doar un fel de tăiat.
PROFESOR: Da, așa pe un tipic calculator, câți biți avem?
Audiența: 32?
PROFESOR: Da, 32, dreapta.
Și așa că e, ceea ce, cu patru miliarde de euro, două miliarde?
Patru miliarde de euro, până la patru miliarde numere naturale, nu?
Două miliarde de euro negativ, două miliarde pozitiv,
depinde de modul în care doriți să o fac.
>> Și astfel, practic putem avea suficient de numere întregi, care poate merge până
la două la 31 minus 1, nu?
Pentru că odată ce ne-am lovit de două la a 32-, noi nu
au atât de mult de memorie în calculatorul nostru.
>> Și astfel, teoretic, am ar putea veni cu un număr
că este, cum ar fi, de două până la a 46-.
Este un număr foarte mare-măgar, dar teoretic ai putea.
Și preaplin astfel încât întreg este dacă încercați să a crea un număr întreg, care merge dincolo de ceea ce
computerul este capabil de a stoca.
>> Și așa voi pentru acest exemplu nu au
să vă faceți griji cu privire la noi, oferindu-vă un gigant șir care este de două la caractere 32
lung.
Asta ar fi foarte rău.
>> Bine, așa că am de gând să dea doar voi structura de bază a acestei.
Vei crea un funcție numită Int strlen unde
o trecere în, o stea char, sau șir, pointer la șirul numit s.
>> Bine, toată lumea recepționat jos.
Misto.
Alte Oops-- cale.
>> Deci, aceasta este un fel de bucată mai greu de problemă,
așa că voi da băieți, poate cinci la șase minute la fel de brainstorming
și scrie această funcție afară.
>> Audiența: Noi nu considerare pentru [neauzit],
noi nu trebuie să utilizeze întreg?
>> PROFESOR: Nu, nu.
Îți dau un indiciu, băieți.
O buclă în timp ce poate fi foarte util aici.
Da.
Iată
bomboane.
Candy va fi, de asemenea, disponibile pentru testul, cred.
Deci, voi toti veti fi zaharisit mâine.
Poate Eu-- ai luat.
>> Audiența: OK.
PROFESOR: Da.
>> Poate 30 de secunde sau cam asa ceva.
>> Bine, dacă ești nu făcut, nu vă faceți griji.
Vom deplasa prin asta împreună.
BINE.
Deci, am de gând să doar aspectul structură de bază pentru această funcție aici.
Int strlen.
În primul rând, nimeni nu vrea să-i spun mi ce înseamnă că Int?
Trebuie să avem în această funcție.
>> Audiența: strlen [neauzit].
PROFESOR: Exact.
Deci, orice se întâmplă aici, avem nevoie să se întoarcă un întreg.
Și specificate în spec, vrem să return--
Du-te pentru ea baieti, doar continua.
Totul este bine.
Mănâncă tot așa că nu am să-l ia înapoi, de fapt.
Int doar înseamnă că ești va întoarce un întreg.
>> Ce este aceasta e stea char?
Ce înseamnă asta?
>> Audiența: Ca, ceea ce se intrare în.
PROFESOR: Exact.
Și ceea ce este aproape același lucru ca stea char?
Audiența: String?
PROFESOR: Exact.
Deci, tot ce facem este da această un pointer la un șir.
BINE.
Misto.
>> De asemenea, nu uita, dacă uităm pentru a vă oferi aceste paranteze,
nu uitați să le scrie singur.
Pentru că, teoretic, codul este incorect dacă uitați să le scrie.
Doar acordați întotdeauna atenție.
Ca, lucrurile mici pe care nu le observa
atunci când sunteți de programare pe laptop, pentru că laptop-ul o face pentru tine?
Nu uita, atunci când sunteți scris de mână.
Da?
>> Audiența: Dar cum incorect?
Cum ar fi, nu vom obține întreaga problemă greșit?
>> PROFESOR: Nu, nu.
Nu vă faceți griji.
Este de fapt teoretic posibil pentru tine de a obține puncte complete pe o întrebare
chiar dacă codul va nu a alerga în viața reală.
Vă sugerez să nu încercați pentru a face să se întâmple asta.
De exemplu, cum ar fi în cazul în care totul e aici este corect,
dar uitați un colon sau o consolă, codul nu va rula de fapt.
Dar putem fi milostivi.
>> Da?
>> Audiența: Nu trebuie să comentariu pe scrisul de mână nostru?
>> PROFESOR: Nu, nu, nu griji despre asta.
Nu comentând.
Stil ar trebui să fie bun.
Cum ar fi, nu Smush totul pe o singură linie.
Noi nu va fi fericit cu tine, dacă faci asta.
>> Nimeni nu vrea să da-mi prima linie?
Sugestie, este foarte ușor.
>> Da?
>> Audiența: Int, n este egal cu zero.
Doar înființat contra.
PROFESORUL: Deci vrem ceva un fel de contor, nu?
Mă duc să-l numească "conta" de dragul de lizibilitate.
Ce vrem să-l egală cu?
>> Audiența: Zero.
PROFESOR: Da.
Punct şi virgulă.
Este, de asemenea, punct și virgulă de desen, foarte ciudat.
Doar practica face asta.
>> Deci, vrem sa avem mai întâi un contor de tip int.
Pentru că vrem să numere până cum mai multe caractere sau litere sunt
în acest șir, nu?
Primul pas foarte usor.
>> OK, poate un pic mai complex acum, cum vom face acest lucru?
Nimeni nu vrea să da-mi linie de cod
care poate fi capabil de a ajuta bucla prin orice e?
>> Da, sufletul curajos în spate?
>> Audiența: OK, deci în timp ce punctul asteriscuri, The Da, vedeta s,
nu este egal cu zero, atunci faci ceva?
PROFESORUL: Asta e foarte, foarte aproape.
Foarte aproape.
Deci, am de gând să abordeze două lucruri cu asta.
Mai întâi de toate, nu e exact zero.
Ce este?
Este terminatorul nul, care este backslash zero.
Astfel încât acestea sunt diferite în ceea ce privește modul în care sunt stocate.
Deci tu ești foarte aproape.
>> Și în al doilea rând, nu vrem pentru a muta doar indicatorul.
Vrem să efectiv acces la valorile, nu?
Și așa cum facem asta?
Foarte usor.
Nu te gândi la indicii, Nu cred că despre amintiri.
Du-te înapoi la doua saptamani de acest curs.
>> Audiența: [neauzit].
PROFESORUL: Ca de, îți amintești?
Care sunt siruri de caractere?
Cum sunt stocate în memorie?
>> Audiența: Sunt ridicat.
>> PROFESORUL: Ei sunt ridicate.
Deci, cum putem accesa fiecare caracter în interiorul?
>> Audiența: [neauzit].
PROFESOR: Exact.
Deci, ce se întâmplă în interiorul while-- aici?
S de -
>> Audiența: I.
>> PROFESOR: Oh, nu există, nu?
>> Audiența: Oh, conta?
>> PROFESORUL: Putem doar utiliza conta, nu putem?
>> Audiența: Îmi pare rău, l-am sunat eu.
>> PROFESOR: Da, totul e bine.
Avem o variabilă aici e fost deja declarate ca contra noastră.
Deci, de ce nu ne-am folosi acest pentru a vă deplasa prin bucla în timp ce?
Are sens?
>> Deci, în timp ce s de count-- nimeni nu vrea să-mi dea ceea ce se întâmplă după aici?
Audiența: ea nu egal.
PROFESORUL: nu este egal, nu?
Este Bang este egal, semn de exclamare este egal,
tot ce vreți să numesc nu equal--
>> Audiența: [neauzit].
>> PROFESOR: Da.
Amintiți-vă un singur citat este pentru un char, ghilimele duble sunt pentru un șir.
Fiți atenți atunci când le folosesc.
Deci, atunci când ne uităm prin matrice, ultimul caracter,
știm că nu vrem să fie backslash zero.
>> Deci, în timp.
Noi nu suntem la sfârșitul șirului.
Ce vrem sa facem in interiorul?
>> Audiența: Vrem să adăugați la contra așa că contează plus plus?
PROFESOR: Exact.
Deci, aici vom face conta, conta plus plus.
Lipsește o linie mai mult.
Suntem aproape acolo.
Ce ne uita să facem?
>> Audiența: Revenind la zero?
>> PROFESORUL: Vrei să se întoarcă la zero?
>> Audiența: Nu, revenind la strlen.
Stai asa.
PROFESORUL: care este stocat in?
Audiența: Count.
Conta.
PROFESOR: Exact.
Deci, aici vom să se întoarcă conta.
>> Pentru că ceea ce suntem aici ultimately--
avem o variabilă contor care este merge pentru a incrementa prin șir nostru.
Vom continua, ține merge, în jurul valorii de și în jurul în această buclă.
Și în timp ce noi nu suntem pe la sfârșitul acestui string, care este terminatorul nul.
>> Și de fiecare dată când trecem prin aceasta, vom adăuga la contra noastră.
Și vom mai departe de-a lungul în această matrice.
Și la sfârșitul anului, odată ce vom lovit terminatorul nul,
știm, oh, putem pauză, întoarce numărul.
Avem strlen nostru.
>> Are toată lumea obține cât acest lucru a fost pus în aplicare?
În timp ce loops-- Știu că nu avem face prea mult cu ei,
dar sunt, de obicei, foarte, foarte util dacă
Nu știu ce te opri condiție trebuie neapărat să fie.
>> Întrebare?
>> Audiența: Putem scrie nul cu condiția timp?
>> PROFESORUL: în timp ce?
Da, astfel încât în ​​această problemă am ai avut baieti presupunem că e nu va fi nul.
Pentru că amintiți-vă, Teoretic, dacă ți-am dat
un pointer care a fost prea mare de memorie, v-ar da nul, nu?
Asta e ceea ce de operare sistem ar face.
>> Deci, dacă nu ți-am spus să-și asume s-ar fi nul, trebuie să verificați.
Deci aici, v-ar face, în cazul în care s este egal egal nul, întoarceți unul.
Ceva de genul.
Audiența: [neauzit] zero.
PROFESOR: OK, eu voi spune tu de ce nu putem face asta.
Pentru că amintiți-vă în memorie, chiar, aici.
Vom merge aici.
>> Ai blocuri gigant de memorie cu toate grilele
care stochează valori diferite, nu?
Și atunci tot un șir este-- pentru exemplu, dacă vrem să intrare salut,
aceasta ar fi H-E-L-L-O backslash la zero, nu?
Și apoi, cine știe, ca aleatoare lucruri care sunt aici după el.
>> Nu știm de fapt ceea ce este acolo.
Și așa dacă ar fi să faci în loc de backslash la zero,
nul, aceasta nu poate fi nul.
Pentru că doar poate însemna alte lucruri aleatoare
care nu fac parte din șirul.
Și astfel modul în care ne mereu știm că un șir se termină cu un backslash este zero.
Și așa că e întotdeauna cum am verificați pentru a vedea la sfârșitul unui șir.
>> Nul, tot ceea ce înseamnă este, dacă aveți un pointer inexistente, în primul rând,
sau în cazul în care memoria este doar atât de mare încât nu se poate întoarce, atunci ar fi nul.
Deci, să fie foarte atenți atunci când diferențierea diferența dintre nul
și backslash zero.
Da.
>> Toată lumea OK cu asta?
BINE.
>> Așa că a trebuit voi scrie strlen.
Practic am putea cere, de asemenea, vă scrie out de la A la I, amintiți-vă că "Atwoa"
sau orice vreți să-l suni?
Care funcționează în Vigenere și Cezar, care
convertește o valoare ASCII pentru un număr întreg?
Care, de asemenea, a venit la chestionare anterioare de funcții v-am cerut să scrie.
>> Destul de mult orice funcție pe care le-am folosit și este
foarte ușor să te scrie, Senzorii place este mai mică,
este superioară, pentru a reduce, la partea superioară.
Funcții care ar converti o șir de litere mici în majuscule.
Știm cu toții cum să faci asta, nu?
Este destul de ușor.
Vreau doar să vă asigurați că ați can-- este același proces de gândire.
Trebuie doar repeta prin și te întorci lucrurile.
Ori conta sau atunci când porniți lucrurile diferit.
>> Mi-ar suggest-- I Nu știu dacă vom
să vă rog să memoreze ce capitalul A sau Z de capital, sau litere mici A sau litere mici
z sunt în ASCII, dar aș sugera probabil scris că în caz
noi facem.
Doar așa voi avea o referință.
Ca majuscule A este, ceea ce, 197?
Și apoi cu litere mici este ca 50 ceva.
65, da, acolo te duci.
Deci, doar destul de mult știu diferență între ele este 32.
Asta e destul de important.
Da.
Sunt bine pe asta?
BINE.
>> Audiența: Am putea teoretic scrie unele
dintre acestea, precum și în jos pe little-- nostru
>> PROFESORUL: Ai teoretic ar putea copia doar funcția jos.
Asta e adevarat.
>> Audiența: Nu [neauzit].
>> Profesorul: Voi avea o foaie.
Voi avea o foaie de notă.
Puteți să-l introduceți.
Puteți să-l scrie.
Poți să faci ce vrei cu ea.
Da.
Deci, teoretic, în cazul în care vrei sa, du-te pentru.
>> Audiența: [inaudibil] dar nu într-adevăr
trebuie neapărat să-și amintească valoarea, putem doar
Utilizați Pentru superioară sau la de funcții inferioară, dreapta?
PROFESOR: Da.
Dar dacă v-am oferit o întrebare care spune scrie la partea superioară,
atunci va trebui să-l scrie.
Deci, voi poate presupune că baieti au acces la toate funcțiile,
dar dacă doriți să utilizați pentru a sus sau mai mici, ce ai, de asemenea, să faci?
>> Audiența: [inaudibil] utilizați CS50 [Inaudibil]
>> PROFESORUL: Este CS50.h?
Fii atent aici.
>> Deci, pentru a sus, pentru a reduce, este superioară, este inferior,
funcții care implică manipularea string sunt
toate în fie ascii sau în cadrul bibliotecii matematica
sau în cadrul bibliotecii șir.
Deci, dacă voi folosi cele funcții, să fie atent să-și amintească
pentru a include acel antet.
Asa ca, probabil, de asemenea, vă ceva doresc să includă în foaia de,
care sunt antet?
Care sunt bibliotecile ai folosit?
Ce funcții sunt interiorul acestor biblioteci?
Este important.
>> Da?
>> Audiența: Ar putea ne-am polițist afară și de a face hashtag
prin absolut fiecare scrisoare ne-am vreodată
vazut ca pe la toate întrebările?
>> PROFESORUL: Ai putea.
Nu știu cât de fericit vom fi la gradul
că, atunci când testul fiecare bucată de cod este de două ori, atâta timp cât aceasta trebuie să fie.
Nu știu, am putea scoate un punct de stil.
Dar teoretic dvs. Codul ar fi corect.
Voi putea polițist afară și includ doar totul.
Asta e prea bine, da.
Audiența: [neauzit].
PROFESOR: Da.
Aș sugera că, deși nu fac.
Da.
Audiența: cool.
PROFESORUL: Bună întrebare.
Audiența: Deci, cel mai rău caz.
PROFESORUL: Cel mai rău caz.
Dacă ați uitat cu totul, ai putea face asta.
Da.
>> Da, cod este chiar acolo.
Am folosit n loc de conta, dar, tu Știu, Indiferent pluteste barca ta.
Audiența: Stai, asa ca am nu ar trebui să hashtag
includ ca suntem cu începere de la int?
>> PROFESOR: Da, tocmai am presupus că ni sa cerut să scrie funcția.
Dacă ați vrut să fie sigur, probabil ar putea pune acolo.
Dar eu nu am deranja, da.
>> Nici măcar nu știu dacă nevoie de nici o bibliotecă pentru asta.
Pentru că nu ești într-adevăr de imprimare out nimic sau ceva, nu?
Da, nu știu dacă aveți nevoie de o bibliotecă.
>> BINE.
Aceasta este, de asemenea, un pic mai mult de-a lungul liniile de manipulare memorie.
Acest tip de pic dificil.
Gândiți-vă la acest.
Ai o funcție numită func.
Aș fi putut să-l numit orice, dar aleg să-l numească func.
O am de mai sus principala mea.
Amintiți-vă, doriți să aveți o funcție după dumneavoastră principal,
doriți să vă asigurați că includ prototipul sus.
>> Dar în acest caz a fost atât de scurt că am simțit că aș putea doar
includ o deasupra principal.
Nu am nevoie pentru a avea prototipul, deoarece este deja scris mai sus.
Deci, tot ce fac în funcție meu principal este de a crea întreg x este egal cu 10.
Sun funcția mea func, și apoi de imprimare ceva.
>> Și atunci de fapt ce func face.
Vreți să cred că prin asta.
Pentru că este un pic dificil.
Este foarte, foarte dificil, de fapt.
Gândiți-vă prin ceea ce aceasta Programul ar fi Ieșirea.
Îți dau două minute voi.
>> Discuții bun?
>> Audiența: Da.
>> PROFESOR: Da.
Bine, deci acest lucru este dificil pentru un motiv.
Și de aceea am vrut sa aduca asta atentia tuturor.
Nimeni nu vrea să-mi dea o sugestie, o încercare de?
Ce s-ar imprima asta?
Total bine dacă te înșeli.
Da?
>> Audiența: Cred că e 100 și apoi 10 pe doua linii separate.
>> PROFESORUL: Și un 10?
Are cineva orice alte presupuneri?
Da?
>> Audiența: Poate doar pentru că 10 func nu se întoarce nimic?
>> PROFESOR: OK, așa că am au ghici numărul unu
este că ghici numărul doi este doar de gând să imprima 10.
Are cineva orice alte presupuneri?
BINE.
Așa că haideți să plimbare prin asta, nu?
Ori de câte ori veți obține o bucată de cod, nu uita doar la el și să fie ca,
ah, e atât de mult lucruri!
Sunt așa confuz!
Cum ar fi, calmează-te jos.
Știu doar că ai putea doar uite prin codul linie cu linie.
Asta e tot ce este.
E ca citind o carte.
>> Deci, cu orice funcție, Noi întotdeauna încep de la principal.
Așa că am de gând să încep de la void main Int,
chiar programului deja a alerga în jos, nu?
Start la în void main.
Int x este egal cu 10.
>> Deci, am de gând să-l ștergeți acest.
Am de gând să atragă în memoria doar ca să baietii pot fel de a vedea ce se întâmplă.
>> Amintiți-vă aici avem stack nostru?
Până aici avem nostru heap undeva aici.
Stivă crește, nu?
Și în cadrul stivei, aveți rețea funcționează, precum și
toate variabilele de rețea locale.
>> Deci, aici, int x egal 10.
În cadrul funcției nostru principal suntem creând o variabilă numită x.
Suntem setare care egal cu 10.
Aici ai niște X, și tu ești setarea pe care egală cu 10, dreapta,
în principal.
Toată lumea bună?
>> Funcţie.
Deci, acum, în principal nostru funcție, suntem de asteptare
funcția am scris mai sus.
Deci, suntem acum intră a doua funcție.
Vom crea un alt variabila int x este egal cu 100.
Ce se întâmplă aici, la stiva?
Ce se întâmplă atunci când un apel funcție care creează noi variabile?
Ce se întâmplă aici, la stiva?
>> Audiența: [inaudibil] grămezi pe partea de sus?
PROFESOR: Da.
Deci, se creează de fapt o copie.
Și un fel de grămezi pe partea de sus.
Gândiți-vă la stack-- A stivă de cărți, un teanc de nimic.
Mormane pe partea de sus, pentru prima dată în ultimul out, ultimul intrat, primul ieșit.
>> Deci o să creeze un X aici.
>> Asta va avea toate funcs variabile.
Grozav.
Deci, acum avem două x diferite de faptul că reprezintă două lucruri foarte diferite.
Apoi vom imprima din întreg de X.
Așa că haideți să imprimați 100, nu?
Pentru că aici este 100.
Deci, asta e primul lucru pe care că va imprima.
Deoarece această funcție se întoarce nimic, acum această funcție, că linia principală în
este gata.
Toată lumea bună cu mine până acum?
>> Deci suntem acum prin intermediul a două din cele trei linii de funcții noastre principale.
Acum vom linia a treia.
Vom printf.
Ce este acest X în principal?
Ce ce reprezinta?
>> Ce valoare nu este X acum?
>> Audiența: 100.
>> PROFESORUL: E 100?
Audiența: Încă 10.
PROFESORUL: Încă 10.
Da.
Pentru că amintiți-vă, în func nostru, X este egal cu 100.
Dar dacă ne întoarcem înapoi funcției nostru principal,
că variabila este stocat într-o loc diferit pe stivă nostru.
>> Deci, acum, avem nevoie să ne întoarcem la stivă principal, rețea variabile locale.
Și aici x este egal cu 10.
Și așa vom imprima 10.
>> Deci, ea a fost absolut corect.
Vom avea ieșire de 100 și 10.
Da?
Audiența: Când malloc, este IT grămadă sau stiva, care este [neauzit]?
PROFESORUL: Când malloc, sunteți luați de memorie din heap
și alocarea.
Astfel încât nu aveți să te pui cu toate astea.
Deci cred ca MENIUL mai mare aici este ceva numit domeniu de aplicare.
>> Pentru cei dintre voi care au fost la sesiunea de reexaminare noaptea trecută,
am vorbit pe scurt despre acest lucru.
Domeniul de aplicare definește modul și atunci când există variabilele.
Sau în ce rame există variabilele.
>> Destul de mult a statului de degetul mare, în general, este, variables-- dumneavoastră dacă le creați
în interiorul braces-- buclat acestea există numai în interiorul acestor acolade.
>> Deci, de exemplu, în funcție de nostru func, veți vedea cele două acolade.
Dacă sunteți crearea nimic în interiorul acestuia,
sansele sunt tot ce faci este crearea unui stack și stocarea că există.
Același lucru în principal.
Asta e doar stocat în interiorul principal.
>> De asemenea, vrei să fii foarte, foarte atent aici.
Deoarece domeniul de aplicare, de asemenea, împrumută se la diferite exemple.
Astfel, de exemplu, un timp de buclă, pentru int i este egal cu 0.
I este mai puțin, nu știu, 10.
Am plus plus.
Și ai cod interiorul ei, nu?
>> În cazul în care face acest lucru variabilă, Eu, de fapt, doar există?
Numai în interiorul pentru bucla.
Așa că am pariat mulți dintre voi avea întâlnit, probabil, această eroare, atunci când
faci programe psets tale.
Câți dintre voi au încercat să i folos in afara de o buclă pentru și a avut o eroare?
Ca un numere întregi fără referință sau asa ceva?
>> Motivul care se întâmplă este pentru că aici ești
crearea de ceva care numai există în cadrul pentru buclă.
Și dacă încercați să-l utilizați, eu nu există în realitate în afara ei.
Deci, practic un computer a zis: eu Nu știu despre ce vorbești despre.
Tot ce știu este că am fost un aici, dar acum nu mai.
>> Deci, dacă aș fi de a crea un pentru bucla înăuntru, nu?
Și am de gând să creeze un alt, ca Int J, și l-au făcut tot ce.
Și aveți un cod în interiorul că bucla, j există doar aici.
Dar că există, de asemenea, în termen de i.
Și așa J există numai în acest pentru bucla,
întrucât am există în totul.
>> Toată lumea clar?
Acelasi lucru cu declarații condiționale dacă doriți să creați ceva.
Acelasi lucru cu bucle timp ce în cazul doriți să creați ceva.
Asta e ceva de a fi foarte, foarte atent cu privire la.
Deci, acest lucru a fost o problemă foarte bune în simt că a demonstrat două lucruri.
A demonstrat în primul rând, domeniul de aplicare.
Și a demonstrat De asemenea, alocarea de memorie.
Deoarece voi trebuie să știe că funcții cresc în sus în stivă.
Și că atunci când apelați funcții, creați
în esență, un nou teanc de memorie.
Care este foarte diferit de ceea ce este de memorie de rețea.
Da.
Whew!
Toată lumea pe OK asta?
Asta a fost confuz.
Subiecte foarte bune pentru a trece peste, pentru că ești, probabil,
mergi la a lua unele complicat lucruri de genul asta pe test.
Da.
Misto.
Voi pune te 100 pe o line și apoi 10 pe de altă parte.
Da, foarte bine.
>> OK, acum voi va primi șansa de a fi Tas.
Ai să răspundă la toate minunat e-mailurile care le primesc. uneori
>> Așa că, dragi Andi, văd eu cred ceva e merge în neregulă cu compilator meu.
Sunt sigur că codul meu este corect, dar I a păstra achiziție o eroare de segmentare
de fiecare dată când a alerga.
Ce se intampla?
Vă rugăm să ajute, o mulțime de dragoste.
>> Dacă voi ceva ca care cum ați răspunde?
Acestea sunt de fapt foarte frecvente întrebări vă vom solicita.
Este dacă, vă vom da un scenariu, vom să ne dea
cel mai bun ghici la ce se întâmplă.
Oricine are o lovitură de cuțit la ce se întâmplă?
Da?
>> Audiența: Poate dereferentierea null, ceva de genul indicatorul
este îndreptat la ceva nul.
PROFESOR: Da, asta ar fi o exemplu de momentul în care s-ar întâmpla.
Dar ceea ce este imaginea mai mare de ce se întâmplă aici?
Audiența: Este încerci pentru a accesa memorie care nu ești
ar trebui să aibă acces la?
PROFESOR: Exact.
Deci, cred că de un defect SEG, un off limite, zona restricționată în memorie
că nu ar trebui să fie ating.
>> Deci, destul de mult, atunci când sunteți încercarea de a index-- ca de exemplu,
ați declarat un matrice de la zero la nouă.
Dar încercați să atingeți că al 10-lea valoare, nu au acces la asta.
Pentru că nu l-au declarat.
Și astfel încât computerul dvs. se va să se uite la care să fie ca,
uh oh, sunteți încercarea de a merge în afara limitelor de un indice.
Am de gând să vă dau o eroare de segmentare.
>> Gândiți-vă la cum segment, nu?
Un segment in plus, vina este atunci când încercați să încalce ceva
și nu ar trebui să fie acolo.
Vina segmentare este oricând încercați să atingeți lucruri
că nu ar trebui să fie ating.
>> Exemple atât de comună sunt un index.
Desigur, dacă sunteți încercarea de pentru a atinge, care a fost nul,
care ar lucra, de asemenea, de asemenea.
În cazul în care indicatorul a fost încercarea de a atingeți lucruri pe care nu trebuie să atingeți,
care ar putea lucra, de asemenea, de asemenea.
Cele mai multe de obicei, veți aceasta într-o matrice.
Toată lumea bună?
>> Audiența: Deci, dacă vrei pentru a accesa zecelea punct
și nu există doar o limită de nouă sau ceva.
>> PROFESOR: Da, exact.
Destul de mult.
Misto.
>> Draga Andi.
Deci avem aceste minunate lucruri numit felul.
Dacă Merge sort-- ca am ferăstrău în exemplu, atunci când
David a făcut întregul lucru în class-- de ce,
dacă este atât de mult mai rapid decât oricare dintre celelalte soiuri,
de ce nu ne-am deranja chiar știind oricare dintre celelalte soiuri?
>> Ce este această întrebare într-adevăr te întrebi?
Care este de trei word--
Audiența: Care este trade-off?
PROFESOR: Exact.
Asta e ceea ce întrebarea întreabă.
Care este compromisul între Merge fel versete orice alte tipuri?
>> Audiența: ia de memorie, nu?
>> PROFESORUL: Ai explica faptul ca un pic mai mult?
În primul rând haideți să explice magazin Merge.
Cum Merge fel funcționează?
>> Audiența: Deci funcționează prin împărțirea totul în jumătatea
și apoi inscrie impreuna și realocarea l în ordine,
ca de fiecare dată când merge seturi.
PROFESORUL: Destul de mult.
Așa că am putea trage acest lucru, dar ar ia-mă cinci minute să-l scoată.
Uită-te înapoi la slide-uri secțiunea în cazul în care ne-am acoperit Merge fel.
Exact.
>> Deci modul Merge lucrări de sortare este imparte lucrurile în jumătate,
și apoi doar se uita la Primele valori de toți
și sortează numai că.
Continuu creează noi rețele și pune mai multe lucruri și mai mult în ordine.
Și astfel în timp ce e foarte, foarte rapid, deoarece it's-- știi,
o căutare binară este n log n.
Ești crearea atât de multe diferite rețele care nu sunteți
folosind o cantitate mare de memorie.
Și astfel în timp ce este mai rapid, compromisul aici este că utilizați mai multă memorie.
>> Și astfel, aluzie, felul și căutări au fost acoperite mai mult în acest an
decât au fost în anii precedenți.
Voi ar trebui să vedeți că reflectat în consecință pe testul.
Mi-ar petrece cu siguranta timp de gând asupra a ceea ce toate diferitele tipuri
sunt, de căutare cum binar, cum liniar de lucru de căutare.
Cum să poate pseudocod codul cei afară.
Care sunt timpii de funcționare?
Ceva de genul ori de funcționare este foarte ușor pentru a copia în jos pe o foaie de note,
dreapta?
>> E foarte greu când ești în mijloc testul
și va trebui să dai seama.
Copiați-l în jos.
Îți garantez că ești Va trebui să știe că.
Care sunt compromisurile?
Cel mai rău caz, cele mai bune scenarii pentru toate acestea, foarte se cunoască.
Da?
>> Audiența: Nu avem nevoie pentru a știu cum să codul Merge fel?
Cum ar fi, nu trebuie să ne amintesc recursive?
>> PROFESORUL: Am foarte îndoiesc, doar pentru că este ca și cum destul de complicat.
Dar aceasta nu poate fi imposibilă dacă ne-am vă rugăm să utilizați pseudocod l.
Da.
>> Da, OK, o mai mult.
Acest lucru poate au venit în te ultima piesă într-un pic.
Da?
A tuturor auzit asta?
>> OK, deci destul de mult în primul toate, ce tip de program
ar fi oferindu-vă o putere ca asta?
Amintiți-vă pentru a afla despre cerut acest nou tip de instrument de depanare?
Care era numele de ea?
Valgrind, dreapta
>> A fost un program de unde Ai putea să sunați care ar putea
ține evidența tuturor memorie esti utilizarea în programul dumneavoastră și se întâmplă.
Deci, dacă ai ceva, cum ar fi, cu siguranta pierdut, 40 de bytes într-un bloc.
Probabil că nu ești amintindu pentru eliberarea.
Pentru că dacă utilizați bytes de memorie, asta înseamnă că v-ați accesat că memoria,
dar nu au fost în măsură să elibereze.
Deci, doriți să faceți sigur că ești, de asemenea,
folosind free-- care este un function-- pentru a elibera toate
a memoriei realocate de malloc.
>> Misto.
Deci acest diapozitiv, o voi avea în sus.
E peste tot într-o mulțime de prelegeri, într-o mulțime de diapozitive secțiune.
Chiar vrei să vă asigurați doar știi toate astea.
Fie în foaia de nota sau dacă doriți să-l memoreze, nu ezitați să.
Asta e foarte, foarte, foarte important.
>> De asemenea, un foarte bun Întrebarea pe care ne-am putea întreba.
De ce este aspect de selecție sort-- la Selecția sort-- toate runtime
sunt n pătrat.
Indiferent de modul în lista scoate tine, ca, asa ca de ce este sort-- Selecție
Îți dau 30 baieti în al doilea rând despre această.
Pentru că e un fel de confuz.
Aceasta implică unele crezut conceptual.
De ce ar fi la fel în vremurile rula atât cele mai grave și cele mai bune scenarii de caz?
>> Da?
>> Audiența: Deoarece Selecție fel fiecare poziție sau spațiu în acest mic tablou
lucru sau orice altceva.
Deci, chiar și în cel mai bun caz, Chiar dacă e sortate perfect,
aceasta ar trebui în continuare să fie ca, bine, o.
În prima mea loc am unul.
Și du-te prin toate.
OK, unul este cel mai mic.
Și apoi merge din nou și este ca, OK, două
este cel mai mic dintre toate lucrurile.
Dar are încă verifica fiecare dintre.
PROFESOR: Da.
Deci, de exemplu, să spunem că Avem o listă, sortate deja,
o serie una-cinci.
Modul în care felul de selecție este că merge prin, ea verifică aceste două.
Apoi, verifică cele două.
Și apoi verifică și verifică.
Se păstrează verificarea tuturor acestora, indiferent dacă este sau nu
este de fapt sortate.
Pentru că pur și simplu modul în care funcționează fel.
>> Și așa această întrebare este un fel de o întrebare conceptual vom întreba.
În cazul în care în primul rând, să știu ce fel de selecție
este, dreptul, pentru a putea pentru a răspunde la întrebarea.
Trebuie să fie capabil să înțeleagă conceptual ce se întâmplă.
Și apoi puteți aplica și cred că, OK hai să ne imaginăm mai rău scenariu.
Sunt toate în ordine descrescătoare.
Cum că afecta?
>> Dacă e ordine crescătoare?
Dacă este deja sortate?
Cum că afecta runtime?
Și apoi un fel de selecție, veți observa că ea nu se contează.
Pentru ca esti verificarea toate Valorile indiferent de ceea ce se întâmplă.
>> Și așa lucruri bune să-și amintească.
De ce unele tipuri difera de celelalte și cel mai bine cum și cele mai grave scenarii
ar afecta toți.
>> Am de gând să lovit într-adevăr în felul pentru că va fi pe testul.
Da.
BINE.
Există șase minute ramase.
Pot lua trei minute de întrebări.
De asemenea, am putea închide în jurul pentru ca 20 de minute după secțiune
dacă doriți să puneți întrebări, de asemenea.
Are cineva doar într-adevăr scurt întrebări sau probleme conceptuale
sunt neclare cu privire la dreptul acum?
Da?
>> Audiența: Poți să vorbim un pic bit despre operatori la nivel de bit?
>> PROFESOR: Da.
Operatorii la nivel de bit sunt atât de ceva care, probabil,
s-ar putea dori doar pentru a pune pe foaia de.
Deci quickly-- Nu vreau pentru a merge prea mult în profunzime
pentru că Harvard, în revizuirea lor sesiune, a acoperit destul de bine.
Operatorul nivel de bit, nu e cinci dintre ei, nu?
>> Există acest lucru, care este x sau funcție, există ampersand, care este AND.
Pipe, care este RUP.
Și atunci aveți două diferite tipuri de schimburi.
>> Dacă îți dau două valori, dacă Eu vă dau, cum ar fi, unul și unul.
Ce s-ar evalua care să?
Dacă îți dau adevărat și adevărat, adevărat?
Ce zici de adevărat sau fals?
Încă adevărat, nu?
Pentru că există o sau.
Vă vom oferi cel mai probabil numere.
Deci ține minte, o egal adevărat, la zero este egal cu false.
Și am putea să vă dau aceste lucruri și vă rog să ne spuneți ce se întâmplă.
Harvard care se încadrează în primul 10 de minute de sesiune de studiu
foarte, foarte bine.
Deci, voi doriți să faceți vă că vă uitați în urmă la asta.
>> Audiența: Este pisa5 va fi pe testul?
PROFESORUL: Nu.
Nici nu te uita la pisa5 acum.
Este greu.
Doar nu macar nu deranja uita la pisa5.
>> Cu toate acestea, unele indicii și sugestii, eu
ar sugerăm să începeți pisa5 de îndată ce testul este de peste.
Acest lucru va fi cel mai greu săptămână, dar apoi voi
va fi trecut-o pe dealuri de verde și pui de rulare,
și e bine.
>> Aceasta clasa devine semnificativ mai ușor după a cincea PSET.
Ore de birou: PUBLICUL sunt duminică, luni?
PROFESOR: Da, așa ore de birouri va Duminica până luni pentru PSET.
Orelor de serviciu în seara asta, în esență, va fi doar de revizuire pentru testul.
Dacă cineva vrea să vină în și de a pune TAS o întrebare, vom fi acolo.
>> Voi lua poate o întrebare dacă cineva are o întrebare?
Da?
Audiența: Când ești noduri care definesc, [neauzit]
daca spui stea nod și apoi următoarea, face în mod automat computerul
Înțeleg că ești referindu-se la un alt pointer?
>> PROFESORUL: Nu.
>> Audiența: Trebuie sa relegarea aceasta [Inaudibil]?
>> PROFESORUL: Deci, practic, struct unui nod este, amintiți-vă,
e ca si cum ai crea nodul și atunci aveți un pointer numit următoare.
Tot ce faci este cu structura acolo.
Trebuie să atribuiți că pointer undeva.
Deci calculatoarele nu știu ce face încă.
Trebuie să-l atribuie de fapt, atunci când te crearea lista de legat.
Și asta e ceea ce, în principal PSET 5 va fi pe.
Deci, nu vă faceți griji despre nimic din toate acestea, chiar acum.
>> Audiența: Deci nu trebuie să se concentreze prea mult pe lista de link-ul, doar
concepția generală?
>> PROFESORUL: Doar destul de mult stive, cozile, liste de link, copaci, tabele de dispersie.
Doar putea ști care sunt acestea.
Noi nu cerem iti place ceva specific
pentru că nu am făcut într-adevăr o PSET că acoperă orice de care încă.
>> Deci, în ultimele două minute înainte de Am setat te liber să-l omoare acest test.
Destul de mult, cum ar fi, ne gândim cum departe voi ați venit în această clasă.
>> Îmi amintesc când două săptămâni din această clasă, unii dintre voi
petrece trei ore de apă scris.
Cât timp ar luați voi să scrie de apă acum?
30 de secunde, poate?
Gândiți-vă cât de mult voi au învățat.
CS este un subiect foarte, foarte greu.
Nu există nici o îndoială de asta.
E greu, de aceea studiază nimeni.
E doar greu.
Și este absolut în regulă.
>> Și eu sunt foarte mândru de faptul că toată lumea a făcut-o atât de departe.
Psets nu sunt ușor.
Ei iau o mulțime de timp.
Băieți, eu nu vă va cere să scrie jocul de 15 sau Vigenere pe PSET.
Nu este nevoie să sperii doar despre asta.
Toate testăm aici este de a evalua cunoștințele conceptuale, precum și
ca unele dintre abilitățile dumneavoastră de bază de codificare.
Testul este conceput pentru a într-adevăr o provocare să fie.
Cum ar fi, acesta este conceput pentru tine nu pentru a obține 100.
Este, de asemenea proiectat pentru a vă, probabil, nu fie în măsură să termine în 75 de minute.
Și asta e în regulă.
Sunt un student mine.
Știu, mi place atunci când am mers dintr-un test să fie ca, rahat.
Asta a fost foarte greu.
Probabil, ceea ce va happen-- și asta e în regulă,
Vă spun, băieți acum.
Mijloacele de pe aceste lucruri nu sunt mari deloc.
>> Iar pentru cei dintre voi care au fost obtinerea, cum ar fi,
câte trei pe seturi de probleme, asta nu inseamna ca esti
mergi la a lua un 60 la sută în această clasă.
Dacă aveți 60% la test, că nu
Adică ai de gând să obține un D în această clasă.
Vedem, în special I, pentru cei dintre voi în secțiunea mea,
Văd cât de greu voi sunt toate de lucru.
Și am ține evidența asta.
>> Voi va fi bine.
Nu e nici o memorie instituțională a fericire la sfârșitul semestrului.
Deoarece toți copiii de la Harvard spun prietenii lor, oh, vei fi bine.
Nimeni nu îți spune tipi care aici.
Așa că trebuie să vă spun că aici voi.
>> Voi va fi bine.
Sunt atât de mândră de voi toți băieți.
Testul va fi greu.
Studiu pentru ea, și după aceea arunca doar să degajeze.
Gata de a învăța lucruri noi obține.
Și să mănânce bomboane.
Avem o mulțime de bomboane.
>> Obține un somn bun.
Nu, nu dormi, pentru că că ar fi foarte rău.
CS este o mulțime de logică.
Dacă nu dormi, nu te poate funcționa, și creierul nu poate funcționa.
Și voi fi aici pentru următorii 20 minute, dacă cineva vrea să stea în jurul.
Voi o să-l omoare.
Mult noroc.