>> [MUSIC JOC]
>> Davin: Bine, băieți.
Deci, aceasta este revizuirea pentru primul test.
E toată lumea gata pentru testul de miercuri?
ALLISON: Woo!
STUDENT: Woo!
Davin: Da.
ALLISON: Da!
Davin: Tipul ăla e gata.
Tipul ăla, două mâini, frumos.
Așa că recenzie test astăzi, va să fie aproximativ o oră și jumătate.
Ne vom trece peste toate marile concepte trebuie să știți pentru testul.
Ne vom trece peste unele de codificare de exemple de utilaje, care sunt pe fiecare test.
Și, dacă aveți întrebări, nu ezitați pentru a ridica mâna și totul
ca asta.
Ei bine, logistică despre testul online.
Așa că am de gând să împartă oameni în sus, în camere diferite.
Este bazat pe numele lor.
Deci, dacă aveți orice întrebări despre unde pentru a merge sau despre ceea ce este semnificativ, cum ar fi,
cuvântul oficial cu privire la ceea ce se întâmplă pentru a fi pe testul, verifica on-line.
Și asta e tot la zi.
Deci, dacă nu există întrebări adresate începe cu, vom începe.
Și aici e Allison.
>> [Bate]
>> ALLISON: OK, mulțumesc, Rob.
Aprecia.
Davin ar fi lovit ușor la acest lucru.
Aceasta este lista non-exhaustivă de subiecte, ca întotdeauna, așa cum Davin tocmai a spus.
Consultați documentația on-line despre test de zero.
Dar acest lucru este destul de much-- e pe programei
Este tot ceea ce am trecut peste până acum.
Totul aici este un joc cinstit, precum și orice altceva
care au fost menționate în curs.
>> Secțiune mea, aici, este doar o mulțime de revizuire.
Există câteva exerciții de ca voi ar putea să funcționeze pe.
Dar pentru cea mai mare parte, cu adevarat doriți să obțineți să Davin cu cele de cod
prin exerciții de mână.
>> Așa că am de gând să zboare prin aceasta.
Dacă aveți întrebări, nu mă mai.
Ridică mâna.
Promit că voi probabil te văd.
Dacă nu, doar val în jurul valorii.
Am de gând să fie vorbesc repede.
Sper că toată lumea e în regulă cu asta.
>> OK, cuvânt special, Davin, evident, ați uitat pentru a parcurge aceste slide-uri.
[Râde] Ai probleme, omule.
Deci, sfaturi pentru test de zero, practica de codificare pe hârtie.
Voi sunt mergi la a lua niște practica cu care acum cu Davin,
așa că nu va fi complet de unul singur.
Cred că ne intampla de fapt prin aceste două funcții.
Deci, veți fi bine pregătit acolo.
>> Să fie familiarizat cu seturi de probleme.
Au fost întrebări pe teste anterioare
care vă va cere, de exemplu, pentru a coda ceva foarte similar cu Mario.
Deci, fiind foarte familiarizat cu seturi de problema ta, precum și
ca întrebările vă rugăm la început pe formularul
pe care le completați, va va serveste foarte bine.
>> Face un test anterior sub constrângerile de timp.
Aceste teste sunt lungi.
Timpul trece foarte repede.
Și de multe ori, nu îți dai seama cât de rapid merge până când de fapt
pune-te în aceste constrângeri.
Deci, dacă vă puteți tăia pur și simplu afară, știi, 75 de minute, fie în seara asta sau mâine
pentru a lua una dintre aceste teste în temeiul că, veți fi într-o formă mult mai bună.
>> Și, de asemenea, crearea de foaia de referință.
Amintiți-vă, veți obține o Pagina fata si spate
ca referință pentru testul pe miercuri.
Crearea că este o modalitate foarte bună de a studia.
Orice lucru care întâmpinați probleme cu doriți să includeți pe acolo.
Orice lucru care TFS dumneavoastră au fost, cum ar fi, acest lucru este foarte important.
Ar trebui să știi acest lucru, sunt poate că lucrurile pe care le avea pe acolo
dacă nu le-au memorat.
Chiar dacă nu le cunoști cu adevărat bine, uneori având pe acolo
este doar un fel de confort pentru tine, care știu teste sunt stresante.
Deci, orice confort te poate ajuta.
Bine, de asemenea, pentru a primi de somn și mânca și plac lucrurile normale
pe care am să vă spun pentru teste.
>> Deci, incepand de off ușor, tipuri de date și dimensiuni.
Așa cum am spus, aceasta este doar de gând care urmează să fie aruncat-mi o mulțime de lucruri
aici că ar trebui să știi.
Deci, avem caractere noastre că sunt unul bytes, int
că sunt patru bytes, lung lung, care sunt opt ​​octeți.
Practic, e doar doresc să dețină numere întregi mai mari.
Flotoare, care sunt patru, duble, care sunt opt.
Din nou, doar îți dă mai mult spațiu pentru flotoare tale.
Și apoi tastați stele, astfel încât orice Indicatorul de pe o mașină pe 32 de biți,
care este tot voi avea nevoie de să știu, este de patru bytes.
>> Deci, toate lucrurile trebuie Știi, poate că lucrurile
vrei sa ai pe foaie de referință.
OK, de conversie binar la binar, conversie
la hexazecimal, înainte și înapoi, toate lucrurile pe care ar trebui să știți.
Deci, de la binar în zecimal.
Vreți să luați un minut rapid și să încerce și dau seama de fiecare dintre acestea
și apoi spune-mi care sunt acestea?
>> Am, de asemenea, bomboane în geanta mea, astfel încât oricine care răspunde devine bomboane, apropo.
Și am o mulțime de ea.
Lasă-mă să iau asta.
Am de gând să dau asta Gabe.
Astfel încât să puteți înmâna bomboane la oricine e frumos și de cooperare.
>> OK, am văzut o mână acolo în spate.
>> STUDENT: Da, prima este de 42.
>> ALLISON: Da, în primul rând unul este de 42, corect.
STUDENT: [inaudibil].
[Râsete]
ALLISON: În al doilea rând unul, acolo înapoi în galben?
STUDENT: 110010.
ALLISON: Corect, și acest lucru ultima, aici pe jos?
De asemenea, Da, știi vrei?
Doar aruncă bomboane.
Ce zici de bomboane pentru toată lumea?
>> STUDENT: [inaudibil] când am terminat.
>> ALLISON: Shh.
Și apoi ultima.
Cine vrea să răspundă?
Chiar acolo.
>> STUDENT: 11100.
>> ALLISON: 11100, uita-te la asta.
Felicitări, mare de locuri de muncă, toată lumea.
OK, toată lumea fel de a înțelege procesul de a face acest lucru?
Ați, mergând de la binar în zecimal modul în care am tendința de a face acest lucru, este scris în
atribuțiile 2.
Așa că am spus, OK, 0 ori 2-0, astfel e 0, 1 ori 2 cu primul,
este de 2 merge mai departe în acest fel.
Are cineva mi-a explicit anunt du-te printr-un exemplu de binar?
OK, rece.
>> Zecimal în binar este foarte asemănătoare.
Am tendința de a scrie în puterile 2.
Începeți cu cel pe care este cea mai mare, dar nu sa dribleze pe zecimal
că sunteți în căutarea pentru.
Și apoi un fel de modul de lucru înapoi adăugând lucrurile după cum este necesar.
>> Și apoi cu plus, este la fel ca adăugarea normal.
Dacă aveți vreodată cazul în care sunteți adăugarea a două 1s, devine evident 2.
2 în binar este acum de 1 0, deci va trebui pentru a transporta dvs. 1 în coloana următoare.
Rece.
>> Hexadecimal, acest lucru ar putea fi ceva care este mai puțin familiar.
Deci, ca Rob a fost pur și simplu mi-a spus în prealabil, truc său pentru acest
este de doar despărțim în patru bucăți octet, OK?
Bits, îmi pare rău.
Vezi?
Mulțumesc Rob.
Acesta este de ce ești aici. [NOISE] OK, deci ne-am rupe în sus
în patru biți bucăți.
Deci, cu binare în hexazecimal, ne uităm la primul 4,
care este dacă avem patru 1s într-un rând, ce număr are asta simbolizează?
>> STUDENT: F.
>> ALLISON: Deci, în acest caz, ceea ce este 11111111 or-- da?
STUDENT: FF.
ALLISON: Perfect, FF.
Atât de mare, bomboane pentru tine.
Acum, pentru modul în hexazecimal în binar, ne-am doar gândiți-vă un fel de în sens invers.
Pentru fiecare număr sau literă care avem în hexazecimal noastră,
doar se transforma pentru ei patru biți [Râde] pentru transformarea sa patru biți.
Deci, 5, în acest caz, ceea ce este 5 daca suntem o reprezintă cu patru biți?
>> STUDENT: 010?
Mm-hm.
Și apoi A, care este de fapt 10, ar fi?
1010.
Deci avem că, aici.
Deci, de conversie între hexazecimal și binar de fapt nu este așa de rău.
Dacă te uiți la ea în patru biți bucăți, o să fie de aur.
Everyone-- da?
>> ROB: Aceasta este o prostie, dar îmi amintesc mereu
A, deoarece A lui ar trebui să fie de 10.
Și binar doar 10 10, deci--
>> ALLISON: Ah, acolo mergem.
>> ROB: Hei.
>> ALLISON: Hei, bomboane de Rob.
Există chestii de bază non-ciocolată acolo.
Astfel încât să puteți avea unele.
Matematica așa ASCII.
Se comporta.
Deci ASCII matematica, ca voi probabil bine aminte
p set 2 cu Visioneer și Cezar, ai făcut o mulțime de acest lucru.
Amintiți-vă, personajele sunt fundamental doar numere.
Astfel încât să putem face matematica cu ei, la fel cum am face matematica cu int.
>> Deci, avem doar un pic simplu lucru aici.
Avem unele în A, care este inițializat la 65 de ani.
Și B este egală cu valoarea ASCII a A plus 1, char C egal cu D minus 1,
și char D egal cu 68.
Deci, atunci vom imprimare toate acestea, așa cum vom vedea aici.
Și poate cineva sa-mi spune- ceea ce va imprima?
STUDENT: [inaudibil].
ALLISON: Exact, așa un lucru de observat este
pe care le imprimați afară de caractere de fiecare dată, aici.
Suntem desemnarea, chiar dacă A și B sunt int, atunci când le-am declarat mai sus.
Suntem imprimați-le ca personaje de la sută C și situația noastră printf,
astfel încât acestea vor imprima toate ca de caractere.
Și, desigur, valoarea ASCII 65 voinței imprima ca A. Valoarea ASCII a A plus 1
ar fi 66, care ar mândru de B. Deci, în fapt,
obține A B C D Jucătorii bun acolo?
Orice întrebări?
Minunat.
>> OK, domeniul de aplicare.
Deci, domeniul de aplicare este, evident, o foarte lucru important să se înțeleagă, aici.
O mulțime de voi, dacă au erori de compilare,
și spune că nu aveți acces la unele variabile,
este, probabil, pentru că definit acesta în o buclă
și apoi a încercat să-l acceseze din ea, sau viceversa.
>> Deci, domeniul de aplicare la miezul ei, doar în cazul în care determină
spunem există o variabilă, în cazul în care ne-am se poate schimba, în cazul în care o putem accesa.
E doar un fel de a spune acestea sunt singurele locuri în care aveți acces
pentru această variabilă.
>> Deci, cele două domenii despre care vorbim în timpul clasă sunt globale și locale.
Variabile astfel încât globale vorbim despre atunci când sunt definindu-le de mai sus principal.
Aceasta înseamnă că întreaga dumneavoastră Programul are acces la ea,
și că există atâta timp ca ruleaza programe, OK?
Local înseamnă că este mai limitate la o regiune.
Deci, ori de câte ori au funcții specifice cum ar fi swap, noi mereu vorbim despre.
Noi întotdeauna vorbim despre schimb cu A și B. A și B, există în această funcție.
Ele nu există în altă parte.
>> De asemenea, atunci când aveți dacă declarații sau pentru bucle.
Ori de câte ori avem, de exemplu, în o pentru buclă ne-am int I este egal cu 0.
Avem niște condiții și l-am actualizat.
Am există doar în cadrul bretele de faptul că pentru bucla.
Dacă încercați să-l accesați în altă parte, compilator ta ar țipa la tine.
Ar fi ca și cum, ce vrei să faci?
Acest lucru nu există.
Deci, asta e doi diferite tipuri de domeniul de aplicare.
Asta face sens pentru toată lumea?
>> Deci, de exemplu aici, acest este doar un simplu program.
Ce nu voi cred că este o să se întâmple la fiecare punct
care vom încerca să imprimați?
Deci, asta de aici, ce se va întâmpla?
STUDENT: Se va imprima trei.
ALLISON: Corect.
Va imprima trei.
Ce zici de aici?
STUDENT: Nu va funcționa.
ALLISON: Nu va funcționa.
Ești afara domeniului de aplicare, nu?
Variabilă locale nu există în afara acestor bretele, bine?
Și apoi ce aici?
>> STUDENT: [inaudibil].
>> ALLISON: Ce?
Rob, du-te.
>> ROB: tocmai am spus.
Variabilele globale ar trebui să fie variabilă de subliniere la nivel mondial.
>> ALLISON: Ah, da, îmi pare rău.
Mulțumesc, Rob.
Rob ca compilator nostru rezident.
O să țipe doar la noi atunci când ne nevoie de ea. [Râde] Da,
ar trebui să fie variabilă de subliniere la nivel mondial.
Astfel presupunând că această a fost subliniere global
variabilă, ce se va întâmpla aici?
STUDENT: Aceasta va funcționa.
ALLISON: Se va lucra.
Deci, acesta va imprima, asa ca un exemplu foarte simplu.
OK, prototipuri.
Deci, în mod evident, consideram cu adevarat sublinia pentru voi
pentru a face funcții în cazul în care sens în programele dumneavoastră.
Dar, desigur, atunci când face propriile funcții,
de obicei, le veti defini după principal.
Și vei încerca să le numim în principal.
Și dacă nu utilizați un prototip, compilatorul va tipa la tine.
>> Prototip este, în principiu doar spune compilatorului dvs.
că am această funcție de mai jos principală.
Am de gând să-l sun înainte să-l definesc.
Ține-.
Promit că e definit, și tu va avea tot ceea ce ai nevoie.
>> Deci, modul în care o face este doar întoarcerea ta tipul, numele dumneavoastră funcția, datele introduse de dvs.
listă.
Este practic prima linie de declarația dumneavoastră funcției.
E într-adevăr tot ce este.
Dar aceasta este doar o natură generală de format.
>> Deci, în exemplul nostru aici, care voi ar trebui
au văzut în secțiune la un moment dat, ne-am
unii cub int că ia unele int de intrare.
Și avem principal nostru funcție, prin care se solicită cub.
Și cub este definită după fapt.
>> Deci, dacă nu am avea de intrare cub int în partea de sus, când am sunat cub
în principal, compilator nostru s-ar supăra pe noi.
Ar fi ca și cum, ceea ce vorbești despre?
Cub nu există.
Nu știu ce-mi ceri pentru.
Și Mă duc oprire.
>> Ci pentru că am făcut prototip nostru în partea de sus, le-am spus,
Știi, când vezi cub, nu-ți face griji.
Promit este definit mai târziu.
Și-l voi lăsa să faci ce vrei.
Deci, dacă aveți vreodată o funcție care este declarată după ce-l sun
pentru prima dată, trebuie să l-au prototyped în partea de sus.
>> Da?
>> ROB: Este pătrat, nu cubaj.
>> ALLISON: Oh, Doamne.
Nu am have-- Gabe, m-am gândit ai fost corector nostru.
Baieti OK, să poarte cu mine, aici.
Sper ca toată lumea din ce in ce ideea.
OK, deci aceasta ar trebui să aibă fost pătrat, nu tocata.
Dar ideea rămâne aceeași.
Orice funcție care suntem de asteptare dupa faptul ar trebui să aibă un prototip.
Toată lumea bună cu asta?
Orice alte erorile de scriere,?
OK.
Orice erorile de scriere, de aici înainte de a începe, Rob?
[Râde] OK, așa structs.
Practic, structs permiteți pentru a crea propriul tip de date.
Atât de mult ca un int sau un char sau un flotor, e doar un alt tip.
Îmi place să mă gândesc la ea ca, cum ar fi, crea propriul tip de date.
Tu așa permite să faci asta.
Și deține diverse tipuri de date.
>> Deci, dacă vă aduceți aminte, într-o matrice, ne-am poate deține doar lucruri de tip similar.
Structs ne permit să dețină mai multe lucruri de diferite tipuri.
Deci, în acest caz aici, au o struct numit Student,
numit aici în partea de jos.
Și avem unele id int și unele nume de coarde.
Deci, aceasta este doar un alt tip de date.
Avem acum un tip de date numit Student.
>> Deci, pentru că ne putem gândi l ca doar un alt tip de date,
putem declara variabile așa cum ne-ar oricare alta.
Deci, în loc de doar avea, cum ar fi, un elev int, avem doar un student,
elev 1.
Oh, uite.
E Rob.
Deci, aici suntem de declarare unei structuri, sau o variabilă
numit elev 1 student tip.
Așa că va trebui id și numele asociate cu ea.
>> Și modul în care acestea accesa elemente din cadrul struct nostru
este cu operatorul punct, aici.
Deci, în acest caz, ne vom a declarat unii elev 1.
Am alocat ID-ul să fie de 1.
Și am atribuit numele de a fi Rob.
OK, toată lumea bună cu asta?
Folositi-l doar like-- da?
>> STUDENT: Da, typedef-- când avem nevoie pentru a utiliza typedef?
>> ALLISON: Deci typedef doar spune that-- Rob, tu
mă poate corecta pe acest dacă am wrong-- dar typedef este doar de fapt de declarare
ea ca un tip pe care le puteți folosi, nu?
>> ROB: Da, e practic, asa ca este doar crearea de
un alias, sau o poreclă pentru un tip.
Deci, aveți posibilitatea să tastați ca [inaudibil].
Deci, [inaudibil] există, iar acum tocmai ne-am
[Inaudibil] mijloace exact același lucru.
Și așa aici, suntem tastat, cred, unele struct tip 2 [inaudibil].
Deci, e doar un pseudonim pentru un anumit tip.
>> STUDENT: String [inaudibil] bibliotecă a fost introdus ca niște stele char.
>> ALLISON: Pentru scopurile noastre aici, dacă sunteți de declarare a unei struct,
doar face typedef struct.
OK, deci înainte, acest lucru este doar o variabilă normală aici.
Noi accesa cu un punct.
dacă avem un pointer la un struct, putem de fapt
utilizați o săgeată, care este destul de rece.
>> Deci, în acest caz, avem un pointer la un elev 1, care este student tip.
Amintiți-vă, împreună cu constructii pointer,
vrei indiferent de tipul pointer-ul indică pentru a fi la început.
Deci, avem o studentă 1, aici.
Si din moment ce acest student 1 este acum un ascuțit,
putem merge de fapt, elev nume 1 arrow în loc de puncte, pentru că este un pointer,
și să alocați Rob.
Și acum, dacă vrem să schimba Rob la Davin,
aceasta este doar vă arată un alt mod de a face acest lucru.
>> Deci, în loc de a folosi săgeată, pe care pot also-- voi încheia acest lucru și apoi
ia că question-- ai putea face, de asemenea elev de referință 1.
Asta spune ca du-te la tot ce este la elev 1, care
ar fi struct student nostru.
Accesati-l cu un punct și elementul pe care doriți, și apoi le retrocedeze.
Nu a fost o întrebare.
STUDENT: Da, așa cum se face că aveți de a utiliza [inaudibil] dacă sunteți
face stea elev fără [Inaudibil] elev?
ALLISON: Pentru ca acest este de a crea un pointer.
ROB: Vom vorbi despre asta.
ALLISON: Vom vorbi despre asta mai târziu în cadrul reexaminării.
Deci, țineți doar pe acel gând.
În cazul în care încă te deranjează de la capăt, vin să vorbesc cu unul dintre noi.
>> Deci, acestea fac exact același lucru.
Noi doar vă arată două moduri diferite de a face acest lucru.
Student 1 este acum un pointer, deci puteți accesa elementul Nume
în cadrul struct cu o săgeată.
Sau puteți dereference indicatorul, și apoi a accesa în mod normal ar fi.
Are care are sens pentru fiecare?
În cazul în care întreaga lucrurile sunt un pic indicatorul confuz, Gabe va vorbi despre asta,
iar apoi poate că acest lucru va face mai mult sens.
Da?
>> STUDENT: Da, așa cum este aceasta diferit de?
ALLISON: cel precedent?
Deci, elevul 1 din prezentul caz nu este un pointer.
E doar struct ta actuale.
>> STUDENT: OK.
>> ALLISON: întrucât acesta este un pointer la o struct.
>> STUDENT: OK, dar nu un fel de ajunge să lucreze în același [neauzit].
>> ALLISON: Se lucrează efectiv la fel.
Sintaxa este doar diferit.
STUDENT: OK.
>> ALLISON: Da, ei sunt efectiv aceeași.
E doar în funcție de context, poate doriți una peste alta.
Da?
>> STUDENT: Când faci referiri la 1--
ALLISON: Mm-hm?
STUDENT: De ce au parantezele?
ALLISON: Pentru ca elev 1 este indicatorul.
Deci, aveți nevoie pentru a vă asigura că sunteți doar dereferencing indicatorul.
>> STUDENT: OK.
>> ALLISON: Deci, în acest caz aici, parantezele din jurul ei
înseamnă că sunteți dereferencing elev 1.
Deci, ai de gând să în cazul în care elev 1 puncte, care este struct ta.
Deci, acum vă puteți gândi din ea ca și struct,
astfel încât să putem folosi funcționarea noastră normală punct.
Orice alte intrebari?
Rece, minunat.
>> Așa că ultimul lucru pe care, cred eu este ultima mea tobogan, Woo!
OK, deci virgulă mobilă imprecizie.
Am vorbit pe scurt despre acest lucru în timpul curs.
Practic, ne-am un număr infinit de numere reale.
Și dacă oricare dintre voi iubesc matematica, nu e
tot felul de chestii misto cu noi.
>> Dar există infinit multe numere reale.
Dar sunt doar finit multi biti pe care le avem.
Deci, ai întotdeauna o să au imprecizie, este tot.
Și asta e doar un fel de ca ceva ce ar trebui să știi.
Asta ca și cum am s-ar putea întreba de ce nu floating point imprecizie exista?
Deci, doar ceva ce ar trebui să știi.
Și cu asta, eu sunt de cotitură l pe Pointeri.
>> Binky: Buna ziua, băieți.
Numele meu este Binky.
Am de gând să vorbesc despre indicii.
Da, asa este, de fapt indicii partea mea favorită în acest curs.
Deci, doar pentru a face clar ceea ce Allison vorbea despre aici, asa ca motivul
why-- singura diferenta aici, diferenta mare a fost modul în care
ne pronunțăm lucruri.
Deci, stele elev înseamnă acest lucru este un pointer la un student.
Întrucât diapozitiv înainte, elev este un struct real, ca un elev real,
care conțin oricare din aceste lucruri.
>> Și motivul pentru care ne-am vreau sa-- da, Davin?
>> Davin: Ce săgeata înseamnă?
>> Binky: Sageata Mijloacele exact la fel ca aceasta.
Deci, nu aveți cu adevărat nevoie de săgeată.
Ca, daca esti doar de program în C, puteți folosi doar acest lucru.
Ne pare rău, eu nu ce este.
Puteți utiliza doar acest sintaxă.
>> Dar unii oameni, atunci când acestea au fost proiectarea C,
au gândit că oamenii folosit ca sintaxa atât de mult,
că ei vor dori veni cu o structură sintaxă pentru ea.
Și acest lucru a avut loc în forma acestei săgeată.
Și e foarte frumos, pentru că simbolizeaza ceva
ca și cum suntem de fapt în urma acest sageata, acest indicator,
față de un spațiu în memorie.
Și când vom ajunge acolo, ne-am dori să uita-te la numele pe care elev,
în cazul în care are sens.
OK?
>> Deci, aceasta este exact la fel.
Aceasta este exact acelasi lucru ca acesta.
Ei se compilat exact la fel, OK?
Și motivul pentru care aici de ce ne-am malloc ceva, este pentru că în acest caz,
variabila noastră este, de fapt doar o variabila pointer.
Deci, avem doar un spațiu în memorie care a deține un pointer.
Nu avem într-adevăr orice spatiu care deține struct actuale.
>> Deci, acest lucru trebuie să se facă în două etape.
Trebuie să creăm memorie pentru a pune în struct.
Și noi trebuie să creăm memorie pentru a pune indicatorul în.
Deci sunt de fapt doi diferite variabile, aici.
Una dintre ele este de tip elev, doar că nu are într-adevăr un nume.
Iar celălalt este de tip elev stele.
Și apoi de student 1 puncte acolo, în cazul în care face sens.
OK?
>> Deci, motivul pentru care am folosi indicii se datorează faptului că tot
într-un calculator, fiecare variabilă într-un calculator are două lucruri.
Ea are valoarea sa.
Și are sediul.
Și o modalitate buna de a conceptualiza acest lucru este acolo
multe probleme atunci când încercați să utilizați funcții.
Și vom încerca să uita-te într-una din cele.
Și anume, o să cred că de memorie ca cutii.
>> Întotdeauna te-ai gândit de variabile cand spui na este egal cu 5.
Crezi că a inscrie 5 într-o cutie.
Deci, ce se întâmplă dacă vrei să treci care int într-o funcție?
Trebuie doar pass-- eu nu fac know-- x într-o funcție.
Dar ce se întâmplă este în mod normal, ca oameni, tu
ar crede ceva de genul că sunt trece caseta unei persoane.
Și nu o face într-adevăr se întâmplă în computere.
Ce se întâmplă este de a copia valoarea din caseta de careul persoanei.
>> Deci, ceea ce am încercat să spun este că, dacă Ai un function-- sorry-- aici,
dacă avem o funcție ca la cinci în sus acolo, dacă încercați să treci o variabilă,
este doar de gând să copiați.
În cazul în care un nx Inițializare este egal cu 3, va pentru a copia această valoare până la variabila A
acolo.
OK, iar acest lucru este un fel de motiv de ce ne-am dori să utilizeze indicii.
Deoarece în loc de oferind doar valoarea,
în loc de doar in trecere doar valoarea la o funcție,
dorim să treacă de referință.
Ceea ce noi numim adversari de referință este un fel de a da caseta din funcție,
astfel încât funcția poate, de asemenea, schimba valorile în care caseta.
>> OK, deci doar câteva indicatorul de bază lucruri este de a crea indicii,
doar tu declare un tip, și ai pus o stea imediat după aceasta.
Iar tipul este doar ceea ce indică la.
Deci, dacă este o stea int, te arătând spre un int.
Daca este o stea char, esti arătând spre o diagramă.
Și dacă este o stea de student, esti arătând spre un elev.
OK?
>> Și sunt toate cele 4 bytes.
Deoarece această variabilă ea nu are de fapt
trebuie să dețină un char, un int, sau un student.
Ea doar trebuie să dețină o adresă.
De aceea sunt toate cele 4 bytes mult timp într-o mașină normală pe 32 de biți.
OK?
Deci, aici, x este o variabilă care indică la un int. Puncte y la un char. puncte z
la un float.
Orice întrebări aici?
Rece.
Și acolo sunt două simboluri diferite pe care le au
de a păstra în minte atunci când vin la indicatorul.
Astfel referire și dereferencing sunt cele mari.
Deci, ampersand a Numele variabilă, da?
STUDENT: Adresa.
Binky: Adresa.
Deci, dacă declara int-o este egal cu 5, atunci ampersand
de o este de gând să vă dau adresa.
Și puteți încerca de fapt pentru a imprima ca și a vedea
ceea ce adresă în memorie variabila are.
Și apoi dereferencing-- astfel că a fost corelarea,
obtinerea de dereferencing address-- este exact opusul.
OK, la fel ca ori este vizavi de o divizie,
stele este opusul ampersand.
Deci, mijloace dereferencing du-te acolo.
Deci, dacă vă dau eu star-- nu stiu-- 50, asta e
O să încercați să mergeți la adresa de Numărul 50 în interiorul computerului.
OK, și de ce vom vedea că ele sunt opuse?
Pentru că ceea ce se întâmplă dacă faci ceva de genul stea ampersand o?
Ei bine, ampersand vă oferă o adresa unei variabile, adresa unui.
Dar stele înseamnă a merge acolo.
>> Deci, ce se întâmplă dacă du-te la adresa unui?
Trebuie doar ajunge la o, nu?
Deci, merg la adresa o este același lucru ca și o.
De aceea ei sunt, de obicei, sa referit la same-- acest
iar acest sunt denumite Operatorii ca opuse.
OK?
Atât de cool.
>> Sub capota, de exemplu, dacă vom declara int x este egal cu 5,
avem o variabilă.
Și amintiți-vă că am spus fiecare variable-- și acesta este un lucru bun
să păstreze în mind-- are două lucruri diferite asociate cu.
Acesta are o și o valoare adresat.
OK?
>> Astfel încât valoarea în acest caz este de 5.
Și adresa este-- să zicem, eu sunt face ceva up-- e 0x04.
Și singurul motiv pentru care noi, de obicei, reprezintă adrese din hexazecimal
este una, pentru că e ca și cum bine.
Se merge bine cu binar.
Este ușor să se convertească la și de la binar.
Și nu prea mare, dacă aveți un număr foarte mare.
Așa că ne-am dori să folosească hexazecimal în adresele de imprimare.
Dar am putea reprezenta aceasta ca un întreg.
E în regulă.
>> Și așa că are o adresă 4 și o valoare de 5.
Și apoi i-am spus pointer stea int.
Deci, acesta este un tip diferit, aviz.
Int pointer stele este egal adresa lui x.
Deci, ce va fi valoarea PTR?
O să fie Adresa de x, aici.
OK, deci valoarea este de gând să să fie aceeași cu adresa.
Asta e atribuirea opera fac.
Și apoi ptr va avea propria adresa, care se dovedește,
în acest caz, 8, OK?
>> Și apoi am crea o nouă copie întreg.
Și eu spun copie int este egal cu du-te acolo.
Deci, du-te la ceea ce ptr indică spre.
Ei bine, ceea ce acest PTR avea?
Ptr are 0x04.
Ce se întâmplă dacă am încerca să mergem acolo?
Voi găsi pe cel care are adresa X și care își are domiciliul 4.
Și care își are domiciliul patru este de x.
Asta face sens?
Da?
>> STUDENT: În acest caz, este indicatorul într-o stivă?
>> Binky: În acest caz, it's-- bine întrebare.
Eu nu cred că într-adevăr despre acest atunci când se face la aceste adrese.
Dar dacă acest lucru este, cum ar fi, toate acestea sunt variabile locale,
atunci x este de gând să trăiască in-- tot este de gând să trăiască în stivă.
Deci, totul se petrece să fie îndreptat la stiva.
Ai doar la grămadă, atunci când de a începe să utilizați malloc, nu?
>> Deci, dacă vă amintiți stivă este de fiecare dată te sun o funcție în programul tău,
cum ar fi, de exemplu principal, sau orice alte funcții, cum ar fi printf.
Toate variabilele locale sunt mergi la a lua pune într-un cadru stivă.
Și ei vor să se cum ar fi îngrămădite în stivă.
Asta e ceea ce se numește o stivă.
Și toate aceste variabile locale vor fi acolo.
Și heap-- și noi te vom pentru a vorbi mai mult despre acest later--
heap este locul unde toate alocate dinamic vieți de memorie.
Rece?
>> Mergem la acest diapozitiv.
Da?
>> STUDENT: De ce nu este int copie întoarce 0x04?
>> Binky: De ce nu este int copie întoarce 0x04?
>> STUDENT: De ce nu este că [inaudibil]?
>> Binky: Pentru că ceea ce este o valoare de PTR?
>> STUDENT: 0x04.
>> Binky: 0x04.
Ce se întâmplă dacă te duci la 0x04?
Ce ai?
>> STUDENT: Oh, OK.
Binky: Tu vezi?
STUDENT: Da.
Binky: Deci ai 5.
Deci, copie va avea 5, în cazul în care are sens.
Da?
>> STUDENT: Poate am ajuns 5 în caseta de valoare [inaudibil]
dacă ne-am pus int copia [inaudibil].
>> Binky: Int-- noi ar fi, da.
Care ar fi făcut destul de mult același lucru.
Dar în acest fel, putem trece adresa de funcții.
Și asta e un lucru rece am de gând să fac chiar acum.
>> Deci, acest tip de exercițiu vine mereu în sus on-- foarte de obicei, vine pe chestionare.
Deci, este foarte bun pentru a încerca să face așa ceva te.
Deci, încercați pentru a urmări ceea ce adresei este și doresc valorile variabilelor
sunt în fiecare punct.
Deci, acest lucru este exact ceea ce vom face.
Aici, avem pași, o, doi, trei, patru, cinci.
Unul, doi, trei, patru, cinci.
Și vom urmări valorilor lui x și o.
>> Deci, ceea ce face această, în cazul în care acest lucru este o Codul de buggy, noi încercăm să facem la cinci.
Deci, suntem încercarea de a obține într-un variabilă și modifica valoarea de 5.
Și amintiți-vă analogie mea de a avea un Box si predarea caseta cineva?
Deci, principal are această casetă numit de x.
Și ea conține valoarea 3.
Și eu încerc să predea această casetă pentru a cinci.
>> Și vreau să cinci să se schimbe valoarea acestei casete de 5.
Și apoi am imprima valoarea lui x.
Aceasta este ceea ce function-- meu asta este ceea ce încerc să fac.
Încerc doar pentru a actualiza valoarea lui x la 5.
Este clar ce face funcția?
>> OK, deci ce vor fi valori ale lui x și un drept aici,
prima linie, chiar înainte de primul line-- Mi-ar say-- a programului?
>> STUDENT: Probabil gunoi.
>> Binky: Doar chestii gunoi.
Așa că am pus doar N / A. Astfel noi nu prea știu.
Ca, o nu mai există încă, pentru că nu am sunat la cinci.
Int o nu este declarată.
Si x este de gând să mai existe aici, dar noi nu avem cu adevărat
atribuie orice valoare pentru ea, așa bine?
>> Și apoi, ce vor fi valori ale lui x și un număr din două?
>> STUDENT: [inaudibil].
>> Binky: Deci, X va fi de 3.
Asta e ușor, pentru că suntem atribuirea 3 la ea.
Și un încă nu există pentru că o doar trăiește în cinci.
Așa că am de gând să aibă 3 și nimic.
sau ca un gunoi, indiferent de, nu prea definit.
Și acum, aceasta este importantă linie.
Aici, vom apel de fapt la cinci.
Și amintiți-vă ce am spus.
Noi nu trece pe centru.
Noi copiați doar valoarea caseta pentru o altă casetă.
Asta-i toate computerele nu, copiați lucrurile la un loc la altul.
>> Deci, la cinci, ceea ce face de fapt este exemplare valoarea lui x la un.
Deci, ce va fi aici?
Valorile x și a.
3 și 3, vom copia pur și simplu peste de la x la un.
Rece.
>> Acum suntem aici.
Și acum mergem pentru a actualiza un egal cu 5.
Ce se va întâmpla în linia patru?
>> STUDENT: [inaudibil].
>> Binky: o va fi actualizată, dar X nu sa actualizat.
Deoarece x locuiește încă în principal, este un complet diferit bloc de memorie.
Este o variabilă diferită.
o este o altă variabilă.
Acestea se întâmplă să aibă aceeași valoare, deoarece am
copiate valoarea lui x la un.
Dar acum, când fac un egal 5, aceasta nu afectează într-adevăr x în nici un fel.
Aceasta este partea mai complicată.
Are sens pentru toata lumea?
Da?
STUDENT: Încă o întrebare, ai 3.
De ce este o already-- oh, nu, e 3.
Ne pare rău, nu contează.
Am citit 5.
>> Binky: Da, 3, 3.
>> STUDENT: [inaudibil], da.
Binky: Și atunci ne-am atribui 5 până la o, dar nu diminuează x.
Bun?
STUDENT: Da.
Binky: Da?
Îmi puteți explica din nou cum un devine copiat [inaudibil]?
>> Binky: OK, deci atunci când apelați la cinci de x, astfel încât această linie de cod aici.
la cinci dintre x, ceea ce este x?
x este la doar 3 în acest moment, nu?
Deci, ați putea gândi doar de a pune 3 aici și a uita despre de x.
Doar încearcă o 3 aici.
Cum ar fi, vom copiați valoarea lui x la int A, care-i treaba acolo.
OK?
>> Deci valoarea lui x este 3.
Mergem să copiați 3 pe la a.
Și toate acestea celelalte bloc de memorie, acest alte variabile
numit va avea 3, precum și.
Asta face sens?
Da?
>> STUDENT: Dacă da cinci ca îl ai ca număr întreg x în loc de a,
ar stabili că totul?
>> Binky: Dacă este un integer-- nu, care nu ar rezolva totul.
Deci, asta este o întrebare foarte bună.
Nu contează cu adevărat ce te sun aceste variabile.
Din nou, aceasta va fi o chestiune de domeniul de aplicare, pentru că ei nu sunt în același x.
Sunt complet diferite spații din memorie.
STUDENT: [inaudibil].
Binky: Deci nu prea conteaza ceea ce le numim.
Care nu se rezolvă lucrurile, bine?
Mai multe intrebari?
Da?
>> STUDENT: Cum este înapoi la Numărul cinci [inaudibil]?
Binky: OK, nu am făcut asta încă.
Să mergem la numărul cinci, atunci.
>> STUDENT: [inaudibil]?
>> Binky: Ce?
>> STUDENT: Ai un retur la toate?
Binky: Noi nu avem o întoarcere, nu de principal.
Dar principalele întoarce 0 în mod automat dacă nu se întorc nimic.
Da?
>> STUDENT: Ai putea face main-- sau ai putea face la cinci întoarcere o?
>> Binky: Am putea avea la cinci returna o, da.
Dar atunci ar trebui să atribui x este egal cu valoarea de returnare de la cinci,
ceea ce ar fi o ușoară diferit de program.
Aceasta ar funcționa.
Dar ceea ce vrem să facem este ceea ce este numita schimbare ceva în loc.
Așa că vrem să efectiv schimba cutia și nu vă faceți griji
despre a fi nevoie să se întoarcă valorile sau orice.
OK?
>> Acest lucru este la fel ca funcția de swap David a arătat în curs, cu excepția eu sunt
numai de-a face cu o variabilă.
Și el a folosit două, deci int a și b și apoi variabilă și fleacuri temporar.
OK?
Deci, care este ultima linie?
După ce a cinci întoarce, e pur și simplu a este de gând să plece.
Noi nu va mai avea o, și numai x va trăi în continuare pe.
>> Și ghici ce? X nu a schimbat valoarea sa,
la urma urmei, pentru că suntem numai modificarea valorii unui.
De aceea a fost de 3 x pe tot parcursul.
OK?
Bun.
Deci, acest program nu realiza ceea ce ne-am dorit.
Acum, haideți să-l repara.
>> Și programul fix este folosind indicatori.
Ceea ce facem este, avem trei linii care sunt diferite.
Primii este nu ne trece de x.
Ne trece adresa lui x.
Deci, în loc să copiem valoarea centru,
Sunt încă de gând să copiați ceva.
Dar eu sunt copierea peste adresa de la cutie.
>> Deci, dacă am trece adresa caseta de la cinci, apoi la cinci
va fi capabil să găsească că în memorie și modifica valoarea.
>> Deci, și apoi acolo, am că un nu mai este o int.
o este o stea int.
Este un pointer la un întreg.
Și apoi, pentru că eu sunt asociate aborda aici, iar apoi ceea ce fac
nu este o este egal cu 5, deoarece o deține o adresă.
Deci, ceea ce vreau să fac este să mergeți acolo și actualiza conținutul acestei adrese
cu 5.
>> OK, deci hai să mergem prin toate liniile unul câte unul.
Așa că atunci când am început aici, m-am încă mai păstrează N / A, N / A, N / A
pentru tot ceea ce în primul line, pentru că nu avea într-adevăr
a declarat chestii încă.
Și apoi linia doi, am x este egal cu 3.
O stea int-o nu există, același lucru ca și mai înainte.
>> Acum devine interesant.
Așa că am de gând să treacă.
Și să presupunem că adresa de x este de 12 în hexazecimal.
Să presupunem asta.
L-am alcătuit.
Deci, ce caut eu aici este un mod de a cinci.
Am trece de 12.
>> Deci, ce valoare are o avea?
>> STUDENT: [inaudibil].
>> Binky: Îmi pare rău?
>> STUDENT: [inaudibil].
Binky: Da, cum ar fi, de a permite presupunem că suntem aici, acum.
Eu cer.
>> STUDENT: [inaudibil].
>> Binky: Acesta a fost inițiat.
>> STUDENT: [inaudibil].
Binky: Pentru că am trecut ceva la funcția.
Da?
>> STUDENT: Adresa de x.
Binky: O să au adresa lui x.
Și adresa lui x este de 12, bine.
Deci, X va fi de 3, pentru că nu ne-am schimbat cu adevărat x încă.
Și apoi o va fi 0x12, așa adresa de x, pentru că asta e
ceea ce am trecut de la cinci.
>> Și apoi ce se întâmplă dacă vom încerca să mergem acolo?
Ce vom găsi?
Deci, dacă încercați să imprimați stea un, vom urma această adresă
și pentru a obține valoarea înăuntru.
Iar valoarea este doar aceeași valoare ca x
are pentru că asta e adresa x, care va fi de 3.
Suntem bine?
>> OK, iar apoi acum, vom merge de fapt acolo.
Și noi actualiza orice este în acest adresă 12.
Am 5 face.
Deci, acum, atât x și stea o sunt de 5.
>> De ce este asta?
Deoarece adresa lui x este 12.
Și o are, de asemenea, de 12 ca valoarea sa.
Deci, dacă urmăm 12, suntem doar de gând să găsească de x.
Deci, orice am face cu stea o să se întâmple
pentru x, deoarece o conține adresa lui x.
OK?
>> Și acest lucru este ca esența fix.
Deci, acum suntem capabili, de la până la cinci, de fapt,
memorie cu acces care a trăit în principal.
Deci, această memorie nu trăiește în a cinci, la fel ca înainte, această adresă 12.
Și noi am fost capabil de a merge acolo și schimbați valoarea la 5.
>> Și apoi, când ne vom întoarce, am uitat despre o.
Am uita de stea o.
Și x este încă cinci.
Deci, dacă doriți să să pună în aplicare o funcție de schimb,
v-ar face doar exact același lucru, cu excepția aveți nevoie pentru a int stars aici,
și așa mai departe și așa mai departe.
OK?
Suntem bine?
Rece.
>> Deci, pointer aritmetică.
Acesta este un subiect ușor complicat.
Deci, se dovedește că indicii sunt doar numere întregi.
Vă puteți gândi la ele ca numere întregi.
Pentru că în memorie, trebuie ca memorie adresă zero, unu, doi, trei,
patru, cinci.
Deci, putem rezuma adrese de memorie.
>> Și asta este, de obicei, ceea ce faci, atunci când ești și matrice, de exemplu.
O matrice este la fel ca un contiguă bloc de memorie, de o mulțime de caractere,
de exemplu, o mulțime de int.
Deci, dacă vrei să mergi la doilea int sau a treia int,
puteți rezuma doar ceva la prima adresă, și vei ajunge acolo.
Deci, acest lucru este foarte util pentru asta.
>> Și de lucru pentru a păstra în minte, deși, este
că nu e la fel ca aritmetică normală în sensul
că dacă ai de a face cu, să zicem, o stea int, și adăugați 1 la acesta,
atunci nu vei pentru a adăuga 1 la adresa,
ai de gând să adăugați 4 la adresa.
Pentru ca un int este de 4 octeți.
>> Deci, acest lucru este la fel ca mersul pe jos pe o matrice.
Dacă avem o serie de o mulțime de int și apoi vom încerca să mergem la cea de a doua,
este practic doar însumarea Adresa de primul plus 1.
Dar care nu va be-- doar să spunem că adresa primului este de 4.
Aici, în acest caz.
Și dacă ne-am rezuma, astfel încât aceasta este ceea ce se întâmplă.
Avem un întreg.
Int x este egal cu 5.
X are o valoare de 5.
Și am inițializa acest pointer, int y y stea int este egală cu adresa de x.
>> Să presupunem adresa lui x este 4.
Ce se va întâmpla acum dacă aș sumă se adaugă 1 la y?
O să efectiv sumă 4 în loc de doar 1.
Așa că am adăuga un 1, dar de fapt adăugat 4, deoarece computerul lui inteligent.
Deci, se va adăuga de fapt, de i ori mărimea tipul pointerului.
OK?
>> Deci, dacă ar fi fost un char, de exemplu, în cazul în care aceasta a fost o stea y char,
și dacă am adaugat 1, atunci acest lucru ar fie de 5, pentru că char este de 1 octet lung.
Bun?
>> Și, în sfârșit, am ajuns la indicii și tablouri.
Se pare că de fiecare dată ai de a face cu o serie,
esti de fapt de-a face cu un pointer.
Foarte frumos motiv conceptual pentru acest lucru este faptul că matricile sunt foarte mari.
Deci, amintiți-vă că am spus că de fiecare dată când treci lucruri în jurul valorii de,
copiați totul.
Deci, dacă aveți un tablou asta e foarte, foarte mare,
nu vrei cu adevărat să copia tot de fiecare dată
voi să-l dați în jurul valorii de la un alt funcție, pentru că asta e doar
cantități masive de muncă.
Deci, ceea ce faci este doar dribleze adresa primului octet.
Și atunci funcția va avea acces pentru toate elementele din care matrice.
Deci ai trecut de matrice de adresa sa, astfel adresa primului octet.
>> Deci, dacă ne-am declara int matrice 3, aici, știm
cum pentru a accesa primul element folosind notația suport.
Dacă vă amintiți suportul notație, suport matrice 0 este egal cu 1.
Ei bine, acest lucru ar fi exact la fel ca du-te acolo și a pus 1.
OK, este exact același lucru.
Deci, notația suport aici va fi la fel ca această linie.
>> Si ghici ce notația suport pentru suportul matrice 1 va fi?
Acesta va fi doar același lucru ca și aceasta.
Deci, adaugă unul la matrice.
Muta o de-a lungul în memorie.
Du-te acolo, și a pus-o de 2.
OK?
Și aceasta linie e același lucru.
Vrem să mergem la a treia box, așa matrice plus 2.
Du-te acolo, și a pus un 3.
Deci, în memorie, ceea ce este o să se întâmple este că suntem
Va trebui 1, 2, și 3, trei elemente ale acestui tablou.
>> Am fi putut face acest lucru cu ajutorul nostru notație suport familiar.
Vreau doar ca voi să știți că ele sunt același lucru.
OK, întrebări cu privire la acest lucru?
Frumos.
Acum, am de gând să predea l pe Hannah,
>> HANNAH: Yay, yee-haw.
>> Binky: Vorbind despre memorie și articol chestii.
[Aplauze]
>> HANNAH: Bună, rece, deci suntem de gând să vorbesc un pic mai mult
despre memorie, pe care tocmai am adresat folosind indicii.
Deci, există două părți principale ale de memorie care suntem preocupați de.
Avem stivei, care crește în partea de jos, și grămada, care
se duce în jos din partea de sus.
Iar stiva este de gând să dețină toate variabilele instanță.
Deci, fiecare cheamă la o funcție devine propriul cadru mic pe stiva.
Deci, ca Gabe menționat mai devreme, dacă ne-am suna din nou și din nou funcția,
vom stiva lucrurile pe stivă.
>> Și în mod similar, heap, care începe de la partea de sus
va deține întreg spaþiul de memorie pe care le aloca dinamic.
Și așa cum am dinamic aloca memorie,
acest lucru va veni în jos spre partea de jos.
Lucrurile cuplu să fie conștienți de când suntem utilizând stiva si heap,
cu stiva, dacă avem prea many-- să say-- apeluri recursive,
și ne suni din nou o funcție, și din nou, și din nou, și din nou,
și este stivuirea în sus, stivuirea în sus, stivuire sus.
Și o să se prăbușească în grămada.
Ne vom alerga afară de memorie.
Asta va duce la o problemă pentru calculator.
Și asta se numește overflow stack.
Deci, asta e cu siguranta ai ceva ar trebui să fie conștienți și să încerce să evite.
Și heap, trebuie să vă amintiți nu la scurgeri accidental de memorie.
Orice dată când utilizați malloc, nu face uita pentru a elibera acea memorie.
În caz contrar, ea va doar fie pe grămada de pierdut,
iar calculatorul nu va ști că este libertatea de a folosi acea memorie.
Deci, acestea sunt câteva lucruri să fie foarte atenți atunci când cu
ai de a face cu stiva si heap.
Orice întrebări cu asta?
Minunat.
>> OK, rece.
Deci, acest tip de are aceeași Ideea ca overflow stack, în cazul în care
mergem dincolo limitele a ceea ce memorie
este că ar trebui să fie în măsură de a utiliza.
Astfel încât să ia, de exemplu, un tampon, sau ar putea gândi doar la ea ca la o matrice.
Iar noi am spus, OK, vom a crea acest tablou drăguț.
O să fie un șir.
Sau se va stoca caractere.
Și este doar de gând să salute.
Și este nedeterminată.
Asta e tot.
>> Dar dacă aș fi fost cineva rău și a vrut să face ceva rău cu această matrice, ceea ce
Aș putea face este să încerce să scrie trecutul sfârșitul șirului.
Și, după cum veți vedea, dacă Eu scriu destul de departe,
Eu pot afecta de fapt adresa de întoarcere.
Și dacă am începe să afecteze adresa de întoarcere,
Am afectează modul în care programul se execută de fapt.
Și în loc de a se întoarce, voi Știi, un șir fericit ca salut, am
ar putea face ceva rău, ca du-te la în altă parte în calculatorul dumneavoastră, încă
memorie, schimba, tot ce vreau să fac.
Deci, asta e ceea ce acest lucru ar arăta este, dacă am doar un fel de a umplut sus
cu valoare gunoi aleatoare, în acest caz, doar o.
Și apoi, când de fapt am Trebuie să adresa de memorie,
Am început să-l umple cu ceva că a făcut ceea ce am vrut să fac.
Orice întrebări cu buffer overflow?
Minunat, chiar zboară prin chestia asta.
>> OK, așa că am vorbit foarte mult de despre pointer cu Gabe.
Cum ajungem de fapt un pointer?
Cum putem obține o adresă în memorie?
Ei bine, putem folosi acest frumos Funcția malloc apel, care
este mergi la a lua o bucățică de memorie,
în mod special în grămadă, așa cum am discutat,
și o să vă dau înapoi un pointer la acea adresă în memorie.
Și argumentul pe care le trebuie să dea la malloc
este cât de mult spațiu în memorie ne-o dorim.
>> Deci, puteți vedea dimensiunea în octet.
Să spunem, de exemplu, sau de fapt, în acest exemplu,
ne-am aloca suficient spațiu pentru 10 de numere întregi.
Deci, probabil, ceea ce vom dori pentru a pune aici este o serie de 10 de numere întregi.
Deci, ne-am da o dimensiune de int, care ne-am învățat a fost cum de multe bytes?
STUDENT: 4.
HANNAH: 4, frumos, și noi anunt 10 din cei într-un rând,
astfel încât să avem suficient spațiu pentru a stoca toate cele 10 numere întregi, în acest caz.
Ceva super-importante, orice moment te sun malloc,
va trebui să verificați pentru nul.
Daca nu verifica pentru nul, ei bine, malloc în cazul în care rămâne fără spațiu
și nu vă mai poate da nici o mai mult de memorie, se va intoarce null.
Deci, dacă nu verifica, malloc poate reveni nul.
Și apoi, dacă vom încerca să dereference un pointer nul,
vom obține o eroare de segmentare, care vom vorbi despre acum.
Minunat.
>> OK, întrebări cu malloc?
Da?
>> STUDENT: Are control null [Inaudibil] nu-l fac pe testul de?
>> HANNAH: Sigur, întrebarea a fost nu-l matter-- pe test,
vei primi puncte de pe dacă tu nu verifica pentru nul?
Da, veți primi puncte de pe dacă nu verificați pentru nul.
De fiecare data cand suna malloc, atât pe test și psets si in viata reala,
va trebui să verificați pentru nul.
Bună întrebare.
>> Gabe: Ce se întâmplă dacă nu-mi desprindă?
HANNAH: Gabe vrea să știe ce se întâmplă dacă nu o facem gratuit.
Atunci vom avea o scurgere de memorie în heap nostru.
Orice alte intrebari?
Da?
>> STUDENT: Poate Tu-- trece peste buffer overflow foarte repede din nou?
>> HANNAH: Sigur.
Întrebarea era putem trece peste buffer overflow foarte repede.
Să ne întoarcem la acele slide-uri.
Deci, un tampon, puteți pur și simplu cred ca e un tablou, nu?
Ai un spațiu în memorie.
Și când vom crea în primul rând oferta noastră, știm tablouri au dimensiune fixă,
sau tampon noastră are o dimensiune fixă.
>> Deci, să spunem că, în acest caz, avem doar suficient spațiu pentru a scrie șirul de salut.
Dacă ne sa dribleze pe care legat, dacă mergem dribleze ce oferta noastră ne-au spus că ar putea deține,
am putea începe de fapt scris în memorie
care computerul nu ca noi să scrie în.
Și în mod special, dacă ne-am lovit ceva de genul revenirea
Adresa funcție, care, la fel ca orice altă piesă de memorie,
este doar undeva în ta calculator, puteți de fapt
schimba asta și începe să facă lucruri rele.
Răspunde la întrebarea dumneavoastră?
Awesome, altceva?
Da?
>> STUDENT: Deci stivă [inaudibil], tu a declarat merge de la partea de jos a merge în sus.
În raza de stivă, nu memoria merge de la, cum ar fi,
de sus în jos referitoare la fiecare pauză?
>> HANNAH: Cum Tu-- amâna pentru Rob pe asta.
>> ROB: Aceasta va crește în aceeași direcție ca stiva creste.
HANNAH: OK.
ROB: Așa că am obține confuz.
Acest lucru va fi abstractizare.
HANNAH: OK.
ROB: Acest lucru este corect.
Deci, dacă stiva este în creștere în sus, apoi generally--
nu trebuie să fie așa. dar se poate declara int x.
Apoi, declara int y.
Apoi, int x va fi, în general, mai mici de pe stiva decât int y.
Dar asta e doar un fapt.
Asta nu e ca un lucru important de semințe.
>> ROB: Deci, întrebarea din nou a fost doar ceea ce se întâmplă în fiecare cadru se acumulează.
Deci, fiecare funcție primește o mică bucată de stivei.
Și cum te duci în sus, în care bucățică, în acest cadru,
vom spune că variabilele în acest interval, de asemenea, a te deplasa.
Întrebare?
>> ROB: Doar pentru a fi la microfon.
HANNAH: Oh, da.
ROB: Voi vorbi în voi.
HANNAH: Oh, da, OK.
ROB: Excepția este pentru tablouri și structs,
în cazul în care tablouri, o mai mică index în matrice,
și în structs la mare câmp în structs
sunt garantate pentru a fi la adrese mai mici decât o valoare mai târziu în matrice.
Deci, cei care sunt garantate.
Dar variabile speciale, în, cum ar fi int x și y int într-o funcție,
nu există nici o relație necesară între adresele lor.
HANNAH: O altă întrebare pe aici?
STUDENT: Deci, în tampon flux, tampon numai preaplin
numai sa întâmplat atunci când au, cum ar fi, alocate
o cantitate dintr-un tablou că atunci este mai mare?
Ca, nu-i așa?
Deci, dacă sunteți cer ceva de la user--
>> HANNAH: Mm-hm.
STUDENT: Poate ei cu forța îți dau ceva înapoi
care este mai mare decât orice le-ați alocat pentru ei?
HANNAH: Sigur, așa Întrebarea a fost practic,
poate utilizatorul să vă dau mai mult decât vă întreb pentru?
STUDENT: Da.
HANNAH: Ei bine, ai putea împiedica utilizatorul de la a face asta.
Ai putea spune specific nu da-mi mai mult de x numărul de bytes
Ți-am dat doar o cameră pentru număr x de bytes, x număr de caractere.
Deci, asta e ceva ce vrei pentru a preveni.
Da?
Care este diferența dintre Stack Overflow și buffer overflow?
>> HANNAH: OK, deci stiva overflow-- oh, ce
este diferența dintre stivă overflow și buffer overflow?
Așa că vrem să ne gândim de depășire stivă se întâmplă atunci când suntem de fapt
stivuire la aceste apeluri de funcții.
Să presupunem că aveți o funcție recursive, pentru că știm că de fiecare dată când
apela o funcție, e devine propriul cadru pe stivă.
>> Așa că am stivă prea mare, și apoi vom începe să se reverse.
Și vom folosi prea multă memorie, și nu ne-am lăsat nicăieri.
Ne-am această eroare.
>> Buffer overflow este în cadrul unui program.
Ne dorim să nu aibă neapărat a alerga afară de memorie în același fel
că am putea, dacă suntem stivuire up atât de multe apeluri de funcții,
dar am scrie singur cu memoria care stim ca putem folosi.
Și care ne permite să facem lucruri rele.
Da?
>> ROB: Da, ați putea dori să repete doar acest lucru,
dar puteți, de asemenea, gândi de o depășire stivă
ca ca un tip specific de buffer overflow.
Sau credeți că doar de dvs. stiva ca un tampon foarte mare.
Atunci când îneca ați stivă, e un fel de buffer overflow.
Dar o depășire stack este doar un termen specific utilizat atunci când stiva
se revarsă.
>> HANNAH: Dreptul, astfel încât să se repetă pentru video,
vă puteți gândi la Stack Overflow ca un tip specific de buffer overflow.
Rece?
Orice mai multe întrebări înainte de a merge mai departe?
Minunat.
>> OK, rece, deci hai sa vorbim despre unele mesaje de eroare comune.
Acest lucru este ceva care are apărut pe mai multe teste,
astfel ceva care este în valoare de a lua un al doilea privire la.
Sunt sigur că le-ați întâlnit cel puțin unele dintre acestea
cum faci problema ta seturi.
Deci, asigurați-vă că puteți vorbi despre ele pe testul.
>> Deci, prima este o eroare de segmentare.
Și asta e orice moment noi incercati sa accesati in memorie
că nu avem voie să acces.
Deci ai migh au văzut acest lucru, de exemplu, în ramificații.
În cazul în care detectează coliziune intoarce null, și apoi
a încercat să facă ceva cu care valoarea zero,
calculatorul ar da ai o eroare de segmentare.
Deci, un, un lucru important pentru face în scopul de a încerca să evite această
este de a verifica mereu pentru nul.
>> S-ar putea fi văzut, de asemenea, declarație implicită a funcției.
Deci, asta este ceea ce se întâmplă când Allison ți-a arătat
cum o face un prototip, nu?
Așa că haideți să spunem că avem niște Funcția pe care le definesc.
Să spunem cub.
Și trece în partea de jos de funcția noastră, în principal.
>> Dacă ne uităm să-i spuneți calculator despre cub, atunci când principalul încearcă pentru a apela cub,
computerul va fi, cum ar fi, oh, Doamne.
Nu am nici o idee ce înseamnă asta.
Nu știu ce să fac, aici.
Deci, prototipul spune nu vă faceți griji.
Am de gând să-ți spun.
>> Va veni.
Nu țipa la mine.
Nu-mi da un implicită declarație de funcție.
Deci, dacă aveți această eroare, o lucru ai de gând să vrei să faci
este asigurați-vă că aveți prototip ta.
OK?
>> Și nu în ultimul rând, identificator nedeclarate
este, în esență, atunci când încercați să utilizați un variabilă care nu le-ați declarat.
Deci, dintr-o dată începe să spunand ca n plus, plus.
Și computerul spune ce e n?
Niciodată nu mi-a spus n a fost un lucru.
>> Deci, un lucru pe care trebuie să asigurați-vă că a făcut este să spuneți calculatorului ce n este.
Deci, de exemplu, n-ar putea să fie un întreg.
Și atunci veți evita această eroare.
Orice întrebări cu privire la erorile comune?
Da?
>> STUDENT: Pentru implicită declarație de funcție,
ar putea fi, de asemenea, că ați omis o din bibliotecile pe care ar fi trebuit
pentru a include, în loc să prototipul?
>> HANNAH: dreapta, așa Întrebarea a fost, ai putea
primi, de asemenea, această eroare dacă a uitat să includă o bibliotecă.
>> STUDENT: Da.
>> HANNAH: Absolut, deoarece în același mod
pe care ne-o dorim pentru a pune prototipurile noastre înainte de funcția principală,
dacă avem o bibliotecă, cei care merg pentru a include, în esență, prototipurile,
include definiții a funcțiilor.
Mare întrebare.
>> STUDENT: Pentru o segmentare vina, ar fi că, de asemenea,
întâmpla dacă noi, cum ar fi, a încercat pentru a accesa o variabilă,
cum ar fi, într-un alt [inaudibil] decât a fost declarată în?
HANNAH: Sigur, așa-i așa a obține o eroare de segmentare
dacă am încercat să acceseze un variabilă afara domeniului de aplicare?
A fost că o întrebare?
STUDENT: Da.
HANNAH: Frumos.
Deci, probabil, ai de gând pentru a obține o eroare nedeclarate identificator loc.
Deci, este doar de gând să spun Nu știu ce e asta.
Rece, altceva?
Da, OK, frumos.
>> În regulă, așa recursivitate.
Așa că am menționat de câteva ori că am putea obține o depășire stivă
pentru că suntem de asteptare nostru funcții recursive de atâtea ori.
Primim toate acestea stivă rame, bla, bla, bla.
Ce chiar este o funcție recursivă?
Ei bine, o funcție recursive este orice funcție care se numește.
>> Unele lucruri să fie conștienți de atunci când sunt de punere în aplicare funcție recursivă,
nu uitați să includeți un caz de bază.
Un caz de bază este punct la care vom ajunge.
Așa că, de exemplu, dacă suntem de codificare, , Spune, Fibonacci recursiv,
vrem să ne asigurăm că atunci când vom ajunge la 0 sau primul număr Fibonacci,
cele două numere au aceste cazuri, pentru că cei care nu sunt dependente de
pe lucruri care au venit înainte.
Cei care au propriile lor valori.
>> Unele argumente pro la recursivitate, care este o Întrebarea care le-am văzut pe teste anterioare.
Acestea pot duce la mai multe cod concis, elegant.
Și o mulțime de funcții, un mulțime de diferite algoritmi,
de fapt, se pretează la recursivitate.
Definirea acestora ar putea fi recursive în sine.
Deci, Fibonacci este unul.
Factorială este unul.
Merge fel este Unu toate lucruri pe care le pot uita la.
OK, întrebări?
Da?
>> STUDENT: Este un caz corner similar cu un caz de bază?
Sau că din alt un fel de [inaudibil]?
>> HANNAH: Sigur, asa ca o caz corner este any-- atât de
este cazul de colț la fel ca caz de bază?
Un caz de colț este ceva care dumneavoastră cod s-ar putea comporta un pic diferit.
Cazul de bază este un fel de legătură, în că ei sunt ca anumite cazuri
pe care doriți să se uite la.
Dar ideea de bază este că caz vrei funcția recursive
pentru a opri la un moment dat.
Nu se poate ține de asteptare el însuși pentru totdeauna.
Acesta trebuie să se oprească la un moment dat.
>> ROB: Da, frecvent, cazuri dvs. de bază ar putea fi exemple de baze de colț.
>> HANNAH: pe dreapta, rece, ceva?
>> STUDENT: Ați putea explica întemeiază un pic mai mult?
Eu nu prea înțeleg [Inaudibil] cazuri de bază.
>> HANNAH: Din cauze de bază?
>> STUDENT: cazuri Base, da.
>> HANNAH: Oh, da, sigur.
Să vedem.
Nu ne-am creta pe aici?
Da, avem.
OK, deci foarte repede, voi încercați să scrie destul de mare
astfel încât să puteți vedea pe ecran.
Hai sa vorbim despre, într-adevăr repede, Fibonacci.
Așa că am să-ți dau șirul lui Fibonacci.
Poti sa te uiti în sus definiția.
>> În esență, fiecare număr din secvența este suma celor două numere precedente.
OK, deci modul în care am doar s-a descris Fibonacci,
ai putea auzi recursivitate, nu?
Când i-am spus fiecare număr este suma celor două numere anterioare,
am putea spune OK.
Ei bine, n-lea Fibonacci number-- Să
spune că avem această funcție numit FIB fib-- de n-
va fi egală cu fib de n minus 1 plus-- pare rău,
vom trece la linia următoare peste FIB here-- de n minus 2.
>> OK, deci această lucrari de mare dacă sunteți uita la, de exemplu, zero, unu,
doi, trei, patru, număr Fibonacci a cincea,
în cazul în care vă pot spune că 5 este egal cu 2, plus 3.
Dar ce se întâmplă dacă sunteți la început?
Ce se întâmplă dacă sunteți doar lovind aceste prime două valori?
>> Pentru a obține acest lucru de 1, nu se poate spune adăuga ultimele două,
pentru că zero, si-- eu nu știu.
Deci, la un moment dat, trebuie să ne oprim.
La un moment dat, trebuie să spun că acestea doi au doar propriile lor definiții.
Numărul 0 Fibonacci este 0.
Și primul număr Fibonacci este 1.
>> Deci, modul în care s-ar putea codul asta, ar spune dacă n este mai mic de doi,
apoi pur și simplu a reveni n.
Și că ar fi cazul meu de bază.
Asta e modul în care știu să se oprească cu o funcție recursivă.
Este clar?
Minunat.
Orice altceva pe recursivitate?
Frumos.
>> Să vorbim despre rapid căutare și ori rula fel.
Și atunci voi da Davin unele timp pentru a vorbi despre codificare exemple.
Deci, aici sunt de căutare principal și felul pe care ar trebui să știi despre.
Guarantee-- Eu nu pot garanta, pentru că nu am văzut quiz--
dar acest lucru vine test după test după demisia.
Deci, folosi cu siguranta acest grafic.
Cum ar fi, să ia această diagramă.
Pune-l pe foaia de ieftin.
Vei fi un om fericit.
>> Acest lucru ne spune timpul de functionare pentru fiecare din aceste sortare și căutare algoritmi.
Deci, căutare liniară, puteți vedea centrare timp, și același cu căutare binară.
Du-te pe ceea ce acești algoritmi face, ideea generală.
Uită-te la unele pseudocod, în cazul în care nu se cod.
>> Veți vedea că balon fel are un superior legat în cel mai rău caz de n pătrat.
Deci, dacă oferta noastră a fost complet înapoi înainte am vrut să-l rezolve,
ne-ar spune că asta e O să ia măsuri n pătrat.
Dar, în cel mai bun caz, așa limită inferioară pentru cel mai bun caz
va fi în cazul în care este deja sortate perfect.
Apoi, tot ce trebuie să facem este verificați dacă e sortate.
Este o întrebare pe aici?
>> STUDENT: Când ar doriți să utilizați fel?
Genul.
Sunt doar curios.
>> HANNAH: Când v-ar doriți să utilizați selecție fel?
Asta?
Cel care n pătrat, în ambele cazuri?
>> STUDENT: [inaudibil].
>> HANNAH: Deci e foarte diferit.
Dacă aveți specific Cerințe pentru programul,
cum ar fi lucruri cum ar fi dacă ne-am spus să pună în aplicare o sorry-- search--
pună în aplicare un fel, veți probabil vrei să mergi
pentru unul dintre cei care are un cel mai bun caz de n,
sau o limită inferioară, în cel mai bun caz de n.
Dar ar putea fi anumite lucruri, cum ar fi, să zicem,
Swap-urile sunt într-adevăr scump pentru un motiv oarecare.
Atunci ce-ar vrea să facă bubble fel, pentru că
trebuie să facă atât de multe swap-uri, lucruri de genul asta.
Orice da other--?
>> STUDENT: Ar fi [inaudibil] să spun că [inaudibil]?
HANNAH: Asta e un lucru care le-ar spune
dacă te uiți la punerea în aplicare.
Modul în care aș fapt, gândiți-vă de ce e n
pătrat este că trebuie să ruleze prin oferta noastră de lungime n,
de fiecare dată când face la cele mai multe, n swap-uri.
Și noi trebuie să facem acest proces de n ori.
>> Deci, atunci când trebuie să facă cel mult, n swap-uri și pentru n trece prin matrice,
acolo va fi n pătrat.
Dar, da, acest lucru va fi dezvăluit prin această dublă pentru buclă,
ca întrebarea asked-- sau imbricate pentru buclă, ar trebui să spun.
OK?
>> Și apoi îmbinați fel, care este cel mai rapid fel ne acum,
sau pe care le-am acoperit în CS50, știu că algoritmul principal este
această idee de rupere în piese sortati si apoi
fuzionează împreună acești biți sortate.
Și vor să ne log n log n.
Orice întrebări cu privire la căutări și felul înainte să-l dați?
Să vedem.
>> Oh, liste legate.
Îmi pare rău, am mai avea o temă.
OK, minunat, legate de liste.
Problema cu tablouri, acestea au o dimensiune fixă.
Deci, dacă nu știi cât de mare dvs. de intrare va fi,
nu doriți să creați o matrice.
Pentru că dacă vom crea o matrice care este prea mic,
am putea rula în buffer overflow.
>> Deci, în loc, am putea face ceva cu liste legate, care
ne permite să avem o dinamic structură de date de dimensiuni
care ne va permite să stocați o cantitate mai flexibilă a datelor.
Deci, în fiecare nod în nostru Lista de legat, avem două bucăți.
Avem valoarea reală pe care o stochează.
Așa că e doar un lucru pe care ar fi a se vedea în matrice, de exemplu.
Și atunci am să urmăriți de o pointer la următorul lucru în memorie.
>> Spre deosebire de tablouri, care știm cu toții de gând
a be-- elementele de matrice sunt toate una la rand in memory-- legat
Lista ar putea fi oriunde în memorie.
Sunt locatii arbitrare.
Deci, dacă ar fi să de fapt, du-te-le găsim, ne-am
trebuie să țină evidența următorul lucru în lista noastră.
>> Și apoi, pentru a ști în cazul în care această listă ca un întreg este,
tot ce avem pentru a ține evidența este Primul element din lista noastră de legat.
Și care va permite să ne urmeze.
>> Deci, acesta este modul în care s-ar putea defini un mod.
Aceasta este o mare oportunitate pentru a profita de structs.
Pentru că aveți această idee, ei bine, pentru un nod dat, am două bucăți.
Am valoarea reală în sine.
Și apoi am un pointer la următor element din lista de legat.
Deci, vedeți, avem un număr întreg n, care va fi valoarea reală,
și apoi un pointer la un nod, numit următor.
Așa că va fi următorul element din lista noastră de legat.
STUDENT: Da?
Nu trebuie să se precizeze că steaua este ca o struct?
>> HANNAH: Da, așa din moment ce aceasta este aproape ca un fel de,
se pare ca un recursiv definiție în care ne-am
Trebuie să știu ce un nod este în interiorul a găsi un nod.
Din moment ce nu face de fapt Știi ce un nod este complet
până când vom ajunge la sfârșitul anului asta: și după aceasta putem numi doar
o node-- în interiorul acestei definiții, trebuie să-i spunem un nod struct.
Mare întrebare.
Altceva?
Da?
>> STUDENT: De ce avem Trebuie să spun nod de două ori?
Pentru că atunci când am fost în [inaudibil] ne-am avut de a face acest lucru în punct și virgulă,
dar acum trebuie să găsim că nod struct? [Inaudibil].
HANNAH: Deci, eu cred în ultimul exemplu,
am fost doar crearea de tine oricand vrut să folosească un elev după asta,
a trebuit sa foloseasca struct node-- Am sorry-- elev struct.
Acest lucru ne-a permis sa, după fapt, doar utilizarea nod adăuga un nou tip, în esență.
Care face sens?
Așa că ne-ar trebui să mă întorc și uita-te la codul înainte.
Dar mi-ar ghici că nu am folosit typedef.
Și ne-am pus întrebarea, de ce avem nevoie pentru a utiliza typedef?
Typedef ne permite să evităm struct cuvânt la început.
Da?
STUDENT: Ce fel de intrebari va veni
din punct de vedere în ceea ce privește noduri și liste postat?
>> HANNAH: Deci, un lucru este, am putea spune cum s-ar putea să căutați printr-o listă legat?
OK, pentru că este o pic mai complicat
decât dacă suntem în căutarea printr-o serie.
Ne putem uita doar la elementul de zero, Element una, două elemente, bla, bla,
bla.
Dacă vrem să caute printr-o listă legată,
vom avea de fapt să urmeze acest mic labirint de indicii.
Deci, haideți să mergem de fapt prin aceasta foarte repede.
Ce am putea face în obligarea sa-- să spunem noi
doresc să itera doar prin Lista noastră legată în întregime.
Ne-ar incepe de la cap.
Și apoi, în scopul de a trece la elementul următor,
în loc de doar incrementarea cu o ca și cum am putea într trece printr-o serie,
vom fapt de gând să urmați indicatorul următor,
astfel încât să putem găsi în cazul în memorie elementul următor este.
Așa că știu că nu e de ajuns pentru a să ia toate acestea în chiar acum,
dar veți avea aceste slide-uri.
Astfel încât să puteți trece prin aceasta un pic mai lent.
Dar, în esență, ceea ce ne dorim să faceți este să urmați aceste indicii
prin totalitatea listei de legătura.
Deci, aceasta este o întrebare s-ar putea să fie întrebat.
>> Ceva pentru a observa cu inserție, să zicem
am vrut să pună un element nou la partea din față a lista noastră de legat.
Trebuie să fim foarte atenți despre ordinea în care ne-am
realocată indicii.
Pentru ca să spunem pur și simplu am spus OK.
Asigurați punct de cap pentru acest element nou.
Doar asigurați-l punct la 1 Apoi, ne-am a pierdut, în esență, restul de pe lista noastră,
pentru că eu nu-mi amintesc în cazul în care două vieți.
>> Deci, trebuie să facem într-o Pentru foarte specific.
În primul rând, vom face noi punctul element de la cap.
Și apoi vom face capul indica elementul nou.
Deci, haideți să vedem cum arată cu arrows-- la fel ca asta.
Deci, trebuie mai întâi noi punctul element de la cap vechi.
Și acum, avem capul litera a noului primul element.
Orice întrebări cu asta?
>> OK, aici e un cod nou, ceva să se uite la un pic mai târziu.
Și acum se va transforma peste la Davin pentru GDB și un pic de practică
codificare pe hârtie.
Frumos.
>> ROB: Și Rob.
>> HANNAH: Oh, Davin și Rob.
Îmi pare rău.
>> STUDENT: Woo!
>> ROB: Mulțumesc.
>> Davin: Vrei să spui totul foarte repede?
ROB: Da, da.
Davin: După ce am sus.
OK, în timp ce Rob trimite microfon pe, asa ca ce e GDB?
Toată lumea ar fi văzut GDB în clasă și, de asemenea, la ore de birou.
Și tu ar trebui să fie folosind-o.
Deci, ce este GDB?
E cineva?
>> STUDENT: Este un program de depanare.
>> Davin: Este un program de depanare.
Și ce nu-l permite să faci?
Cum ar fi, de ce nu ne place GDB?
STUDENT: Pentru a încetini programul.
Davin: pe dreapta, astfel încât să puteți merge pe jos prin ea ca un ritm uman.
Și ce sunt unele comenzi pe care le puteți face?
Ei bine, pauza este, probabil, comanda dumneavoastră preferat.
Pentru că vă permite să rupe Programul și merge de fapt prin ea
linie cu linie.
>> Run vă permite să îl rulați.
Apoi, ca pas cu pas prin intermediul.
Care este între următorul pas și?
Stai, spune cu voce tare.
A fost corect.
>> STUDENT: [inaudibil].
>> Davin: Da, minunat.
Deci, cum ar fi, următorul pas și, dacă you're-- Să presupunem că aveți o funcție vă
defini.
Să spunem că unele din funcția principală, si tu esti doar lovind următor, în continuare,
următor.
Tu esti de fapt de gând să executa această funcție,
dar ai de gând să sari peste el.
Dacă te-a lovit pas, sau s sau orice altceva, ești
O să sari de fapt în această funcție,
și apoi puteți lovi următorul pentru a vedea diferite apeluri
în interiorul funcției respective.
Da?
>> STUDENT: Există o modalitate pentru a sari, cum ar fi, înapoi afară?
Davin: Finish, da, duce cu tine sari.
Deci, se va duce la faptul că funcție, iar apoi ești
Va fi din nou în principal, de exemplu.
Imprimare se va tipări o singură dată.
Ceva ce să folosiți întotdeauna este de afișare.
Afișare se va tipări în mod constant pe tot parcursul întregime
de programul tău.
>> De exemplu, dacă sunteți într-o buclă pentru, și tu
vrei sa vezi cum se schimba ceva, si nu vrei sa, cum ar fi, în mod constant
face ca print, print, print, afișare
va afișa variabila continuu, de fiecare dată când te-a lovit următor.
Și continuă.
Astfel GBD, asta e GDB.
>> STUDENT: Care e cea în cazul în care [inaudibil]?
Davin: Ce este?
>> STUDENT: Ce este the-- variabilele locale.
ROB: Nu este ceva de fapt ca localnici sau ceva.
I can't--
>> Davin: Ar putea fi ceva de genul asta, da.
>> HANNAH: În localnicii?
>> Davin: Asta e.
Asta e cel.
ROB: Frumos.
>> Davin: Da.
>> STUDENT: Ce face în continuare?
>> Davin: Se continues-- așa că e doar va continua programele.
Deci, dacă te rupe și a lovit continua, va
pentru a rula doar că programul până la se lovește din nou că pauza.
Deci, de exemplu, dacă a izbucnit într-o funcție,
și ai de gând să faci ca pentru buclă sau ceva de genul asta,
și te-a lovit continua, o să continua și du-te înapoi la acea pauză.
Sau nu exista nici o pauză, o să continua și termina programul.
>> ROB: place Deci, doar se oprește rula la prima breakpoint
te-a lovit, dacă atunci lovit continua, se va ține
merge până când este breakpoint următor.
Și apoi continuați va merge la breakpoint următor.
Davin: Orice alte întrebări cu privire la GDB?
Deci, cred că, în trecut, v-am întrebat ce
GDB este și să dea un exemplu de unele lucruri pe care le
se poate face cu GDB, așa foarte simplu, dar da.
Acolo te duci.
Și noduri?
>> ROB: Da, deci ce direcție a fost?
STUDENT: Asta a fost tot.
Davin: Așteaptă.
ROB: Tipul ăsta?
Davin: Acela.
ROB: Tipul ăsta, oh, nu am dat seama.
Deci, nu am fost clar pe ceea ce the-- eu nu fac
Știi care a asta--, dar întrebarea.
Nu știm exact ce s-au întrebat despre asta, asa ca
pentru a clarifica ceva.
Deci, în primul rând, cum am spus mai înainte, typedef esti mereu folosind doar
a crea un pseudonim pentru un tip.
Deci, chiar aici, porecla suntem crearea este pentru acest nod struct tip.
>> Deci, în primul rând, ignorarea acestui nod în typedef, astfel încât această struct nod ondulat
bloca până la următorul ondulat bretele este tipul de nod struct.
Și avem nevoie în acest nod acolo, pentru că noi
Trebuie de referință nod în aici.
Deci, cu acest tip de struct recursive, aveți nevoie pentru a da acest struct un nume,
sau altceva ce nu ar putea spune nod struct aici.
Întrucât înainte de elev când am fost tastate, cred,
nu am avut de spus acolo elev în sus, pentru că noi
nu trebuie să spun struct elev în interiorul struct în sine.
Deci, este recursiv care ne obligă să spunem nod acolo.
>> Acest nod este doar numele suntem oferindu-nod pentru typedef.
Astfel că nodul nu este la fel ca acel nod.
Dar acest nod struct este la fel ca acel nod struct.
Davin: Deci, ori de câte ori suni, cum ar fi, nodul în funcția principală,
tu nu vei Trebuie să spun nod struct.
Vă pot spune doar nod, pentru că nod este un different-- este, în principiu
spui, OK.
În loc de a avea pentru a apela nod struct în codul meu,
Vreau doar să-l redenumiți ca nod pentru a face mai ușor.
>> ROB: Dacă mereu folosi typedef, atunci aceasta
este singurul loc ai de gând să aibă de a declara o variabila cu nod struct
stele, da.
>> Davin: OK, deci ultima parte este greu de a preda because--
ROB: Ce?
>> Davin: Pentru că este de codificare pe hârtie.
Deci, în fiecare an, avem Codul cu privire la chestiuni de hârtie.
Deci, cred că, anul trecut, 12 din 80 de puncte au fost cod pe hârtie.
An înainte de asta, 10 din 80, an înainte de faptul că, la 20 din 100,
așa destul de puține dintre acestea.
Deci, ai de gând să trebuie să fie în măsură pentru a coda la aceste funcții de mână.
>> Așa că m-am gândit am putea trece printr-un câteva dintre ele și a vedea cum fac oamenii,
un fel de mers pe jos prin -le încet cu oameni.
Deci, în general, strlen și atoi au fost foarte populare.
Anul trecut, cred că am avut GetPositiveInt și RandomInt.
Dar pow, așa putere, de asemenea, una pozitivă prea.
Hai să trecem prin poate una sau două dintre acestea împreună.
Ce fac oamenii vor să vadă?
>> STUDENT: atoi.
STUDENT: Da.
Davin: atoi?
STUDENT: [inaudibil].
Davin: OK, am de gând să o facă pe bord.
Ai o preferință dacă o fac aici sau acolo?
Acolo, Gabe spune acolo.
>> ROB: Și acest lucru este gânduri generale cu privire la aceste probleme de codificare.
Încercați să scrie ceva.
Nu-l lăsați necompletat.
>> Davin: Da.
ROB: Dacă puteți obține a reveni tip corect,
sau poate că s-ar putea da la tine, dar dacă poți, cum ar fi,
scrie funcția de semnătura general, Dacă puteți obține cazurile de bază corecte,
sau cazuri de colț, sau amintindu-și de verificare pentru nul,
atâta timp cât aveți unele lucrurile, atunci poate că ne-am
vă pot da un cuplu puncte pentru problema.
Nu doar lăsați-l necompletat.
>> Davin: Da, și dacă sunt doar complet
lovit la modul de a transforma de fapt în cod.
Dacă ați scrie pseudocod, asta e destul de bine prea.
Deci e ca și cum, este o chestiune de șase punct, și tu scrie pseudocod corect,
veți obține cel puțin două puncte.
Deci, nu doar să le lăsați necompletat.
Încercați să puneți ceva.
>> ROB: aceasta trebuie să fie pseudocod corect, totuși.
>> Davin: Da.
ROB: Deci, suntem, în general, sunt mai puțin indulgent cu bug-uri în pseudocod.
Davin: OK, deci voi a vrut să vadă atoi.
OK, deci doar really-- deci ceea ce vrei să faci
Se vei fi având în vedere un fel de număr.
Dar acest număr nu este Va fi un int, nu?
Ce va fi?
>> STUDENT: [inaudibil].
>> Davin: O să fie un șir de caractere, nu?
Deci, dacă s-au dat o string-- să say--
>> ROB: Ar trebui să mă trage un editor?
Pot trage up--
>> Davin: Oh, vrei să o faci on--
>> ROB: Ați prefera bord?
>> Davin: Ce vrei să faci?
Adică, vrei să o faci cu mâna?
Sau vrei să o faci pe calculator?
>> ROB: Fă-o de mână.
>> Davin: [râde]
ROB: Fă-o de mână.
>> Davin: OK, asa ca va fi atoi.
Deci, ce este it-- vreau să spun, vom probabil da asta.
Dar ce se întâmplă să se întoarcă?
>> STUDENT: Int.
>> Davin: O să se întoarcă int, nu?
Deci-- Nu vreau să o fac acolo.
O voi face aici.
>> ROB: Puteți să-l trage în jos și apoi împinge în sus pe ea.
>> Davin: da.
[Râde] schimbare de joc.
OK, așa că va fi atoi int, și ce se va lua?
O stea char, asa ca o șir, stele s, așa.
>> ROB: Nisa stele, frumos.
Davin: Acest lucru nu ar putea fi acolo, OK.
ROB: Da.
Davin: OK, deci primul lucru pe care doriți să do-- I
Nu știu dacă cineva se uită la solutions-- practică
dar ceea ce ai de gând sa vrei sa faci e că ești
O să vrea să aibă o buclă, pentru că ești
O să vrea să efectiv pas prin acest șir.
Deci, așa helpful-- să spunem vom o pentru buclă,
și vom parcurge fiecare element al șirului.
Cât timp e asta?
De câte ori mergem de a repeta în care pentru bucla?
STUDENT: Sterln?
Davin: Sterln, da.
Deci, haideți să spunem lungime int este egal cu sterln s.
Și doar curios, de ce este întotdeauna un fel de mai bine de a face acest lucru in afara de bucle?
Cum ar fi, de ce este mai bine pentru a apela această funcție în afara unei bucle?
Doar verifica un bun-simț rapid?
Da?
STUDENT: Deci tu nu faci trebuie să țină verifica-l.
Poți doar să [inaudibil].
>> Davin: Exact, așa da, exact ceea ce a spus ea.
Deci, noi nu trebuie să țină verifica-l.
Deci, de exemplu, în cazul în care sun această funcție în interiorul-o buclă,
apoi am de gând să ține de asteptare această funcție de mai multe ori.
Și că va scădea eficiența programului dumneavoastră.
Deci, este întotdeauna util să-l declare afară.
>> ROB: Asta a spus, pe oricare dintre aceste probleme,
destul de mult, atâta timp cât veți obține o Soluție de lucru, veți obține credit complet.
Deci, nu vă faceți griji în cazul în care design-ul este absolut cumplit.
S-ar putea să ne facă supărat citit codul.
Dar atâta timp cât funcționează, veți obține puncte.
>> Davin: Da.
OK, deci atunci am de gând să declara unele variabile.
E doar de gând să sun sumă int.
Și am de gând să se stabilească acest lucru egale cu zero, așa.
Și asta doar de gând a fi un înlocuitor.
Așa că o să fie ceea ce am de gând să se întoarcă.
Așa că am de gând să în cele din urmă a reveni sumă din acest program.
Așa că am aceste două variabile.
Am lungime.
Am sumă.
Și acum să intrăm în șir nostru.
>> Deci, vă permite să aveți nostru de buclă.
Deci, patru int I este egal cu 0 g, în timp ce I este mai mică decât lungimea I, plus, plus.
Și now--
ROB: Nisa.
Davin: OK, și acum aici vine carnea de codul nostru.
Astfel încât să puteți face de fapt acest principiu, într-o singură linie.
Deci, are cineva o idee de ceea ce vom face în continuare?
OK, așa că e în regulă.
Deci, ce facem noi să spunem sumă equals-- lasă-mă să sco această sumă over--
este egal cu suma de 10 de ori plus-- suntem de gând să ia s minus am o
citat 0 un citat făcut, așa.
ROB: Foarte intuitiv.
>> Davin: ea zdrobit.
OK, deci someone-- am înțeles, am înțeles.
OK, deci acest lucru este clar în creștere.
Ce înseamnă acest lucru?
Deci, știe cineva ce înseamnă asta?
Poate toată lumea vedea acest lucru?
Nu, nimeni nu poate vedea acest lucru, OK.
Mă duc sa--
>> ROB: am de gând să scrie cu formula doar aici.
Davin: OK, Rob va face pe calculator, care este distractiv.
ROB: Oh, Doamne.
Sau nu o voi face.
Davin: Stand by.
STUDENT: Am o întrebare.
Davin: Da, sigur.
STUDENT: [inaudibil]?
Davin: OK, asa ca de fapt, cum ar fi, pur și simplu, în general,
dacă ar fi să pună, cum ar fi, în această declarație int
Am egal cu lungime 0 virgulă este egal cu sterln, that--
>> STUDENT: [inaudibil].
>> Davin: Asta e bine, pentru că that--
STUDENT: De ce v-ar chiar necesitatea de a utiliza lungime?
De ce nu am putea doar [inaudibil] sterln s, la fel ca în tot acest timp [inaudibil]?
>> Davin: Vrei să spui aici?
>> STUDENT: Da.
Davin: Pentru că fiecare de data aceasta pentru cursele buclă,
se va evalua aceasta conditie.
STUDENT: Corect.
Davin: Și dacă aveți sterln acolo, atunci e
Va trebui pentru a apela efectiv această funcție de fiecare dată.
Deci, în loc de doar comparându-l cu un int,
ai de gând să fie un apel funcțională și apoi comparându-l
la valoarea de returnare.
Da, asa e doar, da.
>> Frumos, OK, deci acum toată lumea poate vedea.
Ce does-- acest lucru este ca, asta este.
Aceasta este blocajul, chiar aici.
Ce înseamnă asta?
Ce fac?
Da, o idee?
Da?
>> STUDENT: Ei bine, asa ca atunci cand Intrați o matrice,
ai de gând să meargă de la stânga la dreapta,
deci ai de gând să meargă în zecimal de jos [neauzit].
Davin: Exact.
STUDENT: Deci fiecare trebuie să se înmulțească
ceea ce ai văzut ca valoarea int de timpul pe care îl obține pentru a trece peste faptul că unul.
>> Davin: Perfect, perfect, astfel, de exemplu, să
spun că am dat Tu-- am de gând să scrie pe aici.
Nu, nu sunt.
Am de gând să scrie pe aici.
Să presupunem că ți-am dat 76, nu?
Să spunem că îți dau 76.
Asta e un șir pentru a începe cu, OK?
>> Deci, lungime este de ce?
2, nu?
Suma este 0.
Apoi ne-am sări în nostru de buclă.
OK, prima iterație a aceasta, ce o să fie?
O să fie sumă este 0.
Deci, concluzie ori 10 0.
Asta e lipsită de sens.
Atunci ce face acest lucru?
STUDENT: [inaudibil].
>> Davin: O să rândul său, că personaj într-un număr întreg, nu?
E un fel de cu dumneavoastră problemă set-- acest luminii,
e un fel de cu problemă setat la Visioneer.
Ai de a face cu valori ASCII.
Deci, dacă eu vă dau, cum ar fi, un șapte, dar e un personaj,
și vrei să știi, OK, ce cifră este asta?
Da, ai putea, da.
Deci, ce cifră este asta?
Ai putea scădea de la 0, dar tu Trebuie să scădea 0, caracterul.
>> Și în cazul în care unii oameni se repede la ei sunt
cum ar fi, OK, bine, nu am să știu valorile ASCII pentru acest test?
Nu, cu siguranta nu trebuie să știe ASCII
valorile, cum ar fi, litere mici o, majuscule A, zero.
>> ROB: Nu există nici un motiv pentru a vreodată a pus acest lucru pe foaia de ieftin.
>> Davin: Categoric nu deșeuri spațiu cu acest lucru.
Puteți literally-- doar locul de a spune 48, la fel ca dreapta sus
acolo, care este echivalent cu spune unul, o apostrof,
cum ar fi faptul că, exact la fel.
>> ROB: Ai putea crede aproape de ea ca if-- Dumnezeu, am nevoie meu,
oops-- ai putea gândi aproape de ea ca și cum am avea ceva de genul asta hash
defini 0 la 48.
Că nu va funcționa.
Dar cred ca e singur citat 0 citat unic, și pentru toate caracterele.
Ganditi-va ca o constantă care reprezintă acea valoare ASCII.
>> Davin: Da.
OK, deci prima dată prin intermediul, așa cu 76-- astfel pentru prima dată prin intermediul,
aceasta este doar caracterul 7 minus caracterul 0,
și cele șapte integers-- bine, cei
sunt șapte spații distanță de altele pe tabela ASCII sau orice altceva.
Așa că o să se întoarcă o int de 7.
Deci, acum, sumă egală cu 7.
>> OK, bine, hai să sari în acest timp de buclă din nou.
OK, acum e sumă de ori 10.
Deci, tu ești în mod eficient deplasează 7 spre stânga.
Asta face sens?
Ești în mod eficient se deplasează spre stânga.
>> Și apoi add-- acest va fi de 6 minus 0.
Asta 6.
Asa ca va fi de 70 plus 6.
76, asta e numărul tău.
Deci, indiferent de ce număr Ți-am dat, e doar încet
va schimba valorile mai mari la stânga, 1 factor de 10
de fiecare dată în bucla for, și apoi se adaugă pe cât este necesar.
>> În spate?
STUDENT: Noi nu trebuie să faci orice verificare în program?
>> ROB: Deci, pe cât de verificare merge pentru programul,
ne-ar spune destul de mult ceea ce ai nevoie pentru a verifica.
Dacă noi nu vă spun nimic, apoi, în general,
Presupun că ai să verificați cele mai multe lucruri.
Ca s-ar putea, doar pentru a fi în siguranță, voi Probabil ar trebui să verifice hei, este nul s?
Atunci am nici o idee ce să se întoarcă.
Dar ne-ar spune acest gen de lucruri.
0, nu știu.
>> Davin: Și de ce vrei să verificați din nou dacă e egal cu zero?
STUDENT: [inaudibil].
Davin: Din cauza stea char.
E un pointer.
Deci, un perfect acceptabil declarație, aș putea spune, OK,
s este egal nul, deoarece ar putea fi un pointer la null.
Deci, ori de câte ori aveți indicii în calea ta în acest fel,
Probabil ar trebui să verificați.
Pentru că dacă nu se verifică dacă, și apoi atunci du-te in pentru buclă,
si tu esti sco doing-- jos.
Scoot jos.
>> ROB: Îmi pare rău, asta este.
>> Davin: Și așa, cum ar fi, în cazul în care aceasta este nul, iar apoi
face acest lucru, ceea ce eroare ai de gând pentru a obține?
STUDENT: Vei primi un defect set.
Davin: Ai de gând să se stabilească vina, dreapta, pentru că ești
încercând să indice în nul.
Deci, ai de gând să încerce să indice în memorie pe care nu le dețineți.
Deci, aceasta, în cazul în care acest lucru este nul, și faceți acest lucru, veți ciclu.
>> ROB: Cred, de asemenea, cu privire la examenul din care am pus această întrebare, am să vă spun
pe care le poate presupune doar este un număr pozitiv.
Deoarece atoi este, de asemenea, de așteptat să se ocupe de numere negative,
deci va trebui să caz ​​special.
Hei, este primul caracter o cratimă, în care caz, OK,
acum este un număr întreg negativ.
Am să-ți spun aceste tipuri de lucruri.
Am să-ți spun ce aveți nevoie să se ocupe.
Davin: Da.
Deci, eu sunt sigur că unii oameni ar putea have-- dacă ați început uita la examene vechi,
Ai văzut sterln.
Asta e una populară.
Și cred că în sterln, trebuia să face acest cec pentru nul, revenirea
0 sau ceva de genul asta.
Cum ar fi, ai avut pentru a verifica nul.
Și dacă nu, asta a fost punctul de pe pe testul.
Așa că, oricum, nu toată lumea se simt bine cu atoi?
Vrea cineva să du-te peste Piese din nou?
ROB: Oh, da, cred că am, de asemenea, să vă spun te
se poate presupune că tot este-- că acestea sunt de fapt introducerea unui număr,
că nu trebuie să vă faceți griji, cum ar fi, scrisori fiind în șir, așa.
Davin: Da.
Da?
STUDENT: Poți să mergi peste încă o dată, atunci când
utilizați citat dublu și single citat?
>> Davin: Sigur, așa ghilimele, foarte pur și simplu, este intre ghilimele sunt siruri de caractere.
Deci, dacă dublați citat ceva, asta e un șir.
Așa că, cum ar fi, dacă am avut acest 0 aici, și am făcut acest lucru, care este un șir.
Asta nu mai este un personaj.
Deci, eu nu pot găsi această valoare pe ASCII meu diagramă, pentru că este un șir de caractere, da.
>> OK, orice alte întrebări?
Da?
>> STUDENT: Deci ai a răspuns deja acest lucru,
dar ca, atunci când suntem de fapt scris acest lucru pe test,
vrei să ne scrie cu slash zerouri [inaudibil]?
Davin: Nu.
Întrebarea a fost ar trebui să vă încearcă o bară oblică prin zerouri
pentru a indica dacă sunt zero?
Nu, ne vom da seama.
Da, mulțumesc, sunt bine.
OK, nimic altceva?
Vrea cineva sa-- așa cred ne-am rula un pic în timp.
Vrei sa vezi un altul, sau?
STUDENT: RandomInt.
>> Davin: RandomInt, OK, exact.
Deci, hai sa facem RandomInt.
O voi face aici.
Deci, RandomInt este de fapt mult mai simplu.
Cred că atoi este, probabil, cel mai dificil pe care le-am cerut în anii anteriori.
STUDENT: [inaudibil].
>> Davin: Ce?
ROB: Văd dacă e un fel de vizibilă de pe aici.
Davin: Este?
ROB: Nu cred că e going-- cred este de gând să fugi spre dreapta.
Davin: OK, așa că voi face asta.
Și apoi pur și simplu pune-l pe ecran.
>> ROB: În regulă.
>> Davin: Vrei să fii scrib meu?
>> ROB: Da.
>> Davin: Nisa.
OK, pot să șterg asta?
>> STUDENT: Da.
>> Davin: E atât de greu.
(CANTO) Te descurci ce faci.
Și de a face ceea ce tu nu faci.
Bine.
>> OK, dacă îmi amintesc corect, pe testul RandomInt a fost ca,
OK, am de gând să vă dau două numere, cum ar fi un o și a b.
Și vreau să-mi dai un RandomInt între aceste numere.
Deci, RandomInt se întâmplă să ia două Numere
așa RandomInt-- și este de gând să se întoarcă un int.
>> Deci, ceea ce este valoarea de retur?
Tocmai ți-am spus.
Int, nu?
Ca și aceasta, și atunci e de gând să ia două int.
Deci, o să ia int a și int b, așa.
Deci, ce este RandomInt de gând să faci este sa mergi
să se întoarcă o valoare aleatoare între aceste două valori.
Deci, o să fie mai mare decât o, mai puțin de b.
Deci, eu cred că, probabil, puteți presupune că a este cea mai mică dintre cele două valori.
Deci, dacă avem de-a face cu dezordine, ce funcție
am văzut că ne dă lucruri aleatorii?
STUDENT: Drand.
Davin: Drand, exact.
Deci, ai de gând să, probabil, doriți să utilizați drand ta.
Astfel încât să puteți spune aleatoare int, iar noi vom doar spune că este egal cu 0 chiar acum.
Și ei ne vor spune, OK, egal aleatoare drand 48.
Și ce se mai intoarce acest lucru?
Ce face această funcție vă dau?
>> STUDENT: Între 0 și 1.
>> Davin: Da, între 0 și 1.
Deci, o să be--
>> ROB: Și asta este-- cred ne-ar-ți spun asta.
Cum ar fi, aveți posibilitatea să utilizați drand 48.
Puteți verifica acest lucru la examen trecut.
Dar am, probabil, ați spune se poate folosi drand 48, care
returnează un flotor între 0 și 1.
>> Davin: Da, da, eu sunt destul de sigur cu privire la examenul
vă spune, probabil, doriți să utilizați drand, da.
Deci, o să se întoarcă o anumită valoare între 0 și 1.
Și atunci ce ești O să vrei să faci?
Ei bine, vrei să multiplice by-- stai, cred că e așa, îmi pare rău.
Voi face doar asta.
Nu știu.
>> Deci, b minus o.
Deci, de ce b minus o?
Deci, să spunem drand vă oferă înapoi un OK int--, voi face doar restul,
astfel, plus o.
Deci, ce does-- y este b minus o.
Deci, haideți să spunem că drand vă oferă înapoi valoarea maximă pe care ar putea, eventual,
voi da.
Ce se că va fi?
STUDENT: 1.
>> Davin: 1, dreapta?
Deci, în cazul în care acest lucru este de 1, și tu ești înmulțirea cu b minus o,
bine, asta e doar diferență între minus A.
Și dacă apoi se adaugă faptul că înapoi pe o, asta este ceea ce?
Este practic b.
Asta face sens?
>> STUDENT: Da.
>> Davin: Deci, dacă acest lucru este maximă valoare ar putea fi, eventual,
aceasta va fi de 1.
Și atunci aceasta este doar diferență între cele două.
Adaugă o, astfel încât acesta este de gând să se întoarcă la întâmplare.
Iar în cazul de colț, ce drand vă oferă înapoi 1,
întâmplare va fi doar fi eficient b.
Dar asta e maxim se poate.
Deci, în cazul în care va fi mai mică că, așa să spunem că la fel ca ei 0,9,
astfel încât atunci 0,9 ori b minus o va fi mai puțin
decât diferența dintre b minus o.
>> Și apoi, dacă adaug că pe o, atunci acea valoare este
O să fie mai mare decât a, deoarece când adăugați ceva pe ea,
dar aceasta va fi mai mică b.
Deci, ai de gând pentru a obține o întâmplare număr, pentru că suni drand.
Și asta rand, acest număr aleator este Va fi undeva între o
și b.
Asta face sens?
>> ROB: Doar să-l pună în cifre concrete, așa
să spunem că vrem să alegeți o număr aleatoriu între 7 și 10.
Deci, b minus o este gama noastră.
Deci, există o gamă de trei Numerele vrem a alege de la.
Și apoi înmulțirea că între 0 și 1 1,
în cazul în care atunci ne dă some-- să spunem că ne dă 1,5.
>> Apoi 1,5, vrem să mergem 7-10.
Deci, 1,5 plus 7 Ne așteaptă înapoi în noastre de la 7 la 10 gama.
Și apoi ne-l stocarea interiorul un număr întreg, așa că trunchiat până la 8.
Și apoi ne întoarcem doar asta.
Deci, b minus o este gama noastră.
o se deplasează în sus, în numere pe care ne-o dorim în acel interval.
Deci, între 7 și 10, și apoi ne-am poate reveni ceea ce am termina cu.
>> Davin: Da, frumos.
>> ROB: Mulțumesc.
>> Davin: Da, ce sa întâmplat?
>> STUDENT: Nu l-am rula la orice tip de Erori ASCII când we're-- dacă drand este
revenind un flotor [inaudibil].
>> ROB: Deci, la fel ca Rob a spus, deoarece aleatoare nu este un int,
astfel drand va fi un float.
Deci, și apoi se înmulțește afară.
Și s-ar putea obține unele un fel de numere float.
Și apoi o să trunchia.
>> STUDENT: OK.
Davin: Da.
ROB: Și dacă compilatorul ar avertiza tu despre, cum ar fi, pierdere de precizie,
doar aruncat o int în acolo, și atunci e bine.
Davin: Da?
>> STUDENT: Va avea aceeași probabilitate de a obține,
cum ar fi, b sau un [inaudibil]?
>> ROB: Deci, este-- Eu sunt de fapt întrebam este RandomInt ar trebui
să fie un număr de la o la mai puțin de b?
Ca și, dacă este între 7 și 10, care sunt posibilitatile?
7, 8, și 9, sau 7, 8, 9, 10?
Davin: Am uitat.
Pe problemă set--
>> ROB: Cred că e 7, 8, 9.
>> Davin: Se spune în mod specific cuiva inclusiv și una exclusivă.
>> ROB: Da.
>> Davin: Dar eu don't-- eu sunt not--
>> ROB: Deci, eu cred că acestea sunt nu sunt incluse, caz în care,
există un egal probabilitate de 7, 8, și 9.
Nu e nici o probabilitate de 10.
Davin: Da?
STUDENT: Am o întrebare.
Ne dorim să definim o funcție returnează nici o valoare, ci o matrice.
Atunci ce ar fi sintaxă după întoarcă?
>> Davin: OK, deci atunci would-- după întoarcere?
Deci, să spunem că ați fi declarat o serie undeva acolo sus.
Apoi, se va întoarce doar denumirea de matrice.
>> STUDENT: OK, mulțumesc.
Apoi să se întoarcă doar cu un--
Davin: Oh, așteptați, atât de rău.
Întrebarea era cum vrei sa returneze un array.
>> ROB: Deși nu a putut fie o matrice declarat
pe stivă sau ceva de genul asta.
Ar trebui să fie ceva malloced, pentru că malloc
este cum ai ajuns în jurul valorii de alocare de memorie automată.
>> Davin: Da.
ROB: Cum obții în jurul valorii de domeniul de aplicare la nivel local.
>> Davin: Dar v-ar doar reveni name-- sale
>> STUDENT: [inaudibil] nu este o de valoare, de exemplu, două numere, astfel
[Inaudibil].
>> Davin: Nu se pot întoarce număr multiple.
Nu poți, cum ar fi, return--
>> STUDENT: Am vorbit despre revenirea o matrice sau ceva de genul asta.
>> Davin: Da, întrebarea este pot reveni mai multe valori.
Nu puteți reveni mai multe valori.
Tu nu se poate, cum ar fi, întoarce o atunci a reveni b sau ceva de genul asta.
Pentru că după ce te vei întoarce, voi a reveni din funcția.
Și apoi funcția se face, și ca Rob a spus, este pe stiva.
>> Deci tot ce memorie doar devine revenit la calculator.
Totul devine uitat, de fapt.
Deci, dacă doriți să reveniți mai multe valori, va trebui să returneze un array,
Și modul în care face acest lucru este mallocing.
Și apoi se va întoarce x ca asta.
Practic, te vei întoarce doar numele.
Și când te vei întoarce ceva de genul asta, ești
nu se întorc de fapt valoarea.
>> Deci, să spunem că stocat valorile într-o matrice.
Nu ești de fapt revenind aceste valori.
Cum ar fi, dacă m-am întors un int, eu sunt revenind într-adevăr copii ale valorilor.
Dar dacă i s-ar întoarce ceva de genul asta,
Mă întorc o referință pentru aceste valori.
Deci, eu sunt întorc, de fapt, un adresa de memorie a valorilor.
Asta face sens?
STUDENT: Da.
Davin: Nisa.
Da?
>> STUDENT: Când ești folosind drand aici,
aveți de a pune srand înainte de asta?
>> Davin: Nu, nu, eu nu cred așa.
>> ROB: Da, deci aveți să spun ceva despre srand?
Valoarea implicită de pe care nu spune srand la toate este de a face doar srand de nul.
Deci, drand pe cont propriu de lucru va.
Și se va semințelor în mod automat cu ora actuală, este ceea ce se folosește.
Davin: Da?
STUDENT: Îți [inaudibil] cu numerele?
Davin: Da, se poate.
STUDENT: Deci, ai putea spune, cum ar fi, de 4 ori 2.
Chestia e că nu își poate asuma apoi un int este de patru bytes.
Only--
>> Davin: Vreau să spun, pentru testul poți.
[Râde]
>> ROB: Mm, nr.
Davin: Da, da, poți.
În cazul în care vă întrebați cât de mare o int este, tu nu poate fi, cum ar fi, patru sau opt.
ROB: Oh, așa că, dacă Întrebarea este în mod specific,
ca, în cazul în care este o problemă de codificare, ar trebui să spui dimensiune de int.
Dacă este o tabelă, sau se spune cât de multe bytes,
nu ar trebui să completeze în mărime de int.
>> STUDENȚI: [râde]
>> Davin: Corect, așa că de ce este mărime de int importante aici?
Deci, cum ar fi, dacă vom 32 de biți procesor sau ceva de genul asta,
atunci va fi de patru bytes.
Dar pe unele dintre cele mai noi chestii, ar putea fi ce?
Ar putea fi opt, nu?
Deci, asta: dacă codul de doar patru greu, apoi pe unele mașini, se va lucra.
Unele mașini, acesta nu va funcționa.
Dar dacă pe testul de suntem cum ar fi cât de mare este o int?
Pune-patru.
ROB: Corect.
Davin: Da?
STUDENT: Deci, pentru că suntem de declarare [Inaudibil] în interiorul unei funcții,
ar trebui să am pus 3 reușită această funcție?
Sau putem folosi afară?
Davin: Puteți să-l utilizați în afara această funcție.
Deci, el întreabă gratuit.
>> STUDENT: Pierde cale de unde [inaudibil].
>> ROB: Oh, gratuite nu happen-- asta e parte din magia de malloc
este că nu ești limitată la domeniul de aplicare la nivel local.
Aveți control complet asupra cât timp variabilele trăi.
Deci, noi numim malloc aici, s-ar putea o funcție complet separate.
S-ar putea să fie de 10 de ore mai târziu care în cele din urmă numim gratuit.
>> Davin: Deci, de exemplu, cum ar fi, un cuplu săptămâni de acum, atunci când în cele din urmă
face abecedar dumneavoastră în dicționarul psets, mergi
pentru a avea o funcție care creeaza tone de noduri.
Deci mallocing tone de noduri în această funcție.
Si apoi, mai târziu, într-un Funcția separat, ești
O să vrea să elibereze toate aceste noduri.
Astfel încât să puteți literalmente trece doar pentru a desprindă un pointer, deci o adresă de memorie
la ceea ce malloced.
Și că va fi bine.
Nu trebuie să elibereze, cum ar fi, în aceeași funcție.
Da?
>> STUDENT: Deci, un malloc variabilă [inaudibil] afară?
Este că ceea ce vrei să spui?
Davin: Stai, spun asta?
Scuze.
>> STUDENT: În cazul în care o variabilă malloc poate fi liber oriunde în cod,
atunci pot fi ele accesate oriunde în codul?
Poți să le păstrați la nivel local?
>> Davin: Oh, ea a întrebat, cum ar fi, variabila, like--
>> ROB: Deci, încă mai trebuie să au un fel de referință
la blocul de malloc de memorie.
Deci, aici, suntem revenind de x.
STUDENT: Oh.
ROB: Dacă nu ne-am întoarce x aici, iar acest lucru a fost doar nule,
atunci am avea acces la indicatorul care a fost malloced,
și este scurgeri de memorie.
>> STUDENT: OK.
>> Davin: Deci cum ar fi, să spui au această, cum ar fi, chiar aici.
ROB: Nu.
Davin: În funcția mea principală, nu pot doar suna acest X și să fie, cum ar fi, OK,
în această funcție, am făcut acest lucru.
>> ROB: Corect.
>> Davin: Deci, am de gând să sun X in, cum ar fi, principal sau ceva de genul asta.
Nu poți face asta.
Ai de gând să se întoarcă ceva.
Dar ce ai de gând să se întoarcă?
Ai de gând să se întoarcă o adresă de memorie.
Și pentru că vă întoarceți o memorie adresa, care pot fi accesate în altă parte.
Și alte întrebări?
Da?
>> STUDENT: Este funcția de mai sus fiind de validare pentru [inaudibil]?
>> Davin: De ce nu am nevoie să fac asta?
STUDENT: [inaudibil].
Davin: Pentru că ești Nu mallocing nimic.
Deci, este not-- da, e nu ca un șir s.
E un pointer undeva.
Acestea sunt doar valori.
STUDENT: OK.
Davin: Da.
Altceva?
ROB: Da?
STUDENT: Dar atunci când [inaudibil]?
>> ROB: Deci, în scopul de a elibera memorie, am spune aici.
Deci, x este pointer noastră de a blocul de memorie.
Am desprindă că indicatorul.
Și noi nu l-ar face neapărat aici.
O putem face oriunde.
Dar te sun doar liber pe ceva care malloc întoarce.
Deci, malloc, aici, a revenit ceea ce este depozitat în de x.
Deci, putem apela gratuit pe de x.
Orice ultimele întrebări?
>> Davin: Orice ultimele întrebări?
Da?
>> STUDENT: Ne pare rău, puteți re-explica de ce v-ar elibera acolo?
De ce [inaudibil]?
>> Davin: Pentru aici?
>> STUDENT: Da, ca imediat după.
Davin: Tu, probabil, Nu vreau un drum liber aici.
ROB: Tu, probabil, nu ar fi.
Davin: Da, că acest lucru ar face nimic.
Acest lucru ar, cum ar fi, de a crea memorie, face lucruri la ea,
și apoi imediat uita despre asta, da.
>> ROB: Dar am putea face, cum ar fi, aici pentru un motiv oarecare.
Am putea spune stea int y este egal cu matrice întoarcere.
Face unele lucruri cu y, poate imprima conținutul.
Și apoi, în cele din urmă, am terminat.
Ne putem elibera y.
STUDENT: [inaudibil].
Davin: Ar trebui să derulați în jos?
Mulțumesc.
ROB: Nisa.
>> Davin: OK, asta este.
ROB: Bine, bine.
Mult noroc.
>> Davin: Dacă aveți întrebări, ne e-mail.
Mult noroc.