>> Spreker 1: Hi almal.
Ons gaan om te begin.
Ek dink mense is nog steeds gaan wees filter in.
Maar in die belang van die tyd, so ons kan kry jy ouens hier uit op tyd,
ons gaan om te begin.
So welkom om die CS50 Quiz 0 review.
Vir dié van julle wat nog nie besef nie, jy het 'n vraag op Woensdag.
Woo-hoo.
>> As jy nog nie begin studeer nie of het nie besef dat dit bestaan ​​nie,
verlede vasvrae en alle inligting oor jou quiz is op cs50.net/quizzes.
Daar is 'n paar goeie dinge op daar, verlede vasvrae van die afgelope 10
jaar sowel as inligting oor hierdie quiz en onderwerpe
wat gedek sal word.
So laat ons begin.
>> So julle ouens kan onthou, is die eerste dag van klas Dawid het die lampe op.
So in wese, alles wat daarmee op onder die enjinkap van 'n rekenaar is
gedoen in binêre.
Binary beteken wat dit klink soos, 0 en 1's.
Dit het twee waardes wat verteenwoordig kan word.
>> So, net soos in die eerste dag van artikel Toe Dawid omgedraai op 'n ligte
gloeilamp te verteenwoordig op, of 1, ons rekenaar verstaan ​​binêre as 0 en
1's, op of af.
Basiese beginsels van die program nie.
Elke plek is verteenwoordig in die basis twee.
So jy voeg 2 by die 0 aan die 1 tot die 2 al die pad tot.
>> Te bereken wat jou program is om desimale, volg jy net die vergelyking
tipe ding.
As jy 'n 1 in enige van dié plekke, jy dit vermenigvuldig met watter
baseer dit is in, voeg dit op, en jy die desimaal.
So dit is hoe jy tel 5 in binêre.
Net soos wat ons doen op die laaste skuif, dit is hoe jy sou
verteenwoordig 1 deur middel van 5.
>> Net so, net soos wat jy kan byvoeg en aftrek in desimale of baseer 10, of
regtig 'n basis op kan byvoeg en trek in binêre.
Presies wat jy sal verwag wanneer jy voeg die twee te maak, as dit gelyk groter
as 1, jy dra 'n 1, maak dit 'n 0, en doen die toevoeging dat die pad, net
soos jy met gereelde sou verwag desimale of enige ander basis.
Cool.
>> So soos ek gesê het, alles wat gaan op onder die kap van ons rekenaar
gedoen word in 0 en 1's, of binêre.
So hoe kan ons druk, byvoorbeeld, letters, of syfers, of karakters?
En die antwoord is ASCII.
>> ASCII is 'n skakel tussen karakters dat ons normaalweg sou sien in die
Engelse taal soos A's, B's, C's, onderstreep, strepies, en
iets soos dit.
En dit kaarte wat aan 'n ASCII waarde.
'N ASCII waarde is net 'n getal wat kan verstaan ​​word deur jou rekenaar.
En net soos wat jy kan doen en Verder aftrekking van getalle, kan jy doen
hulle met ASCII waardes.
>> So in hierdie voorbeeld, wat sal hierdie druk?
Ja, so net 'n ruimte B ruimte C ruimte D. Waar het my muis gaan?
Kennisgewing wat jy kan 'n int op 65 definieer.
En wanneer jy druk wat uit die gebruik van persent C, sal dit interpreteer dat as 'n
karakter en sal druk A.
>> Net so, kan jy verklaar dit as 'n kar.
En wanneer jy druk dit uit met behulp persent C, sal dit interpreteer dat as
persent D. En net soos wat jy kan voeg 'n nommer, kan jy voeg karakters
ASCII waardes, in hierdie geval.
>> So 'n bietjie wyser vir almal.
5, as 'n string, nie eintlik is gelyk aan 5.
So, hoe kan ons skakel die string 5 tot die heelgetal 5?
Enige idees?
Ja.
>> So as ons 5 as 'n string, ons kan aftrek 0.
En dit sal vir ons 5.
En so, as ons 5 as 'n integer, voeg wat aan die string 0.
En dit gee ons die string 5.
Cool.
>> Nou, onthou terug een waar lesings het ons gepraat oor algoritmes.
So hoe kan ons eintlik wil 'n rekenaar interessante dinge te doen?
Jy weet, net die optel en aftrek getalle en druk dinge is nie
wat opwindend.
Gewoonlik, ons wil hê dat ons rekenaar voer 'n soort van die algoritme.
Iets wat 'n bietjie meer kompleks as net 'n eenvoudige rekenkundige.
>> 'N Algoritme is net 'n stap vir stap stel instruksies vir hoe om te presteer
'n sekere task--
net soos 'n resep.
Jy kan die eerste dag van onthou klas waar Dawid het ons tel 'n kamer
van mense en hoeveel mense was in die kamer.
Jy kan gebruik word om te tel een vir een.
1, 2, 3, 4.
In daardie geval, 'n lineêre tyd algoritme.
>> Maar Dawid bekendgestel 'n algoritme vir jy die mense in die kamer te tel
waar almal staan, sê dat jy jou aantal ander persoon, byvoeg dat
getal op, en een persoon sit.
En jy herhaal dat.
Dit is 'n tipe van die algoritme.
Ons kan analiseer hoe doeltreffend 'n algoritme is gebaseer op dit hardloop tyd.
Maar ons sal 'n bietjie praat meer oor dit later.
>> So al algoritmes kan ook word in pseudokode geskryf.
Pseudokode is net 'n Engelse soos sintaksis gebruik te verteenwoordig
'n programmeertaal.
Byvoorbeeld, as ons wou 'n gebruiker te vra my gunsteling nommer om te raai, ons
dalk pseudokode as sodanig.
>> Kry 'n gebruikers raai.
As die raaiskoot korrek is, vertel hulle hulle is korrek, anders hulle vertel
hulle is nie korrek nie.
En pseudokode is 'n manier om maklik verteenwoordig 'n idee of 'n algoritme.
So nou het ons dalk wil eintlik skryf hierdie is in die taal wat die rekenaar
mag verstaan.
So kan ons ons pseudokode skryf en interpreteer wat in die bron-kode.
>> Tot dusver, moet die bron-kode voldoen tot 'n sekere sintaksis van
'n programmeertaal.
En so ver, in CS50, ons het gebruik meestal c.
So dit kan bron-kode vir c wees.
Later in die kursus, kan jy die nag kom in kontak met ander programme
tale soos PHP.
Of as jy selfs ander klasse, jy kan doen Java, Python, of selfs OCML.
Maar in ons c program taal, is dit hoe ons die bron-kode vir skryf
die pseudokode algoritme wat Ek het net vroeër beskryf.
>> So, hoe werk jou rekenaar eintlik verstaan ​​dat?
Soos ek gesê het, dit eintlik net verstaan ​​nulle en ene.
So hoe werk dit kry uit die bron kode na iets wat kan wees
verstaan?
Wel, ons het iets bekend as 'n samesteller.
>> As jy onthou terug in die meeste van jou psets, jy het 'n soort van program
geskryf in 'n dot c lêer.
En dan sal jy tik maak nie.
So, wat doen nie?
>> Jy kan tik make te stel jou program, want someone--
wie jou p stel geskryf het; waarskynlik David--
het 'n make-lêer.
En dit vertel maak om te weet om te loop jou samesteller, genoem klang, dit sal
stel dan jou bron kode om beswaar kode, wat nulle en ene
dat jou rekenaar verstaan.
Maar 'n bietjie later, sal ons gaan meer in diepte oor opstellers.
>> So onthou pset 0, where-- ja, jy 'n vraag?
>> Publiek: [onhoorbaar]?
>> Spreker 1: Ja.
Ek dink hulle eintlik moet aanlyn wees.
Ja.
>> Publiek: Is dit soos [onhoorbaar]?
>> Spreker 1: Dit is nie.
Die op cs50.net/quizzes.
>> GEHOOR: Sny vasvrae, streep 2013 streep 0, en kliek net deur
vasvrae 2013 en quiz 0, hersien artikel skyfies.
>> Spreker 1: Ja, so as jy ouens wil trek dit op en kyk na dit op jou
eie rekenaar, is dit goed ook.
Sê dit weer.
>> Publiek: [onhoorbaar].
>> Spreker 1: Ja, [onhoorbaar] is die dummy veranderlike.
O ja?
>> Publiek: [onhoorbaar]?
>> Spreker 1: Nee, stakings is nie op die eksamen.
Jammer, haar vraag was, was aanvalle op die eksamen.
En dit is nie.
So pset 0, moet julle almal geïmplementeer iets met behulp van nuuts af.
En ons geleer 'n paar basiese programmering boustene gebruik nuuts af.
>> So laat ons neem 'n blik op 'n sekere van hierdie boustene
waaruit 'n program.
Eerste is Boole-uitdrukking.
Boolse uitdrukkings is kinders en 0's of enigiets wat
twee moontlike waardes.
In hierdie geval, waar of vals, op of af, en ja of nee.
'N voorbeeld van 'n eenvoudige, baie eenvoudig, program wat gebruik maak van 'n Boole
uitdrukking hier.
>> So ten einde Boolse uitdrukkings te nuttig wees, ons het Boole-operateurs.
Hierdie is die operateurs wat gebruik kan word sekere waardes te vergelyk.
So ons het en of nie gelyk aan minder as of gelyk aan groter as of
gelyk aan, en minder as of groter as.
Maar hierdie operateurs is nie baie nuttig tensy ons kan kombineer hulle in
voorwaardes.
>> So julle ouens kan onthou van nuuts af en uit jou p stel dat ons
moes voorwaardes.
Hulle is, in wese, soos vurk in die logika van jou program wat
voer, afhangende van of 'n voorwaarde voldoen word.
So een van die voorwaardes wat ons gehad het gebruik baie keer in hierdie kursus is die
indien anders as, en anders voorwaardes.
>> Hier is 'n voorbeeld van hoe jy kan gebruik nie.
Is daar iemand wat weet wat die verskil tussen net die gebruik van if-stellings al
die pad af verse indien anders, As en anders gekombineer?
Ja?
>> Publiek: [onhoorbaar].
>> Spreker 1: Presies.
So as ek as al die pad af hierdie manier, selfs as hierdie toestand opbrengste
Sekerlik, dit sal nog steeds die toets van die volgende twee.
Terwyl, met 'n anders-as, 'n ander verklaring, indien die een keer terug waar,
die ander is nie getoets.
Enige vrae oor wat?
Cool.
>> So gebruik jy 'n if-else van 'n ander stelling as jy weet dat dit kan net
een van hierdie gevalle.
So ons weet as x is minder as 0, dit is beslis nie gaan wees
groter as 0.
>> Volgende, 'n bousteen dat ons geleer is sirkelroetes.
Ons het drie tipes lusse.
Vir loops, terwyl loops, en doen terwyl loops.
En in die algemeen, wanneer jy gaan sit om te iets skryf, moet jy om te besluit
watter van die drie wat jy wil gebruik.
So hoe besluit ons watter een?
>> Ons oor die algemeen gebruik om 'n lus vir as ons weet Hoeveel keer wil ons Itereer
deur iets of hoeveel keer ons wil 'n taak uit te voer.
Ons gebruik terwyl loops as ons 'n paar toestand waar die gang te hou nie.
En ons gebruik nie, terwyl baie soortgelyk aan terwyl, maar ons wil ons kode uit te voer op
minste een keer.
>> So doen terwyl, wat is in die doen, sal altyd hardloop ten minste een keer.
Terwyl met die tyd, is dit mag nie hardloop nie indien die
voorwaarde is nie tevrede nie.
Enige vrae met wat?
>> So struktuur van 'n lus vir.
Julle het al gesien.
Jy inisialiseer.
Jy het 'n soort van toestand.
So, byvoorbeeld, kan ons inisialiseer as vir i gelyk 0.
Ek is minder as 10.
En ek ++.
Baie eenvoudige een wat ons gedoen het.
>> Vir 'n rukkie loop, op soortgelyke wyse, jy het 'n soort van inisialisering te hê,
'n soort van toestand, en 'n soort van werk.
So kan ons ons implementeer vir lus ook as 'n while lus gebruik van hierdie.
En net so met 'n do while lus, ons dalk 'n inisialisering het,
voer iets, werk dit, en dan gaan die toestand.
>> So nou funksies.
Ons het alles saam.
Ons wil dalk 'n paar te skryf soort funksie.
Gemeenskaplike funksie wat jy dalk reeds gesien het, is groot.
Main is 'n funksie.
Dit het 'n opbrengs tipe, int.
Dit het 'n funksie naam, hoof.
En dit het argumente, argc en argv.
So belangrikste is net 'n funksie.
>> Ander funksies wat jy kan gebruik het, printf-- printf is 'n function--
GetInt, toupper.
Maar hierdie gebeur het deur vir ons geïmplementeer
'n soort van biblioteek.
As julle onthou insluitend hierdie CS50.h biblioteek of die
standaard I / O biblioteek.
Ja, die vraag?
>> Publiek: Is hoof net inherent in c?
Is dit net 'n soort van [onhoorbaar]?
>> Spreker 1: Die vraag is As hoof is inherent in c.
En ja, al die funksies het 'n belangrike funksie.
Dit is soort van wat nodig is vir die rekenaar om te weet waar om te begin
die bestuur van die kode.
>> GEHOOR: So jy wil nie [onhoorbaar]?
>> Spreker 1: Nee
Enige ander vrae?
Cool.
So net soos jy kan 'n funksie gebruik wat vir jou geskryf het, kan jy ook
skryf jou eie funksie.
Dit is 'n funksie wat iemand dalk geskryf het die volume te bereken
van 'n Q, byvoorbeeld.
Daar is 'n terugkeer tipe hier, in hierdie geval int, ons funksie naam Q en ons
lys van parameters.
>> En let daarop dat jy die data te skryf tipe van die parameter wat jy wil
gebruik of anders die funksie nie weet watter soort
parameter moet ek aanvaar word nie.
So, in hierdie geval, ons wil 'n heelgetal as ons insette.
So hoekom sou ons wil funksies te gebruik?
>> Eerste van alles, 'n groot vir organisasie.
Hulle help breek jou kode in meer georganiseerde stukke en maak
dit makliker om te lees.
Vereenvoudiging.
Dit is goed vir die ontwerp.
As jy 'n stuk kode lees en die belangrikste funksie is regtig,
baie lang, kan dit moeiliker wees redeneer oor wat aangaan.
So as jy breek dit af in die funksies, dit dalk makliker wees om te lees.
En onthou-vermoë.
As jy 'n stuk van die kode wat die wese genoem of hardloop verskeie kere,
in plaas van herskryf wat kode 10 keer in jou belangrikste funksie is, kan jy
dit wil onthou.
En dan elke keer as jy nodig het om te gebruik wat stukkie van die kode, noem die funksie.
>> So nou as ons onthou terug te krap, Ons het ook gepraat oor 'n paar konsepte,
waarvan een is threading.
Draad is die konsep van verskeie rye van die kode
uitvoering op dieselfde tyd.
So dink terug aan die eerste dag waar Dawid gehad julle tel van die aantal
mense in die kamer.
>> In wese, wat aan die gang op is almal van julle ouens was
hardloop aparte drade.
En die drade bymekaar kom 'n soort van antwoord te kry.
Net so, in Scratch, wanneer jy verskeie sprites, kan jy
het 'n kat en 'n hond.
En hulle sal gelyktydig om hul eie skrifte.
Dit is 'n voorbeeld van stringe.
>> En die ander konsep wat bekendgestel in kras was gebeure.
En gebeure is wanneer verskeie dele van jou kode met mekaar kommunikeer.
In nuuts af, dit was toe jy gebruik om die uitsending beheer en die Toe ek
Ontvang blokke.
>> En ook in Probleem Stel 4, het ons gesien 'n bietjie van die gebeure as well.
Julle kan gebruik het die Gevent biblioteek.
En daar was 'n funksie waitForClick waarin jy wag
vir die gebruiker te klik.
En jou kliek, in hierdie geval, sou wees die geleentheid en wag vir kliek is jou
event handler.
>> En ook, die hele bestuur van jou psets en werk op jou psets, jy
dalk in aanraking kom het sommige van hierdie opdragte.
Dit is wat jy in jou getik terminale venster of wat ookal venster
wat dui op jou g wysig om, wese, opgevolg jou rekenaar.
>> So byvoorbeeld, LS lys die inhoud van 'n gids.
Maak gids skep 'n nuwe gids.
CD, verander die gids.
RM, verwyder, verwyder 'n lêer of 'n gids.
En dan verwyder gids verwyder 'n gids.
>> Publiek: [onhoorbaar]?
>> Spreker 1: Ja, seker nie.
Jammer, die vraag was as jy sou stel om hierdie
op die oneerlik vel.
Dit kan help.
As jy 'n kamer, kan jy sit dit op.
Dit is ook net oor die algemeen goed genoeg om te onthou, want as jy dit gebruik
jy dalk wil net het dit gememoriseer.
Dit sal jou lewe baie makliker maak.
Het ek jou vraag beantwoord?
>> So nou het ons gepraat 'n bietjie kortliks oor biblioteke.
Maar die twee belangrikste is dat ons het al gebruik tot dusver in die kursus is
standaard I / O en cs50.
Watter soort dinge is ingesluit in die standaard I / O biblioteek?
>> Ja, so ver ons printf gebruik.
In cs50, het ons GetInt gebruik en GetString.
En die data tipe string gebeur ook in hierdie cs50 biblioteek verklaar word.
Ons sal praat 'n bietjie meer in diepte oor hoe biblioteke werk en hoe hulle
interaksie met die res van jou kode.
Maar dit is die twee belangrikste is dat ons in kontak gekom het met tot dusver in
die kursus.
>> Tipes.
Dit is goed om te onthou hoeveel elke tipe is verteenwoordig deur of hoe
baie grepe elk van die tipe requires--
int, 4 grepe; kar, 1 byte.
Float is 4 grepe.
Wat is 'n dubbele?
>> Publiek: [onhoorbaar].
>> Spreker 1: Ja, so 'n float maar dubbel die grootte.
Wat van 'n lang?
>> Publiek: [onhoorbaar].
>> Spreker 1: OK.
Wat is 'n lang?
>> Publiek: [onhoorbaar].
>> Spreker 1: Ja, verdubbel 'n int.
Ja.
>> Publiek: [onhoorbaar].
>> Spreker 1: Long [onhoorbaar].
En dan 'n lang lang dubbel dit.
>> Publiek: Nee, nee.
'N Lang is net 'n int.
Dit hang af van die argitektuur voor die [onhoorbaar]
en int het dieselfde grootte.
[Onhoorbaar].
>> Spreker 1: So 'n lang en 'n int is dieselfde.
En dan 'n lang lang is dubbel die int.
Cool.
En dan, wat is die laaste soort?
>> Publiek: Pointer.
>> Spreker 1: Ja, so het ons geleer 'n bietjie oor wysers.
En ten spyte van wat 'n wyser is wys aan- dit kan 'n kar ster
of 'n int star--
dit is altyd 4 grepe vir 'n muis.
Vrae oor wat?
Ja?
>> Publiek: [onhoorbaar]?
>> Spreker 1: So 'n lang en 'n int is dieselfde in hierdie cs50 toestel.
>> Publiek: Die toestel is heeltemal verwissel.
>> Spreker 1: Ja.
So dan 'n lang lang dubbel 'n int.
>> Publiek: Dit is die 32 bit?
>> Spreker 1: 32 bit, ja.
>> Publiek: So [onhoorbaar]?
>> Spreker 1: Ja, as dit nie uitdruklik sê, jy
moet 'n 32 bit aanvaar.
>> Publiek: Dit sal iets sê soos die aanvaarding van 'n
argitektuur soos die toestel.
Vir 64 bit, die enigste dinge wat verandering is verlang en wenke.
Hulle het albei [onhoorbaar].
>> Spreker 1: Ja?
>> Publiek: Vraag.
So op een van die praktyk vasvrae, dit vra oor 'n ongetekende int.
So hoe sal dit bepaal word van 'n int [onhoorbaar]?
>> Spreker 1: 'n ongetekende in is ook 4 grepe.
Maar wat anders is oor 'n getekende int en 'n ongetekende int?
>> Publiek: [onhoorbaar].
>> Spreker 1: Right.
'N Mens kan negatiewe waardes verteenwoordig.
Maar hoe doen?
>> Publiek: [onhoorbaar].
>> Spreker 1: Ja, dit spaar 1 bietjie die teken te verteenwoordig.
Die onderteken het 'n bietjie wat verteenwoordig die teken.
En unsigned is net al die positiewe.
>> Publiek: OK.
So jy sê dat 'n dubbel is twee keer die grootte van 'n float?
>> Spreker 1: Double is twee keer die grootte van 'n vlot, ja.
>> Publiek: Hoe kan 'n wyser na 'n lang lang [onhoorbaar]?
>> Spreker 1: Die vraag is dus hoe die wyser na 'n lang long--
hoe is dit net vier grepe toe 'n lang lang sy 8 grepe.
So onthou wat is 'n wyser, wese, op die bak waarde.
>> Publiek: [onhoorbaar].
>> Spreker 1: Ja, so 'n wyser is net 'n herinnering plek.
So dit maak nie saak hoeveel ruimte dat wyser wys na.
Dit moet net 4 grepe om tred te hou van daardie geheue plek.
Enige ander vrae?
Cool.
>> So het die laaste ding wat ek het standaard uitset.
Jy moet hulle gereeld gebruik genoeg dat jy kan onthou.
Maar dit is wanneer ons gebruik printf, byvoorbeeld.
En ons het hierdie plekhouers wat geroep formaat kodes.
>> So persent c kar, persent i vir int, en ons kan ook gebruik persent d.
Dit is dieselfde ding.
Maar, oor die algemeen, in CS50 ons probeer persent i te gebruik.
Persent f vir float.
Persent ld vir 'n lang lang en persent s vir string.
>> Net so, het ons met behulp van 'n paar van die ontsnapping rye.
Byvoorbeeld, agteroorskuinsstreep n nuwe lyn.
Dit is net vir wanneer jy opmaak jou kode vir die gedrukte f.
Ja?
>> Publiek: Wat is persent d vir?
>> Spreker 1: Dus die vraag is wat persent d vir?
Persent d is vir ints.
Persent d en persent i is dieselfde.
>> Publiek: Wat is die verskil tussen agteroorskuinsstreep N en agteroorskuinsstreep r?
>> Spreker 1: Die vraag is wat is die verskil tussen teenreaksie N en
teenreaksie r?
Ek dink agteroorskuinsstreep r is--
>> Publiek: So agteroorskuinsstreep r net impliseer terug na die begin van die lyn
sonder eintlik gaan na 'n nuwe lyn.
So as jy druk 'n back slash r en jy gaan terug na die begin van die lyn
dan moet jy druk meer dinge, jy oorskryf die dinge wat reeds op
[Onhoorbaar].
AANGESIEN N eintlik gaan om 'n nuwe lyn en gaan na [onhoorbaar].
>> Spreker 1: Wel, enige ander vrae?
Alle regte.
Ek gaan dit aan die hand af te Dan wat sal voortgaan.
>> [Applous]
>> Dan Alle righty.
So ek sal praat oor 'n ander groot verskeidenheid van idees uit die klas wat
rofweg verteenwoordiger van week twee en die begin van die week drie begin af
met giet, wat net 'n manier van behandeling van 'n waarde van 'n sekere tipe as
'n waarde van 'n ander soort.
So kan ons dit doen met karakters te ints, dryf tot ints, en
lang verlang te verdubbel.
>> Al hierdie dinge kan as maniere gebruik word van die behandeling van sommige numeriese waarde
minus kar as 'n paar ander numeriese waarde.
So daar is 'n paar probleme met hierdie, Natuurlik, wat kom wanneer jy gooi
dinge soos float te ints.
So, dit is 'n bietjie vreemd.
Ons het 'n float wat 1,31.
Ons vermenigvuldig dit met 10,000.
En dan is ons druk dit as 'n int.
Wat doen dit uitset?
10,000 keer 1.31.
So 13.000, is dat die raai?
>> Publiek: Ek dink dit is 10.000.
>> Dan So ek vermenigvuldig dit met 10,000 voor ek gooi dit.
>> Publiek: Oh.
Sou daar nie een 9 en 'n paar 0 getalle?
>> Dan Jy kan 'n paar vreemde syfers.
So reg, dit is 1,3 keer 10,000.
So dit is 13.000.
En dit ekstra weird--
>> Publiek: 13.100.
>> Dan 13.100.
Dankie, Rob.
En dit ekstra weirdness--
hierdie 9,9--
is bloot omdat die beslissende beland afronding waar
dit moet nie.
Ja.
>> Publiek: Die beslissende gebeur na iets anders?
>> Dan So, want ek het dit in die gedrukte media, is dit doen dit vermenigvuldiging voordat dit
doen dit giet.
>> Publiek: [onhoorbaar].
>> Dan: Ek dink dit sal die eerste gooi, ja, wat sou wees 10,000.
Enigiets anders?
Cool.
So, dit is 13.099.
Hoekom gebeur dit?
Onakkuraatheid.
>> Dryf is nie volmaak nie.
Hulle kan net getalle na 'n stel sekere aantal beduidende syfers.
So as ons druk 8 sig vye aan hierdie float, kry ons 'n soort
lelike soek nommer.
En dit is omdat 1.31 kan nie akkuraat word verteenwoordig deur 'n eenvoudige
magte van twee in die masjien.
So dit eindig met die naaste raai wat eindig
'n bietjie laag.
Sin maak?
OK.
>> Nou, aangeskakel is 'n ander manier van doen voorwaardelike stellings waar al
ons omgee is 'n enkele veranderlike.
So in hierdie spesifieke voorbeeld, ons is om 'n heelgetal van die gebruiker.
En dan is ons op soek na wat dit heelgetal is.
Vermoedelik, dit se nommer tussen een en vier.
Dit is wat ons vra.
>> So jy doen 'n skakelaar van die veranderlike naam.
Dan moet jy die opstel van gevalle van moontlike waardes wat dit kan wees.
So geval ', sê dit is laag.
En dan moet jy breek om uit te kry van die skakelaar toestand so
jy gaan hou nie.
>> In die volgende case--
so geval twee en geval three--
As dit is die geval twee is dit net druppels neer te die eerste reël van die kode dit sien as met
gevallestudies drie tot dit sien 'n breek.
So die rede jy geval een net druk lae is omdat ek
hierdie break hier.
As ek sê, geïgnoreer hierdie break-- As ek gooi hierdie breakaway--
dit sou druk laag is, en dan sou dit druk middel, en dan sal dit breek.
>> So breek is 'n belangrike deel skakelaar voorwaardes en
hulle moet daar wees.
Enige gevalle wat nie uitdruklik is deur die verstek hanteer
geval in die skakelaar en gegooi moet word.
>> Publiek: 1, 2, 3, en 4 sal n wees?
>> Dan Waardes dat n kan wees.
Ja.
Ja?
>> Publiek: So wanneer jy dat [onhoorbaar]?
>> Dan Jy sal druk laag is, en dan dit sou druk middel, en
dan sou dit breek.
>> Publiek: Hoekom sou dit druk middel as [onhoorbaar]?
>> Dan So alles onder 'n geval voor 'n breek val onder.
So geval een druk is onder geval een soos hierdie volgende druk.
Ja?
>> Publiek: [onhoorbaar]?
>> Dan So hierdie nommer is net 'n bepaalde waarde wat hierdie veranderlike
kan neem nie, reg?
Maak dit sin maak?
Ja.
>> Publiek: [onhoorbaar]?
>> DAN: Ja, geval twee sou druk middel en dan breek.
>> Publiek: [onhoorbaar]?
>> Dan dink ek enige?
Wat ander data tipes kan jy oorskakel?
>> Publiek: Jy kan wissel oor enige data tipes.
Maar dit beteken net iets oor karakters en ints en dinge soos dat, omdat
As jy die skakel oor 'n muis wat nie regtig sin maak nie,
oorskakeling vragte, as dit selfs laat jy dit doen, as gevolg van drywende punt
in presisie, sou jy nie regtig wil dit in elk geval doen.
So mooi veel nie, net ints en karakters en dinge soos dat.
>> DAN: Ja, dit is wanneer jy eksplisiete waardes wat jy weet, ek dink, kan
dat 'n skakelaar is werklik nuttig.
Goed?
OK.
>> Omvang is die reeks wat 'n verklaarde veranderlike strek.
So in hierdie klein stuk van die kode wat ek het, sou dit vol foute wees.
En die rede is ek verklaar hierdie int Ek binne die bestek van hierdie lus.
En dan is ek probeer om te verwys dat i buite wat vir lus omvang.
>> So basies, kan jy dink oor die omvang as enigiets wat jy verklaar
met binne 'n stel van krulhakies net bestaan ​​binne die krulhakies.
En as jy probeer en gebruik daardie veranderlike buite die krulhakies, sal jy
'n fout van die samesteller.
Ja?
>> Publiek: So hierdie een nie werk nie?
>> Dan Dit werk nie, ja.
Strings.
String n kar *.
Hulle is presies dieselfde.
Hulle is net verwysings na karakters.
En enige snare wat jy moet eindig met agteroorskuinsstreep nul, wat net
'n C-konvensie.
>> Dit word genoem die NULL Terminator.
En NULL--
kapitaal N, kapitaal U, kapitaal L, kapitaal L--
is nie dieselfde as die NULL Terminator.
Dit is 'n wyser.
Dit is 'n karakter.
Hulle is baie duidelike.
Onthou dit.
Dit sal wees op die toets, waarskynlik.
Ek het nie gesien die quiz.
Ja?
>> Publiek: So NULL is, sê, die wyser?
>> DAN: Ja.
>> Publiek: Wat beteken [onhoorbaar]?
>> Dan As, sê, is malloc genoem wanneer jy nie genoeg geheue te kry het
wat die grootte wat jy vra vir, malloc sal terugkeer NULL.
Dit is, basies, wanneer 'n funksie is veronderstel om 'n wyser om terug te keer, het jy
nodig het om te gaan teen NULL omdat NULL is 'n mooi good--
dit is, soort van, die vullis waarde.
Dit is 'n zero sover wysers gaan.
>> Wanneer jy bel 'n funksie, wat stuur 'n wyser.
Jy gaan wil gaan om te wees seker dat wyser is nie NULL
omdat NULL is baie algemeen.
Dit is soort van 'n gemors terugkeer.
So as iets nie reg gaan nie, net terugkeer NULL plaas.
>> Publiek: [onhoorbaar]?
>> DAN: Ja, en dit is hierdie.
>> Publiek: [onhoorbaar]?
>> Dan Spel dit soos hierdie.
Dit is die NULL Terminator.
Dit is klein N-U-L-L as jy spel dit.
>> Publiek: En ek het net rug en dit getoets.
En as jy probeer om 'n drywende punt te sit waarde in 'n skakelaar, sal dit skree jy
sê, verklaring vereis uitdrukking van heeltallige tipe.
>> Dan Daar gaan jy.
Maar ja, wat was die vraag nou weer?
>> Publiek: [onhoorbaar]?
>> Dan So hoofstad N, kapitaal U, kapitaal L, kapitaal L is 'n werklike c ding.
Dit is die NULL pointer en sal net so hanteer word.
Jy sal nie ooit probeer en spel die NULL karakter en sien nie enige
ander manier as hierdie.
Ja?
>> Publiek: So terugkeer na char maksimum of iets in die notas, sou dit
verpersoonlik dieselfde funksie as [onhoorbaar]?
>> Publiek: So is jy verwys na terug kar maksimum van getChar, of
wat dit ookal is?
>> Publiek: Ja.
>> Publiek: Ja, so die algemene term vir al die dinge
is brandwag waardes.
Dus, net soos die terugkeer van int maksimum van GetInt en kar maksimum van getChar, dit is
veronderstel is om te wees, al die regte, indien hierdie dinge is terug te keer na ons,
iets verkeerd geloop het.
>> Vir wenke, ons het net gebeur het hierdie brandwag waarde wat almal
eens op.
En dit is die ding wat jy terugkeer wanneer dinge verkeerd gaan.
So kar maksimum is wat ons gebruik iets te verteenwoordig
soos NULL of getChar.
>> Publiek: So as jy die toets getChar, Jy kan net sit NULL?
Sou dit 'n verskil maak?
>> Dan Jy kan nie net kyk NULL.
Jy wil hê kar maksimum omdat die na te gaan terugkeer waarde van die funksie is
'n karakter nie 'n wyser.
Ja?
>> Publiek: Hierdie vraag vra vir die string lengte.
Is dit die NULL karakter sluit?
>> Dan: Nee
En dit is eintlik hoe string lengte weet om op te hou, want dit gaan deur
jou verskeidenheid van karakters totdat dit sien 'n NULL karakter.
En dan is dit soos alle reg, ek is klaar.
>> Publiek: [onhoorbaar] vyf?
>> Dan Hallo sou vyf wees.
Yep.
So skikkings is deurlopende blokke van die geheue.
Hulle het direkte toegang deur te sê die naam van die skikking en dan, in krullerige
draadjies, ongeag indeks jy wil gaan te, hulle kruip van nul deur
die lengte van die skikking minus 1.
>> En hulle is verklaar deur die tipe van die ding wat jy stoor in die
skikking, die naam van die skikking, en dan ongeag die omvang van daardie verskeidenheid.
So dit is 'n kar verskeidenheid van lengte ses wat hierdie waardes.
Ja?
>> Publiek: [onhoorbaar]?
>> Dan Ja.
>> Publiek: [onhoorbaar]?
>> Dan as jy het wat gaan in die skikking reeds gemaak het.
So kan jy hierdie spesifiseer plaas as, sê, kar, wat ook al die naam van jou
skikking is, leë hakies gelyk krullerige stut H komma E komma L komma L komma
O komma NULL karakter en krullerige stut.
Dit sou ook werk as 'n verklaring.
>> Publiek: [onhoorbaar]?
>> Dan Dan moet jy 'n die grootte wat reeds gemaak is.
>> Publiek: [onhoorbaar]?
>> DAN: Ja.
Alle righty.
Command line argumente is 'n manier om om insette van die gebruiker as
argumente na.
Main neem twee argumente.
Die aantal argumente wat tans geslaag langs die command line en 'n
string vektor of 'n string array van al die argumente.
>> So as ek, sê, die sogenaamde 'n funksie soos 'n dot uit 1 ruimte, 2 ruimte, drie,
argc sou wees 4.
En die argv 0 sal 'n punt uit te wees.
Argv1 sou wees 1.
argv2 sou wees 2 argv3 sou wees 3, in hierdie spesifieke geval.
Ja?
>> Publiek: [onhoorbaar]?
>> DAN: Die laaste element in die skikking omdat die skikking is lengte argc plus
een van ARGB, die laaste element is die NULL pointer.
Dit is argc plus 1.
So in die geval dat ek net sê, dit sou argv word 0 is 'n dot uit.
argv 1 is 1 argv2 2 is argv 3 is 3.
argv 4, wat een groter as argc sou nul.
>> En dit is die NULL pointer.
Ja.
En dit is omdat string is 'n kar ster is 'n wyser.
So het dit dieselfde soort te wees.
Ja?
>> Publiek: Twee vrae.
So een, wat is die verskil tussen hierdie en ander as een tipe GetString
in die gebruiker enjin?
En twee, is dit binne gestoor jou onlangse geheue?
Dus, net soos, GetString sou wees [onhoorbaar]?
>> Dan Waar word dit gestoor?
Ek weet nie waar dit geberg word.
>> GEHOOR: So, eintlik, jy weet hoe om 'n funksioneer jy noem dit is argumente
word in die stapel gestoor?
So argc en argv argumente na en hulle is op die stapel, of werklik
net bokant wat jy dink as die begin van die stapel.
Wat was die ander deel van die vraag?
>> Publiek: So, wat is die [onhoorbaar]?
>> DAN: Ja, dit is net 'n ander manier om insette van die gebruiker.
Hierdie een is effens meer doeltreffend en dit is eenvoudiger vir skrifte omdat jy
kan net argumente slaag om jou hoof funksie eerder as om te wag
vir gebruikers as jy nie het nie enige gebruikers.
>> Publiek: En ja, kry snare sou wees [onhoorbaar].
Dit sou die dinge wat jy nodig het om te stoor.
>> Dan Ja?
>> Publiek: [onhoorbaar]?
>> DAN: Ja, argv 0 sluit altyd die dot streep van die funksie oproep.
Ja?
>> Publiek: [onhoorbaar]?
>> DAN: Ja, elkeen van die argumente geëindig in NULL karakter omdat hulle
is snare.
>> Publiek: [onhoorbaar]?
>> DAN: Ja, argv argc is 'n NULL pointer.
>> Publiek: [onhoorbaar]?
>> Dan O ja.
Ja, jammer.
>> Publiek: So [onhoorbaar]?
>> Dan So die vraag is of jy het die command line dot streep 'n dot uit 1, 2,
sou die aantal command line argumente wees twee of sou dit drie?
>> Publiek: Ek dink dit maak nie regtig saak nie.
Ek is geneig om te sê, o, jy nie geslaag het nie command line argumente toe,
natuurlik, jy het die funksie.
So ek is geneig om vokaal sluit die funksie van die opdrag lyn
argumente, selfs al is dit ingesluit in argv.
>> Dan Maar as dit was op die test--
yeah-- en ook as jy iets sê soos argc gelyk aan 3,
jy is in veilige staan.
Ja?
>> Publiek: [onhoorbaar]?
>> Dan: Ek dink as in plaas van die roeping van hierdie in argc en string argv hakies
maar het dieselfde tipes en net genoem hulle iets anders soos 'n
en b, sou dit nog steeds werk?
En dit sal nog steeds werk, jy sou just--
in plaas van die gebruik van argc-- jy wil gebruik om 'n en b.
Ja?
>> Publiek: [onhoorbaar]?
>> Dan So die vraag is GetString is gaan geheue in die hoop om te stoor
omdat GetString is char *.
Dit slaan geheue in die hoop, want dit roep nou malloc binne die werklike
implementering van GetString.
OK, wat op.
>> Sekuriteit.
So werklik veilig te wees, jy vertrou op geen een en jy toelaat dat niemand toegang tot enige
van jou inligting, wat is die rede waarom almal bou hul eie masjiene,
hul eie bedryfstelsels, al hulle programme van nuuts af, en natuurlik
nie koppel aan enige ander masjiene via die internet.
So rekenaars is onseker.
Hulle werklik is.
Ons het ander mense te vertrou.
>> En die idee van sekuriteit is dat jy probeer om die bedrag van te beperk
vertroue wat jy nodig het.
En een van die maniere wat jy doen is deur middel van kriptografie.
Kriptografie is, in wese, ons het geheime.
>> Soms het ons ons geheime te slaag saam deur, sê, die internet of
ander dinge.
En ons wil nie mense hierdie geheime te leer ken.
So ons enkripteer ons geheime in 'n manier wat ons hoop niemand kan uitvind.
>> So ons used--
deur die loop van hierdie class--
dinge soos Caesar cipher en [Onhoorbaar], wat beide baie, baie
onseker maniere versleutelen dinge.
Hulle is maklik om uit te vind wat hulle is en wat jou geheime is.
Die werklike wêreld gebruik baie meer ingewikkelde enkripsie skemas.
En ons sal nie in veel meer as dit.
>> Debugging.
GDB is die beste.
Ek gaan om dit weer beklemtoon.
Gebruik GDB al die tyd elke tyd wat jy het 'n probleem.
Opdragte wat is nuttig in GDB is breek, wat jy óf 'n lyn te slaag
nommer, 'n funksie naam, wese Waar in jou kode wat jy wil om te stop,
en in staat wees om beheer te neem.
>> Druk neem 'n veranderlike en druk uit wat dit ook al veranderlike is op daardie
punt in jou uitvoering.
Volgende beweeg jou uitvoering langs een stap.
En stap stappe in 'n funksie in jou uitvoering.
>> Ander dinge hardloop, en dit is hoe jy self jou kode.
Gaan voort neem al die stappe wat nodig is te kry om die volgende breekpunt.
En daar is baie, baie ander.
Kyk hulle.
Hulle is groot.
Ja?
>> Publiek: [onhoorbaar]?
>> DAN: Ja, wat is 'n debugger.
So 'n debugger is 'n program wat kan jy ontfout jou program.
Dit is nie 'n program wat bevind foute vir jy sal al die groot wees.
>> En die laaste vir my is soek.
So het die tipes soek dat ons gepraat oor in hierdie klas is lineêre soek,
wat is net dat jy kyk deur elke element van die soek spasie, een
element op 'n slag, totdat jy weet wat jy soek, of totdat jy bereik
die einde van jou soektog ruimte waarteen wys jy sê dat jy nie kan vind
die element wat jy soek.
En dit neem om die beste konstante tyd, wat is 0 van 1 en op die ergste lineêre
tyd, wat is 0 van n.
>> Binêre soek, wat nodig ongure elemente.
Jy gaan na die middel van jou elemente, sien as die element wat jy soek
is groter of kleiner as die element dat jy teen die middel.
Dit is dit groter, jy sê dat die onderste van jou soektog ruimte is jou
huidige ligging, die middel, en jy begin die proses.
As dit kleiner, jy kyk sê dat the-- ja, wat gaan aan?
>> Publiek: [onhoorbaar]?
>> DAN: Ja.
Enige soort van soort wat is geleer is in die klas is fair game vir die toets.
>> [Gelag]
>> Dan En die feit dat jy nie het om dit te doen vir 'n probleem stel, is dit regverdig
spel vir die toets.
>> Publiek: Kan ons gaan oor dit hoe aan-
>> DAN: Dit sal weg wees oor.
>> Spreker 2: Die werklike kode vir [Onhoorbaar] is op study.cs50.net.
So as jy kyk na die praktyk probleem in die merge soort bladsy van
study.cs50.net, daar is die kode vir die implementering saamsmelt soort.
So jy hoef nie te implementeer dit self vanaand.
Maar maak seker dat jy dit verstaan ​​eerder as net memoriseer dit.
>> Publiek: [onhoorbaar]?
>> Spreker 2: Die merge soort bladsy op study.cs50.net, daar is 'n praktyk
probleem dat, as jy deur die klik probleem, aan die einde is daar 'n
oplossing, wat is die merge soort implementering.
Maar maak seker dat jy dit verstaan eerder as om net te memoriseer dit
of kopiëring dit af.
>> Publiek: En 'n volkome geldige probleem vir die eksamen sou wees
iets soos hier is 'n lys.
Wat beteken hierdie lys lyk na een stap van keuses soort of
voeg soort of wat ook al.
Een volle iterasie van die lys.
So selfs as jy nie eindig hoef te kode vir dit, moet jy om dit te verstaan
genoeg om te weet hoe dit gaan word die wysiging van die skikking.
>> Dan Dit is dit vir my.
>> [Applous]
>> LUCAS: Hey almal.
My naam is Lucas.
Ek gaan om te praat oor rekursie, al die soort wat ons geleer het, en 'n
bietjie van alle wysers.
OK?
So eerste van alles, rekursie.
Wat beteken dit om te sê dat 'n funksie is rekursiewe?
>> Publiek: Oproepe self.
>> LUCAS: OK, noem hom, ja.
Dus, net soos die foto, byvoorbeeld.
Dit is soos die foto van die binnekant van 'n foto en so aan.
So byvoorbeeld, kan jy have-- as Dan wat praat oor binêre soek.
Een manier waarop binêre soek is rekursiewe, is die feit dat jy
probeer om 'n getal te vind.
So jy gaan na die middel.
En dan moet jy kyk of die getalle daar in die linker-en in die regte.
>> En dan as jy uitvind die getal gaan wees op die linkerkant, dit is dieselfde
ding as wat die weer soek, maar net aan die linkerkant van die lys.
So dit is hoe dit klink soos dit is rekursiewe.
So dit is waarom jy ouens het rekursiewe oplossing vir merge soort.
>> OK, so hier is 'n voorbeeld.
So kom ons sê dat ek wil hê om van te kies al die getalle van 1 tot n.
Ek kan besef dat die som van die n getal is n plus n minus 1 tot 1.
Maar dan, as ek kyk na n minus 1 plus N minus 2 plus 1, dit is dieselfde
iets soos optel nommers tot N minus 1.
So ek kan die som van 'n gelyke bedrag sê gelyk N plus die bedrag van N minus 1.
Maak dit sin maak?
>> En ek het ook iets anders wil hê genoem die basis geval, en dit is dat
die som van die getalle tot nul sou nul wees.
So gou as ek by die aantal nul, stop ek tel.
Maak dit sin maak?
>> So hier is 'n voorbeeld van hoe Ek kan implementeer nie.
So ek het hierdie funksie in 'n paar.
Dit neem 'n heelgetal n.
So hier is ek eers kyk of N is minder of gelyk is aan nul.
So as dit is minder of gelyk is aan nul, ek terugkeer nul, wat is ons basis geval.
Anders, ek kan net weer n plus die som van die getalle van
een tot n minus een.
Sin maak?
OK.
>> So hier is wat dit lyk.
Jy het som van 2 gelykes 2 plus die som van 1.
En sommige van 1 is 1 plus die som van 0, wat is 0.
Sin maak?
So as ons kyk na die stapel van jou program, dit is wat dit lyk.
>> Eerstens, ons het die hoof funksie.
En dan is die belangrikste funksie genoem som 2.
En dan som 2 gaan om te sê, o, som 2 is gelyk aan 2 plus die som van een.
So voeg ek som van 1 tot die stapel.
En die som van 1 gaan som van te bel 0, wat ook gaan word bygevoeg
aan die stapel.
En dan elkeen van hierdie kinders wat op die top van 'n ander het om terug te keer
voor die ander kinders kan gaan hou.
>> So byvoorbeeld, hier, som van 0, eerste, gaan terug 0.
En kies dan som van 1.
Dan som van 1 gaan terug 1 tot som van 2.
En ten slotte, is som van 2 gaan om terug te keer na die hoof 3.
Maak dit sin maak?
>> Dit is baie belangrik om te verstaan ​​hoe die stapel werk en probeer om te
sien of dit sin maak.
OK, so sorteer.
So hoekom is sortering belangrik, eerste van almal?
Hoekom moet ons omgee?
Enigiemand?
Gee my 'n voorbeeld?
Ja?
>> Publiek: [onhoorbaar].
>> LUCAS: Ja, OK.
So kan jy meer doeltreffend te soek.
Dit is 'n goeie manier.
So, byvoorbeeld, het ons 'n baie dinge, eintlik, in ons lewens wat
gesorteer.
Byvoorbeeld, woordeboeke.
>> Dit is baie belangrik om al die te hê woorde in 'n soort van orde dat ons
kan maklik toegang tot.
So dit is wat hy gesê het.
Jy kan meer doeltreffend te soek.
Dink net hoe moeilik dit sou wees om 'n ' woordeboek waarin die woorde in
ewekansige volgorde.
Jy sal hê om na te kyk, redelik baie, elke enkele woord totdat jy die
woord wat jy soek.
>> As jy met behulp van Facebook, ook as jy kyk na jou vriende, jy
gaan om te sien dat Facebook sit jou nader vriend is op die top van die kinders
dat jy nie te praat nie veel nie.
As jy gaan al die pad na die onderkant van jou vriend lys, jy gaan om te sien
mense wat jy waarskynlik nie eens onthou dat jy vriende met.
En dit is omdat Facebook vorme vriende op grond van hoe
sluit jy aan hulle.
>> So organisering van data.
Ook Pokemon.
So jy sien dat al die Pokemons nommers.
En dit is soos 'n maklike wyse van toegang tot inligting.
>> Publiek: Toegang Pokemon.
>> LUCAS: Ja.
>> Publiek: [onhoorbaar].
>> LUCAS: Yep.
OK, so seleksie soort.
Seleksie soort gaan die te kies kleinste ongesorteerde waarde van 'n lys elke
tyd in elke iterasie.
Dit is soort van soos die soort wat jy doen in jou kop wanneer jy probeer om te
sorteer 'n lys op die hand.
>> Kortom, alles wat jy doen, is jy kyk vir die kleinste getal.
Jy het dit in die gesorteerde lys.
En dan moet jy kyk vir die volgende kleinste getal.
En dan moet jy hou doen dat en so aan.
>> So seleksie soort is basies wat jy Kies elke keer die kleinste
ongesorteerde waarde.
Sit aan die einde van die gesorteer deel van die lys.
En hou om dit te doen.
So laat ons gou sien wat dit lyk soos.
So hier is die gesorteer en ongesorteerde lys.
>> So vir die gesorteer lys, dit is aanvanklik leeg.
En dan gaan ek die te kies kleinste getal hier, wat is 2.
So kry ek die nommer 2 en ek in die voorkant van die lys.
En dan kyk ek vir die volgende kleinste element, wat is 3.
So ek het dit aan die einde van die lys gesorteer.
En dan het ek hou om dit te doen.
Ek vind 4 en sit dit aan die einde.
Vind 5 en sit dit aan die einde.
>> En kyk hoe al daardie tye wat Ek sê dit aan die einde is,
basies, uitruiling twee waardes.
OK?
En dan is die laaste een, jy moet net het nog 'n element.
So dit is reeds gesorteer.
>> OK, so voeg soort.
Invoeging soort jy gaan ook ' dat die ding dat hy 'n gesorteer en
'n ongesorteerde lys.
Die enigste ding is dat elke keer wat jy 'n element is wat bydra tot die gesorteer
lys, jy net kies die element wat is in die voorkant van die ongesorteerde lys.
En dan gaan jy vind wat posisie in die gesorteerde moet wees
deel van die lys.
>> Kom ons kyk wat dit is, sodat dit maak meer sin.
So aanvanklik, byvoorbeeld, ek probeer die nommer drie in te voeg in die
gesorteer deel van die lys.
So het die lys nie iets.
So ek kan net die nommer 3.
>> Nou wil ek die nommer 5 te voeg die gesorteerde deel van die lys.
So ek kyk na die nommer 5.
Ek sien dat dit is groter as 3.
So ek weet dat dit moet na 3.
So ek het 3 en 5.
>> Dan wil ek die nommer 2 in te voeg.
Ek sien dat die nommer 2 is eintlik hou dan beide 3 en 5.
So ek het eintlik al die te sit manier in die begin van die lys.
So ek moet, soort, skuif al die elemente in die lys gesorteer so kan ek
kamer maak vir die nommer 2.
>> Dan sien ek die nommer 6.
Ek sien dat dit behoort te wees na 5.
So het ek dit daar.
En ten slotte, ek kyk na die nommer 4.
En ek sien dit moet tussen 3 en 5.
En dan het ek het dit daar en verskuiwing al die ander elemente.
Sin maak?
>> Borrel sorteer.
So borrel soort is basies wat jy gaan do-- ons noem dit borrel
soort, want jy gaan deur middel van die list-- dit is eintlik beter as ek net wys
jy wil this--
en jy gaan om te vergelyk aangrensende nommers.
En jy gaan om te ruil hul posisies as hulle nie
in die regte volgorde.
>> So basies, wat gaan gebeur, is hier, byvoorbeeld,
jy het 8 en 6.
Jy weet dat die gesorteerde volgorde sal eintlik 6 en 5, reg?
So jy gaan die bestellings te ruil.
Dan sien ek 8 en 4 hier.
En ek doen dieselfde ding.
Ek ruil weer.
En uiteindelik, 2 en 8.
Ek het ook ruil hulle.
>> Dit is bekend borrel sorteer want na elk van hierdie iterasies, eintlik,
die grootste getal in die lys kry al die pad na die einde van die lys.
Maak dit sin maak?
Want dit hou uitruiling dit en beweeg dit na die regte.
>> OK, so dit is die tweede iterasie.
Dit sou dieselfde ding wees.
Ek sal een omruil doen en dan is die laaste een.
Ek dat daar is geen swaps en die lys is gesorteer.
So in borrel sorteer, ons basies hou gaan deur die lys en uitruiling
dinge totdat ek agterkom dat ek nie gedoen het nie enige swaps doen iterasie, wat
beteken dat die lys is reeds gesorteer.
Sin maak?
>> Kom ons praat 'n bietjie oor die uitvoer van die tyd.
So julle ouens onthou Big nie O, Omega, en Theta?
Ja?
OK, wat Big O, die eerste van alles?
>> Publiek: [onhoorbaar].
>> LUCAS: Ja, dit is bekend as 'n ergste geval runtime, wat net beteken dat dit
hoeveel jy verwag dat die program te neem om te hardloop.
Soos in terme of--
in hierdie case-- n.
Die aantal elemente in die lys in die ergste geval.
Soos in die ergste moontlike geval.
>> So vir borrel sorteer, byvoorbeeld, Ons het groot O van n vierkant.
Hoekom moet ons dit?
Hoekom is borrel sorteer Big O N vierkant?
>> Publiek: [onhoorbaar].
>> LUCAS: Ja, so die ergste geval sal wees dat ek sal moet n iterasies te doen.
So elkeen van die iterasies gaan bring die grootste element tot die einde
van die lys.
So het die ergste geval is dat ek ' dat die ding n keer te doen.
En vir elkeen van daardie tyd, ek het om te doen n swaps, want ek het te vergelyk
elke twee elemente.
So dit is waarom dit is n vierkant want dit is n keer n.
>> Dan, seleksie soort is ook n vierkant want vir elke iterasie, ek het om te
kyk na elke enkele element in die lys.
En dan vind die kleinste, wat beteken dat ek moet
kyk deur n elemente.
En ek het om te doen wat n keer omdat Ek het al die elemente N te kies.
>> 'N invoeging soort is ook n vierkant omdat die ergste geval scenario sal
wees, een, ek het om te voeg N nommers, reg?
So ek weet reeds dat ek gaan N iterasies te hê.
Maar vir elkeen van dié nommers, as ek om te kyk na al die getalle in
die gesorteerde lys en dit al die pad aan die voorkant, sal dit n vierkant
want dit sal n keer n weer.
Sin maak?
Wat van omega?
>> Publiek: [onhoorbaar].
>> LUCAS: Dit is die beste scenario.
So dit is soos, in 'n baie keer vir sorteer, die beste geval is
Wanneer die lys is reeds gesorteer.
So jy het nie regtig om iets te doen.
Borrel sorteer die beste scenario van n.
Weet julle hoekom?
>> Publiek: [onhoorbaar].
>> LUCAS: Ja, as jy hou van of data rantsoen het enige swaps of
nie, as jy iets soos gestel waar as daar was 'n herhaling, indien die
lys is reeds gesorteer, basies, wat gaan gebeur, is Ek gaan
probeer om elke twee te ruil aangrensende elemente.
Ek is van plan om dit te sien daar is geen ooreenkomste.
En ek het net dadelik terug te keer.
>> So dit beteken dat ek net moes gaan deur die lys een keer.
So dit is n omdat ek sien op n elemente.
Hoekom seleksie soort N vierkant?
>> Ja, selfs al is die lys is gesorteer, vir elke iterasie van seleksie soort, ek
die minimum element te kies.
So dit beteken dat ek het om uit te kyk na al die elemente in die ongesorteerde
lys en vind die minimum vir elke iterasie.
Maak dit sin maak?
>> En voeg swaard, want N in die geval dat ek probeer om die te voeg
getalle en al die getalle, toe ek probeer om hulle te voeg, ek sien dat hulle
is in die regte posisie.
Ek het nie om te gaan kyk al die ander getalle in die ongesorteerde lys.
So dit is hoekom dit n sal wees nie.
Sin maak?
En wat is theta?
>> Publiek: [onhoorbaar].
>> LUCAS: Wat, jammer?
Sê dit weer.
>> Publiek: [onhoorbaar].
>> LUCAS: Presies.
Sodat jy kan sien dat slegs seleksie gestoor in Merge soort het thetas.
En dit is omdat jy net theta indien beide Big O en Omega is dieselfde.
OK.
En uiteindelik, saam te smelt soort in log n.
>> En dan, as Dan het gesê, Merge soort is 'n soort van soos die dieselfde manier wat
jy doen binêre soek.
So kry jy die lys.
En jy gaan in die helfte gesny.
En dan moet jy sny hulle in kleiner helftes.
En dan moet jy hulle saamsmelt.
Julle onthou dat, reg?
OK, as hy sê nie.
>> OK, wysers.
So, wat is 'n aanduiding?
>> Publiek: [onhoorbaar].
>> LUCAS: 'n adres.
OK.
Ek weet dat Dawid toon 'n klomp van die videos van binky en dinge te wys
mekaar.
Maar ek wil om te dink van wysers as bloot 'n adres.
So dit is 'n veranderlike wat gaan 'n adres te stoor.
>> So dit is net hierdie spesiale veranderlike wat vier grepe lank.
Onthou, dat wyser na enigiets altyd vier grepe lank vir ons 32-bit
masjien so in die geval van die toestel.
En dit is net oor die plek van 'n veranderlike binnekant van dit.
>> OK, so daar is die geheue, basies.
So elke blok van die geheue het eintlik 'n etiket, wat is die adres van die
slotty geheue.
So dit beteken dat ek kan 'n wyser wat verwys na
enige van hierdie adresse.
So die rede hoekom ons wenke sal gebruik is As ek die plek om te onthou
dat 'n spesifieke veranderlike is 'n geheue.
>> En julle onthou dat een van daardie gevalle was as ek 'n funksie
As ek eintlik wil hê jy moet ruil vir reale, het ek eintlik
'n wyser te stuur.
Nie die veranderlike.
Het jy ouens onthou dat?
Die verskil between--
wat is die naam?
Oproep deur waarde en roep deur verwysing, reg?
>> OK, ja.
So noem waarde.
Wanneer jy stuur 'n veranderlike te funksioneer jy net die stuur van 'n waarde.
So jy is eintlik die stuur 'n afskrif van die veranderlike.
En jou program kon nie minder omgee oor as dieselfde veranderlike eintlik
maak 'n kopie.
>> En roeping deur verwysing beteken dat Ek is eintlik die stuur van 'n afskrif van die
wyser na daardie veranderlike.
So dit beteken dat ek die stuur van die plek van daardie veranderlike.
So voel ek die plek van die veranderlike, wanneer ek noem die funksie
met wysers, ek is in staat om werklik verander die data wat in die belangrikste.
Sin maak?
>> Alhoewel, die wyser is 'n afskrif, die wyser het nog steeds die regte adres van
die veranderlike wat ek wil verander.
Sin maak?
>> So skep wysers.
Onthou, die wyser altyd die tipe wat dit is wys
te en dan 'n ster.
En dan sit jy die naam.
So onthou dat wanneer jy watter ster, dit is soos 'n verwysing na
dat alles wat veranderlike tik wat jy gehad het.
>> So hier in ster, byvoorbeeld, is dit 'n wyser en 'n heelgetal.
En dan kar ster is 'n aanduiding kar ster en so meer.
Ja?
>> Publiek: Wat as ons 'n wyser na N te ster x.
Ek weet wat 'n wyser na x.
Is dit ook verklaar x 'n heelgetal?
>> LUCAS: OK, so as jy sê n ster x, jy nie die skep van 'n verwysing na 'n
veranderlike x.
Jy maak 'n wyser vernoem x.
>> Publiek: [onhoorbaar].
>> LUCAS: So as ek sê n ster x, ek is sê, hey, in die geheue, ek gaan om te
kry een van hierdie drie bokse.
En ek gaan om te sê dat gaan x te wees, wat
gaan 'n wyser te wees.
En iets interessant oor wysers is dat ons sê dat hulle
4 grepe vir 'n 32-bit masjien.
En die rede daarvoor is omdat 4 grepe 32-stukkies.
>> En masjiene wat 64 stukkies eintlik het wysers adresse
wat 64 stukkies lank.
So dit beteken net dat die grootte van die adresse in die masjien is anders.
>> So verwysings en Dereferencing.
Daar is twee operateurs wat Julle moet onthou.
Die eerste is ampersand.
Die tweede is sterre.
Moenie deurmekaar raak deur die sterre en hierdie star want onthou, in
hierdie geval, jy het n ster.
>> Dit is soos 'n hele ding saam.
Daar is geen ruimte n ster.
So dit beteken dat dit is die tipe.
Onthou dat wanneer jy die veranderlike ster, jy
praat oor die tipe.
>> Wanneer jy net sterre en dan die naam van die veranderlike, beteken dit dat
jy die wyser, is dereferencing wat beteken dat jy kyk na die
wyser, die vind van die adres dis gewys het, gaan na die adres,
en kyk na wanneer jy is daar.
So ek vertel my studente dat wanneer jy ster, moet jy dink dat dit
die afkorting van die inhoud van.
>> So as jy 'n muis en jy doen ster wyser, dit is die
inhoud van die wyser.
So jy gaan na wat ookal dit is wys om te en kyk na die voortdurende inhoud.
En die ampersand is dieselfde ding as adres van.
>> So as ek 'n veranderlike a-- soos, laat sê dat ek het 'n int gelyk 3--
as ek wil die adres van daardie te vind veranderlike 'n herinnering, ek kan net nie
en-teken a.
So dit is adres van 'n.
Sin maak?
>> So hier is 'n voorbeeld.
Dit ontbreek int b en int c.
So int n gelyk 3 beteken dat Ek gaan om te gaan na die geheue.
En ek gaan 'n slot te vind en sit die nommer 3 hier.
>> En dan int b is gelyk aan 4.
Ek gaan dieselfde ding om te doen.
Gaan na geheue en sit 'n aantal 4 in een van die bokse.
En int gelyk 5.
Vind nog 'n boks en sit 'n nommer 5.
>> So, wat is hierdie lyn doen nie? N ster pa gelyk ampersand a.
So eerste van alles, n ster pa.
Wat is dit?
>> Publiek: [onhoorbaar].
>> LUCAS: Ja, so n ster pa, die eerste, verklaar 'n wyser genoem pa.
En dan is dit die toeken van die waarde van dat wyser om die adres van 'n te wees.
So-teken a.
Dan, as ek dit doen ster pb, Wat is 'n ster pb?
>> Ag, jammer.
Dit word ook vermis. N ster pb.
Ek bedoel ster rekenaar.
Ek is so jammer.
Dit is dieselfde ding.
Maar nou is ek 'n goeie artikels skep 'n wyser na B ​​en dan 'n verwysing na c.
Ja?
>> Publiek: [onhoorbaar]?
>> LUCAS: Ja.
So as jy gaan na die geheue en jy gaan die boks wat aanwyscr vir pa,
jy eintlik gaan om te sien 'n adres van 'n.
OK?
Ja?
>> Publiek: [onhoorbaar]?
>> LUCAS: Ja, wyser is 'n adres.
Nooit vergeet nie.
Dit is soos die belangrikste deel oor wysers.
Daar is die stoor en adres sommige veranderlike.
Enigiets anders?
Enige ander vrae?
OK.
>> So wysers en skikkings.
Onthou dat wanneer ek doen int skikking 3, basies, wat ek doen is ek is, soort
van, verklaar in 'n wyser.
So skikking is soort van soos 'n verwysing na 'n spesifieke plek in die geheue waarin ek
toegeken drie posisies vir heelgetalle.
Maak dit sin maak?
>> So wanneer ek doen int skikking 3, wat ek doen, basies, is die skep van drie
slots in die geheue.
So het ek net vind drie posisies in die geheue.
So as ek dit doen, dan, 'n ster skikking, dit basies beteken die inhoud van skikking,
wat beteken dat ek vee die wyser, ek gaan na die plek wat dit is wys om,
en ek het die nommer een.
>> En dan, as ek dit doen ster verskeidenheid plus 1, dit is dieselfde ding as om skikking
inperk een, wat net beteken dat ek gaan na die plek wat dit is wys.
En dan is die plus 1 fabrikate my skuif een posisie.
So ek gaan na hierdie posisie, eintlik, en sit die nommer twee.
>> En dan, uiteindelik, wanneer ek verskeidenheid plus 2, ek gaan na die plek waar
skikking is wys.
En dan beweeg ek na die geheue blokke.
En dan het ek die nommer drie hier.
Ja?
>> Publiek: So ster skikking is eenvoudig sê die heel eerste punt.
En jy kan voeg 1, net omdat ons is eintlik net
verwysing dat die eerste adres.
>> LUCAS: Ja.
Hoekom moet ons, byvoorbeeld, sê skikking 0, 1 verskeidenheid, en verskeidenheid 2?
Ek sê, hoekom doen jy 0, 1, 2, 3 in plaas van 1, 2, 3?
Een van die redes is, een, rekenaar programmeerders verkies om te begin
tel van 0.
Twee is omdat wanneer jy dit doen skikking 0, dit is dieselfde ding as om skikking
plus 0, wat beteken dat ek gaan na daardie posisie, en ek doen nie
slaan 'n geheue blokke.
So ek geen geheue blokke te beweeg nie.
Ja?
>> Publiek: [onhoorbaar]?
>> LUCAS: So vra sy wat die verskil tussen die doen
hierdie of doen malloc.
Een van die verskille is dat int skikking 3 is die skep van 'n
skikking op die stapel.
En wanneer ek malloc, dit skep op die hoop.
Maak dit sin maak?
>> So hoe malloc eintlik werk?
So hoekom ons selfs hoef malloc te gebruik?
Jou samesteller soort figure uit alle die veranderlikes wat jy verklaar.
En hy skep ruimte vir alle van hulle in die stapel.
So al jou veranderlikes gaan iewers in die stapel te wees.
So hier is die omgewing veranderlikes.
>> So basies, ruimte vir daardie veranderlikes in die geheue is toegeken aan
stel tyd.
So beteken dit dat jou rekenaar al daardie veranderlikes te ken
vooraf.
Dit hoef nie te weet watter waarde jy gaan om te sit in hulle.
Maar dit moet weet hoe veel geheue wat jy nodig het.
>> Maar nou kom ons sê dat, byvoorbeeld, jy skep 'n skikking of die neem van 'n
string wat jy neem van die gebruiker.
Jy weet nie hoe lank die string gaan wees, byvoorbeeld.
So jy weet nie presies hoeveel geheue blokke jy ken, reg?
>> So dit maak nie regtig sin maak nie vir julle te sê het 100 karakters.
En dan, wat as die gebruiker skryf 150?
Jy gaan geskroef word.
>> So basies, kan jy nie seker is van hoe wees veel geheue wat jy hoef te ken
wanneer jy die program saamstel.
Jy weet net dat op loop tyd.
So dit is waarom jy het die hoop.
So het die hoop gaan geheue te hê dat jy die toekenning tydens die
duur van die program loop.
>> So basies, as jy nie malloc, wat jy doen is die toekenning van geheue
runtime, wat beteken dat jy besluit op daardie oomblik dat jy
moet daardie geheue.
So dit is wanneer jy die toekenning van dit.
Maak dit sin maak?
>> So onthou, die stapel het veranderlikes wat geskep word op kompilering.
En dan is die hoop het veranderlikes wat geskep word as jy gaan
met malloc, byvoorbeeld.
>> Publiek: [onhoorbaar]?
>> LUCAS: So GetString is gaan malloc te bel.
Laat my praat oor malloc, en Ek sal verduidelik GetString.
So malloc is dieselfde ding as die toekenning van geheue.
So dit gaan toe te ken geheue op die hoop.
En dit gaan 'n wyser terug te keer na waar dat die geheue is toegeken aan.
>> So wanneer jy do--
hier vir example--
N ster wyser.
En dan wyser gelyk malloc grootte van duim keer 10.
Ek skep 'n wyser.
En dan is ek toeken wat wyser te die waarde van die wyser wat malloc
gee my nie.
>> So ek vra malloc kan jy ken ruimte vir 10 heelgetalle.
Dit is wat dit sê.
En malloc gee my terug 'n wyser na daardie plek.
Sin maak?
OK.
Ek En GetString is, basies, besig met 'n roep malloc, sodat jy kan wys
geheue tydens looptyd.
>> Altyd onthou om te kyk vir null omdat malloc gaan null om terug te keer
indien dit nie geheue toeken.
Kom ons sê dat jy vra vir 'n belaglike bedrag van die geheue.
Jou rekenaar is nie van plan om te wees staat wees om te veel toeken.
>> So malloc net gaan om terug te keer null.
Onthou So altyd om te kyk of die wyser wat jy het gekry van malloc is
nul of nie, want as dit is, kan jy word dereferencing 'n wyser en
veroorsaak kant foute.
En uiteindelik, nie vergeet jou vrye geheue.
>> Malloc skep geheue in die hoop.
En jy het die geheue te bevry voordat die program eindig.
OK, dit is al wat vir my.
Jammer, Rob.
Dankie.
>> [Applous]
>> LUCAS: Enige laaste vrae voor Rob kom?
Nee?
Ja?
>> Publiek: Ek het nie gesien hierdie een aanlyn.
Het jy dit opgelaai nie?
>> LUCAS: Ek dink Dave is laai dit gou.
>> DAVE: Dit sal gepos word.
>> LUCAS: Dit sal wees aanlyn.
>> Publiek: Dit is aan.
>> LUCAS: Dit is nie?
OK.
Ja?
>> Publiek: [onhoorbaar]?
>> LUCAS: Ja, moet jy bevry al die geheue wat sit in die hoop.
>> Publiek: [onhoorbaar]?
>> LUCAS: Ja.
Enige tyd wat jy het 'n kultuur malloc, jy moet 'n kultuur gratis hê
nadat jy ophou met behulp van die veranderlike.
So malloc en gratis is altyd saam.
Hul beste vriende.
Ja.
Rob?
>> ROB: Ek sal gou gaan.
En ook die video sal opgesit word.
Ek het die mic op.
>> OK, so week vyf dinge.
Eerste ding wat ons het, is die stapel.
So onthou dat daar net een stapel raam per aktiewe funksie oproep.
Ons sal sien dat in 'n tweede.
En onthou ook wat eintlik gaan in elke stapel raam gaan wees
die plaaslike veranderlikes van ons funksies, die argumente wat geslaag het, word in ons
funksies, saam met 'n paar ander dinge wat jy nie regtig
hoef te bekommer oor.
>> So hier is 'n voorbeeld program waar kennisgewing, is hoof printfing die terugkeer
waarde van cat 4.
cat net gaan die terugkeer waarde van maat 4 komma 6.
En bar gaan 'n paar plaaslike te stel veranderlike n gelyk aan 4 keer 6.
En dan n terugkeer.
>> So laat ons kyk na die stapel regdeur die werklike iterasie van hierdie program.
So is daar die onderkant van ons stapel.
Onthou dat die stapel grootword.
So aan die onderkant van ons stapel, ons het 'n stapel raam vir die hoof.
Wanneer die program begin, hoof is altyd gaan wees by die
onderkant van ons stapel.
>> En wat is die binnekant van ons stapel raam vir die hoof?
So selfs al is daar nie 'n plaaslike veranderlikes hoof, soos ek gesê het,
Ons het argc en RGV toegang tot die ruimte binnekant van die belangrikste stapel raam.
So hoof gaan nou noem die funksie cat.
En dit beteken dat cat gaan kry sy eie stapel raam.
>> So nou is ons binne die funksie cat.
En wat nodig is om in te gaan cat se stapel raam?
Wel, cat het 'n argument n.
En n is gelyk aan 4 want dit is wat belangrikste is verby as cat se argument.
>> So nou cat gaan bar te bel.
Wat is bar gaan binne-in van sy 'n stapel raam?
Dit het x gelyk aan y 4 gelyk aan ses.
Dit is nie al wat ons gaan hê in die stapel raam, want bar
het ook 'n plaaslike veranderlike n.
En n ons gaan gelyk aan 24 op te stel.
>> So nou bar gaan terug n.
So bar terugkeer 24 tot die stapel raam cat.
En omdat bar is nou terug, dat beteken dat ons knal die stapel raam
vir bar van die stapel.
So al die geheue wat bar was gebruik is nou af van die stapel.
>> Nou, cat gaan ook om terug te keer na die hoof 24.
So nou dat cat terugkeer, die geheue dat cat gebruik het in sy "
stapel raam is ook weg.
En nou, hoof gaan printf te bel.
So printf is net nog 'n funksie.
Wanneer ons printf noem, is dit gaan wees 'n ander stapel raamwerk vir die printf
funksie oproep.
>> Wat is ons verby printf?
Dit is wat gaan om te gaan op sy stapel raam.
Op die heel minste, ons verby dat persent i agteroorskuinsstreep N en
die argument 24.
Dit mag dalk meer in dit is stapel raam As printf gebeur word met behulp van 'n paar
plaaslike veranderlikes.
Ons weet nie.
>> Maar alles wat daarmee in printf se stapel raam.
Dit gaan die printf te voer.
Dan printf gedoen.
Dit sal terugkeer.
Ten slotte, hoof gedoen word.
Main sal terugkeer.
En dan is ons program gedoen word.
Ja?
>> Publiek: Is jy sien [onhoorbaar]
argumente [onhoorbaar]
parameters?
>> ROB: So is daar 'n subtiele verskil tussen argumente en parameters.
En regtig, in gemeen praat, is mense geneig net meng dit al die tyd.
Maar parameters is die formele Naam van die dinge.
>> So argc en argv is die parameters na.
Argumente is wat jy eintlik slaag in dié parameters.
So is daar as ek roep foo van 4, 4 is die argument wat ek verby in.
En die parameter n, binne cat, neem op die waarde 4
sedert 4 was die argument.
>> Publiek: [onhoorbaar]?
>> ROB: N is 'n plaaslike veranderlike te staaf.
N is nog plaaslike tot cat, maar dit is 'n parameter te foo.
Dit is nie 'n plaaslike veranderlike.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: cat is net 'n beroep bar en terugkeer wat bar opbrengste.
>> Publiek: [onhoorbaar]?
>> ROB: Ja, net om te sien verskeie stapel rame.
Ja?
>> Publiek: Hoekom is cat genoem voor printf?
>> ROB: Hoekom is cat genoem voordat printf?
So ek kon het, in plaas daarvan, iets gedoen soos int x gelyk foo van 4
en dan gedruk x.
Maar in plaas daarvan, het ek saam die funksie noem in die printf argument.
>> Maar let op dat ons kan nie eintlik die oproep te printf totdat ons voer
uit te vind wat foo van 4 is.
So ons gaan om dit te evalueer.
En net sodra dit gedoen gaan om terug te kom en te evalueer nie.
Ja?
>> Publiek: Aangesien beide bar [onhoorbaar]
waarde, waarom nie ons [onhoorbaar]?
>> ROB: Hulle moet heeltemal int wees.
Dit is nie vasgevang oor verskeie passe.
So dit moet int bar en int wees cat aangesien beide van hulle
terugkeer heelgetalle.
Leemte is slegs as hulle gaan nie werklike waardes om terug te keer.
Ja?
>> Publiek: As jy 'n lyn bo die terugkeer, [onhoorbaar]?
>> ROB: A lyn bo die opbrengs?
>> Publiek: Ja.
Soos as jy het printf en [onhoorbaar], sou dit twee keer druk?
>> ROB: So binnekant van cat?
As ons 'n printf hier?
>> Publiek: Ja.
>> ROB: So as ons 'n printf reg hier, sal dit een keer te druk.
Aangesien ons 'n beroep cat keer reg hier, dan sal ons die printf getref.
Dan sal ons bar noem.
En dan sal cat terugkeer.
En dit is dit.
Ons het net ooit teëkom die printf keer.
Ja?
>> Publiek: [onhoorbaar]
printf roeping cat, want ons is die eerste roep printf en dan is ons verby
die argumente.
>> ROB: So in teorie, is nie printf roeping cat?
So nie.
Net die einde dat c gaan voer hierdie dinge is, voordat ons kan
noem 'n funksie, al die argumente om die funksie te
heeltemal geëvalueer word.
So is dit heeltemal geëvalueer?
Ja, dit is net 'n string.
Dit is net 'n waarde.
>> Dan het ons heeltemal evalueer nie.
Sodra dit gedoen is, wat nou al sy argumente geëvalueer.
En nou kan ons die bel om te printf.
Ja?
>> Publiek: Een vraag.
As jy 'n leemte funksie, moet jy terugkeer kommapunt?
>> ROB: Jy doen nie 'n terugkeer kommapunt as jy 'n leemte funksie.
OK.
So nou 'n paar hoop dinge.
So hoop is hoe ons dit gaan hanteer met 'n dinamiese geheue bestuur.
En dit direk in teenstelling met die stapel wat ons sou noem outomatiese
geheue-bestuur.
>> So op die stapel, jy nooit regtig om te gaan met hoe die plaaslike veranderlikes
word gestoot en inloer al hierdie stapel rame en al daardie dinge.
Jy hoef nie te bekommer nie.
Dit is 'n outomatiese.
So het die hoop is handleiding.
En die [onhoorbaar]
kom van hierdie funksies malloc en gratis.
>> So hier is 'n ander program.
Al wat ons doen is mallocing 'n heelgetal.
Ons stoor dit in ster x.
Natuurlik, ons het om te kyk om te sien of x is leeg.
Dan gaan ons net soos wat x dui op 50.
Druk wat x dui op, Druk x, en dan gratis x.
>> So, hoe is dit eintlik gaan om te kyk As ons kyk na ons stapel en hoop?
So sal ons weer begin.
Die onderkant van ons stapel soos tevore.
Onthou dat jou hoop direk teen die stapel?
So ons gaan die te hê top van ons hoop daar.
>> So het die onderkant van ons stapel, ons het ons stapel raam vir die hoof.
Dit het die ruimte vir argc, argv, en ons nou 'n plaaslike veranderlike x, wat
is 'n int ster.
So ons gaan Itereer deur middel van hierdie program.
Eerste ding wat ons het, is 'n oproep tot malloc.
>> So maak ons ​​'n oproep te malloc.
Malloc is 'n funksie.
Dit gaan 'n stapel raam te kry.
Wat is ons verby te malloc?
Dit gaan om in te gaan van die stapel raam.
Ons is verby die grootte van n, wat is 4.
So wat geslaag om malloc.
>> Wat beteken malloc doen?
Dit gryp ons 'n paar ruimte op die hoop.
So ons gaan om te gaan na die hoop.
En ons gaan om te gryp 4 grepe uit die hoop.
So laat ons net gee wat 'n arbitrêre adres.
0x123 Net voorgee dat 'n adres wat op die hoop.
>> So, wat is eintlik binnekant van die streek van die geheue by adres Ox123?
Gemors.
So ons het nie gestoor iets in dit.
So sover ons weet, is dit kan enigiets wees.
Jy moet nie aanvaar dit is nul.
Dit is waarskynlik nie nul nie.
>> So nou malloc opbrengste.
En wat doen ons wanneer malloc opbrengste?
Ons het wat dit terugkeer.
Ons stel x gelyk aan wat dit terugkeer.
So, wat is dit terug?
Dit is die terugkeer 0x123 want dit is die adres van die blok van die geheue dat dit
net toegeken in die hoop.
>> So terug 0x123 x gaan nou ingestel word gelyk aan 0x123 wat picturaal,
ons dikwels trek as x 'n werklike pyl na die blok.
Maar x is net die stoor van die adres.
So nou het ons om te kyk of x is leeg.
Dit is nie null.
Ons voorgee dat malloc opgevolg.
>> So nou ster x is gelyk aan 50.
So ster onthou dit beteken gaan na daardie adres.
So 0x123 Ons gaan gaan na daardie adres.
So dit bring ons tot daar.
Wat doen ons by daardie adres?
Ons stoor 50.
>> So na hierdie lyn, dit is wat dinge gaan lyk.
So nou is dit nie meer vullis daar.
Nou weet ons dat 50 is in daardie besonder adres, want
ons stel dit dat.
OK?
So nou gaan ons f te druk.
>> So eerste gaan ons ster x te druk.
So, wat is ster x?
Weereens, ster x beteken gaan na die ding wat x dui op.
So x stoor 0x123 Gaan na daardie.
Ons kry 50.
So druk f dat.
En dit beteken dat dit gaan druk 50.
En dan is dit terug.
>> En dan het ons die tweede printf.
Ons is nou persent p.
As jy nog nie gesien het nie, dit is net hoe jy druk 'n wyser.
So het ons persent i, persent f, en almal van diegene wat reeds.
So persent p, druk van 'n muis.
>> So x is 'n wyser.
So as ons gaan om te druk x self, ons druk wat eintlik binne
x, wat is 0x123 So het die eerste druk f gaan druk 50.
Die tweede druk f gaan druk 0x123 Ja?
>> GEHOOR: Het jy persent gebruik x 'n wyser te druk?
>> ROB: So persent gebruik jy x 'n wyser te druk?
So jy kan maar persent x is net, algemeen, vir soos as jy 'n paar
integer en jy wil druk dit as 'n heksadesimaal.
Dit is net hoe jy dit doen.
>> AANGESIEN persent d sou druk as desimaal.
Dit is was ons kry persent d. Ek is net 'n heelgetal.
persent p is spesifiek vir wenke.
>> So x is 'n wyser.
Ons wil persent p te gebruik.
Maar persent x kon werk.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: Ja.
Ten minste vir hierdie call-- so ek het nie, sluit dit in hier.
Maar hierdie twee argumente noodwendig binnekant van die stapel raam
saam met 'n plaaslike veranderlikes printf gebeur word met behulp van.
En dan die volgende oproep tot nou printf binnekant van printf stapel raam is
persent p agteroorskuinsstreep N en wat die waarde van x is, wat is 0x123.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: Dit sal iets druk wat lyk soos hierdie.
>> Publiek: [onhoorbaar].
>> ROB: So dit druk dit in posadres vorm.
Dit lyk soos 'n adres.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: Hoekom is wat?
>> Publiek: [onhoorbaar]?
>> ROB: Hoekom is dit wyser 4 grepe?
So is daar 'n hele klomp van 0's in die voorkant van hierdie.
So dit is regtig 0x0000000123.
Op 'n 64-bis-stelsel, sal daar 'n hele klomp van die meer nulle.
Ja?
>> Publiek: [onhoorbaar].
>> ROB: So het die eerste printf gaan print--
>> Publiek: [onhoorbaar].
>> ROB: Ja, dit gaan te druk wat x dui op.
Star sê wat is hierdie ding te wys op.
Gryp dit.
So, wat is dit verwys na?
50.
Gryp dit.
Dit is wat ons gaan druk.
Terwyl die volgende een, ons is net druk x self.
Wat is die binnekant van f?
0x123.
OK.
>> En dan, uiteindelik, ons het die vrye.
Wat is ons verby te bevry?
Ons is verby x.
Daardie tyd het ek eintlik vertoon dit in die stapel raam.
>> So ons die waarde verby 0x123 te bevry.
So nou vry weet, al die regte, Ek het om te gaan na die hoop
en vry dat die geheue.
Dit is nie meer gebruik wat is by adres 0x123.
>> So vry gaan vry te laat wat van die wal.
Nou ons hoop is weer leeg.
Ons het geen geheue lekkasies.
Nou gratis sal terugkeer.
Let daarop dat x is nog 0x123.
Maar dit is nou nie geldig geheue.
Ons moet nie meer dereference x.
Ja?
>> Publiek: Is terugkeer 0 oorbodig?
>> ROB: Is returen 0 oorbodig?
Ja.
Ons het net sit dit daar, want Ons het 'n opbrengs een vir lug.
So dit is soos, ja, laat sluit die terugkeer 0.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: So na gratis x, wat gebeur as ons probeer om dereference die wyser?
Dit is moontlik dat daar niks verkeerd gaan.
Dit is moontlik dat ons nog kry 50.
>> Dit is moontlik, ook, dat die geheue is nou gebruik word vir iets anders.
So dit is nie gedefinieer gedrag.
En ongedefinieerde beteken niks kan gebeur.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: Nee, so as jy ken x na iets anders.
So as hier ons sê x is gelyk aan malloc iets else--
malloc grootte event--
dan dat die oorspronklike blok geheue nie bevry.
En ons het amptelik verloor.
Dit is 'n geheue lek.
Ons het alle verwysings verloor na die blok van die geheue.
So daar is geen manier wat ons ooit kan bevry nie.
OK, so dan terug 0 beteken gedoen.
>> Alle reg, sodat stapel oorloop.
Wat is die idee hier?
So onthou, is hoop om af te gaan.
Stapel gaan op.
So dit was die voorbeeld van lesing Ek dink, waar belangrikste is net gaan om te
noem hierdie funksie foo, wat gaan homself te rekursief noem oor en
weer.
>> So stapel rame gaan werk presies dieselfde.
So ons gaan begin met die belangrikste as die onderste stapel raam.
Dan hoof gaan cat te roep, wat gaan 'n stapel raam te kry.
>> Dan cat gaan cat te bel weer, wat die gang te kry
'n ander stapel raam.
En dan weer, en weer en weer, en weer totdat, uiteindelik, ons hardloop
in die hoop.
So dit is hoe ons 'n stapel oorloop.
En op hierdie punt, jy seg skuld.
Of jy wil regtig seg skuld voor hierdie punt, maar ja.
>> Publiek: Is die kern stort die dieselfde as seg skuld?
>> ROB: So jy sien segmentering skuld kern gestort.
Jy kry 'n stort wanneer jy seg skuld.
En dit is soos 'n stort van al die inhoud van jou huidige geheue, sodat
wat jy kan probeer en identifiseer waarom jy seg myn.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: So 'n segmentering skuld middel daar is 'n stapel oorloop.
So nie noodwendig nie.
'N segmentering skuld beteken dat jy raak geheue op 'n manier
jy moet nie.
So 'n manier dat dit sal gebeur is, toe jy stapel oorloop, ons begin raak
geheue in 'n manier wat ons nie moet wees nie.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: So binnekant van 'n oneindige lus.
Soos dit is soos 'n rekursiewe oneindige lus en so kry ons 'n ander
stapel raam elke keer.
Maar net binnekant van 'n gereelde oneindige terwyl one--
Wel, laat ons nie eens druk f--
iets te doen.
Wat ook al.
>> Ons gaan nie te wees om 'n ander stapel raam.
Ons gaan net herhaling te hou oor hierdie enkele opdrag.
Die stapel is nie groei.
Dit is die feit dat elke rekursiewe oproep gee ons 'n stapel raam.
Dit is hoekom ons 'n stapel oorloop.
Ja?
>> Publiek: So as jy sê die te kry while lus en dan [onhoorbaar]?
>> ROB: So as die binnekant van die while lus daar was 'n printf, sou jy nog steeds
nie seg skuld.
Ek het net nie wil dinge verwar.
Dit sou loop.
Jy wil 'n enkele stapel kry raam vir die printf.
>> Dan printf sou terugkeer.
Dan moet jy lus weer.
Jy wil 'n enkele stapel kry raam vir die printf.
Dit sou terugkeer.
Enkele stapel raam.
So jy kry nie hierdie oneindige ophoop stapel rame.
>> Publiek: [onhoorbaar]?
>> ROB: Ja.
So hierdie stapel oorloop gebeur want nie een van hierdie
oproepe na cat terugkeer.
So as ons terugkeer, dan sou ons begin verloor stapel rame.
En dan sou ons nie stapel oorloop.
En dit is die rede waarom jy nodig het om 'n basis geval vir jou persoonlike funksies.
Ja?
>> Publiek: Is die potensiaal grootte en die stapel vir die hoop dieselfde vir
alle programme?
>> ROB: Ongeveer.
Is die potensiaal grootte van die stapel en die hoop dieselfde vir alle programme?
Sowat.
Daar is 'n paar randomisatietechnieken te waar die stapel begin en
waar die hoop begin.
As jy 'n hele klomp van die te hê globale veranderlikes en dinge, kan jy
weg te neem van 'n ruimte vir jou hoop.
>> Op 'n 64-bis-stelsel, kan jy feitlik oneindige geheue.
Daar is net so baie.
Tussen 32 en 64 stukkies stukkies, wat is 'n groot verskil.
>> Jy gaan 'n hele klomp meer kry stapel en hoop ruimte op 'n 64-bit
stelsel, want daar is net meer spreek wat hulle kan gebruik.
Maar op 'n individuele stelsel, sal dit wees min of meer dieselfde bedrag van stapel
en hoop ruimte.
Alle regte.
>> So laaste ding is samestelling.
So moet jy hierdie proses leer ken.
Daar is vier groot stappe.
Dus moet die eerste een maklik wees om te onthou.
Pre-verwerking.
Dit het die voorvoegsel pre in dit.
So dit kom voor alles anders.
>> Die ding om te onthou is die hash.
So hash definieer en hash sluit in al daardie.
Dit is al die pre-verwerker voorskrifte.
Dit is die dinge wat die pre-verwerker sorg.
>> So, wat nie 'n pre-verwerker doen?
Dit is 'n baie dom ding.
Al wat dit is in staat om is om al hierdie afskrif, en sny, en plak.
>> So hash sluit standaard I0 dot h.
Wat is dat dit te doen?
Dit gryp die standaard I0 dot h lêer en plak dit in die top
waar dit sê hash sluit standaard I0 dot h.
>> En enige gemors definieer wat ons het gesien het, is wat dit doen?
Die kopiëring van die waarde wat die hash gedefinieer word gedefinieer as en plak dat
waar jy is met behulp van die waarde.
So het die voorverwerker nie net regtig eenvoudige teks gebaseerde bedrywighede.
Dit doen niks smart.
So alles is meer ingewikkeld.
>> So nou dat voorverwerker is gedaan, ons eintlik stel.
So wat beteken die samestelling beteken?
Ons gaan nou van c-kode te vergadering kode.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: Ja, ons gevang.
So opstel van.
Ons gaan van C na die gemeente.
So, dit is 'n werklike taal verandering.
Opstel van self beteken gaan van 'n hoër vlak taal
'n laer vlak taal.
>> En c is 'n hoë vlak taal in vergelyking met die gemeente.
Wat is die gemeente?
Die instruksies wat, mooi baie, gemaak vir jou CPU.
Maar jou rekenaar nog steeds nie verstaan ​​nie die gemeente.
Hulle verstaan ​​net kinders en nulle.
So die volgende stap is die samestelling, wat bring ons by die instruksies wat
jou CPU verstaan ​​en eintlik vertaal hulle te
die kinders en nulle.
>> So C te vergadering te binêre.
Maar ek het nie 'n uitvoerbare nog nie.
So dink die cs50 biblioteek.
Ons het jou voorsien van 'n binêre vir hierdie cs50 biblioteek, wat GetString
en GetInt en alles wat.
>> Maar die cs50 library--
in en van die itself-- is nie uitvoerbaar nie.
Dit hoef nie 'n hoof-funksie.
Dit is net 'n klomp van die binêre wat jy kan gebruik.
So 'n skakel is hoe ons saam te bring al van hierdie verskillende binêre lêers
in 'n werklike uitvoerbare.
Een wat jy kan tik dot streep 'n dot uit.
>> So dit is soos die lêer wat jy geskryf het, - wat jou program is--
Caesar dot c.
Maar nou is dit is saamgestel af te binêre.
So Caesar dot o.
En dit is ons cs50 biblioteke binêre.
En hulle word gekombineer in 'n enkele uitvoerbare.
Ja?
>> Publiek: [onhoorbaar]?
>> ROB: So eerste sluit, onthou, die hash sluit is eintlik 'n
pre-verwerker stap.
Maar dit is apart.
As jy nie die gebruik van enige funksies wat is buite jou enkele lêer dan
Nee, jy hoef nie iets te koppel want jy het alles.
>> Dit gesê, printf word gekoppel.
As jy al ooit gebruik printf, dit is iets wat wat moet in gekoppel word
omdat jy nie skryf nie.
En, in werklikheid, printf is outomaties gekoppel.
Jy weet hoe om by die command line of wanneer Jy tik maak, sien jy dit het
Dash l cs50, wat skakel in die cs50 biblioteek?
Printf, en dinge soos wat, gaan word outomaties gekoppel.
Enige ander vrae oor enigiets?
>> Publiek: [onhoorbaar]?
>> ROB: skakel?
Ons het 'n hele klomp van die verskillende binêre lêers.
Dit is die kanonieke voorbeeld wat ons gebruik is cs50 biblioteek.
Ons het saamgestel en aan jou gegee die binêre vir hierdie cs50 biblioteek.
>> Jy wil GetString te gebruik in jou program.
So jy gaan en gebruik GetString.
Maar sonder my binêre kode vir GetString, wanneer jy jou kode stel
af, kan jy nie self jou program, want GetString String is
nog nie volledig omskryf.
>> Dit is eers wanneer jy 'n skakel in my binêre wat bevat GetString wat nou al
reg, ek kan eintlik voer GetString.
My lêer is voltooi.
En ek kan loop nie.
Ja?
>> Publiek: Is die kombinering omskep die binêre uitvoerbare?
So selfs as jy nie ander nie biblioteke, sou dit nie nog steeds
nodig is om te vertaal die [onhoorbaar]?
>> ROB: So 'n uitvoerbare is steeds in binêre.
Dit is net die kombinasie van 'n hele n klomp van die program.
>> Publiek: Baie dankie.
>> ROB: Geen probleem.
Enige ander vrae?
Andersins, ons almal stel.
Alle regte.
Dankie.
>> [Applous]
>> GEHOOR: Dankie.
>> ROB: Ja.