>> [Musik spiller]
CAMILLE REKHSON: Hej, alle.
Velkommen til CS50 quiz nul gennemgang session.
Jeg er Camille.
Og jeg har tænkt mig at gå over nogle emner med dig
fyre dag til at hjælpe dig forberede sig til quizzen.
Så her er vores ikke udtømmende liste over emner, du
bør være bekendt med for quizzen.
Disse blev taget direkte fra pensum.
Jeg ved, det virker som en masse.
Men tro mig, har du lært alle disse ting i de sidste par uger.
>> Så vi vil helt sikkert gå over en masse af disse i dag.
Men også tage lidt tid på din egne til at gennemgå disse ting.
Og hvis du ikke var bekendt med hvad nogle af disse ting er,
Sørg for du bede en af ​​os.
Også for den officielle ord på quizzen, gå til dette link.
Dette vil have alle de oplysninger, med hvilken plads du har brug for at gå i,
delt op alfabetisk og også nogle tips om hvilke materialer
du skal studere, og hvad slags af quiz spørgsmål, du kan forvente.
Så sørg for at tjekke det ud.
>> Også nogle tips til, når du er ved at forberede til eksamen.
Øv kodning på papir.
Jeg ved, du har vænnet sig til at have IDE check for dine fejl for dig,
og it's-- når du skriver det op, det er lidt anderledes end at have
at skrive tingene ud.
Så øve gøre nogle kodning.
Nogle gode funktioner til at praktisere gør er strlen og atoi,
se, om du kunne skrive dem ud på egen hånd.
Være bekendt med problemet sæt.
De fleste år der er spørgsmål, der relaterer
til nogle af problemet indstillet materiale.
Så sørg for at du forstår hvordan man gør alle problemområderne sæt.
>> Prøve at gøre nogle af de gamle quizzer under det 75. minut tidspresset.
En masse af de quizzer kan være slags lang.
Så det er en god måde at give dig selv nogle praksis,
og hvor lang tid det vil tage dig, og hvordan du
bør opdele din tid til at sørge for, du er færdig med alt ved udgangen.
Og også, får du en én side, tosidet henvisning ark
at du kan skrive hvad du ønsker på at bruge under quizzen.
Så når du opretter at, det er også
virkelig god måde at studere, fordi vil du slags gennemgå tingene
som du skriver det.
>> Så enhver generelle spørgsmål om quizzen, eller hvordan det fungerer?
Ja.
>> PUBLIKUM: Vil denne liste over emner at du bare viste være tilgængelige for os
online?
>> CAMILLE REKHSON: Denne hele dias show vil blive indsendt til hjemmesiden.
Også den video af dagens gennemgang session vil være på hjemmesiden.
Så du skal ikke bekymre dig for meget om skrive tingene ned overalt.
Det vil alle være der.
Andre spørgsmål?
OK, så lad os komme i gang.
>> Så én ting at være bekendt med, er de forskellige datatyper og størrelse
at de tager på.
Det kan også være en stor ting at skrive ned på din reference ark,
bare for at sikre dig huske alle disse.
Men-- så chars er 1 byte.
Ints er 4 byte.
En lang, lang, som er dybest set mere plads til et helt tal, er 8 bytes.
En flyder er 4 bytes.
En dobbelt, som dybest set giver dig mere plads til at gemme en flyder, er 8 bytes.
Og så en pointer er også 8 bytes.
Eventuelle spørgsmål om disse?
>> Så binære er et andet emne, vi har dækkede en lille smule i dette semester.
Så lad os gøre noget øve med at konvertere
mellem binær og decimal.
Så nogen der har nogen idé om, hvad at første man ville være?
Nogen?
Ja, det er 42.
Så hvis du kan huske, hver af steder i binær
er dybest set ligesom 2 til det sted magt.
>> Således at første stedet er 2 til 0 magt.
Og vi har 0 der, så intet der.
Det næste sted er 2 til den første strøm.
Og vi har en 1 der, så det er dybest set en 2.
Det næste sted er 2 til den anden, hvilket er 4.
Vi har ikke noget der.
Det næste sted over er 2 til den tredje, som ville være 8.
Og vi har en der.
Og vi holde ud.
Det last-- længst til venstre en er, hvor vi har 32.
Og så, vi dybest set har 32 plus 8 plus 2 for at få 42.
Nogen spørgsmål?
>> PUBLIKUM: Hvad er den sænket til?
>> CAMILLE REKHSON: Den sænket dybest set fortæller os det er binær.
Så der er en 2 der.
Hvis der var like-- i den næste en, eller når vi konvertere decimal
til binær, er der en 10 viser os, at dette antal er oprindeligt i decimal.
>> PUBLIKUM: Tak.
>> CAMILLE REKHSON: Ja.
Andre spørgsmål om, at én?
OK, så lad os prøve det næste man så, decimal til binær.
Så tager 50 og lægge det i binær.
Hvordan ville du gøre det?
Ja.
>> PUBLIKUM: 110.010.
>> CAMILLE REKHSON: Ja.
Så en-- en nem måde at tænke på konvertering fra decimal til binær
er at-- det ofte er med til at skrive hvad de forskellige kræfter 2 er.
Og derefter gå igennem det, og se uanset den højeste en af ​​dem
er, at du kan sætte ind på decimaltal uden at gå over den.
>> Så i dette tilfælde er en af beføjelser 2 er 32.
Så 32 går i 50.
Men den næste opstart vil være 64, hvilket naturligvis ikke passer ind i 50.
Så den højeste vi har, er den 32.
Den næste ned til 16.
Og 32 plus 16 er kun 48.
Så der stadig passer ind 50.
Så vi har 1'er i både af dem.
Og derefter, hvis vi holde gå ned, det eneste, vi behøver venstre
er 2 mere for at få 48-50.
Så har vi en 1 i denne stilling, og et 0 i den sidste position.
Fordi der er ikke noget i 2 til 0-pladsen.
Spørgsmål om konvertering decimal til binær?
>> Så lad os nu prøve at gøre nogle binær addition.
Hvordan når du tilføje dem to op?
Ja.
>> Publikum: 11100.
>> CAMILLE REKHSON: Ja.
Så gør tilføjelse i binær er temmelig meget det samme som at gøre det i decimal.
Undtagen hvis du har to 1 væsen adderes, 1 plus 1 er 2,
men 2 i binær er 1 0.
Så du er nødt til at bære en, og holde transporterer det til de par kolonner.
Og bortset fra, blot tilføje normalt.
Eventuelle spørgsmål om det?
Ja.
>> PUBLIKUM: Beklager, hvad er det sidste sted?
Der er seks numre.
Så kolonnen længst til venstre, hvilken værdi er det?
CAMILLE REKHSON: På denne nederste?
PUBLIKUM: På den øverste, for 50.
CAMILLE REKHSON: For 50?
Åh, så den yderste venstre ene er 32.
>> PUBLIKUM: 32?
>> CAMILLE REKHSON: Ja, så det ville være 32, 16, derefter 8, 4, 2, 0-- eller 1.
Tja, det er 2 nulte, som er 1.
Ja.
Andre spørgsmål om dette?
OK, så da vi kommer til at gøre en lille smule med hexadecimal.
Så det kan være en lille smule mindre velkendte,
fordi jeg ved, vi har gjort meget mere med binær.
Men en rigtig god måde at tænke over hexadecimal
er at bryde op en binær nummer i 4 bit bidder.
Fordi hver 4 bits af en binære tal er stort set
en af ​​de hexadecimale tal.
>> Så hvis vi har denne første, Vi har dybest set otte 1 s.
Så dem kan opdeles up--
>> PUBLIKUM: 255.
>> CAMILLE REKHSON: Sig det igen.
PUBLIKUM: 255 i decimal, eller 0xFF i hexadecimal.
CAMILLE REKHSON: Ja, det er.
Så hvis du opdele at op i to 4-bit bidder,
vi dybest set har fire sæt af 1.
Hvilket er det maximum-- dybest set den maksimale
vi kan få med 4-bits i binær.
Og den maksimale vi kunne få for der i hexadecimal ville være en F.
Så ville vi have to F'er.
Eventuelle spørgsmål om det?
Ja?
>> PUBLIKUM: Kan du gentage det.
CAMILLE REKHSON: Selvfølgelig.
Så hver, dybest set, sted hexadecimal er
svarende til de 4-bits binært.
Så den nemmeste måde at gøre dette er at bryde det op i 4-bit bidder.
Så i dette tilfælde, har vi otte 1 s.
Så hvis vi opdele dem i to 4-bit bidder,
vi ville have to sæt af fire 1'ere.
Og hver en af ​​dem svarer til F.
Hvis du tror, ​​om-- Jeg kender vores hjerner er
slags kablet til at tænke mere gennem decimal,
fordi det er hvad vi er vant til.
Så en måde, du kunne tænke på det som de fire 1s er lig med 15 i decimal.
Og 15 i hexadecimal er F. Så det er en anden måde kan du tænke igennem det.
Ja.
>> PUBLIKUM: Hvad er 0x efter?
>> CAMILLE REKHSON: The 0x angiver, at det er hexadecimal.
Så vi bare sætte det præfiks der normalt.
Andre spørgsmål om det.
OK, så lad os prøve at gå den anden vej derefter.
I dette tilfælde have-- vi ked af?
PUBLIKUM: [uhørligt].
CAMILLE REKHSON: Vi kommer til at binær.
Så går den anden vej.
Men i dette tilfælde, har vi 5 og A. Så hvis vi tænker over det,
Hvis hver af those-- 5 og A er både kommer til at repræsentere en 4-bit chunk,
hvordan ville du sige 5 i binær?
>> PUBLIKUM: 0101.
>> CAMILLE REKHSON: Ja, så det er den 0101 del.
Og så hvordan ville du sige en in--
>> PUBLIKUM: 10.
CAMILLE REKHSON: Sig det-- undskyld?
PUBLIKUM: 10.
CAMILLE REKHSON: Ja, så det er den anden del af det.
Og så, hvis du lægger de to sammen, det er
hvordan du får det fulde binær til hexadecimal.
Ja?
>> PUBLIKUM: At vide, at A er 1010, har du til at huske det?
Eller kan du like--
>> CAMILLE REKHSON: Så hvis du-- den differe-- så
når du går igennem binære, dybest set binære
har 0 til 9 og derefter A gennem F som dens 16 ting.
Så hvis hele vejen til 0, hvis 9-- du-- 9 og derefter A, dybest set
hvis vi omdannede den til decimal, A ville være som 10, ville B være som 11.
Og hvis du tænker over det binær 1010 er 8 og 2,
fordi de er de to steder at tilføje op til 10, hvilket
er præcis, hvad A svarer til.
Så det er sådan en nem måde at tænke på det.
Andre spørgsmål om hexadecimal.
>> OK, så nu vil vi tage et kig på bitvise operatører.
Så disse kan helt sikkert kommer op på quizzen.
Jeg ved, at vi ikke har arbejdet med dem en masse.
Men vi er bare at gøre en lille gennemgang af disse.
Så forhåbentlig disse vil være en lidt mere velkendt for dig.
Så de seks bitvise operatører at vi har, er vist her.
Og de Lad os manipulere enkelte bits.
Så AND operator er en enkelt-tegn.
Du må ikke forveksle det med dobbelt-tegn,
som er den logiske og at lader os sammenligne to ting.
>> Det indre og det er, hvordan vi kan manipulere tingene bitvis.
Så dette giver os resultatet af 1, hvis begge af de argumenter, som vi sammenligner
er same-- eller er 1.
Og den lodrette linje, OR, vil give US 1, hvis mindst en af ​​dem er 1.
Så dybest set præcis hvad ordene indebære.
OG, hvis de to bits er 1, 1 og 1 giver os 1.
Men med OR, hvis det er 0 eller 1, eller 1 eller 1, i begge tilfælde,
Vi har 1 som er en af ​​dem.
Så ville vi få en 1.
PUBLIKUM: Hvad mener du at det siger, det giver 1?
>> CAMILLE REKHSON: Den resultat. Slags, ligesom du
would-- hvis du gjorde 0 og 1, det Resultatet af denne vil være 1-- eller 0
og 1 med resultatet af det ville være 0, ked af det.
Ja, det var slags af resultatet af udtrykket.
Og så denne indsætningstegn symbol er XOR eller eksklusive OR.
Så det betyder udelukkende et eller præcis en af ​​de to argumenter er lig med 1.
Og så ville det give dig en.
>> Den lille bølgelinien er IKKE operatør.
Så i modsætning til resten af ​​dem, der opererer på et par af bits,
NOT operatøren tager kun én bit, og vil vende det.
Så hvis du give-- hvis du gør IKKE 0, ville det give dig en.
Og hvis du ikke 1, det ville give dig 0.
Ja?
>> PUBLIKUM: Hvad er forskellen mellem OR med en linje
og OR med to?
CAMILLE REKHSON: Så OR med to linjer er den logiske OR.
Så det er til at sammenligne to fulde heltal eller to--
at se, om tingene er lige.
Eller lyst til at gøre dette er lig med det, ELLER det er lig med denne type ting.
Hvorimod enkelt bar eller, er for at gøre tingene bitvise.
Ja.
>> PUBLIKUM: Hvad mener du med bitvise?
>> CAMILLE REKHSON: Så bitvise arbejder direkte med de bits i binær.
>> PUBLIKUM: Åh, jeg ser.
>> CAMILLE REKHSON: Ja, så arbejde med 0'er og 1'er.
Vi vil gøre et par eksempler på denne efter, bare så det ikke er for forvirrende.
Og så de sidste to er venstre skift og retten skift.
Hvilket er dybest set to mindre end tegn eller to større end tegn.
Og de flyttet til lidt det angivne antal steder
at du giver det i den retning.
Så det ville enten flytte det til venstre eller til højre.
Ja?
PUBLIKUM: Hvad er syntaksen for at køre?
>> CAMILLE REKHSON: Vi kommer til at gå gennem et eksempel på et sekund.
Så forhåbentlig vil det hjælpe.
Eventuelle spørgsmål om bare hvad der er op her, before-- OK.
Så gå gennem nogle eksempler.
Lad os starte med den og ettaller.
Hvad ville vi få, hvis vi gjorde 0 og 1?
>> PUBLIKUM: 0.
CAMILLE REKHSON: OK, og hvis vi gjorde 1 og 1?
PUBLIKUM: 1.
CAMILLE REKHSON: Ja, hvad hvis vi gjorde 0 eller en?
PUBLIKUM: 1.
CAMILLE REKHSON: Hvad med 1 eller 1?
PUBLIKUM: 1.
CAMILLE REKHSON: OK, hvad med 0 XOR 1?
PUBLIKUM: 1.
CAMILLE REKHSON: Og 1 XOR 1?
PUBLIKUM: 0.
CAMILLE REKHSON: Du fyre er gode.
Hvad med IKKE 0?
>> PUBLIKUM: 1.
CAMILLE REKHSON: Og IKKE 1?
PUBLIKUM: 0.
CAMILLE REKHSON: OK, og så er denne sidste man er en lille en med gearskift.
Så hvis vi oprindeligt sat x for at være 8, og er Y x forskudt mod venstre 3,
hvad ville det give os?
>> PUBLIKUM: [uhørligt].
CAMILLE REKHSON: Sig det igen.
PUBLIKUM: [uhørligt].
CAMILLE REKHSON: Så denne faktisk giver os 64.
PUBLIKUM: [uhørligt].
CAMILLE REKHSON: Så jeg er bare kommer til at skrive dette op her,
så det gør en lille smule fornuft.
Hvis vi har 2 til 0, 2 til 1, 2 til 2, 2 til 3 vil være 8.
Og hvis vi ønsker at flytte det 3 flere bits til venstre, vil det være 2 til 4,
2 til 5, og 2 til 6, og 2 til 6 er 64.
Betyder det giver mening?
Ja.
>> Publikum: Betyder det skift alle 1s og 0 s af det binære tal til--
>> CAMILLE REKHSON: Ja.
Og du behøver ikke at bekymre sig om den quiz om disse er negativ.
Vi vil ikke gøre dig med at håndtere negative forskydninger på nogen måde.
Andre spørgsmål om dette?
Ja.
>> PUBLIKUM: Hvis det er at flytte til højre, er noget, wasn't-- noget,
var ikke oprindeligt en del af de ting 0?
>> CAMILLE REKHSON: Yeah, ville du blot tilføje 0 s på i originalen.
Ja.
>> PUBLIKUM: Så hvad er det 100 forskudt til højre tre gange?
CAMILLE REKHSON: 100 forskudt til højre,
så ville tage alle de 1 s og 0'er og bare flytte dem
til højre så mange gange som du det at skifte til højre.
>> PUBLIKUM: [uhørligt]?
CAMILLE REKHSON: Nå, 100-- er taler du om 100 i binær,
eller 100 i decimal?
PUBLIKUM: Jeg er ked af, 100 i binær.
>> CAMILLE REKHSON: 100 i binær, hvis du skifter den til den right--
hvis du skifter til højre én gang, ville det blive 10.
Hvis du skifter den til højre to gange, ville det blive 001.
Og derefter, hvis du skifter det igen, du slags miste bit.
Ja, det er bare 0.
Andre spørgsmål om dette?
Ja.
>> PUBLIKUM: Så bliver det 000.
>> CAMILLE REKHSON: Ja.
OK, så lad os gå gennem en lille smule af ASCII-matematik.
Så tegn kan hovedsagelig behandles som heltal
baseret på deres ASCII-værdier.
Så hvis vi sad int A er lig 65, int B lig A plus 1, int char C lig
D minus 1, og char D er lig med 68, hvad ville udskrive nederst?
>> Så vi udskriver these-- velsigne du-- vi er
udskrive dem alle ud som forkuller baseret på procent C.
Så vi dybest set udskrive tegnet værdien af ​​alle fire
af disse variabler.
Som et tip, 65 er ASCII-værdi kapitalens A. Måske hjalp.
Hvad?
>> PUBLIKUM: ABCD.
>> CAMILLE REKHSON: Ja, så dette ville udskrive præcis
ABCD fordi vi sat int A svarende til ASCII værdien af ​​A.
Så hvis vi udskriver det ud som en karakter, vi bare få kapital A,
En plus 1 ville være en kapital B i ASCII.
D minus 1 ville være en kapital C i ASCII.
Og 68 er ASCII-værdi af D. Spørgsmål om ASCII?
Ja.
>> PUBLIKUM: Så anførselstegn omkring A, gør denne ændring A til ASCII?
>> CAMILLE REKHSON: Det uses-- det count-- enkelte anførselstegn omkring A
gør det et tegn.
Og hvis du har at gøre med det i antallet form--
så når, som i dette tilfælde er det behandles som en int--
så ville det behandle med det er ASCII-værdi.
Ja.
>> PUBLIKUM: Har du anbefale, at vi har en ASCII henvisning bordet?
>> CAMILLE REKHSON: Jeg kan ikke tror--
>> PUBLIKUM: Eller ville det kun beskæftige sig med disse?
>> CAMILLE REKHSON: Jeg tror, ​​vi ville gøre det med nemme ting.
Jeg tror ikke, det ville ondt at skrive ned måske
hvad kapital A og små bogstaver A er, bare hvad disse intervaller startende med.
Men jeg tror ikke, du behøver at tage alle plads til at sætte en hel ASCII tabel.
Ja.
>> PUBLIKUM: Hvad er forskellen mellem sige int A og char C,
som du gør på toppen?
>> CAMILLE REKHSON: Så det er bare hvordan der er gemt i hukommelsen.
Men du kan behandle det enten måde.
Ligesom vi ser her, vi gør print ud A som et tegn.
PUBLIKUM: Så det er det samme som en?
CAMILLE REKHSON: Ja.
Andre spørgsmål?
>> PUBLIKUM: Så procent C siger udskrive en char?
>> CAMILLE REKHSON: Ja.
>> PUBLIKUM: Så selv om A har kun blevet defineret som et heltal,
hvis vi forsøger at udskrive en char som 65, det would--
CAMILLE REKHSON: Det ville gå til dybest set går til ASCII diagram
og får uanset tegn i ASCII diagram for at 65.
>> PUBLIKUM: Tak.
>> CAMILLE REKHSON: Ja.
Ja?
>> PUBLIKUM: Så hvis du gjorde% I,% I, % I,% Jeg, ville det bare print--
CAMILLE REKHSON: Ja, hvis du gjorde alt 4% Jeg er, det
ville udskrive ASCII værdier af alle fire af disse.
Andre spørgsmål?
OK, så rækkevidde, dybest set dette hjælper os med at afgøre, hvor
en variabel eksisterer i dit program.
Så vi har talt om to forskellige typer af omfang, globale og lokale.
>> Hvis en variabel globalt er virkefelt, det betyder hele dit program
har adgang til denne variabel.
Og hvis du globalt omfang en variabel, du
erklære den før din vigtigste funktion.
Så det er gjort ret off the bat.
Og så hele din program kan få adgang til det.
>> Hvis det er kun lokalt virkefelt, at variabel begrænset til en bestemt region.
Så hvis du erklærer i en for-løkke, kun, at for løkke kan få adgang til den.
Eller hvis du erklærer inden en bestemt funktion,
kun denne funktion kan få adgang til den.
Spørgsmål om omfanget.
>> OK, så funktionen prototyping.
Dybest set fordi C, når det samler, læser oppefra og ned.
Hvis du erklærer en funktion sent i din kode,
compileren ikke ved der eksisterer denne funktion.
Så hvad vi bruger, er prototyper, som dybest set fortælle compiler,
denne funktion findes, gå se for det senere i koden.
Så den måde, som du gør en funktion prototype
er præcis, hvordan du starter off skrive en funktion.
Du giver tilbagevenden type, navnet på den funktion,
og derefter nogen argumenter at denne funktion tager.
>> Så for at se på et hurtigt eksempel, i dette og små vores funktion, som vi bruger her
er dybest set en terning funktion.
Så tager i et heltal og returnering tredje potens af denne heltal.
Så fordi vi har skrevet, at funktionen nedenfor hovedfunktion,
og vi ønsker at bruge produktion af at-- eller vi
vil denne funktion i vores hovedfunktion,
vi sætter sin prototype måde på toppen af ​​vores program.
Og så når vi kalder det i vores hovedfunktion,
compileren ved, at denne funktion er skrevet senere, og vil gå kigge efter det,
og vil bruge det ordentligt.
Spørgsmål om prototyping?
Ja.
>> PUBLIKUM: Så hvad er pointen?
Jeg får ikke det punkt prototyper.
Hvorfor ikke bare have det dernede?
>> CAMILLE REKHSON: Tja, hvis det er hernede, så når
du kommer til linje terning xi din vigtigste funktion,
compileren vil ikke have nogen idé om, at terningen funktionen rent faktisk eksisterer.
>> PUBLIKUM: Kunne du ikke bare sætte det foran?
>> CAMILLE REKHSON: Det er bedre kodning praksis
at sætte det under din vigtigste funktion.
Så det er derfor, vi ville gøre prototyping.
Bare fordi, hvis du havde en masse funktioner,
det ville være virkelig rodet at læse alle disse funktioner
før du kommer til kød af dit program.
Ja, og du havde en q--
>> PUBLIKUM: Så er erklære din variabel op i toppen
så du kan få adgang til det, gøre det til en global variabel?
Er det ligner dette hvor det at erklære det
deroppe, så det ved, at det kommer til at få adgang til det senere
og du kan bruge det?
>> CAMILLE REKHSON: Ja.
Ja.
>> PUBLIKUM: Skal til-- yderligere funktioner du oprette nøglen udenfor
af denne ting, eller--
>> CAMILLE REKHSON: Ja, hvis du er skabe andre functions-- vigtigste
i sig selv er function-- så hvis du opretter andre funktioner,
de skal være uden.
Ja?
>> PUBLIKUM: Hvad er procent D?
CAMILLE REKHSON: Procent D er det samme som procent I.
Det refererer til et heltal.
Ja.
>> PUBLIKUM: Så hvad er int main gør?
Hvad var det tomrum?
CAMILLE REKHSON: Void siger det tager under ingen argumenter.
PUBLIKUM: [uhørligt].
CAMILLE REKHSON: Kan du taler lidt højere, undskyld?
PUBLIKUM: Ja, undskyld, hvorfor gjorde du lægger ugyldig for det første,
og derefter int input til den anden?
CAMILLE REKHSON: Åh, for de to different-- for de vigtigste funktion
versus terningen funktion?
Så i hovedfunktion, vi bruger ugyldig, fordi der
er nogen parametre bliver taget i.
Mens det i terningen funktion, har vi en indgang.
Det er derfor, det siger int, input, fordi der er argumenter, som vi er
tager i at køre vores funktion.
Ja.
Er der spørgsmål?
>> OK, og derefter hurtigt floating-point unøjagtighed.
Så vi har uendeligt mange reelle tal.
Men der er kun et endeligt antal bits
at vi kan bruge til at vise dem, numre, og repræsentere dem.
Så vi ender med nogle upræcise.
Og dine tal vil ikke altid være helt præcis, hvad
du tror, ​​de er, når du er beskæftiger sig med floating-point.
Det er bare noget godt at vide.
Spørgsmål til dette?
Ja.
>> PUBLIKUM: Er det at henvise til ideen om bit overløb
der var i foredraget?
Var det noget adskilt?
>> CAMILLE REKHSON: De er helt adskilt, ja.
OK, stor.
Pulak Goyal: Hej, alle.
Mit navn er Pulak, og jeg vil være at gå over pointere.
OK, så lad os først tænker om, hvad hukommelse ser ud.
Så som du kan se her, vi tage hukommelse, og vi deler det op
ind i en flok af blokke.
Og vi referere hver blokere af en adresse, ikke?
Og er der nogen huske, hvad type notation vi bruger til at betegne en adresse?
>> PUBLIKUM: Hexadecimal, 0X.
>> Pulak Goyal: Hexadecimal, ikke?
Så 0X betyder, at vi er taler om hexadecimal.
OK, så hvordan gør vi skaber pointers?
Så vi tager den type, vi sætte det-- tilføje en stjerne til det,
og så tilføjer vi variabelnavnet.
Så de eksempler, vi har set er int stjerne x, char stjerne y og flyde begynder z.
Så når jeg siger int stjerne x, kan nogen fortælle mig
hvad jeg slags taler om der?
>> PUBLIKUM: Placeringen af ​​disken.
>> Pulak Goyal: Beklager, hvad?
Kan du gentage det?
PUBLIKUM: Placeringen af ​​disken.
>> Pulak Goyal: Så actually-- så hvad Jeg mente, er, når vi har int stjerne x,
vi siger er at skabe en pointer, og det
kan gemme adressen på en variabel, der er en int, ikke?
Så med char stjerne y, Vi er ved at oprette en pegepind
der kan gemme adressen af en variabel, der er en char.
Så det giver mening for alle?
OK, køligt
>> OK, så med pointere, der er to vigtige operationer, vi kan gøre.
Der er henvisninger, og der har dereferere.
Ja?
>> PUBLIKUM: Kunne du går en lille smule langsommere?
>> Pulak Goyal: Selvfølgelig.
Ja, so-- Ja, stille spørgsmål, som jeg går sammen hvis du-- hvis noget er uklart.
Så vi har henvisninger og dereferere.
Så når du ønsker at få adressen af en variabel, derefter bruge tegnet.
Så lad os sige, at jeg erklærede int x et eller andet sted.
Og jeg ønsker at få adressen på det og videregive det i, jeg ville gøre tegnet x.
Og når du ønsker at få den værdi tilknyttet en pegepind,
du bruger dereference operatør, der er en stjerne.
>> Så lad os sige, jeg havde int stjerne x, og Jeg havde det peger på noget.
Hvis jeg ønsker at få værdien af, hvad det er peger på, ville jeg bare gøre stjerne x.
Er det klart?
Eventuelle spørgsmål om det?
Ja.
>> PUBLIKUM: Så generelt, du vil ikke være i stand til at gøre ved x og stjerne
x med samme x.
Er det korrekt?
For hvis x er et variabel, så har du
at gøre på x for at få, at det er en pointer.
Men hvis x er en pointer, så er du nødt at gøre stjerne x for at få variablen.
>> Pulak Goyal: Ja, så det Spørgsmålet var om, hvornår
bruger vi en star-- når ville du bruge stjernen,
og når vi bruger tegnet, og kan vi
bruge det med den samme type variabel?
Så normalt hvis du har, for eksempel en int x,
du vil for det meste skal bruge tegnet for at få adressen på det.
Fordi det gør ikke mening at ærbødighed ind på x.
Henviser til, at hvis vi havde int stjerne x, du ville bruge dereference drift
fordi det ville give nogen mening til brug ved x i denne sag.
Betyder det giver mening?
>> PUBLIKUM: Så du kan ikke og og derefter en pointer?
Pulak Goyal: Så du teknisk, faktisk
kan gøre tegnet af en pegepind.
Men det er ude af anvendelsesområdet for denne klasse.
For purpose-- til dine gutter ' formål, når du har pejlemærker,
du ønsker at bruge dereference operatøren at få værdien forbundet med det.
Og når du har regelmæssig variabler, som en int x,
du ønsker at bruge tegnet operatøren for at få adressen på det.
OKAY?
>> OK, så lad os se på pegepinde og hvad der sker under kølerhjelmen.
Så det første jeg gjorde her er den angivne int x er lig med 5.
Adressen på denne variabel er 0x04, og værdien er 5.
Så lad os se hvad der sker med den næste linje.
Så nu er vi erklære en pointer.
Dens adresse er 0x08, og dens værdi er adressen på x.
Giver det mening for alle?
Eventuelle spørgsmål om det?
>> OK, og lad os nu se, hvad sker med den næste linje.
Så med dette næste linje, vi har adressen på kopien være 0x10,
og dens værdi er 5.
Så årsagen til at vi fik fem er vi sagde, vi dereference
pointer, som vi erklærede en int stjerne.
Og så det went-- når vi dereference det, det sagde, OK, hvad der er i slidsen 0x04.
Og det gik til det.
Og hvad x er et x0-- 0x04, og værdien er 5.
Giver det mening?
Ja?
>> PUBLIKUM: Hvorfor er kopien adresse kun 4 bytes over x pointer?
>> Pulak Goyal: Ja, det er en fejl on--
>> CAMILLE REKHSON: Så, ja, husk dette er skrevet i hexadecimal.
Pulak Goyal: Oh, yeah.
CAMILLE REKHSON: Så det er faktisk 8 og derefter 16
fordi vi er sagt, markøren, huske,
i vores IDE bliver 8 byte lang.
Pulak Goyal: Ja.
Så bare for at være klar, pointere er 8 byte.
En int er 4 byte.
Så grunden, hvad sprang fra 0x04 til 0x08
er, fordi vi var nødt til at gøre et spring på 8 bytes.
Og så for-- siden kopi er blot en int,
det er 4 bytes, hvilket er halvdelen af ​​8 bytes.
Så vi bare springe til 0x10, hvilket er to væk fra 0x08.
Andre spørgsmål?
OK, let's-- ja?
>> PUBLIKUM: Hvorfor er der ikke værdien af ​​int kopi
bare til-- hvorfor er det 5 i stedet for 0x04?
>> Pulak Goyal: OK, hvorfor er det 5?
OK, så når til-- så lad os først tænke over dette i form af typer.
Så jeg siger int kopi er lig med pointer stjerne.
Så hvad er den type pointer?
Det er en int stjerne.
Og når jeg dereference det, typen bliver en int.
Så det, vi forventer at gemme her er faktisk en int.
Giver det mening?
PUBLIKUM: Sure, lille smule.
Pulak Goyal: Så normalt når du tænker i typer,
det hjælper dig med at forstå, hvad der er den type den værdi, der skal derned.
Så du kan som regel udelukke en masse af disse almindelige fejl
ved at tænke i form af typer.
Lad mig gå igennem lidt flere dias.
Og vi kan få spørgsmål på enden af ​​markøren sektion.
OK, så vi har en fejlbehæftet program her.
Og det gør anyone-- kan nogen fortælle mig, hvad er der galt med dette program?
Ret, så hvad vi er forventer at gøre her
is-- hvad vi ønsker at gøre er at tage den variable int x
og drej det-- gør det lige 5 i stedet for 3, og derefter udskrive det.
Men det er ikke sker.
Kan nogen fortælle mig hvorfor?
Ja?
>> PUBLIKUM: Når funktionen to_five tager x som det er argumentet,
det tager ikke x sig selv, men stedet opretter en kopi, a, af det.
Og det danner operationer på det.
Men på grund af det, du ikke ændre den faktiske værdi af x.
Da du er [uhørligt].
>> Pulak Goyal: Right, højre, så når vi kalder
funktionen to_five, hvad vi laver tænker,
give mig en kopi af værdi som funktion.
Denne funktion, så vil og laver nogle manipulationer.
Men når det vender tilbage, er det nu ud af omfanget af den vigtigste funktion her.
Og så x er stadig i virkeligheden, lig med 3, og vi udskriver 3.
OK, så lad os se, hvordan det sker.
>> OK, så der er ikke noget erklæret.
Derefter her, x er lig med 3.
Og nu er det is-- ved position to, en er stadig ikke i omfang.
Og nu går vi til position tre, hvor en nu antager en værdi af 3.
Hos fire, vi nu ændre en til 5.
Men nu, da vi hopper tilbage til fem, som er print redegørelse,
a er nu ude af rækkevidde.
Og x er stadig lig med 3.
Betyder det mening at alle?
OK, så lad os nu tale om, hvordan vi kan bruge pegepinde til at løse dette.
Er der nogen der har nogen ideer, hvordan vi kunne løse dette ved hjælp pointers?
>> PUBLIKUM: Du tager på en int stjerne i stedet for en int til to_five.
>> Pulak Goyal: Beklager, kunne du sige op?
>> PUBLIKUM: Du tager på en int stjerne i stedet for en int til to_five.
Pulak Goyal: OK, ja.
Så lad os pass-- stedet for passerer bare værdien, lad os give det som reference.
Denne nye funktion, ikke?
Og så ved at lede adressen i, vi kan gøre manipulationer på adressen.
Og så er vi faktisk, faktisk ændrer x.
Så lad os se, hvordan det fungerer.
>> OK, så i dette eksempel vi fast det.
Vi har ændret vores underskrift af to_five at tage i en int
stjerne i stedet for bare en int her.
Så vi dereference dette a og tildele 5 til det.
Og nu er denne vilje, i virkeligheden, udskrive 5.
Så lad os se, hvordan de trin arbejde her.
>> Så med det første skridt, der er ikke noget erklæret endnu.
Så her, med det andet trin, Vi har sagt x er lig med 3,
men en er stadig uden for rækkevidde.
Nu ved den tredje linje, vi har x er stadig lig med tre.
Og nu har vi passeret in--, hvad der er opbevares i en nu adressen på x.
Giver det mening at alle, hvordan vi fik det?
Ret, har vi den amper-- det er sådan Vi passerede en tegnet x til funktionen
to_five.
Og så til den næste linje, hvad vi gør, er vi dereference en.
>> Og ved dereferere en, vi er i stand at ændre værdien af ​​x 3-5.
Fordi x bor på denne adresse 0x12.
Og så, endelig, når vi vende tilbage til main,
Selv om dette er en nu ude af omfang, vi har, i virkeligheden, skiftede x.
Og det er 5.
Eventuelle spørgsmål til denne?
Ja?
>> PUBLIKUM: Kan du fortælle mig hvad tegnet x var?
Jeg troede tegnet var ligesom OG.
>> Pulak Goyal: Ja, så vi bruger den samme symbol for mange forskellige ting.
Så her, når du have-- i dette tilfælde, når du har,
Jeg guess-- så i dette tilfælde, når du har at gøre med pointere,
når du sætter tegnet foran af en int, en variabel int eller en char,
eller et flow, hvad du siger er, giv mig adressen på dette.
Men hvad du tænker på, når ellers du ville bruge tegnet er, lad os sige,
i en if-sætning.
Du har en ægte, og nogle variabler at evaluere til nogle Boolean,
og nogle andre variabler at validere nogle Boolean
og du ønsker at få den, og af det.
Så du ville bruge tegnet.
SPEAKER 1: Ja, så bare i dag, vi har talte om tre forskellige anvendelser
af tegnet.
Vi har to-tegn, som er hvad Pulak har netop beskrevet.
Vi har en ét-tegn, som er det beskrevet Camille
tidligere, hvilket er en tegnet.
Og det er til bitvise OG.
Og læg mærke til, at både betinget og-- eller, undskyld,
den logiske AND og den bitvise OG, har disse to tal, ikke?
Det var noget Ampersand tegnet noget,
noget tegnet noget.
Her, hvor vi bare har tegnet noget, der er dereferere.
>> Pulak Goyal: Ja, godt spørgsmål.
Ja.
>> PUBLIKUM: Hvorfor i tråd 5a og stjerne en bliver N / A?
Hvorfor gør de ikke bare slags bevarer samme værdier fra den tidligere linje?
>> Pulak Goyal: Fordi vi har forladt funktion.
Og hvad så happens-- så hvad-- nu er vi
ud af rækkevidden af ​​denne funktion, hvad der sker faktisk
er der fjernes fra hukommelsen.
Ja.
>> PUBLIKUM: Mellem 3 eller 4 stjernet en lig 5.
Pulak Goyal: Ja.
PUBLIKUM: Hvad betyder det præcist betegne?
Pulak Goyal: Hvad betyder det?
Publikum: Ja.
Pulak Goyal: Så Spørgsmålet var, hvad der er
at-- hvad laver du online når vi siger, stjerne er lig med 5?
Så husk stjernen den dereference operatør.
Så når en, i dette tilfælde er en pointer.
Det er en int stjerne.
Så når vi dereference en af ved hjælp af stjerne, hvad vi siger
er, gå til det, der er lagret på adresse, lagres i en-- så take-- så en,
lige nu, har nogle adresse er lagret i den.
Gå til hvor denne adresse peger på, og nu ændre hvad det så er til fem.
Ja.
>> PUBLIKUM: Kan du sige det mere enkelt?
Ændre adressen på en til 5.
>> Pulak Goyal: Vi er ikke ændre adressen på en til 5.
A har nogle adresse i det, som er adresse af den variable af interesse.
Og så hvad vi siger når vi dereference er,
nu vil vi change-- vi nu refererer
variablen interesse direkte.
Betyder det giver mening?
>> SPEAKER 1: En anden måde at tænke af det go-- så en er en adresse.
Stjernen siger gå til den pågældende behandle og se på dens værdi.
Og nu sætte værdien til 5.
Så det siger, skal du gå til adresse x, som
vil være, hvad der er gemt i en, og ændre det til 5.
Pulak Goyal: Ja?
PUBLIKUM: Så stillingen er, hvor markøren går, adressen.
Men værdien er en tildelt værdi baseret på adressen.
Pulak Goyal: Ja.
Andre spørgsmål om dette?
PUBLIKUM: Jeg har et spørgsmål.
Pulak Goyal: Ja, undskyld.
PUBLIKUM: Så når du store-- så Hvis du siger [uhørlig] a.
Pulak Goyal: Ja.
PUBLIKUM: Har du nødt til at Opbevar x med et og-tegn?
Hvorfor kan du ikke bare sige x før din int [uhørligt]?
Pulak Goyal: So--
PUBLIKUM: [uhørligt].
Pulak Goyal: Så er din question-- åh.
Så dit spørgsmål er, hvorfor kan ikke we-- til funktionen to_five, kan hvorfor ikke vi
bare bestå en x, right?
>> PUBLIKUM: Right.
>> Pulak Goyal: OK, ja, så dette igen går tilbage til vores diskussion om typer.
Så funktionen to_five nu forventer en type int stjerne.
Så hvad er den type x?
X er blot en int.
Men hvad denne funktion forventer er en int stjerne.
Så det forventer en variabel, har en adresse er lagret i den.
Så det er sådan du-- sætte tegnet, og så det er
hvordan vi passere i adresse, som er nu--
og der fortolker, at som en int stjerne, ja.
Store spørgsmål.
Andre spørgsmål om dette?
OK, cool.
>> OK, så lad os nu snakke om pointer aritmetik.
Så her, tilføje og fratrække Jeg justerer markøren
ved I gange større avanceret pointer bytes.
Så lad os se på, hvordan det ser ud.
Så her har vi erklæret int x er lig med en 5.
Og nu vil vi til at erklære en pointer y, og videregive adressen x der.
Så vi har det.
SOx opbevares ved 0x04.
Så nu y er lig med den.
Og kan nogen fortælle mig, hvad de mener vil ske, når vi gør y plus lig med 1?
Ja?
>> PUBLIKUM: Vil det ændre til 0 gange 0 8?
>> Pulak Goyal: Størrelse, og Motortype-
>> PUBLIKUM: Du flytter adresse.
Pulak Goyal: Ja det was-- ja.
So-- højre.
Så det vil skifte til 0x08.
Og because-- så du ville bruge denne formel 1 gange størrelsen af ​​markøren
og pejlemærker er af size--
>> [STUDERENDE mumlen]
>> Pulak Goyal: Right.
>> [STUDERENDE mumlen]
>> SPEAKER 1: Så den type, markøren punkter at--
>> Pulak Goyal: Er, yeah, Ja, det er 4 byte.
>> SPEAKER 1: Så ints er 4 byte.
>> Pulak Goyal: Så hvis vi en-- havde lad os siger vi erklærede, jeg gætte, en char.
Hvad ville der at-- så lad os sige, at vi har char x svarende til en eller noget.
Og vi havde adressen på, at der på 0x04, hvad ville y plus lig med 1 gøre nu?
Undskyld hvad?
>> PUBLIKUM: 0x05.
Pulak Goyal: 0x05, højre.
Er alle se det?
OK, og lad os nu sige, det er en float.
Hvad ville der ske?
Nogen?
Så flåd er, hvor mange bytes?
>> PUBLIKUM: 4 byte.
>> Pulak Goyal: Right.
Så det ville være det samme som dette.
Afkøle.
OK, og nu lad os tale om pointere og arrays.
Så du så dette på to foregående p-apparater,
hvor vi kan treat-- så arrays og pointere er ikke det samme.
Men vi kan behandle arrays som pejlemærker.
Så her har vi dette array her, som har tre pladser.
I den første slot-- vi har en, to og tre.
>> Så hvis we-- så vi kan tildele at ved at sige, vi har array,
dereference det.
Og så når vi dereference at, hvad vi rent faktisk gør
refererer til samme slot.
Så stjerne matrix er lig med 1.
Vi could- hvordan kunne vi skriver at--, hvad der er
en alternativ måde, vi kunne skrive det?
>> PUBLIKUM: Array 0 lig med 1.
>> Pulak Goyal: Præcis, gør alle se det?
Så samme med her.
Så når vi har vifte plus 1, vi do-- så even--
Husk med aritmetiske, at vi lige talt om, når vi gør plus 1
eller flytte den over ved 4 byte, til højre.
Er alle se det?
Og den side, når vi dereference det, kan vi sætte det til 2.
Og det er, hvordan vi sætter den næste blok til 2.
Og så en alternativ måde at skrive det ville også være vifte beslag
0 beslag er lig med 1.
>> PUBLIKUM: Har du brug for parenteserne?
>> Pulak Goyal: Ja, fordi du er dereferere hele mængden
matrix plus 1.
OK, og samme ting for matrix plus 2.
Eventuelle spørgsmål til denne?
Ja.
PUBLIKUM: Så array er indstilles automatisk ved 0?
>> Pulak Goyal: Array is-- ked af det, hvad?
>> PUBLIKUM: Array er 0.
Adressen på array er blot 0.
>> Pulak Goyal: Så spørgsmålet var, er adressen på matrix bare 0?
Så nej, matrix har nogle adresse.
Så når vi dereference det, that's-- så du kan tænke om--
bogstaveligt talt som en pegepind, der peger til begyndelsen af ​​et array.
Så der har nogle adresse.
Vi ved ikke, hvad det er.
Men når vi dereference det, vi kender det er begyndelsen af ​​grupperingen.
Og så når vi bevæger os fra 1, vi bare flytter
i forhold til, hvor denne adresse var.
Andre spørgsmål?
Ja?
>> PUBLIKUM: Så hvis du gør vifte beslag plus 1--
Pulak Goyal: Beklager, Jeg-- kan du sige op?
PUBLIKUM: Ja, hvis du gør vifte beslag [uhørligt].
Så hvis du sætter pointer--
Pulak Goyal: Beklager, jeg kan ikke høre dig.
Kan du sige det en gang til?
>> PUBLIKUM: Du er OK.
>> Pulak Goyal: OK, undskyld.
OK, cool.
Any-- ja.
Så når du går i vifte beslag 3--
>> Pulak Goyal: Ja.
>> PUBLIKUM: --isn't there-- ville ikke det være fire steder som 0, 1, 2, og 3?
Hvorfor er det ikke int vifte 2?
>> Pulak Goyal: Nej, så bare konventionen C is--, når vi erklærer array,
we-- nummeret vi sætter der er, hvor mange slots, vi ønsker.
Men indeksene i array er faktisk matrix 0, 1 matrix og matrix 2.
Så det er bare konventionen om, hvordan vi erklære arrays.
Ja, alle andre spørgsmål?
Ja.
PUBLIKUM: Så vi er stadig taler om pointere, ikke?
Pulak Goyal: Ja.
PUBLIKUM: Kan du stadig gøre stjerne for opstilling 0 er lig med 1?
Pulak Goyal: Nej, nej, so-- OK, så spørgsmålet var kunne
du bare gøre stjerne vifte beslag nul, og så sige, at lig med 1.
Så nej, hvad vi siger her er, at vi kan tror--
Vi kan behandle arrays som pejlemærker.
Så vi have-- hvad vi er siger, er at vi har to måder
nu referere til den samme blok.
Så doing-- hvis du har vifte nul, den type, der nu er en int.
Og hvis du tager den stjerne, der, du får en ugyldig ting.
Så hvad vi siger her, er Der er to alternative måder
at henvise til den samme blok.
Du kan enten gøre vifte beslag 0 er lig med 1.
Eller du kan gøre dereference array, og har denne lig med 0.
Så bare to måder gøre det samme.
Ja.
>> PUBLIKUM: Hvorfor er det ikke størrelsen af ​​int 1 for at tilføje at--
>> Pulak Goyal: Størrelse af int 1.
>> PUBLIKUM: Fordi det er at flytte en off.
>> Pulak Goyal: Fordi det er bare den måde C fungerer.
Det er bare den måde pointer aritmetiske defineres.
Det vil tage markøren.
Og så uanset hvad du tilføje til det, vil det mangedoble at
af størrelsen af ​​enhver markøren butik er, ja.
Ja.
>> PUBLIKUM: Så du siger, at vi kan behandle pointere og arrays den samme,
men at de er forskellige.
Så hvad gør dem anderledes?
Hvad kan vi ikke gøre med én, men ikke den anden?
>> Pulak Goyal: Med henblik på dette klasse, jeg tror it's-- hvad gør du--
>> SPEAKER 1: Så we-- OK, så, for eksempel, hvis du allokere hukommelse
og du har en pointer til et helt tal, f.eks.
Hvis du har forsøgt at starte gør pointer aritmetik
og gå ud over den mængde hukommelse, der du tildelt, ville du løbe ind i fejl.
Vi ved med arrays, vi sige før tid, OK, jeg
vil allocate-- dette væsentlige siger, jeg ønsker at tildele
nok plads til tre heltal.
Og så nu kan vi behandler hukommelse, som om vi har alle tre af disse tal.
Er den slags mening?
>> Pulak Goyal: Ja.
Ja.
>> PUBLIKUM: Så en stjerne array, er, at tildele 1
til 0 indeks array?
Pulak Goyal: Ja.
>> PUBLIKUM: Så hvad er efter næste to linjer i form af til-- I
forstå, at du prøver at bruge pointer aritmetiske her,
men igen, jeg ikke forstår hvad pointer aritmetik er.
Så array plus 1, er du at sige, at du er nu
lyst til at tale om den første indeks i array.
>> Pulak Goyal: Right, og så Grunden der virker, er array,
her, kan vi tænke på som en int stjerne.
Og så når vi pointer aritmetik på det, husker formlen hvor
vi tager til-- jeg gætte, hvad den aktuelle adresse er,
og derefter når vi tilføjer 1 til det, vi faktisk
formere 1 af størrelsen af de ting, vi manipulere.
Så i dette tilfælde er størrelsen af ​​en int.
Og så har vi flytte det sende denne meget.
>> SPEAKER 1: Så foregive du har b-array stjerne.
Pulak Goyal: OK, ja.
SPEAKER 1: Med din hånd.
Gå her.
Pulak Goyal: Eller jeg kan bare-- ja.
Så her-- OK, så matrix på begynder, er bare lige her.
Så når vi dereference array, var vi lige henvisning til den første blok her.
Men nu når jeg gør matrix plus 1, at is-- at pilen nu er lige her.
Betyder det giver mening?
Ret, fordi denne blok er størrelse int, som er 4 bytes.
Og så, hvad vi laver, er vi er flytte, at pointer med 4 byte derover.
Når vi regne på det, vil det altid
flytte det i trin på 4 byte.
Fordi dette er ligesom en int stjerne.
Giver det mening?
OKAY.
>> PUBLIKUM: Så de ting i array var 5 bytes, ville vi flytte den 5 bytes--
>> Pulak Goyal: Right, så hvis vi havde en char stjerne, ville vi flytte det ved kun 1 byte.
Så i tilfælde af char stjerner, det ville bare være at flytte den over med 1.
PUBLIKUM: For at få den næste du bruge en stjerne.
Pulak Goyal: Ja, ja, gør det giver mening?
SPEAKER 1: Vi kan chatte om det mere senere.
Pulak Goyal: Ja, ja, helt sikkert.
OK, cool.
Lad os gå videre til næste afsnit.
SPEAKER 1: Åh, OK cool.
Ja, det er mig.
Okay, awesome.
OK, cool, så nu er vi på en lille smule mere generelle oplysninger om hukommelse.
Også, jeg sætter pris på det faktum, at de var på vej temmelig hurtigt.
Det er en masse materiale til at få igennem en time og en halv.
Men hvis der er nogen emner, du ønsker at gå mere i dybden i,
vi kommer til at have kontortid denne uge
hvor du kan chatte med os en på én.
Eller du kan bare komme op på den ende og vi vil snakke om ting.
Og som altid, føler fri til at stille spørgsmål.
Awesome.
Så her er vores billede af hukommelse, vi har set i forelæsning en milliard gange.
Og vi ved, at denne stak vokser op fra bunden
og den bunke vokser ned.
Og hvad er forskellen mellem ting at vi holder på bunke og ting
at vi holder på stakken?
Nogen smide noget derude.
Ja.
>> PUBLIKUM: Er det stable for ting, der er lige
impermanent variabler, som vi er bare erklære hjælp af bestemte funktioner?
SPEAKER 1: Smuk, ja.
Så enhver tid, hvor, lad os siger vi er i en funktion,
og vi bare have nogle lokale variabler.
De kommer til at ende på stakken.
Hvis der i stedet, vi kalder malloc og faktisk allokere hukommelse,
der altid kommer fra den bunke.
Så, ja Cool?
>> Og så husk, at enhver hukommelse at du allokerer bruge malloc,
der kommer til at ende op på bunke.
Og hvis du glemmer at gratis det, computerens
ikke kommer til at vide, at du er færdig med det.
Så det er bare at gå til hænge derude i hukommelsen.
Og du er hovedsagelig lækker at hukommelsen.
Du mister den.
Fordi du aldrig fortalt computeren, hey jeg færdig med at bruge det, er du velkommen til at bruge,
sætte andre ting der.
Afkøle.
Eventuelle spørgsmål der?
Ja.
>> PUBLIKUM: Så hvad slags hukommelse er stakken?
Ikke dynamisk foder, delegeret?
Hvad ville du kalde det?
>> SPEAKER 1: Sure, så du kunne tænke på det som lokale variable.
Faktiske opkald til funktioner kommer til at stable op.
Ellers andet?
Ja?
PUBLIKUM: Hvordan har du fri den hukommelse, du har tilføjet til--
SPEAKER 1: Sure, så når du allokere hukommelse på bunke, ringe til dig malloc.
Og så så, der giver dig tilbage en pointer til nogle adresse i hukommelsen.
Så siger du kaldte denne pointer, ikke?
Derefter skal du bare sige fri pointer.
Og der frigør hukommelsen.
Afkøle.
Andre spørgsmål?
Ja.
>> PUBLIKUM: Hvad betyder dynamisk tildelt betyde?
>> SPEAKER 1: Dynamisk tildelt betyder, i løbet af dit program.
Så når du kalder malloc i midten af ​​dit program,
ved begyndelsen af ​​programmet, der er ingen hukommelse allokeret.
Og da computeren gå gennem denne kode,
det kommer til at allokere hukommelsen.
Så det er hvad vi mener med dynamisk.
Godt spørgsmål.
Ja?
PUBLIKUM: Når du definerer en array med de firkantede parenteser,
gør det stadig [uhørligt]?
SPEAKER 1: Det er et godt spørgsmål.
Jeg tror, ​​når du allokere et array, det faktisk placerer det på stakken.
Jeg er ikke positivt om det, så du ikke citere mig.
>> SPEAKER 2: Jeg tror det-- ja det sætter det på stakken.
>> SPEAKER 1: Sætter det på stakken.
OK, cool, bekræftet.
Andre spørgsmål?
Ja?
>> PUBLIKUM: Når du uddelegere malloc, ikke den automatisk computeren
allokere hukommelse til dine variabler?
SPEAKER 1: Ja, for din lokale variabler,
det automatisk sætter hukommelse på stakken.
PUBLIKUM: Så hvad er Pointen ved at bruge malloc?
SPEAKER 1: Hvad er det Pointen ved at bruge malloc?
Så vi så en flok af eksempler, lignende, for eksempel ved anvendelse swap,
hvor vi ønsker omfanget af variablen at være noget
ud over blot dens funktion opkald.
Og vi vil have noget at vi kan passere omkring
og at vi kan få adgang til fra forskellige steder.
Det er der vi gerne vil sætte hukommelse på bunke.
Således at alle disse forskellige funktioner kan få adgang til det.
>> PUBLIKUM: Kan du lige forklare det?
>> SPEAKER 1: Så en mulighed is-- så Spørgsmålet var, kan vi bare allocate--
undskyld, kan vi erklære en global variabel, i det væsentlige.
Det er en mulighed.
Men med en masse af dem, der en tendens til at få virkelig rodet.
Og vi generelt tror af, at så dårligt design.
Ja.
Cool, alle andre spørgsmål?
Awesome.
OK, vi går videre.
Så det er faktisk hvordan vi allokere hukommelse.
Vi talte om det en lille smule.
Vi bruger denne funktion kaldet malloc.
Og du fortæller det, hvor mange bytes i hukommelse, så hvor mange bytes på bunke,
du vil have.
Og det kommer til at returnere adressen, så en pegepind til et stykke hukommelse
at det er afsat til dig.
Så den type vil være ugyldig stjerne.
Det kommer til at være en pegepind til uanset hvad du beslutter at sætte i der.
Hver gang du kalder malloc, vi allerede sagt
du nødt til at frigøre det, så vi har ikke memory leaks.
>> Hvad er den anden ting at du absolut
nødt til at gøre hver eneste gang du kalder malloc?
OK, er du nødt til at frigøre det.
Hvad er den anden ting?
Check for null, smukke.
Så, ja, det er rigtigt der op på tavlen.
Hvis du vil forsøge at afsætte hukommelse, og du har ingen hukommelse tilbage,
computeren vil sige, Jeg har intet at give dig.
Og det giver dig tilbage null.
Spørgsmål om det?
Ja.
>> PUBLIKUM: Hvorfor ville du nogensinde vil erklære en pointer med en specifik type
når ugyldig stjerne kan håndtere alle pointer typer anyways?
SPEAKER 1: Godt spørgsmål.
Hvorfor skulle vi sige int stjerne i modsætning til at annullere stjerne
når tomrum stjerne kan klare alt?
Så vi ønsker ikke at nogensinde udtrykkeligt kastet pointere.
Det er bare dårlig praksis.
Men vi vil tale om int stjerner ligesom en forståelse af,
dette er en pegepind til et heltal.
>> PUBLIKUM: OK.
>> SPEAKER 1: Ja, og det giver mulighed for at manipulere værdierne i det
som heltal.
>> PUBLIKUM: Åh, OK.
Og ugyldig stjerne ville ikke lade dig gøre det?
>> SPEAKER 1: Det afhænger af kontekst Yeah, så du skal ikke bekymre dig
du ikke bekymre dig for meget om den type der.
Bare vide, at i almindelighed malloc returnerer en pointer til noget.
Godt spørgsmål.
>> PUBLIKUM: Hvorfor formere det gange 10? [Uhørligt].
>> SPEAKER 1: Sure, så jeg var bare gør tilfældige eksempel her, hvor
Jeg ønskede at afsætte nok plads til at lagre 10 heltal.
Bare et tilfældigt valg.
Ja.
Ja, hvad sker der?
>> PUBLIKUM: Hvad gør du mener med kontrol for null?
Har du lyst til at kontrollere pointer til null eller malloc?
SPEAKER 1: Ja, præcis.
Så var spørgsmålet, hvad mener vi med skak af null?
Vi ønsker at-- når som helst vi kalder malloc og vi er vendt tilbage en pegepind,
vi ønsker at sige, er pointer svarende til null?
Så bogstaveligt PTR.
Er PTR svarende til null.
Ja.
PUBLIKUM: Så jeg var venlig af undrende, hvis du
initialisere markøren i malloc, gør det peger på begyndelsen af ​​malloc?
For hvis det er en array--
SPEAKER 1: Det er et godt spørgsmål.
Ja, hvis du ringer malloc, den pointer, som det-- lad os sige,
så her vi afsætte 10 bytes af hukommelse.
Så jeg er ked af, nok plads til 10 heltal,
vi kommer til at få adressen på den første stykke af hukommelsen.
Det er et godt spørgsmål.
Ja.
>> PUBLIKUM: Ved at tildele 10 udbredte heltal,
kunne du faktisk bruge det pointer som like-- næsten
som en matrix af tal?
SPEAKER 1: Ja, så kan du bruge det som et array af heltal?
Ja, netop, det er hvad Pulak bare viste dig on-- et par glider siden,
hvor vi siger, OK, det er virkelig lige slags of-- vi
kan tænke på det som en array af 10 heltal.
Det sker bare for at være på den bunke.
PUBLIKUM: Men du ikke kunne få adgang til det med firkantede beslag notation?
SPEAKER 1: Du faktisk kunne få adgang til det med firkantede beslag notation, ja.
Du kan behandle dem ens.
Ja.
>> PUBLIKUM: Hvorfor skulle Pointer nogensinde blive nul?
>> SPEAKER 1: Hvorfor skulle Pointer nogensinde blive nul?
Hvis du vil bruge op alle hukommelsen på din bunke.
Hvis dit program er at spise op, spise op, spise op hukommelse,
og der er intet venstre, derefter malloc kommer til at say-- hvis du siger,
Jeg vil have 100 flere bytes, går det at sige, jeg ikke har 100 bytes.
Her er null.
Det betyder, jeg fejlede.
Ja.
>> PUBLIKUM: I det tilfælde, null er intet, ikke?
>> SPEAKER 1: Ja, i det tilfælde, null intet.
Du har ingen adresse.
Der er ingen hukommelse.
Okay, vi går videre.
OK, lad os tale virkelig hurtigt om buffer overflow.
Hvornår kan vi støder buffer overflow?
Lad os sige, at vi har en-- vi allokere en luns af hukommelse,
og vi kommer til at skrive strengen i.
Og vi kommer til at sige, OK, jeg har tænkt mig at tildele
nok plads til seks tegn.
Og jeg har tænkt mig at spørge brugeren for nogle input.
Og brugeren input, for eksempel, hej.
Og det passer perfekt fint, fordi vi har
plads til alle tegn i goddag, og null afsluttende karakter.
Masser af plads, ikke noget problem.
>> Men hvad nu hvis vi giver mulighed for en ond bruger til at bruge vores program,
og de skriver i ikke seks tegn, eller ikke fem tegn, men en million.
De holder skrive, og skrive, og skrive, hvad der kommer til at ske?
Godt vi kun give computer enough-- eller ked af det,
vi kun gav denne streng plads til 5 tegn.
Så vi kommer til at få noget som dette, hvor den onde person, der er
skrive i indgang kan overskrive størrelsen af ​​bufferen,
og kan gå faktisk forbi mængden at det oprindeligt er tildelt.
Og så hvad du kan gøre, det virkelig ondt ting du kan gøre,
er overskrive den returadresse.
Som dybest set betyder du kan slags tage
styring af adfærd af programmet.
Så på et meget højt niveau buffer overflow er, når
du afsætte en vis mængde af hukommelse.
Og så du-- dette, fordi du er tager brugerinput eller noget
ligesom at-- du går over grænserne af, hvad du oprindeligt har tildelt
og begynde at rode op dit program.
Ja?
>> PUBLIKUM: Hvorfor skulle det ikke bare returnere en segmentering fejl?
>> SPEAKER 1: Hvorfor skulle det ikke returnere en segmentering fejl?
Det kunne.
Undertiden compiler eller under en af ​​din runtime
er faktisk kommer til at kontrollere, at.
Hvis visse ting sker, og dette er slags lavere niveau,
så er du nødt til at vide.
Men hvis du ikke designe disse systemer korrekt,
så har du chancen af ikke at fange det og bare
lade computeren take-- den onde person til at styre computeren.
Ja.
>> PUBLIKUM: [uhørligt]?
SPEAKER 1: Sure.
Åh, når jeg siger buffer, jeg bare betyde mængde hukommelse, som du har tildelt.
Så her sagde jeg, åh, vi har afsat seks char-- nok plads til seks tegn.
Og jeg bare kalde, at min buffer hvor jeg kunne skrive oplysninger.
Ja.
Andre spørgsmål om dette?
Ja.
>> PUBLIKUM: Hvordan stoppe det?
Hvordan du stopper den?
SPEAKER 1: Awesome spørgsmål.
Hvordan du stopper den?
Hvordan forhindrer man buffer overflow?
Nå én måde at gøre det er noget lignende GetString, hvor vi hele tiden stige
den mængde hukommelse, som vi afsætter hvis brugeren indtaster en masse tekst.
En anden ting er, hvis du kun ønsker seks tegn, gør en hurtig kontrol.
Sig kun indgang seks tegn.
Ja.
Så lad os sige, du var arbejder on-- vi vil
at gå til web kram en lille smule senere i course-- men lad os
siger du arbejder på en formular, ville du bare begrænse, hvor meget kunne afleveres.
Ja.
>> PUBLIKUM: getString trækker hukommelse fra stakken, ikke?
Bare for at afklare?
SPEAKER 1: Et mere tid?
PUBLIKUM: Er getString tage hukommelse fra stakken?
SPEAKER 1: Jeg tror Getm-- get int tager hukommelse fra den bunke
fordi det kalder Alloc.
PUBLIKUM: Oh.
OKAY.
SPEAKER 1: Ja, malloc og realloc.
Andre spørgsmål?
Ja.
>> PUBLIKUM: Så ved at definere størrelsen af ​​buffering,
du forhindre en person fra at kunne injicere kode
der kan glide forbi [uhørligt].
>> SPEAKER 1: Så ved at definere størrelsen af ​​bufferen,
du har sagt, OK her er hvordan meget hukommelse, vi kan bruge.
Hvis du tillader brugeren at skrive over det, så du kommer til at løbe ind i problemer.
Give mening.
Awesome.
Lad os flytte sammen.
Okay.
Apropos fejl, her er nogle fælles fejlmeddelelser
som kunne have vist op, mens du var kodning, der arbejder på dit problem sæt.
God chance, at en af disse dukker op på quizzen
hvis seneste år er nogen indikation.
Så svar er slags heroppe på brættet.
Men velkommen til at råbe nogle flere.
>> Hvorfor kan en segmentering fejl ske?
Hvorfor kan du få en segmentering fejl når du kører dit program?
>> PUBLIKUM: [uhørligt].
>> SPEAKER 1: God.
Ja, hvis vi forsøger at få adgang hukommelse, der er ikke givet til os.
Hvis vi dereference en null-pointer.
For eksempel, hvis vi kalder malloc, og glemmer at tjekke, om det er null,
og vi bare prøve at bruge det, computerens kommer til at give os en segmentering fejl.
God.
Hvad med implicit erklæring om funktion?
Hvad betyder det?
PUBLIKUM: Du forsøger at bruge en funktion, som du ikke har defineret.
SPEAKER 1: God.
Du forsøger at bruge en funktion at du ikke har defineret.
Så der kunne være en af ​​to ting.
Måske var det ligesom det eksempel Camille viste dig tidligere.
Og du har en hovedfunktion der kalder noget, der hedder terning.
Og lad os sige, du har glemt at skrive denne prototype.
Du glemte at sige, hey computer, Jeg har denne funktion kaldet terning.
Du vil se den senere.
Lad os sige, du har glemt at skrive prototype, kan du få denne fejl.
En anden ting er, lad os sige du forsøgte at bruge printf,
og glemte at omfatte standard bibliotek,
så det kommer til at sige implicitte erklæring om funktion.
Og sidst, men ikke mindst, sort identifikator.
Ja.
>> PUBLIKUM: Du har et problem omfang.
Ligesom måske du forsøger at kalder en lokal variabel, der er
i en anden slags område.
SPEAKER 1: Stor, så hvis du har en variabel, der ikke er i omfang,
og du forsøger at bruge det, du kommer til at komme i problemer.
Og bare mere generelt, lad os sige du forsøger at bruge x, med nogensinde at sige int
x er lig med 5, så er du kommer til at løbe ind i problemer.
Undskyld mig, spørgsmål om dette?
Awesome, chugging højre ad.
>> OK, rekursion, hvorfor might-- lad os see-- Jeg mistede min sch-- åh her vi går,
bare sikre, at vi er nogenlunde efter planen.
Okay, cool.
OK, rekursion, den generelle idé rekursion, en rekursiv funktion
er en funktion, der kalder sig selv.
OK, så det er hvad jeg mener med et program koncept
hvorved en funktion kalder sig.
Hvad ville være some-- hvad er en god grund til at bruge rekursion?
Hvornår kan det være nyttigt?
Eller hvad et program, der virkelig egner sig til rekursion?
>> PUBLIKUM: Binær søgning.
>> SPEAKER 1: Binær søgning egner sig til rekursion,
fordi du har dette problem, som du kan nedbryde i mindre stykker,
og kontinuerligt udføre Den samme algoritme på det.
Dette fører til, i mange tilfælde mere elegante kode, der er mere præcis.
Vi har lige er et eksempel af binær søgning.
Et andet eksempel er mergesort.
Nogle gange, når du tænker på en algoritme, som fakultet,
det bare føles rekursive, ikke?
Fordi vi ved, at fakultet af 5 er en faktorielt 4 gange 5.
Og så når du opretter et problem den måde, det bare føles rekursiv.
Så det ville være en fantastisk måde at skrive det.
Spørgsmål?
Ja.
>> PUBLIKUM: Hvad er en base case?
>> SPEAKER 1: Åh hvad er en base case?
Jeg sagde, glem ikke at inkludere en base case.
Lad os sige, at vi skrev en faktoriel funktion,
og vi lavede fakultet af 5.
Og vi ved et fakultet af 5 er 5 gange om fakultet af 4,
bla, bla, bla, bla.
Hvordan kan vi vide, hvornår de skal stoppe?
Hvordan kan vi vide, at vi faktisk har en række?
For hvis vi holdt ringer fakultet, så vi ville aldrig få et svar, ikke?
Så når vi ved, hvordan man stoppe i eksemplet faktoriel.
Enhver, ja.
>> PUBLIKUM: Når 1 fakultet er 1.
SPEAKER 1: God.
Så vi kender.
Vi kan tage for givet, at 1 faktoriel er lig med 1.
Så hvis vi kommer til det punkt, hvor Vi kalder fakultet den 1.,
bare gå videre og vende tilbage 1.
Og det er din base tilfældet.
Fordi vi ved, når vi skud afsted, og vi altid vil ramme det, vil vi never--
Vi vil ikke bare holde ud for evigt.
Alle andre spørgsmål om rekursion?
Ja.
>> PUBLIKUM: Så når du vender tilbage 1, det bare automatisk
vil stoppe programmet, ikke?
>> SPEAKER 1: Ja, så når du ringe afkast 1, if-- lad os sige,
lad os sige fakultet af 2 opkald fakultet af 1, fakultet af 1
vil bare hånd tilbage 1.
Og nu fakultet af 2 vil sige OK, 2 gange 1 er 2, og returnere det svar.
Ja.
>> PUBLIKUM: Har vi behøver at bekymre dig om omfanget i rekursion
når du går ind i en algoritme?
>> SPEAKER 1: Åh, ja.
Ja, du behøver at bekymre dig om anvendelsesområde i forbindelse med rekursion.
Så kun de variabler defineres i dette løb af funktionen
vil være nyttig.
Ja godt spørgsmål.
Okay, lad os holde bevæger sig langs.
Fordi vi har en masse materiale til at komme igennem.
Men som jeg sagde, er du velkommen til at slå op kontortid, eller os efter den kendsgerning.
>> Dette er blot en virkelig hurtig dias.
Vi lærte en masse om søgninger og sorterer.
Venligst, venligst, venligst, disse afsnit er online,
Jeg tror på cs50.net/quizzes.
Så gå tage dette skema og sætte det på din bedømmelse ark,
fordi der vil være et spørgsmål om dette.
Venligst ikke får det galt.
Lige meget hurtigt, hvad dette diagram betyder,
er den taler om store o, som vi kender at være den øverste grænse for en algoritmer
Løbe tid.
Og vi har omega, som er kommer til at være den nedre grænse
af algoritmer runtime.
OKAY?
>> PUBLIKUM: [uhørligt].
>> SPEAKER 1: Ja, hvad er det sidste?
Hvad er theta?
Det er, hvis we-- vi kun kommer til at bekymrer sig om i denne klasse i tilfælde
hvor vores øvre grænse og vores nedre grænse er de samme.
Ja, det er den eneste gang, det er kommer til at komme op i denne klasse.
OK, jeg har tænkt mig at holde ud.
Hvis du ikke har taget dit billede, Jeg lover disse vil være online.
>> OK, awesome, structs.
Hvorfor kan vi ønsker structs?
Hvad er en nyttig grund Vi vil måske structs.
Nogen råber noget ud.
Jamen lad os se på det eksempel på brættet.
Lad os sige, at vi har at gøre med alle disse studerende.
Hvis vi laver et program for CS50, er der ligesom 800 mennesker.
Vi er nødt til at write-- vi kommer til at nødt til at håndtere en masse oplysninger
om de studerende.
Det ville være rart, hvis vi kunne slags gruppe
denne-- alle de oplysninger, som har at gøre med en bestemt elev
i én datatype.
Men vi ved, der er ingen data skriv kaldes, Student, ikke?
Vi har et heltal, har vi en float, vi har en streng, eller en char stjerne,
men vi har ikke, en studerende.
>> Så vi kan gøre er faktisk slags definere vores egen struktur, kalder det studerende,
og vi kan knytte nogle forskellige områder med at struct.
Så i dette tilfælde, lad os siger vi har en studerende.
Og de ting, vi holder af om, er den studerende id-nummer
og den studerendes navn.
Og nu kan vi forbinder denne ID og dette navn med en given elev.
Så lad os se nogle eksempler.
>> OK, så her siger jeg, OK, lad os siger, at vi ønsker at gøre en elev.
Jeg kalder ham studerende 1.
Og hans ID-nummer, i dette tilfælde kan vi få adgang
ved blot at gøre navnet på den studerende dot feltet, vi vil have adgang til.
Så dette vil bare være studerende 1 dot-id, og vi satte det lig med 1.
Fordi huske, vi sagde, at ID vil være et heltal.
Og meget på samme måde, kan vi sige, det studerendes navn bliver Davin,
for eksempel.
Så kan vi bare få adgang til feltet af en struct ved hjælp af denne prik.
Spørgsmål om det?
Ja.
>> PUBLIKUM: Er der nogen måde at beskytte dine variabler?
Er der nogen måde at beskytte variabler bliver eksternt adgang?
>> SPEAKER 1: Er der alligevel at beskytte dine variabler
bliver eksternt adgang?
Ikke i omfanget af CS50.
Andre spørgsmål?
Ja.
>> PUBLIKUM: Hvad er typedef struct?
Hvad betyder hver komponent betyde?
SPEAKER 1: Ah, hvad er typedef struct?
Hvad betyder hver komponent betyder i denne fyr?
>> Publikum: Ja.
>> SPEAKER 1: OK, cool.
Så dette siger, hey computer, jeg ønsker at oprette en ny struktur.
Og jeg har tænkt mig at definere en definition for det, sådan at jeg kunne bruge det
som om det var en type hele mit program.
OK, så jeg ønsker at definere en struktur.
Og jeg vil nu være i stand til at bruge det som en type.
Og dens navn er elev.
Og her er dens marker.
>> PUBLIKUM: Så er, at typedef struct [uhørligt]?
SPEAKER 1: Hvis du ønsker at være i stand til bruge denne struct hele dit program,
og i de fleste tilfælde i CS50 vi gør det, må vi sige typen Def.
Og det gør det muligt at bruge det samme måde, som vi bruger som int eller flyde.
Computeren vil altid ved, hvad det er.
Ja.
>> PUBLIKUM: Kan vi skriver dette i header fil?
>> SPEAKER 1: Åh, undskyld.
Har vi skriver dette i header fil?
Du kunne skrive dette i toppen af ​​din program, i toppen af ​​dit C-program.
Ja, det ville være det mest rimelig sted for det.
Tilbage dertil.
PUBLIKUM: Samme spørgsmål, så før main?
SPEAKER 1: Right, du har brug for dette for at være et eller andet sted, at alle kan få adgang til den.
Så før vigtigste i dit tilfælde, ja.
PUBLIKUM: Er der en forskel mellem sætte studerende på toppen og i bunden?
SPEAKER 1: Ah, er der en Forskellen mellem at sætte studerende
på toppen eller i bunden?
Let-- redde dette spørgsmål, og når vi kommer til hægtede lister,
Vi vil se, at, OK?
Så holde på, at der for et sekund.
Det sidste, jeg vil nævne her, er i stedet for at have en struktur,
vi har en pointer til en struktur, vi kan ændre vores notation
at være lidt pænere.
>> Vi kan sige, lad os sige vi har en pointer til en studerende snarere end blot
en studerende.
Hvis vi vil have adgang til et felt, i stedet for laver, godt gå dereference markøren,
og derefter få adgang feltnavnet.
Denne notation ser lidt rodet med stjernen i denne prik.
Helt korrekt, men en slags af renere måde at gøre det,
er blot at sige pointer pil navn.
Og som faktisk kombinerer dereferere og adgang i en smukt symbol.
Spørgsmål om det?
>> PUBLIKUM: Bare sige, at en mere tid.
>> SPEAKER 1: Sig, at endnu en gang.
>> PUBLIKUM: Præcis hvad du lige sagde.
SPEAKER 1: Sure, præcis hvad jeg lige sagde.
Hvis vi har en pointer til en studerende snarere end den studerende selv,
vi can-- en måde, at vi kan få adgang til område er at dereference det, og derefter
adgang navn.
En anden, pænere måde, vi kan gøre det, som er lige
en lille smule af syntaktisk sukker, er bare at gøre pointer pil navn.
Og der vil kombinere dereferere og have adgang.
Ja, temmelig cool.
Okay.
>> Så lad os tale om det andet spørgsmål.
Lad os springe til knudepunkter, som vi kommer til at bruge
i forbundet lister i bare et sekund.
Så her, vil du bemærke, at der ikke er ordet node både på bunden,
og på toppen.
Før, da vi definere studerende, vi lige haft studerende på bunden.
Vi havde ikke studerende på toppen.
Enhver ved, hvorfor der kan være?
Hvad forskellen er?
Ja.
PUBLIKUM: Så du bruger node er definitionen af ​​knudepunktet,
så det er en rekursiv ting?
SPEAKER 1: God.
Ja, vi har brug for vores noder til har pointer til andre knudepunkter.
Så da vi bruger denne type før det er faktisk defineret,
vi nødt til at sætte det øverst bare så det ved, hvad det er.
PUBLIKUM: Så vi stadig har brug for det i bunden?
SPEAKER 1: Ja.
PUBLIKUM: Så altid i bunden.
SPEAKER 1: Altid i bunden.
Så alle jeres vilje har det på bunden.
Andre spørgsmål?
Okay, så lader faktisk taler om forbundne lister virkelig hurtigt.
Så hægtede lister are-- vi bruger dem i stedet for arrays i nogle tilfælde,
fordi vi ved, at arrays er fast længde, mens hægtede lister
vi kan vokse og skrumpe som vi ønsker.
Så dette er et eksempel på, hvad en linket liste kunne se ud.
Hvad vi har brug for at se, er lederen af ​​listen.
Så hvor listen begynder.
Og så knudepunkt han, hver efterfølgende node, er
ansvarlig for at kende hvor det næste knudepunkt er.
Så i dette tilfælde, det knudepunkt, der gemmer 1 er ansvarlig for at vide, hvor 3 er.
Den person, der gemmer 3 ansvarlig for at vide, hvor 9 er.
Og 9 har ingen andre til at pege på.
Det er i slutningen af ​​listen, så det bare siger null.
OKAY?
>> PUBLIKUM: Hvad er meningen med dette?
>> SPEAKER 1: Hvad er meningen med det her?
>> Publikum: Ja.
SPEAKER 1: Fordi, lad os sige, at vi har nogle data.
Og vi ved ikke præcis, hvordan mange data, vi ønsker i forvejen.
Så med et array, lad os sige, hvor vi vil tælle personer i første række.
Chancerne er det ikke kommer til at ændre sig.
Vi kan bare sige, OK, jeg ønsker en bred vifte af størrelse seks.
Men hvis vi vil have noget der kommer til at ændre sig.
>> For eksempel, lad os sige, jeg prøvede at holde styr på de studerende
som de kommer ind i lokalet til revisionen session.
Jeg har ingen idé om, hvor mange af jer folk vil dukke op.
Så jeg måske ønsker en datastruktur at jeg kan udvide og krympe.
Fordi måske nogen vil forlade, måske nogen vil komme.
Og så til enhver tid, vi kan tilføje eller fjerne noder.
Cool, store spørgsmål.
Ja.
>> PUBLIKUM: Hvis du kan bruge noget som getString
der holder lade du får flere data som du har brug for det, hvorfor har du brug for dette også?
>> SPEAKER 1: Hvorfor skulle du bruger linket liste, når
du kan bruge noget getString?
Det er et godt spørgsmål.
Husk, at Get-- en af downfalls af getString
er, at vi ikke gjorde en meget godt stykke arbejde med at frigøre den hukommelse,
og vi indførte en flok memory leaks i dit program?
Du kan tage det en statisk størrelse array og holde voksende det.
Men du er nødt til at finde nye steder i hukommelsen.
Det ville bare være en masse overhead.
>> En af de gode ting om forbundet lister i modsætning til arrays, er arrays
er alle i den samme placering i hukommelsen.
Det skal være kontinuerlig bidder af hukommelse.
Ud fra følgende betragtninger hægtede lister, 2 og 3 kan være helt forskellige steder.
Ligesom 2 er herovre, og 3 er herovre.
Og så længe de har en pointer til hinanden, er det fint.
Vi ved, vi kan finde dem.
Spørgsmål derovre?
>> PUBLIKUM: getString er en funktion i CS50 biblioteket, ikke?
Det findes ikke i reelle programmer.
>> SPEAKER 1: Korrekt.
Ret, det er den anden ting.
GetString eksisterer ikke uden for rammerne af CS50.
Ja.
>> PUBLIKUM: Så gør det faktum, at to kunne være virkelig langt fra hinanden,
gør, at virkningen effektivitet adgang til elementer på listen?
SPEAKER 1: Det er et godt spørgsmål.
Spørgsmålet var, gør det indvirkning effektiviteten af ​​adgang
disse forskellige elementer på listen.
Faktisk, ja.
Fordi vi ved if-- lad os siger, at vi vil have adgang til
Det andet element i arrayet, vi kender vi kan bare gøre vifte beslag 1, højre.
Det er altid at gå til være den samme placering.
Men hvis vi ønsker at komme til at 3, Vi kan ikke bare sige, gå få at 3.
Vi er nødt til at sige, OK, starter ved begyndelsen af ​​listen,
og nu vi faktisk har til at gå igennem, indtil vi
finde nummeret, vi er interesseret i.
>> Så i dette tilfælde siger vi, OK dette er det første nummer.
Så det væsentlige, det er indeks 0.
Nu er vi nødt til at finde det andet tal.
Det er indeks 1.
Så der er faktisk går at-- bare adgang, vil tage N tid.
Cool, store gamle N. Ja.
>> PUBLIKUM: Hvad er hver af listerne?
Er de hver arrays, eller hvad?
SPEAKER 1: Det er et godt spørgsmål.
Hvilke hver af de strukturer, som jeg har trukket?
De er knudepunkter.
Så hver af disse små struktur har to dele.
Det har et heltal, der holder.
Det er de faktiske data at det er at holde fast.
Det er den form for nyttig del.
Og dette er hvad gør det til en sammenkædet liste,
det har en pointer til det næste knudepunkt.
Awesome spørgsmål.
Okay, så lad os se meget hurtigt se på nogle eksempler på, hvad
vi kan gøre med hægtede lister.
>> Så en meget hurtig eksempel er, formoder, at vi ønsker at gøre en søgning.
Hvilken slags søgning ikke kan vi gør på hægtede lister?
>> PUBLIKUM: Binary.
>> SPEAKER 1: Binary.
Hvorfor kan vi ikke bruge binær søgning?
>> PUBLIKUM: [uhørligt].
SPEAKER 1: Right, fordi med binær søgning, havde vi til at stole på,
at vi bare kunne springe i arrayet på noget tidspunkt.
Vi kunne bare sige, gå til midten element.
Med her, som vi sagde lidt tidligere,
Vi kan ikke bare springe til den midterste element.
For at finde nogen element, vi faktisk
skal gå gennem hele vores liste.
>> Så hvis vi ønskede at gøre en søgning, den bedste, vi kan gøre, er blot en lineær søgning.
Vi starter i spidsen, vi check-- lad os sige vi er
søger 9-- vi starter i spidsen.
Vi siger, er det 9?
Ingen.
Er det 9?
Ingen.
Er det 9?
Ja, vi fandt det.
OK, det er alt det.
Her er en lille smule af pseudo-kode.
Jeg har tænkt mig at forlade dette for dig fyre at kværne over på egen hånd,
bare fordi vi kører en lille smule kort på tid.
>> Kan tale om indsættelse.
Vi så en virkelig cool demo af dette i foredrag, hvor vi sagde,
OK, har vi denne linkede liste, hvor alles peger på hinanden,
og nogen kommer op på scenen.
Hvordan kan vi indsætter, at person, ind i vores linkede liste?
Nå, til en forkert måde at gøre, som er Jeg tror, ​​hvad vi så først,
er, når personen i fronten automatisk
pegede på ny person.
Og så vi slags opgivet anden halvdel af listen, ikke?
Fordi vi ved ikke, hvor det er i hukommelsen længere.
Så for at være meget forsigtige med rækkefølge, som vi indsætter ting.
>> Så her, lad os sige, vi ønsker at sætte 1 på forsiden af ​​vores liste.
Først har vi 1 point på andet element-- eller elementet
der indeholder 1.
Så vi gør det, bare så vi ikke kommer til at miste den anden halvdel.
Og nu, kan vi have hoved punkt til 1.
Så igen, det er bare gerne Super højt niveau.
Dette er, hvordan vi ville indsætte en node.
Vi har en masse pseudo-kode her-- ked af det,
Jeg ved ikke, hvorfor jeg er kalde det pseudo-kode.
Det er faktisk kode.
Du kan gå tjekke det ud senere.
>> Okay, lad os meget quickly-- flere spørgsmål
om hægtede lister før jeg flytte til et par andre data
strukturer i vores sidste 10 minutter.
>> PUBLIKUM: Har vi brug for nu hvordan man skriver det på en test?
>> SPEAKER 1: Har vi brug for at vide, hvordan at--
>> PUBLIKUM: Skriv det på en prøve.
>> SPEAKER 1: Vi har brug for at-- du bør være forberedt
at skrive, indsætte, fjerne, og søge efter forbundne lister på testen.
Det er noget, vi kunne forvente dig at gøre.
Bare gå over den.
Hvis du har nogen spørgsmål om kode, skyde din TF en e-mail,
komme til kontortid.
Der er stadig masser af tid at studere, ikke at bekymre dig.
Okay, nogen den anden spørgsmål om hægtede lister?
Ja.
>> PUBLIKUM: Så hvis du ikke bruger den pointer for at gå til den til højre
før du bruger markøren til den ene til venstre, der er
svarende til sletning alting, ikke?
SPEAKER 1: Ja.
PUBLIKUM: [uhørligt].
SPEAKER 1: Right, da vi ikke kan få det, det er faktisk endnu værre.
Fordi ikke kun kender vi ikke hvor det er, kan vi ikke længere bruge det,
men we've-- vi er ikke frigør at hukommelsen længere.
Så det er bare hænge rundt og ikke være nyttigt, fordi vi ikke kan finde den.
Ja, køligt spørgsmål.
>> Okay, lad os tale om stakke.
Vi så stakke meget hurtigt.
De er først i sidste ud datastrukturer.
Så vi tænker på stakkene i Annenberg af bakker, hvor vi stak ting på toppen.
Og hvis du kommer til at kommer få en bakke, er du
altid kommer til at tage den på top, som er den mest recently--
hvilket er det, som vi mest for nylig sat på toppen af ​​stakken.
Så du kan slags tænker på denne form for visuel, når du tænker på stakke.
Og så har vi dukkede noget fra toppen af ​​stakken.
>> Hvis vi are-- Åh, og de ord, vi bruge, når vi taler om disse data
strukturer er normalt, hvis vi sætte noget på stakken,
vi siger, vi skubber det på stakken.
Og hvis vi tager noget fra stakken, vi siger vi er popping ud stakken.
Hvis du kommer til at gennemføre en stack-- som jeg helt sikkert
anbefaler at du prøver out-- du er vil ønsker at holde styr på,
lad os sige, du bruger et array.
Jeg ved i foredrag vi talte om brug både arrays
eller er knyttet lister til at gennemføre en stak.
Hvis du bruger en array, du har brug for at keep--
undskyldning mig-- vi nødt til at holde styr størrelse og kapacitet.
Så det maksimale antal at vores stak kan holde.
Spørgsmål om stakke?
>> PUBLIKUM: Hvad er forskellen mellem størrelse og kapacitet?
SPEAKER 1: Forskellen mellem størrelse og kapacitet, awesome spørgsmål.
Så lad os sige, vi er ved hjælp af et array, og vi
allokere nok plads til 10 heltal.
Og vi begynder at fylde det op.
Og vi skubbe ting på, og vi pop ting ud.
Vi ønsker at holde styr på den maksimale nummer, vi kan holde, det er kapacitet.
Og vi ønsker at holde styr på nuværende antal, vi har, det er størrelse.
Godt spørgsmål.
Noget andet på stakke?
Okay, lad os tale om overraskelse, køer.
>> I modsætning stakke, der først i sidste ud, er disse først ind, først ud.
Så dette er like-- tænke på en linje.
Tænk på foring op på Apple Store for at få uanset produkt.
Og den første person på linje bør være den første person, der har hjulpet.
Så første ting, der er skubbet er dette den første ting, der er poppet.
Afkøle?
Meget similarly-- oh, de ord, vi bruge i stedet for skub og pop--
som jeg netop brugt, Jeg er sorry-- er vi siger,
hvis vi putter noget ind køen, siger vi kø det.
Hvis vi tager noget ud af køen, siger vi, at vi dequeued.
Det.
Jeg kan udtale dem forkert, men du får den idé.
Og så igen, ligesom stakke, hvis vi gennemføre dette som array,
vi nødt til at holde styr på størrelse, kapacitet, og hovedet.
Hvad mener jeg med hovedet?
Hvorfor har vi brug for at holde styr på hovedet?
>> PUBLIKUM: Fordi det er der, hvor begyndelsen af ​​din liste er.
SPEAKER 1: Ja, dybest set hovedet er hvor begyndelsen af ​​vores køen er.
Fordi vi ved, i modsætning stakke, which-- Jeg har tænkt mig at forsøge at klare denne way--
vi ved, at det altid kommer til at skrumpe denne måde og vokse på denne måde.
Køer, folk kommer på enden og orlov fra begyndelsen,
så vi er nødt til at holde styr hvor starten er.
Det er, hvad jeg mener med at vi er nødt til at holde styr på, hvor hovedet er.
Afkøle?
Okay.
Otte minutter par flere emner, kan vi gøre det.
>> Okay, hash tabellen.
Vi talte meget kort om hash tabeller.
For quizzen, skal du blot forstå dem på et højt niveau.
Den grundlæggende idé er, at du har disse data.
Og vi ønsker at få adgang til det i tide, der er hurtigere end noget som en forbundet
liste.
Fordi vi sagde, hvis vi var søge gennem en sammenkædet liste,
at kunne tage N tid.
Selv adgang kan tage N gang i en sammenkædet liste.
Hash tabeller giver os en måde, som vi kan hurtigere adgang til ting, og mere
hurtigt søge efter ting, uden har de begrænsninger af et array
hvor vi har fast størrelse.
>> Så vi tænker på en datastruktur, hvor, hvor vi sætte det i datastrukturen
er afhængig af dette magiske hash-funktionen.
Så i dette tilfælde, den magiske hash funktion er bare at tage et ord,
at kontrollere, hvad det første brev er, og så bare sortere det alfabetisk.
Så vi hovedsagelig sætte dem i forskellige skovle.
Når vi ser banan, siger vi, OK, lad os sætte i B spand.
Når vi ser Apple, lad os sætte det i en spand.
Hvis vi så abrikos, lad os sat i en spand.
OKAY?
>> Så formoder jeg ledte for-- jeg ved ikke, hvad der er en anden frugt?
Antag jeg var på udkig efter orange.
Hvor skal jeg kigge?
I O spanden.
Ja, der er kun ét sted at orange måtte være, OK?
Så jeg sagde tidligere, hvad der sker if-- godt jeg sagde tidligere,
lad os sige vi sætter abrikos in--, men jeg virkelig fat det faktum, at, åh nej,
hvis jeg skulle sætte bær i, det er kommer til at være i strid med banan.
Hvor vi sætter det, hvis der er allerede noget i vores bord?
Tja, vi har et par muligheder.
>> Mulighed nummer et er lineær sondering, hvilket grundlæggende betyder,
lad os sige, at jeg vil forsøge at sætte bær, og jeg ser, åh nej,
bananer der allerede, Jeg bare sige OK, lad
mig kigge efter den næste tilgængelige stedet.
Så jeg gå ned, siger jeg, åh, der er ikke noget i D spand.
Jeg kan ikke rigtig tænke på eventuelle frugter som starter med bogstavet D,
så jeg bare vil sætte bær derinde.
Durian.
OK, så da der er intet derinde endnu,
Jeg kan lige så godt bare bruge at stedet.
Hvad er ulempen ved det?
>> PUBLIKUM: Det er ude af drift.
>> SPEAKER 1: Beklager?
PUBLIKUM: Det er ude af drift.
>> SPEAKER 1: Det er out-- ret, vi kan ende
med ting, der ikke in-- lagres i spande i den måde,
at vi forventer dem til at være.
Så hvis vi søger for bær, inden vi sagde,
Åh kan vi se i en spand.
Det kunne kun være i en spand.
Men nu, virkelig, det kunne være i alle de spande, ikke?
>> OK, her er en anden mulighed, separat chaining--
som er den idé, at vi skal hen til at bruge en lille smule senere i P sæt 5.
Snarere end blot har en plads i hver spand,
hvorfor vi ikke har hver spand være en pegepind til en linket liste?
Hvor vi siger, OK, der er en spand for alt, hvad der starter med A.
Og der er bare kommer til at være en sammenkædet Liste over frugter, der starter med A.
Så hvis vi får en ny frugt, lad os sige Vi get-- vi avocado, vi har æble,
lad os sige vi får abrikos, hvordan ville vi sætte på listen?
Nå vi ville gå til PDF Bucket 0, og vi ville bare indsætte det i vores ønsket liste,
så simpelt er det.
>> Nu holder jeg sige spand.
Vi kunne gennemføre denne på en række måder.
Et typisk måde, at dette slags billede antyder,
er måske have en bred vifte af pegepinde til hægtede lister.
Det er en måde, vi kan gennemføre en hash tabel.
PUBLIKUM: Vil du brug for en anden liste, fordi banan og bær er ude
af orden?
SPEAKER 1: Ville du need-- ah, ville du
brug for en anden liste, fordi banan og bær er i uorden?
I dette tilfælde vores hash-funktionen, som fortæller os, hvor at sætte ting
ikke bekymrer sig om det andet bogstav.
Det behøver ikke bekymre sig om alphabetizing, den kun bekymrer sig om det første bogstav.
Spørgsmål?
>> PUBLIKUM: Hvad er definitionen af ​​dette funktion, og hvordan ser den ud?
SPEAKER 1: Ah, godt.
OK, så behøver vi ikke at bekymre sig for meget for denne quiz.
Så jeg ikke sætte i dias.
Vi kommer til at blive indført til det for P sæt 5.
Men dybest set, det siger, givet en nyt element, hvor skal jeg sætte det?
Eller, lad os sige, jeg leder efter et element, hvor kan det være?
Ja, godt spørgsmål.
>> OK, meget hurtigt, træer og forsøger.
Så et træ er lige nogen art organiserede datastruktur.
Og vi kommer til at se en masse billeder der vil gøre denne super klart.
Og en trie, som vi så i klassen, er en meget speciel form for træ
at stort set fungerer som en multi-niveau hash tabellen.
Det er super cool.
Vi kommer til at se det i bare et sekund.
Okay, så lad os taler om træer først.
Så det er virkelig typisk eksempel på et træ, hvor vi har nogle hierarki.
Du se, at man er på helt i top, ikke?
Og jeg kan sige top, fordi der er klart en bestilling, fordi vi
har disse pile at gå ned.
Så det, de ting i toppen, Jeg kalder, at roden node.
Så man er roden node.
Og de ting i bunden, som har noget der kommer fra dem,
Jeg siger det er disse blade noder.
Så 8,9 5, 6, 7, OK.
Og som regel den terminologi, vi kan sige, er, 1 er 3 overordnede.
Så det er den ting, der kommer et niveau over det, og peger på det.
Og 3 er 1 barn.
Det er de ting, der 1 point til.
Spørgsmål?
>> PUBLIKUM: Kan du gå tilbage til den forrige dias, tak?
>> SPEAKER 1: Kan jeg gå tilbage til det forrige dias?
Jo da.
Spørgsmål til dette?
Eller du blot ønskede at se på det?
PUBLIKUM: Jeg vidste bare ikke komme igennem det.
>> SPEAKER 1: OK, cool, ja.
Disse vil alle være online, så gør ikke bekymre sig om at få hvert ord.
Og af hensyn til tid, jeg har tænkt mig at gå.
Er det i orden?
Awesome.
OK, cool.
Så lad os tale om en meget specifikke kind--
så vi har disse generelle struktur træer,
som er lige noget, der giver os mulighed for at slags rang ting hierarkisk.
>> Binære træer er ting, hvor hver knude har højst to børn.
OKAY?
Og jeg sagde: OK, så der synes til at passe denne beskrivelse.
I knudepunktet, ikke en binær søgning træ.
Hvad er en binær søgning træ?
Det er sorteret.
Så du ved, at der i en binær søgning træ,
alt til tree-- alt til knudepunkterne venstre er mindre,
og alt til knudepunkter højre er større.
Så dette er ikke en binær søgning træ.
Dette er blot et binært træ.
Så vi har store kategori af træer, lidt mindre kategori
af binære træer, søgning ved en-- binære søgning træer.
Afkøle?
Okay.
>> Og nu, mest sjov af alt, vi har vores forsøg.
Du fyre så dette billede i forelæsning?
Ja, skal det se super bekendt.
Lad os se på hvordan vi kan rent faktisk at gennemføre dette.
Eller faktisk, lad os se, betyder, at selv komme op?
Nope.
Okay, har vi ikke engang at bekymre dig om det lave niveau kram.
Vi vil have masser af tid at behandle derefter P sæt 5.
Men for nu, bare meget højt niveau, vi ved, at dette er, hvad det ser ud.
Vi beskrev det som en slags en multi-niveau hashtabel
where-- hvad betyder denne butik?
Dette lagrer navne videnskabsfolk, som vi kan faktisk
kigge efter ved blot slags efter forskellige hash tabeller ned, okay?
>> Og formålet med dette er, i teorien, de giver konstant tid se op.
Så hvis jeg ønsker at kontrollere, at, for eksempel, hvem der er someone--
at Mandel er i denne Trie, kunne jeg meget hurtigt
i linear-- Jeg er ked af, i konstant tid, finde ud af
uanset om det er i trie.
Men en con, er at se på, hvor stor denne er.
Vi er ikke engang lagring, at mange data, og det er enorme.
Så en stor con er, at det bruger en stor mængde hukommelse.
Ja.
>> PUBLIKUM: Hvorfor skal det give konstant tid, præcis?
>> SPEAKER 1: Et mere tid?
>> PUBLIKUM: Hvad er intuition for hvorfor det giver konstant tid?
>> SPEAKER 1: Excellent spørgsmål.
Hvorfor det giver konstant tid?
Så det, vi kan gøre, er, lad os siger, vi leder efter Mandel.
Vi ved, at vi ønsker at starte i første niveau ved M.
Vi ved, at vi ønsker at følge det til E. So det er at tage et skridt, to skridt, ikke?
Vi følger det til N. Vi følger den til D. Vi følger det til E. Vi følger det til L.
Og derefter den næste ting, vi kontrollerer says-- denne delta siger Ja, det er
i vores tabel.
Det er et ord.
Det er en gyldig post i vores trie.
Så du siger, OK, der tog syv trin.
Men hvis vi tilføjet som en zillion mere forskere til denne datastruktur,
Vi ville ikke have at kontrollere en zillion flere ting.
Vi kun nogensinde nødt til at tage syv trin, længden af ​​personens
navn.
>> Så vi vil gerne tro af runtime som, formoder
vi øge størrelsen på vores datastruktur, hvor meget længere
er det vil tage?
I dette tilfælde, hvis vi tilføjer en flok flere forskere, er det ligegyldigt.
Det er stadig kommer til at tage den samme mængde tid.
Det er konstant tid.
Ja.
>> PUBLIKUM: Hvordan kan du ikke kender at scanne over de andre numre?
SPEAKER 1: Hvordan kan jeg vide, hvordan at--
PUBLIKUM: Ligesom hvordan kan du vide, at du går lige fra M til E og ikke til M til A?
SPEAKER 1: Åh, sikker.
Fordi jeg vidste jeg var leder efter ordet Mandel,
og jeg bare ved, det er M-E. Så at-- ja, gå videre.
PUBLIKUM: Ville du har at se på de andre bogstaver
i resten af ​​[højttalersystemet]?
>> SPEAKER 1: Ah, ville jeg ikke have at se på til-- OK, stor.
Det er et stort spørgsmål.
Det afhænger af, hvordan vi gennemfører den.
Hvis vi gennemfører det som bare som en række arrays
hvor vi ved, at E er altid i position 0,
Jeg ved ikke, hvad nummer indeks er på.
Ja, vi kan bare gøre konstant tid, gør, gør, gør, gør.
Afkøle.
Spørgsmål derovre?
>> PUBLIKUM: Er konstant tid det samme som realtid?
SPEAKER 1: Er konstant tid det samme er realtid?
Jeg er ikke rigtig sikker realtid er.
PUBLIKUM: Ligesom tid, bogstaveligt skrider anden
sekund modsætning til at være en uafhængig variabel.
>> SPEAKER 1: Ja, du kan tænke på det på den måde.
Med andre ord, det er ikke afhængig på størrelsen af ​​datastrukturen.
Det er en måde at tænke på det.
Andre spørgsmål?
Måske i første gang i historie, vi færdige til tiden.
Hvis du har spørgsmål, er du velkommen fri til at komme spørge os, gå til afsnittet,
tale med din TF'er, kontor åbningstider er 08:00 og 08:30
til 11:00 mandag og tirsdag, så det er en lille smule anderledes tid,
så sørg for at notere det.
Ja.
>> PUBLIKUM: Har vi brug for at vide ting som kommandolinjeargumenter,
dash ls, Dash hvad?
>> SPEAKER 1: Kommando linje argumenter, og Linux-kommandoer,
ja, du behøver at vide dem.
Very-- det er ligesom den slags niveau ting, vi dækket i afsnit 0,
så vidt Linux kommandoer go.
>> PUBLIKUM: Er de timer i Annenberg?
SPEAKER 1: Kontortid, jeg er ikke helt sikker på, hvor de er.
Men du kan kontrollere hjemmeside, og det vil fortælle dig.