>> [Tónlist spila]
DAVID J. MALAN: Allt í lagi.
Þetta er CS50, og þetta er endir viku Four.
Og einn af the efni í dag er að á stafrænu réttar,
listin að jafna upplýsingar.
Og reyndar, jafnvel þótt þú ert í the miðja
núna friðar á þriggja og Breakout, í næstu viku,
áhersla verður lögð á einmitt þetta lén.
>> Svo einn af the kælir störf sem ég alltaf hafði var aftur í framhaldsnám,
þegar ég var að vinna fyrir the heimamaður Middlesex County District Attorney er
skrifstofa, gera réttar vinna.
Svo í raun, Massachusetts State Police, stundum,
þegar vinna á málum myndi koma í hlutum eins og harða diska
og disklingadrifið og minniskort og þess háttar.
Og þeir myndu afhenda þau mér og lærifaðir minn,
og markmið okkar var að finna vísbendingar, ef það væri einhver á þessum miðlum.
Nú, þú gætir hafa séð fagurt af þessum heimi réttar
í fjölmiðlum, sjónvarpi og kvikmyndum.
En starfið sem ég hafði, og eflaust að heimurinn,
er ekki alveg eins og þú myndir sjá það.
Við skulum taka a líta á það sem þú hefur sennilega séð.
[Vídeó spilun]
-OK.
Nú, við skulum fá gott að líta á þig.
>> [Tónlist spila]
>> -Hold Það.
Hlaupa til baka.
>> -Bíddu.
Fara til hægri.
-Það.
Frysta það.
-Full-Skjár.
>> -OK.
Frysta það.
-Tighten Upp á það, munt þú?
>> -Vector Í á sem strákur frá bak hjólinu.
>> -Zoom Í hérna á þessum stað.
>> -Með Réttum búnaði, mynd má stækka og skerpti.
>> Hvað er það?
>> -Það Er aukahlutur program.
>> Má ég ljóst að upp eitthvað?
>> Ég veit ekki.
Við skulum auka það.
>> -Enhance Kafli A6.
Ég aukið smáatriði, and--
Ég held að það er nóg til að auka.
Losa það á skjánum mínum.
>> Ég aukið spegilmynd í auga hennar.
-Hringjum Er keyrt þetta í gegnum vídeó aukahluti.
>> -Edgar Er hægt að auka þetta?
>> -Hang Á.
>> -Ég Hef verið að vinna á þessum íhugunar.
>> Spegilmynd -Er einhvers.
>> -Reflection.
-Það Er spegilmynd af andliti mannsins.
>> -The Spegilmynd!
-Það Er spegilmynd.
-Zoom Inn á spegil.
Þú getur séð spegilmynd.
>> Má ég bæta ímynd hér?
Má ég bæta það?
Megum við auka þetta?
Má ég bæta það?
-Hold Á sekúndu.
Ég auka.
-Zoom Inn á dyrnar.
-Times 10.
-Zoom.
-Til Að færa inn.
-More.
-Bíddu, Hætta.
-Stop.
-Pause Það.
-Rotate Okkur 75 gráður um lóðrétt, vinsamlegast.
>> -Stop.
Fara til baka í hálfu um dyrnar aftur.
>> -Got Mynd eyki sem getur punktamynd?
>> -Kannski Við getum notað Pradeep Singh Aðferð til að sjá í gluggum.
>> -The hugbúnaður er ástand af the list.
>> -The eigingildið er slökkt.
>> -Með Hægri samsetning algorithms--
>> Tekið lýsing -Hann reiknirit til næsta stig,
og ég get notað þær í auka þessa mynd.
>> -Lock Á og stækka z-ásinn.
>> -Enhance.
Auka.
-Enhance.
-Freeze Og auka.
[END vídeó spilun]
DAVID J. MALAN: Svo þeir eru öll orð, en þeir voru ekki
notað í setningum rétt.
Og reyndar í framtíðinni, hvenær sem er, vinsamlegast, þú heyrir einhvern segja orðið,
"Auka" chuckle bara svolítið.
Vegna þess að þegar þú ert að reyna að auka, til dæmis, þetta er það sem gerist.
>> Svo hér er heillandi mynd.
Þetta er eigin Daven CS50 er.
Og geri ráð fyrir að við vildum áherslur í á TWINKLE í auga hans,
eða spegilmynd af slæmur strákur sem var greinilega
tekin af öryggi myndavél.
Þetta er það sem gerist þegar þú zoom í á myndinni sem
hefur aðeins endanlegri fjölda bita í tengslum við það.
>> Það er það sem þú vilt fá.
Og reyndar, í auga Daven er er heldur fjórir, kannski sex pixlar
að semja nákvæmlega hvað var Glimmering þar.
Svo Vandamál Set Fjögurra mun að lokum hafa þú kanna heiminn, sérstaklega
með eðli eitthvað Við köllum skrá I / O, þar
I / O er bara fínt leið til að sagði inntak og úttak.
>> Svo hingað til, allar milliverkanir Við höfum haft með tölvu
hafa að mestu verið með þínum lyklaborð og skjár,
en ekki svo mikið með harða diskinn, eða vistun skráa utan þær sem þú
sjálfur skrifa.
Áætlanir þínar svona langt hafa ekki verið að búa til, og sparnaður,
og uppfæra eigin skrár sínar.
>> Jæja, hvað er skrá?
Jæja, eitthvað eins og JPEG.
Þetta er mynd sem þú gætir hafa eða senda á Facebook
eða sjá hvar á vefnum.
Reyndar, að mynd við bara sá um Daven var JPEG.
Og hvað er áhugavert um skrám eins JPEG
er að þeir geta verið greind, yfirleitt, með ákveðnum mynstrum af bitum.
>> Í öðrum orðum, það er það sem greinir á JPEG frá GIF
frá Smellur frá Word skjal frá Excel skrá?
Jæja, það er bara öðruvísi mynstur bita.
Og þessi mismunandi mynstur eru venjulega við upphaf þessara skráa.
>> Þannig að þegar tölvan þín opnar Word doc, eða þegar tölvan opnar JPEG,
það lítur yfirleitt á að Fyrstu nokkur bitar í skránni.
Og ef það viðurkennir munstur, það segir, ó, þetta er mynd.
Leyfðu mér að sýna það að notandi sem grafík.
Eða, ó, þetta lítur út eins og Word doc.
Leyfðu mér að sýna hana til notandi sem ritgerð.
>> Svo til dæmis, JPEG, það kemur í ljós, eru
nokkuð háþróuð undir hetta.
En fyrstu þrjú bæti mest á hverjum JPEG byrjar með þessum þremur tölum.
Svo bæti núll, einn, og tveir eru í mest á hverjum JPEG, 255 og svo númerið
216, þá er fjöldi 255.
>> Og það sem þú munt vera fær um að byrja að gera í næstu viku
er í raun poking undir hetta skráa eins JPEG
og eins punktamynd skrá, og sjá hvað er alltaf verið þar eins lengi
eins og þú hafir verið að nota tölvuna.
>> En hvað er það er ekki venjulega skrifað eins aukastaf númer eins og þetta.
Tölvunarfræðingar ekki hafa tilhneigingu til að tala í aukastaf.
Þeir gera ekki raunverulega tala í tvöfaldur.
Venjulega, þegar við viljum til að tjá tölur,
við notum í raun og veru sextánskur, sem þú getur muna
frá, segja, Heimadæmi Einn, sem áskorun
þú að hugsa um mismunandi kerfi.
>> Við, að sjálfsögðu, ég þekki með aukastaf, núll til níu.
Við ræddum um tvöfaldur.
Og við gerum í raun ekki hafa að nota það mikið hér
á út, vegna þess að tölvur vilja nota það.
En forritarar munu mjög oft, en ekki alltaf,
nota sextánskur, sem bara þýðir þú ert 16 stafi í stafrófinu þinni,
öfugt við tvo eða 10.
>> Svo hvernig gera telja að þú hærri en níu í sextánskur?
Hægt fara 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, bara með venju.
En hvað er lykillinn er að hver af þessum er einn tákn.
Það er engin 10.
Það er engin 11, í sjálfu sér, vegna þess að hvert með tölustöfunum þínum, rétt eins og í aukastaf
og rétt eins og í tvöfaldur, ætti bara vera einn staf, því venju.
>> Svo að þá er stafrófið sem við höfum til ráðstöfunar fyrir sextánskur.
Svo hvaða hjartarskinn a JPEG líta út ef þú voru að skrifa út þá fyrstu þrjú
bæti ekki eins aukastaf en til dæmis, eins og sextánskur?
Og hvers vegna er álög jafnvel allt sem að gagni?
>> Jæja, a fljótur líta á dæmi.
Þannig að ef ég skrifa út bits sem tákna þessar aukastaf Numbers
þetta gæti verið smá ryðgaður nú frá nokkrum vikum til baka,
en vinstri einn og rétt sem eru nokkuð auðvelt.
255 var stærsta númerið sem við gæti táknað með átta bitum.
Það var allt sjálfur.
Svo eina sem er mildilega áhugavert er miðja einn.
Og ef þú gerir svona út stærðfræði, muntu ráða að, örugglega,
að mynstur í einum og núll táknar 216.
Svo skulum kveða bara fyrir nú að þetta eru réttar.
En af hverju er þetta áhugavert?
>> Jæja, bæti, að sjálfsögðu, er átta bitar.
Og það kemur í ljós að ef þú heldur af bæti sem tveimur klumpur af fjórum bitum,
eins og þetta.
Leyfðu mér að bæta bara smá pláss.
Svo áður, eftir.
Ég hef bara bætt við nokkrum hvítt rúm fyrir sakir visualization er hér.
Hvernig gætum við tákna nú í, segja, sextánskur hvert quad bita,
hvert sett af fjórum bitum?
>> Svo til dæmis, á vinstri nú höfum við 1111 í tvöfaldur.
Hvað er að tala í aukastaf, ef þú gera út stærðfræði?
Þú hefur sjálfur stað, twos stað, sem Fours stað, og eights stað.
>> Áhorfendur: 15.
DAVID J. MALAN: Það er 15.
Þannig að ef við gerum átta plús fjórir plús tveir plús einn, fáum við 15.
Svo ég gæti skrifað niður 15 hér 1111, en allt lið hér
er sextánskur, ekki aukastaf.
Svo í stað þess að skrifa niður 15, 1-5, Ég ætla að skrifa það í álög,
sem ef þú hugsa til baka, ef þú ert núll í f, hvað er 15 að fara að vera?
Áhorfendur: f.
DAVID J. MALAN: Svo kemur í ljós að það er f.
Og þú getur unnið það út með því að segja, vel, ef a er 10, þá f er í lagi 15.
Svo reyndar gætum við umrita þetta sama mengi af tölum sem f f.
Og þá ef við gerum smá af stærðfræði, Við munum ráða að það er d.
Átta er frekar auðvelt, vegna þess að við hafa einn í eights stað.
Og þá höfum við a par fleiri m m er.
>> Svo hvað menn hafa tilhneigingu til að gera með samningnum þegar þeir nota sextánskur er þeir bara
skrifa þetta svolítið meira succinctly, að losna við mest af þessu hvíta rými.
Og bara til að vera frábær ljóst að lesendur að þetta er sextánskur,
einfalt samningur milli menn er þú skrifar núll
x, sem hefur enga merkingu aðra en sjónræn auðkenni á,
hér kemur álög tala.
>> Og þá, setja þér tvo tölustafi, f f-í þessu tilfelli, þá d a, þá f-f.
Svo löng saga stutt, sextánskur tilhneigingu bara
til að vera gagnleg vegna þess að hver af sínum tölustafir, núll í f, fullkomlega línur
upp með mynstur af fjórum bitum.
>> Svo ef þú ert með tvær sextánskur tölustafir, núll í F, aftur og aftur,
sem gefur þér fullkomlega átta bitar eða eitt bæti.
Svo er það hvers vegna það hefur tilhneigingu til að vera á hefðbundinn gagnlegt.
Það er engin vitsmunalegum efni í raun umfram það,
önnur en raun gagnsemi hans.
>> Nú JPEG eru ekki aðeins skrá snið fyrir grafík.
Þú gætir muna að það eru skrár eins og þetta í heiminum,
að minnsta kosti frá nokkrum árum.
>> Þannig að þetta var í raun sett í Windows XP
á milljónum tölvum um allan heim.
Og þetta var punktamynd skrá, BMP.
Og punktamynd skrá, eins og þú munt sjá næsta viku, bara þýðir mynstri punkta,
pixlar sem þeir eru kallaðir, a kort á bita, virkilega.
>> Svo er það áhugavert, þó, um þetta skráarsnið, BMP, er
að undir hetta, það hefur meira en bara þrjú bæti
að semja haus hennar, svo að tala, fyrstu bit.
Það lítur í raun lítið flókið við fyrstu sýn.
Og þú munt sjá þetta í P setja.
Og fá eitthvað einkum út af þessu núna
er ekki svo mikilvægt, eins og bara staðreynd að í upphafi hvers punktamynd
skrá, myndrænt form, það er allt fullt af tölum.
>> Nú Microsoft, höfundur þessarar sniði,
hefur tilhneigingu til að kalla þá hlutir ekki ints og stafir
og flýtur en orð og d orð og þráir og bæti.
Svo þeir eru bara mismunandi gögn gerðum.
Þeir eru mismunandi nöfn fyrir sama.
En þú munt sjá að í P Set Four.
>> En þetta er aðeins að segja að ef manneskju tvöfaldur-smellur einhvers BMP skrá á hans
eða harður ökuferð hennar, og opnast upp sýna honum eða henni að mynd,
það gerðist vegna þess að rekstur kerfi væntanlega tekið eftir ekki aðeins
að .BMP skrá eftirnafn í skrá nafn,
en einnig sú staðreynd að það er einhver venju að mynstri bitum
í upphafi þeirrar punktamynd skrá.
>> En við skulum einbeita nú á svo flókið skrá,
en í staðinn á eitthvað eins og þetta.
Segjum hér í gedit, ég bara byrjunina
um forrit sem er frekar einfalt.
Ég hef fengið nokkrar nær allt ofan.
Nú hef ég #include "structs.h" en Ég kem aftur til það í smá stund.
En þetta er gagnlegt fyrir nú.
Svo er þetta forrit það er að fara að framkvæma
eins gagnagrunni skrásetjari.
Svo gagnagrunni nemenda, og sérhver nemandi í heimi
hefur nafn og hús og sennilega sumir önnur efni, en við munum halda það einfalt.
Sérhver nemandi hefur nafn og hús.
>> Þannig að ef ég vildi til að skrifa forrit sem tilgangur í lífinu
var bara að kunnugt frá núll á allt að þremur,
ef það er þremur nemendum við Harvard háskóla.
Og ég vil bara að fá, með því að nota GetString, nafn hvers nemanda og hús,
og þá bara prenta þær út.
>> Þetta er tegund af eins og viku Einn, vika Tveir dót núna,
þar sem ég vil bara fyrir lykkja eða eitthvað svoleiðis.
Og ég vil kalla GetString nokkrar sinnum, og þá prenta m nokkrum sinnum.
Svo hvernig gæti ég gert þetta, þó, þegar bæði nafn og hús
taka þátt fyrir hvern nemanda?
>> Svo gæti Fyrsta eðlishvöt mín vera að gera eitthvað eins og this.
Ég gæti fyrst sagt, vel, gefa mér, segja, fjölbreytta strengi kallast nöfn.
Og ég vil ekki hardcode þrjú hér.
Hvað vil ég að setja það?
Svo NEMENDUR, því það er bara fasti lýst efst,
bara svo að ég þurfi ekki að hardcode þrír í mörgum stöðum.
Þannig, ég get breytt henni eitt sæti, og það hefur áhrif á breytingu allstaðar.
Og þá gæti ég gert band hús NEMENDA.
>> Og nú, gæti ég gert eitthvað eins fyrir (int i = 0; i <NEMENDA, ég ++.
Þannig að ég ætla að slá hratt, en þetta er líklega kunnugt setningafræði nú.
>> Og nú, þetta var nýleg.
Ef ég vil setja í i-ta Nafn nemanda, held ég að ég að gera þetta.
Og þá, ekki nöfn en hús krappi i.
Ég gera þetta, GetString, og láta mér að fara til baka og laga þessa línu.
Sammála?
Ósammála?
Það er ekki mjög notendavænt.
Ég hef ekki sagt notanda hvað ég á að gera.
>> En nú, ef ég líka vildi síðar, skulum
segja, prenta þetta out-- svo TODO síðar.
Ég ætla að gera meira með this-- þetta að öllum líkindum IS
rétta framkvæmd fá nöfn og hús, þrjú
af þeim samtals hvor, frá notanda.
>> En þetta er ekki mjög góð hönnun, rétt?
Hvað ef nemandi hefur ekki bara nafn og hús, en einnig kennitala,
og símanúmer, og netfang,
og kannski heimasíða, og kannski Twitter höndla,
og allir tala um aðrar upplýsingar tengslum við nemandann eða einstaklingur,
almennt.
Hvernig ættum við að byrja að bæta virkni til þetta forrit?
>> Jæja, mér líður eins og einföldustu leið gæti vera að gera eitthvað eins og, segjum,
int ids NEMENDA.
Svo ég get sett allar kenni þeirra þar.
Og þá, fyrir eitthvað eins og símanúmer,
Ég er ekki viss um hvernig á að tákna sem bara enn.
Svo skulum fara á undan og bara kalla þetta Twitters Nemendur, sem
er svolítið skrítið, but-- og fullt meira sviðum.
>> Ég hef byrjað að í raun afrita og líma hérna.
Og þetta er að fara að vaxa nokkuð ómeðfærilegur ansi hratt, ekki satt?
Væri ekki gott ef það voru í heiminum gögn uppbygging þekkt
ekki sem int eða streng, en eitthvað hærra stigi, abstrakt, svo
að tala, þekktur sem nemandi?
C er ekki kominn með innbyggðum virkni nemenda,
en hvað ef ég vildi gefa það svo?
>> Jæja, það kemur í ljós, ég ætla að opna skrá sem heitir structs.h hér,
og þú getur gert nákvæmlega það.
Og við erum að fara að byrja að gera þetta núna.
Og undir hetta P Set Three, þú hefur nú þegar verið að gera þetta núna.
Það er ekkert sem heitir g RECT eða a g sporöskjulaga í forritunarmál C
>> Fólkinu á Stanford innleitt þá gagnatög með því að nota þessa aðferð hér,
lýsa eigin nýjum gögnum þeirra gerðir með nýtt leitarorð
heitir strúktúr og annað einn heitir typedef.
Og reyndar, þótt setningafræði lítur svolítið öðruvísi efni
við höfum séð áður, í meginreglu, það er frábær einfalt.
>> Þetta þýðir bara "skilgreina tegund."
Það er að fara til vera a uppbyggingu og skipulag
er bara eins og ílát fyrir margar hluti.
Og að uppbygging er að fara að hafa band sem heitir nafn,
og streng sem heitir hús.
Og við skulum kalla, bara til þæginda, þetta allt gagnagrind nemandi.
>> Svo um leið og þú færð að semíkommur, hefur þú nú
skapa eigin þinn gögn tegund sem heitir nemandi
sem nú stendur við hlið int, og fljóta, og bleikju, og band,
og g RECT, og g sporöskjulaga, og hvaða númeri sem um aðra hluti fólk hefur fundið upp.
>> Svo er það gagnlegt um þetta nú er að ef ég fer aftur
að strúktúrinn 0 og klára þetta framkvæmd, sem ég skrifaði
fyrirfram hér, eftir því að allir af óumflýjanleg messiness sem
var um að byrja að gerast og ég bætt símanúmer og Twitters og allt
þessir annað til Skilgreining nemanda,
nú er succinctly pakkað upp aðeins eitt fylki nemenda.
>> Og hver af þeim nemendum núna hefur marga hluti inni á henni.
Svo sem fer bara eina spurningu.
Hvernig gera þú fá á nafni, og húsið, og ID,
og hvað annað er inni nemandans?
Super einfalt, eins vel.
Nýr setningafræði, en einföld hugmynd.
>> Þú vísitölu einfaldlega inn í array, eins og við gerðum í síðustu viku og þetta.
Og hvað er greinilega ný stykki af setningafræði?
Bara., Sem þýðir "fara inn í uppbyggingu og fá svæðið kallast
nafn, fá á sviði sem kallast hús, fá á sviði sem kallast nemandi. "
>> Svo í P Set Three, ef þú ert enn að vinna á það,
og flest gott fólk enn eru, gera sér grein fyrir því að eins og þér
byrja að nota hluti eins og g rects og g ovals
og önnur atriði sem virðast ekki koma frá Week núll, einn, eða tveir,
átta sig á að það er vegna þess að Stanford lýst nýjar gerðir gagna.
>> Og reyndar, það er einmitt það sem við munum gera, eins og heilbrigður, í P Set Four, þegar
við byrjum að takast á við hlutina eins og myndir, bitmaps og fleira.
Svo er það bara stríðnispúki og andlega fyrirmynd fyrir það sem er að koma.
Nú, procrastinated ég svolítið í morgun.
Ég var eins konar forvitinn að sjá hvað Microsoft veggfóður raun
lítur út eins og í dag.
Og það kemur í ljós að einhver í 2006 reyndar fór næstum nákvæmlega
sama stað til að mynda í raun hvað lítur svona þessa dagana.
Svæðið er nú lítið gróin.
>> Svo tala nú af myndum, skulum koma aftur Daven hér
á skjánum og Nicholas, og bara minna þig
að ef þú vilt að tengja okkur fyrir hádegi á föstudaginn, höfuð til venjulega slóð okkar
hér.
>> Svo hvar did við fara burt á mánudaginn?
Við kynna þetta vandamál, ekki satt?
Þetta var að því er virðist að rétt framkvæmd skipti,
þannig að þú tekur tvær ints, einn kallað, er einn hét b,
skipta á þeim, rétt eins og Laura gerði hér á sviðinu með mjólk og vatni,
með því að nota a tímabundinn breytilegur eða tómt bolli,
svo að við gætum sett b í og ​​á komu b án þess að gera skipta um hluti.
Við notuðum til breytu.
Það heitir afleysingamanneskja.
>> En hvað var grundvallaratriði vandamál með þessum kóða á mánudag?
Hvað var vandamálið hér?
Já.
>> Áhorfendur: Það tekur meira pláss.
>> DAVID J. MALAN: Tekur upp meira rúm, því ég er að nota breytu,
og það er allt í lagi.
Það er satt, en ég er að fara að segja að það er allt í lagi.
Það er aðeins 32 bitar í Grand fyrirætlun af hlutur, svo ekki stór samningur.
Aðrar hugsanir?
Áhorfendur: Það skiptir bara breyturnar fundist.
DAVID J. MALAN: Einmitt.
Það skiptir bara breytum staðnum.
Vegna hvenær hringt er function-- þegar ég hafði stæði frá Annenberg
síðasta sinn, hefur þú helstu neðst.
Um leið og þú hringja í aðgerð sem kallast skipti, skipti ekki fá x og y,
upprunalega gildi.
Hvað gerir swap fá, gerði við kröfu?
Áhorfendur: Afrit.
DAVID J. MALAN: Svo afrit af þeim.
Svo það fær einn og tveir, ef þér muna dæmi frá síðasta sinn,
en afrit af einum og tveimur sem eru með góðum árangri skipti.
En því miður á endanum, gildin eru enn sú sama.
Svo við getum séð þetta með okkar nýja vini, vonandi GDB,
að þú eða TFS og Ca er hafa verið að leiðbeina þér í átt þannig.
>> Svo ekki skipti muna lítur like-- skulum opna this-- lítur svona út.
Við frumstilla X að einn, y til tvö.
Had a búnt af prenta m er.
En þá, lykillinn kalla hér var að skipta, sem
er einmitt kóðinn við bara sá áðan.
Sem er rétt að byrja litið, en virkni,
þetta forrit virkar ekki, vegna þess að það er ekki til frambúðar skipta x og y.
>> Svo skulum sjá þetta, fljótleg heitt upp hér við GDB, sem ./noswap.
A fullt af yfirþyrmandi upplýsinga, sem Ég losna við Control L fyrir nú.
Og nú, ég ætla að fara á undan og keyra það.
Og því miður, að var ekki að gagni.
Það hljóp forritið inni þetta forrit sem heitir GDB, aflúsara,
en það var ekki láta mig pota í kring.
>> Svo hvernig get ég staldra raun framkvæmd innan þessa áætlun?
Svo brjóta.
Og ég gæti skemmt á öllum línu númer, einn, 10, 15.
En ég get líka skemmt táknrænt með því að segja brjóta Main.
Og það er að fara að setja inn hlé lið, greinilega í línu 16 í aðal.
Og hvar er línan 16?
Við skulum fara upp að kóða og fara upp í noswap.
Og reyndar, lína 16 er mjög fyrst í áætluninni.
>> Svo nú, ef ég fer á undan og tegund keyra þessa tíma, Enter, bið það.
Svo skulum pota í kring.
Prenta x-- hvers vegna er x núll?
Og hunsa dollara merkið.
Það er bara fyrir áhugamaður notkun af the program.
Hvers vegna er x núll í augnablikinu?
Já.
>> Áhorfendur: Það bið rétt áður lína 16, ekki í raun á línu 16.
DAVID J. MALAN: Einmitt.
GDB, við vanræksla, hefur bið framkvæmd rétt áður en línu 16.
Svo það hefur ekki framkvæmt, sem þýðir x er sumir óþekktur gildi.
Og við svo heppnir að það er eitthvað hreint eins núll.
Svo nú ef ég tegund næst, nú keyrð 16.
Það er að bíða eftir mér til að framkvæma 17.
Leyfðu mér að fara á undan og prenta x.
Það er eitt.
Leyfðu mér að fara á undan og prenta y.
Hvað ætti ég að sjá núna?
>> Áhorfendur: [inaudible]
>> DAVID J. MALAN: Smá hávær.
>> Áhorfendur: [inaudible]
DAVID J. MALAN: Ekki alveg sátt.
Svo já, sjáum við nokkur sorp gildi.
Nú, y er 134514064 þar.
Jæja, það er bara sorp gildi.
Áætlun mín notar RAM fyrir mismunandi tilgangi.
Það er önnur störf.
Annað fólk skrifaði inni tölvunni minni.
Svo þessir bitar hafa verið notuð til önnur gildi, og hvað ég ætla að sjá
er leifar af sumir áður notkun þessarar minni.
>> Svo ekki máli, vegna þess að um leið eins og ég slá næsta og þá prenta y,
það er frumstillt til gildi sem ég vil.
Svo nú, við skulum fara á undan svolítið hraðar.
N fyrir næstu.
Við skulum gera það aftur.
En ég vil ekki að lemja það hér, vegna þess að ef ég
langar að sjá hvað er að gerast inni skiptasamninga, hvað er stjórn?
>> Áhorfendur: skref.
>> DAVID J. MALAN: skref.
Þannig að þetta skref mig inn í virka, frekar en yfir það.
Og nú, það er lítið dulinn heiðarlega, en þetta er bara
segja mér að ég er í línu 33 núna.
Og við skulum gera þetta aftur.
Prenta afleysingamanneskja.
Sorp gildi, neikvæð í þetta sinn, en það er bara enn sorp gildi.
Svo skulum gera næst, prenta afleysingamanneskja.
Það er frumstilla til 1, sem var gildi x, einnig þekkt sem a.
>> Nú, þar eru okkar og x koma frá?
Jæja, eftir í meginatriðum við kallast þessi gildi x og y.
Við fórum í þá þá að skipta sem hér segir.
X kom fyrst, komma y.
Og þá, skipti gætu kalla þá X og y.
En til glöggvunar, það er kalla þá a og b.
En a og b eru nú að fara að vera afrit af X og Y, hvort um sig.
>> Svo ef ég fer aftur til GDB, afleysingamanneskja er nú einn og a er nú einn.
En ef ég að gera næst og gera nú prenta a, a hefur þegar verið flutt yfir.
The mjólk hefur verið hellt í fyrrum gler appelsínusafa, eða öfugt.
>> Og ef ég geri næst aftur, og nú ef ég prenta út sem geðheilsu stöðva,
a er enn tvö, en b er nú einn.
Frankly, það er enn þar.
Mér er alveg sama hvað afleysingamanneskja er.
En um leið og ég slæ nú, við skulum segja, halda áfram að fara aftur, núna er ég í lok
forritið.
Og því miður, x er enn er ein og y enn tvö.
>> Svo það var notagildi gdb þarna?
Það var ekki að hjálpa mér að laga vandamálið í sjálfu sér,
en það hjálpar vonandi mér skilja það eftir að átta sig á
að já, rökfræði mín er rétt, en númerið mitt er ekki á endanum að hafa
varanleg áhrif.
Svo er það vandamál sem við erum að fara að nú að leysa í dag.
>> En við skulum fá það með því að þetta.
Band er lygi.
Það líka, ekki gögn gerð sem er til í C. Það er
verið samheiti fyrir suma tími fyrir eitthvað annað,
og við getum leiða í ljós að eins og hér segir.
>> Leyfðu mér að fara á undan og opna upp forrit sem heitir saman-0.
Og frekar en að slá þetta einn út, Við munum byrja að ganga í gegnum kóða
Ég skrifaði nú þegar, en það er aðeins nokkrar línur.
Þannig að þetta er saman-0.
Og það fyrsta sem ég er að gera er að fá lína af texta.
>> En taka það sem ég er gera í fyrsta skipti.
Hvað er öðruvísi greinilega um línu 21?
Reyndar Bíddu.
Þetta er afrit tvö.
Það er ekki einu sinni rétt forrit.
Allt í lagi, Spilla viðvörun.
Allt í lagi, svo aldrei hugur að.
Það er svarið til framtíðar spurningu.
>> Hér er saman-0, og ég er um að fá línu af texta.
Forritið er mun einfaldari.
Svo er þetta augljóst.
Þetta er eins og á viku, viku tvö efni í augnablikinu. band s = GetString.
Nú segi ég það aftur hér.
band t = GetString.
Og þá, the síðastur hlutur í þessu program, eins og nafnið gefur til kynna,
er ég ætla að reyna að bera saman þá.
>> Þannig að ef s, fyrsta band, jafngildir = t, þá er ég
að fara að segja að þú slærð það sama.
Annars ætla ég að segja þú slærð mismunandi hluti.
Svo skulum taka saman og keyra þetta forrit.
Svo gera saman núll.
Lítur vel út.
Engin Uppsöfnunarvillur.
>> Leyfðu mér að fara á undan núna og slá ./compare-0.
Leyfðu mér að fara á undan og segja eitthvað : Daven og eitthvað: Rob.
Og ég pikka mismunandi hluti.
Svo langt, svo góður.
Forrit virðist vera rétt.
>> En við skulum hlaupa það aftur.
Segja eitthvað: Gabe.
Allt í lagi.
Kannski ég lenti rúm bar eða eitthvað angurvær.
Við skulum gera það aftur.
Svo Zamyla.
Zamyla.
Mismunandi hlutir.
Svo hvað er að gerast?
>> Þannig að við höfum þessar tvær línur af númer, GetString vera kölluð tvisvar.
Og þá er ég einfaldlega að reyna að bera saman s og t.
En hvað raunverulega þá er að fara á?
Jæja, rithönd mín er um það bil að Butcher þetta dæmi nokkuð.
Og við skulum í raun kasta þetta upp yfir hér, eins og vel.
>> Þannig að við höfum línu eins band s = GetString.
Svo er það einfaldlega fyrsta áhugavert lína frá því forriti.
En hvað allt þetta skiptið hefur verið fara á undir hetta?
Jæja, á vinstri hönd hlið er band, sem er einhvers konar breytu,
og það er kallað s.
Þannig að ég veit að þetta er að nota minni, eða RAM, í tölvunni minni einhvern veginn.
Þannig að ég ætla að abstractly draga að sem ferningur.
32 bita, það kemur í ljós, en meira um það í framtíðinni.
Og þá, hvað er að gerast hérna?
>> Jæja, GetString augljóslega fær band frá notandanum.
Og GetString fékk Zamyla eða Gabe eða Daven.
Svo skulum velja fyrsta af þeim, sem var Daven.
Svo í raun, hvað GetString fékk mér í því fyrsta tilfelli var D-a-v-e-n.
Og þá, hvað aðrir gerðu það gefa mér leynilega?
Áhorfendur: [inaudible]
DAVID J. MALAN: Já, að / 0 eða null staf.
Svo það gaf í raun mér streng.
En við vitum nú þegar frá fyrri lítur að band er bara fylki
af persónum, og það er sagt með þetta sérstaka vörðr eðli, / 0.
>> En ef þetta er satt og þetta er ferningur,
þetta er greinilega miklu stærri rétthyrningur.
Og reyndar, þetta er, Ég kröfu, aðeins 32 bita.
Og þetta er greinilega meira en 32 bitar, því þetta er líklega
átta plús átta plús átta plús átta plús átta,
bara vegna þess að bæti í ASCII.
Hvernig Heck við erum að fara að passa Daven í þessu litla kassa hér?
>> Jæja, hvað er að GetString raun að gera?
Jæja, þetta rist hér táknar minni tölvunnar minnar eða RAM.
Svo skulum segja að geðþótta að ef hver af þessum táknar bæti,
þá getum við hugsað um hvert bæti sem hafa netfang,
eins 33 Oxford Street, eða 34 Oxford Street, eða 35 Oxford Street.
>> Svo bara eins og heimili hafa netföng og byggingar hafa heimilisföng,
svo ekki einstökum bæti minni hafa netföng eða tölur
sem einstaklega þekkja þá.
Nú, þetta er handahófskennt.
En að halda það einfalt, ég ætla að nota sextánskur bara með því að venju,
en 0x þýðir ekkert annað en "þetta er sextánskur."
og ég ætla að halda því fram að "D" endar á Byte Einn í minni.
>> Ég fékk ekkert annað að gerast í minni, svo Daven fékk fyrsta blettur
á Byte One.
Þetta, þá er að fara að vera 0x2.
Þetta er að fara að 0x3.
Þetta er að fara að vera 0x4.
Þetta er að fara að 0x5.
Þetta er að fara að vera 0x6.
>> En þegar þú byrjar að hugsa um hvað gera í tölvunni
undir hetta, þú getur byrjað að álykta
hvernig þér, fyrir nokkrum árum, vildi hafa innleitt C sjálfu.
Hvað er GetString líklega returning-- vegna þess að það
finnst eins og það er ekki aftur Daven, í sjálfu sér,
vegna þess að hann er örugglega ekki að fara að passa í þessu litla box--
svo hvað er GetString líklega aftur?
>> Áhorfendur: [inaudible]
>> DAVID J. MALAN: Staðsetning Daven.
Og það er verið að gera þetta allt frá viku One.
Hvað GetString er í raun aftur er ekki band, í sjálfu sér.
Það er ein af litlu hvítu lygar.
Það er aftur á heimilisfang band í minni, einstaka netfang.
Daven býr á 33. Oxford Street.
En fleiri succinctly, Gavin býr á 0x1, Heimilisfang númer eitt.
>> Svo hvað fær setja á þetta lítill kassi þá að vera skýr,
er bara netfang strengsins.
Svo allan þennan tíma, þetta hefur verið að fara á.
En hvað þetta vísbending á nú er að ef allir er hefur
er fjöldi inni af því, sem er að stoppa þig, forritari,
frá því að setja allir tala í allir mismunandi og bara stökk
til þess klumpur af minni?
Og reyndar, munum við sjá það er ógn næst.
>> En nú, þetta finnst ófullnægjandi.
Ef ég segi, fá mér band, þú gefur mér Daven.
En þú í raun ekki að gefa mér Daven.
Allt sem þú gefur mér er heimilisfang Daven er.
Hvernig veit ég þá fyrir víst þar Daven hefst og ends--
sagan er að fá weird-- þar Daven byrjar og endar,
og þá, næsta band í minni byrjar?
>> Jæja, ef þú ert að fötlun mér upphaf Daven,
meginatriðum, hvernig veit ég þar enda nafn hans er?
Sem sérstakt null karakter, sem er allur the fleiri mikilvægur nú
ef strengi undir hetta eru einfaldlega greind
einstaklega af staðsetningu þeirra í minni.
Svo allan þennan tíma, það er hvað er verið að fara á.
>> Svo þegar við horfum nú á kóðinn hér, útskýra
ef þú myndi galla í línu 26.
Hvers vegna er Zamyla og Zamyla öðruvísi?
Hvers vegna er Gabe og Gabe öðruvísi?
Já, í bakinu.
>> Áhorfendur: Þeir hafa mismunandi heimilisföng.
>> DAVID J. MALAN: Einfaldlega vegna þess að þeir hafa mismunandi heimilisföng.
Vegna þess að þegar þú hringja GetString aftur, sem ég ætla að gera fljótlega hér,
ef þetta er seinni línan, band t, eins og ég gerði í forriti,
jafngildir annað símtal til GetString.
Í næsta skipti sem ég kalla GetString, ég ætla
að fá annað klumpur af minni.
>> GetString er leyft að spyrja rekstri
kerfi til að fá meiri og fleiri minni.
Það er ekki að fara að endurnýta sama sex bæti hvert einasta skipti.
Það er að fara að fá nýjan klumpur af minni, sem
þýðir ekki að fara að fá einhver önnur gildi hérna.
>> Svo þegar ég er jafn = t, þú ert ekki að bera saman
D á móti þessu og A móti þetta og V gegn þessu.
Þú ert að bera saman þessa á móti þessu, sem
hreinskilnislega er nokkuð useful-- useless-- er nokkuð gagnslaus, vegna þess að hver raunverulega
er ekki sama hvar strengirnir eru í minni?
>> Og reyndar höfum við ekki.
Og við erum ekki að fara að byrja sérstaklega umhyggju.
Aðeins að því marki sem galla geta komið og öryggi hótun geta komið vilja
við byrjum í raun að hugsa um þetta.
Svo skulum laga þetta vandamál.
Skrúfjárn út, þú festa það frábær einfaldlega.
>> Og við skulum í raun, áður en ég sýna þetta aftur, hvað myndi
þú gera ef í CS50 flokki, og þú þurftir að framkvæma
samanburður við tveimur strengjum.
Þú greinilega getur ekki bara notað s jafn = t.
En bara rökrétt, hvernig myndir þú bera þetta band
gegn þessum streng með C kóða?
Já.
>> Áhorfendur: Bara gera fyrir lykkju [inaudible]
DAVID J. MALAN: Perfect.
Áhorfendur: [inaudible]
DAVID J. MALAN: Já.
Nota bara fyrir lykkju eða a en lykkja eða hvað sem er.
En bara um grunn hugmynd að ef þetta er klumpur af minni eða fjölda
og þetta er, og kunnugt yfir bæði á sama tíma.
Og bara bera stafina.
>> Og þú hefur fengið að vera lítið varkár, vegna þess að þú
vil ekki einn fingur að fara framhjá öðrum
vegna þess að einn strengur er lengur en hitt.
Svo þú ert að fara að vilja til að athuga þetta sérstaka gildi í lok, null.
En það er í raun, í endir, eins og einfaldur eins og þessi.
Og hreinskilnislega, við þurfum ekki að fjárfesta á ný að hjól.
Hér er útgáfa Tveir.
Og það sem ég ætla að segja hér er að í stað þess að bera saman s jafn = t,
Ég stað að fara að segja, ef strengur Samanburður á S kommum t jafngildir = 0.
Nú, hvað er band saman?
>> Það kemur í ljós, það er fall sem koma með C, en tilgangur í lífinu
er að bera saman tvo strengi.
Og hrærið saman, ef við lesum þess maður síðu eða gögn eða CS50
tilvísun, það mun einfaldlega segja þér að hrærið
bera saman ávöxtun annaðhvort neikvæð númer eða jákvæð tala eða núll,
þar núll þýðir að þeir eru jafnir.
>> Svo bara conjecture.
Hvað gæti það þýtt ef hrærið bera saman ávöxtun
neikvætt gildi eða jákvætt virði?
Áhorfendur: Rúmlega eða minna en.
DAVID J. MALAN: Já, meira en eða minna en.
Svo ef þú vilja til að flokka í heild fullt af strengjum í dictionary--
eins og við munum að lokum niður road-- fullkominn virka til að nota hugsanlega
vegna þess að það er að fara að gera það Samanburður á strengi fyrir þig, og segja
þú gerir a kemur fyrir b, eða gerir b koma áður en stafrófsröð.
Við getum gert einmitt það.
>> Og taka ég gerði einn annan hlutur í þessu dæmi.
Hvað annað hefur breyst hærri upp í þessari aðalæð virka?
Char *.
Og þetta er að annar hvítur lygi.
Allan þennan tíma, þegar þú hefur verið að skrifa streng,
við höfum verið leynilega endurskrifa band sem char * þannig að clang raun
skilur þig.
>> Með öðrum orðum, í CS50.h og eins og við munum að lokum sjá,
við gert samheiti sem kallast band það er það sama og bleikju *.
Og nú, veit bara að *, Í þessu samhengi, að minnsta kosti,
þýðir á netfangið.
>> Heimilisfangið hvað?
Jæja, sú staðreynd að ég sagði char *, og ekki int * eða fljóta *,
þýðir að char * er veffang bleikju.
Þannig að þetta lítill kassi hér, aka band, er í raun af gerðinni char *,
sem er einfaldlega fínt leið til að segja, í þennan reit mun fara veffang.
Og hvað þýðir það netfang vísa til?
Apparently, a bleikju.
>> En við gátum alveg hafa int * og aðra hluti.
En nú, char * er í raun mest einfalt og einn af áhuga.
Þannig að þetta vandamál er að fara að hækka, þó, aftur.
>> Ég geri ráð fyrir að opna upp þetta forrit.
Við skulum sjá hvort nú getum spá hvað er athugavert við þennan kóða.
Svo í þessari áætlun, afrita 0, ég er að fara á undan og aftur kalla
GetString og geyma verðmæti í s.
>> Og þá, hvers vegna er ég að þessu, bara að minna frá vikna fortíðinni?
Við gerðum segja að GetString stundum skilar null.
Hvað þýðir það ef GetString skilar null?
Eitthvað fór úrskeiðis.
Það þýðir líklega strengur er of stór, út í tölvunni minni.
Það gerist frábær, frábær, frábær sjaldan, en það gæti gerst.
Við viljum til að athuga það, og það er allt sem við erum að gera.
>> Vegna þess að við munum sjá nú, ef þú ert ekki byrja að haka staðaldri fyrir hluti
eins null, þú gætir reyndar byrja að fara
til heimilisföng í minni sem eru ógild.
Og þú ert að fara að byrja að örva fleiri og fleiri skiptingu galla.
Eða í Mac eða PC, bara veldur tölvunni til að hengja
eða forrit til að frysta, hugsanlega.
>> Svo nú, ég kröfu í Afritaðu 0.c, að ég er að fara að afrita þessa strengi með því
af línu 28.
Og þá er ég að fara kröfu neðst
hér sem ég ætla að breyta einn af þeim.
>> Svo taka þetta.
Ég er að hringja gamla vini strlen okkar.
Og bara útskýra á ensku hvað þessi lína 34 er að gera?
Hvað gerir t krappi 0 tákna á vinstri.
Já.
>> Áhorfendur: Fyrsta eðli T?
DAVID J. MALAN: Fyrsta eðli t.
Það er það.
Fyrsti stafurinn t, ég vil að úthluta hástafi útgáfa
á fyrsta staf í t.
Þannig að þetta er að eignfæra fyrsti stafurinn.
Og þá er mjög síðasta sem ég geri í þetta forrit er að ég kröfu hér er
upprunalega, s, og hér er afrit, t.
>> En miðað við sögu við bara sagði um hvað strengir eru í raun,
hvað er lína 28 í raun að gera, og hvað er
leiðir padda fara að vera á skjánum?
>> Svo fyrst, fyrsta spurningin, 28.
Hvað er band t = s í raun að gera?
Ef við höfum á vinstri hönd hlið hér string t = s;
sem gefur mér einn reit hér og einn kassi hér.
Og geri ráð þetta netfang er 0x, við skulum segja, 50 að þessu sinni, eftir geðþótta.
Hvað gerir band t = s gera undir hetta?
>> Áhorfendur: [inaudible]
>> DAVID J. MALAN: Það geymir minni takast það, svo 0x50 fer þangað.
Þannig að ef nú fer ég að fyrsta eðli í t og hástaf það,
hvað er ég að gera í raun að s?
Ég er virkilega að gera slíkt hið sama, ekki satt?
Vegna þess að ef Heimilisfang 0x50-- og bara, ég hafa ekki mikið pláss á borðinu hér,
en gera ráð fyrir að þetta sé 0x50 niður hér, einhvers staðar í minni tölvunnar minnar.
>> Og ég hef, til dæmis, Gabe í lágstafir hér, eins og þetta.
Og ég hef sagt ekki krappi 0 fær til eignar.
Jæja, t krappi 0 er fyrsti stafurinn á t.
Svo lítið g er að fara til verða stór G. En vandamálið
er, hvað þýðir s einnig benda á?
>> Áhorfendur: Sama.
>> DAVID J. MALAN: The sama nákvæmlega hlutur.
Svo einföld skýring kannski, jafnvel ef setningafræði er svolítið skrítið.
Svo skulum gera þetta.
Gera afrit-0 og þá ./copy-0.
Segja eitthvað: Gabe.
Og því miður, bæði þá hefur nú verið eignfærður,
en fyrir að undirliggjandi Ástæðan fyrir því að við erum einfaldlega
nú að takast á við heimilisföng.
>> Svo hvernig gera við byrjum að address-- engin orðaleikur intended--
hvernig eigum við að byrja að takast á þetta tiltekna vandamál?
Jæja, í copy1.c eru hlutirnir að fara til að fá svolítið flóknara.
En ég myndi halda að eðli einföld lausn.
>> Svo erfitt að fá við fyrstu sýn.
Ekki að fara að vera auðvelt fyrir í fyrsta skipti sem þú slá það út, ef til vill,
en ef vandamálið er að einfaldlega að gera t = s bara
afritar netfang, hvað, aftur ef ég get valið á þig,
er að fara að vera lausn fyrir raunverulega að afrita streng?
>> Áhorfendur: Við munum líklega nota lykkju aftur.
>> DAVID J. MALAN: Já.
Þannig að við erum að fara að þurfa lykkju aftur.
Og vegna þess að ef við viljum að afrita band s í annað band,
við viljum líklega að gera það eðli með staf.
En vandamálið er, ef þetta er upphaflega s,
nú þurfum við að byrja sérstaklega úthlutun minni t.
>> Með öðrum orðum, við skulum uppkast þetta eitt síðasta skipti.
Ef þetta er band s = GetString.
Og við skulum setja þetta upp hér, eins og heilbrigður.
Þetta er GetString.
Og þá, myndin fyrir eitthvað svona er að fara að vera eins og áður,
g-a-b-e- / 0.
Það lítur smá eitthvað eins og this.
Og s því, við köllum þetta 0x50, og það er að fara að vera 51, 52.
>> Svo er þetta 0x50.
Og þá, ég band t.
Í minni, það er bara að fara að gefa mér smá veldi svona.
Svo er það mikilvægt skref núna?
Ef ég vil að afrita s í t, hvað auður þurfum að fylla í hér?
Eða hvað við þurfum að gera á háu stigi?
Já?
Einhver?
Já.
>> Áhorfendur: Við þurfum að [inaudible].
DAVID J. MALAN: Já, við þarf til að fylla í auða.
Ég get ekki afritað og síðan nýta heiti Gabe er
þangað til ég spyrja stýrikerfi fyrir annað klumpur af minni
það er að minnsta kosti eins stór og upprunalega.
Svo sem skilur okkur eftir með spurningu.
>> Hvernig get ég beðið stýrikerfi ekki bara fyrir a einfaldur lítill pointer--
þar sem þetta er kallað, er heimilisfang, a pointer-- ekki
fyrir a einfaldur lítill kassi svona kallast streng?
Hvernig get ég spyrja rekstri kerfi fyrir stór klumpur af minni?
Svo langt, ég hef bara fengið það til baka óbeint með því að kalla GetString.
Svo hvernig er GetString jafnvel að fá minni?
>> Jæja, það kemur í ljós að það er þetta önnur aðgerð hér
að við munum nú að byrja að nota.
Nú, þetta lítur vegur meira dulinn than-- og ég er sá eini sem getur séð it--
þessi lína lítur vegur meira dulinn þá ætti við fyrstu sýn.
En við skulum stríða henni í sundur.
>> Á vinstri hönd hlið, ég hef char * t.
Svo í ensku, við skulum byrja á að móta viðeigandi setningar í tæknimáli.
Þannig að þetta er að úthluta a af taginu char * heitir t.
Nú, hvað þýðir það í raun þýtt?
>> Jæja, það þýðir, hvað er ég að fara til að setja í þessa breytu sem heitir T?
An heimilisfang char.
Svo er það bara einfaldara, meira sanngjarnt leið
að lýsa vinstri hönd hlið.
Svo skapar þessi kassi hér aðeins.
Svo hægri hönd hlið, væntanlega, er að fara
að úthluta að stærri klumpur af minni hvernig?
Svo skulum stríða þetta sundur.
>> Það er yfirþyrmandi við fyrstu sýn, en hvað er að gerast inni hér?
Fyrst, það er malloc, sem er greinilega nýr vinur okkar,
"Minni úthluta."
Svo er þetta rifrildi berist inn í það, svo það er ansi stór rök.
Svo skulum stríða þetta sundur.
>> strlen af ​​s, að sjálfsögðu, táknar the--
Áhorfendur: Fjöldi stafi.
DAVID J. MALAN: Bara Fjöldi stafa í s.
Svo lengd s, upprunalegu band.
Svo G-a-b-e.
Svo er það líklega fjögur í þessu tilfelli.
Hvers vegna er ég að gera 1 eftir hringja strlen af ​​s?
Áhorfendur: [inaudible]
DAVID J. MALAN: Til að sérstakt null staf.
Ef þú spyrð mig hvað er lengd Nafn Gabe er, ég er að fara að segja fjórir.
Undir hetta, þó, ég þarf sem fimmta bæti fyrir núll staf.
Svo er að hvers vegna ég er að gera á 1.
>> Nú bara ef þú ert að keyra þetta Forritið á tölvunni öðru en, segja,
að CS50 tæki, þar sem stærð char
gæti verið öðruvísi frá eigin computer-- minn
kemur í ljós að ég get hringt í þetta rekstraraðila sizeof, bara að spyrja tölvuna,
hvað er á stærð við bleikju á þessari tölvu?
>> Og með því að margfalda fimm í þessu Dæmi um stærð af a bleikju sem
á flestum tölvum mun bara vera einn, malloc
er að fara að úthluta mér þetta stóra klumpur af minni hérna til hægri.
Og það er að fara að return-- það er function-- svo það er
að fara að snúa aftur til mín hvað?
Áhorfendur: Heimilisfangið?
DAVID J. MALAN: Heimilisfang hvað?
Áhorfendur: Af minni því úthlutað?
DAVID J. MALAN: Af minni því úthlutað.
Þannig að ég hef ekki hugmynd, satt, þar sem þetta er að fara að enda.
Ég ætla að leggja til að það er að fara að enda í 0x88.
Alveg handahófskennt, en einhvers staðar annar en 0x50,
vegna þess að stýrikerfi, hvaða Windows og Mac OS gert fyrir mig, er
ganga úr skugga um að það er að gefa mér mismunandi klumpur af vinnsluminni.
>> Svo er þetta gildi þar sem þetta klumpur af minni gæti endað.
Svo er þetta það sem endar hérna, 0x88.
Svo nú greinilega, get ég skilið að þetta er ekki það sama og þetta,
vegna þess að þeir eru að benda á mismunandi klumpur af minni.
Þannig að ef ég nú reyndar vilt afrita þetta í, við skulum gera fyrirhugaða lausn þína.
>> Við skulum bara fara að búa for lykkju, og gera t krappi ég fær s krappi i.
Vegna þess að nú get ég notað þetta array eins rithátturinn,
því jafnvel þótt malloc mjög generically úthlutar mér minni,
minni er bara samliggjandi bæti.
Bæti, bæti, bæti, aftur til baka til baka.
>> Ég get sannarlega sem forritari meðhöndla það eins og fylki, sem
þýðir að ég get notað þetta loksins þekki ritháttur af aðeins nokkrum hornklofum.
>> Svo láta mig staldra þar, vegna þess að þetta er mikið í einu, jafnvel
þótt grunnhugmyndin að ágrip er að strengur, allan þennan tíma,
er ekki ný gögn tegund í sjálfu sér.
Það er bara svo-kölluð músina, veffang eðli,
sem bara þýðir að það er tala að með því að mönnum venju
Við hafa tilhneigingu til að skrifa eins og 0x eitthvað.
>> En það er bara tala, eins 33 Oxford Street,
sem gerist að vera Netfang CS hússins.
Einhverjar spurningar um þessar upplýsingar?
Já?
>> Áhorfendur: Hvers vegna eigum við að athuga fyrir t jöfn núll?
>> DAVID J. MALAN: Hvers vegna gerum við athuga t jöfn núll?
Ef við lesum documentation-- mikill question-- fyrir malloc,
það er að fara að segja í fínu prenta, stundum malloc gæti skilað null,
bara eins GetString.
Og reyndar, GetString skilar null ef aftur á móti, malloc skilar núll,
því GetString notar malloc.
>> Og það gæti gerst ef OS, Mac OS, Windows, hvað er einfaldlega
út af minni fyrir þig.
Svo það er það sem gerðist þarna.
>> Og láta mig sýna einn annar hlutur sem gæti bara blása huga þínum
eða alveg að vera of langt yfir línuna.
En láttu mig draga upp sama fyrir lykkja fyrir afritun,
sem fyrir augnabliki, muna var þetta. T krappi ég fær s krappi i.
>> Nice og notandi-vingjarnlegur.
Líður eins og viku tvö aftur.
En þessi útgáfa reyndar getur verið endurskrifuð sem þetta, sem lítur dulinn.
Það er tækni sem kallast bendill stærðfræði, netfang tölur.
En af hverju virkar þetta?
>> Nú gremjulegur, sem Höfundar C ákvað að nota
á * tákn fyrir mismunandi tilgangi.
Við höfum séð það notað einu sinni nú þegar, char *, sem þýðir "gefa mér breytu
það er að fara að koma veffang bleikju. "
Svo char * í því samhengi þýðir "gefa mér breytu."
>> Því miður, ef þú ert að nota * án orð fyrir framan það, eins og bleikju,
það er nú kallað dereference stjórnandi.
Og við munum sjá meira af þessu áður en langur.
En það þýðir bara "fara þangað."
Það er eins og að segja, ef einhver rétti mér á stykki af pappír "33 Oxford Street,"
ef ég "* 33 Oxford Street," sem þýðir "Fara niður götuna í CS bygging."
>> Svo * bara þýðir að fara þangað ef það er ekkert orð í framan.
Svo er það t, að vera ljóst?
t er heimilisfang klumpur af minni sem var gefið til baka til mín.
s er heimilisfang hvað, að vera ljóst, í dæminu sem við höfum verið að ræða,
lágstöfum GABE?
s er heimilisfangið of--
Áhorfendur: The band.
DAVID J. MALAN: Af upprunalegu nafni Gabe er.
Svo það er veffang þetta klumpur af minni.
Þannig að ef ég segi ekki + i-- i, tilkynning, er bara gamall vinur okkar.
Það er bara vísitölu breytu sem er iterating frá núll á allt
lengd strengsins s.
Svo það er að fara að vera núll, þá einn, þá tvo, þá þrjár, þá fjórar.
Svo skulum saman þessar nýju Grunni eins stykki púsluspil, ef þú vilt,
jafnvel þó aftur, setningafræði er miklu meira Bogagöng en grunni.
Svo er t að tölu + ég er að fara að gefa mér
tala, því að þetta eru allt tölur sem við höfum verið að teikna sem álög.
En þeir eru bara tölur.
>> Svo ef heimilisfang t við sögðum var 0x88, hvað er 0x88 plús núll.
Jafnvel ef þú ert ekki ánægð með álög enn, taka giska.
>> Áhorfendur: Upprunalega.
>> DAVID J. MALAN: Enn 0x88.
Svo hvað þýðir * 0x88 meina?
Það þýðir, "farið þangað" sem þýðir á áhrifaríkan hátt, "setja fingurinn hér."
Og nú á hægri hönd hlið af þetta tjáning, * og síðan í parens,
s + I þýðir s, sem er takast upp hér á litla g.
s + 0 er, að sjálfsögðu, s, hvað sem s er.
>> Svo nú er það * s, sem rétt eins og * 33 Oxford Street þýðir að fara á heimilisfang
s.
Svo er hér þetta fingur, hægri hönd.
Svo hvað er ég að fara að afrita inn í hvað?
Málið á hægri, sem er Gabe, lítið g hér inn hér.
>> Og svo áhrif sem Fyrsta endurtekning af lykkju,
eins og þú lagt, jafnvel þótt það lítur brjálaður flóknara en nokkuð
við höfum séð áður, er einfaldlega að segja fara hér og afrita þessi karakter hér.
Það er að gefa þér kort til báðum stöðum.
>> Og við munum sjá miklu meira af þessu.
En nú er ætlunin bara að kynna nokkrar af þessum helstu hugmyndir.
Og reyndar, við skulum líta á einn á verkefnið hér,
og þá lofaði claymation, sem mun gera allt í lagi.
Allt í lagi.
Svo láta mig opna up-- þar sem við förum.
Svo skulum me-- við munum koma aftur við þessa mynd fyrir löngu.
Leyfðu mér að opna þetta endanlega dæmi hér.
>> Svo hér er frábær, frábær forrit sem nær
ekkert í lífinu sem gerir eftirfarandi.
Það lýsir fyrst tvær breytur, x og y, sem eru ekki tölur að þessu sinni,
í sjálfu sér.
Þeir eru ekki heiltölur, í sjálfu sér.
Þeir eru greinilega int *.
Svo bara einhver, hvað þýðir það ef gögn tegund, breyta þínum,
er gerð int * star?
Það er heimilisfang int.
>> Svo ég hef ekki hugmynd um hvar það er enn.
Það bara þýðir "setja, að lokum, veffang í int hér. "
0x50, 0x88, hvar sem það er í minni, sem netfang er að fara þangað.
Og það er það sem er y að fara að vera, eins og heilbrigður.
>> Ef ég segi nú x = malloc (sizeof (int)), þetta er fínt leið til að segja,
hey stýrikerfi, með malloc, gefa mér nóg minni fyrir stærð
af int, sem er sennilega að fara að vera 32 bita eða fjórum bæti.
>> Svo hvað þýðir malloc aftur?
Malloc skilar ávarp.
Svo hvað er að fara að fá geymd í x?
Veffang klumpur af minni, fjórum bytes, sem malloc
bara fundið fyrir mig með því að spyrja stýrikerfið.
>> Nú á meðan, lína fjögur hér að * x = 42.
Bara til að vera skýr, hvað er að gerast þarna niðri?
Á vinstri hönd hlið, * x.
það er eins og * 33 Oxford Street.
Svo * x þýðir hvað?
>> Áhorfendur: Go to.
>> DAVID J. MALAN: Farðu á þetta netfang.
Hvar sem klumpur af minnið er farið að honum.
Og setja það þar, augljóslega?
Áhorfendur: 42.
DAVID J. MALAN: 42.
Allt í lagi, * y, sama hugmyndin.
Fara á heimilisfang í y.
Setja númerið 13 þar, en hvað er y í augnablikinu?
Áhorfendur: Það er ekkert minni fyrir y.
DAVID J. MALAN: Það er ekkert minni fyrir y.
Svo er það sem y líklega innihalda, eins og við höfum verið að segja?
>> Áhorfendur: Sorp.
>> DAVID J. MALAN: Sumir sorp gildi.
Nú, sorp gildi er enn a tala.
Það getur samt verið skakkur fyrir heimilisfang.
Það sem þó einhver hripa eitthvað niður,
og ég mistúlka það sem skilningi sumir byggja niður götuna.
Og ef þú reynir bara að fara inn í sumir byggja þú átt ekki,
eða einhver klumpur af minni sem þú hefur ekki verið gefin, slæmir hlutir gætu gerst.
Tölva gæti hrun, eða einhver önnur óákveðin hegðun gæti gerst.
>> Svo hið innra, þá til að Binky er þetta.
Ég man enn, 20 sumir stakur árum síðar,
þar sem ég var þegar ég loksins skilið ábendingum.
>> Sem er að segja, ef þú fara hér á þremur mínútum
og held ég ekki skilja ábendingum, átta sig
Ég hef minnst fyrir 20 ár fyrir sumir brjálaður ástæðu
hvenær og hvers vegna það sökkt lokum í, sitja með kenningu
náungi, Nishat Mehta í bak Eliot matsal.
Nú, ég hef minnst þetta vegna þess að þetta var
einn af the efni sem ég, í Einkum barist við.
Og þá, smellti hún loksins, eins og ég þora að segja mikið af efni
lokum mun.
Og nú, til að gera það finnst öllum hamingjusamari og allt meira sannfærandi,
skulum taka endanlega líta í okkar Síðustu þrjár mínútur hér á Binky,
frá vini okkar, Nick Parlante frá Stanford.
>> [Vídeó spilun]
>> -Hey, Binky.
Vakna!
Það er kominn tími til að bendillinn gaman.
>> Hvað er það?
Læra um ábendingum?
Ó, Goody!
>> -Well, Til að byrja, held ég að við séum að fara að þurfa nokkra ábendingum.
>> -OK.
Þessi kóði úthlutar tveimur ábendingum, sem geta bent til heiltalna.
-OK.
Jæja, ég sé tvo ábendingum, en þeir virðast ekki vera að benda á neitt.
>> -Það Er rétt.
Upphaflega, ábendingum ekki benda til nokkuð.
Það sem þeir benda á er kölluð pointees og setja þá upp 's
sérstakt skref.
>> -Ó, Hægri, hægri.
Ég vissi það.
The pointees eru aðskilin.
Ger, svo hvernig gera þú úthluta pointee?
>> -OK.
Jæja, þetta númer úthlutar ný heiltala pointee,
og þessi hluti setur x til að benda á það.
>> -Hey, Sem lítur betur.
Svo að það að gera eitthvað.
>> -OK.
Ég ætla dereference bendillinn X til geyma fjölda 42 í pointee hennar.
Fyrir þetta bragð, ég þarf minn Magic Wand í Dereferencing.
>> -Your Magic Wand af Dereferencing?
That-- sem er frábært.
>> -Þetta er það sem kóðinn lítur út.
Ég ætla bara að setja upp fjölda og [POP]
>> -Hey, Líta.
Það fer það.
>> So gera dereference á x þannig örin til að fá aðgang pointee sína.
Í þessu tilviki, í verslun 42 þar.
Hey prófaðu að nota það til að geyma fjölda 13 með hinu músina, y.
>> -OK.
Ég ætla bara að fara hingað til að y, og fá númer 13 sett upp.
Og þá, taka Wand af Dereferencing og bara [BUZZ]
>> -Ó!
>> -Ó, Hey!
Það virkaði ekki.
Segja, Binky, ég held ekki dereferencing y er góð hugmynd, vegna þess að þú veist,
setja upp pointee er sérstakt skref.
Og ég held ekki að við aldrei gerði það.
>> Gott lið.
-Já.
Við úthlutað músina y, en við aldrei setja það til að benda á pointee.
>> -Mjög Athugull.
-Hey, Þú ert að leita góður þar, Binky.
Getur þú festa hana þannig að Y stig að sama pointee og x?
>> Vissulega.
Ég nota töfrasprota minn af Pointer Verkefni.
>> -er Að fara að vera vandamál eins og áður?
Nei.
Þetta þýðir ekki að snerta pointees.
Það breytist bara einn bendi til benda til ekki sama annars.
>> -Ó Skil.
Nú y bendir á sama stað og x.
Svo bíða.
Nú, y er fastur.
Það hefur pointee.
Svo þú geta reyna sprotanum af Dereferencing aftur að senda 13 yfir.
>> -Uh, OK.
Hér fer það. [POP]
>> -Hey, Líta á það.
Nú dereferencing vinnur á y.
Og vegna þess að ábendingum er að deila að einn pointee, bæði þeir sjá 13.
-Já.
Deila, hvað sem er.
Svo erum við að fara að skipta stöðum núna?
>> Sjáðu.
Við erum út á tíma.
>> -But--
>> Alveg man þremur Pointer reglur.
Fjöldi Einn, grunn uppbygging er að þú ert með músina,
og það bendir á að pointee.
En bendi og pointee eru aðskilin,
og algeng villa er að setja upp músina,
en að gleyma að gefa það a pointee.
>> Númer tvö, músina dereferencing byrjar bendillinn
og segir ör sína yfir til að fá aðgang pointee sína.
Eins og við allur vita, þetta aðeins virkar ef það er
a pointee, hvers konar kemur aftur Regla númer eitt.
>> Númer þrjú, músina Úthlutun tekur einn músina
og breytir því að benda á að Sama pointee sem annar músina.
Svo eftir framsal, tveir ábendingum
mun benda til sömu pointee.
Stundum, það er kallað hlutdeild.
Og það er allur there er til það, í raun.
Bless-bless núna.
[END vídeó spilun]
DAVID J. MALAN: Það er það fyrir CS50.
Við munum sjá þig í næstu viku.