DAVID Malan: Halló, og velkomin aftur til CS50. Svo er þetta í lok viku fjögur. Bara eitt tilkynning fyrst. Svo svonefnd fimmta mánudagur er koma upp þetta kemur mánudagur. Þetta er tækifæri til að breyta frá SAT / UNSAT að bókstafur, eða frá bókstafur SAT / UNSAT. Annoyingly, þessi aðferð hjartarskinn þurfa a undirskrift, vegna þess að þú þarft að fylla út einn af þeim bleiku bæta við / falla form. Vegna tæknilega, the SAT / UNSAT útgáfa og einkunn bréf útgáfa hafa mismunandi númer verslun. En ekki máli. Bara koma til mín eða að ræna eða Lauren á hverjum stað. Eða sendu okkur tölvupóst ef þú ert ekki góður af pappírsvinnu sem þú þarft í dag, og við mun vera viss um að hjálpa þér að taka umönnun sem áður mánudag. Allt í lagi, svo í dag - raunverulega, there 'a hluti af echo. Getum við tón mig niður aðeins? OK. Svo í dag, munum við kynna efnisatriði þekktur sem ábendingum. Og ég viðurkenni að þetta er eitt af flóknari atriði sem við tilhneigingu til að ná í þessum flokki, eða raun ekki allir Námskeið sem notar C. En taka minn orð fyrir það, sérstaklega ef hugur þinn finnst svolítið meira laut í dag og í næstu vikur. Það er ekki fulltrúi að fá allir verri á þessu það þýðir bara að það er sérstaklega háþróuð umræðuefni sem ég lofa, nokkrum vikum þess vegna, mun virðast allt of strikingly einfalt að hyggja. Ég man enn þann dag í dag. Ég sat í Elliott matsalur, sat við hliðina á mér TF Nishat Mehta, sem var heimilisfastur Elliott House. Og fyrir sumir ástæða, þetta efni smellir bara. Hver er að segja að ég átti erfitt líka með það í nokkurn tíma, en ég mun gera mitt besta til að forðast slíkt glíma við efni sem á endanum er alveg öflugur. Í raun einn af the efni sem við munum ræða í næstu vikur er að af öryggi, og hvernig þú getur raunverulega nýta vélar á vegum sem voru ekki ætluð. Og þessir exploitations eru yfirleitt vegna galla, mistök sem við fólk gerir með því að skilja sum undirliggjandi framkvæmd upplýsingar um hvaða forrit eru gerðar. Nú til að gera þetta virðist allt meira notendavænt vingjarnlegur, ég hélt ég myndi spila 10 Annað sýnishorn af smá claymation Mynd heitir Binky sem var komið til lífið með vinkonu okkar í Stanford, prófessor Nick Parlante. Svo langar mig til að gefa þér þetta beitu af Binky hér. [Vídeó spilun] -Hey, Binky. Vakna. Það er kominn tími fyrir gaman músina. -Hvað er það? Læra um ábendingum? Ó, goodie. [END vídeó spilun] DAVID Malan: Það er Stanford tölvufræði. Svo meira um það að koma. [Applause] DAVID Malan: Því miður, Nick. Svo muna að síðast þegar við endaði á þetta virkilega spennandi cliffhanger þar þessi aðgerð bara virkaði ekki. Amk innsæi, fannst það eins og það ætti að virka. Einfaldlega skipta gildin tveggja heiltalna. En muna að þegar við prenta út upprunalegu gildi í helstu, einn og tveir, voru þeir enn einn og tvö og ekki tveir og einn. Svo láta mig skipta í raun yfir á tækið. Og ég skrifaði upp smá beinagrind kóða í fara hér, þar sem ég halda því fram að x verði 1, y verður 2. Ég prenta þá út bæði þeirra gildi með F prenta. Ég kröfu þá niður hér að við erum að fara að skipta á þeim. Ég skildi eftir tóman stað hér fyrir okkur til fylla í dag á aðeins augnablik. Þá ætla ég að halda því fram að tvær breytur hafa verið skipti. Þá er ég að fara að prenta þá út aftur. Og svo vonandi, ætti ég að sjá 1, 2. 2, 1. Það er frábær einfalt Markmiðið núna. Svo hvernig við förum um að skipta tvær breytur? Jæja ef ég leggja hér að þessar bolla gæti tákna minni í tölvu. Þetta er nokkur bit, þetta er annað nokkrum bit. Gætum við fengið sjálfboðaliða Komdu upp og blanda okkur nokkra drykki, ef þekki? Komdu upp. Hvað er nafn þitt? JESS: Jess. DAVID Malan: Jess? Komdu upp, Jess. Ef þú dont 'hugur, verðum við að setja Google Gler á þig svo við getum immortalize þetta. OK, gler. Taka upp myndskeið. Og OK, við erum gott að fara með Jess hér. Allt í lagi. Gaman að hitta þig. Svo það sem ég vil eins og þú gerir hér - ef þú gætir, alveg fljótt - bara hellir okkur hálft glas af appelsínu safa og hálft glas af mjólk, fulltrúi í raun númer 1 í einum bolla og 2 í hinum bikarnum. Þetta er að fara að vera góður myndefni. JESS: miður. DAVID Malan: Nei, nei. Það er allt í lagi. Nice. Allt í lagi, þannig að við höfum fjórar bæti virði af appelsínusafa. Við munum kallast það gildið 1. Nú fjórar bytes virði af mjólk. Mun kalla það gildi 2. Sem x og y, í þessari röð. Allt í lagi, svo nú ef verkefni á hönd - fyrir þig, Jess, fyrir framan alla af bekkjarfélögum þínum - er að skipta um gildi x og y svo að við viljum að appelsínusafa Í annar bolli og mjólk í þessum bolla, hvernig þú might - áður en þú gerir í raun það - fara að gera þetta? OK, vitur ákvörðun. Svo þú þarft aðeins meira minni. Svo skulum úthluta tímabundið bolli, ef þú vilt. Og nú halda áfram að skipta x og y. Excellent. Svo mjög vel gert. Þakka þér svo mikið, Jess. Hér þú ert. Smá minjagrip. OK, svo augljóslega, frábær einfalt hugmynd. Alveg innsæi að við þurfum svolítið meira geymslupláss - í þessu formi, bolla - ef við viljum í raun og veru að skipta þessar tvær breytur. Þannig að við skulum gera einmitt það. Upp hér á milli þar sem ég halda að ég er fara að gera nokkrar skipta, ég fara á undan og lýsa afleysingamanneskja. Og ég mun láta það jafnt, segja, x. Þá er ég að fara að breyta gildi x bara eins Jess gerði hér með mjólk og appelsínusafa að vera jöfn y. Og ég ætla að breyta Y til að vera jöfn að ekki x, því nú erum við væri fastur í hring, heldur temp. Þar sem ég tímabundið - eða þar Jess tímabundið setja appelsínusafa áður clobbering að bolli með mjólk. Svo láta mig fara á undan núna og gera þetta. Það heitir noswap.c. Og nú láta mig hlaupa ekki skipti. Og reyndar ég, ef ég stækka gluggi svolítið, sem x er 1, y er 2.. Og þá er x 2, y er 1. En muna að á mánudaginn gerðum við það svolítið öðruvísi þar sem ég staðinn innleitt hjálpar virka, ef þú vilt, það var í raun ógilt. Ég kallaði það skipti. Ég gaf henni tvær breytur, og ég kallaði þeim og ég kallaði þá b. Frankly, gæti ég kalla þá x og y. Það er ekkert stoppa mig frá að gera það. En ég myndi halda því fram að það er svo smá óljós. Vegna muna fyrir mánudag sem við haldið fram að þessir þættir voru afrit af gildum liðin inn Svo það boðberi bara með þinn huga, held ég, ef þú notar nákvæmlega sömu breytur. Svo ég ætla í staðinn að hringja þeim og b, bara fyrir skýrleika. En við gætum kalla þá mest eitthvað sem við viljum. Og ég ætla að afrita og líma raun þetta númer frá upp niður hér. Vegna þess að ég sá bara að það virkar. Svo er það í nokkuð góðri þjálfun. Og ég breyta x mínum í, x minn til a, y minn til b og y mína til b. Svo í öðrum orðum, nákvæmlega sama röksemdafærsla. Nákvæmlega sama sem Jess gerði. Og þá eitt sem ég hef að gera upp hér, að sjálfsögðu, er nú að kalla fram þessa virka, eða kalla þessa aðgerð. Þannig að ég mun kalla þessa aðgerð með tveimur aðföng, x og y, og högg á Vista. Allt í lagi, svo í grundvallaratriðum sama. Í raun hef ég sennilega gert forritið óþarflega flókið með skrifa fall sem er bara að taka sumir sex línur af kóða en ég áður hafði framkvæmda þetta í aðeins þrjú. Svo láta mig fara á undan núna og endurgerð þetta, gera ekki skipti. Allt í lagi, ruglaður ég upp hér. Þetta ætti að vera villa sem þú gætir sjá æ almennt eins og þinn forrit fá flóknari. En það er auðvelt festa. Leyfðu mér að fletta aftur upp hér. Og hvað er það fyrsta villa ég sjá? Óbeina yfirlýsingu. Hvað þýðir að benda yfirleitt? Ó, ég gleymdi frumgerð. Ég gleymdi að kenna þýðanda sem skipti er að fara að vera til jafnvel þótt hann er ekki til í upphafi af the program. Þannig að ég ætla bara að fara að segja ógilt, skipti, int, sem int b, semíkommu. Þannig að ég ætla ekki að reimplement það. En nú passar það hvað er hérna. Og tilkynningu, án þess semíkommu hér, sem er ekki nauðsynlegt þegar framkvæmd. Svo láta mig endurgerð þetta, gera ekki skipti. Miklu betra form. Hlaupa ekki skipti. Og fjandinn. Nú erum við aftur þar sem við vorum á mánudag, þar sem hlutur ekki skipta. Og hvað er leiðandi skýring hvers vegna þetta er raunin? Já? STUDENT: [inaudible]. DAVID Malan: Einmitt. Svo sem a og b eru eintök af x og y. Og í raun, hvenær þú hefur verið hringja í aðgerð svona langt að fer breytur eins ints - eins skipti er von hér - þú krakkar hafa verið farið í eintökum. Nú það þýðir að það tekur svolítið tíma, hættu annað, fyrir tölva til að afrita bita úr einni breytu í bita af öðru. En það er ekki svo stór samningur. En þeir eru engu að síður afrit. Og svo nú, í tengslum við skipti, Ég er í raun tekist breyta og b. Í staðreynd, við skulum gera a fljótur geðheilsan athuga. Prenta F a er% i, nýja línu. Og stinga skulum í. Nú skulum gera það sama með b. Og við skulum gera það sama hér. Og nú, láttu mig afrita sömu línur aftur neðst á virka eftir þrjár línur mínum áhugavert hefði framkvæmt, og prenta a og b enn og aftur. Svo nú skulum gera þetta, gera ekki skipti. Leyfðu mér að gera í flugstöðinni glugga í hluti hærri, svo að við getum séð meira af því í einu. Og hlaupa ekki skipti. x er 1, y er 2.. a er 1, b er 2.. Og þá, sem er 2, b er 1. Svo það er að vinna, rétt eins og Jess gerði hér inni skipti. En auðvitað, það hefur engin áhrif á breytum í helsta. Svo við sáum bragð þar sem við gæti lagað þetta, ekki satt? Þegar þú ert frammi fyrir þessum scoping mál, þú bara Punt og gera x og y hvaða breytur í staðinn? Þú gætir gert þær heimsvísu. Setja þá á the mjög toppur af the skrá eins og við gerðum, jafnvel í leiknum 15. Við notum alþjóðlegt breytu. En í samhengi í leiknum sem 15, það er sanngjarnt að hafa alþjóðlegt Variable alþingismaður borð, vegna þess að heild á 15.c er allt um framkvæmd þessi leikur. Það er það sem skrá er til að gera. En í þessu tilfelli hér, ég Að kalla fram aðgerðir skipti. Ég vil skipta tvær breytur. Og það ætti að byrja að líða bara sloppy ef lausnin á öllum okkar vandamál þegar við hlaupum í umfangi mál er að gera það alþjóðlegt. Vegna mjög fljótt program okkar er að fara að verða alveg sóðaskapur. Og við gerðum það mjög sparlega vegna í 15.c. En það kemur í ljós að það er betri leið að öllu leyti. Leyfðu mér að fara í raun til baka og eyða prenta er f, bara til að einfalda kóðann. Og láta mig leggja til að þetta, reyndar er, slæmt. En ef ég bæti í staðinn í sumum stjörnum og stjörnur, get ég í staðinn að snúa þessu virka inn í einn sem er reyndar starfræktar. Svo láta mig fara aftur hingað og viðurkenna að segja Stars er alltaf erfitt, svo ég segi stjörnum. Ég ætla bara fess upp að eitt. Allt í lagi. Og nú, hvað er ég að fara að gera í staðinn? Svo fyrst af öllu, ég ætla að tilgreina að í stað þess að standast int inn skiptigengi virka, ég er í staðinn að fara að segja int stjörnu. Nú, hvað þýðir stjörnu benda? Þetta er að hugmyndinni um músina að Binky er claymation eðli, var vísa til stund síðan. Þannig að ef við segjum int stjörnu, merkir þetta nú er að er ekki að fara að vera samþykkt í því verðmæti hennar. Það er ekki að fara að afrita inn Frekar, heimilisfang a er fara til að fara framhjá inn Svo muna að inni í tölvunni þinni er allt fullt af minni, annars þekktur sem RAM. Og það RAM er bara allt fullt af bætum. Þannig að ef Mac eða tölvan hefur tveggja gígabæta, hefur þú 2 billjón bæti af minni. Nú skulum bara gera ráð fyrir að bara að halda hlutum gott og skipulegan, við framselja netfang - tala - að sérhver bæti af RAM í tölvunni þinni. The mjög fyrstur bæti þeim 2 milljarðar er með núlli númeri. Næsta einn er bæti númer eitt, númer tvö, alla leið á upp, punktur punktur punktur, í u.þ.b. 2 milljarðar. Svo þú getur fjöldi bæti af minni í tölvunni þinni. Þannig að við skulum gera ráð fyrir að það er það sem er átt við með heimilisfang. Svo þegar ég sé int stjörnu a, hvað er að gerast til að fara framhjá í skipti nú er heimilisfang a. Ekki gildi þess, en hvað í pósti þess netfang er, svo að segja - staðsetningu þess í vinnsluminni. Og tilsvarandi fyrir b, ég er að fara að segja það sama. Int, stjarna, b. Sem innskot, tæknilega stjörnu gæti farið í öðrum stöðum. En við munum staðla á stjörnunni vera við hliðina á gögn tegund. Svo skipta undirskrift nú þýðir, gefa mér veffang heiltala, og kalla að takast á við. Og gefa mér annað veffang int og kalla þessi tölu b. En nú hefur númerið mitt hér til að breyta. Vegna þess að ef ég lýsi int afleysingamanneskja - sem er enn í int - en ég að geyma í það, hvaða gildi? Til að vera skýr, ég binda A með númerið sem skrifað núna? Ég er að setja staðsetningu í a. En ég er ekki sama um staðsetning nú, ekki satt? Hitastig til bara Jess 'þriðja bolla verið, í hvaða tilgangi? Að geyma verðmæti. Mjólk eða appelsínusafa. Ekki til í raun og veru að geyma veffang annaðhvort af þeim hlutum, sem líður lítið nonsensical í þetta raunverulegt Heimurinn samhengi samt. Svo í raun, það sem ég vil setja í Temp er ekki heimilisfang a, en Innihald. Svo ef er tala eins og 123, þetta er The 123 bæti af minni að bara verður að vera hernema, að gildi í verður að vera hernema. Ef ég vil fara á þetta netfang, Ég þarf að segja stjarna. Sama hátt, ef ég væri að breyta því sem er á heimilisfang a, breyti ég þetta til að byrja a. Ef ég vil að geyma í hvað er í því Staðsetning A með hvað er á þeim stað á b, stjarna B stjarna. Svo í stuttu máli, jafnvel ef það er ekki alveg vaskur í enn - og ég myndi ekki búast við að það væri svo hratt - grein fyrir því að allt sem ég er að gera er að prefixing þessar stjörnur til breytum mínum, orðatiltæki grípa ekki þau gildi. Ekki breyta gildum. Heldur skaltu fara til þeirra talna og fá gildi. Fara á þetta netfang og breyta gildið þar. Svo nú langar mig að fletta aftur upp á toppinn, bara að festa þessa línu hér, að breyta frumgerð að passa. En ég þarf nú að gera einn annar hlutur. Innsæi, ef ég hef breytt tegundir rök sem skipti er von, hvað annað þarf ég að breyting á númerið mitt? Þegar ég kalla Víxla. Því núna, er það Ég liggur að skipta enn? Gildi x og verðmæti af Y eða mjólk og appelsínusafa. En ég vil ekki að gera það. Ég vil þess í stað að fara í það? The location x og staðsetning y. Hvað eru póstföng þeirra, svo að segja. Svo til að gera það, það er merkið. Merkið konar hljómar eins heimilisfang. svo n, merkið, heimilisfang af x, og heimilisfang y. Svo það er vísvitandi að við notum &-merkið þegar starf aðgerðina, og stjörnur þegar lýsa og þegar framkvæmd aðgerð. Og bara hugsa um merkið sem heimilisfang rekstraraðila, og stjörnu sem fara þangað rekstraraðila - eða, fleiri almennilega, dereference stjórnandi. Svo er það allt fullt af orðum bara að segja að nú, vonandi, skipti er að fara að vera rétt. Leyfðu mér að fara á undan og gera - skulum reyndar endurnefna skrána, svo þetta forrit samt kallast engin skipti. Ég halda því fram að við munum kalla það swap.c núna. Svo gera, skipti. Punktur, rista, skipti. Og nú örugglega, x er 1, y er 2.. Og þá, x er 2, y er einn. Jæja við skulum sjá hvort við getum ekki gert þetta svolítið öðruvísi og hvað er fara á hér. Fyrst, langar mig að súmma inn á okkar teikna skjár hér. Og láta mig leggja um stund - og þegar ég draga hér verður spegill upp nú - láta mig leggja til að hér er allt fullt af minni, eða RAM, inni á tölvunni minni. Og þetta mun vera bíta númer, skulum segja, 1. Þetta verður bæti númer 2. Og ég mun gera í heild búnt fleiri og þá fullt af punktur punktur punkta til benda til þess að það er 2 milljörðum af þessum hlutum. 4, 5, og svo framvegis. Þannig að það eru fyrstu fimm bœti af minni tölvunnar minnar. Allt í lagi? Mjög fáir af 2 milljarða króna. En nú ætla ég að leggja eftirfarandi. Ég ætla að leggja til að x er að fara að geymt fjölda 1, og Y er að fara til að geyma númer 2. Og láta mig fara á undan núna og táknar þessi gildi sem hér segir. Skulum gera þetta þannig. Gefðu mér bara eina sekúndu. Eitt annað. OK. Ég vil gera þetta smá - skulum gera þetta aftur. Annars ætla ég að og nota Sömu tölur, óviljandi, mörgum sinnum. Svo bara svo að við höfum mismunandi tölur að tala um, við skulum kalla þessa bæti númer 123, 124, 125, 126, og punktur punktur punktur. Og láta mig halda nú að ég ætla að setja gildið 1 hér, og verðmæti 2 hér, annars þekkt sem x og y. Svo gerist það bara svo að þetta er x, þetta er y. Og bara með því að sumir af handahófi tækifæri, sem tölva, stýrikerfi, gerðist að setja x í stað númer 123. Og y endaði í stað 124 - fjandinn. Ég ætti að hafa fasta þetta. Ó maður, ég vil virkilega að gera þetta? Já, ég vil að laga þetta og B réttur um þetta í dag. Því miður, ný á þessu. 127, 131, og ég vildi ekki vera svona flókið, en hvers vegna gerði ég breyta tölur þar? Því ég vil að ints til raun að vera fjórir bæti. Svo skulum vera frábær endaþarms um þetta. Þannig að ef 1. gerist að vera beint 123, 2 er að fara að vera á heimilisfang 127 vegna þess að það er bara 4 byes burtu. Það er allt. Og við munum gleyma öllu af önnur heimilisföng í heiminum. Sem x er á stað 123, y er að staðsetning 127. Og nú, hvað ég reyndar langar að gera? Þegar ég kalla skipti nú, hvað er í raun að fara á? Jæja, þegar ég kalla skipti, ég farið í veffang x og heimilisfang y. Svo til dæmis, ef þessir tveir stykki pappír nú tákna tvö rök A og B að skipta, er það sem ég að fara að skrifa á fyrsta þeirra, sem ég ætla að hringja í vísa til sem a? Einmitt, 123. Svo er þetta ég kröfu a. Þetta er viðfang a. Ég er að setja veffang x þar. Hvað er það? Hvað er það? Nei. Það er allt í lagi. Enn gott, samt gott. Þannig að þetta er. Og nú á seinni stykki af pappír, þetta er að fara að vera b, og hvað er ég að fara að skrifa á þetta blað? 127. Svo það eina sem hefur breyst síðan Fyrri ómögulegt að segja okkar af þessari sögu er, frekar en bókstaflega 1 og 2, ég að fara að fara í 123 og 127. Og ég ætla nú að fara að setja þær í þessa kassa, allt í lagi? Svo táknar að svartur kassi nú skiptigengi virka. Á sama tíma, við skulum nú hafa einhver framkvæma skipti virka. Myndi einhver upp hér eins og til sjálfboðaliði? Komdu upp. Hvað er nafn þitt? Charlie. Allt í lagi, Charlie. Komdu upp. Svo Charlie er að fara að spila hlutverk svartur kassi okkar. Og Charlie, það sem ég vil að þú gerir nú er að innleiða skipti á þann hátt að miðað þessir tvö heimilisföng, þú varst í raun að fara að breyta gildum. Og ég mun hvísla í eyrað hvernig á að keyra sjónvarpið hér. Svo fara á undan, og þú ert svartur kassi. Náðu í það. Hvaða gildi sérð þú fyrir a, og Hvaða gildi sérðu fyrir b? CHARLIE sem: a er 123 og b er 127. DAVID Malan: OK, nákvæmlega. Nú hlé þar fyrir aðeins augnablik. The fyrstur hlutur þú ert að fara að gera núna, í samræmi við kóða - þar sem Ég nú draga upp á skjánum - er að fara að vera að úthluta smá hluti af minni kallast afleysingamanneskja. Þannig að ég ætla að fara á undan og gefa þér að minni. Þannig að þetta er að fara að vera þriðja breytu að þú hefur aðgang að þú kallaðir afleysingamanneskja. Og hvað ert þú að fara að skrifa á afleysingamanneskja blað? CHARLIE: Ábendingum, ekki satt? DAVID Malan: OK, vel ekki endilega ábendingum. Svo lína af kóða sem ég hef hápunktur á the réttur hönd hlið, skulum byrja þar. Það segir stjörnu a. Svo er nú að geyma fjöldi 123. Og bara innsæi, hvað gerði stjörnu 123 meina? En sérstaklega, ef a er 123, stjarna sem þýðir hvað? Gildi a. Eða meira frjálslegur, fara þangað. Svo láta mig leggja til að, halda á í hönd þín, fara á undan og meðhöndla það eins og það er kort. Og ganga sjálfur yfir til the tölva ' minni, og finna okkur hvað er á stað 123. Einmitt. Svo við sjáum á stað 123 er það, augljóslega? OK, svo það gildi nú ert þú að fara að setja inn Temp? Einmitt. Svo fara á undan og gera það. Og skrifaðu númer 1 á stykki af pappír sem er nú heitir afleysingamanneskja. Og nú er næsta skref að þú ert að fara að framkvæma er að fara að vera það. Jæja, á hægri hönd hlið af the næsta lína af kóða er stjarna b. b, af Námskeiðið, geymir ávarp. Sem fjallar 127. Star B þýðir það, frjálslegur tala? Fara á þeim stað. Svo fara á undan og finna okkur hvað er á stað 127. OK. Auðvitað, á stað 127, er enn gildi 2.. Svo hvað ert þú að fara nú geymt á hvað er á þeim stað í a? Svo stjörnu leið fara að stað með. Hvað er staðsetning a? Einmitt. Svo nú ef þú vilt breyta hvað er á þeim stað - Ég fer á undan og hlaupa strokleður eru hér. Og nú setti hana aftur á bursta. Hvaða númer ertu að fara að skrifa í því auða reitinn núna? Einmitt. Þannig að þetta lína af kóða, að vera ljóst - að láta mér hlé það er Charlie að gera og benda á hér, hvað hann er bara gert er skrifa í kassann á stað 123 verðmæti sem var áður á b. Og svo við höfum nú til framkvæmda örugglega þetta annarri línu af kóða. Nú því miður, það er enn ein lína eftir. Nú hvað er í Temp, bókstaflega? Það er augljóslega númer eitt. Það er ekki heimilisfang. Það er bara tala, konar breytu frá viku eitt. Og nú þegar þú segir stjörnu b, sem þýðir fara til the heimilisfang b, sem er að námskeið hér. Svo þegar þú færð það - Ég fer á undan og eyða hvað er raunverulega það - og hvað ert þú að fara að skrifa núna á 127 staðsetningu? CHARLIE: Hitastig, sem er eitt. DAVID Malan: Temp, sem er eitt. Og hvað gerist í Temp í lokin? Jæja, eigum við ekki raunverulega vita. Við í raun ekki sama. Hvenær við höfum innleitt virka svona langt, allir heimamaður breytur sem þú hefur eru örugglega staðbundin. Og þeir hverfa bara. Þeir eru endurheimtur af rekstri kerfið á endanum. Sem sú staðreynd að hitastig hefur enn á gildi 1 er tegund af grundvallaratriðum uninteresting okkur. Allt í lagi, þannig að umferð lófaklapp ef við gætum fyrir Charlie. Mjög vel gert. Allt í lagi, svo er það meira þetta að við getum gert? Svo kemur í ljós að við höfum verið segja nokkur hvít lygi um langt skeið. Reyndar kemur það í ljós að band, allan þennan tíma, er í raun ekki röð af stöfum í sjálfu sér. Það er góður af því innsæi. En tæknilega séð, band er gögn gerð sem við lýst inni The CS50 bókasafn til að einfalda heiminn fyrir fyrstu vikum flokki. Hvað band raun er er heimilisfangið um eðli einhvers staðar í vinnsluminni. A band er í raun tala, eins og 123 eða 127, sem gerist að afmarka þar sem band hefst í tölvunnar minni. En það er ekki um að band, í sjálfu sér,. sjálft Og við getum séð þetta þannig. Leyfðu mér að fara á undan og opna sumir númer sem er meðal dag kóðann dæmi. Og ég ætla að fara á undan og opna upp, við skulum segja, bera-0.c. Þetta er þrjótur forrit sem er að fara til að vera framkvæmd eins og hér segir. Fyrst. Ég ætla að segja eitthvað. Þá ætla ég að fara á undan og fá band frá notanda í þeirri næstu línu. Svo ég ætla að segja það aftur. Þá er ég að fara að fá annan band frá notandanum. Og tilkynningu, ég sýna eitt af strengi í breytu sem heitir s, og annar þessara strengi í breytu sem heitir t. Og nú ætla ég að halda því fram, mjög sæmilega, að ef s jafngildir jafngildir t, strengir eru þau sömu. Þú skrifar það sama. Annars vegar eru strengir ekki það sama. Eftir allt saman, ef við inntak tvö ints, tvær stafir, tvö fljóta, tvö tveggja manna, allir á þær tegundir gagna sem við höfum talað um svona langt til að bera saman þá - muna við gert mjög ljóst á meðan síðan að þú gerir það ekki þetta, vegna þess að einn jafn merki er að sjálfsögðu framsal rekstraraðila. Svo það væri padda. Við notum jafn jafn skilti, sem reyndar saman hlutir fyrir sönnum jafnrétti. En ég kröfu þetta er þrjótur. Ef ég fer á undan og gera bera núll, og þá ekki bera saman punktur rista núll. Og ég tegund í, segjum, halló. Og þá skulum segja halló aftur. Bókstaflega sama, tölvan krafa Ég gafst mismunandi hluti. Nú kannski ég mistyped bara eitthvað. Ég tegund nafn mitt að þessu sinni. Ég meina, halló. Halló. Það er mismunandi í hvert einasta sinn. Ja, hvers vegna er það? Hvað er raunverulega að gerast undir hetta? Jæja, hvað er raunverulega að gerast undir hetta er band þá Ég gafst upp á þeim fyrsta skipti til dæmis er orð halló, auðvitað. En ef við komum þetta undir hetta, muna að band er í fylki. Og við höfum sagt eins mikið í fortíðinni. Þannig að ef ég teikna þá fylking svona, ég fara til að tákna eitthvað alveg svipað og við gerðum í smá stund síðan. Og það er í raun eitthvað sérstakt hér líka. Hvað höfum vér ákvarða var á í lok hvers band? Já, þetta sviga núll, sem er bara leið fulltrúi, bókstaflega, 00000000. Átta 0 bitar í röð. Ég veit ekki, hreinskilnislega, hvað er eftir þetta. Það er bara fullt meira RAM inni á tölvunni minni. En þetta er fylki. Við ræddum um fylki áður. Og við tölum yfirleitt um fylki eins og að vera staðsetning núll, þá, og síðan tvö. En það er bara fyrir þægindi. Og það er alveg ættingi. Þegar þú ert í raun að fá minni frá tölva, það er að sjálfsögðu allir 2 milljarðar sumir stakur bytes, hugsanlega. Svo í raun undir hetta, allan þennan tíma, já. Þetta gæti mjög vel verið krappi núll. En ef þú grafa enn dýpra undir hetta, sem er í raun takast númer 123. Þetta er tölu 124. Þetta er tölu 125.. Og ég vissi ekki skrúfa upp þennan tíma. Þetta eru nú eitt bæti sundur til hvers? Hversu stór er bleikju? A bleikju er bara eitt bæti. Int er yfirleitt fjögur bæti. Svo að hvers vegna ég gerði það 123, 127, 131 og svo framvegis. Nú get ég haldið stærðfræði einfaldari og bara gera auk 1. Og þetta er nú það sem er raunverulega að gerast á undir hetta. Svo þegar þú lýsa eitthvað eins og this, band s, þetta er í raun - það kemur í ljós - bleikju stjörnu. Star, að sjálfsögðu, þýðir heimilisfang, aka músina. Svo er það heimilisfang eitthvað. Hvað er það heimilisfang? Jæja - Ég er sú eina sem getur séð mjög mikilvægt atriði sem ég er að gera, hugsa eða Ég er að gera. Svo band - The dapur hlutur er ÉG hafa a skjár þarna þar sem ég gæti hafa séð það. Allt í lagi, svo er band er það Ég lýsti áður. En það kemur í ljós, þökk sé smá galdur á CS50 bókasafn, allt þetta tími band hefur bókstaflega verið bleikju stjörnu. Stjarnan þýðir aftur bendillinn eða heimilisfang. Sú staðreynd að það er hliðstæðra á Orðið bleikju þýðir að það er heimilisfang staf. Þannig að ef fá band heitir, og ÉG tegund í H-E-L-L-O, er nú lagt það sem hefur fengið band bókstaflega verið aftur öll í þetta sinn, jafnvel þó að við höfum frekar oversimplified heiminn? Hvað þýðir að fá band í raun aftur sem gildi aftur hennar? 123 í þessu tilfelli, til dæmis. Við höfum áður sagt að fá band einfaldlega skilar streng, röð stafir. En það er a hluti af a hvítu lygi. Leiðin fá band virkar í raun undir hetta er það fær band frá notandanum. Það plops stafi sem hann eða hún gerðir í minni. Það leggur sviga núll í lok af þeim röð af stöfum. En þá hvað er að fá band bókstaflega aftur? Það skilar bókstaflega veffang mjög fyrstu bæti í vinnsluminni sem það er notað til að styrkur. Og það kemur í ljós að með því að koma aftur einn heimilisfang Fyrsti stafurinn í streng, sem er nóg að finna um alla band. Með öðrum orðum, fá strengur er ekki með til að fara aftur 123 og 124 og 125. Það þarf ekki að gefa mér fyrir listi yfir allt bæti því að band mitt er að nota. Vegna einn, þá eru þeir allir aftur til baka. Og tveir, miðað við fyrstu tölu, ég getur fundið út hvar strengurinn endar. Hvernig? Sérstaða null eðli, sviga núll í lokin. Svo í öðrum orðum, ef þú fara í kringum - inni á breytum - netfang á bleikju, og þú tekur að í lok hvers band, allir röð af stöfum sem við mennirnir hugsa um strengi, ef þú gera ráð fyrir að í lok slíkra band það er A sviga núll, þú ert gullna. Þar sem þú getur alltaf fundið enda streng. Nú hvað er raunverulega þá fara á í þessari áætlun? Hvers vegna er þetta forrit, bera-0.c, þrjótur? Hvað er í raun verið saman? Já? STUDENT: [inaudible]. DAVID Malan: Einmitt. Það er að bera saman staði á strengi. Svo ef notandi hefur slegið inn halló einu sinni, eins og ég gerði, minni gæti endað útlit eins og this. Ef notandi þá slær í Halló aftur, en með því að kalla að fá band aftur, c er ekki sérstaklega snjall nema þú kenna það að vera snjall með því að skrifa kóðann. C - og tölvur almennt - ef þú slærð í orðinu halló aftur, þú veist hvað þú ert að fara að fá. Þú ert bara að fara að fá annað array af minni að, já, gerist vera geyma H-E-L-L-O og svo framvegis. Það er að fara að horfa á það sama við okkur mönnum, en þetta netfang gæti ekki verið 123. Það gæti bara svo gerst að stýrikerfi hefur sumir boði pláss til dæmis á stað - skulum segja eitthvað handahófskennt, eins og þetta er staðsetning 200. Og þetta er staðsetning 201. Og þetta er staðsetning 202. Við höfum ekki hugmynd um hvar sem er að fara að vera í minni. En hvað þýðir þetta er að það er fara að geyma endanum í s? Talan 123. Hvað er að fara að vera geymd í t, í þessu handahófskennda dæmi? Talan 200. Og allt það þýðir þá er augljóslega 123 er ekki jafnt 200. Og svo þetta ef ástand aldrei metur að sanna. Vegna FÁ band er að nota mismunandi klumpur af minni í hvert sinn. Nú getum við séð þetta aftur í annað dæmi. Leyfðu mér að fara á undan og opna afrita 0.c. Ég halda því fram að þetta dæmi er að fara til reyna - en ekki - að afrita tvo strengi eins og hér segir. Ég ætla að segja eitthvað til notandans. Ég ætla þá að fara að fá band og kalla það s. Og nú er ég að gera þetta eftirlit hér. Við nefndi þetta á meðan bak. En þegar might fá band skila NULL, annar sérstaka eðli, eða sérstakt tákn segjum. Ef það er út af minni. Fyrir dæmi, ef notandinn er í raun vera erfitt og tegundir sem grimmilegur fjölda stafa í því lyklaborð og smellir á Enter. Ef þessi fjöldi stafi bara get ekki passa í vinnsluminni fyrir hvað brjálaður Ástæðan, vel að fá band gæti mjög vel aftur null. Eða ef forritið þitt sjálft er að gera a einhver fjöldi um aðra hluti og það er bara ekki nóg minni fyrir fá band til að ná árangri, gæti það enda upp aftur null. En við skulum vera nákvæmari um hvað þetta er. Hvað er gögn gerð S er í raun? Char stjörnu. Svo kemur í ljós nú getum afhýða aftur lag af null. Skrúfjárn út, null er - já, augljóslega sérstakt tákn. En hvað er það í raun? Raunverulega, null er bara tákn sem við menn nota til að tákna núll og vel. Svo höfundar C og tölvur almennt, ákvað árum að, þú veist hvað. Hvers vegna eigum við ekki að tryggja að enginn notandi gögn er alltaf, alltaf, alltaf geymd á núll bless? Í raun, jafnvel í handahófi dæmi mínu áður, gerði ég ekki að byrja tala við bæti við núll. Ég byrjaði á einn. Vegna þess að ég vissi að fólk í heiminum hafa ákveðið að panta núll bæti í RAM neinum sem eitthvað sérstakt. Ástæðan sé, hvenær sem þú vilt merki um að eitthvað hafi farið úrskeiðis með tilliti til viðtakandi, aftur þú null - annars þekkt sem núll - og vegna þess að þú veist að það er engin legit gögn á heimilisfang núll, greinilega sem þýðir villu. Og það er þess vegna sem við, með því að venju, athuga for null og aftur eitthvað eins og einn í þeim tilvikum. Þannig að ef við fletta niður núna, þetta er bara þá sumir villuprófun, bara ef eitthvað fór úrskeiðis með [? tryggingu?] með öllu og hætta forritið því aftur snemma. Þessi lína nú mætti ​​endurskrifa eins og þetta, sem þýðir hvað? Á vinstri hönd hlið, gefa mér annan bendillinn að staf, og kalla það t. Hvað er ég að geyma inni t, byggt á þessum eina línu af kóða? Ég er að geyma staðsetningu. Sérstaklega staðsetningin sem var í s. Svo ef notandi hefur slegið í halló, og sem fyrst gerist halló til enda hér, þá er talan 123 fara að koma til baka frá fá band og geymdar - eins og ég sagði áðan - í s. Þegar ég lýsi nú annað bendi til A bleikju og kalla það t, hvaða tala er bókstaflega að fara að enda í T samkvæmt sögunni? Svo 123. Svo tæknilega nú bæði s og T eru benda til nákvæmrar sömu klumpur af minni. Svo taka það sem ég ætla að gera núna til að sanna að þetta forrit er þrjótur. Fyrst ætla ég að halda því fram, með prenta f capitalizing afrit af the band. Svo ég ætla að gera smá villuprófun. Ég ætla að ganga úr skugga um. Við skulum vera viss um að band t er á kosti stærri en núll í lengd, þannig að það er einhver persóna úti að í raun nýta. Og þá þú might muna þetta frá fyrri dæmum. 2 efri - sem er í The ctype.h skrá. T krappi núll gefur mér núll eðli band t. Og 2 efri af sama verðmæti, auðvitað breytir það í hástafi. Svo innsær, þetta hápunktur línu af kóða er capitalizing fyrsta bréf í t. En það er ekki hagnast, innsæi, fyrsti stafurinn í s. En ef þú ert að hugsa fram í tímann, er það sem ég um að sjá þegar ég keyrt þetta forrit og prenta út bæði upprunalega, s, og svokölluð afrita, T? Þeir eru í raun að fara til vera the sami. Og hvers vegna eru þeir að fara að vera eins? Þeir eru báðir benda til nákvæmlega það sama. Svo skulum gera þetta. Gerðu afrit núll. Það safnar lagi. Leyfðu mér að hlaupa afrita núll. Leyfðu mér að slá eitthvað eins halló í allt lágstafir högg þá inn. Og það heldur því fram að bæði upprunalega s og afrit eru örugglega eins. Svo hvað raunverulega gerðist hér? Leyfðu mér að gera annað uppkast þessa mynd bara að segja sögu í örlítið mismunandi hátt. Hvað er raunverulega að gerast undir hlutanum hetta þegar ég lýsa eitthvað eins bleikju byrja s, eða band s, Ég er að fá músina - sem gerist að vera fjórir bœti í CS50 tæki og í fullt af tölvum. Og ég ætla að kalla þessa s. Og þetta hefur nú sumir óþekkt gildi. Þegar þú lýsa breytu, nema þú sjálfur setti gildi þar, hver veit hvað er þar. Það gæti verið einhver af handahófi röð bits frá fyrri framkvæmd. Svo þegar ég, gera í samræmi mínu kóða fá band, og þá geyma aftur gildi í s fá band einhvern veginn - og við munum að lokum afhýða aftur hvernig fá band virkar einhvern veginn úthlutar að array sem sennilega lítur svolítið eins og þetta. H-E-L-L-O, sviga núll. Skulum gera ráð fyrir að þetta er heimilisfang 123 bara fyrsta samræmi. Svo fá band aftur, í auðkenndur línu þar, skilar það tala við sögðum, 123. Svo fer það virkilega inni s hér? Jæja, hvað raunverulega fer inni S er 123. En satt, ég er að fá smá rugla með öllum þessum talna, allar þessar handahófi númer. 123, 124, 127. Þannig að við skulum í raun einfalda heimurinn svolítið. Þegar við tölum um ábendingum, hreinskilnislega, að okkur mönnum, sem Heck er ekki sama hvar hlutir eru í minni? Það er alveg handahófskennt. Það er að fara að ráðast á hvernig mikið vinnsluminni sem notandinn hefur. Það er að fara að ráðast á þegar í dag þú keyrir forritið, ef til vill, og hvaða inntak sem notandinn gefur þér. Við erum bústað á máli upplýsingar. Svo skulum ágrip burtu og segja að, þegar þú keyrir línu af kóða eins og þetta, bleikju stjörnu s fær aftur Verðmæti FÁ band. Hvers vegna eigum við ekki í staðinn bara draga það sem við halda starf músina eins og það er benda á eitthvað? Svo ég halda nú að s upp það er bendiprik - undir hetta það netfang. En það er bara að benda á að fyrsta bæti í band sem hefur verið skilað. Ef ég skila nú kóðann hér, hvað er að gerast á þessari línu? Jæja, í þessari auðkenndur línu nú, Ég lýsa greinilega annað breytu sem kallast t. En það er líka músina, þannig að ég ætla að draga það sem, í orði, nákvæmlega sama stærð kassi. Og ég ætla að kalla það t. Og nú ef við förum aftur til kóðann aftur, þegar ég geyma s inni í t, hvað er ég tæknilega setja inni t? Jæja tæknilega, þetta var númer 123. Svo í raun ætti ég að vera að skrifa fjölda 123 er komið. En við skulum taka það hærra stigi. t, ef það er bara músina, innsær er bara þessi. Það er allt sem er verið að geymd þar. Svo nú á síðustu áhugaverðum línum af kóða, þegar ég fer í raun um capitalizing núll staf í t, hvað er að gerast? Jæja, T krappi núll er nú bendir hvað eðli, væntanlega? Það er benda til h. Þar sem T krappi núll - muna, þetta er gamall setningafræði. T krappi núll þýðir bara ef t er a band, T krappi núll þýðir að fá núll eðli í þeim styrk. Svo það sem raunverulega þýðir er að fara á þetta fylki - og já, þetta gæti verið 123, þetta gæti verið 124. En það er allt ættingja, man. Alltaf þegar að tala um fjölda, höfum við Kosturinn við að tala um miðað vísitölur. Og svo nú getum við bara gera ráð sem T krappi núll er h. Svo ef ég kalla 2 efri á það, hvað það er raun að gera er að hagnast lágstafir klst til hástafi H. En auðvitað, hvað er s? Það er að benda á sama fjári band. Svo er þetta allt sem er verið að gerast í þessum kóða svo langt. Svo er það þá vísbendingu? Hvernig lögum við þessi tvö vandamál? Hvernig berðu við raunverulegum strengi? Jæja innsæi, hvernig væri þú ferð um að bera saman tvö strengir fyrir sönnum jafnrétti? Hvað þýðir það ef tveir strengir eru jafnir? Greinilega ekki að heimilisföng þeirra eru jafnt í minni, vegna þess að það er lágt stigi framkvæmd smáatriði. Allar persónurnar eru þær sömu. Svo láta mig leggja til, og láta mig kynna í útgáfu eitt af compare.c hér, svo bera-1.c. Leyfðu mér að leggja til að við fáum enn bendillinn heitir s, og geyma í það skilagildi fá band. Skulum gera það sama með t. Svo er ekkert af kóða öðruvísi. Ég ætla að bæta smá meira villuprófun núna. Svo nú er að við erum svona flögnun baka þetta lag í CS50 af hvaða band reyndar er, þurfum við að vera meira endaþarms um að tryggja að við ekki misnota Vitlaus gildi eins null. Þannig að ég ætla bara að fara að athuga. Ef s er ekki jafn null og t ekki jafnt null, sem þýðir að við erum í lagi. Fá strengur ekki skrúfa upp getting annaðhvort þeirra strengi. Og þú getur kannski giska nú, hvað gerir STR CMP gera væntanlega? Band saman. Svo ef þú hefur forritað í Java áður, þetta er eins og equals aðferðin í String klasinn. En fyrir þá sem hafa ekki forritað áður, þetta er bara c-virka. Það gerist að koma í skrá sem heitir string.h. Það er þar sem það er lýst. Og band bera - Ég gleymi reyndar notkun þess, en aldrei huga að. Muna að við getum gert maður, hrærið saman. Og þetta er að fara að koma upp Linux forritari handbók. Og það er satt, smá dulinn. En ég get séð hér að, svarið. Ég verð að fela string.h. Og það segir hér undir lýsingu, "the band Berðu saman virka saman tveir strengir S1 og S2. "Og S1 og S2 eru greinilega tveir rök liðin inn Ég í raun ekki muna hvað const er, en nú eftir - og þú gætir hafa séð þetta þegar þegar þú hefur notað manninn síður ef þú hafa það allt - að bleikju stjarna er bara samheiti með streng. Svo ber það tveir strengir, S1 og S2, og það skilar heiltölu minna en eða jafnt og eða hærra en núll ef S1 er að finna, hver um sig, til að vera minna en, eða passa, eða vera meiri en S2. Það er bara mjög flókið leið til að segja að strengur bera ávöxtun núll ef tveir strengir eru innsær eins, staf fyrir staf fyrir staf. Það skilar neikvæð tala, ef s, í stafrófsröð, er ætlað að koma fyrir t. Eða skilar jákvæð tala ef s er ætlað að koma á eftir t stafrófsröð. Svo með þessari einföldu aðgerð, gæti þú, til dæmis, raða allt fullt af orðum? Svo í þessari nýju útgáfu, ég er að fara að fara á undan og gera compare1. Punktur rista bera einn. Ég tegund í halló í öllum lágstöfum. Ég ætla að slá í halló í öllum lágstöfum aftur. Og sem betur fer nú áttar það Ég gafst það sama. Á sama tíma, ef ég tegund í halló í neðri tilfelli og HELLO með hástöfum og bera saman þá, slegið I mismunandi hlutir. Vegna þess að ekki aðeins eru heimilisföng mismunandi, en við erum að bera saman mismunandi stafir aftur og aftur. Jæja við skulum fara og festa einn Önnur vandamál núna. Leyfðu mér að opna útgáfu eitt af afrita, sem nú fjallar þetta mál eins og hér segir. Og þetta er að fara að líta svolítið flóknari. En ef þú hugsa um hvað vandamálið við þarf að leysa, vonandi mun þetta vera hreinsa í bara smá stund núna. Þannig að þetta fyrsta lína, bleikju byrja t, í skilmálum leikmaður gæti einhver lagt hvað þessi lína hér þýðir? Char stjörnu t, hvað er að gera? Gott. Búa til bendi á sumum blettur í minni. Og láta mig hreinsa hann svolítið. Lýsa yfir breytu sem mun geyma heimilisfang sumir bleikju í minni, bara að vera svolítið meira viðeigandi. OK, svo nú á hægri hönd, hef ég aldrei séð einn af þessum aðgerðum áður, malloc. En hvað gæti það þýtt? Úthlutun minni. Minni úthlutun. Svo kemur í ljós, allt þar til nú, við hafa í raun ekki haft öflug leið spyrja stýrikerfi, gefið mér minni. Frekar höfum við nú aðgerð sem kallast malloc sem er einmitt þessi. Jafnvel þó að þetta sé frekar mikil truflun núna, eftir því í milli tveggja svigum er bara að fara að vera tala. Þar sem ég hef slegið í spurningunni merki geta verið margar. Og þessi tala þýðir, gefa mér 10 bæti. Gefa mér 20 bæti. Gefðu mér 100 bæti. Og malloc mun gera sitt besta til að spyrja stýrikerfi - Linux, í þessu tilviki - hey, eru 100 bæti þeirra af vinnsluminni í boði? Ef svo er, aftur þá bæti við mig með skil á netfangið sem um þá bæti, kannski? The mjög fyrstur einn. Svo hér líka - og þetta er ríkjandi í C, á meðan þú ert takast með heimilisfang? Þú ert næstum alltaf að takast á við fyrsta tölu, sama hversu stór bútur af minni sem þú ert að afhent aftur, svo að segja. Svo skulum kafa í hér. Ég er að reyna að úthluta hvernig margir bytes, nákvæmlega? Jæja. Band lengd s - við skulum gera áþreifanleg dæmi. Ef s er halló, H-E-L-L-O, hvað er band lengd s, vitanlega? Svo það er fimm. En ég er að gera plús 1 á því, hvers vegna? Hvers vegna vil ég sex bæti í stað þess að fimm? The null eðli. Ég vil ekki að fara burt þetta sérstakt null eðli. Vegna þess að ef ég geri afrit af Halló og bara gera H-E-L-L-O, en ég ekki setja að sérstakt eðli, the tölva gæti ekki hafa, við tækifæri, a sviga núll þarna fyrir mig. Og svo ef ég er að reyna að reikna út lengd afrita, gæti ég held að það er 20 stafir að lengd, eða milljón stafir að lengd ef ég bara aldrei gerst til högg a sviga núll. Þannig að við þurfum sex bæti að geyma H-E-L-L-O, sviga núll. Og þá er þetta bara að vera frábær endaþarms. Segjum sem svo að ég gleymi hvað á stærð við bleikju er. Við höldum að segja eitt bæti hennar. Og það er yfirleitt. Fræðilega séð gæti það verið eitthvað mismunandi, á annarri Mac eða mismunandi PC. Svo kemur í ljós að það er þetta stjórnandi kallað sizeof að ef þú gefa það í heiti gögn tegund - eins bleikju, eða int, eða fljóta - það mun segja þér, virk, hversu margir bæti á bleikju tekur upp á þetta sérstakur tölva. Svo er þetta í raun bara eins og að segja sinnum 1 eða sinnum neitt. En ég ætla að gera það bara til að vera frábær endaþarms, það bara í tilfelli bleikju ólíkt á tölvunni þinni á móti mitt, þannig stærðfræði er alltaf að fara að kíkja. Loksins, niður hér ég athuga for null, sem er alltaf gott - aftur, hvenær við erum að fást við ábendingum. Ef malloc var ekki fær um að gefa mér sex byes - sem er ólíklegt, en bara ef - aftur einn strax. Og nú, fara fram í tímann og afrita band sem hér segir. Og þetta er kunnuglegt setningafræði, að vísu í öðru hlutverki. Ég ætla að fara á undan og fá band lengd s og geyma það í n. Ég ætla þá að fara að iterate frá ég jafningjar núll til og með n, meiri en eða jafnt og. Svo að á hverju endurtekning, ég setti ith eðli s í ith eðli t. Svo hvað er raunverulega að gerast undir hetta hér? Jæja ef þetta, til dæmis, er s - og ég hef slegið í orðinu H-E-L-L-O og það er sviga núll. Og aftur, þetta er s benda hér. Og hér er nú t. Og þetta er að benda nú til afrit af minni, ekki satt? Malloc hefur gefið mér allt klumpur af minni. Ég veit ekki í upphafi hvað er í einhverjum af þessum stöðum. Þannig að ég ætla að hugsa um þetta sem allt fullt af spurningarmerkjum. En um leið og ég byrja að lykkja frá núlli á upp í gegnum lengd s, t krappi núll og t krappi 1 - og ég ætla að setja þetta núna á kostnaður - T krappi núll og s krappi núll meina að ég ætla að vera að afrita iteratively klst í hér, E-L-L-O. Plús, því ég gerði ásamt 1, sviga núll. Svo nú er að ræða bera saman-1.c, í lok, ef ég prenta út fjármögnun t, ættum við sjá að s er óbreytt. Leyfðu mér að fara á undan núna og gera þetta. Svo gera copy1. Punktur rista copy1. Ég ætla að slá í halló, Enter. Og nú eftir, aðeins afrit hefur verið eignfærður. Þar sem ég hef sannarlega tvær klumpur af minni. Því miður getur þú gera sumir laglegur slæmur og laglegur hættulegt hlutur hér. Leyfðu mér að draga upp dæmi hér nú, sem gefur okkur dæmi um nokkrar mismunandi línur. Svo bara innsær hér, fyrsta línan af kóða, int stjörnu x, er lýsa breytu sem heitir x. Og hvað er gögn tegund þeirrar breytu? Hvað er gögn tegund þeirrar breytu? Það var ekki cliffhanger. Gögnin tegund er int stjörnu. Svo hvað þýðir það? x mun geyma veffang int. Einfaldur eins og þessi. Y er að fara að geyma heimilisfang heiltala. Hvað er þriðja línan af kóða gera þarna? Það er úthlutun hversu margir bytes, líklega? Fjórir. Vegna þess að stærð heiltala er almennt fjórir, malloc fjögurra gefur mig aftur veffang klumpur af minni, fyrsta bæti Hvers er geymd nú í x. Nú erum við að flytja smá fljótt. Star x þýðir hvað? Það þýðir að fara á þetta netfang og setja það númer þar? Setja númer 42 þar. Star Y þýðir að fara á það sem er á y og setja númerið 13 þar. En bíddu í eina mínútu. Hvað er í y í augnablikinu? Hvaða netfang er y geymslu? Við vitum ekki, ekki satt? Við höfum aldrei einu sinni að nota verkefni rekstraraðili felur y. Svo Y lýst sem á annarri línu númer er bara sorp gildi, stór spurningarmerki svo að segja. Það gæti verið að benda handahófi við eitthvað í minni, sem er almennt slæmt. Svo um leið og við högg þessi lína þar, stjörnu Y skilar 13, eitthvað slæmt, eitthvað mjög slæmt er um að gerast Binky. Svo skulum sjá hvað er að fara að enda gerast að Binky hér í þessari mínútu eða svo líta. [Vídeó spilun] -Hey, Binky. Vakna. Það er kominn tími fyrir gaman músina. -Hvað er það? Læra um ábendingum? Ó, goodie. -Jæja, til að byrja, held ég að við erum að fara að þurfa nokkra punkta. -OK. Þessi númer úthlutar tveimur ábendingum sem getur bent til heiltalna. -Allt í lagi, vel, ég á tvær ábendingum. En þeir virðast ekki vera benda til nokkuð. -Það er rétt. Upphaflega, gera ábendingar ekki benda til nokkuð. Það sem þeir benda á eru kallaðir pointees, og setja þá upp er aðskilin skref. -Ó, hægri, hægri. Ég vissi það. The pointees eru aðskilin. Svo hvernig gera úthluta þér pointee? -OK. Jæja, þetta númer úthlutar nýja heiltölur pointee, og þessi hluti setur x til að benda á það. -Hey, sem lítur betur. Svo gera það gera eitthvað. -OK. Ég dereference bendillinn x til að geyma númer 42 í pointee hennar. Fyrir þessu bragð, ég þarf galdur minn vendi af dereferencing. -Your Magic vendi af dereferencing? Uh, það er frábært. -Þetta er það kóðinn lítur út. Ég ætla bara að setja upp fjölda, og - -Hey, líta. Það það fer. Svo gera dereference á x segir örin aðgang pointee hennar. Í þessu tilfelli, til að geyma 42 þar. Hey, reyna að nota það til að geyma fjölda 13 með hinu músina, y. -OK. Ég verð bara að fara yfir hér að y og fá númer 13 sett upp. Og þá taka vendi af dereferencing og bara - hó! -Ó, 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ð. -Hmm. Góður punktur. -Já, úthlutað við músina y. En við setjum aldrei það að benda til pointee. -Hmm. Mjög athugull. -Hey, ert þú að leita gott þar, Binky. Þú getur lagað það þannig að Y stig í sama pointee sem x? -Jú. Ég nota galdra sprota minn bendillinn verkefni. -Er það að fara að vera vandamál eins og áður? -Nei. Þetta snertir ekki pointees. Það breytist bara einn músina til að benda að sama og annars. -Ó, ég. Nú y bendir á sama stað og x. Svo bíða. Nú y er fastur. Það hefur pointee. Svo þú geta reyna vendi af dereferencing aftur að senda 13 yfir. -OK. Hér fer. -Hey, líta á það. Nú dereferencing verk á y. Og vegna þess að ábendingar eru að deila að einn pointee, þeir bæði sjá 13. -Já. Hlutdeild. Whatever. Svo erum við að fara skipta stöðum núna? -Ó, sjáðu. Við erum út á tíma. -En - -Bara muna þrjú bendillinn reglur. Númer eitt, þá er einfaldasta uppbygging er að þú ert með músina. Og það bendir á að pointee. En bendillinn og pointee eru aðskilin. Og algeng villa er að setja upp músina, en að gleyma að fá pointee. Númer tvö, bendill dereferencing byrjar á músina og fylgir þess arrow yfir til aðgang pointee hennar. Eins og við allur vita, þetta virkar aðeins ef það er pointee, sem fær aftur að Regla númer eitt. Númer þrjú, bendill verkefni tekur einn músina og breytingar það að benda til sama pointee sem annar músina. Svo eftir verkefni, tveir ábendingum mun benda til sama pointee. Stundum að heitir hlutdeild. Og þessi 'allur there er til það, í raun. Bless bless núna. [END vídeó spilun] DAVID Malan: Svo meira á ábendingum, meira á Binky næstu viku. Við munum sjá þig á mánudaginn.