>> DAVID Malan: Saluton, kaj bonvenigas reen al CS50.
Do tio estas la fino de semajno kvar.
Nur unu anonco unua.
Do la tn kvina lundo estas veni tien venas lundon.
Ĉi tiu estas la ŝanco por ŝanĝi de SAT / UNSAT al letero grado, aŭ de
letero lernojaro SAT / UNSAT.
Annoyingly, tiu procezo faras postulas subskribo, ĉar vi devas plenigi
unu el tiuj rozoj add / guto formoj.
>> Ĉar teknike, la SAT / UNSAT versio kaj la letero lernojaro versio
havas malsamajn katalogo nombroj.
Sed ne estas granda interkonsento.
Nur venis al mi aŭ al prirabu aŭ al Lauren en ajna punkto.
Aŭ retpoŝtu al ni se vi ne havas la speco de paperoj vi bezonas hodiaŭ, kaj ni
Estos certe helpos vin preni prizorgis ke antaŭ lundo.
>> Bone, do hodiaŭ -
fakte, ekzistas iom de eĥo.
Ĉu ni tono min iomete?
Akcepti.
Do hodiaŭ, ni enkondukas temon konata kiel montriloj.
Kaj mi agnoskas ke tio estas unu el la pli kompleksaj temoj kiuj ni emas
kovri en ĉi tiu klaso, aŭ vere neniu enkonduka kurso, kiu uzas C.
>> Sed gardu mian vorton por ĝi, aparte se via menso sentas iom pli fleksita
hodiaŭ kaj en la semajnoj venonta.
Ĝi ne estas reprezentanto de vi ricevas iu malbona en ĉi tio nur signifas ke
ĝi estas aparte kompleksa temo ke mi promesas, kelkajn semajnojn
sekve, similos tro okulfrape simpla en retrospekta.
>> Mi ankoraŭ memoras ĝis la nuna tago.
Mi sidis en Elliott Dining Hall, sidis apud mia TF Nishat Mehta,
kiu estis loĝanto de Elliott domo.
Kaj por iu kialo, tiu temon nur klakoj.
Kiu estas diri, ke mi tro baraktis kun ĝi por iu kvanto de tempo, sed mi
faros mian plejeblon por helpi eviti tiajn lukto kun temo kiu finfine
estas sufiĉe potenca.
>> Fakte, unu el la temoj ni diskutos en la semajnoj veni estas ke
de sekureco, kaj kiel vi povas reale eksplodi maŝinoj en manieroj
kiu ne estis intencita.
Kaj tiuj ekspluatadoj estas tipe la rezulto de cimoj, erarojn, ke ni
homoj faras por ne kompreni iujn de la subkuŝanta realigo
detaloj vojo kiu programoj estas realigitaj.
>> Nun fari ĉi ŝajnas des pli uzanto amika, mi pensis ke mi volonte ludos 10
dua antaŭvido de iom Claymation figuro nomita Binky kiu estis alportita al
vivo de nia amiko en Stanford, profesoro Nick Parlante.
Do permesu al mi doni al vi tiun teaser de Binky tie.
>> [VIDEO reprodukto]
>> -He, Binky.
Veki.
Estas tempo por puntero amuzo.
>> -Kio estas tio?
Lernu pri indikoj?
Ho, goodie.
>> [FINO reprodukto de vídeo]
>> DAVID Malan: Tio estas Stanford komputiko.
Do pli en la venonta.
>> [Aplaŭdo]
>> DAVID Malan: Pardonu, Nick.
>> Do memoru ke lasta tempo ni finis la ĉi tio vere ekscita cliffhanger
per kio tiu funkcio simple ne funkcias.
Almenaŭ intuicie, li sentis kiel ĝi devus funkcii.
Simple interŝanĝi la valorojn de du entjeroj.
Sed memoru, ke kiam ni presas el la originalaj valoroj en ĉefa, kaj
du, ili ankoraŭ unu kaj du kaj ne du kaj unu.
>> Do mi vere ŝanĝi super la aparato.
Kaj mi redaktis iom de skeletaj kodo antaŭi tie, kie mi asertas ke x
estos 1, y estos 2.
Mi tiam presi ambaŭ de liaj valorojn kun presitaj f.
>> Mi do asertas cxi tie, ke Ni tuj interŝanĝi ilin.
Mi lasis malplenan lokon tie por ni plenigi hodiaŭ en nur momento.
Tiam, mi iros al postuli, ke la du variabloj estas interŝanĝitaj.
Tiam mi tuj presi ilin denove.
Kaj tial mi esperas, mi devus vidi 1, 2.
2, 1.
Tio estas la super simpla celon nun.
>> Nu do kiel ni irad swapping du variabloj?
Nu, se mi proponas tie ĉi, ke tiuj tasoj povus reprezenti memoro en komputilo.
Jen kelkaj pikoj, ĉi Estas alia malmultaj mordas.
Ĉu ni volontulo veni tien kaj miksi nin iuj trinkaĵoj, se familiara?
Venu supren.
Kio estas via nomo?
>> Jess: Jess.
>> DAVID Malan: Jess?
Venu supren, Jess.
Se vi ne gravas, ni devas meti la Google Vitra sur vi tiel ni povas
senmortigi ĉi.
OK, vitro.
Gravuri video.
Kaj Bone, ni estas bonaj por iri kun Jess tie.
Ĉio bone.
Nice to meet you.
>> Do kion mi ŝatus vi faras ĉi tie - se vi povus, sufiĉe rapide -
nur verŝas ni duono glason da oranĝa suko kaj duono glason de lakto,
reprezenti efike la nombroj 1 en unu taso kaj 2 en la aliaj taso.
>> Ĉi tuj estos bona materialo.
>> Jess: Pardonu.
>> DAVID Malan: Ne, ne.
Ĝi estas okej.
Nice.
Bone, do ni havas kvar bitokoj valoro de oranĝa suko.
Ni nomis ĝin la valoro 1.
Nun alia kvar bajtojn valoro de lakto.
Nomos gxin taksos 2.
Do x kaj y, respektive.
>> Bone, do nun se la tasko ĉe manon - por vi, Jess, antaŭ ĉiuj
de via samklasanoj -
Estas por interŝanĝi la valorojn de x kaj y tiaj ke ni deziras ke la suko de oranĝo en la
aliaj kaliko kaj de la lakto en ĉi tiu kaliko, kiel povus vin - antaŭ vi reale fari
it - irad faras tion?
>> OK, saĝaj decido.
Do vi bezonas iom pli da memoro.
Do ni rezervu temporal taso, se vi volas.
Kaj nun procedi por interŝanĝi x kaj y.
>> Bonega.
Do tre bone farita.
Thank you so much, Jess.
Jen vi estas.
Iom memoraĵo.
>> Bone, do evidente, super simplan ideon.
Tute intuicia ke ni bezonas iom pli stokado spaco - en ĉi tiu formo,
taso - se ni vere volas interŝanĝi tiujn du variabloj.
Do ni faru precize tion.
Ĝis ĉi tie en inter kie mi asertas mi tuj estos faranta iu swapping, mi instruos vin
antaŭeniri kaj deklari temp.
Kaj Mi starigis gxin egala al, ni diru, x.
>> Tiam mi tuj ŝanĝos la valoro de x nur kiel Jess faris tie kun la
lakto kaj oranĝa suko esti egala al y.
Kaj mi tuj ŝanĝos y al esti egala por ne x, ĉar nun ni estus
metitaj en rondo, sed prefere temp.
Kie mi provizore - aŭ kie Jess provizore metis la oranĝa suko
antaŭ clobbering ke kaliko kun la lakto.
>> Do lasu min iri antaŭen nun kaj faros tion.
Ĝi nomiĝas noswap.c.
Kaj nun mi kuros sen interŝanĝa.
Kaj efektive mi vidas, se mi pligrandigi la fenestro iomete, por ke
x estas 1, y estas 2.
Kaj tiam x estas 2, y estas 1.
>> Sed memoru ke lunde ni faris tion, iom malsame per kiu mi
anstataŭ implementado helpanto funkcio, se vi volas, ke estis fakte nula.
Mi vokis ĝin interŝanĝi.
Mi donis ĝin du parametrojn, kaj mi nomis ili kaj mi nomis ilin b.
>> Sincere, mi povus nomi ilin x kaj y.
Estas nenio haltante min, por fari tion.
Sed mi volas argumenti estas tiam iom ambigua.
Pro memoro por lundo, ke ni asertis ke tiuj parametroj estis
kopioj de la valoroj pasis in
Do ĝuste salatoj kun via menso, mi pensas, se vi uzas
ĝuste la sama variabloj.
>> Do mi devos anstataŭ nomi ilin kaj b, nur por klareco.
Sed ni povus nomi ilin plej ion ni volas.
Kaj mi tuj kopii kaj almeti efektive tiu kodo de tie supre
malsupren en ĉi tie.
Ĉar mi ĵus vidis, ke ĝi funkcias.
Do jen en sufiĉe bona formo.
Kaj mi ŝanĝos mian x al mia x al mia y al b kaj mia y al b.
>> Do alivorte, ĝusta sama logiko.
La ĝusta sama afero ke Jess faris.
Kaj tiam la afero mi devos fari supren ĉi tie, kompreneble, estas nun alpreĝi ĉi
funkcio, aŭ nomas tiun funkcion.
Do mi nomos tiun funkcion kun du enigoj, x kaj y, kaj sukceson Save.
>> Bone, do funde la sama aĵo.
Fakte, mi verŝajne faris la programon nenecese kompleksa por
skribi funkcio kiu estas simple preni iuj ses linioj de kodo dum mi
antaŭe estis implementado ĉi tio en nur tri.
>> Do lasu min iri antaŭen nun kaj refari tiu, ne interŝanĝa.
Bone, mi ŝraŭbita ĉi tien.
Tio devus esti eraro, ke vi povus vidi pli komune kiel via
programoj akiri pli kompleksa.
Sed estas facila embaraso.
Lasu min rulumi reen ĝis ĉi tie.
>> Kaj kio estas la unua eraro mi vidas?
Implicitan deklaron.
Kion tio tipe indikas?
Ho, mi forgesis la prototipo.
Mi forgesis instrui la tradukilon, ke interŝanĝo tuj ekzistas kvankam li
Ne ekzistas en la komenco de la programo.
Do mi simple volis diri malplena, interŝanĝa, int, de int b, punktokomo.
>> Do mi ne tuj reimplement ĝin.
Sed nun egalas kio estas cxi tie.
Kaj avizo, la foresto de punktokomo ĉi tie, kiu ne estas necesaj kiam
apliki.
>> Do lasu min refari tion, faru interŝanĝa.
Multe pli bona formo.
Kuru neniu interŝanĝa.
Kaj damn it.
Nun ni estas dorso kie ni estis en lundo, kie la afero ne interŝanĝi.
>> Kaj kio estas la intuicia ekspliko cxar kial ĉi tiu estas la kazo?
Jes?
>> Lernanto: [inaudibles].
>> DAVID Malan: Ĝuste.
Do a kaj b estas kopioj de x kaj y.
Kaj fakte, iam vi estis nomante funkcio tiel malproksime, ke
pasas variabloj kiel ints -
same kiel interŝanĝa atendas tie -
you guys estis pasanta en kopioj.
>> Nun tio signifas ke ghi prenas iom de tempo, la dua partio, por la
komputilo kopii la bitoj de unu variablo en la bitojn de la alia.
Sed tio ne estas tiom granda interkonsento.
Sed ili estas tamen kopion.
>> Kaj tial nun, en la kunteksto de interŝanĝa, Mi fakte sukcese
ŝanĝanta a kaj b.
Fakte, ni faros rapidan prudento kontroli.
Presi f a estas% i, novan linion.
Kaj ni konekti al.
Nun ni faru la samon kun b.
Kaj ni faru la samon ĉi tie.
>> Kaj nun, lasu min kopii tiujn samajn liniojn denove ĉe la malsupro de la funkcio
post miaj tri linioj de interesaj povus esti ekzekutitaj, kaj
presi kaj b plue.
Do nun ni faru tion, faru interŝanĝa.
Lasu min fari la fina fenestro iom pli alta, tiel ke ni povu vidi
pli pri tio samtempe.
>> Kaj kuri sen interŝanĝa.
x estas 1, y estas 2. a estas 1, b estas 2.
Kaj tiam, estas 2, b estas 1.
Do ĝi funkcias, kiel Jess faris ĉi tie ene de interŝanĝa.
Sed kompreneble, ĝi estas havi nenian efikon sur la variabloj en ĉefa.
>> Do ni vidis lertaĵo per kiu ni povus ripari tion, ĉu ne?
Kiam vi alfrontas ĉi scoping afero, vi povus simple liberigas kaj fari x
kaj y kia variabloj anstataŭ?
>> Vi povus fari ilin tutmonda.
Metu ilin en la plejsupro de la dosiero kiel ni faris, eĉ en la ludo de 15.
Ni uzas malloka variablo.
Sed en la kunteksto de la ludo 15, ĝi estas racia havi tutmondan
variablo kiu reprezentas la tabulo, ĉar la tuteco de 15.c estas ĉio
pri apliko de tiu ludo.
Tion la dosiero ekzistas por fari.
>> Sed en tiu kazo ĉi tie, mi estas nomante funkcio interŝanĝa.
Mi volas interŝanĝi du variabloj.
Kaj ĝi devas komenci senti nur fuŝa se la solvon por ĉiuj niaj
problemoj kiam ni kolizios atingo demandoj estas fari ĝin tutmonda.
Ĉar tre rapide nia programo estas tuj fariĝis sufiĉe salaton.
Kaj ni faris tion tre ŝpareme kiel rezulto en 15.c.
>> Sed rezultu ke estas bona maniero entute.
Lasu min reale reiri kaj forigi la presi f estas, nur por faciligi tiun kodon.
Kaj lasu min proponas ke tiu ja estas malbona.
Sed se mi anstataŭ aldoni en iu asteriskoj kaj la steloj, Mi povas anstataŭ turni ĉi
funkcio en kiu estas fakte operacio.
>> Do lasu min reiri tien kaj akcepti dirante asteriskoj estas ĉiam malfacila,
do mi dirus steloj.
Mi nur Fess ĝis tiu.
Ĉio bone.
Kaj nun, kion mi povos fari anstataŭ?
>> Do unue: mi iros al precizigi ke anstataŭ pasante int en
la interŝanĝa funkcio, mi estas anstataŭ de dironta int stelo.
Nun, kion signifas la stelo indiki?
Tiu estas, ke nocio de puntero ke Binky, la Claymation karaktero, estis
raportante al antaŭ momento.
>> Do, se ni diras int stelo, la signifo de ĉi nun, ke ne tuj estos
pasis tra lia valoro.
Tio ne tuj estos kopiitaj in
Pli ĝuste, la adreso de a estas tuj estos pasis in
>> Do memoru, ke ene de via komputilo Estas tuta amaso de memoro, alie
konata kiel RAM.
Kaj tio RAM estas nur tutan faskon da bajtoj.
Do, se via Mac aŭ via PC havas du gigabajtoj, vi havas 2
miliardoj bajtoj da memoro.
>> Nun ni simple supozu, ke nur por subteni la aĵojn bela kaj bonorda, ni
atribui adreson -
nombro -
al ĉiu bajto de RAM en via komputilo.
La unua bitoko de tiuj 2 biliono estas por numero nulo.
La sekva estas bajto numero unu, numero du, la tuta vojo supren, dot dot
punkto, al proksimume 2 milionoj.
>> Do vi povos kalkuli la bajtoj de memoro en via komputilo.
Do ni supozu, ke tio estas kion ni signifi per adreso.
Do kiam mi vidas int stelo a, kio okazas esti aprobitaj en interŝanĝa nun estas la
adreso de al.
Ne lia valoro, sed estu lia bildkarto adreso estas, por tiel diri -
lia situo en RAM.
>> Kaj simile por b, mi tuj diri la samon.
Mez, stelo, b.
Kiel flanken, teknike la stelo povis iri en aliaj lokoj.
Sed ni normigi sur la stelo estas dekstra flanko de la datumtipo.
>> Do interŝanĝi subskribo nun signifas, donu al mi la adreso de int, kaj alvoko
ke adreson al.
Kaj donu al mi alian adreson de int kaj invitas ke adreso b.
>> Sed nun mia kodo tie devas ŝanĝi.
Ĉar se mi deklaras int temp -
kiu estas ankoraŭ de tipo int -
sed mi stoki en ĝi, kian valoron?
Por esti klaraj, mi metante al kun la kodo kiel skribita ĝuste nun?
>> Mi metas la situo en al.
Sed mi ne zorgas pri la situo nun, ĉu ne?
Temp ekzistas nur Jess 'tria tason ekzistis, por kiu celo?
Stoki valoro.
Lakto aŭ oranĝa suko.
Ne vere stoki la adreso de ĉu de tiuj aferoj, kiuj sentas
iom sensenca en ĉi tiu reala mondo kuntekston ĉiuokaze.
>> Do vere, kion mi volas meti en temp ne estas la adreso de a, sed la
enhavo de.
Do, se a estas numero kiel 123, tio estas la 123rd bajto de memoro, ke nur
hazarde estas okupanta, ke la valoro en hazarde estas okupanta.
>> Se mi volas iri al tiu adreso, Mi bezonas diri stelo al.
Simile, se mi ŝanĝus kio estas ĉe la adreso a, mi ŝanĝos
ĉi por komenci.
Se mi volas gardi en kio estas en la situo de kun kio estas en la loko
je b, stelo b stelo.
>> Do mallonge, eĉ se tiu ne estas sufiĉe enprofundigi en ankoraŭ - kaj mi ne volas atendi
kiu estus tiom rapide -
rimarki, ke ĉiuj mi faras estas prefixing tiujn stelojn al miaj variabloj,
proverbo ne kaptu la valoroj.
Ne ŝanĝu la valoroj.
Sed ĝuste, iru al tiuj adresoj kaj akiri la valoron.
Iru al tiu adreso kaj ŝanĝo la valoron tie.
>> Do nun lasu min rulumi reen ĝis la supro, nur por ripari ĉi tiu linio tie, al
ŝanĝi la prototipo por kongrui.
Sed mi nun bezonas fari unu alia afero.
Intuicie, se mi ŝanĝis la tipoj de argumentoj kion interŝanĝa atendas,
kion alian mi bezonas ŝanĝi en mia kodo?
>> Kiam mi vokas interŝanĝa.
Ĉar nun, kio estas Mi pasis por interŝanĝi ankoraŭ?
La valoro x kaj la valoro de y, aŭ la lakto kaj la oranĝa suko.
Sed mi ne volas fari tion.
Mi anstataŭ volas Iam en kio?
La situo de x kaj la situo de y.
Kio estas ilia poŝta adresoj, por tiel diri.
>> Do fari tion, estas kaj-simbolo.
Ampersand klaso de sonoj kiel adreso.
tial n, ampersand, la adreso de x, kaj la adreso de y.
Do ĝi estas intenca, ke ni uzas ampersands nominte la funkcio,
kaj la steloj al la deklari kaj kiam realiganta la funkcio.
>> Kaj ĝuste pensi signon kiel la adreso de operatoro, kaj stelo kiel la
iri tien operatoro -
aŭ, pli ĝuste, la dereference operatoro.
Do tio estas tuta loto de vortoj nur por diri, ke nun, mi esperas, interŝanĝa tuj
esti ĝusta.
>> Lasu min antaŭeniri kaj realigi -
ni fakte renomigi la dosieron, por ke tiu programo ankoraŭ nomi neniu interŝanĝa.
Mi asertas, ke ni nomas ĝin swap.c nun.
Do, interŝanĝi.
Dot, oblikvo, interŝanĝi.
>> Kaj nun ja, x estas 1, y estas 2.
Kaj tiam, x estas 2, y estas unu.
Nu vidu, se ni ne povas fari ĉi tion iom malsame kiel al kio
okazas ĉi tie.
Unue, lasu min zomi en nia desegnante ekrano tie.
Kaj lasu min proponi dum momento - kaj ĉiufoje kiam mi desegnas tie estos spegulita
tien nun - mi proponas ke jen tutan faskon da memoro, aŭ
RAM, interne de mia komputilo.
>> Kaj ĉi tio estos mordo numeron, diru, 1.
Ĉi tiu estos bitokoj numero 2.
Kaj Mi faros tutan faskon pli, kaj tiam faskon da dot dot dots al
indikas ke ekzistas 2 milionoj pri tiuj aferoj.
4, 5, kaj tiel plu.
>> Do estas la unuaj kvin bitokoj de mia komputilo memoro.
Ĉio bone?
Tre malmultaj el 2 miliardoj.
Sed nun mi tuj proponi la jena.
Mi tuj proponas ke x estas tuj stoki la numeron 1, kaj y tuj
stoki la numero 2.
Kaj lasu min iri antaŭen nun kaj reprezentas tiujn valorojn kiel sekvas.
>> Ni faras tion kiel sekvas.
Donu al mi nur unu sekundo.
Unu sekundo.
Akcepti.
Mi volas fari ĉi iom -
ni tion denove.
Alie Mi tuj kaj uzante la samaj nombroj, senintence,
plurfoje.
>> Do ĝuste tial ni havas malsamajn numerojn paroli, ni nomas tion bajto
numeron 123, 124, 125, 126, kaj dot dot dot.
Kaj lasu min asertas nun ke mi iros al meti la valoro 1 tie, kaj la valoro 2
ĉi tie, alie sciata kiel x kaj y.
Do ĝuste tial okazas, ke tiu estas x, ĉi tiu estas y.
>> Kaj ĝuste per iu hazarda hazardo, la komputilo, la mastruma sistemo,
okazis meti x je situo numeron 123.
Kaj y finis je situo 124 -
damn it.
Mi devus esti fiksita ĉi.
Ho viro, mi vere volas fari ĉi tion?
Jes, mi volas ripari tion kaj b pozitiva pri ĉi tiu hodiaŭ.
Pardonu, nova ĉe ĉi.
>> 127, 131, kaj mi ne volas esti ĉi kompleksa, sed kial mi ŝanĝi la
nombroj ekzistas?
Ĉar mi volis la ints al fakte kvar bajtoj.
Do ni estu super anal pri tio.
Por ke se 1 pasas al adresita 123, la 2 tuj estos ĉe adreso
127 ĉar ĝi estas nur 4 byes for.
Jen ĉio.
Kaj ni forgesos pri ĉiuj de la aliaj adresoj en la mondo.
>> Do x estas en loko 123, y estas en situo 127.
Kaj nun, kion fari mi efektive volas fari?
Kiam mi vokas interŝanĝa nun, kio estas efektive okazas?
Nu, kiam mi vokas swap, mi pasis en la adreso de x kaj la adreso de y.
Do ekzemple, se tiuj du pecoj de papero nun reprezentas la du
argumentoj a kaj b por interŝanĝi, kion mi tuj skribos sur la unua el tiuj,
kiun mi tuj vokos referi al kiel?
>> Precize, 123.
Do tio mi asertas estas.
Ĉi tiu estas la parametro a.
Mi metas la adreson de x en tie.
>> Kio estas tio?
>> Ne, ne.
Tio estas okej.
Ankoraŭ bone, ankoraŭ bona.
Do tiu estas.
Kaj nun la dua peco de papero, tiu tuj estos b, kaj kion mi
tuj estos skribi sur ĉi tiu peco de papero?
127.
>> Do la sola afero, kiu estas ŝanĝis ekde nia antaŭa rakonto de ĉi tiu historio estas,
anstataŭ laŭvorte 1 kaj 2, mi tuj pasos en 123 kaj 127.
Kaj mi nun tuj metos tiuj ene de ĉi tiu skatolo, en ordo?
Por ke nigra skatolo nun reprezentas la interŝanĝa funkcio.
>> Dume, ni nun havas iu apliki la interŝanĝa funkcio.
Ĉu iu ĉi tien kiel volontulon?
Venu supren.
Kio estas via nomo?
Charlie.
Bone, Charlie.
Venu supren.
>> Do Charlie tuj ludos la rolo de nia nigra skatolo.
Kaj Charlie, kion mi ŝatus ke vi faru nun estas apliki interŝanĝa en tia maniero
kiu, donita de tiuj du adresoj, vi fakte tuj
ŝanĝi la valorojn.
Kaj mi flustri en via orelo kiel ruli la televido tie.
>> Do iru antaŭen, kaj vi estas la nigra skatolo.
Atingi tien.
Kio valoroj vi vidas por, kaj kio valoroj vi vidas por b?
>> Charlie: a estas 123 kaj b estas 127.
>> DAVID Malan: OK, ĝuste.
Nun paŭzo ekzistas por nur momento.
La unua afero, kiun vi faros nun, laŭ la kodo - kiu
Mi nun tiri supren sur la ekrano -
tuj estos atribui iom iom da memoro nomata temp.
Do mi tuj iros antaŭen kaj doni al vi, ke memoro.
>> Do tiu tuj estos la tria variablo ke vi havas atingebla al
vi nomis temp.
Kaj kion vi intencas skribi en la temp peco de papero?
>> Charlie: Pointers, ĉu ne?
>> DAVID Malan: Bone, bone ne nepre montriloj.
Do la linio de kodo, ke mi havas reliefigis dekstre mana flanko,
ni komencu tie.
Ĝi diras stelo al.
Do nuntempe stokante la nombro 123.
Kaj ĝuste intuicie, kion faris stelon 123 signifi?
>> Sed konkrete, se a estas 123, stelo de signifas kion?
La valoro de a.
Aŭ pli hazarde, iru tien.
Do mi proponas ke, tenante la a en via mano, iru antaŭen kaj trakti ke
kvazaŭ ĝi estas mapo.
Kaj iros mem transiris al la komputilo memoro, kaj trovi nin kio estas
ĉe situo 123.
Ekzakte.
>> Do ni vidas en situo 123 Estas kio, evidente?
Bone, do kion valoro nun vi tuj metos en temp?
Ekzakte.
Do iru antaŭen kaj fari tion.
Kaj skribi la numero 1 en la peco de papero kiu estas aktuale titolita temp.
>> Kaj nun la sekva paŝo, ke vi tuj apliki
tuj estos kion.
Nu, sur la dekstra flanko de la sekvanta linio de kodo estas stelo b. b, de
Kompreneble, stokas adreson.
Tio adresoj 127.
Stelo b signifas kio, hazarde parolanta?
>> Iru al tiu loko.
Do iru antaŭen kaj trovi nin kio estas ĉe situo 127.
Akcepti.
Kompreneble, en loko 127, ankoraŭ estas la valoro 2.
Do kion vi iras nun tendencas al kion ajn estas ĉe la situo en?
Do stelo rimedon iri al la situon al.
Kio estas la situo de?
>> Ekzakte.
Do nun, se vi volas ŝanĝi kio estas en tiu loko -
Mi iros antaŭen kaj ruli la eraser estas ĉi tie.
Kaj nun remetis ĝin sur la peniko.
Kio nombro vi intencas skribi en tiu blanka skatolo nun?
>> Ekzakte.
Do ĉi tiu linio de kodo, por esti klara - lasu mi paŭzo kio Charlie faras kaj
atentigi tie, kion li ĵus farita estas skribi en tiun skatolon je situo 123
la valoro kiu estis antaŭe je b.
Kaj tial ni nun implementado ja tiu dua linio de kodo.
>> Nun bedaŭrinde, ekzistas ankoraŭ unu linio restanton.
Nun kio estas en temp, laŭvorte?
Estas evidente la numero unu.
Tio ne adreson.
Estas nur numeron, ia variablo de semajno unu.
>> Kaj nun, kiam vi diras stelo b, tio signifas iru al la adreso b, kiu estas de
Kompreneble ĉi tie.
Do iam vi ricevas tie -
Mi iros antaŭen kaj viŝi kio estas reale tie - kaj kion vi estas
tuj skribos nun situo 127?
>> Charlie: Temp, kiu estas unu.
>> DAVID Malan: Temp, kiu estas unu.
Kaj kio okazas al temp en la fino?
Nu, ni ne vere scias.
Ni ne vere gravas.
Ajna tempo ni implementado funkcio ĝis nun, neniu lokajn variablojn vi havas
estas efektive loka.
Kaj ili simple malaperos.
Ili rekuperita de la mastruma sistemo fine.
>> Do la fakto ke temp ankoraŭ havas la valoro 1 estas speco de funde
neinteresa al ni.
Bone, do ronda da aplaŭdoj se ni povis por Charlie.
Tre bone farita.
>> Bone, do kion faras pli tio signifas ke ni povas fari?
Do rezultas ke ni estis rakontante kelkajn blankajn mensogoj
por sufiĉe tempo.
Efektive, ĝi rezultas ke ĉeno, ĉio ĉi momento, ne estas vere
vico de signoj per si mem.
Ĉio estas ke intuicie.
>> Sed teknike parolante, kordo estas datumtipo, ke ni deklaris ene de
la CS50 biblioteko por simpligi la mondo por la unuaj semajnoj de klaso.
Kia string vere estas la adreso de gravulo ie en RAM.
Kordo estas vere nombro, kiel 123 aŭ 127, kiu okazas al demarcar
kie a string komencas en via komputilo memoro.
>> Sed ĝi ne reprezentas la kordo, per, mem.
Kaj ni povas vidi ĉi tion kiel sekvas.
Lasu min kaj malfermu iu kodo kiu estas inter
hodiaŭa fontkodon ekzemploj.
Kaj mi tuj iros antaŭen kaj malfermi ĝis, ni diru, komparu-0.c.
Tio ĉi estas kalesxon programo kiu tuj esti implementado kiel sekvas.
>> Unua.
Mi intencis diri ion.
Tiam mi tuj iros antaŭen kaj akiri kordo de la uzanto
en tiu sekva linio.
Tiam mi tuj diros ĝin denove.
Tiam mi iros por atingi alian kordoj de la uzanto.
>> Kaj avizo, mi montras unu el la kordoj en variablo nomita s, kaj
alia de tiuj kordoj en variablo nomas t.
Kaj nun mi iras al postuli, tre prudente, ke se s egalas egalas t,
la ŝnuroj estas la sama.
Vi tajpas la saman aferon.
Alie, la kordoj estas ne la sama aĵo.
>> Post ĉiu, se ni enigo du ints, du signoj, du flosoj, du duobloj, iu el
la datumtipoj ni parolis pri ĝis nun por kompari ilin -
Recall ni faris tre klara tempon ke vi ne fari tion, ĉar
sola egala signo estas kompreneble la atribuo operatoro.
Do kiu estus eraro.
>> Ni uzas la egalaj egala signo, kio efektive komparas
aĵoj por vera egaleco.
Sed mi asertas ĉi estas kalesxo.
Se mi iras antaŭen kaj fari kompari nulo, kaj do skalara oblikvo kompari nulo.
Kaj mi tajpas en, ni diru, saluton.
Kaj tiam diru saluton denove.
Laŭvorte la sama afero, la komputilo asertas mi tajpis malsamaj aĵoj.
>> Nun eble mi simple mistyped ion.
Mi tajpas mian nomon ĉi tiu tempo.
Mi volas diri, saluton.
Saluton.
Estas malsamaj ĉiun solan fojon.
>> Nu, kial estas tio?
Kio vere okazas sub la kapuĉo?
Nu, kio vere okazas sube la kapuĉo estas la kordo tiam
Mi tajpis en tiu unua momento ekzemple estas la vorto saluton, kompreneble.
Sed se ni reprezentas ĉi sube la kapuĉo, memoru, ke
cxeno estas en tabelo.
Kaj ni diris tiel en la estinteco.
>> Do se mi desegnas tiu tabelo kiel ĉi tio, mi iri por reprezenti iun sufiĉe
simila al kion ni faris antaŭ momento.
Kaj estas vere io speciala ĉi tie ankaŭ.
Kion ni determini estis ĉe la fino de ĉiu kordo?
Jes, tiu backslash nulo, kiu estas nur la maniero reprezenti,
laŭvorte, 00000000.
Ok 0 bitoj en unu vico.
>> Mi ne scias, sincere, kio estas post tio.
Tio estas nur plenmano pli RAM ene de mia komputilo.
Sed tio estas tabelo.
Ni parolis pri arrays antaŭe.
Kaj ni tipe paroli pri matricoj kiel situo nulo,
tiam unu, tiam du.
Sed tio estas nur por oportuneco.
Kaj tio estas tute relativaj.
>> Kiam vi efektive atingi memoron de la komputilo, estas kompreneble neniu
2 miliardoj iuj neparaj bajtoj, potenciale.
Do vere sub la kapuĉo, tiu tuta tempo, jes.
Tiu povus tre bone esti krampo nulo.
Sed se vi fosas eĉ pli profunda sube la kapuĉo, tio estas vere
trakti numeron 123.
Jen adreso 124.
Jen adreso 125.
>> Kaj mi ne firmigu ĝis tiu tempo.
Tiuj estas nun unu bitokoj aparte pro kio?
Kiom grandaj estas char?
A char estas nur unu bajto.
An int estas tipe kvar bajtoj.
Tial estas kial mi faris 123, 127, 131 kaj tiel plu.
Nun mi povas gardi la math simpla kaj nur faru plus 1.
Kaj jen estas nun kio vere tuj sur sub la kapuĉo.
>> Do kiam vi deklaras iun kiel ĉi tio, kordo s, ĉi tiu estas fakte -
rezultas -
char stelo.
Stelo, kompreneble, signifas adreso, aka puntero.
Do estas la adreso de io.
Kio estas la adreso de?
>> Nu -
Mi estas la sola kiu povas vidi la tre Grava punkto mi faras, aŭ pensi
Mi faras.
Do kordo -
la malĝoja afero estas Mi havas monitoron Dekstre, kie mi
povus esti vidinta tion.
>> Bone, do string s estas kion Mi deklaris antaŭe.
Sed rezultas, danke al iom magio en la CS50 biblioteko, ĉiuj ĉi
tempo ŝnuro havas laŭvorte estis char stelo.
La stelo denove signifas puntero aŭ adreson.
La fakto ke ĝi estas flanqueándola la vorto char signifas tio estas la
adreso de gravulo.
>> Do se akiri kordoj estas nomita, kaj mi tajpas en H-E-L-L-O, proponas nun kio akiri
kordo laŭvorte estis reveni ĉiuj ĉi tiu tempo, ecx kvankam ni prefere
trosimpligita la mondo?
Kion akiri string reale revenu kiel lia reveno valoro?
>> 123 en ĉi tiu kazo, ekzemple.
Ni antaŭe diris, ke atingi kordo simple resendas kordo, sekvenco de
gravuloj.
Sed tio iom de blanka mensogo.
La maniero akiri ŝnuro vere laboras sub la kapuĉo estas ricevas
kordoj de la uzanto.
Ĝi plops la karakteroj kiuj li aŭ ŝi tipoj en memoro.
Ĝi metas backslash nulo je la fino de tiuj vico de signoj.
>> Sed tiam kion signifas akiri kordo laŭvorte reveni?
Ĝi laŭvorte redonas la adreson de la tre unua bajtoj en la RAM ke
ĝi uzis por tiu forto.
Kaj ĝi rezultas ke nur reveninte sola adreso de la
unua gravulo en la ĉenon, tio estas sufiĉa por trovi la tuteco de
la kordo.
>> En aliaj vortoj, get kordo ne havas reveni 123 kaj 124 kaj 125.
Ĝi ne devas doni al mi longan Listo de ĉiuj bitokoj ke
miaj ŝnuroj estas uzanta.
Ĉar unu, ili ĉiuj estas malantaŭo al malantaŭo.
Kaj du, bazita sur la unua adreso, mi povas diveni kie la kordo finiĝas.
Kiel?
>> La speciala nula karaktero, la backslash nulo je la fino.
Do, en aliaj vortoj, se sekvinberoj ĉirkaŭ -
ene de variabloj -
la adreso de char, kaj vi supozos ke je la fino de ĉiu linio, ĉiu
vico de signoj kiel ni homoj pensi pri kordoj, se vi supozas ke
fine de tia ĉeno ekzistas a backslash nulo, vi estas ora.
Ĉar vi povas ĉiam trovi la finon de ŝnuro.
>> Nun kio vere tiam tuj en ĉi tiu programo?
Kial estas ĉi programo, kompari-0.c, kalesxo?
Kio estas fakte esti komparitaj?
Jes?
>> Lernanto: [inaudibles].
>> DAVID Malan: Ĝuste.
Oni komparas la lokoj de la kordoj.
Do, se la uzanto tajpas en saluton fojo, kiel mi agis, memoro povus fini
rigardante kiel ĉi tio.
Se la uzanto poste tipoj en saluton denove, sed nomante akiri kordo denove, c estas
ne estas aparte lerta se vi instruas ĝin esti ruza per skribanta kodo.
>> C -
kaj komputiloj pli ĝenerale -
se vi tajpas en la vorto saluton denove, vi scias kion vi ricevos.
Vi nur ricevos duan tabelo de memoro, ke, jes, okazas esti
stokante H-E-L-L-O kaj tiel plu.
>> Ĝi tuj serĉos la sama al ni homoj, sed tiu adreso
povus ne esti 123.
Eble ĝuste tiel okazi, ke la mastruma sistemo havas kelkajn havebla
spaco ekzemple en loko -
diru ion arbitraj, kiel tiu estas situo 200.
Kaj jen estas situo 201.
Kaj jen estas situo 202.
Ni ne havas ideon kie tio tuj estos en la memoro.
>> Sed kion tio signifas estas ke kio estas tuj estos stokitaj finfine en s?
La nombro 123.
Kio okazas al esti stokita en t, en ĉi arbitra ekzemplo?
La nombro 200.
Kaj cxiuj, kiuj signifas do estas evidente, 123 ne egalas 200.
Kaj tiel ĉi se kondiĉo neniam taksas al vera.
Ĉar get string uzas malsamajn pecoj de memoro ĉiufoje.
>> Nun ni povas vidi ĉi denove en alia ekzemplo.
Lasu min kaj malfermu kopio-0.c.
Mi asertas ke ĉi tiu ekzemplo tuj provu - sed malsukcesos - kopii du kordoj
kiel sekvas.
>> Mi intencis diri ion al la uzanto.
Mi tiam tuj akiri kordo kaj nomas ĝin s.
Kaj nun, mi faras ĉi ĉekon tie.
Ni menciis tiun momenton dorso.
Sed kiam oni eble string reveno nula, alia speciala karaktero, aŭ speciala
simbolo Diru.
Se ĝi estas el memoro.
>> Ekzemple, se la uzanto estas vere esti malfacila kaj tipoj atroz
nombro da signoj en la klavaro kaj sukcesojn Eniru.
Se tiu numero de karakteroj nur ne povas konformi RAM por ajn freneza
Tial, bone akiri kordoj povus tre bone reveni nula.
>> Aŭ se via programo mem faras multan de aliaj aĵoj kaj tie estas nur
Ne sufiĉas la memoro por get kordo sukcesos, ĝi povus fini
supren reveni nula.
Sed ni esti pli preciza pri kio tio estas.
Kio estas s la datumtipo vere?
Char stelo.
>> Do rezultas nun ni povas senŝeligi apogi la mantelo de nula.
Rezultas, nula estas - jes, evidente speciala simbolo.
Sed kio estas vero?
Vere, nula estas nur simbolo, ke ni homoj uzas por reprezenti nulo kiel bone.
>> Do la aŭtoroj de C, kaj komputiloj pli ĝenerale, decidis jarojn
ke, vi scias kion.
Kial ni ne garantias ke neniu uzanto datenoj estas eterne, eterne, iam
stokita ĉe bye nulo?
Fakte, eĉ en mia arbitra ekzemplo antaŭe, mi ne komencu kalkuli la
bajtoj je nulo.
Mi komencis je unu.
CXar Mi sciis, ke homoj en la mondo decidis rezervi la nula
bajto en ies memoro RAM kiel io speciala.
>> La kialo estas, iam ajn vi volas signalas ke iu iris malbone
rilate al adresoj, vi revenis nula - alie sciata kiel nulo -
kaj ĉar vi scias, ke tie estas neniu Legit datumojn al adreso nulo, klare
tio signifas eraron.
Kaj jen kial ni, per konvencio, kontrolu por nulaj kaj reveno ion
kiel en tiuj kazoj.
>> Do, se ni rulumu malsupren nun, ĉi tio estas nur tiam iu eraro kontrolanta, ĉiaokaze
io estis malbone kun [? garantiaĵo?]
entute kaj forlasis la programon per reveni frue.
Ĉi tiu linio nun povus esti reskribita kiel tiu, kiu signifas kion?
Maldekstre mana flanko, donu al mi alian puntero al gravulo, kaj nomas ĝin t.
Kion mi provizon ene de t, bazita sur ĉi tiu linio de kodo?
>> Mi stokante a loko.
Specife la situo kiu estis en s.
Do, se la uzanto tajpas en saluton, kaj tiu unua saluton okazas por fini
ĉi tie, tiam la nombro 123 estas tuj revenis el akiri
String kaj stoki -
kiel ni diris antaŭe -
en s.
>> Kiam mi nun rakontos alian sagon al oni char kaj nomas ĝin t, kion nombro estas
laŭvorte tuj finos en t laŭ la rakonto?
Do 123.
>> Do teknike nun ambaŭ s kaj t notas al la ĝusta
samajn pecojn de memoro.
Do rimarkas kion mi faros nun al pruvi ke ĉi tiu programo estas kalesxo.
>> Unue mi iros al postuli, kun impreso f, capitalizando
la kopio de la kordo.
Tiam Mi faros iom Eraro checking.
Mi iros por certiĝi.
Ni certigu ke la kordo t estas en Almenaŭ pli granda ol nulo en longeco
tial ekzistas iuj karaktero tie por fakte profiti.
>> Kaj tiam vi eble memoras tiun el antaŭaj ekzemploj.
2 supran - kiu estas en la ctype.h dosiero.
T krampo nulo donas al mi la nulo karaktero de la kordo t.
Kaj 2 supra de tiu sama valoro, de Kompreneble, konvertas ĝin al majuskle.
>> Do intuicie, ĉi emfazita linio de kodo estas capitalizando la unua
letero en t.
Sed gxi ne capitalizando, intuicie, la unua litero en s.
Sed se vi pensas antaŭe, kion mi por vidi kiam mi kuros ĉi programo
kaj presi ambaŭ la originalo, s, kaj la tiel nomataj kopio, t?
>> Ili estas vere tuj estos la sama.
Kaj kial ili tuj estos la sama?
Ili ambaŭ montras al precize la sama afero.
Do ni faru tion.
>> Faru kopion nulo.
Ĝi kompilas OK.
Permesu al mi kuri kopio nulo.
Lasu min tajpi iun kiel saluton en ĉiuj minuskla tiam batis Eniru.
Kaj asertas ke ambaŭ la originala s kaj la kopio estas ja identaj.
>> Do kio vere okazis tie?
Lasu min redesegni tiu bildo nur por rakonti la historion en
iomete malsama maniero.
Kio vere okazas sub la kapuĉo kiam mi deklaras ion kiel
char komenco s, aŭ kordo s, Mi prenanta puntero -
kio okazas al esti kvar bitokoj en la CS50 aparato
kaj en multaj komputiloj.
Kaj mi tuj nomas tiun ejon.
Kaj tion nuntempe havas iu nekonata valoro.
>> Kiam vi deklaras variablon, se vi vi mem metas valoron tie, kiu
scias, kio estas tie.
Ĝi povus esti iu hazarda vico de bitoj de la antaŭa ekzekuto.
Do, kiam mi, en mia linio de kodo fari akiri ŝnuro, kaj poste stokas la reveno
valoro en s akiri string iel -
kaj ni fine senŝeligas reen kiel akiri kordo verkoj, iel atribuas al
tabelo kiu probable aspektas iom kiel ĉi tio.
H-Kaj-L-L-O, backslash nulo.
>> Ni supozu, ke tio estas adreso 123 ĝuste unua konsekvenca.
Do nepre string revenas, en la emfazita linio tie, ĝi redonas la
numeron ni diris, 123.
Do kio vere iras ene de s here?
>> Nu, kio vere iras ene de s estas 123.
Sed sincere, mi ricevas iom konfuzita de ĉiuj el tiuj adresoj,
ĉiuj el tiuj arbitraj nombroj.
123, 124, 127.
Do ni vere simpligi la mondo iom.
>> Kiam ni parolas pri indikoj, sincere, al ni homoj, kiu la heck zorgas kie
aĵoj estas en memoro?
Tio estas tute arbitra.
Ĝi tuj dependos de kiom multe virsxafo la uzanto havas.
Ĝi tuj dependas de kiam en la tago vi ruli la programaron, eble, kaj
kio enigo la uzanto donas al vi.
Ni logxis en negrava detaloj.
>> Do ni abstrakta for kaj diri ke, kiam vi kuras linion de kodo kiel oriento,
char stelo s ricevas la reveno valoro de get kordo.
Kial ni ne anstataŭ ĝuste desegni kion ni teni nomante puntero kvazaŭ ĝi estas
montrante iun?
Do mi asertas nun ke s supren estas puntero -
sub la kapuĉo ĝi estas adreso.
Sed ĝi estas ĝuste montrante la unua bitoko en la
ĉeno kiu estas estinta revenis.
>> Se mi nun revenu al la kodo tie ĉi, kio okazas ĉe ĉi tiu linio?
Nu, en ĉi emfazita linio nun, Mi deklarante ŝajne alia
variablo nomas t.
Sed estas ankaŭ pointer, do mi tuj desegni ĝin kiel, en teorio, la ĝusta
samgrandaj skatolo.
Kaj mi tuj nomas ĝin t.
>> Kaj nun se ni reiru al la kodo denove, kiam mi stoki s ene de t,
kion mi teknike metante ene de t?
Nu teknike, tiu estis la numero 123.
Do vere mi devus skribi la nombro 123 tie.
Sed ni prenu ĝin pli alta nivelo.
t, se ĝi estas nur pointer, intuicie, estas ĝuste tio.
Tio estas ĉio tio, kio estas stokita en tie.
>> Do nun en la lastaj interesaj linioj de kodo, kiam mi vere irad
capitalizando la nula karaktero en t, kio okazas?
Nu, t krampo nulo estas nun notas al kio karaktero, supozeble?
>> Ĝi estas indikante h.
Ĉar t krampo nulo -
memoras, tiu estas maljuna sintakso. t krampo nulo nur signifas se t estas ĉeno, t
krampo nulo signifas atingi la nula karakteron en tiu forto.
Do kion tio vere signifas estas iri al tiu tabelo -
kaj jes, tiu povus esti 123, povas esti tiu 124.
Sed estas tute relativaj, memori.
Kiam ajn parolas tabelo, ni havas la avantaĝo de parolas
relativa indeksoj.
>> Kaj tial ni nun povas nur supozi ke t krampo nulo estas h.
Do se mi nomas 2 supra sur ĝi, kio tio estas vere faras estas capitalizando
la minuskla h al majuskle H. Sed kompreneble, kio estas s?
Ĝi montris la saman Darn kordo.
>> Do tio estas ĉio tio, kio estis okazante en ĉi tiu kodo ĝis nun.
Do kio estas do la implico?
Kiel ni ripari tiujn du problemojn?
Kiel ni komparu al reala kordoj?
>> Nu intuicie, kiel farus vi ĉirkaŭiras komparas du
kordoj por vera egaleco?
>> Kion tio signifas se du kordoj estas egalaj?
Klare ne ke iliaj adresoj estas egali en memoro, ĉar tio estas malalta
nivelo efektivigo detalo.
Ĉiuj signoj estas la samaj.
Do mi proponas, kaj lasu min enkonduki en la versio de compare.c
ĉi tie, do kompari-1.c.
>> Permesu al mi proponi ke ni ankoraŭ akiri pointer nomita s, kaj vendejo en tio la
redoni valoro de get kordo.
Ni faros la samon kun t.
Do neniu el la kodo estas malsamaj.
Mi tuj aldonos iom pli eraron kontrolinte nun.
Do nun ke ni estas speco de senŝeligante reen ĉi tavoloj en CS50 de kia kordo
efektive estas, ni devas esti pli anal pri certigi ke ni ne trouzi
nevalida valoroj kiel nula.
>> Do mi simple tuj kontroli.
Se s ne egala nula kaj t ne egala nula, tio signifas ke ni estas okej.
Get kordo ne firmigu ĝis atingi ĉu de tiuj ŝnuroj.
Kaj vi povas eble diveni nun, kion ne STR CMP supozeble faras?
String kompari.
>> Do se vi havas programon en java antaŭ, ĉi tio estas kiel la egalaj metodo en la
kordo klaso.
Sed por tiuj el vi, kiuj ne havas planita antaŭ,
ĉi tio estas nur c funkcio.
Ĝi okazas veni en dosiero nomata string.h.
Tie estas kie ĝi estas deklarita.
>> Kaj string kompari -
Mi fakte forgesis lian uzadon, sed ne gravas tio.
Memoru ke ni povas fari homo, instigi kompari.
Kaj jen tuj alportu la Linukso programistoj manlibro.
Kaj estas, sincere, iom kamufla.
Sed mi povas vidi ĉi tie ke, yep.
Mi devas inkluzivi string.h.
>> Kaj ĝi diras ĉi tie sub priskribon, "la kordo Komparu funkcio komparas
la du kordoj S1 kaj S2. "Kaj S1 kaj S2 estas ŝajne la du
argumentoj pasis in
Mi ne vere memoras kio const estas, sed nun rimarkas -
kaj vi vidas cxi tiun jam kiam vi jam uzas la paĝoj de man se vi
havi ĉion -
ke char stelo estas simple sinonimo kun kordoj.
>> Do ĝi komparas la du kordoj, S1 kaj S2, kaj denove entjero malpli
ol aŭ egala al aŭ pli granda ol nulo se S1 estas trovita, respektive, por esti
malpli ol, aŭ kongruas, aŭ esti pli granda ol S2.
Tio estas nur tre kompleksa maniero diri ke kordo kompari revenas
nulo se du kordoj estas intuicie identa, karaktero por
karakteron por karaktero.
>> Denove negativa nombro se s, alfabete, supozas
veni antaux t.
Aŭ redonas pozitiva nombro se s supozas veni post t
alfabete.
Do kun tiu simpla funkcio, povis vi, ekzemple, ordigi
tutan faskon da vortoj?
>> Do, en tiu nova versio, mi tuj por antaŭeniri kaj realigi compare1.
Dot oblikvo kompari unu.
Mi tajpas en saluton en ĉiuj minuskloj.
Mi tuj tajpi en saluton en la tuta minuskla denove.
Kaj dankeme nun rimarkas Mi tajpis la saman aferon.
>> Dume, se mi tajpas en saluton en suba kazo kaj SALUTON en majusklo kaj
kompari ilin, mi tajpis malsamaj aferoj.
Ĉar ne nur estas la adresoj malsamaj, sed ni komparas
malsamaj karakteroj denove kaj denove.
>> Nu ni iru kaj fiksi unu alia problemo nun.
Permesu al mi malfermi versio unu el kopio, kiu nun direktas
ĉi tiu afero kiel sekvas.
Kaj ĉi tiu tuj rigardi iom pli kompleksa.
Sed se vi pensas pri kio problemo oni bezonas solvi, espereble tio estos
certe en nur momento nun.
>> Do tiu unua linio, char komenco t, en lego de terminoj povus iu proponi
kio estas tiu linio tie signifas?
Char stelo t, kio estas tio faras?
>> Bona.
Krei puntero al iu loko en memoro.
Kaj lasu min rafini gxin iomete.
Deklari variablon kiu stokas la adreso de iu char en memoro, nur
esti iom pli ĝentila.
>> Bone, do nun la dekstra flanko, mi havas neniam vidis unu de tiuj funkcioj
antaŭe, malloc.
Sed kio povus signifas?
Atribuo de memoro.
Memoro atribuo.
>> Do rezultas, ĝis nun, ni ne vere havis potencan vojo de
petante la mastruma sistemo, donu al mi iom memoro.
Pli ĝuste, ni nun havas funkcion nomita malloc kiu faras ĝuste tion.
Kvankam tio estas iom de distro ĝuste nun, rimarki ke en
inter la du parentezoj nur tuj estos numeron.
Kie mi tajpis en demando markoj povas esti numero.
>> Kaj tiu numero signifas, donu al mi 10 bajtoj.
Donu al mi 20 bajtoj.
Donu al mi 100 bajtoj.
Kaj malloc faros lian best demandas la mastruma sistemo -
Linukso, en ĉi tiu kazo -
bona, estas ilia 100 bitokoj de RAM disponebla?
Se jes, revenu tiuj bajtoj al mi per redonante la adreso de kiu el
tiuj bitokoj, eble?
La tre unua.
>> Do jen ankaŭ - kaj tio estas superreganta en C, iam vi
kontraktanta kun adresoj?
Vi preskaŭ ĉiam traktas la unua tia adreso, kiel ajn granda
eron de memoro vi esti enmanigis dorso, por tiel diri.
>> Do ni plonĝi en ĉi tie.
Mi klopodas destini kiel multaj bajtoj, ekzakte?
Nu.
String longo de s - ni fari konkretan ekzemplon.
Se s estas saluton, H-E-L-L-Ho, kio estas la korda longeco de s, evidente?
Do ĝi estas kvin.
Sed mi faras plus 1 en tio, kial?
Kial mi volas ses bitokoj anstataŭ kvin?
La nula karaktero.
>> Mi ne volas forlasi cxi tiun speciala nula karaktero.
Ĉar se mi faras kopion de Saluton kaj nur faru H-E-L-L-Ho, sed mi ne metas
tiu speciala karaktero, la komputilo ne havu, por hazardo, backslash
nulo tie por mi.
Kaj do se mi provas eltrovi la longeco de la teksto, mi povus pensi, ke
ĝi estas 20 signojn longa, aŭ de miliono signojn longa se mi simple neniam okazi
bati backslash nulo.
>> Do ni bezonas ses bitokoj por stoki H-Kaj-L-L-O, backslash nulo.
Kaj tiam ĉi tio estas nur esti super anal.
Supozu ke mi forgesos, kion la grandeco de char estas.
Ni parolas tiele ĝi estas unu bajto.
Kaj ĝi kutime estas.
En teorio, ĝi povus esti io malsama, en malsama Mac aŭ
malsamaj PC.
>> Do rezultas tie estas tio operatoro vokis sizeof ke se vi transpasxas la
nomo de datumtipo - kiel char, aŭ int, aŭ float -
ĝin rakontos al vi, dinamike, kiom da bajtoj a char prenas sur tiu
aparta komputilo.
>> Do tiu estas efektive nur kiel diri fojojn 1 aŭ
fojoj nenion.
Sed mi faras ĝin nur por esti super anal, ke ĉiaokaze oni char diferencas
en via komputilo kontre mia, tiamaniere la matematiko estas ĉiam tuj ekiri.
>> Fine, cxi tie mi kontroli por nula, kiu estas ĉiam bona praktiko - denove,
iam ni pritraktas montriloj.
Se malloc ne povis doni mi ses byes - kiu estas
neverŝajna, sed ĉiaokaze -
reveni unu tuj.
Kaj nun iru antaŭen kaj kopii la kordo kiel sekvas.
Kaj tio estas familiara sintakso, kvankam en malsama papero.
>> Mi tuj iros antaŭen kaj akiri la kordo longo de s kaj konservas ĝin en n.
Mi tiam tuj persisti de i egalas nulo ĝis kaj inkluzive de n,
pli granda ol aŭ egala al.
Por ke en ĉiu ripeto, mi metis la th,-a karaktero de s en la th,-a
karaktero de t.
>> Do kio vere okazas sube la kapuĉo tie?
Nu, se tio, ekzemple, estas s -
kaj mi tajpis en la vorto H-E-L-L-O kaj tie estas backslash nulo.
Kaj denove, ĉi tiu estas s indikante tie.
Kaj ĉi tie nun estas t.
>> Kaj tion notas nun al kopion de memoro, ĉu ne?
Malloc donis al mi tuta eron de memoro.
Mi ne scias komence kio estas en iu el tiuj lokoj.
Do mi tuj pensas pri tiuj kiel tutan faskon da demando markoj.
>> Sed tuj kiam mi komencas looping de nulo plu supren tra la longo de s, t
krampo nulo kaj t krampo 1 -
kaj mi metos ĉi nun en la supre -
t krampo nulo kaj s krampo nulo signifas ke mi iros al kopiado
ripete h en tie, E-L-L-O. Plus, ĉar mi faris pli
1, backslash nulo.
>> Do nun en la kazo de komparu-1.c, en la fino, se mi elprinti la
kapitaligo de t, ni devus vidi, ke s estas neŝanĝita.
Lasu min nun kaj faros cxi tion.
Do fari copy1.
Dot oblikvo copy1.
Mi tuj tajpi en saluton, Enter.
Kaj nun rimarkas, nur la kopion estis majuskloj.
Ĉar mi vere havas du pecoj de memoro.
>> Bedaŭrinde, vi povas fari iu bela malbona kaj sufiĉe danĝeraj aferoj ĉi tie.
Lasu min eltiri supren ekzemplo tie nun, kiu donas al ni ekzemplon de kelkaj
malsamaj linioj.
Do simple intuicie tie, la unua linio de kodo, int stelo x, deklarante
variablo nomata x.
Kaj kio estas la datumtipo de tiu variablo?
Kio estas la datumtipon de tiu variablo?
Tio ne estis la cliffhanger.
>> La datumtipo estas int stelo.
Do kion tio signifas? x volo stoki la adreso de int.
Simpla.
Y estas tuj stoki la adreso de int.
Kio estas la tria linio de kodo faras tie?
Ĝi estas atribuo kiom da bajtoj, plej verŝajne?
Kvar.
Pro la grandeco de int estas ĝenerale kvar, malloc de kvar donas
mi apogi la adreso de eron de memoro, la unua de kies bajtoj estas
stokita nun en x.
>> Nun ni movi iom rapide.
Stelo x signifas kion?
Ĝi signifas iri al tiu adreso kaj metis kio numero tie?
Metu la numero 42 tie.
Stelo y signifas iri al kio estas ĉe y kaj metis la numero 13 tie.
>> Sed atendu momenton.
Kio estas en y en la momento?
Kio adreso estas y provizon?
Ni ne scias, ĉu ne?
Ni neniam iam uzi la atribuo operatoro engaĝante y.
Do y kiel deklaritaj en la dua linio de kodo estas nur iuj rubo valoro, granda
demandosigno por tiel diri.
Ĝi povus indikante hazarde al nenio en la memoro, kiu
estas ĝenerale malbona.
>> Tuj, kiam ni batis tiu linio tie, stelo y estas 13, io malbona,
iu tre malbona estas okazi al Binky.
Do ni vidu kio okazas por fini pasante al Binky tie en ĉi tiu minuto
aŭ tiel rigardi.
>> [VIDEO reprodukto]
>> -He, Binky.
Veki.
Estas tempo por puntero amuzo.
>> -Kio estas tio?
Lernu pri indikoj?
Ho, goodie.
>> -Nu, por komenci, mi supozas ke ni estas tuj bezonos paron montriloj.
>> -Akcepti.
Ĉi tiu kodo atribuas du montriloj kiu povas noti al entjeroj.
>> -Bone, bone, mi vidas la du montriloj.
Sed ili ne ŝajnas esti indikante nenion.
>> -Tio estas prava.
Komence, montriloj ne indikas nenion.
La aferoj oni indikas nomiĝas pointees, kaj fiksante ilin estas
aparta paŝo.
>> -Ho, dekstra, rajto.
Mi sciis tion.
La pointees estas apartaj.
Do kiel vi rezervu pointee?
>> -Akcepti.
Nu, tiu kodo atribuas nova entjeroj pointee, kaj tiu parto aroj x
atentigi al ĝi.
>> -He, kiu aspektas pli bone.
Do faru ĝin fari ion.
>> -Akcepti.
Mi dereference la puntero x stoki la nombro 42 en gxian pointee.
Por ĉi tiu lertaĵo, mi bezonas mian magion sceptron de dereferencing.
>> -Via magio sceptron de dereferencing?
Uh, tio estas granda.
>> -Ĉi tio estas kion la kodo aspektas.
Mi ĵus instalis la numero, kaj -
>> -He, rigardu.
Tie iras.
Do fari dereference sur x sekvas la sago por aliri lia pointee.
En ĉi tiu kazo, por stoki 42 en tie.
Hej, provu uzi ĝin stoki la nombro 13 tra la alia puntero, y.
>> -Akcepti.
Mi nur volas transiri ĉi tie al y kaj get la numero 13 starigis.
Kaj tiam prenu la sceptron de dereferencing kaj ĝuste -
whoa!
>> -Ho, bona.
Tio ne funkcios.
Diru, Binky, mi ne kredas ke la dereferencing y estas bona ideo,
ĉar la starigadon de la pointee estas aparta paŝo.
Kaj mi ne kredas ke ni iam faris.
>> -Hmm.
Bona punkto.
>> -Jes, ni atribuis la puntero y.
Sed ni neniam starigis ĝin atentigi al pointee.
>> -Hmm.
Tre observanto.
>> -He, vi serĉas bona tie, Binky.
Ĉu vi povas ripari ĝin tiel ke y punktoj al la sama pointee kiel x?
>> -Certe.
Mi uzas mian magian bastonon de pointer farita.
>> -Ĉu tiu tuj estos problemo kiel antaŭe?
>> -No.
Ĉi tio ne tuŝas la pointees.
Ĝi nur ŝanĝas unu puntero atentigi al la sama afero kiel alia.
>> -Ho, mi vidas.
Nun y poentojn al la sama loko kiel x.
Do atendu.
Nun y estas fiksita.
Ĝi havas pointee.
Do vi povas provi la sceptron de dereferencing denove
por sendi la 13an super.
>> -Akcepti.
Jen iras.
>> -He, rigardu tion.
Nun dereferencing laboroj sur y.
Kaj ĉar la indikoj estas dividi ke oni pointee, ili
ambaŭ vidas la 13.
>> -Jes.
Dividi.
Kion ajn.
Do ni iras ŝaltilo lokoj nun?
>> -Ho, rigardu.
Ni estas el la tempo.
>> -Sed -
>> -Nur memoru la tri pointer regulojn.
Numero unu, la baza strukturo estas, ke vi havas puntero.
Kaj ĝi notas pli al pointee.
Sed la puntero kaj pointee estas apartaj.
Kaj la komuna eraro estas starigi pointer, sed por
forgesu donita pointee.
>> Numero du, pointer dereferencing startas ĉe la puntero kaj sekvas lian
sago super aliri lia pointee.
Kiel ni ĉiuj scias, tiu nur funkcias se Estas pointee, kiu alvenas al
regi numero unu.
>> Numero tri, pointer atribuo prenas unu puntero kaj ŝanĝoj al punkto al
la sama pointee kiel alia puntero.
Do post la farita, la du montriloj volo
indikas la saman pointee.
Foje, ke nomiĝas dividi.
Kaj jen ĉio estas al ĝi, vere.
Bye bye nun.
>> [FINO reprodukto de vídeo]
>> DAVID Malan: Do pli en montriloj, pli en Binky proksima semajno.
Ni vidos vin lunde.