>> JASON Hirschhorn: Bonvenon al A5, everyone.
Ni havas ekscitan semajno antaŭ ni, plejparte ĉar tie estas tiom da novaj
alfrontas en tiu ĉambro.
Ĝi estas mirinda.
Multaj el vi alvenis ĉi tien hazarde, kio estas eĉ pli bona.
Do espereble vi devos teni aniĝon.
>> Ĉi semajne ni pasigos la plejparto de la sekcio
preparas por la kvizo.
Do por nia tagordo, ni iras por paroli iomete pri rimedoj por la klaso,
sed ankaux por la kvizo, kaj tiam, denove, elspezi la ŝvelaĵo de klaso parolado
pri demandoj.
Iam ni faris respondi vian demandojn, aŭ se via demandoj
nature kondukos nin al iu kodigo, mi havi specimenon problemoj de midterms
pasinteco, ke ni havos kodigi vivas en sekcio kune kiu ankaŭ venigi kelkaj aliaj
bonajn temojn por kovri.
>> Do unue, kiel ni jam trapasis la pasintaj kelkaj semajnoj por memorigi vin
knaboj, esas barelon da rimedoj disponebla por tiu ĉi kurso.
Multaj el ili estos nekredeble utila al vi, kiel vi daŭre
studi por kvizo 0, ĉar ĝi estas mardo posttagmeze.
Do ĉiu el vi estis studis por bito.
>> Esas prelego notoj kaj vikitekston kodo, ke vi devus
definitive kontroli.
Spektu la mallongaj.
Check out study.cs50.net.
Kaj tiam, listigita sube, numero de aliaj rimedoj.
>> Denove, kvizo 0 estas morgaŭ je 1 horo.
Se vi ne tion faris jam, kontrolu el la Pri Kvizo 0 dokumenton en la
Certe la hejmpaĝo elkompreni kie vi prenas la kvizo.
La kvizo startas je 1:10 kaj finiĝas 70 minutojn poste.
Do, se vi montros post 1:10, vi estas tuj atingi tiun multaj malpli minutoj
ol 70 al preni la kvizo.
Do certigu vi estas tie ĝustatempe.
Se vi estas etendo studento aŭ havi iuj aliaj provoj konsideroj, ŝi
ili ne estu, je 1 horo morgaŭ.
Sed denove, kontrolu la Pri Kvizo 0 dokumenti certigi vi scias kiam
vi prenas la kvizo.
Mi skribis 75 minutojn ĝis ĉi tie.
Mi opinias ke pravas, ne 70.
>> Ĝi kovras la tutan materialon de semajno 0 al la pasinta semajno prelego merkrede.
Kaj denove, por tiu kvizo, por ke dokumento, vi ricevas unu duflanka kaj 8
1/2 por 11 paperfolion kiun vi ricevas uzi kiel notoj dum la kvizo.
Multaj homoj, se ne la plej multaj homoj, havas trovis ke la sola plej helpema vojo
por studi por la kvizo estas fari studon tukon, a
unu-Sider, siajn proprajn.
Do rigardu pasintaj se vi jam vidis pasintaj.
Etendu al amikoj, por vidi, kion ili estas meti sur ilia.
>> Sed la manoj-sube, la plej bona maniero vi povas Studo estas iri tra ĉiu kaj
Whittle gxin malsupren al kio devus aŭ devus ne apartenus en tiu folio
papero, ĉar tio estas nur vere helpema maniero por vi certigi
vi iras tra ĉiu kaj havi iom familiareco kun ĝi.
La plej multaj homoj, ni trovos, eĉ kvankam ili esti la paperfolion sidantan dekstre
apud ili sur la kvizo, ne turni al ĝi, ĉar, denove, ke tre
procezo de irante tra la informo helpis ilin lerni ĝin.
>> Ĉu iu havas demandojn pri kvizo 0?
Havas everybody -
Mi ne faros pruvon de la manoj.
Neniam menso.
Mi tuj demandas kiu ekstudis.
Sed mi ne volas fari vin ĉiuj ne levas viajn manojn.
Do kiel mi diris - jes, Avi, iru antaŭen.
>> AVI: Kio estus utila afero meti en la unu-pager?
>> Studento: Tio dependas de vi.
>> JASON Hirschhorn: Vi ricevas uzi vian juĝon.
Utilaj aferojn, por meti sur la unu-pager, se vi estas konfuzita pri la granda O
runtime de malsamaj tipoj de serĉoj kaj varoj enkalkulu en tie en
oportuna dando abako.
Tiel, se vi demandis, ke sur la kvizo, vi ne bezonas provi kaj figuro
ĝin aŭ motivo tra la ekzekuto.
Vi povas simple kopii ĝin malsupren.
Se vi rigardas kvizojn pasinteco, multaj fojoj, ke ekzistu rultempo demandoj.
Do kiu estus ekzemplo de bona aferon, por meti sur vian unu-pager.
>> Aliaj bonaĵojn por surmeti, se vi estas konfuzita pri kiel deklari
funkcio aŭ kio la diversaj partoj de la funkcio deklaracio estas, skribi
ke sur tie, ĝenerala versio kaj tiam eble ekzemplo.
Se vi estas konfuzita pri montriloj, diagramon de kiel montriloj verko estas
probable vere helpemaj.
Se vi estas konfuzita pri rikuro, unu studadi rekursia funkcio sur tie
povus ankaŭ pruvi al esti vere utila.
Ĉu tio donos al vi kelkajn ideojn?
>> AVI: Vi devas kompreni la tuta kompilita procezo, kiel
ke ĉiuj verkoj?
>> JASON Hirschhorn: Ĉio kiu estis kovrita povis
aperos sur la kvizo.
Demandoj -
sed denove, kelkaj aĵoj estos pezigita peze ol aliaj.
Kelkaj aferoj venas denove kaj denove en la klaso, en
lekcio, kaj sekcion.
Aliaj aferoj ne antaŭvidi ke ofte.
>> Ni parolis multe pri # include kaj -L io kaj kio tiuj signifas en
kompilado procezo.
Ni parolis multe pri GDB, krampas, tiuj malsamaj flagoj kiujn ni uzas, kiam
ni kompilos ion, kaj kion make15, ekzemple, vere
signifas kaj vere faras.
Ni ne parolas tiel pri ĉiu sola paŝo en
kompilado procezo.
Ni ankoraŭ parolis pri ĝi.
Do estas ankoraŭ iu kiu vi devus koni.
Sed denove, ni ne tuj estos -
aferojn, kiuj venas supren pli ofte en klaso Estas pli verŝajne, ke li supreniru pli
ofte kaj pli peze pezis sur la kvizo.
>> Cool.
Ajna alia demandojn pri kvizo 0?
>> OK, do mi metis listo de temoj sur la tabulo.
Mi iris tra la Syllabus.
Mi iris tra la recenzo sekcio de lasta nokto kaj tiuj diapozitivoj veni supren
kun ne-ĝisfunda listo de temoj ke ni kovris tiom malproksime en CS50
kaj aĵoj kiuj povus aperi sur la kvizo.
Do mi ne tuj iros tra ĉiu sola unu el tiuj.
Kiu prenus multe pli tempo ol ni havas nun.
Sed mi metis ĉi tien por espereble jog via memoro pri aferoj kiuj povas
aŭ eble ne estas tiel familiara kun vi.
>> Kaj mi ŝatus pasigi la plejparto de sekcion respondi viajn demandojn pri
ĉi tiuj temoj, temoj kiuj ne estas kovritaj tie.
Ni povas skribi pseŭda-kodo.
Ni povas skribi reala kodo por certigi ke vi -
Mi povas respondi vian demandon kaj helpi everybody funde kompreni
multon el tiuj temoj tiom vi sentos preta kaj komforta internigi
la kvizo morgaŭ.
Do legu super la listo.
Vi espereble venos al sekcio kun iuj demandoj tiel.
Kiam vi estas preta, levi vian manon kaj ni komencu.
>> Memoru, la demandoj vi havas, ne ekzistas stultaj demandoj.
Ni aŭdis, ke multo.
Kaj la demandoj vi havas, mi pretas veti, multaj aliaj homoj ambaŭ
sidis tie kaj rigardante linio havas tiel.
Do vi povas nur helpi la homojn Petante demandoj.
Marcus.
>> Marcus: Inter la pilo kaj la monteto, estas tie antaŭ-asignitaj
procento de memoro kiu estas difinita kiel ĉi tio estas por la stako aŭ por la havaĵon?
Kaj kiel oni faras tiun laboron, ekzakte?
>> JASON Hirschhorn: Granda demando.
Mi iras al dorso spuri iomete.
Ĉu ĉiuj -
Bonvolu esti honesta tie.
Mi scias, mi petas vin levi vian manon antaŭ viaj kunlernantoj.
Sed ĉu ekzistas homoj kiuj sentas malkomfortaj kun la pilo kaj amason
kaj ŝatus transiru ke kaj kion tiuj volas diri?
Levu la manojn, se -
OK.
Dankon.
Do ni iras, por transiri la pilo kaj la havaĵon vere rapide kaj poste
movi en respondi vian demandon.
>> Do, se ni elingigos skatolo reprezenti memoron de via komputilo, kio estas iuj
aferojn, kiuj iris en tiu skatolo?
Artikolo.
Al ĉefa funkcio.
Kie ĉefa iri?
>> Lernanto: [inaudibles].
>> JASON Hirschhorn: Do ni devos meti ĉefa suben ĉi tien.
Kion alian iras en tiu skatolo?
>> Lernanto: La funkcioj kiujn vi nomas.
>> JASON Hirschhorn: La funkcioj ke ni vokas al Li.
Kaj kie do they go?
>> Lernanto: En la stako.
>> JASON Hirschhorn: Ili iru en la stako.
Do ni iras, por voki ĉi afero cxi tie la stako.
Kaj ĝis supro, ni havas la monteton.
Do memoro ne estas skatolo ĝuste kiel ĉi tio.
Sed estas vere bela simila.
Ĝi tuj estos amaso de skatoloj super kaj super, depende de kiom granda via
komputilo estas aŭ kiom granda via memoro estas.
>> Je la kurzo-unquote "fundo" Estas la stako.
Kaj estas multaj aferoj kiuj iras sur la stako.
Kaj tiuj dependas de la funkcioj vi havas en via kodo.
Vi ĉiam havas funkcion en via kodo vokis ĉefan, do ĉiam estas
sekcion cxi tie malsupre en la pilo dediĉitaj al ĉefaj.
>> Tiuj sekcioj en la stako nomiĝas stako kadrojn.
Kiam vi nomas alian funkcion, diru ĉefa flamo duuma serĉo funkcion,
Ni metu alian kadro sur la stako.
Pli specife, ni tuj donaci eron de memoro pri nia
komputilo por stoki duumaj serĉo La loka variabloj kaj kuri la duuma
search kodo.
>> Do ni nomas duuma serĉo.
En ĉi eron de memoro, ni iras stoki lia loka variablo.
Ni iras al stoki lia printf alvokoj.
Kio ajn okazas, ke tiu funkcio estas tuj estos stokitaj rajton tie.
Duuma serĉo tuj ekzekuti.
Ĝi tuj kompletigi ekzekuto.
Kio estas la vorto en C, kiu signifas ke funkcio devus
kompletigi lian ekzekuton?
>> Lernanto: Reveno.
>> JASON Hirschhorn: Return.
Do kiam ajn vi vidas reveno deklaro, la funkcio randoj
kiam kolizias tio.
Do duuma serĉo alvenos lia reveno.
Tiu parto de memoro volas esence liveri supren.
Kaj ĉefa reiros al ekzekuto.
Do ĉefa estos paŭzo, kien estis, alvoko duuma serĉo, akiri iom reveno valoro,
kaj daŭrigus ekzekuto.
Ĉi stack frame foriros.
>> Se ni nomas rekursia funkcio, kiu estas funkcio kiu nomas sin super
kaj super, ni eble reatingas - diru ni faris duuma serĉo rekursie.
Ni povus ricevi binarajn serĉo versio unu, duuma serĉo du, duuma serĉo
tri, duuma serĉo kvar, duuma serĉo kvin.
Kaj tiam tiu fina duuma serĉo kvin alvenos la bazo kazo, kaj la stako
kadroj reiros kaj observu fermo gxis ni reiros al la ĉefa.
Ni povas iri sur rekursio en iom.
Sed cxio tio estas, se vi estas nomante multnombraj funkciojn samtempe,
tie estos multnombraj stako kadrojn sur la stako.
>> La havaĵo, aliflanke, supren ĉi tie, ne por funkcioj,
Ne por lokaj variabloj.
Ĝi estas por dinamike asignitaj variabloj.
Do jen estas variabloj kiuj povas esti pravalorizita en ĉu ĉefa aŭ
Funkcio kiu ĉefa alvokoj.
Ie ajn en via kodo, ili povas pravalorizita.
Kaj al pravalorizi a dinamike asignitaj variablo.
Kio funkcio en C ni uzos?
>> Lernanto: malloc.
>> JASON Hirschhorn: malloc.
Vi nomas malloc.
Vi akiras spacon de memoro.
Kaj tiu spaco de memoro Estas sur la monteto.
Kaj tiu spaco de memoro restas tie, ĝis vi vokos libera.
>> Do dinamike asignitaj variabloj en amason ekzistos tiom longe kiom vi
ĉu ili ekzistas, kaj ili tute ne foriros, ĝis vi eksplicite
diru al ili foriri.
Vi povas krei ilin en unu funkcion.
Tio funkcia stako framo foriros.
Sed tiu variablo estos ankoraŭ ekzistas en la havaĵo ĝis ĝi liberigas,
potenciale per la funkcio kiu nomis duuma serĉo aŭ kio ajn.
>> Do tiuj amason variabloj restu tie cxar tiel longe kiel vi volas
ilin resti tie.
Kaj ili get meti tien.
Kaj tiam la venonta unu gets metis tie.
Ili gardas getting plenigis, kaj ili restu tie, ĝis vi vokos libera.
>> Kaj esence, la havaĵo kaj la pilo, alveni al Marcus demando,
kreski al ĉiu alia.
Kaj se ili kolizias unu la alian, vi jam eluzebla tuta memoro en via
komputilo, kaj via programo estos quit ĉar vi ne havas plu memoro
forlasis uzi.
Inter ili, ekzistas potenciale aliaj aferoj.
Sed por la atingo de ĉi tiu kurso, vi ne bezonas zorgi pri tio.
>> Tiel estis la respondo al via demando.
Ne zorgu pri tio.
Sed tio estis la longa respondo.
Ĉio kion vi bezonas scii estas monteton kaj trans la stako volo -
unu startas ĉe la malsupro.
La stako faras.
La havaĵo estas tie supre.
Ili kreskos pli proksime unu al alia.
>> Kaj se ili tuŝas, tio estas problemo.
Vi elkuris el memoro.
Sed ankaŭ, krom scii kie ili, kio estas stokita en ambaŭ la
pilo kaj monteto.
Curtis.
>> Curtis: Kiam ili karambolas, estas ke la pilo overflow?
>> JASON Hirschhorn: Kiam ili karambolas, tio ne estas stako overflow.
A stack overflow estas malsama areo ke ni povas iri super se vi volas.
OK, ni revenos al tio en iom.
>> Lernanto: Kio estas la vorto nomas kiam ili batis ĉiu alia, la
pilo kaj la havaĵon?
>> JASON Hirschhorn: Ĉar nun, ne maltrankviligi.
Nur konas -
Mi respondos al tiu demando post klaso.
Se ili kolizias ĉiu alia, vi elkuris de memoro, ĉar ekzistas ne plu
spacon tie.
>> Lernanto: Pardonu, kio estas seg kulpas?
>> JASON Hirschhorn: Segmento kulpo povas nomi por -
tio dependas kial la seg kulpas la nomata.
Foje, viaj stack overflow, ĝi malebligos diru seg fault kiel la eraro.
>> Lernanto: Kio pri dereferencing nula variablo?
Is that a seg kulpas?
>> JASON Hirschhorn: Dereferencing nula montrilo -
OK, do se vi havas montrilon, ke vi aro egala al nula, montriloj, recall,
vendejo memoro adresoj kiel iliaj valoroj.
Kaj nula montrilo estas esence stokante 0, la 0-a
trakti en tiu variablo.
Do 0x, 0, 0, 0, 0, ktp.
Tio 0-a adreso en memoro kiu ne estas en nia bildo, ke estas tie supre
ie, ke estas rezervitaj por la komputilo.
Ni ne rajtas tuŝi ŝin.
>> Do, kiam via programo estas ekzekuti, se io estas provi iri al la memoro
adreso 0, sciu ke ke estas malplena valoro.
Ĝi scias nenion devus esti tie.
Do se vi klopodos kaj uzi ion tie kaj trakti iun kiel tie aŭ
provis iri al tiu loko, vi estas tuj akiri seg kulpo aŭ eraro.
Ĉu tio respondas vian demandon?
>> Kaj nun ni reiros al pilo overflow.
Aĵoj en la pilo, kiel vi knaboj havas vidis antaŭe, en - ni desegni proksime
supren el stako kadro.
Ĉu ĉiuj vidas, ke?
Do ni havas nian stack frame.
Ni ŝparas tabelo en kiel loka variablo en ĉi tiu funkcio.
Do diru nia tabelo havas kvin makuloj.
Ĉiuj kvin el tiuj estos stokitaj en tiu stako kadro.
>> Se ni komencas skribi preter la limojn de tiu tabelo -
tial se ni komencos skribi en, diru ke estas 0.
Tiuj estas la kvin indeksoj de nia tabelo.
Se ni komencas skribi en indekso 5, kiu ni ne havas, kiam ni havas
tabelo de amplekso 5, ni komencas skribi en indekso 6, 7, 8, 9, ni povas ricevi Parva
Overflow eraro.
>> Ĝenerale ĝi ne estas -
vi probable enproblemigos se vi iros preter unu.
Sed ĝenerale, vi akiros en la plej problemojn, se vi transiras per loto
kaj vi iru sur tiom super kiuj vi skribos super la reveno adreso de tiu
funkcio, kiu situas ĉe la fundo de la stako kadro.
>> Ĉar, ĉu ne?
Vi - en la - sorry.
Ne "ĉar pravas."
>> En la stako kadron, vi havas viaj lokaj variabloj.
Je la tre malsupre de la stako framo estas la reveno adreso.
Tie estas kie la funkcio iras kiam ĝi estas finita.
Kaj se vi anstatauxigas revenintoj adreso, tiam kiam tiu stako kadro,
kiam vi iras tra la stako kadro kaj ekzekuti ĉiun linion, vi estas
tuj iros al via nova reveno adreso tio estas skribita tie anstataŭ la
reala unu.
Kaj tiu estas kiel ni jam vidis iuj sekureco breĉojn
povas okazi per komputiloj.
>> Do stack overflow, resume, estas kiam vi anstatauxigas la parton en la stako
vi supozis uzi, la loka variablo vi supozis uzi, kaj
precipe kiam vi komencas overwriting gravaj aferoj kiel la
revenu adreso.
Kaj tio estas kie vi ricevos eraro.
Aux eble ecx vi povis starti eĉ skribi en -
diru duuma serĉo estis dekstre supre ĉefa.
Se vi overwrote multon, vi povis verki en ĉefaj.
Sed ĝenerale, vi ricevas erarmesagxon antaux tiam, ĉar la komputilo scias
vi faras ion, kion vi oni ne faras.
Jes.
>> Lernanto: Kio estas la diferenco inter stako overflow
kaj buffer overflow?
>> JASON Hirschhorn: Bufro overflow estas pli ĝenerala tipo de
kion mi ĵus priskribis.
>> Lernanto: Do ​​stako overflow estas Ekzemplo de buffer overflow.
>> JASON Hirschhorn: Ekzakte.
Tiu estas tabelo ni povas pensi pri kiel bufro, spaco por aĵoj por eniri
Tio ĉi estas stako buffer overflow.
Ni povus havi amason buffer overflow.
Se tie estis buffer, kiuj ofte estas tabelo de la monteto, kaj ni
overwrote tiujn limojn, tiam ni havus havi amason buffer overflow.
>> Kaj preter la atingo de ĉi tiu kurso, ili estas detektita iom malsame.
La tradukilo havas specialan manieroj de detekti ĉiu.
Sed buffer overflow estas pli ĝenerala tipo de kion mi priskribis,
kiu estis stako buffer overflow.
Ĉu tio respondas vian demandon?
Dolĉa.
>> Tie estis neniu alia demandojn rilatajn al la stako aŭ la havaĵon?
Jes.
>> Lernanto: Mi konas vin devas liberaj kordoj ĉar ili estas en la havaĵo
kaj vi ne volas filtri memoro.
Sed vi devas liberigi mallokajn variablojn kaj da tio?
Aŭ ili estas aŭtomate liberigitaj?
>> JASON Hirschhorn: Bona demando.
Do en CS50.H, ni kreu tiun aferon cxar vi nomas ŝnureto.
Kordo estas vere kion?
>> Lernanto: Char stelo.
>> JASON Hirschhorn: A char stelo, montrilo karakteron, puntero al
tabelo de signoj.
Tio estas kion la kordo estas.
Do ni devas liberigi ĝin, ĉar getstring, kiun ni uzis multajn -
kordo nomo egalas getstring -
ke mallocs por ni iom da memoro pri la amasigos kaj poste redonas referencon al la
unua karaktero de tiu kordo, oni char stelo.
>> Do evidente, se vi ne estis skribi liberaj je iu ajn el viaj kordoj
ke vi nomis tiel for, vi havas iris filtrante iuj memoro.
Kompreneble ni ne parolis pri Ĝi, do nenies alveninta en
problemoj por fari ĝin.
Sed irante antaŭen, jes.
Kiam vi nomas getstring, vi estas mallocing iuj spaco sur la monteto.
Kaj se vi ne nomas libera poste sur tiu kordo, vi havas memoron liko.
Tio respondos al via demando?
>> Jes
>> Lernanto: Do ​​fari tion, do ni uzu libera ĝuste antaŭ reveno?
Kiel, en la kadro de, mi supozas, se ni diru, kiel, int main, ene de la
medio de la kodo kiu estas interne de tiuj krispa krampoj, ĝuste antaŭ -
vi scias kie oni kredus kutimas meti reveno.
Ĉu vi metis liberaj antaŭ tiu?
>> JASON Hirschhorn: Do vi povas meti liberaj kien vi volas meti libera.
Ĉar tiuj estas dinamike asignitaj variabloj, ĉar ili povas
loĝas preter la atingo de aparta funkcio, se vi nomas malloc en
apartan funkcion, ekzemple, getstring, vi povas voki libera en ĉefa.
Vi ne bezonas nomi ĝin en la specifa funkcio
kie malloc nomiĝas.
Sed vi ne bezonas nomi ĝin antaŭ la ĉefaj revenas.
>> Kaj tio vere dependas.
Ĝi dependas kial vi malloced ke spaco en la unua loko.
Kelkaj homoj vokos liberigi bela rapide.
Kelkaj homoj ne nomas libera ĝis la finon de ilia programo.
Kaj oni iros tra kaj libera ĉion.
Ĝi dependas kial vi vokis malloc.
>> Lernanto: Kaj kion vi diras se vi nomas uzo getstring?
Vi dirus liberaj kio?
>> JASON Hirschhorn: Do la sintakso senpage Estas simple liberan, malferman paren, fermo
paren, kaj la nomo de la montrilo.
Do se vi skribus kordo nomo egaluloj getstring, vi metu nomon en ĉi tie.
Tio estas la nomo de la montrilo.
Kaj sciu liberigi ke memoro.
>> Lernanto: Do ​​kiam Libera ke memoro, la montrilon ankoraŭ antaŭ al tiu loko
en la memoro?
Aŭ ĉu la montrilon ankaŭ transversxata el la adreso, ke gxi indikas al.
>> JASON Hirschhorn: ni devus provi tion.
Ni devas programi tion.
Ni revenos kiam ni atingos kodigo, kaj lasu la kodon, kiun.
Kaj se vi volas eltrovi la respondo por ke, vi povas ankaŭ kodon kiu
intertempe.
Sed tio estas granda demando.
>> Lernanto: Ĉu eblas libera iu tro frue?
Do vi ankoraŭ bezonas gxin por via programo, kaj vi liberigita, ke memora spaco?
>> JASON Hirschhorn: Jes.
Ĝi estas ebla, se vi liberan ion kaj tiam vi uzu gxin denove, vi estos
kolizii eraro.
Sed tio estas sur vi, ĉar vi liberigitaj io kaj tiam nomis ŝin poste.
Por ke estis programisto estas eraro.
Sed jes.
Vi povus skribi tion.
>> Plu demandoj pri -
jes.
>> Lernanto: Do, se vi supozas nur liberigi ĝin en ĝeneralan antaŭ la
programo finiĝas, tio signifas, se la programo finiĝas kaj vi ne liberigi lin,
tiu memoro estas ankoraŭ asignitaj?
>> JASON Hirschhorn: Se via programo finiĝas kaj vi forgesos liberigi ion, tiam
tiu memoro estis asignitaj tra la vivo de via programo.
Kiam via programo fermas tute, tiu memoro ne tuj
resti tie por ĉiam.
La komputilo estas sufiĉe lertaj por scii ke kiam la programo fermas, ĝi
devus forigi de ĉiuj el la memoro, ke estis asociitaj kun tiu programo.
>> Tamen, tie estas iloj vi povas kuri en programo por detekti se, kiam la
programo finis, vi forgesis liberigi iun memoron.
Kaj por via sekva problemo starigis kie vi uzos malloc kaj uzante
montriloj, vi estos kuranta ĉi plani vian programon por vidi se,
kiam ĉefa revenas, vi havis iun aferojn, kiuj restis unfreed.
>> Do ili ne tuj resti malloced cxiam en via komputilo.
Tio estus malŝparo, ĉar tre rapide, komputiloj
kurus el memoro.
Sed se ili dauxras gxis la fino de viaj plani kaj ili ne liberigita kaj via
programo eliroj, tio estas ankoraŭ problemo ke tiu ilo helpos vin adreso.
>> Lernanto: Ĉu tio estas Valgrind?
>> JASON Hirschhorn: Estas vokis Valgrind.
Kaj vi estos -
>> Lernanto: Sed ni ne devas scii ke por la kvizo, kvankam?
Mi volas diri, oni parolis pri iom en prelego.
>> JASON Hirschhorn: Do Valgrind estas la nomo de tiu ilo.
Sciante, kion li faras, estas Suficxas por la kvizo.
Sed vi ne uzis ĝin ankoraŭ en via problemo metita ĉar ni ne havis
problemo aro kiu eksplicite traktis per malloc aŭ vi uzas malloc.
Do vi ne uzas Valgrind ankoraŭ.
Sed vi uzos gxin pli frue prefere ol poste.
>> Lernanto: Ĉu vi povas ripeti kio Valgrind estas?
>> JASON Hirschhorn: Pardonu?
>> Lernanto: Ĉu vi povas ripeti kion la celo de Valgring estas?
>> JASON Hirschhorn: Valgrind estas la nomo -
kiel GDB helpas vin elpurigi vian programon, Valgrind helpas vin diveni, se
aferoj ne estis liberigitaj kiam via programo fermas.
Do vi devos kuri ĝin sur via programo.
Kaj via programo eliras, kaj gxi diros via programo nomata malloc ĉi multaj
fojoj por tio multaj bajtoj, kaj vi nur nomis liberaj ĉi multfoje.
Kaj tial vi lasis multe da bitokoj sen esti liberigita.
Aŭ tio diros, ke vi jam liberigitaj ĉion.
Bonan laboron.
>> Lernanto: okej.
Kaj ĝi nomiĝas Valgring?
>> JASON Hirschhorn: V-A-L-G-R-I-N-D.
>> Lernanto: Demando pri montriloj.
Do diru vi n star x egalas ion.
Tio egalas kion ajn vi metante tie, estas ke tio, kio metas ene
kio x estas indikante, aŭ la montrilon de x?
>> JASON Hirschhorn: Can vin ripetu la demandon?
Ĉu ni povas desegni ĝin dum vi diras tion?
>> Lernanto: En la kvizo, efektive, la tiu, kiun vi sendis nin, estis kiel, char
stelo veron egalas CS50 rokoj, ĉu ne?
Do tio signifas ke tiu CS50 rokoj diras la veron notas al?
>> JASON Hirschhorn: Do vi parolas pri char stelo en ĉeno, kiel
kiu funkcias?
Jes.
OK.
Ni desegnas ĉi tie.
>> [SIDE konversacio]
>> JASON Hirschhorn: Do tiu variablo tuj estos de tipo char stelo.
Kiom grandaj estas variablo de tipo char stelo?
Kiom da bajtoj?
>> Lernantoj: Kvar.
>> JASON Hirschhorn: Estas kvar bajtojn.
Kiom da rajtoj estas variablo de tipo int stelo?
>> Lernantoj: Kvar.
>> JASON Hirschhorn: Kvar bajtoj.
Se ĝi estas montrilo, tiam ĝi estas ĉiam kvar bajtojn, ĉar montriloj, ilia
valoro estas memoro adreso.
Kaj memoro adresoj sur la CS50 aparato estas kvar bajtojn longa.
Do, kiam ni vokas getstring, aŭ kiam ni diru, stringname egaluloj, kaj poste en
duoblaj citiloj metis ĉenon, ni metas -
bone, tio estas iom malsama.
Ni ja getstring kiel la ekzemplo.
Aŭ char stelo ion egalas la kordo.
Pardonu, donu al mi la ekzemplo ke vi legas?
>> Lernanto: char stelo veron egalas "Cs50 rokoj" en citiloj.
>> JASON Hirschhorn: Do tiu stelo, ĉi ni nomas tiun variablon x por nia
Generic celoj.
Ni kreis variablon nomitan x.
Ĝi estas tipo char stelo.
Ĝi estas montrilo al serio de karakteroj.
Do ĉi tie -
>> Do jen kiel ĉi tio labori en la memoro.
Ĉi stokus memoro adreso.
Estus stoki la memoro adreso de la unua gravulo en la tabelo.
Kaj poste, kiam vi sekvis la montrilon, vi farus
akiri la unuan karakteron.
>> Kaj se vi legas ĉi tion kiel ŝnureto, via komputilo estas inteligenta
sufiĉe por scii, legu ĉi afero ĝis ĝi atingas reagon 0.
Sed se vi legas ĝin karaktero ĉe tempo, tial vi estas ripetanta tra
tiun ĉenon, tiam vi estos nur legi karaktero samtempe ĝis vi atingos
backslash 0.
Tio eble ne respondos al via demando, kvankam.
>> Lernanto: Jes, sed tion vi ne malloced tiu spaco
tamen pro tiu montrilo.
>> JASON Hirschhorn: Do mi ne estas tute certa precize kion vi serĉas ĉe,
ĉar mi ne faras tiun kvizon.
Tio estis supozitaj esti helpema de rimedoj el alia TF.
Se vi kreas ĉenon sur la pilo aŭ kiel loka variablo, ĝi malebligos
nur estu tabelo de ŝargoj anstataŭ ĝenerale char stelo montrante
alia kordo.
Sed mi ne scias.
Tio povus esti montrilo por alia kordo sur la stakon tiel.
Jes.
>> Lernanto: Mi scias, ke vi bezonas rezervi memoron se la montrilo estas
getting deklaris interne de alia funkcio.
Ĉu vi bezonas fari la samon, se ĝi estas esti deklarita ene de ĉefa,
vi uzas gxin ene de ĉefaj?
>> JASON Hirschhorn: Do jes.
Vi povas deklari montrilon al iu memoro adreso en memoro.
Ĝi povas esti la memoro adreso de loka variablo, kvankam ofte,
homoj ne deklari memoro adresoj al lokaj variabloj ĉar ili iros
for unufoje tiu funkcio redonas, kiuj Tial ni ĝenerale malloc aferojn.
Sed jes, vi povus deklari montrilo al alia loka variablo.
Ĝi estas nur ĝenerale ne faris.
Sed mi povas tuj iri en tiu specifa afero post klaso.
Jes.
>> Lernanto: Mi pensas, ke estas speco de kio petas.
Ĝi ŝajnas stranga por esti inicializar puntero ne kiel
adreso, sed pro kio Ŝajnas kiel valoro.
Ĝi ŝajnas kiel la CS50 estas kio estas interne la afero esti fingromontris kaj
ne la realan adreson, ĉu ne?
>> JASON Hirschhorn: Do jen ne estas la kazo, kvankam.
Tio ne estas kio okazas.
Kiam vi deklaras char stelo, ĝi estas memoro adreso.
Pointers estas ĉiuj memoro adresoj montras ion alian.
Ke io povus esti sur la stako, sed preskaŭ ĉiam estas sur la
amasigos en la maniero ni vidos gxin uzas.
Sed stringname egalas duoble citaĵo "Getstring," ni povas vidi, ke ni
povas rigardi tra tiu kaj programi tion.
getstring kordo ne esti savita en ke variablo, aux kion ajn la kordo
nomo ne estas savo en tiu variablo, ĉar tio ne estas kiel
pointers labori.
Ĉu tio havas sencon?
>> Lernanto: Jes.
>> JASON Hirschhorn: okej.
Mi esperas, ke ne estis konfuza al neniu.
Sed se gxi estis, ni povas rigardi ĝin denove en iom, ĉar ni vere irante
kodigi iu kiu espereble labori per kordoj kaj helpu vin sentas
pli komforta kun ili.
>> Ajna alia demandojn rilataj al tiuj temoj aŭ aliaj temoj kiujn
Mi metos back up?
Kaj -
ĝuste nun.
Jes, Alden.
>> Alden: Do tio estas tute nerilata, sed ni povas simple transiri
vere rapide, kion ni bezonas scii pri la diferenco inter 32 kaj
64-bita maŝino?
>> JASON Hirschhorn: Jes.
Do 32 bitoj estas kiom da bitokoj?
>> Alden: Estas kvar bajtojn.
>> JASON Hirschhorn: Estas kvar bajtojn.
Kaj 64 bitoj estas kiom da bitokoj?
>> Lernanto: Ok.
>> JASON Hirschhorn: Ok bajtoj.
Do denove, ok bitoj estas unu bajto.
Viaj CS50 aparato estas 32-bitan komputilon.
Do memoro adresoj estas kvar bajtojn longa.
Estas 2 al la 32 memoro adresoj.
0 ĝis 2 al la 32 minus 1.
Kaj mi ne estas pozitiva, sed tio estas probable la medio de kion vi bezonas por
scii por 32-bita maŝino, ke la memoro adresoj estas, denove, kvar bajtojn longa,
kaj tio estas la maksimuma kvanto de memoro adresoj.
>> Ankaŭ, datumtipoj -
tio povus esti io kiel bone, ke valoras noti.
La grandeco de datumtipo dependas la maŝino vi laboras kun.
Do char, sola karaktero, estas kiel multaj bitokoj sur nia CS50 aparaton?
Unu bitoko.
Kaj ĝi estas efektive unu bajton kiel bone sur 64-bitan komputilon.
>> Kaj plej datumtipoj estas la sama nombro de bajtoj en ambaŭ maŝinoj.
Sed iuj datumtipoj estos malsama sur ambaŭ maŝinoj.
Do kiu estus potenciale la nur afero vi bezonas scii.
>> Sed ecx tio, mi pensas, estas preter la limojn -
Mi preskaŭ pozitiva, se vi retrorigardas ĉe malnovaj kvizojn, ĝi diras, alpreni por
kodiga problemojn vi uzas 32-bitan komputilon.
Sed estas, iri kune kun tiu en kazo vi interesiĝas, ekzistas
datumtipoj ke estas la sama grandeco sur ĉiuj maŝinoj.
>> Se vi vidis ion kiel uint32_t, vi povas aŭ
ne vidis tion.
Tio estas datumtipo.
Tio estas diranta, ke 32 bitoj negrave kia maŝino ĉi estas plu.
Do kiam homoj skribas porteblaj kodo, oni probable ne uzos ints.
Ili faros anstataŭ uzi tiujn aliajn datumoj tipoj ke ili scias estos la sama
grandeco sur ĉiu simpla maŝino.
Madhu.
>> Madhu: mi havis demandon pri kompilado procezo.
Do, se vi skribas programo kiu uzas biblioteko kiel CS50 aŭ io
kiel tiun, mi scias ke tiu biblioteko devas, je iu punkto, estu
kompilis kaj ligita in
Sed kiom de kiu okazas dum kompilado de via programo?
Kiun parton de tiu biblioteko procezo okazas kiam vi estas
kompili vian propran programon?
>> JASON Hirschhorn: Do ni iru trans ĝenerale la pasxojn de tiu procezo.
Vi skribas vian. C dosiero.
En via. C dosiero, vi # include via kaplinio bibliotekoj, ekzemple, cs50.h.
Kion faras tiu akra inkluzivi linio do al via programo?
Akchar.
>> AKCHAR: ĝi aldonas la prototipoj de la funkcioj de la kaplinio
dosieroj en la bibliotekoj.
>> JASON Hirschhorn: Ekzakte.
Ĝi aldonas tiujn funkcio prototipoj al via kodo.
Do, kiam via kodo estas kompilita en la fruaj stadioj, la tradukilo scias
ke tiuj funkcioj vere ekzistas, kaj ke ie ili difinis.
La. H dosieroj ne inkluzivas la difinoj por tiuj funkcioj aŭ kiel
ili efektive funkcias.
Cs50.h simple inkluzivas iun kiu diras getstring estas reala afero, kiun
povas okazi.
Kaj standardio.h diras printf estas vera afero kiu povas okazi.
>> Do via c lingvo kun tio. Kaplinio dosiero gets igitaj iuj
maŝino-legebla kodo, kiu eventuale gets igitaj duuma
kodo, 0-aj kaj la 1-aj jaroj.
Kaj tio estas la kodo kiu finfine gets ekzekutita.
La-l cs50 linio - ekzemple, kiam vi skribas tin -
kaj tiam vi inkluzivi-l cs50, vi tajpas, ke in
Kaj vi vidas tion.
Kiam vi skribas faros, vi vidi tiun linion tien.
Kaj ni vidos, ke en la dua kiam Ni kodo aŭ poste, kiam ni kodon.
>> Sed tiu-l cs50 linio faras ion iom malsamaj ol
la # include cs50.h.
Kion tio-l cs50 linion faru?
Avi?
>> AVI: Mi volas diri, ke ĝi ligiloj la bibliotekon al la funkcio
vokas, kiel la. o dosierojn.
>> JASON Hirschhorn: Do tre apude, se ne videblas-on.
La-l cs50 prenas la duuma dosiero kaj kunfandas ĝin kun via duuma dosiero.
Do cs50.h, estas senutile turnante cs50.h de C lingvon al duuma ĉiu
solan fojon ĝi estas uzata.
Tio estus stulta, ĉar tio devus malŝpari multan tempon.
Do ĝi estas jam kompilita kaj igita plenumebla.
Kaj nun gxi estas tuj esti kunfandita kun via dosiero ĉe la fino.
Do tiuj 1-aj kaj 0 La iras kunfandi kun viaj karaj
kaj 0 estas cxe la fino.
Do nun vi efektive havas la realan 1-oj kaj 0-oj kiuj difinas kiom getstring,
ekzemple, funkcias, nek kiel printf, ekzemple, verkoj.
>> Kaj por pli da informoj, tie estas mallonga tradukiloj ke Nate donas ke
vi devus kontroli kiu iras tra tiuj paŝoj.
Sed -
jes.
>> Lernanto: Ĉu ili ĉiam. O dosierojn kiam ili estas en la biblioteko formon,
preta por polurado kaj movo, ligita - kiel Ili estas en la duuma kodo?
>> JASON Hirschhorn: okej.
Kio -
>> Lernanto: Ĉu tio estas ĉiam la kazo por la bibliotekoj kiam vi ligas ilin?
>> JASON Hirschhorn: Jes.
Do tie estas. S dosierojn, kiuj estos maŝino kodon, kiun ankaŭ estos
kamufla al vi.
Vi ne bezonas zorgi pri tiuj.
Sed ĝenerale, jes, ili timige esti en. o Dosieroj pretaj por iri.
>> Lernanto: Do ​​kiam vi veturis al biblioteko, cxu vi nur sxipo
La. h kaj la. o?
Vi ne ŝipo. C aŭ la. S.
>> JASON Hirschhorn: Do -
kaj ĉi tiu estas en ĉi tiu mallonga tiel, se ĉi informoj ŝajnas esti venante
iom rapide.
Sed la mallonga je tradukiloj intertraktoj pri ĉi tiel.
Kiam vi sxipo bibliotekon, se vi sxipo La. h, la kaplinio dosiero, tiuj
funkcio prototipojn, kaj la 1-aj kaj 0 estas, jen ĉio vi bezonos doni.
Vi ne bezonas doni kiel la funkcio funkciu, la. c dosiero.
Ĉar la punkto de abstraktado, aŭ la noti API, la punkto je ĉi SPL,
la Stanford porteblan biblioteko, ĝi estas por ke vi ne maltrankviliĝu pri tio, kiel nova
GRect funkcias, nek kiel movi verkoj, aŭ kiel aldoni verkoj.
Ĉio kion vi bezonas scii estas ke add estas funkcio kiu vi povas
uzi, kaj ĝi faras tion.
Do vi vere ne bezonas scii Ĝi estas skribita en C. Vi nur bezonas
sciu, jen la funkcioj, kion ili faru, kaj tie estas la 1-aj kaj 0 estas
kiam vi vere volas uzi ilin.
>> Cool.
Plu demandoj pri tradukiloj aŭ aliaj temoj sur la tabulo?
>> Lernanto: Mi havas demandon pri efektivigo rekursiaj funkcioj.
Demando pri rekursio.
Mi havis la senton, ke estus veni supren.
Do ni rapide trairu rekursio kun specifa
Ekzemple, funkcio faktorialo.
Pro tio estas ekzemplo, ke ofte venas supren aŭ estas uzata
ilustri rekursio.
>> Do "4!" legu kiel 4 faktorialo.
Kaj kion signifas 4 faktorialo signifi?
Kion tio do?
Kiel vi kalkulas 4 faktorialo?
4 fojoj 3 fojojn 2 horoj 1.
>> Do alia maniero skribi 4 faktorialo estas skribi tion.
4 fojoj 3 faktorialo.
Ĉar 3 faktorialo estas 3 fojojn 2 horoj 1.
Do 4 fojoj 3 faktorialo estas 4 fojoj 3 fojojn 2 horoj 1.
Jen kial faktorialo estas granda kandidato por rekursio, ĉar estas
certe ke tie estas iu kiu okazas super kaj super kaj super sur
pli malgranda nombro de aĵoj ĝis oni atingas la finon.
Kiam vi atingos 1, 1 faktorialo estas 1.
Vi ne povas iri multe pli.
0 faktorialo estas ankaŭ difinita kiel 1.
Do kiam vi atingos 1 aŭ 0, vi estas ĉe la fino, kaj vi povas
komenci iri reen supren.
Do, se ni volis skribi rekursia funkcio por kalkuli faktorialo,
Ni tuj skribos kelkajn _pseudocode_ por ke nun.
Antaŭ ni skribas ke _pseudocode_ -
Mi donos al vi uloj kelkaj minutoj skribi la pseŭdo kodo aux simple opinias
pri tio - estas du aferoj ĉiu rekursia funkcio bezonas.
Kio estas tiuj du aferoj?
>> Jack: Ĝi havas nomi sin.
>> JASON Hirschhorn: Noa?
Ho, Jocxjo.
Antaŭen.
>> Jack: Ĝi havas nomi sin.
>> JASON Hirschhorn: Do rekursia funkcio bezonas rekursia alvoko, oni
voki al si mem.
Tio estas unu.
Kaj kio estas la alia afero?
>> Jack: Bazo kazo.
>> JASON Hirschhorn: Bazo kazo.
Bazo kazo estas, jen kiam ni haltas.
Do via funkcion gets nomata.
La baza kazo venas unue.
Vi volas scii se vi estas ĉe la fino.
Kaj se vi ne estas je la fino, vi faru vian rekursia alvoko.
Kaj vi iru tra tiu funkcio denove, kontrolu vian bazon kazo denove.
Se vi ne estas la fino, vi faras alia rekursia alvoko,
kaj tiel plu, kaj tiel plu.
>> Tio estas kial rekursiaj funkcioj ĉiam bezonas tiujn bazo kazoj kaj tiuj
rekursiaj vokoj.
Se vi ne havas rekursia alvoko, ĝi ne estus rekursia funkcio.
Se vi ne havas bazon kazo, vi irus cxiam kaj
ne estus fino.
Kaj la bazo kazo ĉiam venas unue, ĉar vi ĉiam volas kontroli
se vi estas ĉe la fino unue.
Do antaŭ ol ni fari kelkajn _pseudocode_, kial ĉu vi ne prenas minuton por pripensi
kiel rekursia funkcio faktorialo estus skribita?
>> Ankaŭ, kiel multaj, kiel vi faras, skribo ĝin sur paperfolion estas
kion vi tuj devas fari en la kvizo morgaŭ.
Do probable bona praktiko por fari certe la kodon, kiun vi skribas
sur folio de papero -
aux vi povas fari tion.
Vi scias kie estas la punktokomojn estas.
Vi memoros la sintakso.
Ĉar vi ne povos havi tradukilo diri al vi faris eraron.
>> Ankaŭ, kune tiujn liniojn, morgaŭ, kiam Vi kodigo problemojn, se vi
ili kuregis por tempo, aŭ se vi estas tre konfuzita pri kiel vi supozis
skribu la aparta afero en c, ĝi estus behoove vi skribi pseŭda-kodo
aŭ skribi komentojn en tiel.
Ĉar tie estas parta krediton por multon el la demandoj je la kvizo.
Do vi povas samtempe impetis, nek vin povus simple esti konfuzita.
Skribante en komentoj aŭ pseudo-kodo ofte estas manieroj, kiujn vi
povas ricevi partan kredito.
>> Do ne lasi ion malplenan je la kvizo.
Mankas punoj por metante aferojn in
Fakte, metante en pseŭda-kodo aŭ komentoj tuj helpi la grader
diveni, se vi vere scias kion Vi parolas, kaj eble premio
vi iuj partaj krediton por tio.
>> Ankaŭ laŭ tiuj linioj, skribu klare.
Se ni ne povas vere kion vi skribas, ni ne tuj vokos vin
noktomeze morgaŭ al figuro tion kion vi skribis.
Ni nur tuj demetu punktoj.
Skribu klare tiel ni povas aŭdi, aŭ pli ĝuste, Ni povas legi kion vi skribis.
>> Kaj se ĝi diras du frazojn, ne skribi alineon.
Sekvu la instrukciojn.
Skribu klare.
Kaj skribi en tiuj komentoj aŭ _pseudocode_ por demandoj kiuj povis
premio parta kredito.
>> Bone, ni iru al faktorialo.
Do ni havas funkcion faktorialo.
Se mi efektive skribu tion en C, Kion mi bezonas por meti antaux la nomo
de la funkcio?
La reveno tipo, kiuj, en tiu Tiukaze ni donos gxin int.
Kaj poste interne de la krispa krampoj, estas kio okazas interne de la krispa krampoj por
funkcio?
>> Lernantoj: Argumento tipo.
>> JASON Hirschhorn: Liaj argumentoj.
Do faktorialo versxajne prenas argumenton.
Ĝi verŝajne nur prenas unu argumento.
Kaj ni diros gxin prenos entjero nomata x.
Kaj ankoraux, kiam skribas la prototipo de funkcio aŭ skribi la funkcio
en via kodo antaŭ difinante ĝin, vi skribu la datumtipo kaj la nomo de
ke variablo por tiu funkcio nur.
Do vi povas pasi kelkaj nombro en tiun funkcio, gxi devos esti referita al kiel x
interne.
>> Ni havas niajn funkcio faktorialo.
Ni bezonas du aferojn, bazo kazo kaj rekursia alvoko.
Kio estas la bazo kazo por faktorialo?
Iu kiu verkis ĝin kaj kiu ajn ne havas parolis ankoraŭ, kio estas la bazo
kazo por faktorialo?
>> Lernanto: Se n estas malpli ol 2, revenu 1.
>> JASON Hirschhorn: Se n estas malpli ol 2, revenu 1.
Mi ŝatas tion, ĉar tio prizorgas 0 kaj 1.
Do ni faros x <2, revenu 1.
Se ni atingos pasis 0, se ni preni pasis 1, ĉi tiu funkcio volo
tuj revenos 1.
Se ni atingos preterpasis iu nombro pli granda ol aŭ egala al 2, ni iras al
havas nian rekursia alvoko.
>> Kaj do kial tiu iras labori?
Ĉu iu alia, kiu laboris en ĉi tiu kiuj ne parolis ankoraŭ doni al mi la
rekursia alvoko por tiu funkcio en _pseudocode_?
Se ni atingos pasis en nombro x kaj ĝi estas pli granda ol 2, kio
cxu ni volas fari?
Ni ankaŭ havas ekzemplon skribita en la flanko kiu povus doni al vi aludo.
>> Lernanto: Alvoku x fojoj la faktorialo de x minus 1?
>> JASON Hirschhorn: Ekzakte pravas.
Ni tuj revenos x fojoj la faktorialo de x minus 1.
Kaj tio, kvankam mi skribis supren, esence, kion vi diris en la angla,
ĉi funkcio faktorialo estos get denove vokis.
Ĝi devos ekzekuti sur x minus 1.
Ĝi revenos kun iu entjero, kaj tiam povos multobligi tiujn du
kune, kaj tiu valoro estos revenis al kion ajn nomis tion
faktorialo funkcio, kiu potenco alia ekzemplo de
ĉi funkcio faktorialo.
>> Do tio estas ekzemplo de rekursie funkcio, tre
simpla rikura funkcio.
Sed plejparte ili estos kiel ĉi tio.
Se vi ŝatus bonan rekursiaj defii por la kvizo, provu kodigo
duuma serĉo rekursie.
Ĉar se vi faris duuma serĉo problemo starigis tri, vi probable faris
ripete en kiam buklo.
>> Sed ĝi povas ankaŭ esti skribita rekursie.
Vi tuj bezonos skribi vian propran aparta funkcio kiu prenas iun
malsamaj komandlinion argumentoj - aŭ Ne komandlinion argumentoj, iuj
malsamaj simple regula argumentoj.
Sed vi povus skribi duuma serĉo rekursie kiel bone.
>> Lernanto: Do ​​vi povus esti ankaŭ skribitaj, anstataŭ x minus 1, vi
povus esti ankaŭ skribitaj x minus minus, aŭ vi povus havi
skribita minus minus x.
Ĉu vi povas simple klarigi vere rapide kial tiuj estus malsamajn aferojn,
kiel kion la diferenco estas inter x minus minus kaj minus minus x?
>> JASON Hirschhorn: Ne, mi ne estas tuj iri en tiun.
Sed mi parolos al vi pri tio post klaso. x minus minus, minus minus x
dekremento x per 1.
Sed ili faru ĝin iom alimaniere.
Sed mi ne volas iri en tiun.
Aliaj demandoj pri rekursio aŭ ĉi funkcio?
Tio ne vere eĉ _pseudocode_.
Tio estas esence la kodo C vi skribus pri tio.
>> OK, ajnan alian demandoj pri temoj ĝis ĉi tie?
Jes.
>> Lernanto: Mi havas rapidan resumo de flosanta punkto kaj precizeco.
>> JASON Hirschhorn: Flosanta punkto kaj precizeco.
Ĉu iu vere rapide doni al mi resumo de
glitpunktaj kaj precizeco?
Vi ĉiuj devis fari ĉi tiun por via problemo metita, do vi ĉiuj
familiara kun ĝi.
Aŭ eble ne ĉiuj el vi.
Iu?
Donu al mi komencis surloke.
Flosanta punkto kaj precizeco.
Kio estas la problemo?
Jes.
Viktorio?
>> Vanessa: Vanessa.
>> JASON Hirschhorn: Vanessa.
Pardonon.
>> Vanessa: Estas nur finia nombro de nombroj kiuj povas esti reprezentita
ĉar vi estas sur, en nia kazo, 32-bita sistemo.
Do vi specon de devos konsistigas iujn numerojn.
>> JASON Hirschhorn: Do jen ĝuste.
Estas nur certa kvanto de nombroj kiuj povas esti prezentita.
Se vi multipliki du tre grandajn nombrojn, eble superfluas la kvanto
de spacoj vi devas reprezenti entjero.
Tial ni kelkfoje uzas longa longa anstataŭ int.
Kiu havas pli da spacoj.
Tio povas teni pli grandan numeron.
>> Flosanta punkto precizeco havas al fari kun tio, sed ankaux devas vidi per la
fakto ke decimalaj numeroj estas Ne ĉiam reprezentita.
Pardonon.
Permesu al mi metis ĉi reen supren.
La dekuma nombro 1,0 ne estas ĉiam reprezentis kiel vi devus atendi,
1,000000000.
Ĝi estas foje reprezentis kiel 1,000000001 aŭ 0,999999999.
Ĝi povus esti eĉ 89 jxetita tien ie.
Do tiuj decimalaj numeroj ne estas reprezentis ekzakte kiel vi farus
atendi ilin esti reprezentitaj.
>> Do problemo starigis -
gxi estis du? -
problemo starigis du, kie ni pritraktis flosantaj punktaj nombroj, kiam ni volis
ilin reprezenti ĝuste kion ni deziris ilin reprezenti, la nombro
cendoj, aŭ la numeron de cendoj, ni multigos ilin per 100.
Ni rondoforma ilin.
Kaj tiam ni ekstermis cxion malantaux la dekuma punkto.
Tio estis por certigi, ke ili fakte egalas ekzakte kion ni deziris
ilin por egali.
>> Ĉar, kiam vi prenas ion ke estas Float kaj igi ĝin int, vi
ekstermi ĉiun dekstren de la decimala punkto.
Ĉar tie estas kelkaj glitpunktaj imprecision, 100,000 povus esti
reprezentis kiel 99,999999999.
Kaj se vi nur ekstermos ĉion la rajton al la momento, vi tuj
akiri malĝustan numeron.
Jes.
>> Lernanto: Mi havis demandon pri enjxetantan.
Kio ordon ghi okazos en?
Se vi volus fari kaleŝego, krampoj, 1 dividita per 10, ghi do 1 dividita per 10,
tiam akiri 0.1, tiam turnu ĝi enen float?
>> JASON Hirschhorn: Se vi faras flosi 1 dividita per 10 -
>> Lernanto: Jes, kaj tiam egalas -
Nu, estus ordinare havas ĝin egala en -
Jes.
Vi volas fari gxin kaleŝego, ĉu ne?
>> JASON Hirschhorn: Bone, do ni tuj uzas tiun al segue en elŝeligi
la respondojn al tiuj demandoj per kodigo.
Ĉar vi probable havas multe da tiuj minuto demandojn, kaj bona maniero
solvi ilin estas per kodigo.
Do ni tuj programi ĉi ĝuste nun, kaj tiam ni tuj iru tien kaj
Kodo la demandon vi havis.
>> Do la unua linio -
Mi ne devus esti skribita tio - kio estas la unua afero, kiun ni volas fari, kiam ni
malfermi novan dosieron en gedit?
>> Lernanto: Inkluzivi.
>> JASON Hirschhorn: Inkluzivi kio?
>> Lernanto: CS50 biblioteko.
>> JASON Hirschhorn: okej.
Kion alian ni devus inkluzivi?
Ni nur tuj kontroli kio okazas kiam vi jxetis ion por kaleŝego.
Sed kion fari ni bezonas inkluzivi se ni estas tuj skribi C-programo?
>> Lernanto: Norma mi / O.
>> JASON Hirschhorn: stdio.h.
Ni fakte ne bezonas, ĉar ĉi programo, cs50.h, eĉ se ĝi estas
ĉiam helpema por inkluzivi ŝin.
Sed ni ja ĉiam bezonas stdio.h.
>> Lernanto: Kiam kodigo en C?
>> JASON Hirschhorn: Kiam kodigo en C.
>> Do mi savos ĝin kiel ĉi tio. C dosiero.
Mi ricevas iun belan sintaksa kolorigo.
Mi skribis malplena interne ĉefa.
What does malplenon signifi?
>> Lernanto: Ĉu ne preni ajnan komandlinion argumentoj.
>> JASON Hirschhorn: Void rimedoj, en tiu kazo, ĉefa ne prenas ajnan
komandlinion argumentoj.
En aliaj kazoj, ĝi signifas la funkcio ne prenu komandlinion argumentoj.
Aŭ la funkcio, se mi skribus void main (void), kiu dirus ĉefa La
ne reveni nenion.
Do malplenon simple signifas nenion.
Kion mi volis skribi se mi preni komandlinion argumentoj?
>> Lernanto: int arko c kordo arko v
>> JASON Hirschhorn: int argc kordo argv.
Ĉu tio estas justa?
>> Studento: Tio estas char stelo argv krampoj.
>> JASON Hirschhorn: Tiel vi povus skribi kordo argv krampoj aux char stelo argv
krampoj, sed vi bezonos la krampoj.
Ĉar argv estas tabelo de kordoj, memoru.
Ĝi ne estas nur unu kordo.
Do kordo argv estas, jen unu kordo nomata argv.
String argv krampoj estas, jen tabelo de kordoj.
Do int argc kordo argv krampoj estus iu kiu mi
versxajne skribos.
>> Do vi volis konservi en entjera?
>> Lernanto: Jes, entjero.
Aŭ en float.
>> JASON Hirschhorn: En float?
Kiel, float x egalas 1 dividita per 10.
>> JASON Hirschhorn: okej.
Kjel mi presi float en printf?
Kio?
>> Lernanto:% f.
>> JASON Hirschhorn:% f.
Kio estas entjero?
d aŭ i.
Kio estas kordo?
>> Lernanto: s.
>> JASON Hirschhorn: s.
Kjel mi acxetas novan linion?
>> Lernanto: Deklivo n.
>> JASON Hirschhorn: Kion mi revenos se ĉefa runs korekte?
>> Lernanto: 0.
Chu mi bezonas skribi tiun linion, kvankam?
>> Lernanto: N-ro
OK, ni ne skribis ĝin, tiam.
Ĉu ĉiuj legis tion?
Ĝi aspektas iom malgranda.
Ĉu ĉiuj vidas, aŭ devus Mi faros gxin pli granda?
Mi pensas por la ĉambro, ni faros gxi iom pli granda, kvankam.
>> JASON Hirschhorn: Se mi volas turni ĉi . C dosiero en plenumeblan, kion
cxu mi skribu?
>> Lernanto: Faru provon.
>> JASON Hirschhorn: Pardonu?
>> Lernanto: Faru provon.
>> JASON Hirschhorn: Faru provon.
Ni parolis pri tiun linion antaŭe.
Tin.
Kio estas tin?
La nomo de la tradukilo.
Kio estas tiu linio?
>> Lernanto: Aroj ĝin por uzo de GDB.
>> JASON Hirschhorn: Aroj ĝin por uzo de GDB.
Tiu linio, kio estas tio?
>> Lernanto: Fonto-kodo.
>> JASON Hirschhorn: Tio estas la fontdosieron, La. c dosiero.
Kion tiuj du linioj do?
Aux tiuj du ne linioj.
>> Studento: Tio nomoj testi.
>> JASON Hirschhorn: Do la haltostreko o diras, name it ion malsame.
Kaj ĉi tie vi nomas ĝin provo.
Se mi ne havas tiun en, kio ĝi nomas ĉi tion?
>> Lernanto: A.out.
>> JASON Hirschhorn: A.out.
Kion tio do?
>> Lernanto: Ligiloj La matematiko biblioteko.
>> JASON Hirschhorn: Ĝi ligiloj en la matematiko biblioteko.
Ni ne inkludas la matematikon biblioteko, sed ĉar tio estas tiom komuna, ke ili jam
skribita fakto ĉiam inkluzivi la matematika biblioteko.
Kaj same, tio inkluzivas la CS50 biblioteko.
>> OK, do se ni listo, ni nun havas plenumebla nomata testo.
Ekzekuti ŝin, mi skribos teston.
Mi vidas ke mia glitpunkta, kiel atendita, egalas 0.
Ĉu tio -
do -
>> Lernanto: Tiam, se vi metas flosi nun, kiel vi jxetis gxin kiel float -
>> JASON Hirschhorn: Jxetu la 1 al float?
>> Lernanto: Ne, jxetu la plena afero -
yeah.
Se vi nur faris tion, ĉu kiuj faras gxin 0.1?
>> JASON Hirschhorn: OK, do vere rapide, 1 dividita per 10, tiuj estas
entjeroj esti dividitaj.
Do kiam vi dividas entjeroj, ili estas 0, kaj vi ŝparas ke 0 en
flosi, ĉar la oblikvo estas nur entjera divido.
Do nun ni ĝiri ion en float.
>> Ni vidu kio okazos.
Ni faros provon.
Do nun ni vidas, ke tiu oblikvo ne estis entjera divido, ĝi flosis
punkto divido.
Ĉar unu el ĝiaj argumentoj estis jxetita al float.
Do nun tio estis diranta, trakti ĉi divido kiel ni pritraktas
flosanta punktoj, ne kun entjeroj.
Kaj tiel ni atingas la respondon ni atendas.
>> Ni vidu kio okazos -
oops.
Se mi volas presi pli da dekumaj makuloj, kiom mi povus fari tion?
>> Lernanto: Punkto dot f, aŭ kiel multaj dekumaj lokoj kiel vi volas.
>> JASON Hirschhorn: Do mi printi 10 dekuma makuloj.
Kaj ni vidas nun estas duumaj iujn strangajn aferojn.
Kaj kiu superas al via demando pri glitpunktaj imprecision.
Estas stranga stuff stokitaj en ĉi tie.
>> OK, ĉu tio respondas vian demandon?
Kion alian vi volas kodigi rapide?
>> Lernanto: Mi nur volis vidi, ĉu aŭ Ne, se vi liberigis iuj montrilon,
ĉu tiu montrilon ankoraŭ stokita en ĝi la adreson de kio estis
indikante antaŭe.
>> JASON Hirschhorn: OK, do ni faru tion.
Char stelo ptr, tio kreas variablo vokis ptr de tipo char stelo.
Kjel mi skribas malloc?
Alden?
>> Alden: Just malloc.
Sed tiam ĝi devas esti grandeco de, kaj en ĉi tiu kazo, mi supozas ke vi volas
esti indikante char.
Do ĝi estus char.
>> JASON Hirschhorn: OK, tiom pli genéricamente, Interne -
ni redakti.
Interne malloc, vi volas ke la nombro de bajtoj sur la monteto.
Ĝenerale, kion ni vidis, ke ni estas farante estas ni tuj malloc
kordoj, ekzemple, aŭ arrays de entjeroj.
Do, se ni volas 10 entjerojn, aŭ 10 signoj, 10 donos al ni 10.
Kaj tiam la grandeco de signoj donus ni, ke grandeco de signoj, kiuj en
ĉi tiu kazo estas 1 bajtoj.
Ni ricevas 10 bajtoj.
Se ni devis skribi grandeco de int, kiu donus al ni la 40 bajtoj.
>> Do pli genéricamente, ene de malloc estas la nombro de bitokoj vi deziras.
En ĉi tiu kazo, ni ricevis la 1 bajto.
Kio ŝajnas kiel bizara uzo de malloc, sed pro nia
intencoj sencas.
Do tie estas tio.
>> Ni tuj voki libera.
Ni forigi ĝin kaj ni uzas ptr denove.
Kaj kion vi volas kontroli?
>> Lernanto: Mi nur volis kontroli, ĉu aŭ ne estas io
interne de ĝi.
>> JASON Hirschhorn: Do ĉu ĝi indikis ion?
>> Lernanto: Jes, ĝuste, ĉu ĝi ankoraŭ havis memoron adreso.
>> JASON Hirschhorn: Do vi volas kontroli la valoron de ptr?
>> Lernanto: Jes, ĝuste.
>> JASON Hirschhorn: Kion mi skribos ĉi tie se mi volas kontroli la valoron de la
punkto - kio estas, Jordanio diris, la valoro?
Aŭ kio estas stokita ene de ptr?
>> Lernanto: Memor-adreso.
>> JASON Hirschhorn: Memor-adreso.
Do se mi skribas nur tion, ĝi malebligos donu al mi la valoron de ptr.
Kaj kiel mi printi memoro adreso?
Kio estas la formato de ŝnuroj por memoro adreso?
>> Lernanto:% p.
>> JASON Hirschhorn:% p.
% S estas ĉeno.
% P por montrilo.
Ĉu tio estas justa?
Tio estas prava.
Do ptr egalas -
Ĝi havas ankoraŭ ion.
Tio estas verŝajne pli interesa demando.
Kion tio linio fari?
>> Lernanto: seg kulpoj.
>> JASON Hirschhorn: Kio?
>> Lernanto: Mi pensas ke seg kulpoj.
>> JASON Hirschhorn: Hm?
>> Lernanto: Mi pensas ĝi malebligos seg kulpo.
>> JASON Hirschhorn: Do tiu linio de kodo, stelo ptr, kion
faras la stelo signifas?
>> Lernanto: Enhavo de.
>> JASON Hirschhorn: Jes.
Go to get la enhavo de.
Do tiu tuj iras al la memoro alparoli tie kaj donu al mi tion.
Mi uzis% c ĝuste ĉi tie ĉar tie estas karakteroj stokitaj tie.
Do ni tuj iru al tiu adreso ni nur vidis - aŭ ĝi verŝajne estos
iomete malsama ĉi tempo ni kuras la programon.
Sed ni iros al tiu adreso kiun ni konas ankoraŭ ekzistas
kaj vidi kio estas tie.
>> Do tio ne seg kulpo.
Tio simple ne donis al ni nenion.
Ĝi povus esti efektive donis al ni io, ni simple ne povas vidi ĝin.
Kaj kiu superas al ĉi ideo -
kaj ni ne tuj akiri tro multe en tio, ĉar tio estas preter la
atingo de ĉi tiu kurso.
Sed ni parolis pri ĝuste ĉi tie, se ni iris preter la limojn de la tabelo de
1, ni ne povus akiri en mizero.
>> Foje, kiam vi nur foriras per 1, vi faras ion malbonan, kaj vi
povis akiri en mizero.
Sed vi ne ĉiam ricevas en mizero.
Dependas multe de malbona afero vi do, vi tuj akiri en mizero.
Kio ne estas diri, ke fuŝa kun via kodo.
Sed tio estas, la programo ne ĉiam rezigni, eĉ se vi iri ien
vi ne supozis iri.
>> Bona ekzemplo de tio estas, multajn homoj en ilia problemo metita 3, kiu
Estis 15, ne kontrolas la limojn de la tabulo.
Do vi rigardis al la maldekstra, rigardis al la dekstra, rigardis al la supro, rigardis
al la fundo.
Sed vi ne kontrolu, cxu la supron Estis efektive tuj estos sur la tabulo.
Kaj amaso da homoj kiuj faris tion kaj turnis ke en ilia programo laboris
perfekte, ĉar kie tiu estraro estis stokita en memoro, se vi irus unu
super ĝi aŭ kontrolis ke la memoro adreso, ne ekzistis io
aparte horora pri tio, tial via programo ne estis
tuj krias al vi.
>> Sed ni ankoraŭ demetu punktoj se vi ne kontrolu ke, ĉar vi
estis faranta ion vi ne estis supozis fari, kaj vi povus havi
alveninta en mizero.
Probabloj estas, tamen, oni probable ne.
Do tiu estas montri ke, jes, ni ankoraŭ povos iri al ĝi.
Kaj ni ne alvenante en problemojn en tiu kazo.
Se ni provis fari legi la sekvanta 100 karakteroj, ni volonte
verŝajne akiri en mizero.
Kaj vi povas programi legante la sekvanta 100 karakteroj, se vi volas, farante iun
ia por buklo.
Jes.
>> Lernanto: Ĉar ni estis atribuitaj ke spaco reala valoro, ni ne volis
efektive povos vidi nenion.
Ĉu ni provu ĝin per opcio ke egala al kiel C aŭ ion?
>> JASON Hirschhorn: Granda demando.
Kjel mi starigis tiun valoron -
kio linio de kodo mi skribos sur linio sep fari kion vi diris?
>> Lernanto: Stelo ptr egalas sola citaĵo c fini sola citaĵo.
>> JASON Hirschhorn: Do jen metante karaktero, c, en tiu loko,
ĉar denove, ke la stelo signifas iri tien.
Kiam uzata je la maldekstra flanko de valorizo ​​operatoro, kiu egalas
subskribi, ni ne tuj atingi tiun valoro plu metis tiun valoron.
Nun ni vidu kio okazas.
>> Ni metas ion tie kaj estis tie.
Ni nomas libera.
Kelkaj aĵoj probable okazis sur la monteto.
Do ĝi ne estas tie plu.
Sed denove, ni ne alveni En la mizero por iri tien.
>> Mi faras ĉi tion en la kodo por ilustri ke amaso de tiuj
demandojn, kiujn vi havas, ili estas vere interesa
respondas multan tempon.
Kaj ili estas vere bonaj demandoj.
Kaj vi povas kalkuli ilin sur via propra se, ekzemple,
ni ne estas en sekcio.
Jes.
>> Lernanto: Ĉar vi ne estas la sendo de la Pointer ie, ĉu vi bezonas por
uzi malloc?
>> JASON Hirschhorn: Do tio superas al viaj komenca demando.
[? ?]
Ĉu estas nur loka variablo?
Malloc tie ne estas ke konvinka.
La uzo de malloc tie ne estas ke konvinka, ĉar ĝi estas
nur loka variablo.
>> Lernanto: Tiel vi povus fari char stelo ptr egalas saluton?
>> JASON Hirschhorn: Ho.
Do ni tuj nun reiri al viaj komenca demando.
Mi kredas ke vi ne estis kontentigita kun mia respondo.
OK?
Kiel tio?
>> Lernanto: Jes.
Atendu.
>> JASON Hirschhorn: Kaj kie ĉu vi volas presi?
Do ni devos presi ĉenon kiel tiu?
>> Lernanto: Interesaj.
>> JASON Hirschhorn: Do tio diras ĉi argumento havas la tipon de karaktero.
Do tio estu signo.
>> Lernanto: Nur prenas la unua.
>> JASON Hirschhorn: Do tiu estas kion mi diris antaŭe.
Kiel mi diris, ĝi ne estas stoki la kordo interne variablo montrilo.
Ĝi estas stokante -
>> Lernanto: La unua valoro de la kordo.
>> JASON Hirschhorn: La adreso de la unua valoro de la kordo.
Se ni devis presi ĉi, ni estas atingi la valoron ene montrilo.
Kaj ni vidos estas, ja, memoro adreso.
>> Ĉu tio havas sencon?
Pardonon.
Atendu, ĉu tio respondas vian demando, kvankam?
>> Lernanto: Jes.
>> JASON Hirschhorn: Tiu linio de kodo estas krei ĉenon kaj poste la alian
variablo montrilon tio estas montrante al kiuj kordoj, ke tabelo.
Jes.
>> Lernanto: Do, se ni iris unu memoro alparoli tie, estus ni preni la h?
Ĉu ĝi estis stokitaj kiel kordo?
>> JASON Hirschhorn: Kiel, ni faris -
tia ĉi estas valora por fari.
Ĉi tio estas punkta aritmetiko, kiu vi uloj vidis antaŭe, kaj devus esti
relative komforta kun.
Ĉi tio estas parenca al skribis -
se ni devis skribi tiun linion de kodo, ni vidis tabelo notacio antaŭe.
Tio devus doni al ni la duan valoro en tiu tabelo, h.
>> Se ni faris tion, tiu devas ankaŭ doni ni la duan valoron en tiu tabelo.
Ĉar tuj ne al la memoro adreso de la unua aĵo, sed la
memoro adreso de la afero unu super.
Kaj tiam la stelo operatoro dereferences ke montrilo.
Kaj cetere, vidu.
Ni ricevas h denove.
>> Lernanto: Kion precize faras dereference signifi?
>> JASON Hirschhorn: Dereference estas fantazio vorto por iri.
Iru al tiu kaj akiri kio estas tie estas dereference puntero.
Ĝi estas nur fantazio vorto por tio.
>> Lernanto: Se ni volis print la tutan ĉenon, ni povus
fari signon montrilo?
>> JASON Hirschhorn: Bone, ni estas irante paŭzi tie.
Ni tuj finos cxi tie.
Ampersand donas al vi la adreson de situo, do kiam vi faras ampersand de
variablo, donas al vi la adreson kie tiu variablo estas stokitaj.
Ampersand montrilon donos al vi la adreso de ptr kie ptr estas en memoro.
>> Ni ne tuj iros sur kun tiu ekzemplo.
Vi povas eltrovi tiujn aferojn sur via propra.
Sed denove, tio povus eĉ esti verging a iom tie, kion vi bezonas scii por
La medio de tiu meza termino -
aŭ ĉi kvizo, prefere.
Pardonon.
>> Ni tuj pluiri, ĉar mi volus ŝatas fari unu kodigo problemo
antaŭ tempo estas ĝis.
Kaj ni tuj programi kion mi kredas estas la plej konvinka de tiuj
ekzemploj, atoi.
Do tio estis demando pri kvizon du jarojn.
Kaj mi havas ĝin sur la tabulo tie.
>> Homoj demandis je la kvizo -
ili donis iom pli tesxt en la demando, sed mi forigis la
teksto, ĉar ĝi estis nenecesa por niaj celoj nun.
Ĝi estis nur kelkaj fono sur kio atoi faris.
Sed vi ĉiuj konas kaj estas tre familiara kun atoi.
>> Mi sugestas vin kodigi ĉi sur folio de papero.
Mi ankaŭ rekomendas ke vi uzu la strategion ke ni jam trapasis
multon en nia sekcio.
Unue, certigu vin komprenu kio atoi tio farigxis.
Desegni bildon aŭ veni supren kun iuj mensan bildon de tio en via kapo.
Sekva, skribi el _pseudocode_ por ĉi tio.
Sur la kvizo, se ĉiuj vi ricevas estas _pseudocode_, almenaŭ vi
meti ion malsupren.
Kaj tiam mapi ke _pseudocode_ sur C. Se vi havas ĉekon en via
_pseudocode_, kiel kontroli se io estas 1, kiuj mapas sur la se
kondiĉo ks.
Kaj fine, programi la programon en C.
>> Do reiru al atoi kaj prenu kvin minutojn kodigi tio sur folio de
papero, kiu estas verŝajne ĉirkaŭ la kvanto da tempo vi devus preni sur
kvizon al kodo atoi.
Kvin ĝis 15 minutoj, kvin ĝis 12, kvin ĝis 10 minutoj, temas pri la kvanto de
tempo vi volus elspezi sur tiu demando en la kvizo.
Do prenu kvin minutojn nun, bonvolu.
Kaj se vi havas demandojn, levi via mano kaj mi venos ĉirkaŭe.
>> [SIDE konversacioj]
>> JASON Hirschhorn: OK, tiel ke estis kvin minutoj.
Tio estis verŝajne pri la kvanto de tempo vi volas pasigi en tiu sur kvizo
eble la malalta fino de tiu tempo.
Ni Recap en iom.
Ni komencu kodigo ĉi.
Kaj se ni ne havas la tutan vojon tra, la respondojn al tiu kaj tiu
kvizo demando estas disponeblaj, denove, Aŭtuno 2011 estas kiam tiu demando
Aperis en la kvizo.
>> Kaj tio valoris ok punktoj en la kvizo tiam.
Ok punktoj estas sur la alta pinto de la kvanto de punktoj ion valoras.
Plej demandoj estas en la gamo de unu al ses punktojn.
Do tiu estas pli defia demando, por certa.
Cxu iu ajn get me komenciĝis?
>> Ĝenerale, kion ni iras voli fari kun ĉi
funkcii atoi, logike?
Kion ni volas fari?
Do ni tuj skribos iuj _pseudocode_.
>> Lernanto: Convert karakteroj en entjeroj.
>> JASON Hirschhorn: Convert karakteroj en entjeroj.
OK.
Do, kiom da karakteroj estas ni tuj devas iri tra gxi?
>> Lernanto: Ĉiuj el ili.
>> Lernanto: Ĉiuj karakteroj en la kordo.
>> JASON Hirschhorn: Ĉiuj signoj en la ĉeno.
Do, se ni volis iri tra ĉiu karaktero en ĉenon, kio estas io
en C ni jam vidis, ke permesis ni iros tra ĉiu
karaktero en kordo?
>> Lernantoj: A por buklo.
>> JASON Hirschhorn: A por buklo.
Do ni iras al buklo tra ĉiun karakteron en s.
>> Kion do ni tuj volas fari kiam ni ricevas specifan karakteron?
Diru ni ekuzi pasigis 90.
Ni akiras la 9.
Ĝi estas signo.
Kion ni volas fari kun ke karaktero 9?
>> Lernanto: Subtrahi ĝin de karaktero 0?
>> Studento: Aldonu 0?
>> JASON Hirschhorn: Subtrahi ĝin de karaktero 0?
>> Lernanto: Jes.
>> JASON Hirschhorn: Kial ke vi volas fari tion?
>> Lernanto: [inaudibles]
valoro.
Lia int valoro.
>> JASON Hirschhorn: Bone, do ni prenu la karaktero 9, subtrahi ĝin el
karaktero 0 akiri reala entjero 9.
Dolĉa.
Kaj kiel vi scias, ke karaktero 9 minus 0 karaktero estas 9?
Kio abako cxu vi rigardas?
>> Lernanto: Estas logike naŭ lokoj inter 9 kaj 0.
Aŭ vi povus rigardi la ASCII tablo.
>> JASON Hirschhorn: Askio tablo.
Sed jes, vi estas korekta, kiel ankaŭ.
Do ni subtrahi 0.
Do nun ni havas la entjera 9.
Kaj kion ni volas fari kun ĝi?
Se ni havas 90, gxi estas la unua entjero ni havas, kion ni volas fari?
>> Lernanto: Mi deziras meti en portempa entjero tabelo, tiam faru math al ĝi
poste fari ĝin en fino.
>> JASON Hirschhorn: okej.
>> Studento: Vi povas komenci ĉe la fino de la tabelo, kaj poste movi antaŭen tiom
ke ĉiufoje vi movas antaŭen, vi multigos gxin per 10.
>> JASON Hirschhorn: okej.
Tio sonas kiel bela konvinka ideo.
Ni povas komenci ĉe la fino de nia tabelo, kaj ni povas uzi strleng.
Ni povas uzi strleng en ĉi tie.
Ni ricevos la longeco de nia kordo.
Ni komencu cxe la fino.
Kaj + la unua, ni nur prenu ke entjera, kaj eble ni kreu kiel
nova entjera variablo supren supro kie ni stokante ĉion.
Do ni loop per singla char en s de reen al fronto, ni subtrahi 0, kaj
tiam ni prenos gxin, kaj depende de kie ĝi estas, ni multigos gxin
per potenco de 10.
Pro la unua, kion ni faras multipliki la plej dekstra karaktero de?
>> Lernanto: 10 al la 0.
>> JASON Hirschhorn: 10 al la 0.
Kion ni multigos la dua plej dekstra karaktero de?
>> Lernanto: [inaudibles].
>> JASON Hirschhorn: Kio?
>> Lernanto: 10 ĝis 1.
>> JASON Hirschhorn: 10 ĝis 1.
La tria plej dekstra karaktero?
>> Lernanto: 10 ĝis la 2.
>> JASON Hirschhorn: 10 ĝis la 2.
>> Lernanto: Pardonu, mi ne komprenas kion ni faras tie ĉi.
>> JASON Hirschhorn: OK, ni reiri, tiam.
Do ni tuj akiri pasis en ŝnuro.
Ĉar ni skribas atoi.
Do ni ricevas pasis en ŝnuro.
Diru ni ekuzi pasis en la kordo 90.
>> La unua afero, ni tuj faras estas fiksita nova entjera variablo kiu ni estas
nur provus krei kiel nia nova entjero.
Tio estas kion ni iras por reveni al la fino.
Ni devas iri tra ĉiun karakteron en la arĉa ĉar ni jam determinis
ke ni devas tuŝi ĉiun kaj tiam aldoni ĝin al nia nova entjero.
>> Sed ni ne povas simple aldoni gxin kiel nombro.
Ni ne povas simple preni 9 kaj aldoni 9 al nia entjero.
Dependas de kion loko ĝi estas en la kordo.
Ni tuj bezonos multobligi ĝi per potenco de 10.
Ĉar tiel estas kiel bazo 10 verkoj.
>> Do ni tuj ricevas la realan karaktero, aux la efektiva entjero
nombro, laux subtrahanta karaktero 0 de karaktero 9 kiel ni faris kun
subtrahanta karaktero ĉefurbo A de kion ajn karaktero ni havis en unu el
tiuj problemoj.
Do ni reale preni nombro de 0 al 9 savis kiel reela nombro, kaj ni
multipliki ĝi per potenco de 10 depende de kie ni estas en la kordo.
Kaj tiam ni tuj aldoni ĝin reen en nian novan entjera variablo.
>> Do kio estas tiu devus aspekti kiel farus estos - ni devos desegni pli ĉi tie.
Se ni atingos pasis en la kordo 90 -
>> Lernanto: [inaudibles].
>> JASON Hirschhorn: Sed atoi prenas kordo.
Do ni tuj iru tra la okazigon.
Ni ricevos pasis en 90.
Ni iru el la dorson al la pordo.
Ni prenu la 0.
>> Lernanto: Mi bedaŭras.
Eble tiu estas stulta.
Se ni ekuzi pasis en cxeno, kial estas 90 kion ni estas
getting pasis en?
Ĉar 90 estas entjero.
>> JASON Hirschhorn: Ĉar atoi prenas kordo kaj igas la entjero
reprezento de tiu ĉeno.
Sed la kordo 90 ne estas la entjero 90 aŭ la nombro 90.
La kordoj 90 estas tabelo el du, aŭ tri signoj, pli ĝuste, la 9an
karaktero, la 0 karakteron, kaj la backslash 0 karaktero.
>> Kaj ni skribas atoi ĉar, Ekzemple, kiam oni prenas la komandon
linio argumento, kaj ĝi estas savita en argv, ĝi estos savita kiel linio.
Sed se vi volas trakti gxin kiel nombro, vi devas konverti ĝin al
reala entjero.
Kiun ni faris unu el nia problemo aroj.
Kiun ni faris en nombro de nia problemo aroj.
Cxiu kiu prenis entjero kiel komandlinia argumento.
Do jen kial nia atoi funkcio prenas kordo.
>> Do denove, en nia ekzemplo cxi tie, ni estas iri preni la lasta.
Ni iras al subtrahi la karaktero 0 de ĝi, ĉar la karakteroj 0
subtrahita de la karaktero 0 donas vin la efektiva nombro 0, laŭ
la ASCII math ke ni faros.
>> Ĉar karakteroj estas reprezentataj kiel malsama ol iliaj realaj - la
karaktero, ekzemple, minuskla a estas 97.
Ĝi ne estas - oops!
Ĝi ne estas, kion vi devus atendi ĝi estu, 0, ekzemple.
Do vi devas subtrahi la karaktero akiri 0.
>> Do ni tuj faros tion ĉi tie por ricevi la reala nombro.
Kaj tiam ni tuj multobligos ĝin per potenco de 10 depende de kie
Estas en la ĉeno, kaj poste prenu ke kaj aldoni ĝin al nia loko posedanto
variablo tiel ni povas veni supren kun nian lastan nova entjero.
Ĉu tio sencas por ĉiuj?
>> Do ni ne tuj programi ĉi nun, ĉar ni estas
atingi mallonga tempo.
Mi pardonpetas pro la altempigo de tiu.
Sed tio estas kio, espereble, vi farus povos fari en la kvizo - ĉe la
tre malgrandaj, get this _pseudocode_ elskribita.
>> Kaj tiam, se ni devis skribi la _pseudocode_, fakte, ni povus fari tion
bela rapide.
Ĉiu linio de komentoj ni ni skribis ĉi tie tradukas al ĉirkaŭ
unu linio de C-kodon.
Deklarante nova variablo, skribo banto, iuj subtraho, iuj
multipliko, kaj iuj farita.
Ni volonte probable ankaŭ volas skribi reveno linio.
Ni povus ankaŭ bezono meti iuj ĉekoj en ĉi tie.
Jes.
>> Lernanto: Do ​​ĉu ni povas trakti s kiel la efektiva kordo?
Ĉar mi scias ke estas simple adreso.
Kiel, kiom vi volas ricevi la longeco de la arĉa aprobotaj tra?
>> JASON Hirschhorn: Do kiel faris La longeco de kordo?
Strlen.
>> Lernanto: strlen, jes.
Sed vi povas meti s kiel la argumento por tio?
>> JASON Hirschhorn: Do strlen prenas char stelo.
Kaj tio sekvas ke char la stelo, kaj ĝi subtenas rakonti ĝis ĝi ricevas al
backslash 0. strlen estis efektive unu el la aliaj programoj ni
tuj kodo.
Tio estas alia bona unu kodo.
Tiu estas iom pli facila, ĉar se vi tuj pensas pri tio
koncepte -
Mi simple diris, ke ĝi laŭte - strlen sekvas puntero kaj konservas irante kaj
rakonti kaj konservanta trako ĝis vi atingos backslash 0.
>> Lernanto: OK, akiris ĝin.
>> JASON Hirschhorn: Do plej bona sorto je kvizo 0 morgaŭ.
Se vi havas demandojn, mi esti ekstere post tio.
Bonvolu retpoŝti al mi.
Etendu vian propran TF se vi estas Ne en mia sekcio aux ricevi mian
retpoŝti se vi volas.
>> Se vi volas Freak Out kaj simple sendu mi retmesaĝon, a freakout retpoŝto, mi
resendu vin, kiel, a ridetanta vizaĝo, aŭ, kiel, ŝerco aŭ io.
Do bonvolu fari tion ankaŭ.
Bonan sorton denove, kaj mi vidi vin ĉiujn venontan semajnon.