>> [TEMO MUSIC]
>> SPEAKER 1: Saluton, ĉiuj.
Bonvenon al sekcio.
Lovely tago out-- tial mi estas certe, estas nur kvar el vi tien
kaj ne nia kutima pack.
Mi estis malsana dum ĉi tiu semajnfino.
Do mi ne devas Starburst por vi uloj.
Kaj mi rajtas komenci tusante terure tra tiu.
Do simple toleru min.
Mi iras al vere provi kaj trairi tiun unuan,
tamen, antaŭ ol mi havas tusado atakon.
Sed nur esti facila en mi iom bit-- jen ĉio mi petas.
>> Do nia agendo por today-- nur reminder-- vian kvizon estas proksima semajno.
Mi rakontis al vi tiun lastan semajnon tiel ne kaptas vin desprevenidos.
Do mi memorigas vin denove.
Sekva semajno vian kvizon.
Al tiu fino, la proksima semajno sekcio estos multe pli
of-- mi provos kaj laboron en iu recenzo.
Do se vi uloj povis helpi min sendante al mi
kion vi estas komforta kun, ke vi estas maltrankviligita,
temoj kiuj vi ŝatus por min kovros, tio estus granda.
Do mi povas provi kaj labori ilin en nia sekcio proksima semajno
aŭ sendu vin ekstra materialo aŭ prep ke vi eble ne ricevi aliloke.
>> Yeah!
Pli homoj venas!
Mi pensis, mi faris tion malbone lasta semajno, ke neniu volas reveni?
Mi estas timigita.
Do la aliaj tri aferoj ke ni tuj iru super
Estas redirección, dosiero I / O, kaj tiam punteros kaj dinamika memoro.
Mi certas ke vi ĉiuj super ekscitita pri pointers-- ĉies preferataj temo,
tiel simplajn por kompreni.
Mi certas ke vi uloj ĉiuj ricevis tion, ĉu ne?
>> Do unue aĵojn unua, redirection-- tio estas esence nur vojo
kontroli, kiel vi enigo tion en vian programon,
kiel vi eligo aferojn de via programo.
La ĉefaj manieroj kiuj vi uloj estis interagante kun ĝi
Estas nur tra normo ekster kun via preso ekrano tie.
Sed ekzistas manieroj pipe-- kiel ni vidas tie
Estas unu el niaj words-- speco de nafto ke informoj
aux datumojn en dosiero de dosiero.
Estas nur malsamaj manieroj Getting Things en vian programon
kaj el via programo, anstataŭ nur presi ilin ĉi ekrano
aŭ inputting aferoj el la komandlinio.
>> Do unue oni iom granda ol caret.
Do output-- ĝi simple presas la eligo al dosiero anstataŭ via ekrano.
Do se vi havas ion ke presita "Saluton, mondo!" al la ekrano,
Se vi metis ĝin anstataŭe al output.text, ke
kreas dosiero nomata output.text.
Kaj kiam vi malfermas ĝin, ĝi malebligos diri "Saluton, mondo!" tien.
Tio povas esti súper utila se vi havas ton de eraroj
vere, kiel ni vidas en ĉi tiu.
Se vi faru du caret, ĝi estos presi la erarmesaĝojn.
>> Do se vi havas problemon kun la kompilita, ĝi havas multan eraroj
kaj vi fariĝas enkaĉiĝis en klopodante rulumi tra viaj komandlinio
tra ĉiuj ilin, vi povas nur presi ilin al dosiero,
malfermi tiu dosiero por ke vi povas rulumi tra ilin facile.
Mi fakte uzis tiun pli tre kiam mi estis elpurigante
Miaj 181 psets por maŝino lernado.
Do ĝi povas esti súper utila poste.
Ĝi estas ankaŭ utila se vi havas programon kiu eble estas generante biblioteko
aŭ generante iu aro de kordoj, kaj vi
bezonas por povi vidi ke ĝi estas generi ilin konvene.
Tiu estas la maniero por fari tion.
>> Do se vi presi ilin al dosiero, vi povas pli facile ekzameni ilin, ĉu ne?
Kontraŭ provas rulumu tra via komandlinio.
Kaj poste ion noti estas ke kun nur la plej granda
ol caret, se vi skribas al dosiero kiu jam exists--
tiel kiel se ni kuris ĉi la unua tempo, ni metas ĝin output.text,
kaj do ni havis duan programon kiuj presis tion kiel programo du
kaj faris grandan ol output.text, ĝi anstataŭigi that-- tiel
anstataŭigi kio estis iam en ke dosiero por komenci kun.
>> Do se vi volas alfiksus al dosiero, kiel ni vidas ĉi tie,
vi nur faru du pli grandaj ol signoj.
Kaj tio postglui al ĝi.
Ĝi ne anstataŭigi ĝin.
Do se vi bezonas por funkcii multnombraj programoj kaj tipon de konservi
spuro de kio ĉiu de ili estas reveninte al vi en dosiero,
tio estas maniero por fari ĝin.
Se vi ne zorgas kio estas en via dosiero kaj estas permesita por anstataŭigi,
vi povas simple uzi solan granda ol.
Ĉu tio havas sencon por ĉiuj?
>> Publiko: Kiel dot slash saluton granda ol eligo dot teksto, kiel duoble,
ĝi devos simple nur montrigi eligo dot teksto duan time--
>> SPEAKER 1: Ĝuste.
Do ĝi farus esence nur tute anstataŭigi kio estis tie por komenci kun.
Se ĉi tiu dosiero tie, la output.text jam
Ekzistas, esence kion vi nomas ke denove kun sola granda
ol vi povas simple pensi pri tio kiel kiel ĝi anstataŭis la dosiero.
Kiel kiam vi savante Vorto dokumento kaj vi savos kiel,
kaj vi observos la sama nomo, kaj tio tute overwrites it--
ĉi tiu estas la sama tipo de aĵoj.
Iu havas demandojn pri nur outputting al dosiero?
Awesome.
>> Do evidente, se vi reverso arrow direkto, ĝi povas fari enigo.
Do kiam vi uloj havis kiel Cezaro aŭ Visioneer
kaj vi havis enigi ion, Vi havis komandlinio argumento
kiu fakte input ĝin.
Tio estas alia maniero por fari tion.
Do anstataŭ atendante por komando prompto:
kiel kiam vi petis viajn mesaĝo Cezaro aŭ Visioneer,
se vi havus tekstdosiero kiu havis vian mesaĝon,
Vi povus simple tajpu ĝin en tiu.
>> Do se tio estis kiel skalara slash Cezaro 3 malpli ol sago eniga teksto, kiu
Estas via mesaĝo, ke kurus nur fajna.
Kiam via Caesar programo reale petis enigon el la uzanto,
ĝi jam havas ĝin ĉar vi jam tajpis en tiu dosiero.
Tio estas nur alia maniero.
Nur dorsflanko de output-- nur input viajn datumojn.
>> Kaj tiam la lasta estas pipo.
Do ĉi onia bela malvarmeta.
Ĉar ĝi permesas preni la eligo de unu
programo kaj meti ĝin kiel enigo al alia programo.
Mi ne scias ĉu iu el vi ludis kun la Decipher
ke CS50 havu vin, sed estus
permesas vin preni specimenon dosiero, tajpu ĝin en vian ĉifrado,
kaj tiam el tie tajpi ke en via malĉifro
certigi rezultis la sama.
Do ĝi estas speco de kiel triopa buklo.
Iri por ĝi.
>> Publiko: Se programo havas multnombraj enigoj,
ekzistas maniero sciigi kio enigo uzi la tekstan dosieron aŭ la eliro?
>> SPEAKER 1: Ĝi havas multnombraj enigoj.
Ajn dosieron vian input-- kiam estas petante input tiu unua fojo, ĝi estas
tuj supozas, mi pensas, estas tuj pipon en la tuta dosiero.
Do se vi havas plurajn enirojn, vi estas tuj estos muzikis en plurajn dosierojn.
Do se vi petante mesaĝojn trifoje en via kodo,
vi tuj metante en tri malsamaj dosieroj.
Kaj metas freneza.
Kaj vi ne devus devi maltrankviligi ke ĝuste nun.
Sed tio estas la ideo.
>> Do jes, fluto estas nur eligo de unu programo uzas enigo en la alia.
CXiu bona tie?
Malvarmeta.
OK.
Vi probable ne havos fari tro multe per ĝi.
Sed vi devas kompreni manieroj vi povas uzi tiun.
Kaj estas kelkaj kazoj kiujn vi eble deziras uzi ĝin.
>> Do file mi / O-- Mi scias, kion vi estas komencis diri estas kutimitaj legi el
kaj skribante al nia ekrano tie, kiu estas normo en kaj normo eksteren.
Kaj tio estas kion vi uloj estis fari ekde la komenco de klasoj tie.
Sed vi povas ankaŭ legi kaj skribi dosierojn, kio estas ĉio dosieron mi / O-- tiom file enigo,
eligo estas ĉio tio signifas.
Do tio esence signifas ke Vi povas stoki viajn datumojn nun.
>> Kiam vi simple presas ĝin al la ekrano, ĝi estas esence malaperis, dekstra?
Kiam vi faras "Saluton mondo "kaj kuri" Saluton mondo "
presas "Saluton mondo" al la ekrano.
Sed vi ne povas vere fari nenio kun ĝin de tie.
Se vi stoki en teksto dosiero, tiam subite
vi havas tiun informon kiu vi permesis manipuli aŭ meti ĝin en dosieron,
aŭ meti ĝin en programo poste.
Unu el la kialoj kial ni faros ĉi estas nur
kiel maniero por stoki datumojn por posta uzo.
>> Mi havas kelkaj paŝoj tien nur irante tra normo
I / O. En paŝo, vi bezonas krei referenco
al la dosiero kun ĉiuj kaskedoj Dosiero stelo dosiero.
Tiel ke ĝi kreas puntero al dosiero.
Sekve vi volas malfermi ĝin.
Kaj vi diras, laŭvorte, nur dosiero egalas fopen.
Kaj tiu tuj resendas montrilon al la dosiero vi ĵus malfermis.
Mi vidis paron de vi infanoj oficejo horoj.
>> Sed unu el la aĵoj Estas remember-- punteros
povas esti iu adreso aŭ nulan, dekstra?
Se ni iam havas kazon kie iu povas reveni nula,
Kion ni devas fari antaŭ ni iam uzi ĝin?
Ni devas kontroli ĉu ĝi estas nula aŭ ne, ĉu?
Ĉar kelkaj de vi eble havis la demando kie ajn objekto
estis reveninta en Breakout estis nula.
Vi provis realigi iu funkcio en ĝi.
Kaj via komputilo ejo faulted.
Rajto?
Mi vetas paro de vi eble havis tiun temon.
>> Do kun fopen, fopen volo ĉu reveni puntero al la dosiero,
aux se iu eliras malbone, ĝi tuj revenos nula.
Do vi ĉiam bezonas kontroli ke ĝi ne redonis nula
antaŭ vi provas fari ion alian.
Ĉi tio estas kiel norma paradigmo ke vi tuj bezonos tie.
Se okazas iam eblecon ke iu povis reveni nula,
kontroli por certiĝi ke ne antaŭ vi procedi.
Alie, vi tuj akiri belan lokon faŭltoj.
Kaj neniu ŝatas trakti tiujn.
>> Do kiel ni vidas ĉi tie, la unua argumento estas nur la vojo al la dosiero.
Se tiu dosiero ne ekzistas, ĝi tuj krei tiun dosieron.
Kaj estas ĝuste tuj estos malplena.
Kaj tiam la dua argumento estas la modo kiun vi volas.
Ĉu ni volas legi de ĉi tiu dosiero?
Ĉu vi volas skribi gxin?
Ĉu vi volas alfiksus?
Do efektive, kion mi ĵus said-- se la dosiero ne ekzistas
kaj vi provas legi de ĝin, tuj ĵetos eraro.
Se la dosiero name-- ŝatus se file.text ne ekzistanta
kaj vi volas skribi al ĝi, ĝi kreos
malplenan dosieron nomatan file.text por vi.
Kaj se vi volas alfiksus, vi faru la samon.
Ĉu tio havas sencon?
Se vi provas legi de dosiero, kiu ne ekzistas ankoraŭ,
ĝi ĵetos eraro.
Alie, ĝi kreos la dosieron cxar vi faras tion, kion vi deziras ĝin.
Malvarmeta.
Nun ni povas legi de la dosiero.
Kaj tiu estas ĝuste speco de iri tra la malsamaj funkcioj
ke ni havas por dosiero / S. Tiu volo necesa en tiu semajno pset,
se mi memoras ĝuste.
Jes, tio absolute estos necesa en tiu semajno pset.
Do fgetc revenas la proksiman karakteron.
fgets simple resendas linio de teksto.
Ĝi revenos ion ĝis nova linio, kaj ĝi rompiĝis.
Do fread legas iun nombro da bajtoj kaj lokoj ilin
en tabelo, kiu Estas io, kion vi povus
volas fari kun re-size-- povus esti utila.
>> Kiom da homoj legis la pset spec, la vojo?
OK.
[Inaudible]
>> SPEAKER 1: OK.
Bone.
Definitive legi that-- estas amuza pset.
Vi akiras rekuperi forviŝita memoro card-- vere ekscita kiam funkcias.
Sed definitive, komenci legi tion.
Venu talk min se vi havas demandojn pri tio.
>> OK, do kiel mi komencis diri, fread legas certa nombro da bajtoj.
Tio estas iom arbitra nombro ke vi tuj metis.
Kaj tiam fseek simple movas al certa pozicio.
Do eble vi ne zorgas pri la venonta 10 bajtoj.
Vi nur volas salti antaŭen.
Vi ne zorgas pri tiuj.
Vi volas legi ekde bajto 11.
fseek permesas fari tion.
Do permesu vin esti selectivo pri kio vi legas.
Ĉar fgetc, fgets kaj fread legado de iu loko en la dosiero.
>> Maniero pensas pri tiu estas se tiu Estas nia dosiero, kiam vi unue malfermi ĝin,
vi havas ĉi tiun pozicion en la dosiero kiu komenciĝas je la komenco.
Whenever vi nomas fgetc, fgetf aux fread,
ĝi tuj komencos de tiu pozicio markilo.
Imagu ke vi simple volas legi tiu bloko de memoro super tie.
Vi ne povas simple nomi.
Vi devas serĉi pli tie kaj tiam legis el tie
aŭ legis, ricevas aux getc, dependante de kion vi volas.
Do serĉi nur permesas skip porciojn da memoro.
Kaj tio estas la sola Tiel vi povos salti aferoj
sen legi ilin en viajn bufro.
Ĉu tio havas sencon por ĉiuj?
>> Evidente, tie estas multajn paralelajn here--
nia eliro aux input redirección, Vi legas kaj skribas.
Do fputc nur skribas karaktero en la dosiero.
fputs skribas linion.
Fprintf presas formatitan eligo.
Do se vi havas pestañas, aŭ spaco, aŭ whatnot.
Kaj tiam fwrite skribas kelkajn tabelo de bitokoj al dosiero.
Do ĉi tiu estas la sama vojo fwrite kaj fread estas analoga
opposites-- fgets, fputs kaj tiam fputc kaj fgetc-- lotojn
de freneza, rapidaj aferoj.
>> Nur speco de subteni ĉi handy-- vi havos malsamajn fojojn
kie eble vi simple volas unu signo samtempe.
Eble vi volas tutan linion.
Kun via vortaro pset-- kiu estas en du psets,
Mi kredas, ni donos al vi tutan vortaro en teksto formato
kiu havas ĉiu vorto apartigitaj per linio.
Do se vi volas legi unuvorte samtempe,
kio povus oni uzas se vi legas kaj ili ĉiuj disigitaj sur novaj linioj,
kaj vi volas nur unu vorton samtempe?
>> Publiko: Fgets
>> SPEAKER 1: Ĝuste.
Fgets-- ĉar kiu revenas kiom estas en unu linio.
Kaj se ĉiu vorto estas ĝia propra linio, ni povas uzi fgets.
Malvarmeta.
Ĉu tio havas sencon, ĉiuj?
Cool?
Jes, ni iras por atingi la amuza parto kun montriloj
tre frue, kie vi alveni al fari iuj math.
Kaj estos granda.
>> Lasta step-- fermi vian dosieron.
Kun tiom da aferoj tie, unu el niaj paradigmoj
estas se ĝi povas reveni nula, kontroli nula.
Se vi malfermas ion, vi prefere fermi ĝin.
OK, do vi ne faris tion ĝis vi farita se vi fermis ĝin.
Speco de kiel ĝi estas ne super ĝis la dika sinjorino kantas.
Tio estas kiel fermante via dosiero.
Kiel ĝi diras ĉi tie, ĝuste ripeti, ĉiam
malfermu vian dosieron antaux vi legi aŭ skribi al ĝi.
Kaj ĉiam fermi ĝin se vi jam malfermis.
Bone?
Malvarmeta.
>> Do jen ekzemplo.
Do tiny-- Mi ne scias, ĉu vi infanoj povas vidi ke tre bone.
Se nur ni povus pliigi la brilo iel.
Lasu min reale fari ĉi se mi povas.
OK, vi uloj povas ne vere vidu, tute ne, ĉu vi?
OK, ni tuj fari tion, do.
[Inaudible]
>> Mi supozas ĉi estas multe pli bone vidi.
Ĉu iu povas vidi kie mia muso iris estas la demando?
Ha, tie is-- kio batalas!
>> OK.
Esence, vi uloj devus havi speco de ideo de kion ĉi faras.
Ĝi ne estas perfekta.
Sed mi preferus klarigos ol pasigi pli tempo provante formati ĝin taŭge.
Esence, kiel vi vidas tie, Ni komencu per dosiero malfermita.
Kaj ni havas kelkajn datumbaza dosiero kiu ni estas
malfermante kiuj diras ke estas niaj lernantoj.
Kaj ni tuj skribu al ĝi.
Do kompreneble revenas nula.
Do ni devas kontroli nula.
Kaj tiam se ĝi ne estas nula, ni trairu.
Kaj kiel vi vidas, ni estas looping tra tie.
Tie estas studentoj.
Studentoj estas hash difinita kiel tri.
Kaj kion ni faras estas ni presi la dosieron, dekstra?
Do kion ni presi al nia arkivo?
>> Publiko: La partituroj kiuj estas en la tabelo?
>> SPEAKER 1: Jes.
La partituroj kiuj estas en la array-- ekzakte.
Do ni malfermante ĉi datumbaza dosiero, kiu
Mi supozas estas ia de gradoj datumbazo.
Kaj ni simple videbligi la partiturojn de ĉiu studento por tiu dosiero.
Cool?
Bonan.
Awesome.
OK.
Ni reiri to--
>> Publiko: mi havas rapida demando.
Estas la printf ne en la por buklo?
Tio estas nur en la se buklo?
SPEAKER 1: Ne, ĝi estas en la buklo.
Mi ne povas vidi Mian muso tre bone ĝis tie.
Do mi luktanta formaton kiu ĝuste.
Ĉi krampo devus foriru.
Ĝi devus esti cxi tie.
Tiu estas kio estas en via por buklo.
Tie.
Nun estas bela.
Do tiel estas kiel ĝi devus be-- krom por ke lasta krampo ke mi foriru.
OK.
Ĉu tio havas sencon por ĉiuj?
OK.
Ni tuj pluiri al la sekva afero then--
kiu, fakte, vi tuj al bezonas vidi la kodon.
Do mi simple tuj kopiu ke pli ĝuste nun.
OK.
Do mi tuj montros al vi uloj tiu kodo.
Mi volas ke vi provu figuro el kio ĝi estas supozita fari.
>> Do donita that-- preni minuton.
Provi elkompreni kio okazas tie.
>> Ajna ideoj?
>> Ni scias, ke ni havas almenaŭ du argumentojn en la komanda linio, dekstra?
Mi supozas unu el kiuj tuj estos ke [inaudible] de nia programo estas
kaj tiam io alia.
Ĉar se [inaudible] estas malpli ol du, ni krias al ili.
Rajto?
Kaj de la uzado, ĝi aspektas kiel ĝi tuj estos ia dosiero.
Ni ĉiuj konsentas pri tio?
Do nun, kio estas la buklo faras?
Kio ĝi trairis?
>> Publiko: Ĉiuj dosieroj.
SPEAKER 1: Ekzakte.
Ĝi okazas tra la tuta dosieroj kiujn ni input tie.
Do por ĉiu dosiero, estas malfermante kelkajn kordo tie.
Ĝi estas malfermi tiu dosiero.
Rajto?
Kaj ĝin legante el ĝi.
Kompreneble, kontrolanta se estas nula.
Kaj tiam ĝi estas presanta.
Se ĝi estas nula, nur dirante nin ke tio ne estas dosiero kiu ekzistas.
Ĉar rememoru, kun legi nian dosieron devas ekzisti.
Rajto?
Kun registran kaj append, vi povas akiri for kun gxi.
Sed kun legado, nia dosiero devas ekzisti.
>> Kaj tiam se ĝi ne ekzistas, kion ni faras cxi tie?
Ni komencu tie.
Kio estas tio do-- tiu unua karaktero.
Kion ĝi faras?
Li ricevas unu signo, dekstra?
Do kio estas tiu faras?
Ĝi faras la unuan karakteron.
Iu scias EOF?
>> Publiko: Fino de dosiero?
>> SPEAKER 1: Fino de file-- ekzakte.
Do tuj trairos la tuta dosiero, dekstra?
Kaj tiam tuj ĝisdatigi per atingi ĉiun postan karakteron.
Rajto?
Kaj kio ĝi faras?
Publiko: Metante ke in--
>> SPEAKER 1: Putchar prints al viaj ekrankurteno.
[Inaudible] la karaktero.
Kaj poste kiam [inaudible] ĉi fermos la dosiero.
>> Publiko: Ĉu vi ne bezonos [? alia? ?]
>> SPEAKER 1: Ne nepre.
Mi volas diri, ĝi estas ia implicita en tio.
Pro tiu revenas, kvankam, kiel longe kiel tiu ne kaptas ĉi, vi estas bela.
Mi volas diri estas probable bona ekzerci por fari alie.
Sed alie ne ĉiam necese speciale
se vi havas ion kiel reveno, kiu
signifas ke en ĉi tiu kazo, se ĝi kaptas ĝin, via programo tuj finos
kaj neniam atingi ĉi.
Ĝi estas pli por la kazo kie vi estas Ne nepre redoni ion.
Ĉar se tiu ne estis reveninte ion,
tio signifus ke se ĉi tio estis vera, la resto de ĉi tiu estus ankoraŭ kuras.
En tiu kazo, vi volus malvera.
Se ĝi estas reveni, kaj via programo finaĵo,
oni alie ne estas necesa ĉiuj La tempo, depende de kunteksto.
Jakob vi havas demandon?
Publiko: Yeah.
Tiel faras fgetc akiri la venonta signo?
Kiel la karaktero pliigi?
SPEAKER 1: Jes.
Do fgetc ekhavas la venonta signo.
Vi povas pensi pri tio kiel C ++ en senso.
>> Publiko: Do ​​kio EOF?
>> SPEAKER 1: EOF estas fino de dosiero.
Estas nur markilo kiu permesas koni ke vi estas ĉe la fino de via dosiero.
Do tiu tuj presi al viaj norma eksteren.
Kaj tiam tuj fermos la dosiero kiam ĝi estos farita.
Kaj poste ni iros al la sekvantan dosieron, dekstra?
Do entute, kion signifas tiu programo faras?
>> [Inaudible]
>> SPEAKER 1: Jes.
Ĝi simple presas el ĉio tie.
Do se vi uloj iam uzita CAT kaj tiam la nomo de iu file--
Mi ne scias ĉu iu el vi havas iam faris tion en via fina stacio.
Sed se vi iam uzi la komando CAT-- C-A-T--
kaj tiam ajn dosieron vi havas there-- ĝi
presas gxin por via fina stacio, kiu povas esti super oportuna por kelkaj aferoj.
Mi uzas ĝin tre.
Ĉu tio havas sencon por ĉiuj?
Cool?
>> OK viaj tasko now-- ĉu per mem aŭ kun la homoj ĉirkaŭ you--
estas ĝuste skribi simplan programon kiu nur skribas "Saluton, mondo!"
al dosiero.
>> [Inaudible]
>> SPEAKER 1: mi estis kiel, faris Mi faras tion malbone pasintsemajne?
Mi ne pensas, ke estis malbona.
Mi ĝojas ke vi estas ĉiuj ĉi tie.
Ĝi vere igas min feliĉa.
Mi estas knabino de simplaj plezuroj.
Mi nur ŝatas kiam mian sekcio ĉeestu.
Do mi nur nun ĉi komenciĝis pro vi uloj tiel ke ni povas programi kune.
Mi ne ŝatas meti iun en surloke se vi volas esti.
>> Publiko: Por la kvizo, do ni devas skribi programon?
>> SPEAKER 1: Vi povas esti petis skribi simplajn programojn mane.
Yup.
>> Publiko: La kvizo estas proksima semajno, dekstra?
>> SPEAKER 1: La kvizo estas proksima merkredo.
Tio signifas ke estas bela [? CSE?] grading partio poste, kion
signifas ke vi ricevos vian partituroj reacxeti night-- je kioma horo?
Kiu scias?
Sed estos tiunokte.
>> Bone.
Kiel ni volas komenci ĉi?
Mi donos al vi hint-- komenciĝas kun tiu.
>> Publiko: vi devas malfermi dosieron.
>> SPEAKER 1: Jes.
Do kion vi volas nomi tion?
Ĉu vi simple volas nomi ĝin "dosiero"?
Ni faras ĝin facile.
Do fopen-- kio estas nia eligo provo tuj estos?
Nomu ĝin "Saluton."
Kaj kia estas nia modo?
Kion ni faras al ĉi tiu dosiero?
>> Publiko: Read.
Skribante.
SPEAKER 1: Ni skribas al ĝi.
Amindaj.
OK, do ni havas ĉi tiun dosieron nun.
Kion ni devas fari?
Publiko: Kontrolu se estas nula.
SPEAKER 1: Kontrolu se estas null-- ekzakte.
Tio estas kion mi ŝatus aŭdi.
Tio devus esti aŭtomata, speciale sufiĉe tre de ĉi tiu punkto sur.
Se vi komencas segfaulting, vi probable Ne kontroli nula ie.
Naŭ fojojn el dek, tio estas tuj estos via eraro.
Do se vi povus simple preni la kutimo, ĉiam kontroli se estas nula,
via vivo Iĝos bele easy-- aŭ facila.
>> Do kontrolu por vidi se estas nula.
Do se tio ne estas nula, kiu diras la bang egalas
means-- ne null-- estas valida.
Kion ni volas fari?
Ni nur volas presi tiun dosieron, dekstra?
Do kion ni tuj uzos?
>> Publiko: Fprintf
>> SPEAKER 1: Fprintf-- bela.
Kaj fprintf prenas du arguments-- kie ĝi okazas kaj kion ni volas presi.
Do kio estas la unua?
Kie ĝi iras?
>> Publiko: Dosiero.
>> SPEAKER 1: Ĝi okazas al dosiero.
Kaj kion ni volas presi?
"Saluton, mondo!"
Bone.
Ni havas unu lastan thing-- alia granda paradigmo tie.
Publiko: Close.
SPEAKER 1: Close.
Tie vi iru.
>> Publiko: Ĉu ĉi tio okazas Se la dosiero estas nula?
SPEAKER 1: Ne, tio estas, se ĝi estas ne nula.
Publiko: Ho, se estas not-- OK.
Por la fopen kaj tiam la du argumentojn kiuj iras ene,
kion la unua argumento signifas denove?
>> SPEAKER 1: La argumento estas ĝuste kiel la nomo de la dosiero
ke vi deziras iri.
Do post tiu kuras, vi farus havi iun dosieron nomatan "saluton"
kiuj havis "Saluton mondo" en ĝi.
Tio estas ĉio.
Nur la nomo.
>> Publiko: Kaj ĉar ĝi estas la skribo, la dosiero ne devas jam ekzisti.
Ĉu tio, kion vi diris?
>> SPEAKER 1: Ĝuste.
Ĝuste.
Se "Saluton" kiel dosieron ne ekzistanta, estas
tuj krei dosieron nomatan Saluton "kaj skribi ĝin por vi.
>> Publiko: Kiam vi rakontis la programo skribis al la dosiero,
kial vi skribas "dosiero" anstataŭ la nomo de la dosiero kaj fprintf--
>> SPEAKER 1: Ĉar en tiu kazo, ni havas ke granda FILE-- ĉiuj en caps-- stelo,
dosiero.
Do estas puntero al la dosiero ke vi parolas.
Tiu estas la maniero ke Ni nur aludas al ĝi.
Do en ĉi tiu kazo, vi povas pensi file-- ha!
ni povas uzi this-- dosieron tie aludas al la malfermo de "Saluton"
kaj lasante ŝin skribi.
>> Publiko: Could ni metis "Saluton" anstataŭ [? de justa?] f dosieron?
SPEAKER 1: Ne, ĉar "Saluton" bezonas esti malfermitaj kaj konservebla.
Dosiera tie estas kiel designador kiu diras OK, ni
havas ĉi file-- hello-- ke ni rigardas.
Ĝi estis malfermita.
Kaj ni tuj skribu al ĝi.
Se vi simple uzu "Saluton", kiu encapsuladas en ĝi.
Do tuj Freak Out.
Mi volas diri, vi povus esti nomata ĝin.
Vi povus fari dosieron, stelo, "Saluton", egalas tio.
Sed la tuta punkto estas ke vi bezonas dosiero stelo puntero por
por povi uzi tiujn funkciojn.
Publiko: Ĉu vi povas fari dosiero, stelo, arkivo, "Saluton"
aŭ ĉu vi devus meti file stelo, dosieron per ĝi?
SPEAKER 1: Vi povis fari dosieron, stelo, "Saluton."
Vi povas ŝanĝi tion por ajn nomon vi deziras.
Ĝi estas tute arbitra kion tiu nomo estas.
Vi povas nomi ĝin io.
Enoficigi ĝin flugantaj spagetoj, se vi volas.
>> Publiko: Kio estas la "w" en citilojn por?
>> SPEAKER 1: La "w" estas nur la modo.
Do ni skribas al ĉi tiu dosiero.
CXiu bona?
Klara?
Jes.
>> Publiko: Do ​​kiam skribas ĉi dosiero, kie ni poste trovas ke tiu dosiero?
>> SPEAKER 1: ĝi estos en la sama dosierujo kiun vi aktuale.
Se vi estas en pset tri vi kuros ĉi, ene vian pset
tri dosierujo tuj estos tiu dosiero nomata "Saluton."
Cool?
CXiu bona?
Mi sentas kiel vi estas ĉiuj atingi ĝin, kiu estas granda.
OK.
Do al mia slide show-- Mi amas kiam tio funkcios.
OK, pointers-- Ĉu vi uloj ekscitas?
Punteros estas grandaj.
Ili prenu iom envolver vian kapon ĉirkaŭe.
Tiu estas mia dua jaro instruado punteros.
Kaj mi opinias, ke mi fine akiris ĝin.
Do se vi luktas, ĝi estas en ordo.
Kiel mi diris antaŭe, desegnante bildoj helpas multe kun aĵoj en CS,
kiom mi pensas, ke homoj emas pensi ho, ni estas ĉe komputilo.
Ni devus nur kodo.
No-- desegno bildoj Mi vere helpi vin.
Mi vere rekomendas al vi frapeti en vian kindergartner flanko
kaj elirigos crayons aŭ markiloj kaj egaleco.
Ĉar ĝi helpos vin.
Kaj se vi vidos min en oficejo horoj, mi estos portante ĉirkaŭ stakoj da papero
kun plumoj desegnante tion eksteren.
>> Tiel precipe per pointers-- desegni portretojn.
Kaj mi estas certa ke ni efektive tuj esti desegnante fotojn tie ankaŭ.
>> Do vi uloj ĉiuj alvenis al vidi Binky, tiu malvarmeta Claymation afero.
Kaj ni pensas, ke estas vere amuza kiam li eksplodas en faskon da pecoj.
Estas iom komika por klaso.
C [inaudible] tiun grandan kapablon por povi kontroli memoro.
Kaj ĝi estas unu el la aĵoj kiuj vere faras tia potenca lingvo.
Sed kun granda potenco venas grandan respondecon.
Kaj frenezaj aĵoj povas okazi Se vi ne estas zorgema.
Do kiam vi uzas punteros, vi volas fari
certe vi vere komprenas precize kion vi faras.
Espereble la sekva iom da tempo helpos vin vere kompreni
punteros, kiel uzi ilin, kaj kiel manipuli ilin.
>> Do memory-- mi certas ke ni vidis tiun diagramon antaŭe.
Do tio estas nur simpla diagramo de kiel aferoj povus esti stokita memoro.
Do esence havi tiujn grandega arrays de unu bajto blokoj
kion ni havas here-- malpeza pliigoj de unu ĉiufoje.
Ĉi tio estas en deksesuma [inaudible] tiel ok bitoj blokoj.
Kaj ĉiu bloko estas asociita kun iuj deksesuma adreso.
Do se vi iam vidis la 0x, tio estas nur notating
ke ĝi estas deksesuma adreso.
Vi povas supozi ĉi signifas iuj adreson en memoron.
Ni parolas pri memoro adresoj kiam vi vidos deksesuma.
>> Ni havas ints estas ŝanĝiĝemaj, ŝoveliloj estas variabloj kiuj stokas.
Do ints vendejo ints.
Flosoj vendejo flosas.
Do ni ankaŭ havas punteros kiuj tendencas memoro adresoj.
Tio estas speco de surĵeto.
Punteros estas ekskluzive por memoro adresoj.
Do jen kiel via tipo tie.
Via aparato estas 32 bitoj, kio signifas ke via memoro adreso estas kvar bajtoj.
Do neniu puntero ke vi havas ankaŭ tuj estos kvar bajtoj.
Alie, se ĝi estas kvar bajtoj, memoro estas kvar bajtoj.
Pointers vendejo memoro.
Do, ili estas kvar bajtoj.
Cool-- nur volas plifortigi tion.
>> Vi devus akiri ĉi komika nun.
Mi ne scias kiom multaj el vi Estas xkcd fanoj, sed mi amas xkcd.
Ĝi estas granda.
>> Bone.
Do krei pointers-- kiel mi diris, estas preskaux nur ŝatas ion alian.
Vi havas tipon.
Vi havas nomon.
Rajto?
Tio estas kion ni havas tie. [? Hex?] Stelo signifas estas puntero,
kaj tiam ajn vi volas nomi ĝin.
Do la tipo reprezentas kion vi povas stoki.
Bone?
En la sama maniero kiu se ni faras ints, ni scias ni stokante la int tie.
Kun puntero, ĝi tenas memoron adreso.
Sed kion ĝi signifas that-- tie estas kie desegno tuj veni en oportuna.
Do en ĉi tiu kazo, ni havas iuj value-- diru kvar.
Kvar estas cxe adreso unu.
OK?
>> Tiu unua tie signifas ke estas puntero 2x.
Rajto?
Estas iuj montrilo x.
x povas esti io ajn.
Ajn x is-- diri x estas kvar.
Ĝi tuj stoki la memoro adreso tie.
Tiel int, stelo, x-- tio iuj aliaj fendo en memory--
kiu scias kia estas.
Sed tuj stoki adreson ĉi tie.
Do tiu estus like-- tiukaze ajn,
estas stokita ĉe 0x1-- ajn stokas ĉe la adreso kiun nia montrilo tenas,
devas parigi kun kion ni designado.
Do je 0x1, en tiu kazo, tio estas x.
Tiu nur povas iam esti int dum ni uzas ĉi.
>> Simile, se ni havas alia 1y ajn
adreso estas stokita per y havas esti char-- samon kun z.
En la sama maniero, kiam ajn vi provu fari intx egalas 0,4,
ĝi tuj krias al vi kaj estos kiel ne, vi diris ke vi volis int.
Tiu estas supozata esti int.
Ĉesi provi fari ĝin kaleŝego.
>> Do tio estos kion ili volas esti.
Lasu tion esti samaj.
Tiom granda afero estas simple ajn tipo de puntero
tio estas, tio estas la sola afero vi povas stoki tie.
OK?
Kun praktiko, kiel kun lasta semajno, ĉiu
Ŝajnas vere ia abstrakta.
Ni tuj faros iun praktikon.
Ĝi devus fari pli senco.
>> Do referenco kaj dereferencing-- estas vere grava akiri tiuj rektaj.
Mi ankoraŭ devas refreŝigi ĉiu nun kaj tiam.
Kaj mi estas kiel atendas, kiu mi volas?
Do la ampersand efektive donu vi la referenco aŭ adreso de.
Do ĝi redonas la adreson en memoro pri kiu variablo estas stokita.
Do tuj efektive revenos al vi deksesuma, dum dereferencing ĝi
Efektive tuj donos al vi la datumoj kiuj stokas tie.
OK?
Do ni iras por rigardi ekzemplo vere rapida, aŭ fakte ĝis nun.
>> OK.
Do ni devas pensi vere zorgeme pri tio.
Do jen ni havas iu entjero x.
Mi tuj provos ellogu ĉi el la plej bonaj el miaj kapabloj.
Do ni tuj havos ĉi fendo x.
Kaj ĝin stoki kvin.
Lia adreso estas 0x4.
Cool?
Ĉiuj bonaj.
>> Do nun ni havas ĉi puntero.
Ĝi finiĝis ĉi tie.
Kaj la ampersand donas ni La adreso de io.
Do, en ĉi tiu kazo, ĝi estas la adreso de x.
Kio estas la adreso de x?
04-- kaj ĉi puntero estas 0x08.
Cool?
Do vi povas pensi pri tio montrilo, 04, ĝuste punktoj super tie.
Kaj ili estas nomitaj punteros ĉar kiel ni atingos pli en tiun,
Vi tuj vidos indikante tion.
Kaj unu bloko montrante alian bloko faros multe pli sentita.
Do tie estas du.
Kaj tiam ni havas kelkajn kopion, kiu estas what-- 0x0c.
Kaj tuj dereference nia montrilo.
>> Do kio ĝi estas diras estas OK, jen nia montrilo.
La valoro stokas estas 0x04: Kaj kion ĝi estas jene estas iri al tiu adreso
kaj diru al mi kio estas en ĝi.
Do tio estas efike kion ĉi sago faras.
Vi povas pensi pri tio kiel via stelo.
Do bone, kiam ni frakasas, ĝi signifas sekvi.
Iru al tiu adreso.
Kaj tio estas esence nur sekvante ĉi sago al tiu memoro chunk.
Kaj donu al ni kio estas en ĝi, kiuj estas 5.
Ĝi estas kial nia kopio estas egala al 5.
Ĉu tio havas sencon?
Ĉu iu bezonas min iri tra ĉesu, aŭ pli malrapide?
Vi volas ke mi iru tra ĝi pli tempo?
OK.
Ni tuj redesegni ĝin denove.
Kiam ni komencos, ni ĉiuj samopinias ni havas iuj eron de memoro kiu estas ŝanĝiĝema
x ke ni starigu egala al 5.
Ni ne kontrolas kie estas en memoro.
Do tiu makulo estas nur arbitre atribuita.
Bonan tie?
OK.
Tiam ni pravalorizi puntero al int.
Tio estas kial ĝi estas permesita indikas x ĉar ni havas int tien.
Ni havas alian eron de memoro ĉar ĉi puntero
estas variablo simple kiel io alia.
Ĝi estas arbitre atribuita iun spacon en memoro.
Kaj kion ĝi stokas estas la adreso de x.
Ampersand signifas adreso de x.
Do kio estas la adreso de x?
>> Publiko: Estas zero--
SPEAKER 1: 0x04.
Do then-- lasta.
Ni havas kelkajn copy-- denove nur alia variablo.
Do ni atribui iun arbitran lokon.
Kaj ni dereference nia montrilo.
La stelo signifas iri al la adreso stokitaj en mia montrilo.
Diru al mi kio estas tie.
Do la adreso stokita en nia puntero estas 0x04.
Do ni iru al tiu adreso.
Ĝi estas indikante ke adreson.
Kio estas interne tiu memoro bloko?
Estas kvin.
Do, tio estas kion ni atribuos nia kopio.
CXiu bona?
Malvarmeta.
Again-- fotoj.
>> Do spuras la valorojn here-- min lasos vi uloj pensas pri tio.
Ni atingu alian bildon.
Sed mi deziras, ke vi provu motivon per tio sur via propra por unu minuto.
>> Ĉar ili ne donis ni ekzemplon adreson,
Mi nur tuj faros ampersand x-- kiu devus helpi forpeli ĝin hejmen.
Ampersand signifas adreso.
>> Do, en la unua, ĉiuj iru kun la unua linio.
Iu x aro de five-- iuj hazarda fendo en memoro.
Int stelo puntero estas egalaj al la adreso de x, dekstra?
Int stelo montrilo kreas tiu bloko, flamo Pointer,
kaj asignas ĝin al la adreso de x.
Mi estas terura ĉe ampersands.
>> Nun kion ni faras estas ni diru OK, dereference nia montrilo.
Do ni iru OK, kio estas en nia montrilo?
Estas ampersand x.
Iru al ampersand x kaj religi ĝin.
>> Do nun, ampersand x tuj estos 35.
Do esence, kiam estas dereferencing, vi iru OK.
Vi tuj estos desegnante bildoj kiel ĉi.
Vi tuj estos desegnante Viaj sagoj sur kie estas.
Do iru al tiu fendo en memoro kaj aŭ donu al mi ke valoro reen, aŭ ŝanĝi ĝin.
En ĉi tiu kazo, ĉar ni estas en tiu valoro, ni atribuante ĝin al esti 35.
Dum kiu en la lasta unu se vi rimarkas, ni
estis asignanta kio tien por io alia.
>> Do ili havas ĉi awesome tablo.
Ne estas tiel malbone.
Vi uloj laboras sur ĝi.
Mi tuj eltiros gxin sur la tabulo.
Ni tuj plenigi ĝin kune, OK?
Do, prenu iom da papero, grab partnero, komenci labori.
Mi iras por ricevi grandan pecon da kreto.
Ĉar tuj estos multe.
OK.
PROFESORO: OK.
Komencu kun la unua vico.
Ni komencas tie, tiam vi uloj povas eble funkcios tra iuj pli.
OK.
a egalas b fojojn c tia kiu estas?
Tio ne estas lertaĵo demando, mi promesas.
>> Student: 4 fojoj 5.
>> PROFESORO: 4 fojoj 5.
20.
Do kio estas b?
Student: 4.
>> PROFESORO: kaj C?
Student: 5.
PROFESORO: 5.
Kaj tiam tiu estas ĝuste tuj esti ampersand a, ampersand b,
ampersand c, ĉu ne?
Ne malbona.
Ĝi estas sufiĉe simpla.
OK.
Do la sekvanta unu.
A egalas al fojojn c, en kazo Iu estis nekonataj kun tio.
Estas ĉiuj konataj kun la tempoj egalas?
OK, ĉiuj ĉi means-- tio stenografio por egalas unu fojojn c.
Vi ankaŭ povas fari tion per divido, kun aldono, kun subtraho.
Vi povas fari egalaj, aŭ pli egalas c signifas egalas alpago c, minus egalaj
c estus egalas al minus c.
Estas nur sintaksa sukero.
>> Do, en ĉi tiu kazo, ĝi estas egala al unu fojojn c donus al ni kion?
Denove, ne estas lertaĵo demando.
>> Student: 100.
>> PROFESORO: 100.
Ĉu io alia ŝanĝi?
No.
Eble mi fine akiri bona ĉe mia ampersands.
>> Student: OK, pardonon, kiel vi akiris 100?
PROFESORO: OK.
Do estas egala al fojoj c, do fojojn c.
Student: Ho, vi uzas a por la previous--
PROFESORO: Jes.
Do tiuj estas niaj plej freŝaj valoroj.
Tio estas kion vi devus esti uzante kiel ni iru malsupren, OK.
Do, b estas la sola ŝanĝo, ĉu ne?
Do ni plenigi cxion alian.
B. Kio b iĝos?
Esti aŭ ne esti.
Do kio estas tiu faras?
Kio estas la stelo pa faras?
>> Student: Kodo la situon de Pensilvanio.
>> Student: Ne, ne tute.
Do ĉi tiu estas d referenco.
>> Student: Tiel b estas manoj valoro de Pensilvanio.
>> PROFESORO: Yeah, do pa trovas La adreso de, dekstra?
Do ĝi estas vorto iru al kie a estas stokitaj kaj donu tiun valoron.
Do kio estas b?
Student: 100.
PROFESORO: 100.
Perfekta.
OK, do pc estas kio ŝanĝiĝas.
Ĉio alia restas la sama.
Kio pc iĝos?
Simpla asigno.
Pc egalas pa, kaj kio estas la pa?
>> Student: ampersand al.
PROFESORO: Perfekta.
Nun ni ricevas interesajn.
OK, ni rompos ĉi tiu suben.
Unue, kio estas b fojojn c, ĉar tio la facila parto de ĉi tiu, ĉu ne?
B fojojn c is--
>> Student: 500.
>> PROFESORO: Yeah, do kio estas tiu, kiu faras,
se ĝia stelo pb, kio ŝanĝas?
>> Student: Kio estas en the--
PROFESORO: Kio estas en b?
Student: Kio estas en la spaco ke pb notas al.
PROFESORO: Kaj pb notas to--
Student: B.
PROFESORO: B. Do la sola afero sxangxigxi estas b, dekstre.
Do b fojojn c, 500.
Do jen kion ŝanĝas nun.
Malvarmeta.
Amindaj.
Vi uloj faras grandajn.
Bone, rompante tiu unu suben.
C ŝanĝiĝas, ĉu ne?
Do ni povas plenigi cxion alian.
Ni vidu.
OK.
Ni scias, ke c tuj estos la produkto de du nombroj, dekstra?
Kio du nombroj, kvankam?
>> Student: A kaj C?
>> PROFESORO: Do estas rajto por la unua.
Do ni d referenco p de, dekstra?
P de punktoj al a, do ni scias ke ĉi tiu tuj estos 100 fojojn kio?
Fojoj kion faras pc punkto?
Notas al.
Do 100 fojojn 100 estas 10,000.
Ĉu tio havas sencon?
Malvarmeta.
Hejmo sekcio, knaboj, lasta vico.
OK.
Kio ŝanĝanta tie?
>> Student: A.
PROFESORO: A. Perfekta, do ĉio povas resti la sama.
OK.
Kaj kio estas?
Do ĝi estas foje kio?
Tio estas stelo pb.
Do stelo pb signifas jen pb: pb punktoj al b.
>> Student: 500.
>> PROFESORO: 500.
Do ni havas 500 fojojn 100.
Tio estas 50,000.
Whew!
Rigardu tiun.
>> Student: Kial ni havas la & c por la last--
PROFESORO: Pardonu.
Student: Oh, OK.
PROFESORO: Mia malbona.
Amasoj de skribo.
CXiu bona?
Ne tro malbone, ĉu?
Nur prenas iom dum labori tra.
Se vi rompas ĝin malsupren, kompreni kion ĉiu parto
raportas to-- kiel kun ĉio estas,
yes-- rompas ĝin malsupren al la malgranda problemoj kaj tiam recombine,
kaj vi povas fari iujn awesome stuff.
Tie estas la respondoj, sed ni faris tion.
Puntero aritmetiko.
Ah.
Miaj manoj estas ĉiuj yesosas.
Do aldonante nek forprenante int ĝustigas la montrilon
de la grandeco de la tipo de puntero.
Memoru, kiel ĉiu tipo havas malsaman grandecon?
Do kiel duobla aŭ longa tempo estas ok kaj int estas kvar sed char estas unu.
>> Do kion vi volas fari is-- unu afero memori
Estas nur tio kiom via montrilo valoro reale ŝanĝas
dependos de la Tipo de puntero estas.
CXiu bona kun tio?
Ĉu mi povas forviŝi ĝin?
Ni estas bonaj?
Awesome.
>> Do se ni havas iun montrilon that-- tiu tuj be-- min
tuj faros gxin int montrilo.
Stokas ĉi.
Se vi dirus montrilon plus unu, kio tuj faros
Estas ĝi tuj ĝisdatigi gxi de grandeco de int
ĉar tio estas la Tipo de puntero estas.
>> Kun C, ĉiu estas tre strikta kaj reguligita.
La int puntero tuj ĝisdatigi per la kvanto de spaco de int prenus.
An int estas kvar bajtoj.
>> Do kion devus ĉi igi?
Vi simple aldonas kvar sur ĉi.
Nun via montrilo estus be-- OK.
>> Do se tio estis char ni faris montrilon plus unu, kio ĝi estos nun?
Se started-- ŝajnigante nin started-- nun estas 0x08.
Ni diru ke tio estis char pointer, kaj ni aldonis unu.
Kion tio ŝanĝas?
Kiom da bajtoj estas char?
>> Publiko: Unu.
>> SPEAKER 1: Unu.
Publiko: Do ​​0x09.
SPEAKER 1: Do estus naŭ.
Do ĝuste ion memori.
Ĝuste kiam vi aldonas unu, ne aldonante krom se ĝi estas char.
Ĝi estas aldono kiom bajtoj la tipo kiu estas,
tial ni havas ĉi ekvacion tie supre.
Do estas int fojojn la grandeco de la tipo de puntero.
>> Do ni havas la ekzemplon tie.
y estis atribuita al tiu valoro, 0x4, Kiam ni faris y plus egalas unu.
Kio estas en ĝi, kio estas en x, ne ŝanĝi.
Kia ŝanĝo estas kio estas en kaj.
La adreso stokitaj en y ĝisdatigita de kvar ĉar estas kvar bajtoj en int
kaj ĝi estas int montrilo.
>> Bone.
Do nun ni havas alian ekzercon.
Do la demando estas, kion presos.
Ajna ideoj?
>> Publiko: La nombro de karakteroj en feliĉa kato?
SPEAKER 1: Ekzakte.
Tiel ŝatas vian ĉenon.
Ĉu ĉiuj bonstata?
Ĉu ni volas promeni tra ĝi?
>> Jes, bone.
Do kion ni havas here-- mi kiel ĉi tiel pli.
Mi ne devas [Inaudible] ridinde.
>> Do ni havos niajn kordo tien, feliĉa kato.
Amindaj.
Ni havas vendotablo ke ni konservanta trako de.
Do ni havas iun char * puntero ke nur estas metita egala al Str.
Kion tiu faras estas ĝi estas atribui iun montrilon
al la komenco de via ŝnuro.
Ĉar mi certas, kiel estis menciita en prelego,
ni donas al vi onkloj ĉi datumtipo nomata ŝnuro.
>> Sed vere kordoj estas nur tabelo of-- kiel char *.
Ĝi estas puntero al faskon de karakteroj kiuj estas apudaj en memoro.
Tiel ĉi nur diferencigas ĝin egala al ajna ĉeno estas
identigitaj de kie lia unua karaktero estas.
Do tio estas ĵus subiris iu punkto egala al la komenco de la kordo.
CXiu bona tie?
Malvarmeta.
>> Do tio estas dereferencing nia montrilo.
Do ĝi estas vere tuj doni ni iu valoro en ĉi tie,
en nia ĉeno kiu ni parolas.
Kaj ni diris kiel longe kiel ĝi estas ne nula Terminator.
Observu do irante ĝis vi ricevas al la fino de la kordo.
Ĝisdatigi vian montrilon per unu.
Do r, ĝi fakte ĝisdatigi per unu ĉiu tempo ĉar tiu estas char,
La char *.
>> Do tuj trairos.
Ĝi tuj ĝisdatigi.
Do la unua fojo ĉi tiu kuras, ĝi tuj estos tie je h.
Ĝi tuj ĝisdatigi.
>> Ĝi devos esti al.
Estos p, y, kaj tiel plu kaj tiel plu.
Ni ĝisdatigos vendotablo.
Kiam ĝi atingas la finon, tio nur presas, kiel malproksime ĝi estas alveninta.
Jes.
>> Publiko: Do ​​Rakontas la spaco kiel unu, ĉu ne?
OK.
>> SPEAKER 1: Pensu tiel.
Ĉu tio estas question--
>> Publiko: [inaudible].
>> SPEAKER 1: Neniu maltrankviliĝas.
Mi faras tion.
Bone, do unu aferon mi kompreni estas kiu kun tabelo,
vi ankaŭ povas trakti ĝin kiel puntero ĉar arrays estas nur
kontinua makuloj de memoro.
>> Do vi povas trakti ĝin sammaniere.
Vi povas manipuli ilin kun punteros, tro.
Do anstataŭ fari, en tio kazo, la analoga afero
estus tabelo 0 egalas 1.
>> Sed en la sama maniero kiu ŝnureto estas determinita
per la komenco de kie lia unua karaktero estas,
tabelo estas difinita per kie ĝia unua elemento estas.
Ĉar ni scias, ni estas garantiita, ke tiuj
tuj estos kontinua blokoj de memoro.
Tio estas kion nin permesas fari tion.
Ni scias ke ili estas kontinua blokoj de memoro.
>> Do en tiu kazo, por dereferencing nur tabelo, kiu rakontas al ni,
OK, iru al la komenco de via tabelo, kiu estas tie.
Do vi povas agordi ŝin egala al unu.
Kaj en ĉi tiu kazo, kion ajn via tabelo tipo estas, kiam vi ĝisdatigi ĝin per unu,
tio estas nur kiel ĝisdatigi ĝin al la proksima indico.
Vi povas fari tion, ĉar vi scias kio estas en via tabelo.
Do sciu kiom ĝisdatigi vian montrilon per,
kio adreso por ĝisdatigi ĝin por tiel ke vi estas je la flanko fendo.
>> Do tio estas nur malsama vojo skribi tabelo 0 egalas 1,
tabelo 1 egalas 2, tabelo krampo 2 egalas 3.
Estas nur alia vojo por pensi pri ĝi.
Ĉar ili estas kontinua blokoj en la memoro,
vi povas referi al ili ĉu de la tabelo notation--
kiun mi persone trovi easier-- sed eble
vi bezonas manipuli ĝin strikte por memoro adresoj.
Kaj tiu estas la vojo vi farus tion.
Speco de pli de kiel malvarmeta afero vi povas fari
kontre eble ne estas io vi estas fakte tuj apliki.
>> Mi uzos ĝin en 61.
Vi uloj verŝajne ne bezonas maltrankviligi tro multe.
Sed se vi estas interesita, preni 61 venontjare.
Ni estas en la hejmo tiras infanoj.
Mi scias, estas longa.
Dinamika Memoro Allocation-- tial ni scias ke oni
de aĵoj kiam ni interparolis dum nian unuan sekcion kune,
ni rigardis swap funkcio kie estis
ekster la atingo de nia ĉefa funkcio.
Kaj ni pasis en tiuj valoroj kiuj efike kopioj.
>> Kaj fojo swap finita ekzekutinte, ĝi simple lasis pilo.
Memoru, ni havas stako por interŝanĝo.
Ĝi forlasas tiujn valoroj forlasi ĝin.
Kaj ili iris.
Ni ne povis fari ion kun ili kaj ni estis malĝoja
ĉar ni ne povas interŝanĝi niajn valorojn.
>> Sed kun C, kiel mi menciis, vi havas multe da potenco super memoro.
Do, kion vi povas fari, estas vi povas atribui aĵojn sur la havaĵon tie
ke restos tie ĝis vi diros al ili se ne.
>> Ili estas kiel bonaj infanoj.
Ili restu tie.
Ili ne foriros.
Ili restos tie ĝis vi kiel, nu bone, vi povas foriri.
>> Dum aferoj sur la stako, who-- ili estas kiel malbonkondutaj infanoj.
Ili devos simple forkuri kiam vi volas esti tie kaj tiam ili estos for.
Vi ne povas akiri ilin.
>> Do la havaĵon is-- ni tuj paroli pri malloc kaj libera, kio
Mi certas ke vi uloj auxdinte pri en prelego.
Kaj tio estas esence formo havi tre persista datumoj.
Do vi povas gardi la datumojn ĉirkaŭ tiom longe kiom vi volas.
Mhm.
>> Publiko: Ĉu vi povas difini ruino kaj pilo?
Ĉu ili ŝatas lokojn meti tion?
>> SPEAKER 1: Do ili estas esence just-- ili estas
la vojo nin raportas ĝuste al memoro.
Do havaĵo estas nur lokoj kie memoro asignitaj dinamike,
dum stako aludas pli pilo kadroj
kiuj estas pli centra al la funkcioj kiuj reale kuri.
Vi ne vere havas kontrolon.
>> La granda diferenco, vi havas kontrolon trans la monteto, se vi volas.
Vi havas malpli kontrolon super la stako.
La stako dependas la funkcioj kiuj kuras,
kaj la ordo en kiu ili estas kuri, kaj kiom ajn estas redonita.
Dum kiu kun la amaso, kiel ni vidos, vi povas diri:
OK, mi volas ke tiu valoro estos ĉirkaŭe ĝis mi diros alimaniere.
Vi ne rajtas forigi ĝin.
Vi ne rajtas nuligi ĝin.
Vi tuj konservi ĝin ĉirkaŭ tiel longe kiel mi diras.
Povas esti la estro en la muro, dum la stack-- eble se vi
kiel finagle vian vojon Vi povas esti la estro.
Sed ne tute.
Kaj estas vere nur memoro.
Estas nur malsamaj manieroj de referenco al memoro.
>> Malvarmeta.
Do kun tio, kiel kontroli vian memoron.
Estas kun malloc, kiu vi tuj akiri uzi.
Do estas nur mallonga por memoro atribuo.
Jen ĉio estas.
Ekzistas aro da aliaj malvarmeta funkcioj, kiuj havas alloc fine,
kaj ili reprezentas malsamajn aferojn.
>> Do kiam vi bezonos stokado kiu bezonas al outlast via nuna funkcio tiel
Se viaj nunaj funkcio kuras for,
Vi ankoraŭ havas la informon, kiun vi prenata, vi volas uzi malloc.
Tio estos pravalorizi ĝin sur la monteto.
Kaj kiel mi diris kaj teni dirante, ke vi tenu ĝin tie
ĝis vi sciigus tion alimaniere, kiu estas la grava afero ĉi tie.
>> Do unu afero rimarki, kaj tio estas tipe vere grava,
estas ke ĉi sizeof Estas súper utila por uzi
ĉar dependanta sur la tipo de maŝino, ke vi uzas,
ĝi povas havi diversajn kvantojn de memoro kiu portas.
Do vi ĉiam volas uzi grandeco de tiel ke vi ne estas maŝino dependa,
por ke via kodo kuri sur iu maŝino.
>> Kaj tio estas nur parto verki bonan kodon.
Se ĝi funkcias sur unu maŝino, sed ne ĉiu el la aliaj,
kiom utila estis via programo?
Do vi ĉiam volas certiĝu kaj uzi sizeof.
>> Publiko: Tiel estas kiu same kiel la grandeco de 10 coloj [inaudible]?
>> SPEAKER 1: Tio estas la grandeco de 10 ints.
yeah.
Do grandeco de ints revenos Kiom oni int preni.
Aŭ grandecon de char, kiel multe faras unu char iom.
Kaj tiam kiom blokoj el kiuj vi volas?
>> Do en ĉi tiu kazo, ni volas ion ke ni povas stoki 10 ints al.
Kaj laboros sendistinge de maŝino, kiu estas malvarmeta.
Do kiom da bajtoj volo ke efektive donu al vi?
Rapida math.
>> Publiko: 40.
SPEAKER 1: 40.
Ĝuste.
Do alia granda afero.
Pointer aŭ malloc povas reveni nula.
>> Do denove, ĉiam kontroli por rigardu, cxu gxi revenis nula
antaŭ provi kaj fari ion ajn kun ĝi.
Se vi provas kaj dereference ĉi puntero nun,
Estas nur tuj segfault ĉar vi iris kaj provis
tuŝi nula kiam vi ne devus havi.
Do ĉiam kontroli nula.
Denove, ĉiuj vi povas fari.
>> Povus reveni nula.
Ĝi revenos nula se vi ĉu el spaco, aŭ ial ajn
ĝi koliziis iu memoro cimon.
Ĝi foje nur revenas nula.
Do vi nur devas kontroli ĝin.
Tio estas ĉio ĉi slide diras.
Kaj tiam kion ni havas tie estas alvoko liberigi.
Tiel same, ke se vi malfermi dosieron vi devas fermi dosieron:
se vi malloc memoro, vi vi devas liberigi tiu memoro.
Kaj vi uloj ricevos fari vere malvarmeta aĵoj.
>> Kaj tie estas programo povas kuri al rigardu, cxu vi iam likanta memoro.
Sed vi ne deziras filtri memoro.
Ĝi estas vere malbona.
Nur salaton aĵojn.
>> Estas malbona fari ĝuste kiel programado saĝa por dezajno eficiencia.
Sed estas ankaŭ ĝuste speco de malbona por via komputilo.
Do ĝuste libera aferoj kiam vi malloc ilin.
>> Vi ĉiuj vidas la simetrioj tie.
Super simpla.
Nur libera kaj tiam ajn via montrilo,
ajn la nomo de via puntero estas, kaj tio
prizorgos liberigante ĝin por vi.
Malvarmeta.
>> Tiam ni havis ĉi.
Do ni nur tuj marŝi tra tiu programo.
Kaj tiam vi uloj estas farita.
>> Do [inaudible] simple ĉefa.
Do ni havas kelkajn int * puntero.
Do ni havas montrilon ke tuj tenos ints.
Kaj kiom ints estas ĝi tuj teni?
Nur unu.
Grandeco de int.
>> Ni kontrolu por vidi se puntero estas nulaj ĉar
estas, ni volas diri nenion faru.
Ĝi estas malbona.
Do ni presi iun eraron el memoro, plej ofte revenas 1
kiel vi infanoj uzas por.
>> Kaj tiam ni havas ĉi tie, ni dereference nia montrilo.
Do tio signifas ke ni tuj stoki ion ĉe la situo donas al ni.
Int * puntero, aŭ malloc, revenas la adreso de kie flankenmetis ĉi
memoro por vi.
Do ĝi estas esence donante vin like-- se vi
pensi faskon da domoj en kvartalo
ke vi volas meti viajn meblojn en, malloc
Estas kiel OK, vi ricevos iri por gastigi tri.
Kaj ĝi donas al vi la adreso de domo tri.
>> Do ĉi tiu momento, ĉi montrilo tendencas adreson,
stokas la adreson de via domo.
* PTR rimedoj, OK, mi estas en mia domo.
Malvarmeta.
Mi bezonos akiri iu entjero.
>> Do vi petante iun doni vin mebloj nun.
Do vi ricevas iujn int.
Kaj tio metas ĝin en vian montrilon kie ĝi estas indikante.
>> Kaj tiam simple prints ekstere, vi eniris kien.
Kaj denove, la referenco.
Do ĉi tio estas kiel vi venis al tiu ĉi alparoli kaj vi vidis, kio estis tie.
Cool?
>> Kaj do kompreneble ni liberigi nian montrilo.
Ne forgesu liberigi vian montrilo.
Ne forgesu kontroli nula.
Ne forgesu liberigi vian montrilo.
Vi havas du aferojn vi memoras el ĉi, aŭ ke vi devus memori.
Jes.
Publiko: [inaudible] stuff tiel, la char * s.
Kial ni neniam liberigi tiujn?
>> SPEAKER 1: Hm?
>> Publiko: Ĉu tiuj kiel kordojn?
Vi diris kordoj estas ĝuste kiel char * s, dekstra?
Do kial ni ne liberigi kordojn?
>> SPEAKER 1: Vi nur al libera se vi mallocing.
Publiko: Ho, se vi mallocing.
SPEAKER 1: Do malloc kaj libera estas du aĵoj
ke vi devus ĉiam havas kune.
f malfermita, f apude, du aferoj Vi devus havi kune.
En ambaŭ tiuj kazoj, kontroli nula.
Jes.
>> Publiko: Do ​​libera estas nur permesante io
esti stokita tie post tiu programo uzas ĝin?
>> SPEAKER 1: Ĝi simple dirante, OK, mi agis kun cxi tiu.
Vi ne bezonas konservi ĝin ĉirkaŭe.
Alie via komputilo nur ŝatas provi kaj konservi ĝin tie.
Kaj tiam vi can't-- kuras en memoro temoj poste.
Vi ĉiam volas liberigi lin pro ĝi diras via komputilo, OK, mi estas
farita kun ĉi loko de memoro.
Vi povas havi ŝin reen por mi uzi poste.
Cool?
Jes.
>> Publiko: Do ​​ni uzas la% d simple ĉar duobla kiu venas reen,
aŭ kial is-- [inaudible].
>> Publiko: Cxu vi uzas% i?
>> SPEAKER 1: Vi povas uzi% i.
Ajna lasta minuto demandoj?
Iri antaŭen.
Publiko: Mi nur havas rapidan demandon.
Do la PTR variablo that's-- kiel, kun la int * PTR = malloc,
Tio estas nur por diri ke estas indikante lokon en memory--
SPEAKER 1: Ĉu vi volas [inaudible]?
Publiko: --kiu estas la grandeco of-- ne, ĝi estas en ordo.
Sed ĝi simple indikante lokon en memoro tio estas nur kiel kvar bajtoj.
SPEAKER 1: Ĝuste.
Do malloc la grandeco de int diras, OK, mi tuj iros kuri for,
trovi kvar bajtoj de memoro por vi.
Kiam li trovas ke kvar bajtoj de memoro, ĝi
donas vin apogi la adreso de kie startas,
kaj tio stokita en puntero, aŭ PTR.
Bonan.
Vi ĉiuj aspektas malpli konfuza ol la plimulto homoj, kiam mi parolas pri pointer,
do mi sentas min sufiĉe bona nun.
>> Bone.
Kiel ĉiam, vi uloj devus havi ĉiuj alveninta vian pset2 gradoj nun.
Mi scias ke estis iuj wonky aferoj kie diras, formulo ne validas
aŭ ion.
Se vi fariĝas tio, ĉiuj Via gradoj estas validaj sur mia flanko.
Do mi povas sendi al vi ekrankopioj de viaj kvalifikoj.
Nur lasu min scii bone se vi estas mankas ajna gradoj aŭ iu
Ne ŝajnas sencon.
Venu al mi.
>> Mi estis super fiera pri vi infanoj jam, tiel konservi ĝin.
Kaj havas bonan ripozon de viaj semajnon.
Mi certe vidos iun de vi ĉe oficejo horoj.