[Powered by Google Translate] [Vika 4, Áframhaldandi]
[David J. Malan - Harvard University]
[Þetta er CS50. - CS50.TV]
>> Þetta er CS50, og það er í lok 4. viku.
Svo sumir góðar fréttir og slæmar fréttir.
Enginn fyrirlestur á mánudag, ekkert mál að setja í næstu viku. [Nemendur uppörvandi]
Þú ert ekki að fara að eins og hvar það er að fara.
En við höfum þetta í staðinn næsta Miðvikudagur,
og það er einnig á kennsluáætlun 1 Föstudagur fyrirlestri á föstudaginn svo að við getum verið á beinu brautinni.
En allt verður tekið eins og venjulega, svo ekki hafa áhyggjur.
>> Og með tilliti til quiz 0 hvað við munum gera til enda viku
er staða á cs50.net heimasíðu Námskeiðið er varða
á hvaða tegund af væntingum sem þú ættir að hafa þegar það kemur að fyrsta próf.
Almennt, það verður krossapróf, rétt-rangt, stutt svar, stutt kóðun vandamál.
Þú ert ekki að fara að gera ráð fyrir að framkvæma samsvarandi
um vandamál sem þú vilt sjá á pset, sem þú ert með tölvu
og aflúsara og þess háttar, en það verður að vera smá kóðun vandamál.
>> Og reyndar er besta fylgja til að fá tilfinningu fyrir því hvað CS50 test eins
er að fara til cs50.net, fara í Skyndipróf tengilinn,
og þú getur séð á undanförnum ár virði af Skyndipróf.
Bara átta sig á því að námskrá hafi ekki alltaf verið það sama í gegnum árin.
Stundum erum við að bæta, stundum leggja
þannig að ef þú sérð einhvern þráð á einn af þessum gömlu Skyndipróf
að þú hefur ekki hugmynd um hvað það er að tala um, er það hvort að við vildum ná því
eða að við höfum ekki ná því.
En í formi umsagna, á sunnudaginn, mánudaginn, og Þriðjudagur
auk að sjálfsögðu alls endurskoðun fundur á sunnudaginn nótt -
tíma og stað til að tilkynna á heimasíðu Námskeiðið er -
þú hefur öll tækifæri til að endurskoða og félagar kennslu á námskeiðinu er
efni á þessu ári, bæði í kafla og eins og fullt bekknum,
og þá verða teknar eins og venjulega eins og heilbrigður.
>> Allt í lagi. Svo án frekari fjaðrafok, ein athugasemd um staðið / ekki staðið og bæta við / falla.
Þú gætir hafa séð minnisblöð í gærkvöldi, og þetta er í raun bara viðbót fullvissu
að ef þú ert meðal þeirra sérstaklega minna þægilegt eða einhvers staðar þar á milli
og þú ert að tilfinning bara smá í yfir höfuðið,
átta sig á því er örugglega alveg eðlilegt, og það er nægur stuðningur uppbygging í stað,
einn sem skrifstofutímarnir ætluðu sér að bæta allt meira á tölvupósti í gærkvöldi mínum,
og átta sig líka að valkostur eins staðið / ekki fyrir flokk eins og þetta
raunverulega er ætlað sem kerfi til að taka á brún burt af sjálfsögðu eins og þetta,
svo aftur ef þú ert að eyða þeim 10, 15, 20 klst
bara að reyna að fá smá pset að vinna og þú veist að þú ert 90-95% af leiðinni þangað
en þú getur ekki fundið einhverja helvítis padda, í framhjá / mistakast líkan sem er tegund af lagi.
>> Hugmyndin er sú að með því kerfi sem þú getur þá farið fókus á öðrum psets þínum
eða sofa eða hvað sem það er sem þú vilt leggja áherslu á.
Svo ljóst að þú hefur til þessa komandi þriðjudagur - tæknilega 5. Mánudagur,
en það er frí, þannig að þetta kemur Þriðjudagur - að skipta úr staðið / ekki að farið eða öfugt.
Og ef þú ert í raun á heljarþröm og eru að hugsa um að sleppa alveg,
vinsamlegast skilið mig eftir fyrirlestri eða sendu mér minnismiða.
Við viljum gjarnan að minnsta kosti spjall áður en tilboð adieu.
Allt í lagi. Svo við byrjuðum að taka þjálfun hjól á síðasta tíma.
Einkum, með áherslu við á band.
Band er eitthvað sem er lýst í CS50 bókasafn,
sérstaklega í þeirri skrá sem heitir cs50.h sem við munum byrja að líta á í þessari viku og næstu.
En strengur er í raun bara einföldun á eitthvað
það er a lítill fleiri arcanely lýst sem char *.
Bleikju við erum kunnugir. Það er bara einn stafur.
En * frá Mánudagur táknað hvað? >> [Nemandi] A músina.
A músina. Og hvað er bendi? >> [Nemandi] An heimilisfang.
>> Það er eins og heimilisfang, stað í minni.
Hvað er heimilisfang eða staðsetningu eða minni?
Aftur, hafa allir af okkur fartölvur með tónleikum eða 2 gígabæta vinnsluminni líklega þessa dagana,
og það þýðir að þú ert með milljarð eða 2 milljarða bæti virði af minni.
Og það skiptir ekki máli hvað það lítur líkamlega út,
en taka á trú að þú getur Númer einstakra bæti sem eiga fartölvu hefur -
þetta er bæti 0, þetta er bæti 1, þetta er bæti 2 milljarðar -
og það er einmitt það sem tölvan gerir.
Þegar þú úthluta pláss fyrir einn staf, til dæmis,
það hefur augljóslega til að búa einhvers staðar í minni tölvunnar,
og kannski er það á fjölda bæti 12345,
og það er einhvers staðar hérna í minni tölvunnar.
Og heimilisfang svo að þessi karakter er 12345.
>> Nú, í viku 0 gegnum nú svona langt, höfum við í raun ekki aðgát
hvar í hlutum minni er geymd vegna þess að við notum venjulega tákn,
breytur, og fylki til raunverulega fá á okkar gögn.
En eins og á mánudag og allt meira í dag, ætlar þú nú að fara að hafa
allt meira svipmikill hæfileiki með að skrifa forrit
að virkilega vinna minni a tölva 'en þú sýnist,
bæði góðum tilgangi og slæmt,
bugs vera mjög algeng afleiðing á þessum tímapunkti í að læra þetta efni.
En hvað þýðir það í raun að vera char *?
Við skulum fara á undan aftur - og við munum koma aftur til Binky eins og lofað í dag.
Við skulum fara í einfalt dæmi hér.
Leyfðu mér að vista þessa skrá sem compare.c, og láta mig fá bara sumir sniðmát kóða hér
svo eru stdio.h, láta mig gefa einnig sjálfur ma cs50.h. Ég stækka í allt þarna.
Leyfðu mér að byrja að skrifa helstu int main (tóm), og nú vil ég gera eitthvað eins og this:
printf ("Gefðu mér band") og þá mun ég nota s STRING fær GetString
að fá band frá notanda, svo ég ætla að spyrja notanda um annað.
("Gefðu mér annan streng:") og ég ætla að biðja þá um GetString að fá það.
Ég kalla það t Þar sem T kemur eftir s og s er gott nafn á streng ef það er nokkuð almenn.
Svo GetString, og nú vil ég bara að gera geðheilsu stöðva og ég ætla að segja
if (s == T) þá er ég bara að fara að segja að notandinn printf ("Þú gafst það sama \ n");
annað sem ég er að fara að prenta út eitthvað eins og ("þú gafst eitthvað öðruvísi! \ n")
eða hvað setningin verður. Svo eitthvað svoleiðis.
Þá eins og venjulega, ég aftur 0 en bara signified að ekkert slæmt gerðist,
og ég ætla að halda áfram og safna saman og keyra þetta forrit.
>> En á mánudaginn förum við rann þetta forrit,
og reyndar var sagt að HELLO ekki HELLO og Bless er ekki bless.
Hegðun við sáum var aðeins meira svona.
Leyfðu mér að fara inn í skrá uppspretta minn, zoom hér, og við skulum gera bera.
Tekið lagi. Ég ætla að hlaupa saman. Gefðu mér band: HELLO.
Gefðu mér annan streng: HELLO.
Þú slóst eitthvað annað!
Jæja, láttu mig reyna eitthvað einfaldara eins og 50, 50. Þú slóst eitthvað annað!
hi, hi. Svo greinilega, eitthvað er að gerast hér.
En hvað var skýringin fyrir því hvers vegna?
Apparently, lína 12 er alveg dysfunctional.
Hver er grundvallar vandamál hér? Já. >> [Nemandi] Það er að bera saman tölur.
Já, nákvæmlega. Það er í raun að bera saman heimilisföng
sem HELLO og HELLO eru geymdar.
Það er ekki að bera saman bréf Halló aftur og aftur,
vegna þess að það er í raun gerðist, allan þennan tíma sem við höfum verið að nota GetString -
Þetta Blackboard er aftur minni tölva okkar,
og við skulum segja að ég kalla GetString eftir að lýsa breytilega s.
Hvað er minnið mitt að líta út?
Segjum geðþótta að s lítur svona út. Það er ferningur.
Og nánast hvert sinn sem ég hef dregið stykki af minni á skjánum
Ef það er 32 bita sem ég hef verið að teikna ferninga eins og þetta vegna þess að örugglega í tækið,
bendi, netfang, er 32 bita. Það er sama sem int.
Það getur verið byggt á kerfi tölva.
Þau ykkar sem eru óljóst kunnugt þá staðreynd að Mac eða PC er 64 bita,
sem táknar í raun að tölvan þín sé að nota 64-bita punkta,
64-bita tölur og meðal upsides af því er tölvur
getur haft miklu meira vinnsluminni en fyrra.
Long saga stutt, aftur í dag þegar tölvur nota aðeins 32 bita
að tákna tölur, stærsti fjöldi bytes þú gætir tákna
í því tilfelli var það ef þú ert með 32 bita?
Svo 4 milljörðum, ekki satt, því að 2 til 32 er 4 milljarðar króna.
Þessi tala hefur verið endurteknar í námskeiðinu.
>> Svo ef þú ert bara 32 bita, hæsta númerið sem þú getur treyst á er u.þ.b. 4 milljarða.
En það var grundvallaratriði takmörkun tölvum þar til fyrir nokkrum árum síðan
því ef þú getur aðeins treyst eins hátt og 4 milljarða
það skiptir ekki máli ef þú kaupir 8 gígabæta vinnsluminni eða jafnvel 5 gígabæta vinnsluminni;
þú getur ekki treyst því að hár, þannig að það var gagnslaust.
Þú gætir bara sjá fyrstu 3 eða 4 gígabæta af minni tölvunnar.
Það er minna mál núna, og þú getur keypt MacBook Pros og Dells
með 8 gígabæta vinnsluminni eða jafnvel meira þessa dagana.
En ef ég úthluta einfaldlega í þessari áætlun bendi, bendi heitir s,
Það getur litið svona á skjánum því reyndar að við þurfum að afhýða aftur þetta lag.
Ég að halda áfram að segja band, en frá Mánudagur, band er mjög char *,
heimilisfang einhvern staf.
Svo skulum taka þessi þjálfun hjól burt jafnvel þó að við munum halda áfram að nota GetString fyrir nú.
Þannig að ég hef lýst er, og þetta er klumpur af minni, 32 bita.
Hvað er hér í minni sjálfgefið? >> [Inaudible nemandi svar]
Hvað er það? >> [Nemandi] Sorp. >> Sorp. Einmitt.
Ef þú forritari setur ekki gildi í breytu, sem veit hvað það er?
Stundum þú færð heppinn og það er 0, sem er góður af a ágætur, hreinn sjálfgefið gildi,
En eins og við sáum Mánudagur, stundum er það heill bull,
sumir mjög stór jákvæð eða neikvæð tala sem kom þar?
Já. >> [Nemandi] Hlutverk áður. >> Já.
>> Oft virka sem fékk kallað áður vegna muna,
eins og þú kalla aðgerðir í minni, þeir taka meira og meira pláss frá grunni,
og um leið og skilar, fær það minni endurnýtt
fyrir næsta gaur sem fær heitir, sem notar sama sneið þína á minni.
Og ef að þú ert farin sorp þar, fyrri gildum,
við gætum mistök s sem hafa sumir gildi þegar í raun höfum við ekki setja neitt þar.
Svo lítur RAM okkar á þessum tímapunkti svona.
Nú á hægri hönd hlið af línu 7 sem við köllum GetString,
sem við höfum verið að gera núna í margar vikur, en það er GetString raunverulega gera?
GetString skrifað af CS50 starfsfólk er lítið greindur
á að um leið og notandinn byrjar að slá lykla og smellir á Enter,
GetString tölur út hversu margar mínútum gerði notandi högg,
hversu marga stafi þarf ég að úthluta RAM fyrir.
Og þar sem RAM kemur frá, hver veit?
Það er einhvers staðar í 2 gígabæta tölvunnar eða whatnot á minni.
En við skulum gera ráð fyrir að tölvan fann pláss fyrir orð HELLO hérna.
Orðið Ég gafst var H-E-L-L-O.
Og ef við drögum þetta sem röð af stöfum, gætum við draga það svona.
En ég þarf að gera 1 auka hlutur. Hvað tilheyrir í lok hvers streng í C?
Núll eðli, sem við skrifum sem \ 0.
Það er tæknilega númer 0, en sviga skiptir öllu skýrari
að þetta er bókstaflega númer 0 er heiltala 0;
það er ekki til dæmis vitna-unquote 0 sem þú getur slegið á lyklaborðinu.
Svo er þetta HELLO.
>> Og hvað gerði við segjum á mánudag að virka eins GetString
er í raun að skila öllum þessum vikum?
Það er ekki að skila streng á sjálfu því það er í raun ekki að hafa merkingu
því strengir eru ekki fyrir hendi. Þeir eru tegund af smÃ í CS50 bókasafn.
Hvað er raunverulega a band, meira tæknilega? >> [Nemandi] Þetta er í fyrsta staf.
Einmitt. Það er einfaldlega heimilisfang fyrsta staf að notandinn slegið inn
Svo ef orð mín HELLO endar það upp að bæti númer 123 og síðan bæti númer 124,
125, 126, og svo framvegis, ef ég tala bara bæti mínum frá 0 á allt,
hvað raunverulega GetString er aftur er bókstaflega númer 123.
Svo er það sem fær setja á s númer 123, ekki bréf H, ekki orðið HELLO,
einfaldlega heimilisfang þar sem ég get fundið fyrstu stafina HELLO.
En það virðist ekki eins og nóg. Ég bað þig um streng, ekki staf.
Svo hvernig vitum við eða tölva sem ELLO konar koma með H?
Hvað er tegund af samkomulagi sem við höfum? Já.
[Nemandi] Hún heldur að segja sig að finna nokkrar fleiri stafi. >> Einmitt.
>> Það er þetta manna-tölva venju þar þegar þú ert að takast á við strengi,
annars þekkt nú sem bleikju stjörnur, hefur þú einfaldlega að reikna út
þar í lok hvers band í lífinu er því í raun bara iterating yfir það með for lykkju,
á meðan lykkja, hvað, þannig að þegar þú finna í lok band
nú er hægt að álykta af því, ó, allt orðið var HELLO.
Þessir af þú með fyrri forritun reynslu gæti vita í Java
þú getur bara hringt. lengd og í öðrum tungumálum sem þú getur hringt í lengd eða álíka.
Það er vegna þess að í fullt af tungumálum, sérstaklega það sem kallast hlutbundin tungumál,
lengd eitthvað er góður af encapsulated innan verksins gagna sig,
mikið eins og við encapsulated auðkenni og nöfn og hús inni í nemanda á mánudag.
En C er miklu lægri. Það eru engir hlutir eða flokka, ef þú hefur heyrt þau orð áður.
Allt sem þú þarft er í raun minni heimilisföng.
Svo er svona gamaldags leið fulltrúi áhugaverð gögn uppbygging.
Þú ert með upphafstíma gildi eins og heimilisfang fyrsta staf
og þá bara handahófskennt venju sem allir sammála að fylgja.
Svo hvernig er band lengd framkvæmda, gerði við leggja?
Strlen, strlen, sem sum ykkar hafa nú notað nokkrum sinnum. Það er frekar einfalt, ekki satt?
Það er eins og 2 línur af kóða.
Það er ansi mikið að lykkja af einhverju tagi, kannski með fleiri sveitarfélaga breytu.
En strlen hefur bara til að taka músina og þá byrja að leita \ 0.
>> Og um leið og hún finnur það, það getur aftur á heildarfjölda skref sem það er tekið á þeim streng.
Þannig að við getum álykta af þessu hvað fer næst.
Segjum svo að ég lýsi t eins og ég hef gert í línu 10.
Þetta er einhver sorp gildi. Hver veit í fyrstu?
En á hægri hönd hlið af línu 10 Ég er að hringja GetString aftur.
Hver veit hvar það endar?
Segjum geðþótta að stýrikerfið fann pláss fyrir það leið hérna.
Ég gerst að tilviljun h-E-L-L-O aftur,
og svo getum við draga sams konar mynd.
En sú staðreynd að ég hef redrawn Þessi mynd er viljandi
vegna þess að það er öðruvísi HELLO en þetta eina.
Svo hér það gæti verið staðsetning 456, þetta er 457, og svo framvegis.
Og hvað fær setja þar spurningarmerki einu sinni var?
Í þessu tilfelli 456.
Við erum að tína þessar tölur geðþótta því raunverulega eftir í dag
við erum ekki að fara að hugsa svo mikið um hvað heimilisfang nokkuð er.
Allt sem við hugsa um er að við getum reikna út heimilisfang sumir stykki af gögnum eins og Hello.
>> Svo í raun það sem flestir gera í tölvunarfræði þegar tala um heimilisföng minni
og tala um punkta sérstaklega,
frekar en nennir vangaveltur út 123 - Hverjum er ekki sama þar sem þetta dót er í raun,
Við vitum bara að það er á einhverjum tölulegum heimilisfang -
við einfalda heiminn og segja bara að s bendir á að eðli
og t er að benda á þá persónu.
Og sú staðreynd að það er ör er alveg vísvitandi
því bókstaflega nú s er bendir á H og T er að benda á aðra H
því í lok dagsins, það skiptir ekki máli hvað heimilisfangið er,
en það skiptir máli að við höfum getu til að tjá þetta netfang með nokkur stykki af kóða.
Við höfum í raun ekki handleika þessar tölur strax
þannig að við munum sjá hvar við getum interject og svona gera það með ábendingum,
en nú í línu 12 bókstaflega hvaða gildi eru við samanburð
samkvæmt þessari sögu í línu 12?
Við erum að segja er 123 jafn jafnt 456? Og það er örugglega ekki raunin.
Og jafnvel eðli, þetta bendillinn er örugglega ekki það sama og þetta
vegna þess að þú heitir GetString tvisvar og GetString ekki að reyna að vera frábær snjall,
það þýðir ekki að reyna að átta sig á, ó, tegund þú HELLO 5 mínútur síðan;
láta mig gefa þér sömu músina sem ég gaf þér fyrir,
það úthlutar bara nýtt klumpur af minni í hvert skipti sem þú kallar það.
>> Hvernig lögum við þetta vandamál?
Ef hærra stigi Ég vil bera strengi Halló og Halló -
Mér er alveg sama um ábendingum - hvernig get ég farið um að svara þeirri spurningu,
gerði notandi slá það sama? Hvað er nauðsynlegt hér? Já.
[Nemandi] Nota aðgerð. >> Ég get notað virka út af the kassi.
Ég get notað fall kallast strcmp, s-T-R-C-m-p,
bara stytt útgáfa af segja strengur saman.
Og ef við förum inn í, til dæmis, bera 2, sem er meðal handouts í dag,
Ég einmitt það.
Ég hélt allt annað það sama frá línu 1 og niður í 26 eða svo,
og nú taka þessi hluti hefur breyst bara svolítið.
Skulum hunsa línu 28 í smá stund og einbeita sér aðeins á þessu.
Hvað höfum vér að segja mánudagur sem STR bera gerir?
Það sér ferlið við að taka 2 ábendingum, S og T í þessu tilviki,
konar nánast að setja fingur sína á þessum 2 bókstafi,
og hvað það þarf að gera er eitthvað eins og while lykkju eða fyrir lykkju,
og það segir er þetta það sama? Ef svo er, færist það fingur eða ábendingum áfram.
Eru þær á sama, þetta sama, þetta sama,
þetta sama, þetta sama? Og ooh, ég er í lok band á bæði S og t.
Ég hef ekki fundið neinar mótsagnir. Já, þessir strengir sama.
Og hvað þýðir STR bera aftur ef 2 strengir eru þau sömu, virðist? Zero.
Svo 0 er gott í þessu tilfelli vegna þess að ef það skilar -1 eða 1,
sem þýðir að er bara gerist að koma fyrir t stafrófsröð eða eftir t.
Og hvers vegna vildi að vera gagnlegt að hafa fall sem segir þér hvaða strengur kemur fyrir
eða eftir að í orðabók?
[Nemandi] leita. >> Rannsakandi og flokkun.
>> Svo þú getur gert hlutina eins og tvöfaldur leit eða kúla tegund eða sameina svoleiðis
þar sem þú þarft að bera það.
Svona langt að við höfum konar skera nokkur horn og aðeins talað um flokkun
í samhengi við tölur vegna þess að það er gaman og auðvelt að tala um,
en þú getur vissulega bera strengi, epli og banani,
því ef Apple er þekkt fyrir að koma fyrir banana, á sama hátt,
hægt að flytja strengi í kring í minni rétt eins og Rob gerði við Mergesort í the vídeó
og við gerðum hér á sviðinu með tegund val, insertion sort, og kúla tagi.
Svo hvar annars getum við tekið þetta? Við skulum reyna þetta.
Tegund skulum við gleyma því lexíu um stund og reyna núna og afrita 1.c að gera eftirfarandi.
Í línu 21 Ég er að segja prenta eitthvað,
þá er ég að fá band frá notanda,
þá er ég að athuga þetta.
Við höfum í raun ekki fengið inn í þennan vana enn, en við skulum nú gera þetta.
Við skulum reyndar afhýða aftur í lag. Þetta er mjög char *. Þessi strákur er mjög char *.
Og hvað þýðir það að vera athuga hvort s == null?
Það kemur í ljós að þegar þú hringja í aðgerð eins GetString
eða almennt bara að biðja tölvuna að gefa þér minni,
eitthvað gæti farið úrskeiðis.
Þú getur verið brjálaður og biðja tölvuna fyrir Terabyte minni
með því að biðja fyrir trillions bæti af minni sem bara eru ekki til í tölvunni,
en GetString og aðrar aðgerðir þurfa einhvern hátt að æpa á þig
Ef þú hefur beðið um of mikið.
Og hvernig GetString gerir þetta er ef þú hefur beðið um meira minni
en er í boði í tölvunni, jafnvel ef það er frábær, frábær litlar líkur
því enginn af okkur eru að fara að slá inn trilljón stafi og ýta síðan á Enter,
en litlar líkur þó það kann að vera, ég vil samt að athuga það bara í tilfelli,
og sérstakt gildi sem GetString, svar, og aðrar aðgerðir skilar
ef eitthvað hefur farið úrskeiðis er NÚLL í öllum húfur.
>> Og hvað er NULL? NULL bara gerist svo að tákna músina. Það er minni heimilisfang 0.
Heimurinn ákvað að geðþótta, ef þetta er minni tölvunnar minnar - þú veist hvað? -
við erum að fara að stela bara 1 bæti af minni sérhver tölva, og það er staðsetning 0.
Við ætlum að gefa honum gælunafn NÚLL, og við erum að fara að lofa
að við munum aldrei setja alvöru gögn þar
vegna þess að við þurfum bara geðþótta sérstakt gildi, 0, aka NULL,
svo að við getum æpa á notendur ef eitthvað fer úrskeiðis.
Annars þú might ekki vita er 0 meina setja eitthvað hér
eða þýðir það eitthvað fór úrskeiðis?
Við verðum að öll sammála um að NULL þýðir ekkert var skilað,
enginn raunverulegur heimilisfang var skilað.
Nú, aftur hér ég ætla bara að taka mannlega hátt minn I 1 frá helstu
ef eitthvað fer úrskeiðis.
Það er vegna þess að aftur venju helsta er að skila 0 ef góð,
1 eða einhver önnur gildi ef slæmt.
En GetString og allir aðgerð sem fæst í ávöxtun minni NULL ef eitthvað fer illa.
>> Allt í lagi. Svo því miður, lína 27, frábær einfalt þó það er ekki alveg að afrita strenginn.
Hvers vegna? Við sjáum þetta sem hér segir.
Ég krafa í línu 27 til að gera afrit af S og kalla það t.
Þannig að ég ætla ekki að spyrja notanda um 2 strengi í þetta sinn, ég ætla bara að segja að gildi í S
ætti að setja í t eins og heilbrigður.
Svo nú bara til að sýna hvernig brotið er, í línu 29 Onward hvað er ég að gera?
Fyrst ég er að athuga hvort lengd t er meiri en 0.
Það er einhver strengur þarna. Notandinn slegið eitthvað inn
Hvað er lína 32 gera, virðist?
[Inaudible nemandi svar] >> Right. Þú getur konar ætlað það frá því sem ég sagði að það er að gera.
En tæknilega, hvað er þetta að gera? T [0] táknar hvað?
[Nemandi] The 0 staf. >> [Malan] The 0 staf.
Eða, meira manna-eins, fyrsta staf í t, hvað það er, H kannski í þessu tilfelli.
Og toupper gerir það sem það segir. Það capitalizes á 0 eðli t og það breytist það.
Þannig að þetta þýðir að taka 0 eðli t, gera það hástafi
og setja það aftur í sama stað.
Svo ef ég tegund halló í lágstöfum, ætti þetta að breyta lágstafir h í höfuðborg H.
En vandamálið er að í línum 35 og 36 það sem ég er að fara að gera er að prenta út fyrir okkur s og t.
Og hvað er hunch þín?
Hvað er ég að fara í raun til að sjá hvort ég slóst í Hello í öllum lágstöfum?
Hvað er að fara að fá prenta? >> [Inaudible nemandi svar] >> Hvað er það?
[Nemandi] Big H og restin lítið. >> Stóri H og restin lítið fyrir sem er eða ekki?
[Nemandi] Bæði. >> Bæði. Einmitt. Nú skulum við skoða hvað er að gerast hér.
>> Leyfðu mér að fara á undan og taka saman þetta. Þetta er copy1, svo að copy1. Allt í lagi.
Þysja inn Leyfðu mér að fara á undan og keyra copy1, Enter, Segja eitthvað: Hello með lágstöfum.
Það færð eintak, en það eignar virðist upprunalega eins og heilbrigður,
vegna þess að það gerist núna í þessari sögu?
Í línu 27 Ég er ekki í raun að vera að afrita streng,
en jafnvel þó að þú gætir hafa innsæi vonast til þess að vera að ræða,
Ef þér finnst um þessa mynd, hvað raunverulega hef ég gert?
Helmingur myndinni er sú sama.
Svo skulum rúlla aftur í tímann svo að T er ekki enn til í sögunni.
S getur verið í sögunni, en við skulum lágstafir halló þetta tíma.
Svo láta mig festa það sem ég gafst í raun inn
Í þessu tilfelli hér höfum við h-e-l-l-O.
Við munum draga það sem röð af stöfum, setja SEPARATOR línur mínar hér og \ 0 mín.
Svo er þetta þar sem við erum eins fljótt og línu 1 í gegnum 24-ish, gefa eða taka, hafa gengið.
Þetta er mynd af minni mínu.
Þegar ég fá að línu 27, hvað gerist?
Rétt eins og áður, ég bendi, sem ég ætla að draga sem þetta veldi.
Það heitir t. Og hvað er gildi þess sjálfgefið? Hver veit? Sumir sorp gildi.
>> Þannig að ég ætla ágrip það í burtu sem spurningarmerki.
Og um leið og hægri hönd hlið af línu 27 keyrir, er hvað ég að setja inn t?
Það sama sem er í s.
Svo ef við um stund fjarlægja þetta abstrakt á örina og við segjum,
ó, þetta er minni hlaða tölu 123, þegar þú segir ekki fær s, semíkommur,
þú ert bókstaflega að setja 123 hér.
Nú ef við einfalda konar heim okkar aftur með myndum,
hvað þú hefur í raun gert er bara bætt öðru örina við umheiminn
sem er að benda á frá t á sama nákvæmlega band.
Svo þegar í línu 31 og 32 fer ég í raun um að breyta t [0]
hvað er T [0] virðist samheiti núna? s [0]
Svo er það allt sem er að gerast.
Og jafnvel þótt þessi tegund af líður svolítið lágt stig og Bogagöng
og svona er eins og kannski innsæi ætti þetta að hafa bara unnið -
Ég hef gert afrit af hlutum áður og það gekk bara -
Ef þú heldur í raun um hvað sem band í raun er, er það char *.
Jæja, hvað er það? Það er heimilisfang sumra staf.
Þá kannski gerir það meira vit að þegar þú reynir að gera eitthvað
frábær virðist einfalt eins og þetta, allt sem þú ert að gera er að afrita minni tölu.
Þú ert í raun ekki að gera neitt með band sig.
Svo jafnvel ef þú hefur ekki hugmynd um hvernig þú myndir leysa þetta vandamál í kóða,
mikil, eðli, hvað við þurfum að gera til að gera Ta afrit af S, virðist?
Já. >> [Nemandi] Gefðu henni nýja staðsetningu? >> Einmitt.
>> Við þurfum að gefa T glænýjar staðsetningu.
Við þurfum einhvern veginn að búa til heim þar sem við fáum nýja klumpur af minni,
sem bara fyrir sakir skýrleika er ég draga rétt undir þessu einn, en það þarf ekki að vera þar.
En það þarf að vera í sömu stærð, svo ég ætla að draga þessar lóðréttar línur í sama stað.
Það er allt í lagi ef þetta er allt sorp í upphafi. Hver veit hvað var það?
En skref 1 er að fara til verða að vera að gefa mér eins mikið minni eins og ég þarf
að passa afrit af halló, þá reikna út hvernig á að afrita klst hér, e hér,
L hér og svo framvegis.
En þetta þegar að líða svolítið augljóst jafnvel þótt sumir af the smáatriði eru enn ágrip.
Til að afrita þennan streng inn í þetta, það er bara til lykkju eða meðan lykkja
eða eitthvað sem þú hefur orðið allt meira kunnugleg.
Svo skulum reyna þetta. Leyfðu mér að fara inn copy2.c.
Í copy2.c við höfum nánast sömu dagskrá nema fyrir línu 27.
Það lítur svolítið flókið, en ef við brjóta hann niður stykkjum,
vinstri-hönd hlið er það sama.
Char * T skapar þetta í minni, að vísu með spurningarmerki
vegna þess að við höfum ekki hugmynd um hvað er þarna sjálfgefið.
Á hægri hönd við erum nú að innleiða nýtt hlutverk, malloc,
fyrir minni úthluta, gefa mér minni,
og það tekur víst hversu mörg rök, hversu margir hlutir innan sviga?
Ég heyrði murmurings af 1 og 2, en það er bara 1.
Það er engin komma, sem þýðir að það er bara 1 hlutur inni í sviga.
Jafnvel þó að það er öðrum sviga, láta mig benda
hvað er inni á ystu sviga, og það er þetta mál:
(Strlen (s) + 1) * sizeof (char).
Þannig að ef við teljum í raun þetta í gegnum, þetta er að segja gefa mér lengd s.
Hvers vegna er ég, þó að bæta 1 á lengd? >> [Inaudible nemandi svar]
Einmitt. Við þurfum pláss fyrir þennan mann á skotti, sjötta karakter sem hefur enga enska merkingu
en hjartarskinn hafa sérstaka programmatic merkingu.
>> Þannig að við þurfum + 1 fyrir það vegna þess að strlen skilar mönnum von á lengd,
halló eða 5, er það ekki að gefa þér frekari null staf.
Svo ég bæta handvirkt þetta með + 1.
Og svo þetta, (char) * stærð, við höfum ekki séð þetta áður.
Þetta er ekki tæknilega fall.
Það er sérstakt leitarorð sem einfaldlega segir þér hvað stærð er á nokkur gögn tegund á tölvu
vegna þess að í raun hafa sumir af okkur 32-bita tölvur.
Ég er með nokkuð gamla tölvu heima, og það notar aðeins 32 bita til að tákna ábendingum.
Og svo ef ég gerði stærð gögn tegund, gæti verið 32 bita.
En ef ég er að nota nýja ímynda tölvuna mína, gæti ég fengið aftur gildið 64 bitum
fyrir eitthvað eins og að heimilisfangi.
Svo í þessu tilfelli, bara til að vera frábær öruggt, við erum ekki að fara á harða kóða eitthvað eins -
Jæja, það er á stærð við bleikju í samræmi við það sem við höfum sagt svo langt?
Við höfum ansi mikið sagt munnlega að það er 1 bæti, og það er nokkuð mikið satt yfir borð.
En aftur, hafa tilhneigingu forsendur að vera slæmt.
Þeir leiða til buggy hugbúnaður ef fólk nota hugbúnaðinn á þann hátt að þú hafir ekki ætla.
Svo við skulum ágrip þetta í burtu og bara meira generically segja
Ég þarf svona marga klumpur af minni
og hver klumpur af minni ætti að vera jafngild á stærð við eðli,
sem er í raun jafn 1 í þessu tilviki, en það er meira almenna leið að skrifa það.
Þannig ef orðið er halló, hversu mörg bæti er malloc úthluta greinilega að heilsa?
[Nemandi] Sex. >> Six. Einmitt eins og margir eins og við höfum spurningarmerki á skjánum.
Og þá taka giska nú á skilning þinn á GetString
hvað þýðir malloc aftur sennilega? >> [Nemandi] An heimilisfang.
An heimilisfang hvað? Af fyrsta klumpur af minni.
>> Við höfum ekki hugmynd um hvað er það vegna þess að einhver annar virka
gæti hafa verið að nota þetta minni áður.
En malloc, eins GetString, skilar veffang fyrstu bæti af minni
að það hefur sett til hliðar fyrir þig.
En hvað það er ekki að gera er að fylla út í auða með núll sviga eðli
vegna þess að það kemur í ljós að þú getur notað malloc að úthluta neitt: ints, strengir, fylki,
fljóta, nemandi mannvirki.
Þú getur notað malloc alveg generically.
Það er ekki sama og að vita hvað þú ert að úthluta minni fyrir.
Svo það væri hroka fyrir malloc að setja \ 0
í lok hvers klumpur af minni og það er að gefa þér
því þetta \ 0 hlutur er bara venju fyrir strengi.
Það er ekki notað til ints, það er ekki notað til að fljóta, það er ekki notað fyrir nemendur.
Og svo er Gotcha með malloc að byrði er algjörlega á þér forritari
að muna hversu margir bæti þér úthlutað og ekki alltaf nota for lykkju
eða á meðan lykkja og fara framhjá mörk klumpur af minni sem þú hefur verið gefið.
Setjið annan hátt, eins fljótt og þú úthluta minni,
þú getur ekki beðið um stýrikerfi, ó, við the vegur, hversu stór af a klumpur af minni var þetta?
Það er algjörlega undir þér komið að muna ef þú þarft að gildi.
>> Svo skulum sjá hvernig ég halda áfram að nota þetta minni.
Í línu 28 og 29 af hverju er ég að þessu?
Bara alls geðheilbrigði stöðva.
Bara ef eitthvað fór úrskeiðis, spyr ég fyrir nokkrum brjálaður magn af minni
eða ég hef svo margt í gangi á tölvunni að það bara er ekki nóg minni,
eitthvað svoleiðis, ég vil að minnsta kosti að athuga for null.
Í raun og veru, flestar tölvur mun gefa þér þá ímynd að hvert forrit
hægt að nota heild af RAM,
en þó svo, ef notandinn slær í sumum brjálaður langstrenginn kannski vegna þess að þeir eru slæmur strákur
og þeir eru í raun að reyna að hrun program eða reiðhestur inn í það,
þú vilt að minnsta kosti athuga skilagildi malloc og hvort það jafngildi null.
Og ef það er, við skulum bara hætta núna því ég veit ekki hvað ég á að gera í þessu máli.
Hvernig afrita Èg the band? Það er nokkrar leiðir til að gera þetta.
Það eru STR afrita aðgerðir í C, en það er frábær auðvelt fyrir okkur að gera þetta á gamaldags hátt.
>> Fyrst láta mig reikna út hvað lengd s er.
Ég hefði getað sett þetta í lykkju heldur ég setti bara það út hér fyrir skýrleika.
Svo geymir N nú lengd upprunalegu band, sem er greinilega 5.
Þá á að lykkja ég er iterating frá 0 á allt að n,
og á hverjum endurtekning ég setja s [i] innan t [i].
Svo er það sem ég gefið í skyn með 2 fingrum mínum bendir á strengi áður.
Eins og þetta fyrir lykkju iterates svona, ég ætla að afrita h inn hér,
E inn hér, ég inn hér vegna þess að þetta er s, þetta er t.
Og svo loks, í línu 35 af hverju er ég að þessu?
Ég þarf að ganga úr skugga um að ég er að binda enda á band t.
Og ég gerði það með þessum hætti til að vera frábær skýr.
En leggja, einhvern, ef þú gætir, aðra leið til að gera þetta.
ÉG dont 'raunverulega þörf línu 35. Það er önnur leið til að gera þetta.
Já. >> [Inaudible nemandi svar] >> segja það hávær.
[Nemandi] Minna en eða jafnt. >> Einmitt.
Við gætum bara segja minna en eða jafnt og n, sem almennt hefur verið slæmt
vegna þess að næstum alltaf þegar við förum upp að jafn hlutur sem við erum að telja
við förum 1 skref of langt.
En mundu, hversu mörg bæti höfum vér tekið?
Við úthlutað strlen af ​​s og 5 + 1 fyrir samtals 6.
Þannig að í þessu tilfelli að við gátum gert eitthvað eins og this
þannig að við erum að afrita ekki bara halló heldur einnig \ 0 aftast.
Einnig gætum við notað fall kallast Str afrita, strcpy,
en það væri ekki nærri eins skemmtilegt.
En það er allt það er undir hetta.
Þá loks, að gera við það sama og áður.
Ég nýta t og þá skal ég halda því fram að upphaflega lítur út eins og þetta og eintak lítur út eins og þessi.
Svo skulum reyna þetta núna. Leyfðu mér að fara í hér. Gera copy2. Við munum zoom í og ​​hlaupa copy2.
Ég ætla að slá í Hello með lágstöfum, og reyndar fæ ég lágstafir Halló eins og upprunalega
en fjármagn Halló fyrir eintak.
En ég er ekki gert strax. Ég þarf að gera 1 síðastur hlutur hér.
46 og 47 er greinilega frjáls minni, en hvað þýðir það í raun þýtt?
Hvað er ég að gera, finnst þér, með því að kalla línu 46 og línu 47?
Hvaða áhrif hefur það með? Já.
[Inaudible nemandi svar] >> Einmitt.
>> Þú ert bara að segja stýrikerfi, hey, takk fyrir þessa minni.
Þú getur núna notað það til einhvers annars.
Og hér er fullkomið dæmi um gildi sorp.
Ég hef bara notað þetta minni til að skrifa niður orð halló í 2 stöðum,
hér, hér, hér og hér.
Svo er þetta h-E-L-L-o-\ 0.
En ég kalla línu 46 og línu 47, og þú veist hvað gerist þá í skilmálar af myndinni?
Reyndar, bíddu, þetta er sú gamla.
Þegar við tökum afrit, þessi strákur er í raun að benda hér,
Svo skulum við fjarlægja tölurnar og bara abstrakt burtu sem örvarnar okkar aftur.
Hvað gerist í þessari mynd þegar ég kalla frjáls?
[Inaudible nemandi svar] >> Ekki einu sinni.
Ef ég kalla frjáls á s og t - konar bragð spurningu - þessi mynd er ekki breytt á öllum
því að hringja í s og kallar ekki segir bara stýrikerfi,
hey, þú getur notað þetta minni aftur, en það breytir ekki að þetta null
eða sumir sérstakur karakter, er það ekki breyta þessu,
það breytir ekki klst eða e eða L eða l eða o hvorum stað fyrir nokkuð annað.
Miðað við myndina, um leið og þú kallar á ókeypis, ekkert breytist.
Og þar liggur uppruna gilda sorp því ef ég síðar í þessari áætlun
spyrja stýrikerfi fyrir meira minni með GetString eða malloc eða eitthvað svoleiðis
og stýrikerfi segir viss, ég hef 12 bæti af minni bara leystur upp,
nota þetta, hvað þú ert að fara að skila?
Þú ert að fara að skila klumpur af minni að við myndum venjulega draga
með spurningarmerkjum, en hvað eru þeir spurningarmerki?
Þeir koma til að vera h-E-L-L-O, h-e-L-L-o.
Þetta eru ný sorp okkar gildi eins fljótt og þú frjáls upp að minni.
>> There er a raunverulegur veröld vísbendingu hér líka.
Þetta gerist til að gera með vinnsluminni, en tölvur
í raun að gera það sama með diskinn.
Við munum tala um þetta sérstaklega með framtíð vandamál setja sem leggur áherslu á réttar.
En hvað gerist í raun og veru ef þú hafa sumir viðkvæmum fjárhagslegum skrá á skjáborðinu þínu
eða einhver sketchy JPEG og þú dregur það í ruslið,
hvað gerist þegar þú draga það í ruslið eða ruslafötuna?
Þú vissir hvað ég var að tala um. [Hlátur]
Hvað gerist þegar þú hefur dregið að vísbendingar í ruslafötuna eða ruslakarfa?
[Inaudible nemandi svar]
Jæja, svo varkár. Hvað gerist þegar þú gerir það?
Stutta svarið er ekkert, ekki satt?
Sketchy eða viðkvæmar skrá er enn bara sat þarna einhvers staðar í harða diskinum.
Flest af okkur að minnsta kosti hafa lært erfiðu leiðina sem þú þarft til að tæma ruslið
eða endurvinna kassi í raun eyða skrám.
Og reyndar, þegar þú smellir á rétt eða Control smelltu á ruslið getur
eða veldu File Empty Trash eða hvað
og þú tæma raun ruslakarfa eða endurvinna kassi, hvað raunverulega gerist þá við þessa mynd?
Meira ekkert. Svo gerist ekkert í raun á diski.
>> Og ef við bara tímabundið út fyrir efnið og skrifa - Ég skal nota bara aftan á þetta.
Svo nú er sagan er að breytast frá RAM, sem er þar sem forrit eru
meðan þú ert að keyra þá, á disk, sem er þar sem þeir eru geymdar til langs tíma
jafnvel þegar vald fer út, í bili - og við munum koma aftur til þetta í framtíðinni -
skulum þykjast bara að þetta táknar diskinn inni í tölvunni þinni
því aftur í dag og þeir nota til að vera hringlaga diskur, eins og disklingadrifið.
Svo ef þú hafa sumir viðkvæmum Excel skrá, gæti það tekið upp þessa klumpur af minni
á diski tölvunnar og ég er bara að teikna sömu handahófi 1s og 0s.
Þegar þú draga the skrá eins og það að ruslið er og endurvinna kassi,
bókstaflega ekkert gerist vegna þess að Apple og Microsoft hafa bara ákveðið
sem ruslakarfa og endurvinna kassi er í raun bara tímabundin tákn.
Kannski lokum OS mun tæma það fyrir þig, en yfirleitt, það er ekki neitt,
að minnsta kosti þangað til þú ert mjög lág í rúm.
>> Hins vegar, þegar þú ferð að tæma ruslið eða tómur endurvinna kassi,
álíka, ekkert gerist í þessari mynd.
Allt sem gerist annars staðar á tölvunni þinni, það er einhvers konar töflu.
Það er tegund af eins og a lítill Cheat Sheet sem segir að, við skulum segja, resume.doc,
svo ný þinn í Microsoft Word skrá notuð til að búa á stað 123 á harða diskinn þinn,
ekki í minni og ekki í RAM en á harða disknum þínum,
og sketchy JPEG lífi þínu á 456, og Excel skrá þinn býr í 789 eða hvar.
Þegar þú eyðir skrá við raunverulega tæma ruslið eða ruslafötuna,
þessi mynd er ekki breytt. The 0s og 1s á harða diskinum sem ekki fara neitt.
En þetta borð, þetta litla gagnagrunnur konar, breytist.
Þegar þú eyðir aftur þinn, er það eins og skrá er eytt í einhverjum skilningi,
en öll tölvan gerir er að gleyma hvar þessi hlutur býr á harða disknum þínum.
The 0s og 1s sem semja aftur eða einhver af þessum skrám eru enn ósnortinn.
>> Svo ef þú gerðir þetta óvart, það er enn a non-núll líkur
sem hægt er að endurheimta gögn með því að nota Norton Utilities eða einhver auglýsing hugbúnaður
Megintilgangur hennar í lífinu er að finna 0s og 1s sem hafa svoleiðis verið munaðarlaus,
gleymt hér en eftir hér, svo að þú getur fengið þinn gögn bak.
Eða réttar rannsóknarmenn með lögreglu eða FBI myndi reyndar taka a harður ökuferð
og í raun að leita að mynstur 0s og 1s að líta út eins og JPEG, líta út eins og Excel skrá,
og endurheimta þeim þannig jafnvel ef the tölva hefur gleymt þeim þar.
Þannig að eina leiðin í raun að eyða gögnum, sem við munum ræða í framtíðinni,
að skrúbba eða þurrka skrá eða harður diskur með -
Þú getur ekki raunverulega fá losa af the 0s og 1s
því annars myndi byrja með gígabæti disknum
og þú vilt enda með megabæti harður ökuferð ef þú stöðugt voru að eyða,
bókstaflega, 0s og 1s.
Svo hvað myndir þú gera ef þú vildir virkilega að ná lögin þín
og grundvallar vandamál er að það er enn 0s og 1s á diskinn?
Ég sé einhvern gesticulating sem þú vilt líkamlega brjóta tækið. Það vilja vinna.
[Hlátur] en ef það er góður af dýr lausn, hvað væri sanngjarnt?
Já. >> [Nemandi] Yfirskrifa þeim. >> Skrifa þá með hverju? >> [Nemandi] Aðrar upplýsingar.
Önnur gögn. Þú getur bara skrifa diskinn með 0s eða 1s eða öllum 0s, allt 1s.
>> Og það er örugglega það sem sumir af the hugbúnaður gerir.
Hægt er að kaupa hugbúnað eða jafnvel fá ókeypis hugbúnað,
og jafnvel byggt á Mac OS þessa dagana, minna í Windows,
er að geta til öruggur eyða.
Reyndar, ef þú vilt alls hlaupa heim í dag ef þú ert með Mac og gera þetta,
Ef þú hefur fengið smá dót í ruslið getur er hægt að gera Secure Empty Trash,
sem er einmitt það.
Frekar en bara eyða skrá hér, er það ekki eyða 0s og 1s hér
heldur breytist það bara þeim öllum, til dæmis, að 0s og punktur, punktur, punktur.
Svo ein af framtíð psets verður í raun að vera að viljandi batna gögn -
ljósmyndir sem við höfum tekið af fólki, stöðum og hlutum á háskólasvæðinu
sem við munum gera réttar mynd af minniskortinu á stafræna myndavél er,
sem er nákvæmlega sama hugmynd - og þú verður að vera áskorun til raunverulega finna
mynstur sem tákna JPEG á harða disknum þínum,
mikið eins og þessi fyrrum nemanda sem tölvupóst sem ég las fyrir nokkrum vikum gerði
að endurheimta ljósmyndir systur sinnar.
Hvers vegna eigum við ekki að taka 5-mínútna hlé hér, og við munum naumlega við meira minni.
Svo er hér þar sem hlutirnir fá smá huga-beygja, en það er mjög öflugt skref
til að skilja þetta allt meira.
Hér er forrit sem heitir pointers.c.
Það er meðal kóða sýnishorn dag.
Takið eftir að í fyrstu línum, 19 í 22, allt sem við erum að gera er eitthvað eins GetString
og aftur heimilisfang, geyma það í s.
Héðan til pset jafnvel 3 ef þú vilt en pset 4 og
þar sem þú getur byrjað að taka þessa þjálfun hjól burt sjálfur,
Það er engin ástæða til að láta sem strengir til lengur.
Það er vissulega allt í lagi að bara byrja að segja char *.
>> Sem innskot, í online tilvísanir og í bókum sem þú getur oft séð stjörnuna við hliðina á breytu.
Þú gætir jafnvel séð bil kringum báðum hliðum þess.
Allar þeirra eru virka rétt.
Fyrir nú, þó munum við staðla á þessari aðferð til að gera frábær skýr
að char * er eins og að segja karakter músina.
Það er gögn gerð.
Og þá er nafn breytunnar s í þessu tilfelli.
Þannig að við höfum fengið band og við höfum kallað það s.
Og svo niður eftir því ég er að gera í raun og veru smá brögðum.
Þetta er kallað músina tölur, sem er tegund af frábær einfalt.
Það þýðir bara að bæta við og draga númer á ábendingum.
En þetta virkar í raun.
Þetta forrit prentar virðist 1 staf í streng s á línu svo að niðurstaðan -
Bara svo við getum spilla þar sem þetta er að fara, að ábendingum, hlaupa ábendingum, láttu mig súmma inn
Nú láta mig tegund í eitthvað eins og HELLO og tegund inn
og það prentar 1 staf í hverja línu.
Allt þar til annað síðan, hefðum við gert þetta með ferningur krappi merki.
Við myndum hafa for lykkju og við myndum gera printf af S [i] og við myndum gera það aftur og aftur og aftur
með sviga n í lok hverrar línu.
En þetta forrit er öðruvísi. Þetta forrit er að nota, bókstaflega, tölur.
Svo hvað er að gerast hér?
Fyrst af öllu, áður en lykkja jafnvel framkvæmir, hvað, bara til að vera skýr, er í raun?
S er? >> [Nemandi] An heimilisfang. >> Netfang.
>> Og það er heimilisfang, um er að ræða halló, fyrsta staf í því orði, sem er h.
Svo er er, í þessu tiltekna dæmi, heimilisfang h.
Og hvað þýðir það að gera s + i?
Jæja, fer ég á 0 í þetta fyrir lykkju. Við höfum gert það mörgum sinnum.
Ég er að fara að fara upp á lengd band, greinilega.
Svo á fyrsta endurtekning þessarar lykkju er ég augljóslega 0.
Svo þetta mál er að segja s + i - heldur s +0--það er augljóslega bara s.
Svo er það * er hér?
Nú við erum að nota á stjörnuna í örlítið mismunandi hátt.
Leyfðu mér að fara á undan og fá losa af t vegna þess að við erum búin að tala um t og afrit af s.
Nú viljum við bara til að segja sögu sem felur í s.
Og svo á þessari stundu, eftir að hafa tegund band, veröld okkar lítur alveg eins og það gerði áður
með bara s geymslu heimilisfang h og almennt benda á band halló.
Ef ég nú línu eins * (s + i), við skulum reyna þetta.
Svo * (s + i). Leyfðu mér að einfalda þetta því þetta er 0, svo er þetta * (s +0).
Jæja, bíddu í eina mínútu. Einfalda frekar. Þetta er * (s).
Jæja, nú svigum eru konar heimskur, svo nú skulum bara gera * s.
Svo í fyrsta endurtekning þessa lykkju, þessi lína sem er lögð áhersla á, 26,
er ansi mikið jafngildir prentun þetta.
Hvað er gögn tegund af s *?
Í þessu samhengi, vegna þess að stjarna verður að vera við hliðina á S sig,
en nánar tiltekið, vegna þess að við erum ekki lengur að lýsa s,
við erum ekki að búa til breytu lengur, það er ekki minnst á char * í línu 26,
það er ekkert minnst á leitarorð band, við erum bara að nota breytu sem heitir s,
það kemur í ljós nú stjarna örlítið öðruvísi og að vísu, ruglingslegt merkingu.
* S merkir hér fara á heimilisfang í S og prenta hvað sem er þar.
Svo er hér, * s er - tegund af eins Chutes og stigar, fylgja á örina - hér.
Svo er þetta * s.
>> Og hvað fær prentaðar á fyrsta endurtekning þess lykkja í línu 26?
Ég prenta út% c, sem er tákn fyrir staf
þá \ n í nýja línu. * (S + i) þar sem ég er 0 er bara þetta.
Svo hvað bleikju birti ég í fyrir c%? H.
Í næsta endurtekning af Loop - þú getur sennilega séð hvar þetta er að fara -
næsta endurtekning ég er augljóslega 1, þannig að þetta þýðir s +1,
og svo núna er ég dont þurfa sviga því nú þarf stjarna að segja
fara til minni heimilisfang s +1.
Hvað er s? Skulum rúlla aftur í tímann og segja þetta ör nú er í raun ekki að gera okkur einhverjar favors.
Let er nánar tiltekið að segja að þetta er að geyma númerið 123
því að byrja á þessari band halló, þetta er tölu 123, þetta er 124, og svo framvegis.
Svo á seinni endurtekning þegar ég er að segja s +1, það er eins og að segja 123 1,
annars þekkt sem 124, svo það bleikju fær prentuð á annarri endurtekning?
E á netfangið minni 124.
Þá + aftur, 125, 126, 127, og þetta lykkja hættir sem betur fer áður en við fáum hér
því ég er að nota strlen til að tryggja að ég er ekki að telja of há.
Svo sem líka er það.
Aftur, þetta er bara eins og við hefðum gert fyrir viku síðan.
Leyfðu mér að skrifa það á línu hér að neðan, jafnvel þó við viljum ekki að gera bæði.
Þetta er eins og nú þetta.
>> Svo jafnvel þó s er strengur, sem við höfum verið að kalla það í margar vikur, er í raun a char *.
Svo ef við viljum vera frábær endaþarms, það er í raun rétt að skrifa sérstaka eðli
á ith stað með þessar tölur og tölur og þessa stjörnu rekstraraðila,
en satt, þetta er bara svo mikið hreinni. Svo er þetta ekki slæmt.
Engin ástæða til að hætta að gera línu 27 hér, en 26 er virkni sama,
og það er virkni sama fyrir nákvæmlega þeim ástæðum sem við höfum verið að ræða svona langt.
Og loks, 29 er bara gott starf.
Starf án s þýðir að nú þú ert að gefa til baka á minni sem GetString gaf þér
því aftur, eins og ég nefndi Mánudagur, GetString í margar vikur
hefur verið að kynna galla í kóðanum þínum.
Númerið fyrir vikur hefur haft minni lekur
þar sem þú hefur verið að biðja GetString fyrir minni en þú hefur aldrei verið að gefa hana aftur.
Og það var vísvitandi valin af okkur pedagogically
því það er bara of mikið að hugsa um snemma.
En nú þurfum við meiri samhverfu.
Ef þú biður um tölvu fyrir minni, eins og raunin er um GetString,
eins og raunin er greinilega fyrir malloc,
þú verður nú að pset 4 og áfram einnig frjáls slík minni.
Takið þetta er annað að segja int n.
Þú þarft ekki að losa þetta vegna þess að þú ekki kalla GetString
og þú ekki kalla malloc.
>> Og jafnvel ef þú kallaðir GetInt sem við munum að lokum sjá,
GetInt ekki tekið frá minni fyrir þig vegna þess að þú getur raunverulega fara um heiltölur
og flýtur og chars bara hvernig við höfum verið að gera í margar vikur.
Strengi, þó eru sérstök vegna þess í raun þeir eru að samtenging margra tákn.
Svo þeir eru bara öðruvísi chars og flot og ints og þess háttar.
En við munum koma aftur til þess fyrir löngu.
Einhverjar spurningar þá á þessa byrjun ábendingum? Já.
[Inaudible nemandi spurning]
Ah, mjög góð spurning.
Eitt af fáum hlutum C raunverulega gerir fyrir þig, sem er þægilegt,
er það tölur út fyrir þig hvaða stærð er á gögn tegund
og þá er svona margföldun fyrir þig.
Þetta er óviðeigandi að ræða chars því næstum alltaf bleikju er 1 bæti,
þannig virkar þetta bara.
En fyrir sakir umræðu, ef þú værir í raun að prenta heilar tölur
og þú varst að reyna að prenta út nokkur gildi s sem var að benda á heiltölu,
þú álíka myndi ekki þurfa að gera + 4 * i því bara int er 4 bæti.
Pointer tölur þýðir að C og þýðanda gera allt sem stærðfræði fyrir þig.
Allt sem þú þarft að hugsa um er talning í konar mannlega skilningi. Já.
[Nemandi] Ef þú lýsa streng inni a for lykkju, þú þarft að losa hana seinna?
Góð spurning.
>> Ef þú lýst band inni á fyrir lykkja, þú þarft að losa hana seinna?
Þú þarft aðeins að losa um minni sem þú skiptir við GetString eða með malloc.
Svo ef þú segir bara eitthvað eins og - láta mig setja hrokkið axlabönd núna svo allur kóðinn tengist.
Ef þú gerðir eitthvað, að vísu buggily, svona, char * t = s,
þú þarft ekki að losa t því ekki ekki í sér að tala um malloc eða GetString.
Ef hins þú gjörðir þetta, GetString, þá já, myndir þú þurfa að losa t.
Og í raun, aðeins tækifæri til að gera það er nú innan þessa lykkju, fyrir sömu útgáfu gildissvið
að við höfum rætt í fortíðinni.
Annars þú vilt að úthluta minni, úthluta minni, úthluta minni,
og í lok áætlunarinnar vegna þess að þú ert utan þess lykkju,
T er ekki til, en þú hefur aldrei sagt stýrikerfi
að þú hafir ekki þurft að minni lengur.
Og áður en langt um pset 4 eða 5 við munum búa þér forrit sem heitir Valgrind,
sem er svipað og í anda við GDB á að það er með nokkuð af Bogagöng tengi,
en tilgangur þess í lífinu er að hjálpa þér.
Og Valgrind er forrit sem mun í framtíðinni leita forrit
leita að leka minni, hvort sem GetString eða malloc,
sem við munum byrja að nota það því fremur sem við hætta að nota CS50 bókasafn eins mikið.
Við lokum nú svoleiðis á orðaforða og einhverskonar andlegt líkan í orði
sem að leysa þetta brotinn forrit.
>> Þannig að í þessum brotinn forrit, skipti virkar inni á skipti,
en það aldrei unnið í helstu því helsta liðið í x og y, muna,
og þá voru samþykkt á um gildi, svo að segja.
Afrit þeirra voru gefin til að skipta.
Í lok skipti, a og b-hefði örugglega verið skipst á,
en auðvitað x og y, sem við ræddum á mánudag, hafði ekki verið.
Þannig að ég legg í grænu hér að þetta er í raun lausnin hér.
Og í raun, láta mig fara stjörnurnar mína bara til að vera í samræmi
jafnvel þó, aftur, virkni skiptir ekki máli.
Í framtíðinni vikum munum útskýra hvenær og hvers vegna það skiptir máli.
Svo í grænu nú er til lausn.
Frankly lítur það a heild einhver fjöldi Messier því að ég hef allar þessar stjörnur.
Leyfðu mér að benda á eitt.
Efsta lína hér þar sem það segir int * a og int * B
er í grundvallaratriðum gera the sami hlutur eins og það hefur alltaf gert.
Það er lýsa 2 rök eða breytur til að skipta,
fyrsta sem er int bendillinn kallað,
annað sem er int bendill sem heitir b.
Það eina sem er nýtt á þessum tímapunkti er sú staðreynd að það er stjarna þarna.
>> Hvað þýðir það? A er ekki int, b er ekki int.
A er heimilisfang af int og b er heimilisfang mismunandi Int.
Hérna, þetta er þar sem ég viðurkenni C fær ruglingslegt.
Nú erum við með stjörnu, en það hefur mismunandi merkingu í þessu samhengi.
Þar sem við erum ekki að lýsa yfir ábendingum sem við erum hérna,
hér erum við að dereferencing hluti.
Svo tæknilega, stjarnan í þessu samhengi við fyrsta, annað, og þriðja lína inni í skipti
er dereference stjórnandi, sem þýðir bara að fara þarna.
Svo bara eins og fingur minn fylgdi á örina h,
* Þýðir að fara á þetta netfang og finna mér int sem er þar.
* B muni fara á heimilisfang og framhjá mér hvað er þarna.
Svo skulum gera annað uppkast að mynd frá mánudegi nú með stafla af römmum,
neðri einn sem er að fara að vera aðal,
efri einn sem er að fara að vera skipti,
þannig að heimurinn okkar lítur, eins og Mánudagur, eins og þetta.
Hér er klumpur af minni sem helstu er að fara að nota.
>> Muna frá mánudegi að áætlunin hafði bara 2 breytur,
einn heitir x og einn hét y, og ég hafði sett tölurnar 1 og 2 þar.
Nú þegar ég kalla skipta eins og ég gerði á mánudaginn,
áður þegar ég notaði rauða útgáfu af þessu forriti, sem lítur út eins og þetta,
Ég fékk 2 breytur, A og B, og hvað við vorum að skrifa hér og hér?
Bara 1 og 2, bókstaflega afrit af x og y.
Í dag við að breyta því.
Nú í stað þess að farið er í ints a og b við ætlum að fara í 2 tölur.
Þeir netföng gerast að benda á ints, en þau netföng eru ints ekki sjálfir.
Þeir eru heimilisföng. Það er eins og póstfang í staðinn.
Svo nú þurfum við bara að gefa mér aðeins meiri upplýsingar á skjánum.
Þetta er minni tölvan mín eins og það hefur verið í allan dag.
Nú þurfum sumir handahófi númerakerfið.
Svo við skulum bara segja, bara tilviljun, að þetta er minni heimilisfang 123, 124.
Við skulum bara segja að þetta er 125, það er 126, og svo framvegis, en það er algerlega handahófskennt.
Við þurfum bara sumir númerakerfi í minni mínu.
Svo nú þegar ég fara í raun í X og Y, ég er ekki að fara að fara í x og y;
Ég ætla að fara í á póstfangið, svo að segja, af x og y
þannig að það verður geymt hér og hér er ekki 1 og 2,
en ef þú getur séð lítill textinn minn, hvað fær liðið hér og hér?
[Inaudible nemandi svar] >> Einmitt. 123 fær setja hér og 124 verður sett hér.
>> Nú, vegna þess að ég nota á stjörnuna í fyrstu línu leið upp hér að ofan,
áætlun mín veit bara að 123 og 124, jafnvel þótt þeir séu augljóslega heiltölur
að nokkur maður gæti taka eftir, ættu þeir að túlka sem viðtakandi, tölustafir viðtakandi.
Þeir eru ekki í sjálfu sér ints, þeir heimilisföng,
og það er vegna þess að ég hef sett skýrt stjörnum þar.
Svo nú í fyrsta, annað, og þriðja lína mína raunverulegu kóða hvað gerist hér?
Við skulum draga restina af myndinni.
Tmp er bara eins og það var á mánudaginn. Ekkert sérstakt tmp.
Það er bara staðbundin 32 bita breyta, og inni að ég er greinilega að geyma verðmæti * a.
Nú, ef ég sagði bara tmp = a, hvað myndi ég setja hér? >> [Nemandi] 123.
123. En það er ekki það sem ég er að gera.
Ég er að segja tmp = * a. Stjörnur muni fara þar.
Svo hér a, 123. Hvernig fer ég þangað? Þykjast eins og það er ör.
Jæja, það er, 1. Svo hvað verður geymd í tmp, virðist? Bara 1.
Svo í öðrum orðum, tmp er * a, * þýðir að fara á heimilisfang sem er nú í,
sem er greinilega 123.
>> Jæja, hér erum við í stað 123, ég á 1,
þannig að ég ætla að setja númer 1 þarna.
Nú hvað á ég að gera í línu 2, * a = * b?
Þessi er svolítið meiri þátt því nú hvað er? Það er 123.
Svo * sem er þar? Rétt þar sem ég var áður. Svo fara þangað. Allt í lagi.
Nú, loksins, og þá loksins mun byrja að skynsamleg, vonandi,
* B þýðir hvað er í b? 124. Þannig að ég þarf að fara þangað, sem er 2.
Hvað set ég þar?
2 fer í hér því * B fer í * a. Svo ég geri það.
Og þú getur nú þegar séð, ef til vill, að við erum svo mikið nær
að leysa þetta heimskur, einfalt vandamál rétt í fyrsta skipti
því að nú höfum við enn recollection um hvað x var
við höfum 2 eintök, að vísu, að y,
en lína 3 segir nú * b.
Svo er hér b. * B muni fara þar. Svo hvar er staðsetning 124?
Það er greinilega hér. Hvað set ég hér? Vitanlega, tmp.
Svo nú er ég að gera þetta. Þannig að ég hef 1 hér og 2 hér.
Og nú hvað um þetta allt, að 123, og 124, og 1?
Um leið og skilar skipti, þetta minni er svo gott sem misst
því eins fljótt og skilar skipti, stýrikerfi
er frjálst að nota þessi minni í framtíðinni.
Aðeins minni aðal-neðst á þessari svokölluðu stakkur festist í kring.
>> Og svo við höfum loksins nú að vinna útgáfa.
Leyfðu mér að fara í swap.c og taka eftirfarandi.
Efst á dagskrá sem ég hef breytt frumgerð mína að vera int * a og int * b.
Svo það eina sem ég breytt til að fara úr rauðu, sem var slæmt, í grænt, sem er gott,
er ég við þessar stjörnur í dag.
En hérna í skipta sig ég þurfti að afrita, líma það var bara á mynd.
Ég er með stjörnu hér, stjarna hér - sem passar við frumgerð -
og svo öll þessi atriði hafa nú stjörnurnar nema tmp
því að nota tímabundið breytu, það er ekkert nýtt þar.
Ég þarf bara tímabundna geymslu fyrir INT.
Þannig að við þurfum ekki stjörnu þar.
Við þurfum bara á stjörnuna þannig að við getum yfir þessa tegund af handahófi mörk
milli þessara 2 ramma í minni tölvunnar minnar.
En eitt síðasta sem þarf að breyta, og þú gætir hafa glittir það nú þegar.
Hvaða önnur lína er augljóslega öðruvísi núna? >> [Nemandi] & x.
>> Já, þannig að 25 er síðasta lína af kóða sem ég þarf að breyta til að þetta virki.
A viku síðan og jafnvel á mánudaginn lína 25 leit út eins og þetta, skipta x og y,
og þetta var bara brotinn vegna þess að ef þú segir skipti (x, y)
þú ert að gefa afrit af x og y til að skipta á, þá er það að gera hlutur hennar,
en þú ert aldrei að breyta X og Y sjálft.
Svo jafnvel ef þú hefur aldrei séð þetta staf áður með merkið í kóða,
bara taka giska. Hvað merkið gera, virðist?
[Nemandi] Tekur á netfangið. >> Tekur á netfangið.
Svo merkið er að segja gefa mér heimilisfang x.
Hver veit hvar það er? Það verður að vera 123. Mér er sama. Bara gefa mér heimilisfang x.
& Y þýðir að gefa mér heimilisfang y.
Og á þeim tímapunkti sagan er fullkomlega í samræmi við myndina við brá fyrir augnabliki.
>> Svo ég ætla að viðurkenna ábendingum, vissulega fyrir mig þegar ég byrjaði fyrst að læra þetta,
var ákveðið einn af the herða hluti til að vefja huga mínum í kring.
En átta sig, sérstaklega þar sem við halda áfram að spila með þessar tegundir af hlutum,
Ef þú brýtur það niður í þessum frábær einfalt konar intellectually uninteresting vandamál
á bara að færa tölur um, svarið við mikið af rugli með ábendingum
raun má úr þessum mjög undirstöðu búnað.
Hér er heimilisfang. Farðu þarna með stjörnu.
Eða öfugt, hér er merkið. Reikna út hvað heimilisfangið raunverulega er.
Allt í lagi.
Svo hvar er allt þetta minni koma frá?
Við höfum dregið þessa mynd nokkrum sinnum, og ég halda efnilegur að við munum koma aftur að honum,
en hér er byggður á minni tölvunnar
það er a lítill fleiri merktar en chalkboard okkar hér er.
Textinn hluti efst sýnir hvað varðar program?
[Inaudible nemandi svar] >> miður? Segðu aftur.
[Nemandi] Raunveruleg program. >> Raunveruleg program.
>> Svo 0s og 1s sem þú hefur safnað saman eftir að skrifa C kóða og þá gangi Clang
og búa 0s og 1s endar getting matur þar í minni
vegna þess að þegar þú tvísmellir á táknið á Mac eða PC
eða keyra skipun eins og Mario á hvetja þinn, 0s þitt og 1s úr diski
fá hlaðinn inn í minni þannig að tölvan getur vinna þá
og framkvæma þær hraðar.
Svo frumstilla gögn og forsniðinn gögn, munum við ekki tala mikið um þá,
en þeir eru bara alþjóðlegt breytur.
Frumstilla þýðir alþjóðlegum breytur sem þú gafst gildi til;
forsniðinn þýðir alþjóðlegum breytur sem þú hefur ekki enn gefa gildi til.
Þá er það þessi umhverfisbreytur sem ég alveg Wave hönd mína á,
en þeir eru og sem geymir hluti eins og notandanafn þitt
og önnur tegund af lægri upplýsingar.
En juiciest stykki skipulag minni þitt er þetta hlutur sem kallast að stafla og hrúga.
The stakkur aftur, að vera ljóst, er minni sem er notað þegar aðgerðir eru kallaðir,
þegar það eru staðbundnar breytur
og þegar það eru þættir sem liðin í kring.
Allt sem gerist í stafla.
Hrúga við höfum ekki talað um, en taka giska sem notar hrúga.
Bara mismunandi klumpur af minni.
Það gerist að vera dregin hér efst, en það er handahófskennt myndrænu samningur.
Hver er greinilega verið að nota minni frá hrúga í margar vikur?
Það er tæknilega þú heldur óbeint. >> [Nemandi] GetString.
GetString og malloc. Svo hér er grundvallar munur.
>> Þú veist að á undanförnum vikum að ef þú þarft minni, bara að lýsa yfir breytu.
Ef þú þarft mikið af minni, lýsa fylki rétt inni í virka.
En vandamálið sem við höfum haldið frammi fyrir er ef þú lýsa breytum staðnum inni í aðgerðum,
eins fljótt og skilar, hvað verður minni og þeim breytur?
Bara svona það er ekki lengur þitt, ekki satt? Það hverfur bara konar eðli.
Það er enn líkamlega þar, augljóslega, en það er ekki lengur rétt til að nota.
Þetta er augljóslega erfið ef þú vilt að skrifa aðgerðir í lífinu
sem í raun tekið frá minni og ekki gefa það til baka strax.
Tilfelli í benda: tilgangur GetString í lífinu er að hafa ekki hugmynd um fyrirfram
hversu stór af a band ég ætla að slá á lyklaborð,
en það hlýtur að vera fær um að verja minni að halda Davíð eða Hello
eða í heild ritgerð sem notandinn gæti hafa slegið inn
Svo GetString hefur verið með malloc.
Malloc því verður að nota ekki á mánudaginn;
Þess í stað er að nota þetta hlutur sem kallast hrúga.
Það er ekkert öðruvísi minni. Það er ekki hraðar eða hægar eða eitthvað svoleiðis.
Það er bara líkamlega á öðrum stað.
>> En reglan er að minnið sem er úthlutað á hrúga
verður aldrei tekið frá þér fyrr en þú hringja - til að taka giska - frjáls.
Með því móti, hvaða minni þú biður um á mánudaginn bara með því að lýsa fjölda
eða lýsa breytu eins og við höfum verið að gera í margar vikur,
að með því að vanræksla endar á mánudaginn.
Og það virkar mikið 90% af þeim tíma, en á þeim rarer tilefni
þar sem þú vilt að úthluta minni og halda því í kring,
þá þarftu að nota virka eins malloc.
Eða höfum við notað virka eins GetString, sem síðan notar malloc.
Við skulum sjá hvar það gæti brjóta niður og kíktu á Binky.
Við munum koma aftur til að í framtíðinni.
Hér er frábær einfalt forrit sem í fyrstu 2 línurnar gerir hvað?
Á ensku, hvað þessar fyrstu 2 línur af kóða gera innan helstu?
[Inaudible nemandi svar]
Varlega. Það þýðir ekki að gefa mér heimilisfang x eða y.
[Nemandi] Veitir ábendingum til ints. >> Good. Gefðu mér 2 ábendingum til heiltölur.
Með öðrum orðum, að gefa mér 2 klumpur af minni sem ég halda teikningu í dag,
jafnvel þótt ég eytt það nú, eins og reitum.
Gefðu mér 2 klumpur af minni, er einn hét X, kallaði einn y -
Fyrr ég nefndi það s og t - og það er tegund af að klumpur af minni?
Það er að fara að geyma heimilisfang.
Það er af gerðinni int *.
>> Svo heimilisfang heiltala verður að lifa í X,
heimilisfang heiltala verður að lifa í y,
en í upphafi, hvað er inni í x og y? Hver veit? Sorp gildi.
Það hefur ekkert að gera með ábendingum.
Ef við höfum ekki setja eitthvað þarna, hver veit hvað er í raun það?
Nú, x. Hvað gerist hér? Þetta er legit nú því x er bendir. Það er int *.
Svo þýðir að ég get sett í x heimilisfang sumir klumpur af minni.
Hvað er malloc aftur? Perfect, skilar það heimilisföng,
heimilisfang fyrsta bæti í heild klumpur af minni.
Hversu margir bæti þetta úthlutun virðist, til dæmis, í tækið?
Hvað er stærð á int? 4.
Ef þú hugsa til baka til 1. viku, það er ekki frábær mikilvægt að alltaf að muna að
en í þessu tilviki það er gagnlegt að vita, 4 bæti.
Þannig að þetta er úthlutun á hrúga 4 bæti
og það er aftur veffang fyrstu mér geðþótta.
Nú, hvað er x að gera?
A * x = 42 er að gera hvað?
Ef á þessum tímapunkti í sögunni höfum við x, sem lítur svona út með einhverjum sorp gildi,
þetta er nú Y með einhverju sorp gildi, nú í línu 3 sem ég hef úthlutað 4 bæti.
Þessi mynd lítur í raun svona.
Eða nánar tiltekið, ef þetta er handahófskennt tölu 123, þetta er það saga okkar nú lítur út.
* X = 42 nú þýðir hvað? Það þýðir að fara á netfangið 123 og setja fjölda 42 þar.
Ég þarf ekki að draga þessar línur vegna þess að við erum ekki að gera strengi.
>> Ég ætti að hafa bara skrifað það svona, og bara fyrir sakir sýning er,
42 sem int konar tekur upp mikið pláss, 4 bæti.
Svo það er það sem gerðist þar, en það er vandamál nú.
* Y = 13. Hvað er að fara að gerast hér?
Vandamálið er * y í einfalda heimi þýðir bara fara á heimilisfang í y.
Hvað er í y? Það er einhver sorp gildi.
Svo skulum gera ráð fyrir að það sorp gildi er 5551212, eitthvað brjálaður eins og þessi.
* Y þýðir að fara að takast 5551212.
Það er eins hérna. Það er ekki til, til dæmis.
Svo fær * y 13 þýðir að ég er að reyna að draga 13 hér. Það er ekki til.
Ég hef farið yfir hluti á töfluna. Hvað fæ ég?
Það dulinn skilaboð skiptingu kenna vegna þess að ég er að reyna að setja í minni
gildi eins og 13 á stað sem er ekki til.
The hvíla af the program might vinna í lagi, en allt fram að þeim tímapunkti að það gerir það ekki.
Svo skulum reyna að segja þessa sögu.
Við munum koma aftur til að þegar við höfum talað um álög.
Förum aftur í þetta og gera með þetta heitir Binky,
sem muna er Stanford prófessor sitja heima að spila með claymation,
að segja söguna af nákvæmlega sama program.
Það er bara um 3 mínútur að lengd. Hér höfum við Binky.
[Karlkyns ræðumaður á Video] Hey Binky, vakna. Það er kominn tími fyrir gaman músina.
[Binky] Hvað er það? Frekari upplýsingar um punkta? Ó, Goody!
[Karlkyns ræðumaður] Jæja, til að byrja, held ég að við erum að fara að þurfa nokkra punkta.
>> [Binky] lagi. Þessi kóði ráðstafar 2 ábendingum sem getur bent til heiltölur.
[Karlkyns ræðumaður] lagi. Jæja, ég á 2 ábendingum, en þeir virðast ekki vera að benda á neitt.
[Binky] Það er rétt. Upphaflega, ekki ábendingum benda ekki til neitt.
Það sem þeir benda á eru kallaðir pointees, og setja þá upp er sérstakt skref.
[Karlkyns ræðumaður] Ó, hægri, hægri. Ég vissi það. The pointees eru aðskilin.
Ger, hvernig úthluta þér pointee?
[Binky] lagi. Þessi kóði úthlutar nýja heiltölu pointee, og þessi hluti setur x til að benda á það.
[Karlkyns ræðumaður] Hey, sem lítur betur.
Svo gera það gera eitthvað. >> [Binky] lagi.
Ég ætla dereference músina X að geyma númer 42 í pointee hennar.
Fyrir þetta bragð ég þarf töfrasprota minn dereferencing.
[Karlkyns ræðumaður] galdur vendi þín dereferencing? Það er frábært.
[Binky] Þetta er það kóðinn lítur út. Ég ætla bara að setja upp númer og ... [Pabbi hljóð]
[Karlkyns ræðumaður] Hey útlit, þar sem hún fer.
Svo gera dereference á x þannig á örina til að fá aðgang pointee þess,
í þessu tilfelli til að geyma 42 þar.
Hey, reyna að nota það til að geyma númer 13 í gegnum hinn músina, y.
[Binky] lagi. Ég verð bara að fara yfir hér að y og fá númer 13 á fót
og þá taka vendi af dereferencing og bara ... [Buzzing hljóð] Vá!
[Karlkyns ræðumaður] Ó hey, það virkaði ekki.
>> Segja Binky, ég held ekki dereferencing Y er góð hugmynd
því að setja upp pointee er sérstakt skref
og ég held ekki að við gerðum alltaf það.
[Binky] Hmm, góður punktur.
[Karlkyns ræðumaður] Já. Við úthlutað músina y en við aldrei setja það að benda á pointee.
[Binky] Hmm, mjög athugull.
[Karlkyns ræðumaður] Hey, þú ert að leita vel þar Binky.
Getur þú festa hana þannig að y bendir á sama pointee sem x? >> [Binky] Jú.
Ég nota töfrasprota minn verkefni músina.
[Karlkyns ræðumaður] Er að fara til vera a vandamál eins og áður?
[Binky] Nei, þetta er ekki snerta pointees.
Það breytist bara einn músina til að benda á það sama og annað. [Pabbi hljóð]
[Karlkyns ræðumaður] Ó, ég sé. Nú y bendir á sama stað og x.
Svo bíða. Nú Y er fastur. Það hefur pointee.
Svo þú getur prófað vendi af dereferencing aftur að senda 13 yfir.
[Binky] Uh, allt í lagi. Hér fer. [Pabbi hljóð]
[Karlkyns ræðumaður] Hey, horfa á það. Nú dereferencing verk á y.
Og vegna þess að ábendingar eru að deila því einn pointee, bæði þeir sjá 13.
[Binky] Já, hlutdeild. Whatever.
>> Svo erum við að fara að skipta á stöðum núna?
[Karlkyns ræðumaður] Ó útlit, við erum út á tíma. >> [Binky] En -
[Karlkyns ræðumaður] Mundu bara 3 músina reglur.
Númer 1, þá er einfaldasta uppbygging er að þú ert með músina og bendir á að pointee.
En bendillinn og pointee eru aðskilin, og algeng villa er að setja upp músina
en að gleyma að gefa honum pointee.
Númer 2, bendill dereferencing byrjar á músina og fylgir ör sína yfir
til að fá aðgang pointee hennar.
Eins og við allur vita, þetta virkar aðeins ef það er pointee,
hvers konar fær aftur að ráða númer 1.
Númer 3, bendillinn framsal tekur einn músina og breytist það
að benda á sama pointee og annað músina.
Svo eftir að verkefni, sem 2 ábendingum mun benda til sömu pointee.
Stundum það er kallað hlutdeild.
>> Og þessi 'allur there er til það virkilega. Bless-bless núna.
Þetta er Binky. Þetta er CS50. Við munum sjá þig í næstu viku. [Lófaklapp]
>> [CS50.TV]