>> [MUSIC JOC]
CAMILLE REKHSON: Salut, toată lumea.
Bine ați venit la testul CS50 sesiune de revizuire zero.
Sunt Camille.
Și am de gând să meargă asupra unor subiecte cu tine
baieti astăzi pentru a vă ajuta se pregătească pentru testul.
Deci, aici e noastră neexhaustivă Lista de subiecte tine
ar trebui să fie familiarizați cu pentru testul.
Acestea au fost luate direct din programa.
Știu că pare ca o mulțime.
Dar crede-mă, ai invatat toate aceste lucruri în ultimele săptămâni.
>> Deci, vom fi cu siguranta merge peste o mulțime de aceste astăzi.
Dar, de asemenea să ia ceva timp pe dvs. proprii pentru a revizui aceste lucruri.
Și dacă nu au fost familiarizați cu ce unele dintre aceste lucruri sunt,
asigurați-vă că vă întreb unul dintre noi.
De asemenea, pentru cuvântul oficial pe testul, du-te la acest link.
Acest lucru va avea toate informațiile cu care cameră aveți nevoie pentru a merge în,
despărțit în ordine alfabetică, și de asemenea, unele sfaturi despre ce materiale
ar trebui să fie studiat, și ce fel de întrebări test vă puteți aștepta.
Deci, asigurați-vă că pentru a verifica asta.
>> De asemenea, unele sfaturi pentru atunci când se pregătesc pentru examen.
Practica de codificare pe hârtie.
Știu că ai obișnuit să având verificarea IDE pentru erori pentru tine,
și it's-- atunci când sunteți o tastarea sus, e un pic diferit decât având
să scrie lucrurile.
Deci, practica a face unele de codificare.
Unele funcții bună de a practica face sunt strlen și atoi,
văzând dacă ai putea scrie cele pe cont propriu.
Să cunoască cu seturi de probleme.
Cele mai multe de ani există întrebări care se referă
la o parte din materialul problemă set.
Deci, asigurați-vă că ați înțeles modul de a face toate seturile de probleme.
>> Incearca sa faci unele dintre chestionare vechi sub constrângerea de timp 75 minute.
O mulțime de chestionare poate fi un fel de lung.
Deci, este un mod de bun pentru a da te unele practici,
și cât timp va luați și cum
ar trebui să împartă timpul să vă asigurați ați terminat totul de la capăt.
Și, de asemenea, veți obține o pagină de unul, două foi de referință fețe
pe care le puteți scrie tot ce doriți pentru a utiliza în timpul testul.
Deci atunci când sunteți crearea asta, că, de asemenea,
modalitate foarte mare de a studia, deoarece vei fi un fel de a revizui lucruri
ca esti o scriere.
>> Deci, orice întrebări generale despre testul, sau cum funcționează?
Da.
>> Audiența: Va această listă de subiecte pe care tocmai ați arătat fi disponibil pentru noi
pe net?
>> CAMILLE REKHSON: Tot acest diapozitiv spectacol vor fi postate pe site-ul.
De asemenea, video de revizuire de astăzi Sesiunea va fi pe site-ul.
Deci, nu vă faceți griji prea mult despre scris lucruri în jos de-a lungul.
Va fi tot acolo.
Orice alte întrebări?
OK, deci să începem.
>> Deci, un singur lucru pentru a fi familiarizați cu este diferitele tipuri de date și mărimea
pe care le iau pe.
Acest lucru poate fi, de asemenea, un lucru mare pentru a scrie pe foaie de referință,
doar pentru a vă asigura că amintiți-vă toate acestea.
Dar-- așa caractere sunt un octet.
Ints 4 bytes.
Un lung, lung, care este de fapt mai mult spațiu pentru un număr întreg, este de 8 octeți.
Un float este de 4 octeți.
Un dublu, care, practic, vă oferă mai mult spațiu pentru a stoca un flotor, este de 8 octeți.
Și apoi un pointer este, de asemenea, de 8 bytes.
Orice întrebări cu privire la acestea?
>> Deci binar este un alt subiect ne-am acoperit un pic acest semestru.
Deci, hai sa facem ceva practica cu conversie
între binar și zecimal.
Deci cineva vreo idee ce că primul ar fi?
Oricine?
Da, e 42.
Deci, dacă vă aduceți aminte, fiecare din locurile în binar
este, în principiu ca 2 la putere locul lui.
>> Așa că primul loc este de 2 la 0 Putere.
Și avem 0 acolo, așa că nimic nu există.
Următorul loc este de 2 la prima putere.
Și avem un 1 acolo, așa că e practic un 2.
Următorul loc este de 2 la al doilea, care este 4.
Nu avem nimic acolo.
Următorul loc peste este de 2 până la a treia, ceea ce ar fi de 8.
Și noi avem o acolo.
Și noi continuăm.
Că last-- cel mai îndepărtat la unul la stânga este locul unde avem 32.
Și astfel, avem practic 32 plus 8 plus 2 pentru a obține 42.
Alte intrebari?
>> Audiența: Care este indicele pentru?
>> CAMILLE REKHSON: indicele practic ne spune este binar.
Deci, există o 2 acolo.
Dacă ar exista like-- în următorii una, sau atunci când suntem de conversie zecimal
la binar, e un 10 ne arată că acest număr este inițial în zecimal.
>> Audiența: Mulțumesc.
>> CAMILLE REKHSON: Da.
Orice alte întrebări cu privire la asta?
OK, hai sa incercam asa ca următoarea o apoi, zecimală la binar.
Deci, luați 50 și punerea că, în binar.
Cum ai face asta?
Da.
>> Audiența: 110010.
>> CAMILLE REKHSON: Da.
Deci Unu o modalitate ușoară de a gândi despre conversia de la zecimal în binar
este sa-- ajută de multe ori pentru a scrie ceea ce diferitele puteri ale lui 2 sunt.
Și apoi du-te prin ea, și a se vedea indiferent de cea mai mare una dintre aceste
este că puteți pune în la număr zecimal, fără a trece peste el.
>> Deci, în acest caz, unul dintre competențele 2 este de 32.
Deci, 32 intră în 50.
Dar a doua putere în sus ar fi 64, care, evident, nu se încadrează în 50.
Deci cea mai mare avem este 32.
Următorul până la 16.
Și 32 plus 16 este de numai 48.
Astfel că încă se potrivește în 50.
Deci avem 1 în ambele dintre acestea.
Și apoi, dacă vom păstra merge în jos, singurul lucru pe care avem nevoie plecat
este de 2 mai pentru a ajunge 48-50.
Deci, atunci avem un 1 în această poziție, și un 0 in ultima poziție.
Pentru că nu e nimic în de 2 la locul de 0-lea.
Întrebări cu privire la convertirea zecimal în binar?
>> Deci, acum hai sa incercam face unele plus binare.
Cum atunci când adăugați cei doi sus?
Da.
>> Audiența: 11100.
>> CAMILLE REKHSON: Da.
Astfel plus, în binar este destul de la fel ca faci in zecimal.
Cu excepția cazului dacă aveți două fiind de 1 lui adunate, 1 plus 1 este 2,
dar 2 în binar este 1 0.
Deci, va trebui să poarte 1, și să păstreze realizare a acestuia pentru acele coloane cuplu.
Și altul decât cel, trebuie doar să adăugați în mod normal.
Orice întrebări cu privire la asta?
Da.
>> Audiența: Ne pare rău, ceea ce este pe ultimul loc?
Există șase numere.
Deci coloana din stânga, ce valoare este?
CAMILLE REKHSON: de data asta de jos?
Audiența: Pe partea de sus cea, pentru 50.
CAMILLE REKHSON: Pentru 50?
Deci cel mai din stânga este de 32.
>> Audiența: 32?
>> CAMILLE REKHSON: Da, asa ca ar fi 32, 16, apoi 8, 4, 2, 1 sau 0--.
Ei bine, e 2 zero, care este de 1.
Da.
Orice alte întrebări cu privire la asta?
OK, deci atunci vom face un pic cu hexazecimal.
Deci, acest lucru ar putea fi un pic mai puțin familiar,
pentru că știu că am făcut mult mai mult cu binar.
Ci un mod foarte bun de a cred despre hexazecimal
este să te desparți de un binar Numărul în 4 bucăți biți.
Deoarece fiecare 4 biți de număr binar este de fapt
unul dintre numerele hexazecimale.
>> Deci, dacă avem această primă parte, avem practic opt 1 lui.
Deci, acestea pot fi împărțite up--
>> Audiența: 255.
>> CAMILLE REKHSON: Să presupunem că din nou.
Audiența: 255 în zecimal, sau 0xFF în hexazecimal.
CAMILLE REKHSON: Da, este.
Deci, dacă vă împărți asta în două bucăți de 4 biți,
avem, practic, patru seturi de 1.
Care este maximum-- practic maximă
putem obține cu 4-biți în binar.
Iar maximul am putea obține pentru că, în hexazecimal ar fi un F.
Deci vom avea două F.
Orice întrebări cu privire la asta?
Da?
>> Audiența: Poți repeta asta.
CAMILLE REKHSON: Sigur.
Deci fiecare, practic, Locul de hexazecimal este
echivalentă cu 4 biți de un binar.
Deci cel mai simplu mod de a face acest lucru este să-l rupe în bucăți de 4 biți.
Deci, în acest caz, avem opt 1 lui.
Deci, dacă ne despărțim cei în două bucăți de 4 biți,
am avea două seturi de patru 1 lui.
Și fiecare dintre cei este echivalent cu F.
Dacă credeți că about-- Știu creierul nostru sunt
un fel de fir de a gândi mai mult prin zecimal,
pentru că ceea ce suntem obișnuiți să.
Deci într-un fel ai putea gândi la ea ca cele patru 1 este egal cu 15 în zecimal.
Și 15 în hexazecimal este F. Deci, asta e un alt mod vă puteți gândi prin ea.
Da.
>> Audiența: Care este 0x pentru?
>> CAMILLE REKHSON: a 0x denotă că este hexazecimal.
Deci, ne-am pus ca prefixul acolo, în mod normal.
Alte întrebări pe care.
OK, deci hai sa incercam merge în altă parte, atunci.
În acest caz, am have-- pare rău?
Audiența: [neauzit].
CAMILLE REKHSON: Vom binar.
Deci, merge în altă parte.
Dar în acest caz, avem 5 și A. Deci, dacă ne gândim la acest lucru,
dacă fiecare dintre those-- 5 și A sunt atât de gând să reprezinte o bucată de 4-biți,
cum ai spune 5 în binar?
>> Audiența: 0101.
>> CAMILLE REKHSON: Da, astfel încât e partea 0101.
Și atunci cum ai spune un in--
>> Audiența: 10.
CAMILLE REKHSON: Spune it-- pare rău?
Audiența: 10.
CAMILLE REKHSON: Da, așa E a doua parte a acesteia.
Și apoi, dacă ai pus cei doi împreună, asta e
cum ai ajuns pe deplin binar pentru hexazecimal.
Da?
>> Audiența: Pentru a ști că A este 1010, nu trebuie să-l memorezi?
Sau poți să like--
>> CAMILLE REKHSON: Deci, dacă Tu-- differe-- așa
când te duci prin binar, practic binar
are 0 la 9 si apoi o prin F ca 16 lucruri săi.
Deci, dacă tot drumul la 0 la 9-- dacă Tu-- 9 și apoi A, practic
dacă ne-am convertit să zecimal, A ar fi ca 10, B ar fi ca 11.
Și dacă vă gândiți la binar 1,010 este 8 și 2,
pentru că acestea sunt cele două locuri care se adaugă până la 10, care
este exact ceea ce este echivalent cu A.
Deci, asta e un fel de ușor mod de a gândi despre asta.
Alte întrebări pe hexazecimal.
>> OK, asa ca acum vom avea O privire la operatorii la nivel de bit.
Deci, acestea pot cu siguranta veni pe testul.
Știu că nu avem a lucrat cu ei mult.
Dar noi suntem doar de gând să faci un pic de revizuire a acestora.
Deci sperăm că acestea vor fi un pic mai familiar pentru tine.
Deci cele șase operatori la nivel de bit care le-am sunt indicate aici.
Și-au lăsat să ne manipuleze biți individuale.
Deci, operatorul AND este un singur ampersand.
A nu se confunda cu care dublu ampersand,
care este logică și că ne permite să comparăm două lucruri.
>> Este unică și cum putem manipula lucruri la nivel de bit.
Deci, aceasta ne dă rezultatul 1 dacă ambele din argumentele pe care ne compara
sunt same-- sau sunt 1.
Și bara verticală, sau, va da ne 1 dacă cel puțin unul dintre ei este 1.
Deci, practic exact ceea ce implică cuvintele.
Și, dacă cele două biți sunt 1, 1 și 1 ne dă 1.
Dar, cu sau, dacă este 0 sau 1, sau 1 sau 1, în ambele cazuri,
Avem 1 ca fiind unul dintre ei.
Deci, atunci ne-ar obține o 1.
Audiența: Ce vrei să spui că se spune că dă 1?
>> CAMILLE REKHSON: a rezultat. Un fel de, ca tine
would-- dacă ai făcut 0 și 1, The urmare a care ar fi 1-- sau 0
și 1 cu rezultatul care ar fi 0, îmi pare rău.
Da, a fost un fel de rezultat al expresiei.
Și apoi, acest simbol caret este XOR, sau exclusive sau.
Asta înseamnă că unul sau exact exclusiv unul dintre cele două argumente este egal cu 1.
Și apoi te-ai da o.
>> Micul Linia ondulate este operatorul nu.
Deci, spre deosebire de ceilalți, care funcționează pe o pereche de biți,
operatorul nu numai să un bit, și se va răsturna.
Deci, dacă give-- dacă faci NU 0, v-ar da 1.
Și dacă nu o, l-ar da 0.
Da?
>> Audiența: Care este diferența între sau cu o linie
și sau cu doi?
CAMILLE REKHSON: Deci sau cu două linii este sau logice.
Deci asta e pentru compararea două numere întregi pline, sau two--
pentru a vedea dacă lucrurile sunt egale.
Sau ca face acest lucru este egală cu acest lucru, Sau asta este egal cu acest lucru tip.
Întrucât bara unice sau, este pentru a face lucruri la nivel de bit.
Da.
>> Audiența: Ce vrei să spui prin biți?
>> CAMILLE REKHSON: Deci este de lucru la nivel de bit direct cu biții din binar.
>> Audiența: Oh, văd.
>> CAMILLE REKHSON: Da, așa de lucru cu 0 și 1 a lui.
Vom face câteva exemple în acest sens după, doar ca nu e prea confuz.
Și apoi ultimele două sunt SHIFT stânga și trecerea dreapta.
Care sunt de fapt mai puțin de două semne sau doi mai mare decât semne.
Și au trecut la pic numărul dat de locuri
pe care le da în direcția.
Așa că l-ar schimba, fie la stânga, sau la dreapta.
Da?
Audiența: Care este sintaxa pentru a rula?
>> CAMILLE REKHSON: Vom du-te printr-un exemplu într-un al doilea.
Deci sperăm, care va ajuta.
Orice întrebări cu privire la doar ce-i aici, before-- OK.
Deci, trece prin câteva exemple.
Să începem cu cele ȘI.
Ce s-ar obține dacă am am 0 și 1?
>> Audiența: 0.
CAMILLE REKHSON: OK, și dacă am 1 și 1?
Audiența: 1.
CAMILLE REKHSON: Da, Ce se întâmplă dacă am făcut 0 sau unul?
Audiența: 1.
CAMILLE REKHSON: Ce zici de 1 sau 1?
Audiența: 1.
CAMILLE REKHSON: OK, ce zici de 0 XOR 1?
Audiența: 1.
CAMILLE REKHSON: Și 1 XOR 1?
Audiența: 0.
CAMILLE REKHSON: Voi sunt bune.
Ce zici NU 0?
>> Audiența: 1.
CAMILLE REKHSON: și nu 1?
Audiența: 0.
CAMILLE REKHSON: OK, și apoi această ultimă unul e un pic unul cu deplasarea.
Deci, dacă ne-am stabilit inițial X să fie de 8, și atunci y este X deplasat spre stânga 3,
ce s-ar care ne da?
>> Audiența: [neauzit].
CAMILLE REKHSON: Să presupunem că din nou.
Audiența: [neauzit].
CAMILLE REKHSON: Deci, aceasta de fapt, ne dă 64.
Audiența: [neauzit].
CAMILLE REKHSON: Deci, eu sunt doar O să scrie asta aici,
astfel încât aceasta face un pic de sens.
Dacă avem 2 la 0, 2 la 1, 2 la 2, 2-3 va fi de 8.
Și dacă vrem să-l transfere 3 mai multe biți spre stânga, care ar fi 2 la 4,
2 la 5, și 2 la 6, și 2 la 6 este 64.
Are care face sens?
Da.
>> Audiența: face acest lucru de schimbare toate la 1 și 0 lui din numărul binar la the--
>> CAMILLE REKHSON: Da.
Și nu va trebui să vă faceți griji cu privire la test despre acestea fiind negativ.
Noi nu va va face sa se ocupe de schimbări negative în nici un fel.
Orice alte întrebări despre asta?
Da.
>> Audiența: Daca este trecerea la dreapta, este ceva care wasn't-- nimic din ce
nu a fost inițial parte din lucru 0?
>> CAMILLE REKHSON: Da, ar trebui să trebuie doar să adăugați 0 pe în original.
Da.
>> Audiența: Deci, ce este că 100 mutat la dreapta de trei ori?
CAMILLE REKHSON: 100 deplasat spre dreapta,
astfel încât să ia toate Lui 1 și 0 și doar le schimba
spre dreapta de câte ori este ai de a trece la dreapta.
>> Audiența: [inaudibil]?
CAMILLE REKHSON: Ei bine, sunt 100-- vorbești despre 100 în binar,
sau 100 în zecimal?
Audiența: Îmi pare rău, 100 în binar.
>> CAMILLE REKHSON: 100 în binar, dacă îl trecerea la right--
dacă trecerea la dreapta odată, ar deveni 10.
Dacă îl trecerea la dreapta de două ori, ar deveni 001.
Și apoi, dacă l-ați schimba din nou, ai un fel de pierde biți.
Da, asta e doar 0.
Orice alte întrebări cu privire la asta?
Da.
>> Audiența: Deci el devine 000.
>> CAMILLE REKHSON: Da.
OK, deci hai să mergem printr-o pic de matematica ASCII.
Deci, în esență, caractere pot tratate ca numere întregi
bazat pe valorile lor ASCII.
Deci, dacă ne-am așezat int A este egal cu 65 de ani, int B este egal cu A plus 1, int char C este egal cu
D minus 1, și caracter D este egal cu 68, ce s-ar imprima în partea de jos?
>> Deci, suntem de imprimare these-- binecuvânteze Tu-- suntem
tipărirea toate aceste ca caractere bazat pe procente C.
Așa că, practic imprimarea valoarea caracterul toate cele patru
din aceste variabile.
Ca un indiciu, 65 este valoarea ASCII din capitalul A. Poate că a ajutat.
Ce?
>> Audiența: ABCD.
>> CAMILLE REKHSON: Da, așa acest lucru ar imprima exact
ABCD pentru că ne-am stabilit int A egală cu valoarea ASCII a A.
Deci, dacă ne-am imprima asta ca o caracter, vom obține doar de capital A,
Un plus 1 ar fi un capital B din ASCII.
D minus 1 ar fi un capital C în ASCII.
Și 68 este valoarea ASCII de D. Întrebări pe ASCII?
Da.
>> Audiența: Deci, cotația marchează în jurul valorii de O, nu faptul că schimbările de la A la ASCII?
>> CAMILLE REKHSON: îl uses-- ghilimele simple count-- jurul A
face un caracter.
Și dacă ai de a face cu ea a numărului form--
astfel încât atunci când, la fel ca în acest caz, este fiind tratate ca un int--
atunci s-ar ocupa cu e valoare ASCII.
Da.
>> Audiența: Ai recomanda ca avem o masă de referință ASCII?
>> CAMILLE REKHSON: Eu nu think--
>> Audiența: sau ar numai o se face cu astea?
>> CAMILLE REKHSON: Cred că ar face cu lucruri simple.
Eu nu cred că ar fi rănit să scrie, poate,
ce de capital litere mici A și A sunt, doar ce aceste intervale sunt începând cu.
Dar eu nu cred că trebuie să ia toate spațiul pentru a pune un tabel ASCII întreg.
Da.
>> Audiența: Care este diferența între a spune Int A și char C,
cum faci la partea de sus?
>> CAMILLE REKHSON: Deci, e doar cum care este stocat în memorie.
Dar se poate trata, fie un fel.
Ca vedem aici, vom face de imprimare din A ca un personaj.
Audiența: Deci asta e la fel ca o?
CAMILLE REKHSON: Da.
Orice alte întrebări?
>> Audiența: Deci, la suta C spune imprima un caracter?
>> CAMILLE REKHSON: Da.
>> Audiența: Deci, chiar dacă are doar o fost definit ca un întreg,
dacă vom încerca să imprimați o char ca o 65 de ani, ea would--
CAMILLE REKHSON: Ar merge la practic se duce la graficul ASCII
și devine indiferent de caractere în graficul ASCII pentru că 65.
>> Audiența: Mulțumesc.
>> CAMILLE REKHSON: Da.
Da?
>> Audiența: Deci, dacă ați făcut% I,% I, % I,% I, ar doar print--
CAMILLE REKHSON: Da, dacă ați făcut tot ce 4% I, aceasta
ar imprima ASCII Valorile de toate acestea patru.
Orice alte întrebări?
OK, deci domeniul de aplicare, practic acest ajută-ne determina unde
o variabilă există în programul tău.
Deci am vorbit despre două diferite tipuri de domeniu, la nivel global și local.
>> Dacă o variabilă este scoped la nivel global, înseamnă întregul program de
are acces la acea variabilă.
Și dacă la nivel global domeniul de aplicare o variabilă, tu
declare înainte funcția principală.
Deci se face chiar de la început.
Și apoi toată dvs. Programul poate fi accesat.
>> Dacă este scoped doar la nivel local, care variabilă limitate la o anumită regiune.
Deci, dacă declară într-un pentru buclă, doar că pentru buclă poate fi accesat.
Sau dacă în termen de declara o funcție specifică,
numai această funcție poate fi accesat.
Întrebări cu privire la domeniul de aplicare.
>> OK, deci funcția de prototipuri.
Practic, deoarece C, când ea compilează, se arata sus în jos.
Dacă declarați o funcție târziu în codul dvs.,
compilatorul nu știe care există această funcție.
Deci, ce vom folosi sunt prototipuri, care spune în esență compilatorului,
Această funcție există, du-te uita pentru mai târziu în codul.
Deci felul în care faci un prototip funcție
este exact modul în care începe off scris o funcție.
Ai da tipul de retur, numele funcției,
și apoi argumente că această funcție are.
>> Deci, să se uite la un exemplu rapid, în acest majuscule funcția noastră că suntem aici, folosind
este de fapt o funcție cub.
Deci, luând în un număr întreg și returnarea cubul de care întreg.
Deci pentru că ne-am scris că Funcția de mai jos funcția principală,
și vrem să utilizați ieșire de that-- sau ne
doresc să această funcție în funcție nostru principal,
am pus drum prototip în partea de sus a programului nostru.
Și apoi când numim l în funcție nostru principal,
compilatorul știe că această funcție este scris mai târziu, și va merge-l caute,
și va folosi în mod corespunzător.
Întrebări cu privire la prototipuri?
Da.
>> Audiența: Deci, ce rost are?
Eu nu primesc punctul de prototipuri.
De ce nu doar avea acolo?
>> CAMILLE REKHSON: Ei bine, dacă e aici, atunci când
ajungi la linia de cub X în funcția principală,
compilatorul va avea nici o idee că funcția cub de fapt există.
>> Audiența: Nu puteai doar pus în fața?
>> CAMILLE REKHSON: E mai bine practica de codificare
să-l pună sub funcția principală.
Deci, de aceea ne-ar face prototipuri.
Doar pentru că, dacă a avut o mulțime de funcții,
ar fi foarte murdar la citit prin toate aceste funcții
înainte de a ajunge la carne de programul tău.
Da, si tu ai avut o q--
>> Audiența: Deci, declară variabila sus la partea de sus
astfel încât să puteți accesa, face o variabilă globală?
Este că similar cu această în cazul în care este ea declarând
acolo, astfel încât să știe că este de gând să-l accesa mai târziu
și îl puteți folosi?
>> CAMILLE REKHSON: Da.
Da.
>> Audiența: În cazul în care the-- orice suplimentare Funcțiile să creați cheie în afara
de acest lucru, sau--
>> CAMILLE REKHSON: Da, dacă ești crearea de alte principal functions--
în sine este, deci, dacă function-- te crearea de alte funcții,
acestea ar trebui să fie în afara.
Da?
>> Audiența: Ce este suta D?
CAMILLE REKHSON: Procent D este același lucru ca la sută I.
Se referă la un număr întreg.
Da.
>> Audiența: Deci Ce face principal Int?
Ce a fost asta gol?
CAMILLE REKHSON: Void spune este nevoie de nici un argument în.
Audiența: [neauzit].
CAMILLE REKHSON: Poți vorbesc un pic mai tare, îmi pare rău?
Audiența: Da, îmi pare rău, de ce a făcut ai pus anula pentru prima,
și apoi int de intrare pentru al doilea?
CAMILLE REKHSON: Oh, pentru cele două different-- pentru funcția principală
față de funcția de cub?
Deci, în funcția principală, vom folosi nule, deoarece nu
există parametri fiind luate în.
În timp ce în cubul funcție, avem o intrare.
De aceea se spune Int, de intrare, pentru că există argumente care suntem
luând în pentru a rula funcția noastră.
Da.
Sunt întrebări?
>> OK, și apoi repede virgulă mobilă imprecizie.
Deci avem infinit mai multe numere reale.
Dar există doar un număr finit de biți
pe care le putem folosi pentru a afișa cele numere, și să îi reprezinte.
Deci, atunci vom ajunge cu unele imprecizie.
Și numerele nu vor fi întotdeauna destul de exact ceea ce
crezi că sunt atunci când sunteți care se ocupă cu virgulă mobilă.
Acest lucru este doar ceva bine de știut.
Întrebări cu privire la aceasta?
Da.
>> Audiența: Este de trimitere la ideea de biți preaplin
care era în curs?
A fost că ceva separat?
>> CAMILLE REKHSON: Sunt complet separat, da.
Bine, minunat.
PULAK Goyal: Salut, toată lumea.
Numele meu este Pulak, si voi fie trecând peste indicii.
OK, deci haideți să primul think despre ceea ce arata ca de memorie.
Deci, după cum puteți vedea aici, am ia de memorie și l-am împărțim
într-o grămadă de blocuri.
Și noi de referință fiecare bloca de o adresă, nu?
Și nimeni nu ne amintim ce tip de notație vom folosi pentru a desemna o adresă?
>> Audiența: Hexadecimal, 0X.
>> PULAK Goyal: hexazecimal, nu?
Deci, 0x înseamnă că suntem vorbesc despre hexazecimal.
OK, deci cum putem crea indicii?
Așa că am să ia tip, am pune it-- adăuga o stea la acesta,
și apoi se adaugă numele variabilei.
Deci exemplele le-am vazut sunt int X stele, y stele char, float și începe z.
Așa că atunci când spun stea Int X, poate cineva spune-mi
ce vreau să fel de a vorbi despre acolo?
>> Audiența: Locul de amplasare a discului.
>> PULAK Goyal: Ne pare rău, ce?
Poti sa repeti asta?
Audiența: Amplasarea disc.
>> PULAK Goyal: Deci actually-- deci ce Am vrut să spun, este atunci când ne-am int stea x,
ce spunem este crearea un pointer, și
poate stoca adresa unui variabilă care este un int, nu?
Deci, cu y stea char, suntem crearea unui pointer
care poate stoca adresa de o variabilă care este un char.
Astfel încât sens pentru toată lumea?
Bine, in regula
>> OK, deci cu indicii, există două operațiuni importante putem face.
Există referire, și acolo a dereferencing.
Da?
>> Audiența: Ar putea merge un pic mai lent?
>> PULAK Goyal: Sigur.
Da, da deci--, pune întrebări așa cum am merge de-a lungul dacă Tu-- dacă ceva este neclar.
Deci, ne-am referire și dereferencing.
Deci, atunci când doriți să obțineți adresa unei variabile, apoi utilizați ampersand.
Așa că haideți să spun că am declarat int x undeva.
Și vreau să obțineți adresa de pe care și să-l dați în, aș face ampersand x.
Iar atunci când doriți să obțineți Valoarea asociată cu un pointer,
utilizați dereference Operatorul, care este o stea.
>> Deci, haideți să spun că am avut Int stele X, și Am avut-o indică spre ceva.
Dacă vreau să obțineți valoarea a ceea ce este arătând spre, aș face doar stele X.
Este clar?
Orice întrebări despre asta?
Da.
>> Audiența: Deci, în general,, tu nu va fi capabil să facă la X și stele
x cu aceeași x.
Este corect?
Pentru că dacă x este un variabilă, atunci aveți
să facă la X pentru a obține că este un pointer.
Dar dacă x este un pointer, atunci ai nevoie de de a face stea X pentru a obține variabila.
>> PULAK Goyal: Da, astfel încât Întrebarea a fost de aproximativ atunci când
folosim un star-- atunci când ați folosi steaua,
și când vom folosi ampersand, și putem
l utilizați cu același tip de variabilă?
Deci, de obicei, în cazul în care aveți, de exemplu, un int x,
v-ar fi cea mai mare parte folosind ampersand pentru a obține adresa de pe care.
Pentru că nu face sens să respectăm în X.
Întrucât, în cazul în care am avut stea int x, ai fi utilizați funcționare dereference
deoarece ar face nici un sens de a utiliza la X în acest caz.
Are care face sens?
>> Audiența: Deci nu se poate și, iar apoi un pointer?
PULAK Goyal: Deci punct de vedere tehnic, de fapt,
poate face ampersand de un pointer.
Dar asta e din cele Domeniul de aplicare al acestei clase.
Pentru purpose-- pentru baieti dvs. scopuri, ori de câte ori aveți indicii,
doriți să utilizați operatorul dereference pentru a obține valoarea asociată cu asta.
Și când ai regulat variabile, ca un int x,
doriți să utilizați ampersand operatorul pentru a obține adresa de pe care.
OK?
>> OK, deci să ne uităm la indicii și ceea ce se întâmplă sub capota.
Deci, primul lucru am facut aici este INT declarată x este egal cu 5.
Adresa acestei variabile este 0x04, iar valoarea este 5.
Deci, haideți să vedem ce se întâmplă cu linia următoare.
Deci, acum ne-am declara un pointer.
Adresa sa este 0x08, și ei Valoarea este adresa lui x.
Asta face sens pentru toată lumea?
Orice întrebări despre asta?
>> OK, și acum să vedem ce se întâmplă cu linia următoare.
Deci, cu această linie următoare, ne-am adresa de copiere a fi 0x10,
iar valoarea sa este 5.
Deci motivul pentru care am primit cinci este am spus, am dereference
pointer, pe care am declarat-o stea Int.
Și așa went-- când dereference o, a spus, OK, ceea ce este în 0x04 Slot.
Sa dus la asta.
Și ce este o x0-- X 0x04, iar valoarea este 5.
Are sens?
Da?
>> Audiența: De ce este adresa copia lui doar 4 bytes deasupra X indicatorul?
>> PULAK Goyal: Da, aceasta este o greșeală on--
>> CAMILLE REKHSON: Deci, da, amintiți-vă acest lucru este scris în hexazecimal.
PULAK Goyal: Oh, da.
CAMILLE REKHSON: Deci asta este, de fapt 8 și apoi 16
pentru că am spus că, indicatorul, amintiți-vă,
în IDE noastră va fi de 8 bytes.
PULAK Goyal: Da.
Deci, doar pentru a fi clar, indicii sunt 8 bytes.
Un întreg este de 4 octeți.
Deci motivul ce a crescut de la 0x04 la 0x08
este pentru că a trebuit să face un salt de 8 octeți.
Și apoi de la for-- copie este doar un int,
e 4 octeți, care este jumătate din 8 octeți.
Deci, ne-am sări la 0x10, care este de două distanță de 0x08.
Orice alte întrebări?
OK, let's-- da?
>> Audiența: De ce nu este valoarea copie Int
doar the-- ce este 5 în loc de 0x04?
>> PULAK Goyal: OK, de ce este 5?
OK, asa ca atunci cand the-- Să primul despre această în termeni de tipuri.
Deci, eu spun copie int este egal cu stele pointer.
Deci, ce este tipul de pointer?
Este o stea Int.
Și când am dereference că, tipul devine un int.
Deci, ceea ce ne asteptam pentru a stoca aici este de fapt un întreg.
Are sens?
Audiența: Sigur, pic.
PULAK Goyal: Deci, atunci când, de obicei, crezi că în termeni de tipuri,
aceasta vă ajută să înțelegeți ceea ce este tip de valoarea pe care ar trebui să meargă acolo.
Astfel încât să puteți exclude de obicei, o mulțime de aceste erori comune
de gândire în termeni de tipuri.
Lasă-mă să trec prin un pic mai multe diapozitive.
Și putem obține întrebări de la sfârșitul secțiunii pointer.
OK, așa că avem un program de buggy aici.
Și astfel nu poate spune cineva, cineva mi ce este în neregulă cu acest program?
Corect, așa că ceea ce suntem așteaptă să facă aici
este-- ceea ce vrem să facem este să ia int variabila X
și rotiți it-- face egal 5 în loc de 3 și apoi imprimați asta.
Dar asta nu se întâmplă.
Poate cineva să-mi spui de ce?
Da?
>> Audiența: Când funcția to_five ia X ca este argument,
aceasta nu ia X în sine, ci în schimb creează o copie, o, de ea.
Și aceasta face operații pe asta.
Dar, din cauza asta, nu modifica valoarea reală a x.
Din moment ce ești [neauzit].
>> PULAK Goyal: dreapta, Bine, asa ca atunci cand numim
funcția to_five, ceea ce ce facem este de gândire,
da-mi o copie a valoare această funcție.
Această funcție, atunci, se va și de a face unele manipulări.
Dar, odată ce se întoarce, e acum în de domeniul de aplicare al funcția principală de aici.
Și așa x este încă, de fapt, egal cu 3, iar noi de imprimare 3.
OK, deci hai sa vedem cum se intampla acest lucru.
>> OK, deci nu e nimic declarat.
Apoi, aici, x este egal cu 3.
Și acum este-- la poziția doi, un nu este încă în domeniul de aplicare.
Și acum mergem la poziția trei, în cazul în care un asumă acum valoarea 3.
La patru, am schimba acum o la 5.
Dar acum, când ne sări înapoi la cinci, care este declarația de imprimare,
o este acum în afara domeniului de aplicare.
Și X este încă egal cu 3.
Are acest sens pentru toată lumea?
OK, deci acum hai sa vorbim despre cum putem folosi indicii pentru a rezolva acest lucru.
Are cineva vreo idee cum am ar putea rezolva acest lucru prin utilizarea indicii?
>> Audiența: Iei într-o stea Int în loc de un întreg pentru to_five.
>> PULAK Goyal: Ne pare rău, ați putea vorbi?
>> Audiența: Iei într-o stea Int în loc de un întreg pentru to_five.
PULAK Goyal: OK, da.
Deci, haideți să pass-- loc de trecere doar valoarea, să-l treacă prin referință.
Această nouă funcție, nu?
Și astfel prin trecerea adresa din, am poate face manipulări pe adresa.
Și așa suntem de fapt, De fapt, schimbarea de x.
Deci, hai sa vedem cum care funcționează.
>> OK, astfel încât în ​​acest exemplu l-am fixat.
Ne-am schimbat semnătura noastră de to_five pentru a lua într-un int
stele în loc de doar o Int aici.
Apoi ne-am dereference acest o și atribuiți 5 la acesta.
Și acum acest lucru va, de fapt, de imprimare 5.
Deci, hai sa vedem cum pașii de lucru aici.
>> Deci cu prima etapă, nu e nimic declarat încă.
Deci, aici, cu cea de a doua etapă, am spus x este egal cu 3,
dar este încă o afara domeniului de aplicare.
Acum de linia a treia, avem x este încă egal cu trei.
Și acum, am trecut in-- ceea ce este stocate într-o este acum adresa de x.
Asta face sens pentru a toată lumea, cum am înțeles?
Drept, avem amper-- așa am trecut un ampersand X la funcția
to_five.
Și apoi la următoarea linie, ceea ce facem, este am dereference o.
>> Și de dereferencing o, suntem în măsură pentru a schimba valoarea lui x între 3 și 5.
Deoarece X locuiește la acea adresă 0x12.
Și apoi, în cele din urmă, atunci când ne întoarcem înapoi la principal,
deși acest lucru este acum o din domeniul de aplicare, am, de fapt, a schimbat de x.
Și este de 5.
Orice întrebări despre asta?
Da?
>> Audiența: Poți să-mi spui ceea ce ampersand X a fost?
M-am gândit ampersand fost ca și.
>> PULAK Goyal: Da, asa ca am folosi la fel simbol pentru multe lucruri diferite.
Deci, aici, atunci când have-- în acest caz, atunci când aveți,
Am ghicesc în acest caz, atunci când ai de a face cu indicii,
când ai pus ampersand in fata de un int, un int variabilă, sau un char,
sau un flux, ceea ce spui este, da-mi adresa de acest lucru.
Dar ce te gândeai de când altcineva ar trebui să utilizați ampersand este, să spunem,
într-o declarație, dacă.
Aveți un adevărat, iar unele variabile care să evalueze la unele Boolean,
și alte variabile că validarea unele Boolean
și doriți să obțineți și a celei.
Atunci ar trebui să utilizați ampersand.
SPEAKER 1: Da, așa că astăzi, ne-am a vorbit despre trei diferite intrebuintari
de ampersand.
Avem două and-urile, ceea ce este ce Pulak tocmai a descris.
Avem un ampersand, care este ceea ce a descris Camille
mai devreme, care este unul ampersand.
Și asta e pentru nivel de bit AND.
Și observați că atât si-- condiționată sau, îmi pare rău,
logic AND și la nivel de bit ȘI, acestea au două numere, nu?
A fost ceva ampersand ceva ampersand,
ceva ceva ampersand.
Aici, atunci când avem doar ampersand ceva, care este dereferencing.
>> PULAK Goyal: Da, marea întrebare.
Da.
>> Audiența: De ce, în conformitate 5a și stele o să devină N / A?
De ce nu doar un fel de reține aceleași valori de la linia anterioară?
>> PULAK Goyal: Deoarece am ieșit din funcție.
Și ce happens-- asa ca acum suntem what--
din domeniul de aplicare al acestei funcții, ceea ce se întâmplă de fapt
este aceia sunt eliminate din memorie.
Da.
>> Audiența: Între 3 sau stele 4 este egal cu 5.
PULAK Goyal: Da.
Audiența: Ce are asta denotă exact?
PULAK Goyal: Ce înseamnă asta?
Audiența: Da.
PULAK Goyal: Deci Întrebarea a fost, ceea ce este
that-- ce faci on-line atunci când spunem, stele este egal cu 5?
Deci amintesc steaua operator de dereference.
Deci, atunci când o, în acest caz, este un pointer.
Este un stea Int.
Așa că atunci când am o dereference de folosind steaua, ce spunem
este, du-te la tot ce este stocat la adresa, stocate în un-- astfel take-- astfel o,
chiar acum, are unele Adresa stocate în ea.
Du-te la cazul în care acest puncte adresa la, și acum schimba orice, care este de cinci.
Da.
>> Audiența: Poți să spui o în termeni mai simpli?
Schimbarea adresa unui la 5.
>> PULAK Goyal: Noi nu suntem schimbarea adresei unei a 5.
O are unele adresa în ea, care este adresa variabilei de interes.
Și așa mai departe ce spunem când dereference este,
acum vrem să change-- suntem acum referire
interes direct variabila de.
Are care face sens?
>> SPEAKER 1: Un alt mod de a gândi de se go-- astfel o este o adresă.
Steaua spune că merge la adresa si uita-te la valoarea sa.
Și acum stabilit valoarea de 5.
Deci se spune, du-te la Adresa de x, care
va fi ceea ce este stocat într-o și schimba la 5.
PULAK Goyal: Da?
Audiența: Deci poziția în cazul în care este indicatorul se întâmplă, adresa.
Dar valoarea este un atribuită Valoarea pe baza adresei.
PULAK Goyal: Da.
Orice alte întrebări despre asta?
Audiența: Am o întrebare.
PULAK Goyal: Da, îmi pare rău.
Audiența: Deci, atunci când atât de store-- dacă spui [neauzit] a.
PULAK Goyal: Da.
Audiența: Nu trebuie să stoca x cu un ampersand?
De ce nu poți spune doar X înainte de a int ta [Inaudibil]?
PULAK Goyal: deci--
Audiența: [neauzit].
PULAK Goyal: Deci este question-- ta oh.
Deci, întrebarea dumneavoastră este, de ce nu se poate we-- la funcția to_five, de ce nu putem
trece doar un X, nu?
>> Audiența: dreapta.
>> PULAK Goyal: OK, da, astfel încât această din nou merge înapoi la discuția noastră pe tipuri.
Deci funcția to_five este acum așteaptă un tip de stea Int.
Deci, ce este tipul de X?
X este doar un Int.
Dar ceea ce această funcție se așteaptă este o stea Int.
Deci, se așteaptă o variabilă care are o adresă stocată în el.
Deci așa Tu-- pus ampersand, și așa că e
cum am pasa ce adresa, care este now--
și că interpretează ca ca o stea Int, da.
Marea întrebare.
Orice alte întrebări cu privire la asta?
Bine, in regula.
>> OK, deci acum hai să vorbim despre pointer aritmetică.
Deci, aici, adăugând și scăderea Am reglează indicatorul
de i ori mai mare decât tipul de bytes indicatorul.
Deci, să ne uităm la modul în care care arata ca.
Deci, aici, ne-am declarat int x este egal cu 5.
Și acum vom declara un pointer y, și să treacă în adresa lui x acolo.
Deci avem asta.
Deci x este stocat la 0x04.
Deci, acum y este egal cu cel.
Și poate cineva spune-mi ce crezi se va întâmpla când vom face y plus este egal cu 1?
Da?
>> Audiența: Va schimba 0 ori 0 8?
>> PULAK Goyal: Dimensiune și type--
>> Audiența: Te muți adresa.
PULAK Goyal: Da-l asta-- da.
Dreapta deci--.
Deci, se va schimba la 0x08.
Și așa because-- ai folosi acest formula, 1 ori mai mare indicatorul
și pointerii sunt size--
>> [STUDENȚI MURMURUL]
>> PULAK Goyal: dreapta.
>> [STUDENȚI MURMURUL]
>> SPEAKER 1: Deci, tipul care punctele de indicatorul sa--
>> PULAK Goyal: Este, da, Da, asta e de 4 bytes.
>> SPEAKER 1: Deci int 4 bytes.
>> PULAK Goyal: Deci, dacă am fi lăsați un-- lui spune că a declarat, cred, o char.
Ce s-ar that-- Să spunem că au X char egale cu a sau ceva.
Și am avut adresa de pe care la 0x04, ceea ce ar fi y plus este egal cu 1 fac acum?
Ne pare rău, ce?
>> Audiența: 0x05.
PULAK Goyal: 0x05, dreapta.
Are toată lumea vedea că?
OK, și acum să zicem că e un float.
Ce s-ar întâmpla?
Oricine?
Deci, flotoare sunt câte bytes?
>> Audiența: 4 bytes.
>> PULAK Goyal: dreapta.
Asa ca ar fi acelasi lucru ca aceasta.
Misto.
OK, și acum hai să vorbim despre indicii și matrice.
Deci ați văzut acest lucru pe două seturi p anterioare,
unde putem treat-- matrice așa și indicii nu sunt același lucru.
Dar putem trata tablouri ca indicii.
Deci, aici, avem această matrice aici, care are trei sloturi.
În primul rând vom slot-- au unul, doua, trei.
>> Deci, dacă we-- astfel încât să putem atribui că prin a spune, ne-am matrice,
dereference asta.
Și apoi când am dereference că, ceea ce suntem de fapt face
este referindu-se la același slot.
Deci, matrice stele este egal cu 1.
Am could- cum ar putea vom scrie that-- ce e
un mod alternativ putem scrie asta?
>> Audiența: Array 0 egal 1.
>> PULAK Goyal: Exact, nu toată lumea poate vedea că?
Deci, aceeași lucru cu aici.
Asa ca atunci cand ne-am matrice plus 1, am do-- așa even--
amintiți-vă cu aritmetica pe care le doar a vorbit despre, atunci când facem plus 1
sau muta de către 4 octeți, chiar.
Are toată lumea vedea că?
Și acea parte, atunci când am dereference care, putem stabili că, pentru a 2.
Și așa ne-am stabilit următorul bloc la 2.
Și astfel o modalitate alternativă de a scrie care ar fi, de asemenea, suport matrice
0 suport egal cu 1.
>> Audiența: Ai nevoie de paranteze?
>> PULAK Goyal: Da, pentru că ești dereferencing întreaga cantitate
matrice plus 1.
OK, și același lucru pentru matrice plus 2.
Orice întrebări despre asta?
Da.
Audiența: Deci array este setat automat la 0?
>> PULAK Goyal: Array este-- Ne pare rău, ce?
>> Audiența: Array este 0.
Adresa de matrice este doar 0.
>> PULAK Goyal: Deci, întrebarea a fost, este adresa de matrice doar 0?
Deci, nu, matrice are unele adresa.
Asa ca atunci cand am dereference o, that's-- astfel încât să puteți gândi about--
literalmente ca o indicare pointer la începutul unui tablou.
Astfel încât are unele adresa.
Nu știm ce este.
Dar când am dereference o, știm care este la începutul matrice.
Și așa că atunci când vom trece prin 1, noi suntem doar în mișcare
în raport cu cazul în care această adresă a fost.
Orice alte întrebări?
Da?
>> Audiența: Deci, dacă faci Suport matrice plus 1--
PULAK Goyal: Ne pare rău, Eu-- ai putea vorbi?
Audiența: Da, dacă faci Suport array [neauzit].
Deci, apoi, dacă ai pus pointer--
PULAK Goyal: Ne pare rău, nu te pot auzi.
Poți să-l încă o dată spun?
>> Audiența: Ești OK.
>> PULAK Goyal: OK, îmi pare rău.
Bine, in regula.
Any-- da.
Așa că atunci când te duci în suport matrice 3--
>> PULAK Goyal: Da.
>> Audiența: --isn't there-- nu ar acesta este de patru locuri, cum ar fi 0, 1, 2, și 3?
De ce este nu int matrice 2?
>> PULAK Goyal: Nu, asa ca Convenția C este-- atunci când declara matrice,
we-- numărul am pus acolo este cât de mulți sloturi vrem.
Dar indicii matrice sunt de fapt matrice 0, 1 matrice, și matrice 2.
Deci e doar Convenția de modul în care declararea tablouri.
Da, orice alte întrebări?
Da.
Audiența: Deci suntem încă vorbesc despre indicii, nu?
PULAK Goyal: Da.
Audiența: Ai putea face în continuare Star pentru array 0 este egal cu 1?
PULAK Goyal: Nu, nu, deci-- OK, astfel încât întrebarea era putea
faci doar suport matrice stele zero, iar apoi spun că egală cu 1.
Deci, nu, ce spunem aici este că putem think--
putem trata tablouri ca indicii.
Deci, ne-am have-- ce suntem spune este că avem două moduri
pentru a face referire acum la același bloc.
Deci, dacă aveți doing-- matrice de zero, tipul de care este acum un int.
Și dacă luați steaua care, veți obține un lucru invalid.
Deci, ceea ce spunem aici, este există două moduri alternative
pentru a se referi la același bloc.
Puteți face, fie matrice suport 0 este egal cu 1.
Sau puteți face dereference matrice, și au ca egal cu 0.
Deci, doar două moduri de face același lucru.
Da.
>> Audiența: De ce nu este mărimea Int 1 pentru a adăuga sa--
>> PULAK Goyal: Mărimea Int 1.
>> Audiența: Pentru că se deplasează unul în afara.
>> PULAK Goyal: Pentru că asta e doar modul C funcționează.
E doar un fel indicatorul aritmetică este definită.
Va lua indicatorul.
Și apoi tot ce adăugați să-l, acesta va multiplica că
de mărimea indiferent magazin pointer este, da.
Da.
>> Audiența: Deci spui putem trata indicii și tablouri la fel,
dar că acestea sunt diferite.
Deci, ceea ce le face diferit?
Ce putem face cu nu unul, dar nu de alta?
>> PULAK Goyal: În sensul prezentei clasă, eu cred că ceea ce fac it's-- Tu--
>> SPEAKER 1: Deci, we-- OK, deci, pentru exemplu, dacă aloca memorie
și aveți un pointer la un număr întreg, de exemplu.
Dacă ați încercat să începeți face pointer aritmetică
și du-te dincolo de cantitatea de memorie pe care ai alocat, ai rula în erori.
Știm cu tablouri, am spune înainte de timp, OK, am
doresc să allocate-- acest esență spune, vreau să aloce
spațiu suficient pentru trei numere întregi.
Și așa acum putem trata memorie ca și cum avem toate trei dintre aceste numere întregi.
Are acest tip de sens?
>> PULAK Goyal: Da.
Da.
>> Audiența: Deci, o stea matrice, este că atribuirea de 1
la indicele de matrice 0?
PULAK Goyal: Da.
>> Audiența: Deci, ce este după Următoarele două linii în ceea ce privește the-- I
Înțeleg că sunteți încercarea de pentru a folosi indicatorul aritmetică aici,
dar, din nou, eu nu înțeleg ce indicatorul aritmetică este.
Deci matrice plus 1, ești spunând că ești acum
O să vreau să vorbesc despre primul indice în matrice.
>> PULAK Goyal: dreapta, și astfel motiv pentru care lucrează este matrice,
aici, ne putem gândi la o stea Int ca.
Și așa că atunci când facem pointer aritmetică pe ea, amintiți-vă formula unde
luăm the-- cred orice adresa actuală este,
și apoi, când adăugăm 1 decât atât, se fapt
multiplica 1 de mărimea lucru ne manipulare.
Deci, în acest caz, de dimensiunea unui Int.
Și apoi vom muta transmite de atât de mult.
>> SPEAKER 1: Deci pretinde aveți stele b matrice.
PULAK Goyal: OK, da.
SPEAKER 1: Cu mâna.
Du-te aici.
PULAK Goyal: Sau pot doar-- da.
OK Deci here--, astfel încât matrice la începând, este doar aici.
Așa că atunci când ne-am dereference matrice, am fost se referă numai la prima blocul aici.
Dar acum, când fac matrice plus 1, care este-- că săgeata este acum aici.
Are care face sens?
Dreapta, pentru că acest bloc este de int size, care este de 4 octeți.
Și astfel, ceea ce facem este că suntem mișcare care indicatorul de 4 octeți peste.
Ori de câte ori facem aritmetică pe el, el va fi întotdeauna
mutați-l cu câte 4 octeți.
Deoarece acest lucru este ca o stea Int.
Are sens?
BINE.
>> Audiența: Deci lucrurile din matrice au fost 5 bytes, am muta 5 bytes--
>> PULAK Goyal: dreapta, asa ca daca am avut o stele char, am muta doar 1 octet.
Deci, în cazul de stele char, că ar fi doar mutați de către un.
Audiența: Pentru a obține următor aveți nevoie de o stea.
PULAK Goyal: Da, da, nu că are sens?
SPEAKER 1: Putem vorbi despre asta mai târziu.
PULAK Goyal: Da, da, sigur.
Bine, in regula.
Să trecem la secțiunea următoare.
SPEAKER 1: Oh, OK rece.
Da, eu sunt.
Bine, minunat.
OK, rece, asa ca acum suntem pe un pic mai multe informații generale despre memorie.
De asemenea, apreciez faptul că mergeau destul de repede.
Este o mulțime de material pentru a obține prin într-o oră și jumătate.
Dar dacă există subiecte pe care vreau să merg mai în profunzime în,
vom avea ore de birou în această săptămână
în cazul în care puteți discuta cu noi de unu la unu.
Sau ai putea veni doar până la încheia și vom discuta despre lucruri.
Și, ca întotdeauna, se simt libertatea de a pune întrebări.
Incredibil.
Deci, aici e imaginea noastră de memorie care am văzut în curs de un miliard de ori.
Și știm că această stivă crește de jos în sus
și grămada crește în jos.
Și ceea ce este diferența dintre lucrurile că păstrăm pe heap și lucruri
că păstrăm pe stiva?
Cineva arunca ceva acolo.
Da.
>> Audiența: Este stivă pentru lucruri care sunt doar
variabile instabile că suntem doar declarare folosind anumite funcții?
SPEAKER 1: Frumos, da.
Deci, în orice moment în cazul în care, să spune că suntem într-o funcție,
și avem doar unele variabile locale.
Cei care sunt de gând să se încheie până pe stiva.
Dacă, în schimb, o numim malloc și de fapt să aloce memorie,
care vine întotdeauna din grămada.
Deci, da cool?
>> Și amintiți-vă că orice astfel de memorie pe care le aloca utilizarea malloc,
care va ajunge pe heap.
Și dacă ați uitat să l gratuit, computer anii
Nu o să știe că ai terminat cu ea.
Deci, este doar de gând să stau acolo în memorie.
Și tu ești în esență, scurgeri că memoria.
Ești o pierde.
Pentru că nu ți-a spus calculator, hei Am terminat-o folosind, nu ezitați să utilizați,
a pus alte lucruri acolo.
Misto.
Orice întrebări acolo?
Da.
>> Audiența: Deci, ce fel de memorie este stiva?
Hrana pentru animale non dinamic, delegat?
Ce-ai numi?
>> SPEAKER 1: Sigur, așa ai putea cred că de ea ca variabile locale.
Apeluri reale la funcții vor să se adune.
Altceva?
Da?
Audiența: Ce părere aveți liber memoria ați adăugat la the--
SPEAKER 1: Sigur, astfel încât atunci când aloca memorie pe heap, te sun malloc.
Și așa, atunci, care vă oferă o înapoi indicatorul la unele adresa în memorie.
Deci, spune-ai sunat ca indicatorul, nu?
Apoi, ai spus pointer gratuit.
Și că eliberează memoria.
Misto.
Alte întrebări?
Da.
>> Audiența: Ce alocate dinamic înseamnă?
>> SPEAKER 1: alocate dinamic înseamnă, în cursul programului.
Deci, atunci când apelați malloc în mijlocul programului,
la începutul programului, nu există nici o memorie alocată.
Și, după cum computerul pas prin codul,
se va aloca memorie.
Deci, asta e ceea ce înțelegem prin dinamic.
Buna intrebare.
Da?
Audiența: Când definiți o matrice cu paranteze pătrate,
face asta încă [Inaudibil]?
SPEAKER 1: Aceasta este o întrebare bună.
Cred că atunci când aloca o matrice, este de fapt o pune pe stiva.
Eu nu sunt pozitive despre că, așa că nu mă citez.
>> SPEAKER 2: Cred că da it-- îl pune pe stiva.
>> SPEAKER 1: se pune pe stivă.
OK, rece, a confirmat.
Alte întrebări?
Da?
>> Audiența: Când delege malloc, nu computerul automat
aloca memorie pentru variabilele tale?
SPEAKER 1: Da, pentru variabilele locale,
se pune în mod automat memorie pe stiva.
Audiența: Deci, ce-i punctul de a folosi malloc?
SPEAKER 1: Care este punctul de a folosi malloc?
Deci, am văzut o grămadă de exemple, cum ar fi, de exemplu, folosind schimb,
în cazul în care ne-o dorim domeniul de aplicare al variabila să fie ceva
dincolo de doar apelul funcției.
Și vrem ceva că putem trece în jurul valorii de
și că putem accesa din diferite locuri.
Asta e unde am vrea să pus de memorie pe heap.
Astfel încât toate aceste diferite Funcțiile pot accesa.
>> Audiența: Poți să explici asta?
>> SPEAKER 1: Deci o opțiune este-- astfel încât Întrebarea a fost, putem doar allocate--
Ne pare rău, putem declara o variabilă globală, în esență.
Acesta este o opțiune.
Dar cu o mulțime de cei care, cei care au tendința de a obține cu adevărat murdar.
Și, în general, credem că de care de design la fel de rău.
Da.
Rece, orice alte întrebări?
Incredibil.
OK, se deplasează pe.
Deci aceasta este de fapt cum ne-am aloca memorie.
Am vorbit despre asta un pic.
Noi folosim această funcție numită malloc.
Și ai spune câte octeți în memorie, astfel încât de multe bytes pe cât de heap,
tu vrei.
Si va reveni la adresa, astfel un pointer la, o bucată de memorie
că este alocat pentru tine.
Deci, tipul va fi stele anulate.
O să fie un pointer la Orice ai decide să pună în acolo.
De fiecare dată când suna malloc, am spus deja
trebuie să-l elibereze asa ca am nu au pierderi de memorie.
>> Care e alt lucru pe care le absolut
au de a face fiecare timp te sun malloc?
OK, trebuie să-l elibereze.
Care e celălalt lucru?
Verificați null, frumos.
Deci, da, e chiar acolo sus pe bord.
Dacă v-ar încerca să aloce memorie și ați lăsat nici o memorie,
computerul va spune, N-am nimic să-ți dau.
Și vă oferă înapoi nul.
Întrebări cu privire la asta?
Da.
>> Audiența: De ce ai vrea vreodată să declara un pointer cu un anumit tip
atunci când stele void pot ocupa toate tipurile pointer Oricum?
SPEAKER 1: Bună întrebare.
De ce ne-ar spune stele Int spre deosebire de a anula stele
atunci când stele void pot ocupa totul?
Deci nu vrem să vreodată exprimate în mod explicit indicii.
E doar practica rau.
Dar vom vorbi despre stele int la fel cum o înțelegere a,
acest lucru este un pointer la un întreg.
>> Audiența: OK.
>> SPEAKER 1: Da, și permite să manipuleze valorile din ea
ca numere întregi.
>> Audiența: Oh, OK.
Și stele nule nu ar lăsa să faci asta?
>> SPEAKER 1: Depinde de context Da, așa că nu vă faceți griji
nu vă faceți griji prea mult despre tipul de acolo.
Știu doar că, în general, malloc returnează un pointer la ceva.
Buna intrebare.
>> Audiența: De ce crezi multiplica IT Times 10? [Neauzit].
>> SPEAKER 1: Sigur, așa că am fost doar faci exemplu aleatoriu aici în cazul în care
Am vrut să aloce suficient cameră pentru a stoca 10 numere întregi.
Doar o alegere aleatorie.
Da.
Da, ce sa întâmplat?
>> Audiența: Ce părere aveți Adică prin verificarea pentru nul?
Vrei să verificați pointer pentru nul sau malloc?
SPEAKER 1: Da, exact.
Deci întrebarea era, ce înțelegem prin cec de nul?
Ne dorim sa-- oricând numim malloc si suntem returnat un pointer,
vrem să spunem, este pointer egal cu null?
Deci, literalmente PTR.
PTR este egal cu NULL.
Da.
Audiența: Deci, am fost un fel de întrebam, dacă
inițializa indicatorul în malloc, nu se indică începutul malloc?
Pentru că dacă e un array--
SPEAKER 1: Aceasta este o întrebare mare.
Da, dacă suni malloc, The pointer care it-- să spunem,
Deci, aici am aloca 10 bytes de memorie.
Deci, îmi pare rău, destul de camerei timp de 10 numere întregi,
vom obține adresa de că prima piesă a memoriei.
Asta-i o întrebare bună.
Da.
>> Audiența: Prin alocarea 10 numere întregi pe scară largă,
ai putea folosi de fapt că pointer ca like-- aproape
ca o serie de numere întregi?
SPEAKER 1: Da, așa poți să-l utilizați ca o serie de numere întregi?
Da, exact, aceasta este ceea ce Pulak doar arătat tu on-- un cuplu alunecă în urmă,
în cazul în care spunem, OK, aceasta este într-adevăr doar un fel de-- noi
pot gândi la ea ca la o serie de 10 numere întregi.
Se întâmplă să fie pe heap.
Audiența: Dar nu au putut accesa cu notație suport pătrat?
SPEAKER 1: Tu de fapt putut accesa cu notație suport pătrat, da.
Aveți posibilitatea să le trateze la fel.
Da.
>> Audiența: De ce ar pointer fi vreodată nul?
>> SPEAKER 1: De ce ar fi pointer fi vreodată nul?
Dacă vă va folosi la toate memoria de pe grămada de.
În cazul în care programul este mananca, consumă, consumă memorie,
și nu e nimic din stânga, apoi malloc va say-- dacă spui,
Vreau mai mult de 100 de bytes, se va să spun, nu am 100 de bytes.
Iată null.
Asta înseamnă că, nu am reușit.
Da.
>> Audiența: În acest caz, null nu este nimic, nu?
>> SPEAKER 1: Da, în acest caz, null este nimic.
Nu ai nici o adresă.
Nu există nici o memorie.
Bine, se deplasează pe.
OK, hai să vorbim foarte repede despre buffer overflow.
Când s-ar putea întâlnim buffer overflow?
Să presupunem că avem un-- noi aloca o bucată de memorie,
si vom scrie șirul în.
Și vom să spun, OK, am de gând să aloce
spațiu suficient pentru șase caractere.
Și am de gând să întreb utilizatorul pentru unele de intrare.
Și intrările de utilizator, de exemplu, salut.
Și care se potrivește perfect bine că avem
cameră pentru toate caracterele de salut, și caracterul de terminare nul.
O multime de cameră, nici o problema.
>> Dar dacă am da posibilitatea pentru un utilizator rău de a utiliza programul nostru,
și tip în șase caractere nu, sau nu cinci personaje, dar un milion.
Țin dactilografiere, și dactilografiere, și dactilografiere, ce se va întâmpla?
Ei bine, ne-am da doar enough-- calculator sau rău,
am dat doar acest șir spațiu suficient pentru 5 caractere.
Deci, vom obține ceva de genul acest, în cazul în care persoana care e rău
tastarea în intrare poate suprascrie dimensiunea tamponului,
și poate merge de fapt, pe lângă suma că este alocat inițial.
Și apoi ce puteți face, The lucru foarte rău care le puteți face,
este suprascrie adresa de retur.
Ceea ce înseamnă, practic, puteți lua un fel de
controlul comportamentului programului.
Deci, la un nivel foarte ridicat buffer overflow este atunci când
ai aloca o anumită cantitate de memorie.
Și apoi Tu-- asta pentru că ești luând introduse de utilizator sau ceva
ca that-- te duci peste limitele de ceea ce ați alocat inițial
și începe încurc programul.
Da?
>> Audiența: De ce nu ar fi ca doar returnează o eroare de segmentare?
>> SPEAKER 1: De ce nu ar fi că returnează o eroare de segmentare?
Ar putea.
Uneori compilator sau în timpul uneia dintre rulării dvs.
este, de fapt de gând să verifice asta.
Dacă anumite lucruri se întâmplă, și acest este un fel de nivel inferior,
atunci trebuie să știți.
Dar, dacă nu de design aceste sisteme în mod corespunzător,
atunci ai sansa de nu-l prinde și doar
permițând computerul take-- persoană rău pentru a controla computerul.
Da.
>> Audiența: [inaudibil]?
SPEAKER 1: Sigur.
Oh, când spun tampon, vreau sa spun doar cantitate de memorie pe care le-ați alocat.
Deci, aici i-am spus, oh, am alocat șase char-- suficient loc pentru șase caractere.
Și eu numesc asta tampon meu în cazul în care s-ar putea scrie informații.
Da.
Orice alte întrebări cu privire la asta?
Da.
>> Audiența: Cum opri?
Cum te opri?
SPEAKER 1: întrebare minunat.
Cum te opri?
Cum a face tu a preveni buffer overflow?
Ei bine, o modalitate de a face acest lucru este ceva de genul GetString, unde în mod constant crește
cantitatea de memorie pe care le aloca în cazul în care utilizatorul introduce o mulțime de text.
Un alt lucru este, dacă numai vreau șase caractere, face o verificare rapidă.
Spune doar de intrare șase caractere.
Da.
Deci, să spunem că au fost lucru on-- vom
pentru a merge la lucruri web un pic mai târziu, în course-- dar sa
spune lucrați pe un formular, ar trebui să doar limita cat de mult ar putea predat.
Da.
>> Audiența: getString trage memorie de stivă, nu?
Doar pentru a clarifica?
SPEAKER 1: Încă o dată?
Audiența: Are getString ia de memorie din stivă?
SPEAKER 1: Cred Getm-- get Int ia de memorie din heap
pentru că o numește alloc.
Audiența: Oh.
BINE.
SPEAKER 1: Da, malloc și realloc.
Alte întrebări?
Da.
>> Audiența: Deci, prin definirea dimensiunea tamponarea,
vă împiedice pe cineva de la fiind capabil să injecteze cod
care poate aluneca pe lângă [neauzit].
>> SPEAKER 1: Deci, prin definirea dimensiunea tamponului,
ai spus, OK aici cum de mult de memorie putem folosi.
Dacă ați permite utilizatorului să scrie peste el, atunci ai de gând să o problemă.
Are sens.
Incredibil.
Să mergem de-a lungul.
In regula.
Vorbind de erori, aici sunt unele mesaje de eroare comune
care ar fi putut apărut în timp ce au fost codificare, de lucru pe seturi de probleme.
Șansă bună ca unul dintre aceste spectacole pe testul
dacă ultimii ani sunt vreun indiciu.
Deci, răspunsurile sunt un fel de aici pe bord.
Dar nu ezitați să strige ceva mai mult.
>> De ce s-ar putea întâmpla o eroare de segmentare?
De ce s-ar putea să obțineți un defect de segmentare atunci când rulați programul?
>> Audiența: [neauzit].
>> SPEAKER 1: Bun.
Da, dacă vom încerca să acces memorie care nu ne-a dat.
Dacă vom dereference un pointer nul.
De exemplu, dacă o numim malloc, și uitați să verificați dacă este nul,
și ne-am încercați să utilizați o, a computerului O să ne dea o eroare de segmentare.
Bine.
Ce despre implicit declarație de funcție?
Ce inseamna?
Audiența: Încerci să utilizați o funcție care nu ați definit.
SPEAKER 1: Bun.
Încerci să utilizați o funcție că nu ați definit.
Deci, care ar putea fi unul din două lucruri.
Poate a fost ca exemplul Camille-ai arătat mai devreme.
Și aveți o funcție principală care solicită ceva numit cub.
Și să spunem că ai uitat pentru a scrie acest prototip.
Ai uitat să spui, hei calculator, Am această funcție numită cub.
Veți vedea mai târziu.
Să spunem că a uitat să scrie prototip, s-ar putea obține această eroare.
Un alt lucru este, să spunem ai încercat să folosească printf,
și a uitat să includă biblioteca standard,
apoi va spune implicit declarație de funcție.
Și nu în ultimul rând, identificator nedeclarat.
Da.
>> Audiența: Ai un domeniu de aplicare problemă.
Ca poate încerci să apela o variabilă locală care este
într-un alt fel de zonă.
SPEAKER 1: Mare, deci, dacă aveți o variabilă care nu este în domeniul de aplicare,
și încerci să-l folosească, ai de gând să intre în bucluc.
Și mai general, să spunem încercați să utilizați X, cu tot spunând Int
X este egal cu 5, atunci esti merge pentru a rula în probleme.
Scuză-mă, întrebări cu privire la acest lucru?
Awesome, lucrând de-a lungul dreapta.
>> OK, recursivitate, de ce să might-- see-- Mi-am pierdut sch-- oh aici vom merge,
doar asigurați-vă că suntem aproximativ la timp.
Bine, rece.
OK, recursivitate, ideea generală de recursivitate, o funcție recursive
este o funcție care se numește.
OK, deci asta e ceea ce am înseamnă un concept de program de
prin care o funcție în sine apeluri.
Ce s-ar fi ceea ce este un some-- motiv bun de a utiliza recursivitate?
Când ar putea fi de folos?
Sau ce este un program care într-adevăr se pretează la recursivitate?
>> Audiența: căutare binară.
>> SPEAKER 1: căutare binară se pretează la recursivitate,
pentru că aveți această problemă pe care le poate descompune în bucăți mai mici,
și de a efectua în mod continuu același algoritm pe ea.
Aceasta duce la, în multe cazuri, mai cod elegant care e mai precis.
Doar suntem exemplul de căutare binară.
Un alt exemplu este merge sort.
Uneori, atunci când vă gândiți la un algoritm, cum ar fi factorial,
doar se simte recursiv, nu?
Pentru ca stim ca factorialului de 5 este un factorial 4 ori 5.
Și așa, atunci când configurați o problemă în acest fel, doar simte recursiv.
Deci, care ar fi o mod minunat de a scrie.
Întrebări?
Da.
>> Audiența: Ce este un caz de bază?
>> SPEAKER 1: Oh, ce este un caz de bază?
I-am spus, nu uita pentru a include un caz de bază.
Să spunem că am fost scris o funcție factorial,
și făceam factorial de 5.
Și știm un factorial de 5 este de 5 ori un factorial de 4,
bla, bla, bla, bla.
Cum știm când să se oprească?
Cum știm că am de fapt, au un număr?
Pentru că dacă ne-am păstrat de asteptare factorial, atunci nu ne-ar primi un răspuns, nu?
Așa că atunci când știm cum să opri în exemplul factorialului.
Oricine, da.
>> Audiența: Când 1 factorialului este 1.
SPEAKER 1: Bun.
Deci, noi știm.
Putem lua de la sine că 1 factorial este egal cu 1.
Deci, dacă vom ajunge în punctul în care suntem apel factoriale la 1,
du-te mai departe și să se întoarcă 1.
Și asta e cazul dumneavoastră de bază.
Pentru că știm o dată ne-am lovit ca și Noi întotdeauna va lovi că, vom never--
nu vom ține doar merge pentru totdeauna.
Orice alte întrebări cu privire la recursivitate?
Da.
>> Audiența: Deci, atunci când te vei întoarce 1, doar în mod automat
se va opri programul, nu?
>> SPEAKER 1: Da, astfel încât atunci când apel de întoarcere 1, if-- să spunem,
să spunem factorial de 2 apeluri factorial de 1, factorial din 1
va preda doar din spate 1.
Și acum factorial de 2 vor spune OK, 2 ori 1 este 2, și să se întoarcă acest răspuns.
Da.
>> Audiența: Avem să vă faceți griji despre domeniul de aplicare în recursivitate
atunci când te duci într-un algoritm?
>> SPEAKER 1: Ah, da.
Da, tu nu trebuie să vă faceți griji cu privire la domeniul de aplicare în contextul recursivitate.
Deci, numai variabilele definite în care se execută a funcției
vor fi utile.
Da, bine întrebare.
Bine, hai să ne mișcăm de-a lungul.
Pentru că avem o mulțime de materiale pentru a obține prin intermediul.
Dar, așa cum am spus, nu ezitați să lovit ore de birou, sau ne după fapt.
>> Acesta este doar un diapozitiv foarte repede.
Am învățat multe despre căutări și felul.
Te rog, te rog, te rog, aceste secțiuni sunt on-line,
Cred că la cs50.net/quizzes.
Deci, du-te să ia această diagramă și pune-l pe foaie ta,
pentru că nu va fi o întrebare pe această.
Vă rugăm să nu-l greșit.
Doar foarte repede, ce înseamnă această diagramă,
este o vorbeste despre mare, pe care știm să fie limita superioară a unei algoritmi
timpul pentru alergat.
Si ne-am omega, care este O să fie limita inferioară
de execuție algoritmi.
OK?
>> Audiența: [neauzit].
>> SPEAKER 1: Da, ceea ce este ultimul lucru?
Ce-i teta?
Este dacă we-- vom doar la pasă de în această clasă, în cazul
în cazul în care limita superioară și nostru limită inferioară nostru sunt la fel.
Da, asta e singura dată este va veni în această clasă.
OK, am de gând să continui.
Dacă nu ați luat poza, Promit acestea vor fi on-line.
>> OK, minunat, structs.
De ce s-ar putea vrem structs?
Ce este un motiv util am putea dori structs.
Cineva striga ceva.
Ei bine, să ne uităm la exemplu de pe placa.
Să presupunem că avem de-a face cu toate aceste elevi.
Dacă facem un program pentru CS50, există ca 800 de persoane.
Avem nevoie de a write-- vom trebuie să se ocupe de o mulțime de informații
despre elevi.
Ar fi frumos dacă am putea fel de grup
astea-- toate informațiile pe care are de a face cu un anumit elev
într-un singur tip de date.
Dar noi știm nu există date tip numit, Student, nu?
Avem un număr întreg, avem o float, avem un șir de caractere, sau o stea char,
dar nu avem, un student.
>> Deci, ce putem face este, de fapt un fel de a defini propria noastră structură, numesc elev,
și putem asocia unele diferite domenii cu care struct.
Deci, în acest caz, să spune ca avem un student.
Și lucrurile pe care le pasă despre reprezintă numărul de student ID-ul
și numele elevului.
Și acum putem asocia acest ID și acest nume cu un anumit elev.
Să vedem câteva exemple.
>> OK, deci aici spun, OK, hai să spune că doresc să facă un student.
L chem elev 1.
Și numărul de ID-ul, în acest caz, putem accesa
de a face doar numele studentului dot domeniul vrem să acceseze.
Deci, acest lucru va fi doar de student 1 punct ID, și ne-am stabilit o egală cu 1.
Pentru că amintiți-vă, am spus că ID va fi un număr întreg.
Și foarte similar, putem spune, acest Numele studentului va fi Davin,
de exemplu.
Astfel încât să putem accesa doar domeniul o struct folosind acest punct.
Întrebări cu privire la asta?
Da.
>> Audiența: Există vreo modalitate pentru a proteja variabilele?
Există vreo modalitate de a proteja variabile de a fi accesate din exterior?
>> SPEAKER 1: Există oricum pentru a proteja variabilele
de la a fi accesat din exterior?
Nu în domeniul de aplicare al CS50.
Alte întrebări?
Da.
>> Audiența: Ce este typedef struct?
Ce înseamnă fiecare componentă?
SPEAKER 1: Ah, ce este typedef struct?
Ce face fiecare componentă Adică de acest tip?
>> Audiența: Da.
>> SPEAKER 1: OK, rece.
Deci acest spune, hei calculator, am doriți să creați o nouă structură.
Și am de gând pentru a defini o definiție pentru ea, astfel încât am putut folosi
ca și cum ar fi un tip de de-a lungul programul meu.
OK, așa că vreau să definească o structură.
Iar eu acum o să fie capabil să-l folosească ca un tip.
Iar numele său este elev.
Și aici sunt domeniile sale.
>> Audiența: Deci este că typedef struct [Inaudibil]?
SPEAKER 1: Dacă doriți să fie în măsură să utiliza acest struct pe tot parcursul programului,
și, în cele mai multe cazuri în CS50 noi face, trebuie să spunem de tip Def.
Și care îi permite să-l folosească la fel mod pe care le folosim ca Int sau float.
Computerul va știu întotdeauna ce este.
Da.
>> Audiența: Putem scrie acest lucru în fișierul header?
>> SPEAKER 1: Oh, îmi pare rău.
Nu ne-am scrie acest lucru în fișierul header?
Ai putea scrie acest lucru la partea de sus a dvs. Programul, în partea de sus a programului de c.
Da, asta ar fi cel mai loc rezonabil pentru aceasta.
Acolo.
Audiența: aceeași întrebare, astfel încât înainte de principal?
SPEAKER 1: dreapta, ai nevoie de acest lucru să fie undeva că oricine poate accesa.
Deci, înainte de principal în cazul dumneavoastră, da.
Audiența: Există o diferență între punerea elev în partea de sus și în partea de jos?
SPEAKER 1: Ah, există o diferență între elev punerea
pe partea de sus sau în partea de jos?
Let-- salva această întrebare, și când ajungem la liste legate,
vom vedea că, bine?
Deci, stai în acest timp de o secundă.
Ultimul lucru pe care vreau să menționez aici, este loc de a avea o structură,
avem un pointer la o structură, ne putem schimba notatia nostru
să fie un pic mai frumos.
>> Putem spune, să zicem că avem o pointer la un elev, mai degrabă decât doar
un student.
Dacă vrem acces la un domeniu, în loc de Făcând, bine du-te dereference indicatorul,
și apoi a accesa numele câmpului.
Această notație arată un pic murdar cu steaua în acest punct.
Total corect, dar un fel de cale curat a face acest lucru,
este doar de a spune numele pointer săgeată.
Și care combină de fapt dereferencing și accesarea într-un simbol frumos.
Întrebări cu privire la asta?
>> Audiența: spun doar că o dată.
>> SPEAKER 1: Să presupunem că o dată.
>> Audiența: Exact ce ai spus.
SPEAKER 1: Sigur, exact ceea ce tocmai am spus.
Dacă avem un pointer la un student mai degrabă decât studentul în sine,
am can-- o modalitate prin care putem accesa câmp este de dereference ea, și apoi
Numele acces.
Un alt, mod mai frumos am poate face acest lucru, care este doar
un pic de zahăr sintactic, este doar pentru a face indicatorul nume săgeată.
Și asta este de gând să combine dereferencing și accesarea.
Da, destul de rece.
In regula.
>> Deci, hai sa vorbim despre cealaltă întrebare.
Să sari la noduri, care vom pentru a utiliza
în legătură liste în doar o secundă.
Deci, aici, veți observa că nu există este nodul cuvântul atât pe partea de jos,
și pe partea de sus.
Înainte, când am fost definirea de student, am avut doar elev pe partea de jos.
Noi nu am avut elev pe partea de sus.
Oricine știe de ce ar putea fi?
Ce diferenta este?
Da.
Audiența: Deci folosiți nod este definiția nodului,
deci este un lucru recursiv?
SPEAKER 1: Bun.
Da, avem nevoie de noduri noastre trebuie pointer la alte noduri.
Deci, din moment ce vom folosi acest tip înainte de a fi de fapt definite,
avem nevoie să-l pună la partea de sus doar așa că știe ce este.
Audiența: Deci încă nevoie de ea în partea de jos?
SPEAKER 1: Da.
Audiența: Deci întotdeauna în partea de jos.
SPEAKER 1: întotdeauna în partea de jos.
Deci, toate de-a ta va au o la partea de jos.
Orice alte întrebări?
Bine, de fapt, vorbim speram despre legat liste foarte repede.
Deci, liste legate are-- le folosi în loc de matrice în unele cazuri,
pentru că știm că sunt o matrice lungime fixă, în timp ce listele legate
putem crește și reduce ca ne-o dorim.
Deci acesta este un exemplu de ceea ce o listă legată s-ar putea arata.
Ceea ce avem nevoie pentru a vedea este capul listei.
Deci, unde lista începe.
Și apoi nod, fiecare nod ulterioară, este
responsabil pentru cunoașterea în cazul în care nodul următor este.
Deci, în acest caz, nodul care stochează 1 este responsabil pentru cunoașterea în cazul în care 3 este.
Persoana care stochează 3 este responsabil pentru cunoașterea unde 9 este.
Și 9 are nimeni altcineva pentru a indica.
E sfârșitul listei, așa că doar spune nul.
OK?
>> Audiența: Care este punctul de acest lucru?
>> SPEAKER 1: Care este punctul de acest lucru?
>> Audiența: Da.
SPEAKER 1: Pentru că, să spun că avem unele date.
Și nu știm exact cum multe date ne dorim înainte de timp.
Deci, cu o serie, să spunem unde ne doresc să conta oameni în primul rând.
Sansele sunt nu se va schimba.
Putem spune doar, OK, am doresc o serie de dimensiuni șase.
Dar dacă vrem ceva că se va schimba.
>> De exemplu, să spunem că am fost încercarea de pentru a ține evidența studenților
ca au venit in camera pentru sesiunea de reexaminare.
Nu am nici o idee despre cât de multe dintre voi oamenii sunt de gând să apară.
Așa că s-ar putea dori o structură de date că pot extinde și micșora.
Deoarece poate cineva va lăsa, poate cineva va veni.
Și astfel, în orice moment, ne-am Puteți adăuga sau elimina noduri.
Rece, marea întrebare.
Da.
>> Audiența: Dacă puteți folosi ceva de genul getString
care ține permițându-vă să obțineți mai multe date ca aveți nevoie de ea, de ce ai nevoie de acest lucru prea?
>> SPEAKER 1: De ce ar fi Folosești listă atunci când legate de
aveți posibilitatea să utilizați ceva de genul getString?
Asta-i o întrebare bună.
Amintiți-vă că unul dintre Get-- scaderi de getString
este că nu am făcut-o foarte bun loc de muncă de a elibera acea memorie,
si am introdus o grămadă de memorie scurgeri în programul tău?
Ai putea lua un static matrice de dimensiuni si continua sa creasca-l.
Dar v-ar trebui să găsească locuri noi în memorie.
Ar fi doar o mulțime de deasupra capului.
>> Unul dintre lucrurile frumoase despre legată liste, spre deosebire de matrice, matrice este
sunt toate în aceeași locație în memorie.
Trebuie să fie continuu bucăți de memorie.
Întrucât listele legate de, 2 și 3 pot fie în totalitate în locații diferite.
Ca 2 este aici, și 3 este aici.
Și atâta timp cât acestea au un pointer la un altul, e în regulă.
Știm că puteți găsi.
Întrebare acolo?
>> Audiența: getString este o funcție în bibliotecă CS50, nu?
Ea nu există în programe reale.
>> SPEAKER 1: Corect.
Corect, asta e alt lucru.
GetString nu există în afara contextului de CS50.
Da.
>> Audiența: Deci, nu faptul că două ar putea fi într-adevăr departe unul de altul,
are ca impact eficiența accesarea elementelor de pe lista?
SPEAKER 1: Aceasta este o întrebare mare.
Întrebarea a fost, nu-i asa impact eficiența accesare
aceste elemente diferite în listă.
De fapt, da.
Pentru ca stim if-- să spune că vrea să acceseze
al doilea element de matrice, știm putem face doar suport matrice 1, dreapta.
Este întotdeauna o să fie în aceeași locație.
Dar dacă vrem să ajungem la 3, nu putem spune pur și simplu, du-te ca 3.
Trebuie să spunem, OK, încep de la începutul listei,
iar acum avem de fapt să se plimbe prin până când vom
găsi numărul suntem interesati de.
>> Deci, în acest caz spunem, OK acesta este primul număr.
Deci, în esență, asta e indicele 0.
Acum trebuie să găsim al doilea număr.
Asta e index 1.
Așa că de fapt merge doar sa-- accesarea, este de gând să ia timp N.
Rece N., mare vechi Da.
>> Audiența: Care sunt fiecare dintre listele?
Sunt fiecare matrice, sau ce?
SPEAKER 1: Aceasta este o întrebare mare.
Care sunt fiecare dintre structuri care am trase?
Ele sunt noduri.
Deci fiecare dintre aceste mici Structura are două părți.
Ea are un număr întreg care deține.
Asta e datele efective că ține pe.
Asta e genul de partea util.
Și, asta este ceea ce face o listă legată,
are un pointer la nodul următor.
Întrebare minunat.
Bine, deci să ne uităm foarte uita-te repede la câteva exemple de ceea ce
am putea face cu liste legate.
>> Deci, un exemplu foarte rapid este, să presupunem că vrem să facem o căutare.
Ce fel de căutare nu poate facem pe listele legate?
>> Audiența: Binary.
>> SPEAKER 1: binar.
De ce nu putem folosi de căutare binară?
>> Audiența: [neauzit].
SPEAKER 1: dreapta, deoarece cu binar căutare, a trebuit să se bazeze pe faptul
că am putea sări doar în matrice în orice moment.
Am putea spune doar, du-te la elementul din mijloc.
Cu aici, așa cum am spus un pic mai devreme,
nu putem sări doar pentru a elementul de mijloc.
În scopul de a găsi orice Element, am de fapt,
Trebuie să se plimbe prin toată lista noastră.
>> Deci, dacă am vrut să facem o de căutare, cel mai bun putem face este doar o căutare liniară.
Începem de la cap, am check-- să spunem că suntem
cauta 9-- vom începe de la cap.
Noi spunem, este aceasta 9?
Nu.
Este 9?
Nu.
Este 9?
Da, l-am găsit.
OK, asta e tot ce.
Aici e un pic de pseudo-cod.
Am de gând să plece acest lucru pentru tine voi să putinei peste pe cont propriu,
doar pentru că nu mai avem un pic scurt la timp.
>> Vă permite să vorbesc despre inserare.
Am văzut un demo foarte misto de acest lucru în curs în cazul în care am spus,
OK, avem această listă legată unde toată lumea arătând spre un altul,
și cineva vine pe scena.
Cum putem introduce ca persoană în lista noastră legată?
Ei bine, un mod greșit de a face, care este Cred că ceea ce am văzut în primul rând,
este atunci când persoana în în mod automat din față
a subliniat noul persoana.
Și apoi ne-am cam abandonat a doua jumătate a listei, nu?
Pentru că noi nu știm unde ea mai este în memorie.
Deci, să fie foarte atent cu privire la ordinea în care ne introduce lucruri.
>> Deci, aici, să spunem vrem să pune 1 la partea din față a lista noastră.
În primul rând, avem 1 punct la în al doilea rând element-- sau elementul
care conține 1.
Deci, vom face asta, doar ca nu suntem va pierde a doua jumătate.
Și acum, putem avea punctul cap la 1.
Deci, din nou, aceasta este doar ca nivel Super High.
Acesta este modul în care ne-ar introduce un nod.
Avem o mulțime de pseudo-cod here-- pare rău,
Nu știu de ce sunt numindu-l pseudo-cod.
E codul actual.
Puteți merge verifica-l mai târziu.
>> Bine, hai să foarte quickly-- alte întrebări
pe liste legate înainte de a mă muta pe un alt cuplu de date
structuri în ultimele noastre 10 minute.
>> Audiența: Avem nevoie acum cum să-l scrie pe un test?
>> SPEAKER 1: Nu avem nevoie să știm cum sa--
>> Audiența: Scrie-l pe un test.
>> SPEAKER 1: Avem nevoie sa-- ar trebui să fie pregătit
pentru a scrie, se introduce, eliminați, și caută liste legate la testul.
Asta este ceva ce noi ar putea aștepta să faci.
Du-te peste el.
Dacă aveți orice întrebări cu privire la cod, trage TF dvs. un e-mail,
vin la ore de birou.
Există încă o mulțime de timp pentru a studia, pentru a nu vă faceți griji.
Bine, orice alta întrebări despre liste legate?
Da.
>> Audiența: Deci, dacă nu utilizați pointer pentru a merge la cel din dreapta
înainte de a utiliza indicatorul pentru cel din stânga, care este
echivalentul a șterge totul, nu?
SPEAKER 1: Da.
Audiența: [neauzit].
SPEAKER 1: dreapta, din moment ce nu putem -l, este de fapt chiar mai rau.
Deoarece nu numai că nu știm în cazul în care este, nu mai putem folosi,
dar we've-- nu suntem eliberarea că memoria mai.
Deci, e doar agățat în jurul și nu fi util pentru că nu putem găsi.
Da, întrebarea rece.
>> Bine, hai sa vorbim despre stive.
Am văzut stive foarte repede.
Ei sunt prima dată în ultimul structuri de date din.
Deci, ne gândim la stive în Annenberg de tăvi unde stiva lucrurile pe partea de sus.
Și dacă ai de gând să vin obține o tavă, ești
întotdeauna o să ia cea de pe top, care este cel mai recently--
care este lucrul care avem cea mai mare recent pus pe partea de sus a stivei.
Astfel încât să puteți fel de cred că de acest tip de vizual atunci când te gândești de stive.
Și apoi, mi-a venit ceva am pe partea de sus a stivei.
>> Dacă ne are-- oh, și cuvintele pe care le utilizați atunci când vorbim despre aceste date
structuri este de obicei, dacă am a pus ceva pe stiva,
ne spune că suntem o împinge pe stiva.
Și dacă luăm ceva de pe stivă, ne spune că suntem popping de pe stivă.
Dacă ai de gând să pună în aplicare o stack-- care eu cu siguranta
recomandăm să încercați out-- esti de gând să doriți pentru a urmări,
să presupunem că utilizați un tablou.
Știu că în curs am vorbit despre utilizarea atât tablouri
sau liste legate de punerea în aplicare a unei stive.
Dacă utilizați un matrice, aveți nevoie pentru a keep--
scuză mine-- avem nevoie pentru a urmări de mărimea și capacitatea.
Deci numărul maxim că stiva noastră poate deține.
Întrebări cu privire la stive?
>> Audiența: Care este diferența între dimensiunea și capacitatea?
SPEAKER 1: Diferența dintre dimensiunea și capacitatea, întrebarea minunat.
Deci, să spunem că suntem folosind o matrice, iar noi
aloca suficient loc pentru 10 numere întregi.
Și vom începe să umple asta.
Și ne-am împinge lucrurile mai departe, și ne-am pop lucruri pe.
Vrem pentru a urmări maxim Numărul putem ține, asta e capacitatea.
Și vrem să păstreze evidența numărul curent, avem, asta e dimensiunea.
Buna intrebare.
Orice altceva pe stive?
Bine, hai să vorbim despre surpriza, cozi.
>> Spre deosebire de stive, care sunt pentru prima dată în ultimul out, acestea sunt în primul rând intrat, primul ieșit.
Deci, aceasta este like-- cred că o linie.
Gândiți-vă de garnitură de până la Apple Magazin pentru a obține orice produs.
Și prima persoană în linie ar trebui să fi prima persoana care a ajutat.
Deci primul lucru care a impins este acest primul lucru care mi-a venit a.
Misto?
Foarte similarly-- oh, cuvintele pe care vom folosi în loc de împingere și pop--
care l-am folosit doar, Sunt sorry-- este spunem,
dacă ne pune ceva în coada, am spune că enqueued.
Dacă luăm ceva din coada, spunem noi dequeued.
Aceasta.
I se poate pronunța pe cei greșit, dar ai prins ideea.
Și apoi din nou, la fel ca stive, dacă suntem de punere în aplicare acest lucru ca matrice,
avem nevoie pentru a ține evidența mărimea, capacitatea, și capul.
Ce vreau să spun prin cap?
De ce avem nevoie pentru a păstra evidența cap?
>> Audiența: Pentru că este în cazul în care la începutul listei este.
SPEAKER 1: Da, de fapt capul este în cazul în care la începutul coada noastră este.
Pentru ca stim, spre deosebire de stive, which-- Am de gând să încerc să se confrunte cu această way--
știm că este întotdeauna o să psihiatru în acest fel și să crească în acest fel.
Cozi, oamenii vin pe la sfârșitul și se lasă de la început,
așa că trebuie să țină evidența de unde la început este.
Asta e ceea ce vreau să spun prin avem nevoie pentru a urmări în cazul în care capul este.
Misto?
In regula.
Opt minute, cuplu mai multe topicuri, o putem face.
>> Bine, tabel hash.
Am vorbit foarte pe scurt despre tabele de dispersie.
Pentru testul, trebuie doar să să înțeleagă la un nivel ridicat.
Ideea de bază este ai aceste date.
Și vrem să-l acceseze, în momentul în care este mai repede decât ceva ca o legătură
listă.
Pentru că am spus, dacă ar fi căutarea printr-o listă legată,
care ar putea avea nevoie de timp N.
Chiar accesarea poate lua Timp N într-o listă legată.
Tabele de dispersie să ne dea un mod care putem acces la mai multe lucruri repede, și mai mult
căuta rapid lucruri, fără având restricțiile de o serie
în cazul în care ne-am stabilit dimensiuni.
>> Deci, ne gândim la o structură de date în cazul în care, în cazul în care ne-am pus-o în structura de date
este dependentă de această funcție hash magic.
Deci, în acest caz, hash magic Funcția este doar a lua un cuvânt,
verificarea ceea ce este prima literă, și atunci doar de sortare în ordine alfabetică.
Asa ca am pus, în esență, le- în diferite găleți.
Când vom vedea banane, spunem noi, OK, hai să pună în găleată B.
Când vom vedea Apple, hai pune-l în o găleată.
Dacă am văzut de caise, să a pus în o găleată.
OK?
>> Deci, să presupunem că am fost în căutarea for-- I Nu știu, ce e un alt fruct?
Să presupunem că am fost în căutarea pentru Orange.
În cazul în care ar trebui să mă uit?
În găleată O.
Da, există doar un singur loc că Orange ar fi, bine?
Așa că am spus mai devreme ce se intampla if-- bine am spus mai devreme,
să spunem că ne-am pus de caise in-- dar am aborda într-adevăr faptul că, oh nu,
dacă ar fi să pun boabe de, e O să intre în conflict cu banane.
În cazul în care am pus-o în cazul în care nu există deja ceva in masa noastră?
Ei bine, avem câteva opțiuni.
>> Numărul opțiune unul este liniar sondare, ceea ce înseamnă, practic,
Să spunem că doriți să încercați să pune Berry, și văd, oh nu,
banane deja acolo, Eu spun doar OK, hai
mă uit pentru următorul loc disponibil.
Așa că am mers în jos, eu spun, oh, nu e nimic în găleată D.
Nu mă pot gândi cu adevărat la orice fructe care încep cu litera D,
așa că am doar de gând să pună Berry acolo.
Durian.
OK, deci din moment ce nu e nimic acolo încă,
S-ar putea la fel de bine folosi doar că la fața locului.
Care este dezavantajul de asta?
>> Audiența: E în ordine.
>> SPEAKER 1: Ne pare rău?
Audiența: E în ordine.
>> SPEAKER 1: E out-- Bine, s-ar putea ajunge
cu lucruri care nu sunt in-- stocate în găleți în modul
care ne așteptăm să fie.
Deci, dacă am fost în căutarea pentru Berry, înainte de a ne-a declarat,
oh ne putem uita într-o găleată.
Ar putea fi într-o singură găleată.
Dar acum, într-adevăr, ar putea fi în toate galeti, nu?
>> OK, aici e altă opțiune, chaining-- separat
care este ideea că vom pentru a utiliza un pic mai târziu, în P set 5.
Mai degrabă decât doar au un spațiu în fiecare compartiment,
de ce nu ne-am fiecare compartiment fie un pointer la o listă legată?
În cazul în care spunem, OK, există o găleată pentru tot ceea ce incepe cu A.
Și nu doar va fi o legătură Listă de fructe care incep cu A.
Deci, dacă vom obține un nou fruct, să spunem am get-- noi avocado, avem mere,
să spunem ne caise, cum ne-ar pune pe lista?
Ei bine, ne-ar merge la cupă 0, și ne-am doar introduceți-l în lista noastră a placut,
simplu ca asta.
>> Acum am tot spun găleată.
Am putea pune în aplicare această într-un număr de moduri.
O modalitate tipic că acest un fel de imagine sugereaza,
este, poate, având o serie de pointeri la liste legate.
Asta e un fel putem punerea în aplicare a unui tabel hash.
Audiența: Ai nevoie de un alt Lista deoarece banane si fructe sunt în afara
de ordine?
SPEAKER 1: Ați need-- ah, ai
nevoie de un alt listă deoarece banana si fructe sunt în afara de ordine?
În acest caz, funcția noastră hash, care ne spune unde să pună lucrurile
nu-i pasă de-a doua scrisoare.
Ea nu-i pasa despre Alfabetizarea, ea îi pasă doar de prima literă.
Întrebare?
>> Audiența: Care este definiția pe care funcție, și ce nu-l arata ca?
SPEAKER 1: Ah, bun.
OK, așa că nu trebuie să vă faceți griji prea mult pentru acest test.
Așa că nu am pus în slide-uri.
Vom fi introduse să-l pentru a seta P 5.
Dar în esență, se spune, dat o element nou, în cazul în care ar trebui să spun?
Sau, să spunem că caut un element, în cazul în care s-ar putea să fie?
Da, marea întrebare.
>> OK, foarte repede, copaci și încearcă.
Deci, un copac este doar un fel de structură de date organizate.
Și vom vedea o mulțime de imagini care va face acest super-clar.
Și un trie, pe care am văzut-o în clasă, este un fel foarte special de copac
care, în esență, funcționează ca un tabel hash pe mai multe niveluri.
E super cool.
Vom vedea în doar o secundă.
Bine, deci haideți să vorbesc despre copaci primul.
Deci acest lucru este într-adevăr exemplu tipic de un copac, în cazul în care avem o ierarhie.
Veți vedea că unul este la foarte de sus, nu?
Și pot să spun că există top în mod clar o comanda pentru ca am
au aceste săgeți merge în jos.
Așa că, un lucru la partea de sus, Eu numesc asta nodul rădăcină.
Deci unul este nodul rădăcină.
Și lucrurile de la partea de jos, care nu au nimic să iasă de pe ei,
Eu spun acestea sunt nodurile frunză.
Deci 8,9 5, 6, 7, OK.
Și, de obicei, WE terminologie pot să spun este, o este părinte 3 lui.
Deci, este un lucru care vine o nivel deasupra ei, și puncte de la ea.
Și 3 este un copil.
Este lucrul pe care 1 puncte pentru a.
Întrebare?
>> Audiența: Poți să te întorci la diapozitivul anterior, te rog?
>> SPEAKER 1: Pot să mă întorc la diapozitivul anterior?
Sigur.
Întrebări cu privire la aceasta?
Sau ai vrut doar să se uite la ea?
Audiența: Eu doar nu am primit prin ea.
>> SPEAKER 1: OK, rece, da.
Acestea vor fi tot online, astfel nu vă faceți griji despre obținerea fiecare cuvânt.
Și în interesul timp, am de gând să meargă.
Este ok?
Incredibil.
Bine, in regula.
Deci, hai sa vorbim despre o kind-- foarte specifice
așa că avem aceste generală Structura de copaci,
care este doar ceva care ne permite la fel de rang lucruri ierarhic.
>> Arbori binari sunt lucruri în cazul în care fiecare nod are cel mult doi copii.
OK?
Și i-am spus, bine, pentru ca pare pentru a se potrivi această descriere.
I-am spus nod, nu un arbore binar de căutare.
Ce este un arbore binar de căutare?
E sortate.
Astfel încât să știți că, în un arbore binar de căutare,
totul la tree-- totul la nodurile stanga este mai mic,
și tot ceea ce a noduri drept este mai mare.
Deci, acest lucru nu este un arbore binar de căutare.
Acesta este doar un arbore binar.
Deci avem mare categorie de copaci, categoria ușor mai mici
de arbori binari, căutare de un-- arbori de căutare binară.
Misto?
In regula.
>> Și acum, cel mai distractiv de toate, ne-am încearcă noastre.
Voi văzut această imagine în curs?
Da, ar trebui să arate foarte familiar.
Să ne uităm la modul în care am putea punerea în aplicare a acestui fapt.
Sau de fapt, să vedem, nu care vin chiar până?
Nu.
Bine, nu avem chiar vă faceți griji despre chestiile nivel scăzut.
Vom avea o multime de timp pentru a aborda apoi P set 5.
Dar pentru moment, la nivel doar foarte mare, ne-am știu că acest lucru este ceea ce pare.
Am descris ca un fel de un tabel hash pe mai multe niveluri
where-- ce face acest magazin?
Aceasta stochează nume de oamenii de stiinta pe care le putem de fapt
uita-te prin doar un fel de a urma diferite tabele de dispersie jos, bine?
>> Și scopul este, în teorie, acestea oferă constantă de timp uite în sus.
Deci, dacă vreau pentru a verifica dacă, De exemplu, cine e someone--
că Mandel în acest trie, aș putea foarte repede
în linear-- Îmi pare rău, în constantă de timp, dau seama
dacă este sau nu este în trie.
Dar un con, este uita-te la cât de mare este.
Nici măcar te stocarea că date mult, și este foarte mare.
Deci, o mare con este faptul că foloseste o cantitate mare de memorie.
Da.
>> Audiența: De ce nu-l oferă constantă de timp, mai exact?
>> SPEAKER 1: Încă o dată?
>> Audiența: Care este intuiția pentru ce ofera timp constant?
>> SPEAKER 1: Excelent întrebare.
De ce nu-l oferă timp constant?
Deci, ce putem face este, sa spune că sunteți în căutarea pentru Mandel.
Știm că vrem să înceapă în primul nivel la M.
Știm vrem să-l urmeze la E. Deci asta e să ia un pas, doi pași, nu?
Am urmați de N. Am urmat pentru D. Am urmați de E. Am urmat pentru L.
Și apoi următorul lucru vom verifica says-- acest delta spune Da, asta e
în tabelul nostru.
Acesta este un cuvânt.
Aceasta este o intrare valabilă în trie nostru.
Deci vrei să spui, OK, care a avut șapte pași.
Dar dacă am adaugat ca o catralioane mai oamenii de stiinta de la această structură de date,
nu am avea de a verifica o catralioane mai multe lucruri.
Vom doar vreodată de gând să trebuie să ia șapte pași, lungimea persoanei
nume.
>> Deci, ne place sa credem de rulare ca, presupunem
vom crește dimensiunea noastră structură de date, cât de mult mai mult
se merge să ia?
În acest caz, dacă adăugăm o mulțime mulți oameni de știință, nu contează.
Este încă de gând să ia aceeași cantitate de timp.
E timpul constant.
Da.
>> Audiența: Cum știu pentru a scana peste celelalte numere?
SPEAKER 1: Cum știu cât de sa--
Audiența: Ca cum stii te duci direct de la M la E și să nu M la A?
SPEAKER 1: Oh, sigur.
Pentru că am știut că a fost cauta cuvântul Mandel,
și eu doar știu că e M-E. Deci that-- Da, dă-i drumul.
Audiența: Nu ar trebuie să se uite la celelalte litere
în restul [neauzit]?
>> SPEAKER 1: Ah, nu aș avea să se uite la the-- OK, mare.
Aceasta este o întrebare mare.
Depinde cum o pună în aplicare.
Dacă am pune în aplicare ca doar ca o serie de matrice
în cazul în care știm că E este întotdeauna la poziția 0,
Nu știu, orice Indicele număr este la.
Da, putem face doar constant timp, nu, nu, nu, nu.
Misto.
Întrebare acolo?
>> Audiența: Este timp constant același lucru ca și în timp real?
SPEAKER 1: Este timp constant același lucru este în timp real?
Nu sunt foarte sigur în timp real este.
Audiența: timp Ca și faptul că literalmente progreseaza de-al doilea
de-al doilea, spre deosebire de a fi o variabilă independentă.
>> SPEAKER 1: Oh, da, pot gândi în acest fel.
Cu alte cuvinte, nu este dependent de mărimea structurii datelor.
Asta e un mod de a gândi de ea.
Orice alte întrebări?
Poate in prima dată în istorie, am terminat la timp.
Dacă aveți orice întrebări, simt liberi să vină cere noi, du-te la secțiunea,
vorbesc cu dumneavoastră TFS, birou ore sunt 08:00 și 08:30
11:00 luni și marți, așa e un pic diferit de timp,
astfel încât asigurați-vă că rețineți că.
Da.
>> Audiența: Nu trebuie să știm chestii de genul argumente în linia de comandă,
ls linie, lovești orice?
>> SPEAKER 1: Linia de comandă argumente, și comenzi Linux,
da, trebuie să știți cele.
Very-- e ca un fel de nivel chestii am acoperit în secțiunea 0,
în măsura în care comenzi Linux du-te.
>> Audiența: Sunt de ore în Annenberg?
SPEAKER 1: ore de birou, nu sunt totalitate sigur unde sunt.
Dar puteți verifica site-ul, și vă va spune.