[Þema MUSIC] Ræðumaður 1: Hæ, allir. Velkomin aftur til kafla. Lovely dagur out-- sem er ástæðan, ég er Jú, það eru aðeins fjórir af þér hér og ekki venjulega pakki okkar. Ég hef verið veikur um helgina. Þannig að ég hef ekki gylltu fyrir ykkur. Og ég kann að byrja að hósta hræðilega alla þessa. Svo bara bera með mér. Ég ætla að virkilega reyna og komast í gegnum þetta fyrst, þó, áður en ég hafa a sér hósta árás. En bara vera auðvelt á mér lítið bit-- það er allt sem ég spyrja. Svo dagskrá okkar fyrir today-- bara reminder-- quiz er í næstu viku. Ég sagði þér þetta í síðustu viku svo það myndi ekki ná þér burt vörður. Þannig að ég ætla að minna þig aftur. Næstu viku quiz þitt. Í því skyni, í næstu viku er kafla verður mun meira of-- Ég reyni og vinna í einhverju endurskoðun. Þannig að ef þú krakkar gætu hjálpa mér út með því að senda mér hlutir sem þú ert ánægð með, að þú ert að hafa áhyggjur, efni sem þú vilt fyrir mér að ná, sem myndi vera mikill. Svo ég get reynt og vinna þá í kafla okkar í næstu viku eða senda þér auka efni eða prep að þú getur ekki fengið annars staðar. Yeah! Fleiri fólk eru að koma! Ég hélt, gerði ég það illa síðasta viku, að enginn vill koma aftur? Ég er hrædd. Svo hinum þremur hlutum að við erum að fara að fara yfir eru utanáskrift, skrá I / O, og þá ábendingum og dynamic minni. Ég er viss um að þú ert allur frábær æstur pointers-- uppáhalds umræðuefni allra, svo einfalt að skilja. Ég er viss um að þú krakkar fékk allt það, ekki satt? Svo fyrsta sem fyrst, redirection-- þetta er í grundvallaratriðum bara leið að stjórna hvernig þú inntak hlutir í forritinu, Hvernig þú framleiðsla hlutina frá forritinu. Helstu leiðir að þið hafa samskipti við það er bara í gegnum staðlaða út með skjánum prenta hér. En það eru leiðir til að pipe-- eins og við sjáum hér er einn af words-- tagi okkar pípulagna að upplýsingar eða að gögn í skrá úr skrá. Það er bara mismunandi leiðir fá hluti í forritinu og út af forritinu, í stað þess bara prentun þá þessum skjá eða inputting hluti frá the stjórn lína. Svo er fyrsta einn lítill meiri en caret. Svo output-- það prentar bara framleiðsla að skrá í staðinn af þinn skjár. Þannig að ef þú hefðir eitthvað sem prentað "Halló, heimur!" á skjánum, ef þú setur það í staðinn að output.text að skapar þessa skrá sem heitir output.text. Og þegar þú opnar það, verður það segja "Halló, heimur!" þar. Þetta getur verið frábær gagnlegt Ef þú hafa a tonn af villum Reyndar, eins og við sjáum í þessu. Ef þú gerir tvær caret, verður það prenta villu skilaboð. Svo ef þú ert having a vandamál með setja saman, það hefur a einhver fjöldi af villum og þú ert að fá hika við niður í að reyna að fletta í gegnum stjórn lína þinni í gegnum alla þá, þú getur bara prenta þær í skrá opna að skrá svo að þú getur flett í gegnum þær auðveldara. Ég notaði reyndar að mikið þegar ég var að kembiforrit 181 psets mínar fyrir vél námi. Svo það er hægt að vera frábær gagnlegt síðar. Það er einnig gagnlegt ef þú ert með forrit sem kannski er að búa bókasafn eða búa sumir sett strengjum, og þú þurfa að vera fær um að sjá að það er að búa þá almennilega. Þetta er leiðin til að gera þetta. Svo ef þú prenta þær í skrá þig geta fleiri auðveldlega skoða þær, ekki satt? Móti að reyna að fletta með stjórn línu. Og svo eitt að huga er að með bara meiri en caret, ef þú ert að skrifa í skrá sem þegar exists-- svo eins og ef við hljóp þetta fyrsta tími, leggjum það til output.text, og þá höfðum við aðra áætlun prentaða þetta sem áætlun tvö og gerði meiri en output.text, það verður skrifað that-- svo skrifa hvað var alltaf í þessi skrá til að byrja með. Svo ef þú vilt bæta í skrá, eins og við sjáum hér, þú bara tveir hærri en merki. Og það mun bæta við það. Það mun ekki skrifa það. Svo ef þú þarft að keyra mörg forrit og hvers konar halda utan um það sem allar þeirra eru aftur til þín í skrá, það er leið til að gera það. Ef þú er alveg sama hvað er í skránni og það er leyfilegt að vera plága, þú getur bara notað eitt stærra en. Er að gera skilningarvit til alla? Áhorfendur: Eins punktur rista halló meiri en framleiðsla punktur texta, eins tvisvar, það verður bara aðeins sýna á framleiðsla punktur texta annað time-- Ræðumaður 1: Hægri. Svo það myndi í rauninni bara alveg skrifa hvað var þar til að byrja með. Ef þessi skrá hér, output.text þegar til, í grundvallaratriðum hvað sem þú kallar að aftur með einum Greater en þú getur bara að hugsa um það og eins og það í stað skrána. Eins og þegar þú ert að vista Word skjal og þú spara eins, og þú halda sama nafn og það birtist alveg it-- þetta er sama tegund af hlutur. Einhver hefur einhverjar spurningar um bara outputting í skrá? Ógnvekjandi. Svo augljóslega, ef þú snúa við arrow átt, það getur gert inntak. Þannig að þegar þú krakkar höfðu eins Caesar eða Visioneer og þú þurftir að inntak eitthvað, þú hefðir stjórn lína rifrildi sem raunverulega inntak það. Þetta er önnur leið til að gera þetta. Þannig að í stað þess að bíða fyrir stjórn hvetja, eins og þegar þú baðst um þinn skilaboð í Caesar eða Visioneer, ef þú hefðir textaskrá sem höfðu skilaboðin þú gætir bara slá það inn í það. Þannig að ef þetta væri eins og punktur rista Caesar 3 minna en ör inntak texta, sem er skilaboðin þín, það myndi keyra bara fínt. Þegar Caesar program raunverulega bað um inntak frá notanda, það væri nú þegar hafa það vegna þess að þú hefur slegið í þessari skrá. Það er bara önnur leið. Bara andhverfa output-- bara inntak fyrir gögnunum. Og þá er það síðasta sem pípa. Svo laglegur kaldur þessa manns. Vegna þess að það gerir þér kleift að að taka í framleiðslu einn program og setja það sem inntak í annað forrit. Ég veit ekki hvort einhver ykkar spilað með ráða sem CS50 gæti hafa gefið þér, en það væri leyfa þér að taka nokkur sýnishorn skrá, slá það inn dulkóðunarlyklunum, og þá þaðan slá þessi inn decryption þína að ganga úr skugga um það reyndist sama. Svo það er góður af eins og þriggja vegur lykkju. Að fara í það. Áhorfendur: Ef forrit hefur marga inntak, er einhver leið til að segja það sem inntak að nota textaskrá eða framleiðsla fyrir? Ræðumaður 1: Það hefur mörgum aðföngum. Whatever skrá input-- þitt þegar það er biðja um inntak þessi fyrstu skipti, það er fara að gera ráð fyrir, held ég, að það er fara að pípa í allan skrá. Svo ef þú ert með marga inntak, þú ert að fara að lagna í mörgum skrám. Svo ef þú ert að biðja um skilaboð þrisvar í kóðanum þínum, þú ert að fara að vera að setja í þremur mismunandi skrár. Og það fær brjálaður. Og þú ættir ekki að þurfa að hafa áhyggjur af því núna. En það er hugmynd. Svo já, pípa er bara framleiðsla á einn program uses inntak inn í hinn. Allir góður þarna? Cool. OK. Þú verður að öllum líkindum ekki hafa að gera of mikið með það. En þú ættir að skilja leiðir til að nota þetta. Og það eru nokkur tilfelli sem þú might vilja til að nota það. Svo skrá I / O-- ég veit hvað þú ert saying-- við erum að nota til að lesa úr og skrifa á skjá okkar þar, sem er staðalbúnaður í og ​​staðall út. Og það er það sem þú krakkar hafa verið gera frá upphafi bekknum hér. En þú getur líka lesið og skrifa skrár, sem er allt skrá I / O-- svo skrá inntak, framleiðsla er allt það stendur fyrir. Þannig að þetta þýðir í rauninni að þú getur geymt gögn núna. Þegar þú hefur prentað bara það til skjár, það er í grundvallaratriðum farið, ekki satt? Um leið og þú gerir "Hello heim "og hlaupa" Halló heimur " það prentar "Halló heimur" á skjáinn. En þú getur í raun ekki gert nokkuð með það þaðan. Ef þú geyma í texta skrá, svo skyndilega þú hefur þetta gögn sem þú ert að leyfa að vinna eða setja það inn í a skrá, eða setja það inn í forrit síðar. Ein af ástæðunum hvers vegna við gerum þetta er bara sem leið til að geyma gögn til notkunar síðar. ÉG hafa a par af stíga hér bara að ganga í gegnum staðall I / O. Í skrefi eitt, þú þarft að búa til tilvísun að skránni með öllu húfur SKRÁ stjörnu skrá. Svo skapar það bendi til a skrá. Svo þá þú vilt að opna hana. Og þú segir, bókstaflega, bara skrá jafngildir fopen. Og þetta er að fara að skila bendi á skránni sem þú var að opna. Ég sá nokkra af þér krakkar á skrifstofutíma. En einn af þeim hlutum er remember-- ábendingum geta vera sumir heimilisfang eða null, ekki satt? Ef við höfum alltaf mál þar eitthvað getur aftur null, hvað eigum við að gera áður en við notum það alltaf? Við þurfum að athuga hvort það er tómt eða ekki, ekki satt? Því sumir af þú mega hafa haft málið þar hvað mótmæla var verið skilað í Breakout var null. Þú reyndir að framkvæma sumir virka á það. Og tölvan síðuna þína faulted. Hægri? Ég veðja nokkra þér kann að hafa haft þessi mál. Svo með fopen, fopen verður annaðhvort skila bendi á skrá, eða ef eitthvað fer úrskeiðis, það er að fara að fara aftur null. Svo þú þarft alltaf að athuga að það hefur ekki skilað null áður en þú reynir að gera neitt annað. Þetta er eins og a staðall hugmyndafræði að þú ert að fara að þurfa hér. Ef það er alltaf möguleiki á að eitthvað gæti aftur null, stöðva til að tryggja að það ekki áður en þú halda áfram. Annars, þú ert að fara að fá yndislega síðuna galla. Og enginn hefur gaman að takast á við þá. Svo eins og við sjáum hér, fyrsta rifrildi er bara leið til að skrá. Ef þessi skrá er ekki til, það er að fara að búa til að skrá. Og það er bara að fara að vera auður. Og þá seinni rök er háttur sem þú vilt. Viljum við lesa úr þessari skrá? Viltu skrifa frá honum? Viltu bæta? Svo í raun það sem ég said-- bara ef skráin er ekki til og þú ert að reyna að lesa úr það, það er að fara að kasta villu. Ef skráin name-- vilt ef file.text er ekki til enn og þú vilt að skrifa við það, mun það skapa autt skrá heitir file.text fyrir þig. Og ef þú vilt að auka, þú ættir að gera það sama. Er að skynsamleg? Ef þú ert að reyna að lesa úr skrá sem er ekki til enn, það mun kasta villu. Annars mun það búa til skrá fyrir þig að gera það sem þú vilt við það. Cool. Nú getum við lesið úr skrá. Og þetta er bara svona að fara gegnum mismunandi valkosti að við höfum skrá I / O. Þetta mun vera nauðsynlegt á þessu viku pset, ef ég man rétt. Já, það er algjörlega vera nauðsynlegt í þessu viku pset. Svo fgetc skilar næsta staf. fgets bara skilar línu af texta. Það mun fara aftur eitthvað upp til ný lína, og það mun brjóta. Svo les ákveðin fread Fjöldi bæti og setur þá í fylkinu, sem er eitthvað sem þú gætir langar til að gera við aftur size-- gæti verið gagnlegt. Hve margir hafa lesið að pset sérstakur, við the vegur? OK. [Inaudible] Ræðumaður 1: OK. Allt í lagi. Ákveðið lesa that-- það er gaman pset. Þú færð að endurheimta eytt minni card-- virkilega spennandi þegar það virkar. En ákveðið, byrja að lesa það. Komdu tala við mig ef þig hafa spurningar um það. OK, þannig að ég var að segja, fread les ákveðinn fjölda bæti. Það er einhver handahófskennt númer að þú ert að fara að setja. Og þá fseek bara hreyfingar til ákveðna stöðu. Svo kannski þú hefur ekki sama um næstu 10 bæti. Þú vilt bara að sleppa undan. Þú hefur ekki sama um þá. Þú vilt lesa byrjun á bæti 11. fseek leyfir þér að gera það. Svo það er hægt að vera sérhæfðir um hvað þú ert að lesa. Vegna fgetc, fgets og fread lesa frá ákveðnum stað í skránni. A leið til að hugsa um þetta er ef þetta er skrá okkar, þegar þú opnar það fyrst, þú hefur þessa stöðu á skrá sem byrjar í upphafi. Alltaf þegar þú hringir fgetc, fgetf eða fread, það er að fara að byrja þessi staða merkið. Segjum að þú vilt bara að lesa þessi klumpur af minni hérna. Þú getur ekki bara hringt. Þú þarft að leita hérna og þá lesa þaðan eða lesa, fær eða getc, eftir því hvað þú vilt. Svo leita bara leyfa þér að sleppa hluta af minni. Og það er eina vegur þú getur sleppt það án þess að lesa þá í biðminni þína. Er að gera skilningarvit til alla? Vitanlega, það er a mikið samhliða here-- framleiðsla, eða inntak utanáskrift okkar, þú hefur lesið og skrifa. Svo fputc bara skrifar eðli í skránni. fputs skrifar línu. Fprintf prentar sniðinn framleiðsla. Svo ef þú hefur tabs, eða rúm eða whatnot. Og svo skrifar fwrite sumir array bæti í skrá. Svo er þetta á sama hátt fwrite og fread eru hliðstæð opposites-- fgets, fputs og þá fputc og fgetc-- hellingur brjálaður, fljótur hluti. Bara svona halda þessu handy-- þú munt hafa mismunandi tímum þar kannski þú vilt bara einn staf í einu. Kannski þú vilt alla línuna. Með orðabók pset-- þinni sem er í tveimur psets, Ég tel, að við gefa þér allt orðabók í texta formi sem hefur hvert orð aðskilin með línu. Svo ef þú vildir lesa í einu orði í einu, hvað gætir þú nota ef þú ert að lesa og þeir eru allir aðskilin á nýjum línum, og þú vilt bara eitt orð í einu? Áhorfendur: Fgets Ræðumaður 1: Hægri. Fgets-- því sem skilar hvað er í einni línu. Og ef hvert orð er þess eigin línu, sem við getum notað fgets. Cool. Er að skynsamleg, allir? Cool? Já, við erum að fara að fá að Gleðin hluti með ábendingum mjög fljótlega, þar sem þú fá að gera smá stærðfræði. Og það verður frábært. Last step-- loka skrána þína. Með svo margt hér, einn af hugmyndafræði okkar er ef það getur skilað null, athuga for null. Ef þú opnar eitthvað, þú vilt betri að loka henni. OK, þannig að þú ert ekki gert fyrr en þú ert gert nema þú hafir lokað það. Góður af eins og það er ekki yfir þar til feitur konan syngur. Það er eins og loka skrá. Eins og það segir hér, bara að ítreka, alltaf opna skrána áður en þú ert lesa eða skrifa á það. Og alltaf loka það ef þú hefur opnað hana. Allt í lagi? Cool. Svo hér er dæmi. Svo tiny-- Ég veit ekki hvort þú krakkar geta séð að mjög vel. Ef aðeins við gætum aukið birtustig einhvern veginn. Leyfðu mér að gera í raun og veru þetta ef ég get. OK, þú krakkar geta ekki raunverulega sjá að á öllu, getur þú? OK, við erum að fara að gera þetta, þá. [Inaudible] Ég geri ráð fyrir að þetta er miklu betra að sjá. Getur einhver séð hvar minn mús fór er spurningin? Ah, þar það is-- hvað baráttu! OK. Í grundvallaratriðum, þú krakkar ættu að hafa góður um hugmynd um hvað þetta er að gera. Það er ekki fullkominn. En ég vil frekar útskýra það en að eyða meiri tíma að reyna að forsníða það almennilega. Grundvallaratriðum, eins og þú sérð hér, við byrjum með skrá Open. Og höfum við nokkur gagnagrunn sem við erum opnun sem segir það er nemendur okkar. Og við erum að fara að skrifa það. Svo auðvitað aftur null. Þannig að við verðum að athuga for null. Og þá ef það er ekki null, við förum í gegnum. Og eins og þú sérð, við erum lykkja í gegnum hér. Það eru nemendur. Nemendur er kjötkássa skilgreind sem þrír. Og það sem við erum að gera er að við erum prentun að skránni, ekki satt? Svo hvað erum við að prenta út í skrá okkar? Áhorfendur: Stigin sem eru í fylki? Ræðumaður 1: Já. Stigin sem eru í að array-- nákvæmlega. Þannig að við erum að opna þetta gagnagrunn, sem Ég geri ráð fyrir er einhvers konar af einkunnum gagnagrunninum. Og við erum bara að prenta út skorar á hvern nemanda til að skrá. Cool? Good. Ógnvekjandi. OK. Við skulum fara aftur to-- Áhorfendur: Ég hafa a fljótur spurning. Er printf ekki í for lykkju? Það er bara í ef henni? Ræðumaður 1: Nei, það er í for lykkju. Ég get ekki séð mús mína mjög vel upp hér. Þannig að ég ætla að reyna sitt snið sem rétt. Þessi krappi skal farin. Það ætti að vera hér niðri. Þetta er það sem er í þínu fyrir lykkju. There. Nú er það nokkuð. Svo er það hvernig það ætti að be-- nema fyrir að síðustu krappi sem ég vísaði. OK. Er að gera skilningarvit til alla? OK. Við erum að fara að fara á í næsta hlutur then-- sem, í raun, þú ert að fara að þurfa að sjá kóðann. Þannig að ég ætla bara að fara að eintak sem yfir núna. OK. Þannig að ég ætla að sýna ykkur þessa kóða. Og ég vil að þú að reyna að reikna út hvað það er ætlast til að gera. Svo gefið that-- taka eina mínútu eða svo. Prófaðu og reikna út hvað er að gerast hér. Einhverjar hugmyndir? Við vitum að við höfum að minnsta kosti tvær röksemdir í stjórn lína, ekki satt? Ég geri ráð fyrir einn sem er að fara til vera að [inaudible] af program okkar er og þá eitthvað annað. Vegna þess að ef [inaudible] er minna en tveir, æpa við á þeim. Hægri? Og úr notkun, það lítur út eins og það er að fara að vera einhvers konar skrá. Við öll sammála því? Svo nú, hvað er lykkja gera? Hvað er það að fara í gegnum? Áhorfendur: Allar skrár. Ræðumaður 1: Einmitt. Það er að fara í gegnum allar skrár sem við höfum inntak þar. Svo fyrir hverja skrá, það er opnun upp smá band þar. Það er að opna upp að skrá. Hægri? Og það er að lesa af því. Auðvitað, stöðva ef það er null. Og þá er það prentun. Ef það er null, það er bara að segja okkur að það er ekki a skrá sem er til. Vegna muna, með lesa skrá okkar þarf að vera til. Hægri? Með skrifa og bæta, þú getur komist upp með það. En með að lesa, skrá okkar hefur til. Og þá ef það er til staðar, hvað erum við að gera hér? Við skulum byrja hérna. Hvað er þetta do-- þessa fyrstu persónu. Hvað þýðir það að gera? Hann fær einn staf, ekki satt? Svo hvað er þetta að gera? Það er að fá í fyrsta staf. Einhver veit EOF? Áhorfendur: Lok skrá? Ræðumaður 1: Lok file-- nákvæmlega. Svo það er að fara að fara í gegnum allt skrá, ekki satt? Og þá er það að fara að uppfæra með því fá sérhverjum staf. Hægri? Og hvað er það að gera? Áhorfendur: Pútt það in-- Ræðumaður 1: Putchar prentar við skjávara þínu. [Inaudible] eðli. Og svo þegar það [inaudible] þetta mun loka skrá. Áhorfendur: Ert þú ekki að þurfa að [? annað? ?] Ræðumaður 1: Ekki endilega. Ég meina, það er góður af skyn í þessu. Vegna þess að þetta skilar, þó, svo lengi því það er ekki að ná þessu, þú ert fínn. Ég meina það er líklega gott æfa að gera annað. En annað er ekki alltaf nauðsynlegt sérstaklega ef þú hefur eitthvað eins afkomu sem þýðir að í þessu tilfelli ef það veiðir það, program er að fara að enda og það mun aldrei komast að þessu. Það er meira fyrir að ræða þar sem þú ert ekki endilega aftur eitthvað. Vegna þess að ef þetta væri ekki aftur neitt, það myndi þýða að ef þetta væri satt, restin af þessu væri enn keyrt. Og í því tilviki, þú myndi vilja a falskur. Ef það er aftur, og áætlunarinnar þíns endir, sem annað er ekki nauðsynlegt öllum tíminn, eftir samhengi. Jacob, did þú með spurningu? Áhorfendur: Já. Svo er fgetc fá næsta staf? Hvernig virkar eðli hækkar? Ræðumaður 1: Já. Svo fgetc fær næsta staf. Þú getur hugsað um það eins og C ++ í vissum skilningi. Áhorfendur: Svo það var EOF? Ræðumaður 1: EOF er endir af skrá. Það er bara merki sem leyfir þér að vita að þú ert í lok skrá. Þannig að þetta er að fara að prenta til staðall út. Og þá er það að fara að loka skráin þegar það er gert. Og þá skulum fara til næstu skrá, ekki satt? Svo í heild, hvað þýðir þetta forrit gera? [Inaudible] Ræðumaður 1: Já. Það prentar bara út allt það. Svo ef þið hafið einhvern tíma notað CAT og þá heiti nokkurra file-- Ég veit ekki hvort einhver ykkar hafa alltaf gert það á flugstöðinni. En ef þú alltaf að nota stjórn CAT-- C-A-T-- og þá hvað skrá þú hefur there-- það prentar það út til flugstöðinni, sem geta vera frábær vel fyrir sumum hlutum. Ég nota það mikið. Er að gera skilningarvit til alla? Cool? OK svo þitt verkefni now-- annaðhvort sjálfur eða með fólkið í kringum you-- er bara að skrifa einföld forrit sem vilja bara skrifa "Halló, heimur!" út í skrá. [Inaudible] [Inaudible] Ræðumaður 1: Ég var eins og, gerði Ég gera það illa í síðustu viku? Ég vissi ekki að hugsa það var svo slæmt. Ég er feginn að þú ert öll hér. Það sem veitir mér ánægju. Ég er stelpa á einföldum munaði. Mér líkar bara þegar kafla minn situr. Þannig að ég ætla bara að fá þetta byrjaði fyrir þú krakkar þannig að við getum kóða saman. Mér líkar ekki að setja einhver á blettur nema þú vilt vera. Áhorfendur: Fyrir próf, gera við verðum að skrifa forrit? Ræðumaður 1: Þú getur verið beðin um að skrifa einföld forrit af hendi. Jamm. Áhorfendur: Prófinu næstu viku, ekki satt? Ræðumaður 1: The quiz er næsta miðvikudag. Það þýðir að það er yndisleg [? CSE?] einkunnagjafar aðila eftirá, sem þýðir að þú munt fá stig þín aftur að night-- á hvaða tíma? Hver veit? En það verður um nóttina. Allt í lagi. Hvernig viljum við að byrja þetta? Ég skal gefa þér hint-- byrjar þetta. Áhorfendur: Þú þarft að opna skrá. Ræðumaður 1: Já. Svo hvað viltu kalla þetta? Viltu bara að kalla það "skrá"? Skulum gera það auðvelt. Svo fopen-- hvað er okkar framleiðsla próf að fara að vera? Kalla það "Hello." Og hvað er háttur okkar? Hvað erum við að gera við þessa skrá? Áhorfendur: Lesa. Skrifa. Ræðumaður 1: Við erum að skrifa á það. Lovely. OK, þannig að við höfum þessa skrá núna. Hvað þurfum við að gera? Áhorfendur: Athugaðu hvort það er null. Ræðumaður 1: Athugaðu hvort það er null-- nákvæmlega. Það er það sem ég eins og til að heyra. Það ætti að vera sjálfvirk, sérstaklega ansi mikið af þessum tímapunkti á. Ef þú byrjar segfaulting, sennilega ekki athuga for null einhversstaðar. Níu sinnum af hverjum tíu, sem er fara að vera villa þinn. Svo ef þú gætir bara í venja, alltaf að athuga hvort það er null, líf þitt er að fara að vera gott og easy-- eða auðveldara. Svo að athuga hvort það er null. Þannig að ef það er ekki null, sem er það Bang jafngildir means-- ekki null-- það gilt. Hvað viljum við gera? Við viljum bara að prenta þeirri skrá, ekki satt? Svo hvað erum við að fara að nota? Áhorfendur: Fprintf Ræðumaður 1: Fprintf-- yndisleg. Og fprintf tekur tvær arguments-- hvar það er að fara og hvað við viljum prenta. Svo er það sá fyrsti? Hvar er það að fara? Áhorfendur: File. Ræðumaður 1: Það er að fara að skrá. Og hvað við viljum prenta? "Halló, heimur!" Allt í lagi. Við höfum eitt síðustu thing-- annar stór hugmyndafræði hér. Áhorfendur: Close. Ræðumaður 1: Close. Þar sem þú ferð. Áhorfendur: Er þetta að gerast Ef skráin er núll? Ræðumaður 1: Nei, þetta er ef það er ekki núll. Áhorfendur: Oh, ef það er not-- OK. Fyrir fopen og síðan tvær breytur sem fara inn, hvað þýðir fyrsta rök meina aftur? Ræðumaður 1: Rökin er bara eins og nafn skrárinnar að þú vilt fara í. Svo eftir þetta keyrir, þú myndir hafa sumir skrá sem heitir "halló" sem hefði "Halló, heimur" innan þess. Það er allt. Bara nafn. Áhorfendur: Og þar sem það er að skrifa, er skrá þarf ekki að nú þegar. Er það sem þú sagðir? Ræðumaður 1: Hægri. Einmitt. Ef "Hello" sem skrá er ekki til enn, það er fara að búa til skrá sem kallast Halló "og skrifa það fyrir þig. Áhorfendur: Þegar þú ert að segja the program til skrifaði að skránni hví þú skrifar "skrá" í stað nafn á skránni og fprintf-- Ræðumaður 1: Vegna þess að í þessu tilfelli, við höfum að stór FILE-- allt í caps-- stjarna, skrá. Svo það er bendi til að skrá að þú ert að tala um. Þetta er leiðin sem við vísa bara til þess. Svo í þessu tilfelli, þú getur hugsað file-- AHA, við getum notað this-- skrá hér átt við opnun "Hello" og láta það skrifa. Áhorfendur: Gætum við setja "Hello" staðinn [? af réttlátur?] f skrá? Ræðumaður 1: Nei, vegna þess að "Halló" þarf að vera opin og writeable. Skrá hér er eins designator sem segir OK, við hafa þetta file-- hello-- að við erum að horfa á. Það hefur verið opnaður. Og við erum að fara að skrifa það. Ef þú notar bara "Halló", sem er sett í hylki í henni. Svo það er að fara til Freak út. Ég meina, þú gætir hafa nefnt það. Þú gætir hafa gert skrá, stjörnu, "Halló", jafngildir það. En allt lið er að þú þarf skrá stjörnu músina í röð að vera fær um að nota þessar aðgerðir. Áhorfendur: Gætirðu gert skrá, stjarna, skrá, "Halló" eða þú þarft að setja skrá stjörnuna, skrá með það? Ræðumaður 1: Þú getur gera skrá, stjarna, "Hello." Þú getur breytt þessu til hvaða nafni sem þú vilt. Það er alveg handahófskennt hvað það nafn er. Þú getur kallað það neitt. Nafn það fljúga spagettí, ef þú vildir. Áhorfendur: Hvað er "W" í gæsalöppum fyrir? Ræðumaður 1: The "m" er bara háttur. Þannig að við erum að skrifa í þessa skrá. Allir góður? Tær? Já. Áhorfendur: Svo þegar það skrifar þetta skrá, hvar finnum við þá þessa skrá? Ræðumaður 1: Það verður að vera á sama möppu sem þú ert nú í. Ef þú ert í pset þremur og þú keyrir þetta, innan pset þinni þriggja mappa er að fara að vera Þessi skrá sem heitir "Hello." Cool? Allir góður? Mér finnst eins og þú ert allur fá það, sem er frábært. OK. Svo aftur að renna show-- minn Ég elska þegar hlutirnir virka. OK, pointers-- eruð þið spennt? Ábendingum eru frábær. Þeir taka smá að vefja höfðinu í kring. Þetta er annað árið mitt kennslu ábendingum. Og ég held að ég fékk loksins það. Þannig að ef þú baráttu, er það í lagi. Eins og ég sagði áður, teikna myndir hjálpar mikið með hlutum í CS, eins mikið og ég held að fólk hafa tilhneigingu að hugsa ó, við erum í tölvunni. Við ættum bara númer. No-- teikna myndir mun virkilega hjálpa þér. Og ég hvet virkilega að tappa inn kindergartner hlið og koma út vaxlitir eða merki og teikna. Vegna þess að það mun hjálpa þér. Og ef þú sérð mig á skrifstofutíma, I muni bera kringum stafla af pappír með penna teikna það út. Svo sérstaklega með pointers-- teikna myndir. Og ég er viss um að við erum í raun að fara að vera teikna nokkrar myndir hér líka. Svo þú krakkar fékk alla að sjá Binky, This kaldur claymation hlutur. Og við teljum að það er mjög fyndið þegar hann springur í fullt af stykki. Það er einhver grínisti léttir fyrir bekknum. C [inaudible] þessi mikli getu til að vera fær um að stjórna minni. Og það er eitt af því sem raunverulega gerir það svo öflugur tungumál. En með miklum mætti ​​fylgir mikil ábyrgð. Og brjálaður hlutir geta gerst ef þú ert ekki varkár. Svo þegar þú ert að nota ábendingum, þú vilt gera viss um að þú skiljir virkilega nákvæmlega það sem þú ert að gera. Vonandi næsta lítill hluti af tími mun hjálpa þér að skilja raunverulega ábendingum, hvernig á að nota þá, og hvernig á að vinna þá. Svo memory-- ég viss um að við höfum séð þessa skýringarmynd áður. Svo er þetta bara einföld skýringarmynd af hvernig væri að vera geymd minni. Svo þú ert í rauninni þessir gríðarstór fylki af eitt bæti blokkir er það sem við höfum here-- smávægileg þrepum í hvert skipti. Þetta er í álög [inaudible] svo átta bita blokkir. Og hvert blokk tengist með nokkrum sextánskur heimilisfang. Þannig að ef þú alltaf sjá 0x, það er bara notating að það er a sextánskur netfang. Þú getur tekið þetta þýðir sumir heimilisfang í minni. Við erum að tala um minni heimilisföng þegar þú sérð sextánskur. Við höfum ints eru breytur, flotholt eru breytur sem geyma. Svo ints geyma ints. Flotholt Store fljóta. Þannig að við höfum einnig ábendingum sem geyma minni heimilisföng. Það er eins konar kortlagning. Ábendingum eingöngu fyrir minni viðtakandi. Svo er það eins og tegund þar. Búnaðurinn er 32-bita, sem þýðir að minni þitt er fjögur bæti. Svo allir bendi að þú hafir er líka að fara að vera fjórir bytes. Eða annars ef það er fjórum bytes, minni er fjögur bæti. Ábendingum geyma minni. Því þá eru þeir fjórum bæti. Cool-- langar bara að styrkja það. Þú ættir að fá þetta grínisti núna. Ég veit ekki hversu mörg ykkar eru XKCD fans, en ég elska XKCD. Það er frábært. Allt í lagi. Svo búa pointers-- eins og ég sagði, það er ansi mikið bara eins og allt annað. Þú ert með tegund. Þú ert með nafn. Hægri? Það er það sem við höfum þar. [? Hex?] Stjörnu þýðir að það er a músina, og þá hvað þú vilt kalla það. Svo gerð táknar hvað þú getur geymt. Allt í lagi? Á sama hátt að ef við gerum ints, við vitum að við erum að geyma við int þar. Með músina, það heldur minni heimilisfang. En hvað það þýðir er that-- hér er þar teikning er að fara að koma sér vel. Svo í þessu tilfelli, höfum við sumir value-- segjum fjórir. Fjögur er tekið einn. OK? Þetta fyrsta er hér að það er bendi 2x. Hægri? Það er einhver bendi x. x getur verið eitthvað, hvað sem er. Whatever x is-- segja X er fjórir. Það er að fara til að geyma minni heimilisfang hér. Svo Int, stjarna, x-- þetta er einhver önnur rifa memory-- hver veit hvað þetta er. En það er að fara að geyma netfang hér. Þannig að þetta væri like-- í þessu tilfelli, Whatever, er geymt við 0x1-- hvað sem er geymt á það heimilisfang sem bendillinn okkar heldur, þarf að passa upp með það sem við höfum tilnefnt. Svo, í þessu tilfelli, þetta er x á 0x1. Þetta getur bara alltaf verið int meðan við erum að nota þetta. Sama hátt, ef við höfum annar 1y, hvað netfang er geymt með Y hefur að vera char-- sama með z. Á sama hátt, þegar þú reyna og gera intx jafngildir 0,4, það er að fara að æpa á þig og vera eins og enginn, þú sagðir að þú vildir við int. Þetta er ætlað að vera int. Hætta að reyna að gera það fljóta. Svo láta hlutina vera það sem þeir vilja vera. Láta hlutina vera sig. Svo er stór hlutur bara hvað tegund af músina það er, það er eina sem þú getur geymt þar. OK? Með æfingu, eins og með í síðustu viku, allt virðist í raun eins konar ágrip. Við erum að fara að gera sumir æfa. Það ætti að gera meira vit. Svo vísa og dereferencing-- það er mjög mikilvægt að fá þetta beint. Ég á eftir að hressa sérhver nú og þá. Og ég er eins og bíða, hver einn gera ég vil? Svo ampersand vilja raunverulega gefa þú tilvísun eða heimilisfangi. Svo það skilar heimilisfang í minni sem breyta er geymt. Svo það er að fara að í raun að fara aftur til þín a sextánskur en dereferencing það er í raun að fara að gefa þér gögn sem eru geymd þar. OK? Þannig að við erum að fara að líta á dæmi mjög hratt, eða í raun upp við hliðina. OK. Þannig að við verðum að hugsa í raun vandlega um þetta. Svo hér höfum við einhverja heiltölu x. Ég ætla að reyna og draga þetta út eftir bestu getu mína. Þannig að við erum að fara að hafa þetta rifa x. Og það er að geyma fimm. Netfang hennar er 0x4. Cool? Allt gott. Svo nú höfum við þetta músina. Það var hérna. Og ampersand gefur okkur Heimilisfang eitthvað. Svo, í þessu tilfelli, það er veffang x. Hvað er heimilisfang x? 04-- og þetta bendillinn er 0x08. Cool? Svo er hægt að hugsa um þetta músina, 04, bara bendir hérna. Og þeir eru kallaðir ábendingum því eins og við fá meira inn í þetta, þú ert að fara að sjá sem bendir til hlutur. Og ein húsaröð bendir til annars blokk mun gera a einhver fjöldi meira vit. Svo hér eru tveir. Og þá höfum við nokkur afrita, sem er what-- 0x0c. Og það er að fara til dereference músina okkar. Svo hvað það er að segja er OK, hér er bendill okkar. Gildið það geymir er 0x04, og hvað það er að segja er að fara á þetta netfang og segðu mér hvað er í henni. Svo er það í raun hvað þetta arrow er að gera. Þú getur hugsað þetta eins stjörnu þína. Svo OK, þegar við gerum stjörnu, þýðir það fylgja. Fara á þetta heimilisfang. Og það er í rauninni bara eftir Þessi ör við þessa minni klumpur. Og gefa okkur hvað er í henni, sem er 5. Það er hvers vegna okkar eintak er jafnt og 5. Er að skynsamleg? Hefur einhver þurft mig til að fara í gegnum þetta aftur, eða hægar? Þú vilt að ég fari gegnum það einu sinni? OK. Við erum að fara að uppkast það aftur. Þegar við byrjum, sammála við öll að við höfum sumir klumpur af minni sem er breytilegt x sem við sett jafnt og 5. Við stjórn ekki þar sem það er í minni. Þannig að þessi blettur er bara geðþótta úthlutað. Good þarna? OK. Þá erum við frumstilla bendi heiltala. Það er hvers vegna það er leyft að benda á x vegna þess að við höfum við int hérna. Við höfum annað klumpur minni því þetta bendi er breytilegt bara eins og allt annað. Það er geðþótta úthlutað sumir pláss í minni. Og hvað það geymir er heimilisfang x. Merkið þýðir heimilisfang x. Svo er það sem heimilisfang x? Áhorfendur: Það er zero-- Ræðumaður 1: 0x04. Svo then-- síðasta. Við höfum einhverja copy-- aftur bara annað breytu. Svo skulum úthluta sumir handahófi stað. Og við dereference músina okkar. Stjarnan muni fara til netfang geymd í músina mína. Segðu mér hvað er þarna. Svo heimilisfang geymd í músina okkar er 0x04. Svo við förum á þetta netfang. Það er benda á þetta netfang. Hvað er inni þessa minni blokk? Það er a fimm. Svo er það það sem við framselja okkar eintak. Allir góður? Cool. Again-- myndir. Svo rekja gildin here-- ég er fara að láta ykkur hugsa um þetta. Við getum teiknað aðra mynd. En ég vil að þú að reyna og ástæða gegnum þetta á eigin spýtur fyrir eina mínútu. Þar sem þeir vildu ekki gefa okkur dæmi heimilisfang, Ég ætla bara að fara að gera merkið x-- sem ætti að hjálpa keyra hana heim. Merkið þýðir heimilisfang. Svo í fyrstu, allir fara með í fyrstu línunni. Sumir x sett er five-- sumir handahófi rifa í minni. Int stjörnu bendillinn er jöfn á heimilisfang X, ekki satt? Int stjörnu bendillinn skapar þessi blokk, kalla það Pointer, og gefur það á heimilisfang x. Ég er hræðileg í -merkið. Nú hvað við erum að gera er að við segjum OK, dereference músina okkar. Svo við förum í lagi, hvað er í músina okkar? Það er ampersand x. Fara á merkið x og breyta henni. Svo nú, ampersand X er að fara að vera 35. Svo í rauninni, þegar þú ert dereferencing, þú ferð OK. Þú ert að fara að vera að teikna Myndir eins og þetta. Þú ert að fara að vera að teikna Örvar þínar á hvar það er. Svo fara á þetta rifa minni og annaðhvort gefa mér að gildi aftur, eða breyta henni. Í þessu tilfelli, vegna þess að við erum á þessu gildi, við erum framselja það til að vera 35. En í síðasta einn, ef þú tekur eftir, við voru framselja það sem var hér til að eitthvað annað. Svo þeir hafa þetta frábæra borð. Það er ekki svo slæmt. Þú krakkar vinna á það. Ég ætla að draga það út á borðinu. Við erum að fara að fylla það út saman, OK? Svo grípa sumir pappír, grípa samstarfsaðili, byrja að vinna. Ég ætla að fá a stærri stykki af Kalksteinn. Vegna þess að það er að fara til vera a einhver fjöldi. OK. PROFESSOR: OK. Við skulum byrja á fyrstu röðinni. Við munum byrja þar, þá krakkar getur kannski vinna með meira. OK. a jafngildir b sinnum c svo hvað er a? Það er ekki bragð spurning, ég lofa. Námsmaður: 4 sinnum 5. PROFESSOR: 4 sinnum 5. 20. Svo er það b? Nemandi: 4. PROFESSOR: Og c? Nemandi: 5. PROFESSOR: 5. Og þá er þetta er bara að fara að að merkið upp, merkið B, ampersand c, ekki satt? Ekki slæmt. Það er nógu einfalt. OK. Svo the næstur einn. A jafngildir sinnum c, ef einhver var ókunnur með það. Er allir þekki við sinnum jafnt? OK, allt þetta means-- þetta er shorthand fyrir jafngildir sinnum c. Þú getur líka gert það með skiptingu, með viðbót, með Frádráttur. Þú getur gert jafn, eða plús jafngildir c merkir jafngildir plús c, mínus jöfn c væri jafngildir mínus c. Það er bara nokkur dæmi um setningarleg sykur. Svo, í þessu tilfelli, a er jöfn sinnum c myndi gefa okkur hvað? Aftur, ekki bragð spurning. Nemandi: 100. PROFESSOR: 100. Er nokkuð annað að breyta? No. Kannski mun ég loksins fá betri í -merkið mínum. Námsmaður: OK, fyrirgefðu, hvernig fékkstu 100? PROFESSOR: OK. Svo er a jafn og a sinnum c, svo sinni c. Nemandi: Oh, þú ert að nota a fyrir previous-- PROFESSOR: Já. Svo þetta eru nýjustu gildi okkar. Þetta eru það sem þú ættir að vera nota eins og við fara niður, OK. Svo, b er það eina breytast, ekki satt? Svo skulum fylla í allt annað. B. Hvað er b að fara að vera? Að vera eða ekki vera. Svo hvað er þetta að gera? Hvað er stjarna PA gera? Nemandi: Kóði til staðsetningu pa. Nemandi: Nei, ekki alveg. Þannig að þetta er d tilvísun. Nemandi: Svo er b hönd gildi pa. PROFESSOR: Já, svo er ári veffang, ekki satt? Svo það er að segja að fara þangað sem a er geymd og gefa það að gildi. Svo er það b? Nemandi: 100. PROFESSOR: 100. Perfect. OK, svo tölvunni er það sem er að breytast. Allt annað er óbreytt. Hvað er Einkatölva að fara að vera? Einföld verkefni. Pc er jafn pa, og hvað er ári? Nemandi: merkið a. PROFESSOR: Perfect. Nú við erum að fá áhugavert. OK, við skulum brjóta þetta einn niður. Fyrst, hvað er b sinnum c, því það er auðvelt að hluta af þessu einn, ekki satt? B sinnum c is-- Nemandi: 500. PROFESSOR: Já, svo hvað er þetta eina að gera, Ef það er stjörnu Pb, hvað er að breytast? Nemandi: Hvað er í the-- PROFESSOR: Hvað er í b? Nemandi: Hvað er í rýminu sem PB er bendir til. PROFESSOR: Og PB snúi to-- STUDENT: B. PROFESSOR: B. Svo eina hlutur breytast er b, ekki satt. Svo b sinnum c, 500. Svo það er það sem breytist nú. Cool. Lovely. Þú krakkar eru að gera fínt. Allt í lagi, brjóta þetta einn niður. C er að breytast, ekki satt? Þannig að við getum fyllt í allt annað. Við skulum sjá. OK. Við vitum að C er að fara til vera the margfeldi tveggja talna, ekki satt? Hvað tvær tölur, þó? Nemandi: A og c? PROFESSOR: Svo er rétt fyrir það fyrsta. Þannig að við erum d tilvísun p með, ekki satt? P með stig til a, þannig að við vitum að þetta er að fara að vera 100 sinnum hvað? Sinnum hvað vegna Einkatölva benda til? Benda til a. Svo er 100 sinnum 100 10.000. Er það er vit? Cool. Home teygja, krakkar, síðasta röðin. OK. Hvaða breytingar hér? STUDENT: A. PROFESSOR: A. Perfect, svo allt annað er hægt að vera það sama. OK. Og hvað er a? Svo er það sinnum hvað? Þetta er stjarna PB. Svo stjörnu PB þýðir hér er PB, PB stig til b. Nemandi: 500. PROFESSOR: 500. Þannig að við höfum 500 sinnum 100. Það er 50.000. Whew! Horfðu á það. Nemandi: Hvers vegna eigum við á & c fyrir last-- PROFESSOR: Sorry. Nemandi: Oh, OK. PROFESSOR: slæmt mín. Fullt af að skrifa. Allir góður? Ekki of slæmt, ekki satt? Bara tekur smá en að vinna í gegnum. Ef þú brýtur það niður, skilja hvað hver hluti er vísað to-- eins með allt sem hún er, yes-- brjóta það niður á litla vandamál og þá recombine, og þú getur gert nokkrar ógnvekjandi efni. Það eru svörin, en við gerðum það. Pointer tölur. Ah. Hendur mínar eru chalky. Svo að bæta við eða draga INT lagar músina með því að stærð tegund músina. Mundu hvernig sérhver tegund hefur mismunandi stærð? Svo eins og a tvöfaldur eða lengi lengi er átta og INT er fjögur en bleikja er einn. Svo hvað þú vilt gera is-- eitt að muna er bara að hversu mikið ÞINN bendillinn gildi raun breytist mun ráðast á tegund af músina það er. Allir góður með þetta? Get ég eytt það? Við erum góður? Ógnvekjandi. Þannig að ef við höfum sumir bendi that-- þetta er að fara að be-- ég fara að gera það int músina. Það geymir þetta. Ef þú varst að segja músina plús einn, hvað það er að fara að gera er það er að fara að uppfæra það með stærð int því það er tegund af músina það er. Með C, allt er mjög ströng og skipulegur. Int músina er að fara að uppfæra með því pláss int myndi taka. Int er fjögur bæti. Svo hvað myndi þetta breytast í? Þú ert bara að bæta fjórum á þetta. Nú bendillinn þinn myndi be-- OK. Þannig að ef það var a bleikju og við gerðum músina plús einn, hvað myndi það nú vera? Ef það started-- þykjast vér started-- núna það er 0x08. Segjum nú að þetta var bleikju músina, og við bætt var við. Hvað myndi það breyta til? Hversu margir bytes er bleikju? Áhorfendur: One. Ræðumaður 1: One. Áhorfendur: Svo 0x09. Ræðumaður 1: Þannig að það væri níu. Svo bara eitthvað að muna. Bara þegar þú bæta við einum, er það ekki að bæta við einum nema það er a bleikju. Það er að bæta hversu margir bæti þeirri gerð sem það er, sem er ástæða þess að við höfum Jafnan hér. Svo það er int sinnum stærð af gerð músina. Þannig að við höfum dæmi um hér. Y var úthlutað til að gildi, 0x4, Þegar við gerðum Y plús jafngildir einn. Hvað er í það, hvað er í X, er ekki breytt. Hvað breytist er það sem er í y. Heimilisfangið geymd í Y uppfærður eftir fjórum vegna þess að það eru fjórir bytes í int og það er int músina. Allt í lagi. Svo nú höfum við annað æfingu. Svo er spurning hvað verður prentað. Einhverjar hugmyndir? Áhorfendur: Fjöldi stafir í Happy cat? Ræðumaður 1: Einmitt. Svo eins og með band þitt. Er allir fá það? Viljum við ganga í gegnum það? Já, OK. Svo það sem við höfum here-- I svona svo margt fleira. Ég þarf ekki að [Inaudible] hlægilegur. Þannig að við höfum band síðu okkar, hamingjusamur köttur. Lovely. Við höfum einhverja counter sem við erum að halda utan um. Þannig að við höfum sumir char * músina það bara er stillt jafn str. Hvað þetta er að gera er að það er framselja sumir bendi til byrjun band þitt. Vegna þess að ég er viss um, eins og það var getið í fyrirlestri við höfum gefið ykkur þetta gögn tegund kallast strengur. En í raun strengir eru bara fylki of-- eins char *. Það er bendi til fullt af stöfum sem eru samliggjandi í minni. Þannig að þetta bara setur það jafnt hvaða streng er greindust þar Fyrsti stafurinn hennar. Þannig að þetta er bara að setja einhverjum tímapunkti jafn upphafi strengsins. Allir góður þarna? Cool. Svo er þetta dereferencing músina okkar. Svo það er í raun að fara til gefa okkur einhvers virði hér, í band okkar sem við erum að tala um. Og við erum að segja svo lengi sem það er ekki null Terminator. Svo halda áfram þar til þú færð til enda strengsins. Uppfærðu bendilinn um einn. Svo r, það mun í raun uppfæra af einum hvert sinn því þetta er bleikja, bleikjan *. Svo það er að fara að fara í gegnum. Það er að fara að uppfæra. Svo í fyrsta sinn rekur, það er að fara að vera hér á h. Það er að fara að uppfæra. Það verður að vera a. Það verður að vera p, y, og svo framvegis og svo framvegis. Við munum uppfæra teljara. Þegar það kemur að enda, það bara prentar hversu langt það er fengið. Já. Áhorfendur: Svo það skiptir máli rýmið sem einn, ekki satt? OK. Ræðumaður 1: Hugsaðu svo. Er að question-- Áhorfendur: [inaudible]. Ræðumaður 1: Engar áhyggjur. Þetta sem ég gera það. Allt í lagi, þannig að eitt sem ég skilja er að með fjölda, þú getur líka meðhöndla það sem bendillinn vegna fylki eru bara samfelld blettur minni. Svo er hægt að meðhöndla það á sama hátt. Þú getur vinna þá með ábendingum líka. Svo í stað þess að gera, í þessu mál, hliðstætt hlutur væri array 0 er 1. En á sama hátt sem strengur er ákvarðað með upphaf þar Fyrsti stafurinn þess er, fylki er ákvörðuð með því að þar fyrst þáttur hennar er. Þar sem við vitum, erum við tryggingu, að þessi eru að fara að vera samfelld blokkir af minni. Það er það sem gerir okkur að gera þetta. Við vitum að þeir eru stöðugt blokkir af minni. Þannig að í þessu tilfelli, með því að dereferencing bara array, sem segir okkur, OK, fara til the byrjun af array þinn, sem er hér. Svo er hægt að setja það jafnt á móti einum. Og í þessu tilfelli, hvað sem array þinn gerð er, þegar þú uppfærir hann í einu, það er bara eins og að uppfæra það til næsta vísitölu. Þú getur gert það vegna þess að þú vita hvað er í fylkingu þínu. Svo veit það hversu mikið þarf að uppfæra músina þína með, hvaða netfang að uppfæra hana að svo að þú ert á næsta rifa. Þannig að þetta er bara mismunandi hátt að skrifa array 0 er 1, array 1 jafngildir 2, array krappi 2 er 3. Það er bara önnur leið til að hugsa um það. Vegna þess að þeir eru stöðugt blokkir í minni, þú getur átt við þá annaðhvort með array notation-- sem ég persónulega finna easier-- en kannski þú þarft að vinna það stranglega eftir minni viðtakandi. Og þetta er sú leið sem þú myndir gera það. Konar meira af eins og a kaldur hlutur sem þú gætir gert móti kannski ekki eitthvað sem þú ert í raun að fara að framkvæma. Ég nota það í 61. Þú krakkar sennilega þurfa ekki að hafa áhyggjur óður í það of mikið. En ef þú hefur áhuga, taka 61 á næsta ári. Við erum í heimili teygja krakkar. Ég veit, það er langur. Dynamic Memory Allocation-- svo við vitum að einn af hlutum þegar við ræddum við Fyrsta kafla okkar saman, við skoðuðum skiptasamning virka þar sem það var utan gildissviðs helstu virka okkar. Og við stóðum í þessum gildum sem voru í raun afrit. Og einu sinni skipti lokið framkvæmd, það fór bara stafla. Mundu, við erum með stafla ramma fyrir skipti. Það fer og þeir gildi fara með það. Og þeir voru farnir. Við gátum ekki gert neitt með þeim og við vorum sorgmædd vegna þess að við getum ekki skipta gildin okkar. En með C, eins og ég nefndi, þú hafa mikið vald yfir minni. Svo hvað þú getur gert er að þú getur úthluta hlutum á hrúgunni hér sem mun vera þar þangað að segja þeim annað. Þeir eru eins og góð börn. Þeir dvelja þar. Þeir skilja ekki. Þeir ætla að vera þar þangað til þú ert eins, OK, þú getur farið í burtu. En hluti á mánudaginn, who-- þeir eru eins og óþekkur börn. Þeir ætla bara að keyra í burtu þegar þú vilt að vera þar og svo þeir eru farnir. Þú getur ekki fá þá aftur. Svo hrúga is-- við erum að fara að tala um malloc og frjáls, sem Ég er viss um að ykkur heyrt um í fyrirlestri. Og það er í grundvallaratriðum leið að hafa mjög þrávirk gögn. Svo er hægt að halda gögnum kring eins lengi og þú vilt. Mhm. Áhorfendur: Getur þú skilgreina vörðu og stafla? Eru þeir eins og staður til að setja hlutina? Ræðumaður 1: Svo þeir eru grundvallaratriðum just-- þeir eru hvernig við tölum bara að minni. Svo hrúga er bara staði þar minni er úthlutað virk, en stafla vísar meira að stafla ramma sem eru meira miðpunktur aðgerðir sem eru í raun í gangi. Þú gera ekki raunverulega hafa stjórn. Stóri munurinn, hefur þú stjórn yfir hrúga ef þú vilt. Þú ert með minna stjórn á stafla. Stafla veltur á aðgerðir sem eru í gangi, og í hvaða röð þeir eru hlaupa, og hvernig hlutirnir eru aftur. En með hrúga, eins við munum sjá, þú getur sagt: OK, ég vil þetta gildi til að vera kring þangað til ég segi þér annað. Þú hefur ekki heimild til að fá losa af það. Þú hefur ekki leyfi til að hunsa það. Þú ert að fara að halda því í kring svo lengi sem ég segi þér. Þú færð að vera stjóri í hrúga, EÐ stack-- Kannski ef þú eins finagle leið þú getur verið stjóri. En ekki alveg. Og það er í raun bara minni. Það er bara mismunandi leiðir að vísa til minni. Cool. Svo með því að, hvernig á að stjórna minni. Það er með malloc sem þú ert að fara að fá að nota. Svo það er bara stutt fyrir minni úthlutun. Það er allt það er. There er a búnt af annar kaldur aðgerðir sem hafa Alloc í lokin, og þeir standa fyrir mismunandi hluti. Svo þegar þú þarft geymslu sem þarf að outlast núverandi virka svo að þegar núverandi þinn virka flýr, þú ert enn gögn sem þú fékk af því, þú vilt nota malloc. Það mun frumstilla hana á hrúga. Og eins og ég sagði og halda segja, þú munt halda það þar þar til þú segir það annars, sem er mikilvægur hlutur hér. Svo eitt að taka eftir, og það er yfirleitt mjög mikilvægt, er að þetta sizeof er frábær gagnlegt að nota vegna þess að eftir því hvaða gerð vél sem þú ert að keyra, það kann að hafa mismunandi magn af minni sem það tekur. Svo þú vilt alltaf að nota stærð svo að þú ert ekki vél háð, þannig að númerið þitt mun keyrt á hvaða vél. Og það er bara hluti að skrifa góða númerið. Ef það virkar á einni vél, en ekki einhver annar, Hversu gagnleg var program? Svo þú vilt alltaf ganga úr skugga um og nota sizeof. Áhorfendur: Svo er að eins að stærð 10 cm [inaudible]? Ræðumaður 1: Þetta er á stærð við 10 ints. Já. Svo stærð ints aftur hversu mikið er einn INT taka. Eða stærð bleikju, hvernig kostar eina bleikju taka. Og þá hvernig margir blokkir af því þú vilt? Svo í þessu tilfelli, við viljum eitthvað að við getum geymt 10 ints til. Og það mun virka óháð vél, sem er svalt. En hve margir bytes mun sem raunverulega gefa þér? Quick stærðfræði. Áhorfendur: 40. Ræðumaður 1: 40. Einmitt. Svo annar stór hlutur. Pointer eða malloc getur skilað null. Svo aftur, alltaf að skoða til sjá hvort það skilaði null áður en þú reynir að gera neitt með það. Ef þú reynir og dereference þetta bendi nú, það er bara að fara að segfault vegna þess að þú fór og reyndi að snerta null þegar þú ættir ekki að hafa. Svo alltaf að skoða til null. Aftur, getur allt sem þú gerir. Það gæti aftur null. Það verður aftur null ef þú ert annað hvort út af plássi, eða hver sem ástæðan það hljóp í sumum minni galla. Það stundum bara skilar null. Svo þú verður bara að athuga það. Það er allt þetta renna er að segja. Og þá það sem við höfum hér er að hringja til að losa. Svo í á sama hátt og ef þú opna skrána sem þú verður að loka skrá, ef þú malloc minni, þú verður þú frjáls að minni. Og þú krakkar vilja fá að gera virkilega flott efni. Og það er a program sem þú getur keyrt til sjá hvort þú ert alltaf að leka minni. En þú vilt ekki að leka minni. Það er mjög slæmt. Bara klúðrar hlutum. Það er slæmt að gera bara eins og forritun skynsamlegt fyrir hönnun skilvirkni. En það er líka bara góður af slæmur fyrir tölvuna þína. Svo bara frjáls hlutur þegar þú malloc þá. Þú krakkar sjá samhverfur hér. Super einfalt. Bara frjáls og þá hvað bendillinn þinn, hvað nafn bendillinn þinn er, og það mun sjá um frjáls það fyrir þig. Cool. Þá höfum þetta. Þannig að við erum bara að fara að ganga í gegnum þetta forrit. Og svo þú krakkar eru að gera. Svo [inaudible] bara helstu. Þannig að við höfum sumir INT * músina. Þannig að við höfum bendi það er að fara að halda ints. Og hversu margir ints er það að fara að halda? Bara einn. Stærð int. Við athugum hvort bendillinn er null því það er, við viljum að segja gera ekki neitt. Það er slæmt. Þannig að við að prenta nokkur villa út af minni, oftast skila 1, eins og þú krakkar eru vanir. Og þá höfum við hér, við dereference músina okkar. Svo það þýðir að við erum að fara að geyma eitthvað á þeim stað gefið okkur. Int * músina eða malloc, skilar heimilisfang þar sem það að leggja til hliðar þetta minni fyrir þig. Svo það er í rauninni gefa þér like-- ef þú hugsa um fullt af hús í hverfinu sem þú vilt setja húsgögn í þinn, malloc er eins í lagi, þú færð að fara að hýsa þrjú. Og það gefur þér heimilisfang hús þrjú. Þannig að þetta núna, þetta Pointer verslanir tölvupóstfangi geymir veffang húsi þínu. * PTR þýðir, OK, ég er í húsi mínu. Cool. Ég þarf að fá einhverja heiltölu. Svo þú ert að spyrja fyrir einhvern að gefa þér húsgögn núna. Þannig að þú færð smá Int. Og það setur það í músina þína þar sem það er að benda á. Og þá er það bara prentar út, þú slóst hvar. Og aftur, tilvísun. Svo er þetta eins og þú fórst að þessu heimilisfang og þú sást hvað var þar. Cool? Og svo auðvitað að við að losa músina okkar. Ekki gleyma að losa músina þína. Ekki gleyma að athuga for null. Ekki gleyma að losa músina þína. Þú hefur tvo hluti sem þú manst frá þessu, eða að þú ættir að muna. Já. Áhorfendur: [inaudible] efni svona, bleikjan * s. Hvernig komum við frjáls aldrei þeim? Ræðumaður 1: Hm? Áhorfendur: Eru þeir eins strengi? Þú sagðir strengir eru bara eins char * s, ekki satt? Svo hvers vegna eigum við ekki að losa strengi? Ræðumaður 1: Þú aðeins að frjáls ef þú ert mallocing. Áhorfendur: Oh, ef þú ert að mallocing. Ræðumaður 1: Svo malloc og ókeypis eru tveir hlutir að þú ættir alltaf að hafa saman. f opinn, f loka tvennt þú ættir að hafa saman. Í báðum þeim tilvikum athuga for null. Já. Áhorfendur: Svo frjáls er bara leyfa eitthvað annað til að geyma þar á eftir Þetta forrit hefur notað það? Ræðumaður 1: Það er bara að segja, OK, ég er búin með þetta. Þú þarft ekki að halda því í kring. Annars tölvan mun Rétt eins að reyna að halda það þar. Og þá þú can't-- það rennur í minni málefni síðar. Þú vilt alltaf að losa það því það segir tölvuna, OK, ég er gert með þessum stað af minni. Hægt er að hafa það aftur fyrir mig til að nota síðar. Cool? Já. Áhorfendur: Þannig að við notuðum% d bara vegna þess að tvöfalda það er að koma til baka, eða hvers vegna is-- [inaudible]. Áhorfendur: Getur þú nota% i? Ræðumaður 1: Þú mátt nota% i. Eina mínútu í einhverja spurningar síðasta? Fara á undan. Áhorfendur: Ég hef bara fljótur spurningu. Svo PTR breytu, that's-- eins, með INT * PTR = malloc, það er bara að segja að það er bendir á stað í memory-- Ræðumaður 1: Viltu [inaudible]? Áhorfendur: --that er stærð of-- nei, er það í lagi. En það er bara að benda á stað í minni sem er bara eins og fjögur bæti. Ræðumaður 1: Hægri. Svo malloc stærð af INT segir, OK, ég ætla að fara að hlaupa burt, finna fjögur bæti af minni fyrir þig. Þegar það finnur að fjórir bytes af minni, það Veitir þér veffangi hvar það byrjar, og það er það sem geymt í músina, eða PTR. Good. Þú krakkar líta minna ruglaður en flestir fólk þegar ég tala um músina, svo ég er tilfinning nokkuð góður núna. Allt í lagi. Eins og alltaf, þú krakkar ættu að hafa alla fengið pset2 einkunnum þínum núna. Ég veit að það hafa verið nokkur wonky hlutir þar sem það segir, Formúla ekki gild eða eitthvað. Ef þú ert að fá það, allir bekk eru í gildi á hlið. Svo get ég sent þér screenshots af einkunnum þínum. Bara láta mig vita eins vel ef þú ert vantar einhverjar einkunnir eða eitthvað virðist ekki skynsamleg. Komið til mín. Ég hef verið frábær stolt af þér krakkar nú þegar, þannig að það upp. Og hafa góða hvíld af vikuna þína. Ég er viss um að ég mun sjá nokkur af þú á skrifstofutíma.