>> JASON Hirsch: Welkom A5, almal.
Ons het 'n opwindende week voor ons, meestal, want daar is so baie nuwe
gesigte in hierdie kamer.
Dit is wonderlik.
Baie van julle is hier deur 'n ongeluk, wat is selfs beter.
So hopelik sal jy hou by ons.
>> Hierdie week gaan ons spandeer die grootste deel van die artikel
voor te berei vir die toets.
So per ons agenda, ons gaan om te praat 'n bietjie oor hulpbronne vir die klas,
maar ook vir die toets, en dan weer, spandeer die grootste deel van die klas praat
oor vrae.
Sodra ons klaar beantwoord jou vrae, of indien jou vrae
ons natuurlik lei tot 'n kodering, ek het monster probleme uit midterms
verlede wat ons sal lewe kode in artikel tesame bring ook 'n paar ander
goeie onderwerpe te dek.
>> So die eerste, as ons deur gegaan het vir die afgelope paar weke om jou te herinner
ouens, daar is 'n ton van die hulpbronne vir hierdie kursus beskikbaar.
Baie van hulle sal baie nuttig wees aan jou as jy aanhou om te
studeer quiz 0, omdat dit is Dinsdagmiddag.
So julle almal gewees het studeer vir 'n bietjie.
>> Daar is lesing notas en bron kode wat jy moet
beslis check.
Kyk na die kortbroek.
Check uit study.cs50.net.
En dan, hieronder gelys, 'n aantal ander hulpbronne.
>> Weereens, quiz 0 is môre by 01:00.
As jy nog nie gedoen het nie, maak seker Oor die Quiz 0 dokument op die
Natuurlik se tuisblad om uit te vind waar jy die neem van die quiz.
Die toets begin om 01:10 en eindig 70 minute later.
So as jy opdaag ná 01:10, is jy gaan dat baie minder minute te kry
as 70 die toets te neem.
So maak seker jy is daar op tyd.
As jy 'n verlenging student of 'n ander toets oorwegings, is dit
dalk nie by 01:00 môre.
Maar weereens, kyk die oor Quiz 0 dokumenteer om seker te maak jy weet wanneer
jy neem die quiz.
Ek het 75 minute tot hier.
Ek dink dit is reg, nie 70.
>> Dit dek al die materiaal van 'n week 0 met verlede week se lesing op Woensdag.
En weer, vir hierdie toets, per wat dokument, kry jy 'n twee kante en 8
1/2 met 11 vel papier wat jy kry as notas te gebruik tydens die toets.
Baie mense, indien nie die meeste mense, het bevind dat die grootste enkele nuttige manier
om te studeer vir die toets is om te Maak 'n studie vel, 'n
one-sider, van hul eie.
So kyk na die verlede kinders as jy het gesien die verlede kinders.
Reik uit na vriende om te sien wat hulle is om op hulle s'n.
>> Maar die hande-down, die beste manier wat jy kan studie is om te gaan deur alles en
Whittle dit neer op wat moet of moet nie op daardie stuk behoort
papier, want dit is net 'n baie nuttige manier vir jou om seker te maak
jy gaan deur alles en het 'n paar vertroudheid met dit.
Die meeste mense, vind ons, selfs al is hulle het die papier sit reg
langs hulle op die toets, draai nie om nie, want, weer, wat baie
proses gaan deur die inligting het hulle gehelp het om te leer nie.
>> Het enige iemand enige vrae oor quiz 0?
Het almal -
Ek gaan nie 'n opsteek van hande te doen.
Never mind.
Ek gaan wie om te vra begin studeer.
Maar ek wil nie hê jy moet maak al nie jou hande samel.
So soos ek gesê het - ja, Avi, gaan voort.
>> AVI: Wat sou 'n nuttige ding op die een-pager te sit?
>> Student: Daar is aan jou.
>> JASON Hirsch: Jy kry jou oordeel te gebruik.
Nuttige dinge op die een-pager te sit, As jy is verward oor die groot O
runtime van verskillende soorte soektogte en allerhande, sit dit op daar in 'n
handig dandy grafiek.
Op dié manier, as jy het gevra dat die quiz, het jy nie nodig om te probeer en figuur
dit uit of rede deur die runtime.
Jy kan net kopieer dit af.
As jy kyk na vasvrae verlede, 'n baie tye, is daar loop van die tyd vrae.
So wat sou 'n voorbeeld van 'n goed ding op jou een-pager te sit.
>> Ander goeie dinge aan te trek, as jy verward oor hoe om te verklaar om 'n
funksie of wat die verskillende dele van die funksie verklaring, skryf
dat daar aan, 'n generiese weergawe en dan miskien 'n voorbeeld.
As jy verward oor wysers, 'n diagram van hoe wysers werk is
waarskynlik werklik nuttig.
As jy verward oor rekursie, 'n monster rekursiewe funksie daar
kan ook blyk te wees baie nuttig.
Is dit gee jou 'n paar idees?
>> AVI: Jy moet verstaan ​​dat die hele samestelling proses, soos
hoe dit alles werk?
>> JASON Hirsch: Alles wat gedek kon
wys op die quiz.
Vrae -
maar weer, sal 'n paar dinge wees geweeg swaarder as die ander.
Sommige dinge kom weer en weer in die klas, in
lesing, en afdeling.
Ander dinge het nie kom wat dikwels.
>> Ons het 'n baie gepraat oor # sluit en -L iets en wat die beteken in
die samestelling proses.
Ons het 'n baie gepraat oor GDB, klou, daardie verskillende vlae wat ons gebruik wanneer
Ons stel iets, en wat make15, byvoorbeeld, regtig
beteken en regtig nie.
Ons het so veel oor praat nie elke enkele stap in
die samestelling proses.
Ons het nog daaroor gepraat nie.
So dit is nog iets wat jy moet vertroud wees met.
Maar weereens, ons gaan nie te wees -
dinge wat kom meer dikwels in die klas meer geneig is om meer te kom
dikwels en swaarder geweeg op die quiz.
>> Cool.
Enige ander vrae oor quiz 0?
>> OK, so ek het 'n lys van onderwerpe op die bord.
Ek het deur die leerplan.
Ek het deur die hersiening van artikel gisteraand en diegene gly te kom
met 'n nie-volledige lys van onderwerpe wat ons tot dusver gedek in CS50
en dinge wat kan verskyn die quiz.
So ek gaan nie deur te gaan elke enkele een van hulle nie.
Dit sou neem baie meer tyd as wat ons nou het.
Maar ek het dit hier om hopelik draf jou geheue as dinge wat mag
of dalk nie so vertroud is met jou.
>> En ek wil graag die grootste deel van die te spandeer artikel jou vrae te beantwoord oor
hierdie onderwerpe, onderwerpe wat nie hier gedek word.
Ons kan pseudokode skryf.
Ons kan die werklike kode skryf om te verseker dat jy -
Ek kan jou vraag beantwoord en te help almal fundamenteel verstaan ​​'n
Baie van hierdie onderwerpe sodat jy voel voorberei en gemaklik gaan in
die quiz môre.
So lees oor die lys.
Jy hopelik artikel kom met 'n paar vrae.
Wanneer jy gereed is, lig jou hand en ons sal begin.
>> Hou in gedagte, die vrae wat jy het, daar is geen dom vrae.
Ons het gehoor dat 'n lot.
En die vrae wat jy het, ek is bereid om , baie ander mense in te sit beide
hier sit en kyk aanlyn so goed.
So kan jy net mense help deur vrae te vra.
Marcus.
>> Markus: Tussen die stapel en die hoop, is daar 'n pre-toegeken
persentasie van die geheue wat gedefinieer is as dit is vir die stapel of vir die hoop?
Of hoe werk dit presies?
>> JASON Hirsch: Groot vraag.
Ek is van plan om terug te spoor 'n bietjie.
Is almal -
asseblief eerlik wees hier.
Ek weet ek vra om jou te samel jou hand voor jou maats.
Maar daar is mense wat voel ongemaklik met die stapel en hoop
en wil graag oor te gaan wat en wat die beteken?
Lig jou hand indien -
OK.
Dankie.
So ons gaan om te gaan oor die stapel en die hoop regtig vinnig en dan
beweeg in antwoord op jou vraag.
>> So as ons trek uit 'n boks te verteenwoordig geheue op jou rekenaar, wat is 'n paar
dinge wat gaan in die boks?
Main.
Een van die vernaamste funksie.
Waar kom hoof gaan?
>> STUDENT: [onhoorbaar].
>> JASON Hirsch: So ons sal sit belangrikste hier.
Wat anders gaan in hierdie boks?
>> STUDENT: die funksies wat jy noem.
>> JASON Hirsch: Die funksies wat ons noem.
En waar gaan hulle nie?
>> STUDENT: In die stapel.
>> JASON Hirsch: Hulle gaan in die stapel.
So ons gaan om dit te noem ding hier die stapel.
En tot bo, ons het die hoop.
So geheue is nie 'n boks net soos hierdie.
Maar dit is eintlik redelik soortgelyk.
Dit gaan 'n klomp bokse te wees oor en oor, afhangende van hoe groot jou
rekenaar of hoe groot jou geheue is.
>> Aan die quote-unquote "onderkant" is die stapel.
En daar is verskeie dinge wat gaan op die stapel.
En dié is afhanklik van die funksies jy in jou kode.
Jy het altyd 'n funksie in jou kode genoem hoof, dus is daar altyd 'n
artikel hier in die stapel gewy aan hoof.
>> Hierdie afdelings in die stapel word stapel rame genoem.
Wanneer jy bel 'n ander funksie, sê hoof roep 'n binêre soek funksie,
Ons het 'n ander raam op die stapel.
Meer spesifiek, gaan ons skenk 'n deel van die geheue op ons
rekenaar binêre soek se plaaslike te stoor veranderlikes en die binêre te voer
Soek kode.
>> So noem ons binêre soek.
In hierdie stuk van die geheue, ons gaan sy plaaslike veranderlikes te stoor.
Ons gaan die printf oproepe te stoor.
Wat ook al gebeur, daardie funksie is gaan word reg daar gestoor.
Binêre soek gaan uit te voer.
Dit gaan uitvoering te voltooi.
Wat is die woord in C wat dui dat 'n funksie moet
voltooi die uitvoering daarvan?
>> STUDENT: Terug.
>> JASON Hirsch: terug te keer.
So wanneer jy sien 'n terugkeer verklaring, die funksie eindig
wanneer dit tref nie.
So binêre soek, sal sy terugkeer getref.
Hierdie deel van die geheue sal hoofsaaklik word bevry.
En die belangrikste terug te gaan uitvoer.
So hoof sal breek waar was, oproep binêre soek, kry 'n paar terugkeer waarde,
en gaan voort om uitvoering.
Hierdie stapel raam sal weggaan.
>> As ons 'n rekursiewe funksie, wat is 'n funksie wat noem homself oor
en oor, kan ons kry - sê ons het binêre soek rekursief.
Ons kan kry binêre soek weergawe een, binêre soek twee, binêre soek
drie, vier binêre soek, binêre soek vyf.
En dan is dit finaal binêre soek vyf sal die basis geval, en die stapel getref
rame sal terug te gaan en hou sluitingsdatum totdat ons terug na die hoof.
Ons kan gaan oor rekursie in 'n bietjie.
Maar al hierdie dinge is om te sê, as jy roep verskeie funksies op 'n tyd,
Daar sal verskeie stapel wees rame op die stapel.
>> Die hoop, aan die ander kant, tot Hier is nie vir funksies,
nie vir plaaslike veranderlikes.
Dit is vir dinamiese toegeken veranderlikes.
So dit is veranderlikes wat kan wees geïnisialiseer in óf hoof-of 'n
funksioneer wat hoof oproepe.
Oral in jou kode, wat hulle kan geïnisialiseer word.
En 'n dinamiese te inisialiseer toegeken veranderlike.
Watter funksie in C gebruik ons?
>> STUDENT: malloc.
>> JASON Hirsch: malloc.
Jy noem malloc.
Jy kry 'n ruimte van die geheue.
En dat die ruimte van die geheue is op die hoop.
En dat die ruimte van die geheue bly daar totdat jy bel gratis.
>> So dinamies toegeken veranderlikes in hoop sal bestaan ​​vir so lank as wat jy
wil hulle bestaan ​​nie, en hulle sal nie weg te gaan totdat jy uitdruklik
hulle vertel om weg te gaan.
Jy kan dit maak in een funksie.
Daardie funksie se stapel raam sal weggaan.
Maar dit veranderlike sal steeds bestaan in die hoop totdat dit vrygelaat,
potensieel deur die funksie wat genoem binêre soek of wat ook al.
>> So diegene hoop veranderlikes bly daar vir so lank as wat jy wil
om hulle daar te bly.
En hulle kry hier sit.
En dan is die volgende een kry daar te vestig.
Hulle hou aan om gevul in, en hulle bly daar totdat julle vry bel.
>> En in wese, die hoop en die stapel, om te Marcus se vraag
groei na mekaar.
En as hulle loop in mekaar, jy het gebruik om al die geheue in jou
rekenaar, en jou program sal ophou omdat jy nie meer geheue hê
links te gebruik.
In tussen hulle, is daar moontlik ander dinge.
Maar vir die omvang van hierdie kursus, kan jy hoef nie te bekommerd wees oor wat.
>> So dit was die antwoord op jou vraag.
Moet nie bekommerd wees oor dit.
Maar dit was die lang antwoord.
Al wat jy hoef te weet, is die hoop en die stapel sal -
een begin aan die onderkant.
Die stapel nie.
Die hoop is daar.
Hulle sal groei nader aan mekaar.
>> En as hulle raak, is dit 'n probleem.
Jy het uit die geheue.
Maar ook, benewens om te weet waar hulle is wat in beide die gestoor
stapel en hoop.
Curtis.
>> CURTIS: Wanneer hulle bots, is dat 'n Stapeloorvloei?
>> JASON Hirsch: Wanneer hulle bots, dit is nie 'n stapel oorloop.
'N Stapeloorvloei is 'n ander gebied dat ons kan gaan oor as jy wil.
OK, ons sal terug kom in 'n bietjie.
>> STUDENT: Wat is die woord genoem toe hulle mekaar slaan, die
stapel en die hoop?
>> JASON Hirsch: Vir nou, moenie bekommerd wees oor.
Weet net -
Ek sal daardie vraag te beantwoord na die klas.
As hulle loop in mekaar, jy uitgehardloop geheue, want daar is nie meer
ruimte is daar.
>> STUDENT: Jammer, wat is 'n seg skuld?
>> JASON Hirsch: 'n segment skuld kan genoem word vir -
dit hang af waarom die seg skuld se genoem.
Soms, jou Stapeloorvloei, sal dit sê seg fout as die fout.
>> STUDENT: Wat van ontwysing 'n nul veranderlike?
Is dit 'n seg skuld?
>> JASON Hirsch: ontwysing 'n nul pointer -
OK, so as jy 'n wyser wat jy gelyk aan nul is, wysers, onthou,
Store geheue adresse as hulle waardes.
En 'n nul wyser is in wese stoor 0, die 0-ste
spreek in daardie veranderlike.
So 0x, 0, 0, 0, 0, ensovoorts.
Dit 0-de-posadres in die geheue wat nie in ons prentjie, dit is daar
iewers, dis voorbehou vir die rekenaar.
Ons is nie toegelaat word om dit aan te raak.
>> So wanneer jou program se uitvoer, indien iets probeer om te gaan na die geheue
adres 0, dit weet dat dit is 'n leë waarde.
Dit weet niks moet daar wees.
So as jy probeer en te gebruik om iets daar en behandel iets soos daar of
probeer om te gaan na die plek, is jy gaan 'n seg fout of 'n fout te kry.
Maak dit jou vraag?
>> En nou gaan ons terug te gaan oorloop om te stapel.
Dinge in die stapel te plaas, as jy ouens het gesien het, in - laat ons trek 'n beslote
up van 'n stapel raam.
Kan almal sien dat?
So het ons ons stapel raam.
Ons is 'n skikking te spaar in 'n plaaslike veranderlike in die funksie.
So sê ons verskeidenheid het vyf kolle.
Al vyf van diegene gestoor word in daardie stapel raam.
>> As ons begin skryf as die grense van die skikking -
so as ons begin skryf in, Kom ons sê dit is 0.
Dit is die vyf indekse van ons verskeidenheid.
As ons begin skryf in indeks 5, wat ons het nie wanneer ons 'n
verskeidenheid van grootte 5, moet ons begin skryf in indeks 6, 7, 8, 9, kan ons 'n stapel kry
Oorloop fout.
>> Die algemeen dit is nie -
jy sal waarskynlik in die moeilikheid As jy gaan deur een.
Maar oor die algemeen, sal jy in die meeste probleme as jy gaan oor 'n klomp
en jy so ver oor wat jy skryf, gaan oor die terugkeer adres van daardie
funksie, wat geleë is by die onderkant van die stapel raam.
>> Omdat, reg?
Jy - in die - jammer.
Nie ", want reg."
>> In die stapel raam, jy het jou plaaslike veranderlikes.
Op die heel onderkant van die stapel raam is die terugkeer adres.
Dit is waar die funksie gaan as dit verby is.
En as jy oor skryf dat terugkeer adres, dan wanneer hierdie stapel raam,
wanneer jy gaan deur die stapel raam en uitvoering van elke lyn, is jy
gaan om te gaan na jou nuwe terugkeer adres dat daar geskryf staan ​​in plaas van die
werklike een.
En dit is hoe ons gesien sommige sekuriteit oortredings
kan gebeur met rekenaars.
>> So Stapeloorvloei, in kort, is wanneer jy vervang die deel in die stapel
jy veronderstel is om te gebruik, die plaaslike veranderlike jy veronderstel is om te gebruik, en
in die besonder wanneer jy begin die vervang belangrike dinge soos die
terug adres.
En dit is waar jy 'n fout kry.
Of miskien selfs kon jy begin selfs skryf in -
sê binêre soek was reg bokant hoof.
As jy overwrote 'n baie, jy kon in Hoofstraat skryf.
Maar oor die algemeen, kry jy 'n fout voor Dan, omdat die rekenaar weet
jy iets doen wat jy moet dit nie te doen nie.
Ja.
>> STUDENT: Wat is die verskil tussen 'n Stapeloorvloei
en 'n buffer oorloop?
>> JASON Hirsch: Buffer oorloop is 'n meer generiese tipe
wat ek nou net beskryf.
>> STUDENT: So 'n Stapeloorvloei is 'n voorbeeld van 'n buffer oorloop.
>> JASON Hirsch: Presies.
Dit is 'n skikking ons kan dink as 'n buffer, 'n ruimte vir die dinge te gaan in
Dit is 'n stapel buffer oorloop.
Ons kan 'n hoop buffer oorloop.
As daar 'n buffer, wat daar dikwels is 'n skikking die hoop klippe, en ons
overwrote die perke, dan sou ons het 'n hoop buffer oorloop.
>> En buite die omvang van hierdie kursus Hulle is 'n bietjie anders bespeur.
Die samesteller het 'n spesiale maniere om die opsporing van elk.
Maar 'n buffer oorloop is 'n meer generiese tipe wat ek beskryf,
wat was 'n stapel buffer oorloop.
Het dit jou vraag?
Soet.
>> Was daar enige ander vrae verwante die stapel of die hoop?
Ja.
>> STUDENT: Ek weet wat jy hoef te vry snare want hulle is in die hoop
en jy wil nie geheue lek.
Maar jy het globale veranderlikes te bevry en dinge soos wat?
Of is hulle outomaties bevry?
>> JASON Hirsch: Goeie vraag.
So in CS50.H, skep ons hierdie ding vir jou genoem 'n string.
'N string is regtig wat?
>> STUDENT: Char ster.
>> JASON Hirsch: 'n kar ster, 'n wyser om 'n karakter, 'n verwysing na
'n verskeidenheid van die karakters.
Dit is wat die string is.
So ons moet dit vry, want getstring, wat ons gebruik om 'n baie -
string naam is gelyk aan getstring -
dat mallocs vir ons 'n paar geheue op die ophoop en dan stuur 'n wyser na die
eerste karakter van daardie string, 'n kar ster.
>> So oënskynlik, as jy nog nie free skryf op enige van jou snare
wat jy tot dusver genoem is, moet jy lek 'n paar geheue.
Natuurlik het ons nie gepraat oor dit, sodat niemand gekry is in
moeilikheid vir om dit te doen.
Maar vorentoe gaan, ja.
Wanneer jy getstring noem, is jy mallocing 'n ruimte op die hoop.
En as jy nie vry bel later op daardie string, jy het 'n geheue lek.
Dit beantwoord jou vraag?
>> Ja
>> STUDENT: So dit te doen, gebruik ons vrye reg voor terugkeer?
Soos, binne die bestek van, ek dink as ons binne die sê, soos, int hoof,
omvang van die kode wat binne daardie krulhakies, reg voor -
jy weet waar jy wil gewoonlik sit terugkeer.
Sit jy vry voor dit?
>> JASON Hirsch: So jy kan gratis sit waar jy wil gratis te sit.
Omdat hierdie dinamiese toegeken veranderlikes, want hulle kan
lewe buite die bestek van 'n bepaalde funksie, as jy malloc noem in 'n
afsonderlike funksie, byvoorbeeld, getstring, kan jy gratis noem in die belangrikste.
Jy hoef nie om dit te noem in die spesifieke funksie
waar malloc genoem word.
Maar jy moet om dit te noem voordat hoof opbrengste.
>> En dit hang af.
Dit hang af van die rede waarom jy malloced wat ruimte in die eerste plek.
Sommige mense sal roep bevry redelik vinnig.
Sommige mense sal nie vry noem totdat die einde van hul program.
En hulle sal gaan deur en gratis alles.
Dit hang af van die rede waarom jy malloc genoem.
>> STUDENT: En wat sou jy sê As jy die naam gebruik getstring?
Jy sê free wat?
>> JASON Hirsch: So het die sintaksis gratis is eenvoudig vry, oop paren, naby
paren, en die naam van die wyser.
So as jy skryf string naam gelykes getstring, jy sit naam hier.
Dit is die naam van die wyser.
En hy weet dat die geheue te bevry.
>> STUDENT: So wanneer dit bevry dat die geheue, die wyser wys nog steeds na die plek
in die geheue?
Of is die wyser ook leeggemaak die adres wat dit op.
>> JASON Hirsch: Ons moet probeer om dit.
Ons moet Kode wat.
Kom ons kom terug wanneer ons by kodering, en laat kode wat.
En as jy wil die antwoord uit te vind dat, kan jy ook kode wat
in die tussentyd.
Maar dit is 'n groot vraag.
>> STUDENT: Is dit moontlik om te gou vry iets?
So het jy nog nodig het om dit vir jou program, en jy bevry dat die geheue ruimte?
>> JASON Hirsch: Ja.
Dit is moontlik, as jy iets gratis en dan kan jy dit weer gebruik, sal jy
loop in 'n fout.
Maar dit is op jou, omdat jy bevry iets en dan later genoem het.
So dit was 'n programmeerder se fout.
Maar ja.
Jy kan skryf nie.
>> Enige verdere vrae op -
ja.
>> STUDENT: So as jy is veronderstel om net vry om dit in die algemeen voor die
program eindig, beteken dit as die program eindig en jy Los dit nie,
dat die geheue is nog toegeken?
>> JASON Hirsch: As jou program eindig en jy vergeet om iets te bevry, dan
dat die geheue is deurgaans toegeken die leeftyd van jou program.
Wanneer jou program sluit heeltemal, dat die geheue is nie van plan
om daar te bly vir ewig.
Die rekenaar is slim genoeg om te weet dat wanneer die program sluit, is dit
moet ontslae te raak van al die geheue wat is wat verband hou met die program.
>> Maar daar is gereedskap wat jy kan hardloop op 'n program op te spoor indien, wanneer die
program klaar is, jy vergeet sommige geheue te bevry.
En vir jou volgende probleem stel waar jy sal gebruik word om malloc en die gebruik van
wysers, sal jy hardloop hierdie program op jou program om te sien of,
wanneer vernaamste opbrengste, jy het 'n paar dinge wat unfreed oorgebly het.
>> So hulle gaan nie malloced om te bly vir ewig in jou rekenaar.
Dit sou wees verkwistende, want baie vinnig, rekenaars
sou loop uit van die geheue.
Maar as hulle loop tot aan die einde van jou program en hulle is nie bevry en jou
program uitgange, dit is nog steeds 'n probleem dat hierdie instrument sal jou help om te spreek.
>> STUDENT: Is dit Valgrind?
>> JASON Hirsch: Dit is ' genoem Valgrind.
En jy sal wees -
>> STUDENT: Maar ons het nie om te weet wat vir die toets, al is?
Ek bedoel, is dit gepraat oor 'n bietjie in lesing.
>> JASON Hirsch: So Valgrind is die naam van die instrument.
Weet wat dit doen, is genoeg vir die toets.
Maar jy het dit nie gebruik nie op jou probleem stel, want ons het nie 'n
probleem stel wat uitdruklik behandel met malloc of jy met behulp van malloc.
So jy het Valgrind nog nie gebruik.
Maar jy sal dit gouer gebruik eerder as later.
>> STUDENT: Kan jy herhaal wat Valgrind is?
>> JASON Hirsch: Jammer?
>> STUDENT: Kan jy herhaal wat die doel van Valgring is?
>> JASON Hirsch: Valgrind is die naam -
soos GDB help jou ontfout jou program, Valgrind help jy uitvind of
dinge is nie vry wanneer jou program sluit.
So sal jy hardloop dit op jou program.
En jou program verlaat, en dit sal sê jou program genaamd malloc hierdie baie
keer vir hierdie baie grepe, en jy net genoem vry om hierdie baie keer.
En sodat jy hierdie baie grepe links sonder om bevry.
Of dit sal sê jy het alles bevry.
Goeie werk.
>> STUDENT: OK.
En dit is bekend Valgring?
>> JASON Hirsch: V-A-L-G-R-ek-N-D.
>> STUDENT: 'n vraag oor wysers.
So sê jy het n ster x is gelyk aan iets.
Dit is gelyk aan, wat ookal jy sit daar is, is dat wat daar binne-in sit
wat x is, gewys het, of die wyser van x?
>> JASON Hirsch: Kan u herhaal die vraag?
Kan ons dan, terwyl jy dit sê?
>> STUDENT: In die toets, eintlik, die een wat jy vir ons gestuur het, was dit soos, kar
star waarheid gelyk CS50 rotse, reg?
So beteken dit dat CS50 rotse is wat die waarheid is wys na?
>> JASON Hirsch: So jy praat oor 'n kar ster in 'n string, hoe
wat werk?
Ja.
OK.
Kom ons teken dit oor hier.
>> [SIDE GESPREK]
>> JASON Hirsch: So hierdie veranderlike gaan wees van die tipe char ster.
Hoe groot is 'n veranderlike van die tipe char ster?
Hoeveel grepe?
>> STUDENTE: Vier.
>> JASON Hirsch: Dit is vier grepe.
Hoeveel regte is 'n veranderlike van die tipe int ster?
>> STUDENTE: Vier.
>> JASON Hirsch: Vier grepe.
As dit is 'n wyser, dan is dit altyd vier grepe, want wysers, hul
waarde is 'n geheue adres.
En geheue-adresse op die CS50 toestel is vier grepe lank.
So wanneer ons getstring, of wanneer ons 'n beroep sê, stringname gelyk, en dan in
dubbel aanhalings het 'n string, ons besig is om -
Wel, dit is 'n bietjie anders.
Ons sal nie getstring as die voorbeeld.
Of kar ster iets gelyk aan die tou.
Jammer, gee my die voorbeeld dat jy lees?
>> STUDENT: char ster waarheid is gelyk aan "Cs50 rotse" in dubbel aanhalingstekens.
>> JASON Hirsch: So hierdie ster, hierdie Ons sal hierdie veranderlike x bel vir ons
generiese doeleindes.
Ons het 'n veranderlike genoem x.
Dit is die tipe char ster.
Dit is 'n verwysing na 'n reeks van die karakters.
So hier -
>> So dit is hoe dit werk in die geheue.
Dit sou 'n geheue adres stoor.
Dit sou die geheue adres van die winkel Die eerste karakter in die skikking.
En dan wanneer jy gevolg die wyser, sou jy
kry die eerste karakter.
>> En as jy hierdie ding lees soos 'n string, jou rekenaar is slim
genoeg om te weet, lees hierdie hele ding totdat dit raak 'n teenreaksie 0.
Maar as jy dit lees 'n karakter op 'n tyd, so jy iterating deur
hierdie string, dan sal jy net lees 'n karakter op 'n tyd totdat jy
backslash 0.
Dit kan nie antwoord op jou vraag, al is.
>> STUDENT: Ja, maar jy het nie malloced dat die ruimte
nog vir die wyser.
>> JASON Hirsch: So ek is nie heeltemal seker presies wat jy is op soek na,
want ek het nie te maak dat quiz.
Dit was veronderstel om 'n nuttige hulpbron van 'n ander TF.
As jy 'n tou op die stapel of as 'n plaaslike veranderlike, sal dit
net verskeidenheid van koste eerder as algemeen 'n kar ster verwys na
'n ander string.
Maar ek weet nie.
Dit kan 'n verwysing na 'n ander te wees string op die stapel sowel.
Ja.
>> STUDENT: Ek weet dat jy nodig het om te toeken geheue indien die wyser is
om verklaar binnekant van 'n ander funksie.
Het jy behoefte aan dieselfde ding om te doen as dit verklaar binnekant van die belangrikste,
jy gebruik dit in van die belangrikste?
>> JASON Hirsch: So ja.
Jy kan 'n wyser verklaar aan enige geheue adres in die geheue.
Dit kan die geheue-adres van 'n plaaslike wees veranderlike, alhoewel dikwels,
mense nie geheue adresse verklaar nie om plaaslike veranderlikes, want hulle gaan
weg keer dat funksie gee, wat is die rede waarom ons oor die algemeen malloc dinge.
Maar ja, jy kan 'n wyser verklaar na 'n ander plaaslike veranderlike.
Dit is net oor die algemeen nie gedoen nie.
Maar ek kan 'n blik op wat neem spesifieke ding na die klas.
Ja.
>> STUDENT: Ek dink dit is 'n soort van wat gevra word.
Dit lyk vreemd word initializing 'n wyser nie as 'n
adres nie, maar as dit wat lyk soos 'n waarde.
Dit lyk asof die CS50 is wat binne die ding wat wys na en
nie die werklike adres, reg?
>> JASON Hirsch: So dit is nie die geval nie, al is.
Dit is nie wat gebeur.
Wanneer jy 'n kar ster verklaar, dit is 'n geheue adres.
Wysers is al die geheue adresse verwys na iets anders.
Wat iets anders kan wees op die stapel, maar byna altyd op die
ophoop in die manier waarop ons sal sien dit gebruik.
Maar stringname gelyk aan dubbel-aanhaling "Getstring," ons kan sien dat ons
kan kyk deur dit en kode wat.
getstring string is nie gestoor in dat veranderlike, of wat ook al die string
naam word nie gered in daardie veranderlike, want dit is nie hoe
wysers werk.
Is wat sin maak?
>> STUDENT: Ja.
>> JASON Hirsch: OK.
Hopelik, dit was nie verwarrend aan enigiemand.
Maar as dit was, kan ons kyk na dit weer in 'n bietjie, want ons is eintlik gaan
iets wat hopelik die kode werk met snare en help jy voel
meer gemaklik met hulle.
>> Enige ander vrae wat verband hou met hierdie onderwerpe of ander onderwerpe wat
Ek sal terug sit?
En -
nou.
Ja, Alden.
>> ALDEN: So is dit heeltemal los, maar kan ons net gaan oor
regtig vinnig wat ons nodig het om te weet oor die verskil tussen 'n 32 en
64-bit masjien?
>> JASON Hirsch: Ja.
So 32 stukkies is hoeveel grepe?
>> ALDEN: Dit is vier grepe.
>> JASON Hirsch: Dit is vier grepe.
En 64 stukkies is hoeveel grepe?
>> STUDENT: Agt.
>> JASON Hirsch: Agt grepe.
So weer, agt stukkies is een byte.
Jou CS50 toestel is 'n 32-bit masjien.
So geheue adresse vier grepe lank.
Daar is 2 tot die 32 geheue adresse.
0-2 aan die 32 minus 1.
En ek is nie positief nie, maar dit is waarskynlik die omvang van wat jy nodig het om te
weet vir 'n 32-bit masjien, wat die geheue adresse, weer, vier grepe lank,
en dit is die maksimum bedrag geheue adresse.
>> Ook, data tipes -
hierdie dalk iets wees soos Wel, dit is die moeite werd om daarop te let.
Die grootte van 'n data tipe hang af van die masjien jy werk met.
So 'n kar, 'n enkele karakter, is hoe baie grepe op ons CS50 toestel?
Een byte.
En dit is eintlik een byte as goed op 'n 64-bit masjien.
>> En die meeste data tipes is dieselfde aantal grepe op beide masjiene.
Maar sommige data tipes sal anders wees op beide masjiene.
So wat potensieel sou wees om die enigste ding wat jy nodig het om te weet.
>> Maar selfs dit, dink ek, is buite die grense -
Ek is amper positiewe, as jy kyk terug by ou vasvrae, dit sê, aanvaar vir
kodering probleme wat jy gebruik 'n 32-bit masjien.
Maar daar is, om saam te gaan met dit in geval jy belangstel, is daar
data tipes wat dieselfde grootte op al die masjiene.
>> As jy iets soos gesien uint32_t, mag of mag jy
nie gesien het nie.
Dit is 'n data tipe.
Wat sê wees 32 stukkies maak nie saak wat die masjien dit is op.
So wanneer mense skryf draagbare kode, hulle sal waarskynlik nie ints gebruik.
Hulle sal gebruik in plaas van hierdie ander data tipes wat hulle weet dieselfde sal wees
grootte op elke enkele masjien.
Madhu.
>> Madhu: Ek het 'n vraag oor die samestelling proses.
So as jy 'n program wat gebruik maak van skryf 'n biblioteek soos CS50 of iets
soos wat, ek weet dat daardie biblioteek moet op 'n sekere punt, wees
saamgestel en gekoppel in
Maar hoeveel van dit gebeur tydens die samestelling van jou program?
Watter deel van die biblioteek in die proses vind plaas wanneer jy
die opstel van jou eie program?
>> JASON Hirsch: So laat ons gaan oor algemeen die stappe van hierdie proses.
Jy skryf jou. C lêer.
In jou. C lêer, jy # sluit jou kop biblioteke, byvoorbeeld, cs50.h.
Wat beteken dat skerp sluit lyn doen om jou program?
Akchar.
>> AKCHAR: Dit voeg die voorlopers van die funksies van die kop
lêers in die biblioteke.
>> JASON Hirsch: Presies.
Dit voeg die funksie prototipes om jou kode.
So wanneer jou kode word saamgestel in die vroeë stadiums, samesteller weet
dat hierdie funksies werklik bestaan, en dat iewers hulle is gedefinieer.
Die. H lêers sluit nie die definisies vir hierdie funksies of hoe
hulle eintlik werk.
Cs50.h sluit net iets wat sê getstring is 'n ware ding wat
kan gebeur.
En standardio.h sê printf is 'n ware ding wat kan gebeur.
>> Kop sodat jou c taal met hierdie. lêer kry verander in 'n paar
masjien-leesbare kode, wat uiteindelik kry het in binêre
kode, 0's en 1's.
En dit is die kode wat uiteindelik uitgevoer word.
Die-l cs50 lyn - byvoorbeeld, wanneer jy skryf klang -
en dan moet jy sluit-l cs50, jy tik dat in
En jy sien dat.
Wanneer jy skryf maak, sal jy sien dat die lyn hier.
En ons sal sien wat in 'n tweede toe ons kode of later wanneer ons kode.
>> Maar dat-l cs50 lyn doen iets 'n bietjie anders as
die # sluit cs50.h.
Wat beteken dat-l cs50 lyn te doen?
Avi?
>> AVI: Ek wil om te sê dat dit skakels die biblioteek aan die funksie
noem, soos die. o lêers.
>> JASON Hirsch: So baie naby, indien nie in die kol.
Die-l cs50 neem die binêre lêer en kombineer dit met jou binêre lêer.
So cs50.h, is daar geen punt in die draai cs50.h van C-taal elke binêre
enkele keer is dit gebruik word.
Dit sou dom wees, want dit sou 'n baie tyd mors.
So dit is reeds saamgestel en verander in 'n uitvoerbare.
En nou is dit gaan saamgesmelt staan ​​te word met jou lêer aan die einde.
So diegene 1 en 0's gaan om saam te smelt met jou kinders
en 0's aan die einde.
So nou moet jy eintlik die werklike 1 en 0's wat bepaal hoe getstring,
byvoorbeeld, werk, of hoe printf, byvoorbeeld, werk.
>> En vir meer inligting, daar is 'n kort opstellers dat Nate gee dat
jy moet check wat gaan deur die stappe.
Maar -
ja.
>> STUDENT: Is hulle altyd in o lêers. wanneer hulle in die biblioteek vorm,
gereed saamgesmelt staan ​​te word, gekoppel - soos hulle is in die binêre kode?
>> JASON Hirsch: OK.
Wat -
>> STUDENT: Is dit altyd die geval is vir die biblioteke wanneer jy hulle skakel?
>> JASON Hirsch: Ja.
So daar is. S lêers, wat sal masjien kode, wat ook
kriptiese aan jou.
Jy hoef nie bekommerd te wees oor daardie.
Maar oor die algemeen, ja, sal hulle in. o lêers gereed om te gaan.
>> STUDENT: So wanneer jy stuur na 'n biblioteek, nie net stuur jou
die. h en die. o?
Jy het die skip nie die. C of die. S.
>> JASON Hirsch: So -
en dit is in hierdie kort sowel as hierdie inligting blyk te wees 'n
bietjie vinnig.
Maar die kort op die opstellers praat oor dit so goed.
Wanneer jy 'n biblioteek skip, as jy skip die. h, die kop lêer, die
funksie prototipes, en die 1's en 0's, dit is al wat jy nodig het om te gee.
Jy hoef nie te gee hoe die funksie werk, die. c lêer.
Omdat die punt van onttrekking, of die wys APIs, die punt op hierdie SPL,
die Stanford draagbare biblioteek, is dit vir jou om nie bekommerd wees oor hoe om nuwe
GRect werk, of hoe beweeg werke, of hoe voeg werke.
Al wat jy hoef te weet, is dat byvoeging is 'n funksie wat jy kan
gebruik, en doen dit.
So jy regtig nodig het om te weet hoe Dis in C. Jy geskryf net nodig het om te
weet, hier is die funksies, wat hulle doen, en hier is die 1 en 0's
as jy regtig wil om dit te gebruik.
>> Cool.
Enige verdere vrae oor opstellers of ander onderwerpe op die bord?
>> STUDENT: Ek het 'n vraag van die implementering van rekursiewe funksies.
'N vraag oor rekursie.
Ek het 'n gevoel wat jou sal kom.
So laat ons gaan vinnig deur rekursie met 'n spesifieke
Byvoorbeeld, 'n faktoriale funksie.
Want dit is 'n voorbeeld wat dikwels kom of gebruik word
rekursie te illustreer.
>> So "4!" is as 4 faktoriaal lees.
En wat beteken 4 faktoriaal beteken?
Wat beteken dat jy doen?
Hoe bereken jy 4 faktoriaal?
4 keer 3 keer 2 keer 1.
>> So 'n ander manier 4 faktoriaal te skryf is om dit te skryf.
4 keer 3 faktoriaal.
Omdat 3 faktoriaal is 3 keer 2 keer 1.
So 4 keer 3 faktoriaal 4 keer 3 keer 2 keer 1.
Dit is die rede waarom faktoriaal is 'n groot kandidaat vir rekursie, want dit is
duidelik dat daar is iets wat gebeur oor en oor en oor op 'n
kleiner aantal van die dinge wat tot jy aan die einde.
Wanneer jy by 1, 1 faktoriaal is 1.
Jy kan nie veel verder te gaan.
0 faktoriaal word ook gedefinieer as 1.
So wanneer jy na 1 of 0, is jy aan die einde, en jy kan
begin om terug te gaan.
So as ons wou 'n rekursiewe te skryf funksie 'n faktoriale te bereken,
Ons gaan 'n paar te skryf pseudokode vir wat nou.
Voordat ons skryf dat pseudokode -
Ek gee julle 'n paar minute die pseudo-kode te skryf of dink net
daaroor - is daar twee dinge wat elke rekursiewe funksie nodig het.
Wat is die twee dinge?
>> Jack: Dit het om homself te noem.
>> JASON Hirsch: Noag?
O, Jack.
Gaan voort.
>> Jack: Dit het om homself te noem.
>> JASON Hirsch: So 'n rekursiewe funksie moet 'n rekursiewe oproep, 'n
roep self.
Dit is een.
En wat is die ander ding?
>> Jack: A basis geval.
>> JASON Hirsch: 'n basis geval.
'N basis geval is, hier is wanneer ons stop.
Sodat jou funksie kry genoem.
Die basis saak kom eerste.
Jy wil weet as jy aan die einde.
En as jy nie aan die einde, jy maak jou rekursiewe oproep.
En jy gaan deur middel van hierdie funksie weer check jou basis geval weer.
As jy nie die einde, maak jy 'n ander rekursiewe oproep,
ensovoorts, ensovoorts.
>> Dit is waarom rekursiewe funksies altyd moet die basis gevalle en dié
rekursiewe oproepe.
As jy nog nie 'n rekursiewe oproep, is dit sou nie 'n rekursiewe funksie.
As jy nie 'n basis geval, sou jy vir ewig gaan
sou daar geen einde wees nie.
En die basis geval kom altyd eerste, want jy sal altyd wil om te kyk
As jy aan die einde eerste.
So voordat ons doen 'n paar pseudokode, waarom het jy nie 'n minuut neem om te dink oor
hoe om 'n rekursiewe funksie faktoriaal sou geskryf word?
>> Ook, soveel as wat jy doen, skryf dit uit op 'n vel papier is
wat jy gaan te hê doen op die quiz môre.
So waarskynlik goeie praktyk te maak Maak seker dat die kode wat jy skryf
neer op papier -
of jy dit kan doen.
Jy weet waar die kommapunte is.
Jy onthou die sintaksis.
Omdat jy nie in staat wees om 'n samesteller vertel nie 'n fout gemaak.
>> Ook, langs die lyne, môre, wanneer jy kodering probleme, as jy
is 'n gejaag vir die tyd, of as jy baie verward oor hoe jy veronderstel is om te
skryf die spesifieke ding in c, dit sou behoove jy pseudo-kode te skryf
of skryf kommentaar in as well.
Want daar is gedeeltelike krediet vir 'n Baie van die vrae oor die toets.
So kan jy dalk gejaag word, of jy dalk net verwar word.
Skryf in kommentaar of pseudo-kode is dikwels maniere waarop jy
kan kry gedeeltelike krediet.
>> So iets laat nie leeg op die quiz.
Daar is geen boetes vir om dinge in
Trouens, om in pseudo-kode of kommentaar gaan die padskraper te help
uit te vind of jy eintlik weet wat jy praat, en miskien toekenning
jy 'n paar gedeeltelike krediet vir daardie.
>> Ook langs die lyne, skryf duidelik.
As ons kan nie regtig wat jy wil skryf, Ons gaan nie om jou te bel
middernag môre figuur uit te vind wat jy geskryf het.
Ons is maar net gaan punte af te neem.
Skryf duidelik, sodat ons kan hoor, of liewer, ons kan lees wat jy geskryf het.
>> En as dit sê twee sinne, nie 'n lid skryf.
Volg die instruksies.
Skryf duidelik.
En skryf in die kommentaar of pseudokode vir vrae wat gevra kan
toekenning gedeeltelike krediet.
>> OK, laat ons gaan faktoriaal.
So het ons 'n funksie factorial.
As ek eintlik skryf hierdie in C, wat moet ek voor die naam te sit
van die funksie?
Die opbrengs tipe, wat in hierdie geval is, sal ons dit gee int.
En dan in die krulhakies, is wat gaan die binnekant van die krulhakies vir
'n funksie?
>> STUDENTE: Argument tipe.
>> JASON Hirsch: Die argumente.
So faktoriaal sal waarskynlik neem 'n argument.
Dit sal waarskynlik slegs een argument.
En ons sal sê dit sal neem 'n heelgetal genoem x.
En weer, toe die prototipe van skryf 'n funksie of die skryf van die funksie
in jou kode voor te definieer, moet jy skryf die data tipe en die naam van
dat veranderlike vir daardie enigste funksie.
So kan jy 'n paar nommer slaag in hierdie funksie, sal dit verwys word as x
intern.
>> Ons het ons faktoriaal funksie.
Ons moet twee dinge, 'n basis geval en 'n rekursiewe oproep.
Wat is die basis geval vir faktoriaal?
Iemand wat dit geskryf het uit en wie nie het nie gepraat nie, wat is die basis
geval vir faktoriaal?
>> STUDENT: Indien n minder as 2, terug 1.
>> JASON Hirsch: Indien n ' minder as 2, terug 1.
Ek hou van wat, want dit sorg van 0 en 1.
So ons sal doen x <2, terug 1.
As ons geslaag 0, as ons geslaag 1, Hierdie funksie sal
onmiddellik terug 1.
As ons verby 'n klein aantal groter as of gelyk aan 2, gaan ons
het ons rekursiewe oproep.
>> En hoe is dit gaan om te werk?
Kan iemand anders wat gewerk het op hierdie wat nog nie gepraat gee my die
rekursiewe oproep vir die funksie in pseudokode?
As ons geslaag in 'n aantal x en dit is meer as 2, wat
wil ons te doen?
Ons het ook 'n voorbeeld wat geskryf is op die kant wat kan jy 'n wenk.
>> STUDENT: Call x keer die faktoriaal van x minus 1?
>> JASON Hirsch: Presies reg.
Ons gaan om terug te keer x keer die faktoriaal van x minus 1.
En dat, selfs al het ek geskryf het, basies, wat jy gesê het in Engels,
hierdie faktoriaal funksie weer 'n beroep sal kry.
Dit sal uit te voer op x minus 1.
Dit sal terugkeer met 'n paar heelgetal, en dan sal dit die twee vermenigvuldig
saam, en wat waarde sal wees terug na wat ook al noem hierdie
faktoriaal funksie, wat dalk 'n ander geval van
hierdie faktoriaal funksie.
>> So dit is 'n voorbeeld van 'n rekursiewe funksie, 'n baie
eenvoudige rekursiewe funksie.
Maar die meeste van hulle sal wees soos hierdie.
As jy wil graag 'n goeie rekursiewe Groot uitdaging vir die toets, probeer kodering
binêre soek rekursief.
Want as jy het binêre soek vir probleem van drie, het jy waarskynlik het dit
iteratief in 'n rukkie lus.
>> Maar dit kan ook geskryf word rekursief.
Jy gaan nodig het om jou eie te skryf afsonderlike funksie dat sommige neem
verskillende opdrag-lyn argumente - of nie opdrag-lyn argumente, sommige
verskillende net gewone argumente.
Maar jy kan binêre soek skryf rekursief as well.
>> STUDENT: So jy kan ook geskryf word, in plaas van x minus 1, het jy
kon ook geskryf x minus minus, of jy kan 'n
geskryf minus minus x.
Kan jy net regtig vinnig hoekom verduidelik diegene sou wees om verskillende dinge,
soos wat die verskil is tussen x minus minus en minus minus x?
>> JASON Hirsch: Nee, ek is nie gaan om te gaan in daardie.
Maar ek sal met jou te praat oor dit na klas. x minus minus minus minus x
Trek 'x deur 1.
Maar hulle doen dit 'n bietjie anders.
Maar ek wil nie in te gaan.
Ander vrae oor rekursie of hierdie funksie?
Dit is nie regtig selfs pseudokode.
Dit is basies die kode in C sou jy skryf vir hierdie.
>> OK, enige ander vrae oor onderwerpe hier?
Ja.
>> STUDENT: Ek het 'n vinnige verduideliking van swaai punt en presisie.
>> JASON Hirsch: Floating punt en presisie.
Kan iemand werklik te vinnig gee my 'n verduideliking van
swaai punt en presisie?
Julle almal het dit te doen vir jou probleem stel, sodat jy al
vertroud met dit.
Of miskien nie almal van julle.
Enigiemand?
Gee my 'n begin spot.
Swaai punt en presisie.
Wat is die probleem?
Ja.
Victoria?
>> VANESSA: Vanessa.
>> JASON Hirsch: Vanessa.
Jammer.
>> VANESSA: Daar is slegs 'n beperkte aantal getalle wat voorgestel kan word
omdat jy op 'n, in ons geval, 'n 32-bis-stelsel.
So jy soort van moet make-up 'n paar nommers.
>> JASON Hirsch: So dit is presies reg.
Daar is slegs 'n sekere bedrag van getalle wat voorgestel kan word.
As jy twee baie groot getalle vermeerder dit kan die bedrag oorloop
van ruimtes wat jy hoef te verteenwoordig 'n heelgetal.
Dit is hoekom ons soms gebruik om 'n lang lang in plaas van 'n int.
Dit het meer ruimtes.
Dit kan 'n groter aantal hou.
>> Swaai punt presisie te doen het met nie, maar ook te doen het met die
feit dat desimale getalle nie altyd verteenwoordig.
Jammer.
Laat ek dit terug.
Die desimale getal 1,0 is nie altyd verteenwoordig soos jy sou verwag,
1,000000000.
Dit is soms verteenwoordig as 1,000000001 of 0,999999999.
Dit kan selfs 89 gegooi word daar iewers.
So diegene desimale getalle is nie verteenwoordig presies soos jy sou
verwag dat hulle verteenwoordig word.
>> So in die probleem gestel -
Dit was twee? -
probleem sit twee, waar ons hanteer swaai punt getalle, toe ons wou
om hulle te verteenwoordig presies wat ons wou om hulle te verteenwoordig, die aantal
van pennies, of die aantal sent, ons hulle vermenigvuldig met 100.
Ons afgerond het.
En dan het ons alles afgesny agter die desimale punt.
Dit was om te verseker dat hulle nie sou eintlik gelyk presies wat ons wou
om hulle te ewenaar.
>> Want wanneer jy iets neem wat 'n float en draai dit in 'n int, jy
afgesny alles aan die regterkant van die desimale punt.
Want daar is 'n paar drywende punt onakkuraatheid, 100,000 kan wees
verteenwoordig as 99,999999999.
En as jy net afgesny alles te die reg om dadelik, gaan jy
kry die verkeerde nommer.
Ja.
>> STUDENT: Ek het 'n vraag oor giet.
Wat beteken dit om in voorkom?
As jy float doen, tussen hakies, 1 gedeel 10, beteken dit nie 1 gedeel deur 10,
dan kry 0,1, dan draai dit in 'n float?
>> JASON Hirsch: As jy dit doen dryf 1 gedeel deur 10 -
>> STUDENT: Ja, en dan is gelyk aan -
Wel, dit gewoonlik het dit in gelyke -
Ja.
Jy wil dit 'n float te maak, reg?
>> JASON Hirsch: OK, so ons gaan gebruik om dit te segue in die uitzoeken
Die antwoorde op hierdie vrae deur kodering.
Want jy sal waarskynlik 'n baie hierdie minuut vrae, en 'n goeie manier
dit op te los, is deur kodering.
So ons gaan om dit reg te kodeer nou, en dan gaan ons terug te gaan en
kode om die vraag wat jy het.
>> So het die eerste reël -
Ek moet nie geskryf het nie - wat Die eerste ding wat ons wil doen, wanneer ons
open 'n nuwe lêer in gedit?
>> STUDENT: Sluit.
>> JASON Hirsch: Sluit wat?
>> STUDENT: CS50 biblioteek.
>> JASON Hirsch: OK.
Wat anders moet ons insluit?
Ons is net gaan om te kyk wat gebeur wanneer jy iets aan 'n float gegooi.
Maar wat moet ons in te sluit as ons gaan 'n C program te skryf?
>> STUDENT: Standard I / O.
>> JASON Hirsch: stdio.h.
Ons is eintlik nie nodig het, vir hierdie program, cs50.h, selfs al is dit
altyd nuttig om dit te sluit.
Maar ons het nie altyd stdio.h nodig.
>> STUDENT: Wanneer kodering in C?
>> JASON Hirsch: Wanneer kodering in C.
>> So ek stoor dit as dit. C lêer.
Ek kry 'n paar mooi accentuering.
Ek het leemte binne hoof.
Wat beteken leemte beteken?
>> STUDENT: Maak nie neem opdrag-lyn argumente.
>> JASON Hirsch: Void middel, in hierdie geval, hoof geen neem
opdrag-lyn argumente.
In ander gevalle, beteken dit dat die funksie nie opdrag-lyn argumente neem.
Of die funksie, as ek nietig te skryf main (void), sou wat sê hoof se
nie terugkeer nie.
So nietig beteken net mooi niks.
Wat sou ek skryf as ek was om te neem opdrag-lyn argumente?
>> STUDENT: int boog c string boog v
>> JASON Hirsch: int argc string bevat SPASIES.
Is dit reg?
>> STUDENT: Dis kar ster bevat SPASIES hakies.
>> JASON Hirsch: So jy kan skryf string bevat SPASIES hakies of kar ster bevat SPASIES
hakies, maar jy moet die hakies.
Omdat bevat SPASIES is 'n skikking van snare, onthou.
Dit is nie net 'n string.
So string bevat SPASIES is, hier is een string genoem bevat SPASIES.
String bevat SPASIES hakies is, hier is 'n verskeidenheid van snare.
So int argc string bevat SPASIES hakies sou iets wees wat ek
sou waarskynlik skryf.
>> So jy wou stoor in 'n heelgetal?
>> STUDENT: Ja, heelgetal.
Of in 'n float.
>> JASON Hirsch: In 'n float?
Soos, float x is gelyk aan 1 gedeel deur 10.
>> JASON Hirsch: OK.
Hoe kan ek druk 'n float in printf?
Wat?
>> STUDENT:% f.
>> JASON Hirsch:% f.
Wat is 'n heelgetal?
d of i.
Wat is 'n string?
>> STUDENT: s.
>> JASON Hirsch: s.
Hoe kry ek 'n nuwe lyn?
>> STUDENT: agteroorskuisstreep n.
>> JASON Hirsch: Wat moet ek terugkeer As hoof lopies korrek?
>> STUDENT: 0.
Moet ek daardie lyn te skryf, al is?
>> STUDENT: No
OK, ons sal dit nie skryf nie, dan is.
Kan almal lees dat?
Dit lyk 'n bietjie klein.
Kan almal sien, of indien Ek maak dit groter?
Ek dink vir die kamera, sal ons maak dit 'n bietjie groter, al is.
>> JASON Hirsch: As Ek wil hê om dit te draai . C lêer in 'n uitvoerbare, wat
skryf ek?
>> STUDENT: Maak toets.
>> JASON Hirsch: Jammer?
>> STUDENT: Maak toets.
>> JASON Hirsch: Maak toets.
Ons het gesels oor hierdie lyn vroeër.
Klang.
Wat is klang?
Die naam van die samesteller.
Wat is hierdie lyn?
>> STUDENT: sit hulle vir die gebruik van GDB.
>> JASON Hirsch: Sets dit vir die gebruik van GDB.
Hierdie lyn, wat is dit?
>> STUDENT: Bronkode.
>> JASON Hirsch: Dit is die bron lêer, die. c lêer.
Wat het hierdie twee lyne doen?
Of hierdie twee nie lyne.
>> STUDENT: Dit name dit toets.
>> JASON Hirsch: So het die streep o sê, noem dit iets anders.
En hier is jy noem dit toets.
As ek nie dat, wat sou dit noem dit?
>> STUDENT: a.out.
>> JASON Hirsch: a.out.
Wat beteken dit doen?
>> STUDENT: Links Die wiskunde biblioteek.
>> JASON Hirsch: Dit skakel in die wiskunde biblioteek.
Ons het nie die wiskunde biblioteek, maar want dit is so algemeen, het hulle
skriftelike om altyd die wiskunde biblioteek.
En net so, dit sluit die CS50 biblioteek.
>> OK, so as ons 'n lys, ons het nou ' 'n uitvoerbare genoem toets.
Dit uit te voer, skryf ek toets.
Ek sien dat my swaai punt, as wat verwag is, is gelyk aan 0.
Doen dit -
so -
>> STUDENT: Dan as jy dryf nou, soos jy gooi dit as float -
>> JASON Hirsch: Gooi die 1 na 'n float?
>> STUDENT: Nee, gooi die volle ding -
ja.
As jy net dit gedoen het, sou wat maak dit 0,1?
>> JASON Hirsch: OK, so regtig vinnig, 1 gedeel deur 10, dit is
heelgetalle verdeel.
So wanneer jy heelgetalle verdeel, hulle is 0, en jy spaar dat 0 in 'n
dryf, omdat die streep is net integer-afdeling.
So nou is ons iets draai in 'n float.
>> Kom ons kyk wat gebeur.
Ons sal toets maak.
So nou sien ons dat streep was nie integer-afdeling, was dit swaai
punt afdeling.
Omdat een van sy argumente is aan 'n float gegooi.
So nou is dit te sê, te behandel hierdie afdeling, soos wat ons te doen het met
swaai punte, nie met heelgetalle.
En so kry ons die antwoord wat ons verwag.
>> Kom ons kyk wat gebeur -
Oeps.
As ek wou meer desimale te druk kolle, hoe kan ek dit doen?
>> STUDENT: Point dot f, of soveel desimale plekke as wat jy wil.
>> JASON Hirsch: So ek druk 10 desimale plekke.
En ons nou sien ons kry 'n paar vreemde dinge.
En wat gaan terug na jou vraag oor swaai punt onakkuraatheid.
Daar is vreemde dinge gestoor in hier.
>> OK, beteken dat jou vraag beantwoord?
Wat anders het jy wil vinnig code?
>> STUDENT: Ek wou net om te sien of nie, as jy bevry 'n paar wyser,
of dit wyser steeds het gestoor in dit die adres van wat dit was
wys na voorheen.
>> JASON Hirsch: OK, so laat ons dit doen.
Char ster ptr, dit skep 'n veranderlike genoem ptr van tipe char ster.
Hoe skryf ek 'malloc?
Alden?
>> ALDEN: Slegs malloc.
Maar dan is dit die grootte van te wees, en In hierdie geval, ek dink jy wil
word verwys na teken.
So dit sou wees kar.
>> JASON Hirsch: OK, so meer generies, Binne -
laat se wysig.
Binne malloc, wil jy die aantal grepe op die hoop.
Die algemeen, wat ons gesien het dat ons doen, is ons gaan malloc
snare, byvoorbeeld, of skikkings van heelgetalle.
So as ons wil 10 heelgetalle, of 10 karakters, 10 sal ons 10.
En dan grootte van karakters sou gee ons dat die grootte van die karakters, wat in
hierdie geval is 1 byte.
Ons kry 10 grepe.
As ons die grootte van die int te skryf, wat sou gee ons 40 grepe.
>> So meer generies, binnekant van malloc is die aantal grepe wat jy wil.
In hierdie geval, is ons om 1 byte.
Wat lyk soos 'n vreemde gebruik van malloc, maar vir ons
doeleindes sin maak.
So daar is nie.
>> Ons gaan vry om te bel.
Ons ontslae te raak van dit en ons gebruik ptr weer.
En wat het jy wil om te kyk?
>> STUDENT: Ek wou net om te kyk of of nie daar was iets
binnekant van dit.
>> JASON Hirsch: So of dit verwys na enigiets?
>> STUDENT: Ja, presies, of dit is nog steeds 'n geheue adres.
>> JASON Hirsch: So jy wil die waarde van ptr na te gaan?
>> STUDENT: Ja, presies.
>> JASON Hirsch: Wat doen ek hier skryf As ek wil die waarde van die na te gaan
punt - wat is, Jordan sê, die waarde?
Of wat is die binnekant van ptr gestoor?
>> Student: a geheue adres.
>> JASON Hirsch: 'n geheue adres.
So as ek skryf net dit, dit sal gee my die waarde van ptr.
En hoe druk ek uit 'n geheue adres?
Wat is die formaat string vir 'n geheue adres?
>> STUDENT:% p.
>> JASON Hirsch:% p.
% S is 'n string.
% P vir wyser.
Is dit reg?
Dit is reg.
So ptr gelyk -
dit is nog steeds iets in dit.
Dit is waarskynlik 'n meer interessante vraag.
Wat beteken dat die lyn te doen?
>> STUDENT: ma foute.
>> JASON Hirsch: Wat?
>> STUDENT: Ek dink dit seg foute.
>> JASON Hirsch: Hm?
>> STUDENT: Ek dink dit sal seg skuld.
>> JASON Hirsch: So hierdie lyn van die kode, ster ptr, wat
beteken die ster beteken?
>> STUDENT: Inhoud van.
>> JASON Hirsch: Ja.
Gaan die inhoud te kry.
So dit gaan om te gaan na die geheue spreek daar, en gee my dat.
Ek gebruik% c reg hier, want daar is karakters wat daar gestoor.
So ons gaan om te gaan na die adres wat ons net gesien - of dit sal waarskynlik 'n
bietjie anders hierdie tyd loop ons die program.
Maar ons sal gaan na daardie adres wat ons weet nog steeds bestaan
en kyk wat daar is.
>> So dit het nie seg skuld.
Dit het net nie vir ons nie.
Dit mag dalk het ons eintlik gegee iets wat ons net nie kan sien nie.
En wat gaan terug na hierdie idee -
en ons gaan nie te veel in te kry hierdie, want dit is buite die
omvang van hierdie kursus.
Maar ons het gepraat oor reg hier, as ons het buite die grense van die skikking deur
1, kan ons nie in die moeilikheid beland.
>> Soms, wanneer jy net af te gaan met 1, jy doen iets verkeerd, en jy
kon kry in die moeilikheid.
Maar jy kry nie altyd in die moeilikheid.
Dit hang af van hoeveel van 'n slegte ding wat jy nie, jy gaan te kry in die moeilikheid.
Dit is nie te sê, wees slordige met jou kode.
Maar dit is om te sê, die program sal nie altyd hou, selfs as jy iewers gaan
jy is nie veronderstel om te gaan.
>> 'N Goeie voorbeeld is, 'n baie mense in hulle probleem stel 3, wat
was 15, het nie die grense van die raad.
So jy kyk na links, kyk na die regs, kyk na die top, kyk
aan die onderkant.
Maar jy het nie kyk om te sien of die top was eintlik gaan wees op die bord.
En 'n baie van die mense wat dit gedoen het en het dat hulle program gewerk
perfek, want waar die raad was gestoor in die geheue, as jy het 'n
bo dit of bewys dat die geheue adres, was daar niks
veral verskriklik oor wat, sodat jou program was nie
gaan gil op jou.
>> Maar ons sal nog steeds af punte as jy nie kyk nie, want jy
is iets wat jy nie doen veronderstel is om te doen nie, en jy kan hê
gekry in die moeilikheid.
Kans is, al is, jy waarskynlik nie.
So dit is om te wys dat ja, Ons kan nog steeds gaan om dit te.
En ons is nie om in probleme in hierdie geval.
As ons probeer om te doen lees die volgende 100 karakters, wil ons
waarskynlik in die moeilikheid.
En jy kan kode lees die volgende 100 karakters as jy wil deur 'n paar
soort van lus.
Ja.
>> STUDENT: Sedert ons opgedra wat ruimte 'n werklike waarde, sou ons nie
eintlik in staat wees om enigiets te sien.
Moet ons probeer om dit met die opstel van die gelyk c of iets te hou?
>> JASON Hirsch: Groot vraag.
Hoe stel ek wat waarde -
watter lyn van die kode skryf ek op die lyn sewe om te doen wat jy gesê?
>> STUDENT: Star ptr gelyk aan enkele quote c enkele aanhaling eindig.
>> JASON Hirsch: So dit is om 'n karakter, c, op die plek,
want weer, wat ster beteken gaan daar.
En wanneer dit gebruik word op die linkerkant van 'n opdrag operateur, wat gelyk is aan
teken, ons gaan nie te kry wat waarde soveel soos wat waarde.
Nou laat ons sien wat gebeur.
>> Ons sit iets daar en dit was daar.
Ons het gratis.
Sommige dinge waarskynlik gebeur op die hoop.
So dit is nie daar nie.
Maar weereens, ons kry nie in die moeilikheid gaan daar.
>> Ek doen dit in kode te illustreer dat 'n groot deel van hierdie
vrae wat jy het, is hulle baie interessant
beantwoord 'n baie tyd.
En hulle is regtig 'n goeie vrae.
En jy kan dit uit te vind op jou eie as, byvoorbeeld,
ons is nie in afdeling.
Ja.
>> STUDENT: Omdat jy nie die stuur van die aanwijzer plek, het jy nodig om te
gebruik malloc?
>> JASON Hirsch: So dit gaan terug jou aanvanklike vraag.
[? ?]
Is dit net 'n plaaslike veranderlike?
Malloc hier is nie dat dwingende.
Die gebruik van malloc hier is nie dat dwingende, want dit is
net 'n plaaslike veranderlike.
>> STUDENT: So kan jy doen kar star ptr gelyk hallo?
>> JASON Hirsch: Oh.
So ons gaan nou terug te kry jou aanvanklike vraag.
Ek dink jy is nie tevrede met my antwoord.
OK?
Soos wat?
>> STUDENT: Ja.
Wag nie.
>> JASON Hirsch, en waar wil jy om uit te druk?
So sal ons druk 'n string soos wat?
>> STUDENT: Interessante.
>> JASON Hirsch: So dit sê dit argument het die tipe van 'n karakter.
So dit moet 'n karakter wees.
>> STUDENT: neem net die eerste een.
>> JASON Hirsch: So dit is wat ek gesê het.
Soos ek gesê het, dit is nie die stoor van die string binne veranderlike wyser.
Dit is die stoor -
>> STUDENT: Die eerste waarde van die string.
>> JASON Hirsch: Die adres van die eerste waarde van die string.
As ons uit te druk nie, ons is om die waarde in wyser.
En ons sal sien wat dit is, inderdaad, 'n geheue adres.
>> Is wat sin maak?
Jammer.
Wag, gee dat die antwoord jou vraag, al is?
>> STUDENT: Ja.
>> JASON Hirsch: Hierdie lyn van die kode is skep van 'n string en dan nog 'n
veranderlike wyser dit is wys aan daardie string, wat opgestel is.
Ja.
>> STUDENT: So as ons gaan een geheue verder te spreek, sal ons die h?
Is dit gestoor word as 'n string?
>> JASON Hirsch: Soos ons gedoen het -
so dit is waardevol om te doen.
Dit is punt rekenkundige, wat julle gesien het voor en moet
relatief gemaklik met.
Dit is soortgelyk aan die skryf van -
As ons hierdie lyn van die kode te skryf, Ons het gesien verskeidenheid notasie voor.
Dit moet gee ons die tweede waarde in hierdie skikking, h.
>> As ons dit gedoen het, moet dit ook gee ons die tweede in daardie skikking.
Want dit is nie van plan om die geheue adres van die eerste ding, maar die
geheue adres van die ding een oor.
En dan is die ster operateur dereferences dat wyser.
En weer, laat ons sien.
Ons kry h weer.
>> STUDENT: Wat presies beteken dereference beteken?
>> JASON Hirsch: Dereference is 'n fancy woord vir gaan.
Gaan na dat en kry wat daar is om dereference 'n wyser.
Dit is net 'n fancy woord vir dit.
>> STUDENT: As ons wou druk die hele string, kan ons
doen ampersand wyser?
>> JASON Hirsch: OK, ons is hier gaan stilstaan.
Ons gaan hier eindig.
Ampersand gee jou die adres van 'n plek, so wanneer jy dit doen ampersand van
'n veranderlike, dit gee jou die adres waar daardie veranderlike gestoor word.
Ampersand wyser sal jy die gee adres van ptr waar ptr is in die geheue.
>> Ons gaan nie om te gaan op met hierdie voorbeeld.
Jy kan uitvind van hierdie dinge op jou eie.
Maar weereens, kan dit selfs verging word om 'n bietjie meer as wat jy nodig het om te weet vir
die omvang van hierdie mid-term -
of hierdie quiz, eerder.
Jammer.
>> Ons gaan om te beweeg op, want ek sou graag een kodering probleem te doen
voor die tyd om is.
En ons gaan die kode wat ek dink is die mees dwingende van hierdie
voorbeelde, atoi.
So dit was 'n vraag oor 'n toets twee jaar gelede.
En ek het dit op die bord hier.
>> Mense is gevra om op die quiz -
hulle gegee 'n bietjie meer tesxt in die vraag, maar ek uitgeskakel die
teks, want dit was onnodig Vir ons doeleindes nou.
Dit was net 'n bietjie agtergrond op wat atoi het.
Maar jy weet en is baie vertroud is met atoi.
>> Ek stel voor jy kode Hierdie op 'n vel papier.
Ek stel ook voor jy die strategie gebruik dat ons het gegaan oor
'n baie in ons afdeling.
Eerstens, maak seker jy verstaan wat atoi se doen.
Teken 'n prentjie of kom met 'n paar geestelike beeld van dit in jou kop.
Volgende, skryf pseudokode vir hierdie.
Op die quiz, as alles wat jy kry, is pseudokode, ten minste
sit iets neer.
En dan kaart wat pseudokode op C. As jy 'n tjek in jou
pseudokode, soos kyk of iets is 1, wat kaarte op 'n as
toestand en so meer.
En uiteindelik, kode om die program in C.
>> So gaan terug na atoi en vyf minute hierdie kode op 'n vel
papier, wat waarskynlik oor die bedrag van die tyd wat jy sal neem om op 'n
quiz die kode atoi.
Vyf tot 15 minute, vyf tot 12, vyf tot 10 minute, is oor die hoeveelheid
tyd wat jy wil spandeer op hierdie vraag in die toets.
So vyf minute nou, asseblief.
En as jy enige vrae het, verhoog jou hand en ek sal bykom.
>> [SIDE CONVERSATIONS]
>> JASON Hirsch: OK, so dit was vyf minute.
Dit was waarskynlik oor die hoeveelheid tyd wat jy wil spandeer op wat op 'n toets,
Miskien is die lae einde van die tyd.
Ons sal vat in 'n bietjie.
Kom ons begin kodering hierdie.
En as ons dit nie kry nie al die pad deur, Die antwoorde op hierdie en hierdie
quiz vraag is beskikbaar, weer, Val 2011 is wanneer hierdie vraag
verskyn op die quiz.
>> En dit was die moeite werd agt punte op die quiz dan.
Agt punte is op die hoë einde van die bedrag van die punte iets die moeite werd.
Die meeste vrae is in die reeks van een tot ses punte.
So, dit is 'n meer uitdagende vraag, vir seker.
Kan iemand my begin?
>> Die algemeen, wat gaan ons om te wil doen met hierdie
funksioneer atoi, logies?
Wat wil ons doen?
So ons gaan om te skryf sommige pseudokode.
>> STUDENT: Skakel karakters in heelgetalle.
>> JASON Hirsch: Skakel karakters in heelgetalle.
OK.
So hoeveel karakters is ons gaan nodig om deur te gaan?
>> STUDENT: Almal van hulle.
>> STUDENT: Al die karakters in die tou.
>> JASON Hirsch: Al die karakters in die string.
So as ons wou om te gaan deur elke karakter in 'n string, wat is 'n ding
in C het ons gesien wat toegelaat het ons om te gaan deur elke
karakter in 'n string?
>> STUDENTE: 'n lus vir.
>> JASON Hirsch: 'n lus vir.
So ons gaan loop deur elke karakter in s.
>> Dan wat gaan ons wil doen wanneer ons 'n spesifieke karakter?
Sê ons kry geslaag het 'n 90.
Ons kry die 9.
Dit is 'n karakter.
Wat wil ons te doen het met daardie karakter 9?
>> STUDENT: Trek dit uit karakter 0?
>> STUDENT: Voeg 0?
>> JASON Hirsch: Trek dit van karakter 0?
>> STUDENT: Ja.
>> JASON Hirsch: Hoekom doen jy wil om dit te doen?
>> STUDENT: [onhoorbaar]
waarde.
Sy int waarde.
>> JASON Hirsch: OK, so ons neem om die karakter 9, trek dit uit
karakter 0 'n te kry werklike heelgetal 9.
Soet.
En hoe weet jy dat karakter 9 minus 0 karakter is 9?
Wat grafiek het jy na?
>> STUDENT: Daar is logies nege plekke tussen 9 en 0.
Of jy kan kyk na die ASCII-tabel.
>> JASON Hirsch: ASCII-tabel.
Maar ja, jy is reg as well.
So ons trek 0.
So nou het ons die integer 9.
En wat wil ons te doen met dit?
As ons 'n 90, dit is die eerste heelgetal ons het, wat ons wil hê om te doen?
>> STUDENT: Ek wil sit in 'n tydelike heelgetal skikking, dan doen wiskunde om dit te
later dit te maak in 'n einde.
>> JASON Hirsch: OK.
>> STUDENT: Jy kan begin aan die einde van die skikking en dan vorentoe te beweeg sodat
dat elke keer as jy vorentoe beweeg, jy dit met 10 vermenigvuldig.
>> JASON Hirsch: OK.
Dit klink soos 'n mooi dwingende idee.
Ons kan begin by die einde van ons reeks, en ons kan gebruik strleng.
Ons kan strleng gebruik hier.
Ons kry die lengte van ons tou.
Ons begin by die einde.
En + die eerste een, het ons net neem wat integer, en miskien skep ons soos 'n
nuwe heelgetalveranderlike tot bo waar ons stoor alles.
So het ons lus deur elke kar in s uit Terug na die voorkant, ons trek 0, en
haal ons dit, en afhangende van waar dit is, het ons dit vermenigvuldig
deur 'n krag van 10.
Omdat die eerste een, wat doen ons vermenigvuldig die regterkantste karakter deur?
>> STUDENT: 10 tot die 0.
>> JASON Hirsch: 10 tot die 0.
Wat doen ons vermenigvuldig die tweede regterkantste karakter deur?
>> STUDENT: [onhoorbaar].
>> JASON Hirsch: Wat?
>> STUDENT: 10 by die 1.
>> JASON Hirsch: 10 by die 1.
Die derde pyl karakter?
>> STUDENT: 10 tot die 2.
>> JASON Hirsch: 10 tot die 2.
>> STUDENT: Jammer, ek verstaan ​​nie wat ons hier doen.
>> JASON Hirsch: OK, laat se terug te gaan, dan is.
So ons gaan kry geslaag in 'n string.
Omdat ons wil skryf atoi.
So kry ons geslaag in 'n string.
Sê ons kry geslaag in die tou 90.
>> Die eerste ding wat ons gaan doen, is stel 'n nuwe heelgetalveranderlike dat ons
net gaan om te skep as ons nuwe heelgetal.
Dit is wat ons gaan om terug te keer aan die einde.
Ons moet om te gaan deur middel van elke karakter in die string, want ons het bepaal
wat ons nodig het om elkeen te raak en voeg dit dan na ons nuwe heelgetal.
>> Maar ons kan nie net voeg dit as 'n nommer.
Ons kan nie net neem 9 en voeg 9 tot ons heelgetal.
Dit hang af van die plek waar dit is in die tou.
Ons gaan nodig om te vermeerder dit deur 'n krag van 10.
Want dit is hoe basis 10 werke.
>> So gaan ons die werklike te kry karakter, of die werklike heelgetal
nommer, deur die aftrekking van karakter 0 van karakter 9 soos ons gedoen het met
trek karakter kapitaal A vanaf watter karakter wat ons gehad het in een van
hierdie probleme.
So ons sal eintlik 'n getal van 0 tot 9 gestoor as 'n reële getal, en ons sal
vermenigvuldig dit met 'n krag van 10, afhangende op die plek waar ons is in die tou.
En dan gaan ons dit terug te voeg in ons nuwe heelgetalveranderlike.
>> So, wat dit soos sou lyk word - ons sal trek hier verby.
As ons geslaag in die tou 90 -
>> STUDENT: [onhoorbaar].
>> JASON Hirsch: Maar atoi neem 'n string.
So ons gaan deur te gaan die hoewe.
Ons sal kry geslaag in 90.
Ons gaan van die terug na die voorblad.
Ons neem die 0.
>> STUDENT: Ek is jammer.
Miskien is dit dom.
As ons kry geslaag in 'n string, Hoekom is 90 wat ons is
kry geslaag in?
Omdat 90 is 'n heelgetal.
>> JASON Hirsch: Omdat atoi neem 'n string en draai dit in die heelgetal
voorstelling van die string.
Maar die string 90 is nie die heelgetal 90 of die nommer 90.
Die string 90 is 'n skikking van twee, of drie karakters, eerder, die 9
karakter, die 0 karakter, en die agteroorskuisstreep 0 karakter.
>> En ons skryf atoi, want vir Byvoorbeeld, wanneer jy die opdrag
lyn argument, en dit is gered in bevat SPASIES, is dit gestoor as 'n string.
Maar as jy dit as 'n aantal te behandel, jy nodig het om dit te omskep in 'n
werklike heelgetal.
Wat ons het een van ons probleem stelle.
Wat ons gedoen het in 'n aantal van ons probleem stelle.
Almal wat plaasgevind n heelgetal as 'n opdrag lyn argument.
So dit is waarom ons atoi funksie neem 'n string.
>> So weer, in ons voorbeeld hier, ons is gaan die laaste een te neem.
Ons gaan die karakter te trek 0 van dit, omdat die karakters 0
afgetrek deur die karakter 0 gee jou die werklike getal 0, volgens
die ASCII wiskunde wat ons doen.
>> Omdat karakters verteenwoordig as anders as hul werklike - die
a, byvoorbeeld, klein 'n 97.
Dit is nie - oops!
Dit is nie wat jy sou verwag dit moet wees, 0, byvoorbeeld.
So jy het om te trek die karakter 'n te kry 0.
>> So ons gaan om dit te doen hier die werklike getal te kry.
En dan gaan ons dit te vermenigvuldig met 'n krag van 10, afhangende van waar dit
is in die tou, en dan neem dit en voeg dit by ons plek houer
veranderlike, sodat ons kan kom met ons finale nuwe heelgetal.
Maak dit sin maak vir almal?
>> So ons gaan nie om dit te kodeer nou, want ons is
om kort op tyd.
Ek vra om verskoning vir die tydsberekening van daardie.
Maar dit is wat hopelik sal jy in staat wees om te doen op die toets - op die
minste, kry hierdie pseudokode uitgeskryf.
>> En dan, as ons te skryf om die pseudokode, eintlik, ons kan dit doen
redelik vinnig.
Elke lyn van die kommentaar wat ons ons geskryf hier kom neer op sowat
een lyn van C-kode.
Waarby 'n nuwe veranderlike, skriftelik 'n lus, sommige aftrek, sommige
vermenigvuldiging, en 'n paar opdrag.
Ons sou waarskynlik ook wil skryf 'n terugkeer lyn.
Ons kan ook wil om te sit sommige tjeks in hier.
Ja.
>> STUDENT: So kan ons behandel s as die werklike string?
Want ek weet dit is net 'n adres.
Soos, hoe sou jy die lengte van die string word geslaag deur?
>> JASON Hirsch: So hoe het die lengte van 'n string?
StrLen.
>> STUDENT: StrLen, ja.
Maar kan jy s as die argument vir wat?
>> JASON Hirsch: So StrLen neem 'n kar ster.
En volg dit dat kar ster, en dit hou tel totdat dit raak 'n
backslash 0. StrLen was eintlik een van die ander programme wat ons
gaan om te code.
Dit is nog 'n goeie een om te code.
Daardie een is 'n bietjie makliker te maak, want as jy gaan om te dink oor wat
konseptueel -
Ek het net gesê dit hardop - StrLen volg 'n wyser en hou gaan en
tel en die dop tot bereik 'n backslash 0.
>> STUDENT: OK, het dit.
>> JASON Hirsch: So beste van geluk op quiz 0 môre.
As jy enige vrae het, sal ek buite wees na hierdie.
Voel vry om my te e-pos.
Reik uit na jou eie TF as jy nie in my artikel, of kry my
e-pos as jy dit wil hê.
>> As jy wil om uit te freak en stuur vir my 'n e-pos, 'n e-pos freakout, sal ek
stuur jou terug, soos 'n smiley face, of, soos, 'n grap of iets.
So voel vry om dit te doen as goed.
Sterkte weer, en ek sal sien julle almal volgende week.