Spreker 1: Hi, almal. Welkom terug na afdeling. Pragtige dag out-- wat is die rede waarom, ek is seker nie, daar is net vier van julle hier en nie ons gewone pak. Ek was siek hierdie naweek. So ek het nie Burst vir julle. En ek kan begin hoes verskriklik in hierdie. Dus net met my dra. Ek gaan regtig probeer en kry deur middel van hierdie eerste, alhoewel, voordat ek 'n hoes aanval. Maar net maklik op my 'n wees bietjie bit-- dit is al wat ek vra.
So ons agenda vir today-- net 'n reminder-- jou quiz is volgende week. Ek het jou die afgelope week so dit sou nie vang jy onkant betrap. So ek jou weer herinner. Volgende week se jou quiz. Aan die einde, volgende week se artikel sal baie meer of-- Ek sal probeer en werk in 'n oorsig. So as jy ouens kon help my deur my te stuur dinge wat jy gemaklik met wat jy is bekommerd oor, onderwerpe wat jy wil vir om my te dek, dit wil groot wees. Sodat ek kan probeer en werk hulle in ons afdeling Volgende week of stuur jou ekstra materiaal of prep dat jy nie elders kan kry.
Ja! Meer mense kom! Ek het gedink, het ek doen wat sleg laaste week, wat niemand wil om terug te kom? Ek is bang. So het die ander drie dinge dat ons gaan om te gaan is herlei, lêer I / O, en dan wysers en dinamiese geheue. Ek is seker dat jy al super opgewonde oor pointers-- almal se gunsteling onderwerp, so eenvoudig om te verstaan. Ek is seker dat julle almal het dat, reg?
So eerste dinge eerste, redirection-- Dit is basies net 'n manier om te bepaal hoe jy insette dinge in jou program, hoe jy uitset dinge van jou program. Die belangrikste maniere waarop jy ouens is interaksie met dit is net deur middel van standaard uit met jou print screen hier. Maar daar is maniere om pipe-- soos ons hier sien is een van ons words-- soort pyp wat inligting of dat die data in 'n lêer van 'n lêer. Dis net verskillende maniere om dinge in jou program en uit jou program, in plaas van net die druk van hulle aan hierdie skerm of die skryf van dinge uit die opdrag lyn.
So die eerste een is 'n bietjie groter as kappie. So output-- dit net druk die uitset na 'n lêer in plaas van jou skerm. So as jy iets wat gedruk "Hello, world!" na die skerm, as jy sit dit in plaas te output.text, wat skep hierdie lêer genaamd output.text. En wanneer jy dit oopmaak, dit sal sê: "Hello, world!" daar. Dit kan super nuttig wees As jy 'n ton van foute eintlik, soos ons sien in hierdie een. As jy dit doen twee kappie, sal dit druk die fout boodskappe.
So as jy 'n probleem met opstel, dit het 'n baie foute en jy om te verval in 'n poging om te blaai deur jou opdrag lyn deur al hulle, kan jy net druk hulle na 'n lêer, oop die lêer sodat jy kan blaai deur hulle makliker te maak. Ek het eintlik 'n baie wanneer ek die opsporing my 181 psets vir die masjien leer. So kan dit wees super nuttig later op. Dit is ook nuttig as jy 'n program dat miskien is 'n biblioteek te genereer of die opwekking van 'n stel van snare, en jy moet in staat wees om te sien dat dit behoorlik te genereer nie. Dit is die manier om dit te doen nie.
So as jy druk hulle na 'n lêer, jy kan makliker ondersoek hulle, reg? Versus probeer om te blaai deur jou opdrag lyn. En dan een ding om daarop te let is dat met net die groter as kappie, as jy skryf na 'n lêer wat reeds exists-- so asof ons hardloop dit die eerste tyd, ons het dit aan output.text, en dan het ons 'n tweede program wat gedruk dit as program twee en het 'n groter as om te output.text, dit sal oorskryf that-- so oorskryf wat ooit in lêer om te begin.
So as jy wil by te voeg na 'n lêer, soos ons hier sien, Jy moet net nie twee groter as tekens. En dit sal voeg om dit te. Dit sal nie oorskryf nie. So as jy nodig het om verskeie uit te voer programme en soort van hou hou van wat almal van hulle is terug te keer na jou in 'n lêer, dit is 'n manier om dit te doen nie. As jy nie omgee wat in jou lêer en dit is toegelaat om te oorskryf, jy kan net gebruik om 'n enkele groter as. Maak dit sin maak vir almal?
Publiek: Soos dot streep hallo groter as uitset dot teks, soos twee keer, dit sal maar net wys op die produksie dot teks 'n tweede time--
Spreker 1: Right. So sou dit basies net heeltemal oorskryf wat daar was om mee te begin. As hierdie lêer hier, die output.text reeds bestaan, basies alles wat jy noem wat weer met 'n enkele groter as jy net kan dink dit as dit wil die lêer vervang. Soos wanneer jy 'n woord is die redding dokument en jy nie stoor as, en jy dieselfde naam hou, en dit heeltemal oor skryf it-- Dit is dieselfde soort van ding. Iemand enige vrae oor net uitdruk na 'n lêer? Awesome.
So natuurlik, as jy reverse die pyl rigting, kan dit insette te doen. So wanneer jy ouens het soos Caesar of Visioneer en jy moes insette iets, jy het 'n command line argument dat dit eintlik insette. Dit is 'n ander manier om dit te doen nie. So in plaas van om te wag vir 'n opdrag prompt soos wanneer jy gevra word om u boodskap in die keiser of Visioneer, as jy 'n teks lêer wat het jou boodskap, jy kan net tik dit in daardie.
So as dit was soos dot streep Caesar 3 minder as pyl insette teks, wat is jou boodskap, wat net 'n boete sou loop. Wanneer jou Caesar program eintlik gevra vir insette van die gebruiker, dit sou dit reeds het, omdat jy in hierdie lêer getik het. Dit is net 'n ander manier. Net 'n omgekeerde output-- net insette vir jou data.
En dan is die laaste een is pyp. So hierdie een se mooi cool. Want dit laat jou te neem die uitset van een program en sit dit as insette na 'n ander program. Ek weet nie of enige van julle gespeel met die Decipher dat CS50 kan hê aan jou gegee het, maar dit sou toelaat dat jy 'n paar voorbeelde te neem lêer, tik dit in jou encryption, en dan van daar af tik wat in jou dekripsie om seker te maak dit blyk dieselfde. So dit is soort van soos drie-pad loop. Gaan vir dit.
Publiek: Indien 'n program het verskeie insette, Is daar 'n manier om dit wat insette te vertel die teks lêer of die afvoer vir om te gebruik?
Spreker 1: Dit het verskeie insette. Wat ook al dien jou input-- wanneer dit vra vir insette wat eerste keer, is dit gaan om te aanvaar, dink ek, is dit gaan pyp in die hele lêer. So as jy meer insette, is jy gaan word spuit in veelvuldige lêers. So as jy vra vir boodskappe drie keer in jou kode, jy gaan wees om in drie verskillende lêers. En dit raak mal. En jy moet nie te bekommerd wees oor wat nou. Maar dit is die idee.
So ja, pyp is net uitset van een program maak gebruik van insette in die ander. Almal goeie daar? Cool. OK. Jy sal waarskynlik nie te veel om te doen met dit. Maar jy moet verstaan maniere waarop jy kan gebruik maak van hierdie. En daar is 'n paar gevalle wat jy dalk wil om dit te gebruik.
So dien ek / O-- Ek weet wat jy saying-- ons gebruik om te lees van en skryf aan ons skerm is daar, wat is standaard in en standaard uit. En dit is wat julle gewees het doen sedert die begin van die klas hier. Maar jy kan ook lees en skryf van lêers, wat is al die lêer I / O-- so liasseer insette, uitset is alles waarvoor dit staan. So dit beteken basies dat Jy kan jou data nou stoor.
Wanneer jy net druk op die skerm, dit is basies gegaan het, reg? So gou as wat jy maak "Hallo wêreld "en hardloop" Hello world " dit druk "Hello world" na die skerm. Maar jy kan nie regtig enigiets met dit van daar af. As jy dit stoor in 'n teks lêer, dan skielik jy het hierdie inligting wat jy toegelaat te manipuleer of sit dit in 'n lêer, of sit dit in 'n program later. Een van die redes Hoekom doen ons dit is net as 'n manier om data vir latere gebruik te stoor.
Ek het 'n paar van die stappe hier net loop deur middel van standaard I / O. In stap een, het jy moet 'n verwysing te skep na die lêer met al pette FILE ster lêer. So, wat 'n verwysing na 'n lêer. So dan wil hê dat jy dit oop te maak. En jy sê, letterlik, net lêer gelyk fopen. En dit gaan 'n terugkeer wyser na die lêer wat jy so pas geopen. Ek het 'n paar van julle ouens by kantoorure.
Maar een van die dinge is remember-- wysers kan 'n paar adres of nul, reg? As ons ooit 'n geval waar ' iets kan terugkeer nul, wat ons hoef te doen voordat ons ooit dit gebruik? Ons moet kyk of dit is null of nie, reg? Omdat sommige van julle mag gehad het die kwessie waar alles voorwerp is teruggestuur in tempo was nul. Jy probeer om te presteer 'n funksie op dit. En jou rekenaar webwerf myn. Reg? Ek is seker 'n paar van julle mag gehad het dat die kwessie.
So met fopen, sal fopen óf terugkeer 'n verwysing na die lêer of as iets verkeerd gaan, dit gaan null om terug te keer. Sodat jy altyd moet kyk dat dit nie nul teruggekeer voordat jy probeer om iets anders te doen. Dit is soos 'n standaard paradigma wat jy gaan hier nodig. As daar ooit 'n kans dat iets kon terugkeer nul, check om seker te maak dit nie voordat jy voortgaan. Anders, gaan jy pragtige terrein foute te kry. En niemand daarvan hou om te gaan met hulle.
So as ons hier sien, is die eerste argument is net die pad van die lêer. As die lêer nie bestaan ​​nie, dit gaan om die lêer te skep. En dit is net gaan om te leeg wees. En dan is die tweede argument is die modus wat jy wil. Wil ons om te lees van hierdie lêer? Wil jy uit om dit te skryf? Wil jy voeg? So eintlik wat ek net said-- indien die lêer nie bestaan ​​nie en jy probeer om te lees van dit, dit gaan 'n fout te gooi. As die lêer name-- wil indien file.text nog nie bestaan ​​nie en jy wil om te skryf om dit te, sal dit ' 'n leë lêer genaamd file.text vir jou. En as jy wil by te voeg, jy moet dieselfde ding doen. Maak dit sin maak? As jy probeer om te lees van 'n lêer wat nog nie bestaan ​​nie, dit sal 'n fout te gooi. Andersins, sal dit die lêer te skep vir jou kan doen wat jy wil om dit te. Cool. Nou kan ons lees van die lêer. En dit is net 'n soort van gaan deur die verskillende funksies dat ons vir die lêer I / O. Dit wil nodig wees in hierdie week se pset, As ek reg onthou. Ja, dit absoluut sal wees nodig in hierdie week se pset. So fgetc gee die volgende karakter. fgets net gee 'n reël van die teks. Dit sal terugkeer enigiets tot 'n nuwe lyn, en dit sal breek. So fread lees 'n sekere aantal grepe en plekke hulle in 'n skikking, wat is iets wat jy kan wil doen met re-size-- nuttig kan wees.
Hoeveel mense het gelees die pset spec, op die pad? OK. [Onhoorbaar]
Spreker 1: OK. Alle regte. Beslis lees that-- dit is 'n prettige pset. Jy kry 'n geskrap geheue te herstel card-- regtig opwindend wanneer dit werk. Maar beslis, begin lees nie. Kom praat met my as jy vrae daaroor.
OK, so as ek gesê het, fread lees 'n sekere aantal grepe. Dit is 'n arbitrêre aantal wat jy gaan om te stel. En dan fseek net beweeg tot 'n sekere posisie. So miskien het jy nie omgee nie oor die volgende 10 grepe. Jy wil net om voort te slaan. Jy gee nie om oor hulle. Jy wil om te lees vanaf byte 11. fseek kan jy om dit te doen. So dit laat jou selektiewe te wees oor wat jy lees. Omdat fgetc, fgets en fread lees van 'n sekere plek in die lêer.
'N manier om te dink oor dit as dit is ons lêer, wanneer jy die eerste oop te maak, jy het hierdie posisie in die lêer wat begin by die begin. Wanneer jy bel fgetc, fgetf, of fread, dit gaan om te begin van hierdie posisie merker. Kom ons sê jy wil net om te lees hierdie stuk van die geheue hier. Jy kan nie net bel. Jy het om te soek hier en lees dan van daar af of lees, kry, of AOOS, afhangende van wat jy wil. So soek net kan jy slaan gedeeltes van die geheue. En dit is die enigste manier waarop jy dinge kan spring sonder die lees van hulle in jou buffer. Maak dit sin maak vir almal?
Dit is duidelik dat daar 'n Baie van parallel here-- ons uitvoer, of insette herlei, jy kan lees en skryf. So fputc net skryf 'n karakter in die lêer. fputs skryf 'n lyn. Fprintf druk 'n formaat uitset. So as jy 'oortjies, of ruimte, of iets anders. En dan fwrite skryf 'n paar verskeidenheid van grepe na 'n lêer. So dit is die dieselfde manier fwrite en fread is analoog opposites-- fgets, fputs, en dan fputc en fgetc-- baie mal, vinnige dinge.
Net soort van hou hierdie handy-- jy het verskillende tye waar is jy dalk net wil een karakter op 'n tyd. Miskien wil jy 'n hele lyn. Met jou woordeboek pset-- wat in twee psets, Ek glo, gee ons jou 'n hele woordeboek in 'n teks formaat wat elke woord geskei deur 'n lyn. So as jy wil om te lees in een woord op 'n slag, wat kan jy gebruik as jy dit lees en hulle is almal geskei op die nuwe reëls, en jy wil net een woord op 'n slag?
Spreker 1: Right. Fgets-- want dit terug alles is op een lyn. En as elke woord is sy eie lyn, kan ons gebruik fgets. Cool. Maak dit sin, almal? Cool? Ja, ons gaan te kry om te die pret deel met wysers baie gou, waar jy kry 'n paar wiskunde te doen. En dit sal wonderlik wees.
Laaste step-- jou lêer sluit. Met so baie dinge hier, een van ons paradigmas is as dit kan terugkeer nul, gaan vir nul. As jy iets oop, jy beter toe te maak. OK, so jy is nie gedoen totdat jy gedoen nie, tensy jy gesluit het. Soort van soos dit is nie meer as totdat die vet dame sing. Dit is soos die sluiting van die lêer. Soos dit hier, sê net herhaal, altyd maak jou lêer voordat jy lees of skryf om dit te. En altyd is dit sluit as jy dit oopmaak. Alle reg? Cool.
So hier is 'n voorbeeld. So tiny-- Ek weet nie of jy ouens kan sien dat baie goed. As ons net kan verhoog die glans of ander manier. Laat my eintlik doen as ek kan. OK, julle kan nie regtig sien dat aan almal, kan jy? OK, ons gaan om dit te doen, dan is. [Onhoorbaar]
Ek neem aan dit is baie beter om te sien. Kan iemand sien waar my muis het, is die vraag? Ag, daar is dit is-- wat sukkel!
OK. Basies, moet julle soort het van 'n idee van wat dit is om te doen. Dit is nie volmaak nie. Maar ek wil eerder verduidelik as om meer tyd probeer om dit behoorlik te formateer. Basies, as jy hier sien, Ons begin met die lêer oop te maak. En ons het 'n paar databasis wat ons is opening wat sê dit is ons studente. En ons gaan om dit te skryf. So natuurlik terugkeer null. So ons het om te kyk vir nul. En dan as dit nie nul, gaan ons deur. En as jy sien, ons is herhaling deur hier. Daar is studente. Studente is hash gedefinieer as drie. En wat ons doen is ons druk op die lêer, reg? So, wat is ons uit te druk op ons lêer?
Publiek: Die tellings wat in die skikking?
Spreker 1: Ja. Die tellings wat in die array-- presies. So ons is die opening van hierdie databasis wat Ek neem 'n soort van grade databasis. En ons is maar net die druk van die tellings van elke student om die lêer. Cool? Goed. Awesome. OK. Kom ons kry terug aan-
Publiek: Ek het 'n vinnige vraag. Is die printf nie in die lus? Dit is net in die as loop? Spreker 1: Nee, dit is in die lus. Ek kan nie sien dat my muis baie goed hier. So ek sukkel om formaat wat behoorlik. Dit bracket moet weg wees. Dit moet hier af wees. Dit is wat in jou lus. Daar. Nou is dit mooi. So dit is hoe dit moet be-- behalwe vir die laaste bracket dat ek afgedank. OK. Maak dit sin maak vir almal? OK. Ons gaan om te beweeg op die volgende ding then-- wat eintlik, jy gaan nodig om die kode te sien. So ek is net gaan om te kopieer wat oor nou. OK. So ek gaan om te wys julle hierdie kode. En ek wil hê dat jy om te probeer en figuur uit te vind wat dit veronderstel is om te doen.
So kry 'n minuut of so that-- neem. Probeer uitvind wat gaan aan hier.
Ons weet dat ons ten minste twee argumente in die command line, reg? Ek neem aan een van die wat gaan word dat [onhoorbaar] van ons program is en dan iets anders. Want as [onhoorbaar] is minder as twee, ons gil op hulle. Reg? En van die gebruik, dit lyk soos dit gaan 'n soort van lêer te wees nie. Ons is almal eens dat? So nou, wat is die lus te doen? Wat gaan dit deur?
Publiek: Al die lêers. Spreker 1: Presies. Dit gaan deur al die lêers wat ons insette daar. So vir elke lêer, dis die opening van 'n string daar. Dit is die opening van die lêer. Reg? En dit is die lees van dit. Natuurlik, seker te maak dat dit nul. En dan is dit die druk. As dit is nul, dit is net vir ons sê dat dit nie 'n lêer wat bestaan. Want onthou, met lees ons lêer het om te bestaan. Reg? Met skryf en aanlas, jy kan wegkom met dit. Maar met lees, ons lêer het om te bestaan.
En dan as dit nie bestaan ​​nie, wat doen ons hier? Laat ons net hier begin. Wat is dié do-- hierdie eerste karakter. Wat doen dit? Hy kry 'n karakter, reg? So, wat is dit? Dit is steeds die eerste karakter. Enigiemand EOF ken?
Publiek: Einde van die lêer?
Spreker 1: Einde van file-- presies. So dit gaan om te gaan deur die hele lêer, reg? En dan gaan dit te werk deur kry elke daaropvolgende karakter. Reg? En wat is dit doen? Publiek: Om dat in--
Spreker 1: Putchar afdrukke aan jou screensaver. [Onhoorbaar] die karakter. En dan wanneer dit [onhoorbaar] dit sal die lêer sluit.
Publiek: Het jy nie nodig het om 'n [? anders? ?]
Spreker 1: Nie noodwendig nie. Ek bedoel, dit is soort van geïmpliseer in hierdie. Omdat hierdie terugkeer, al is, so lank as dit nie vang nie, jy is fine. Ek bedoel dit is waarskynlik 'n goeie oefen 'n anders om te doen. Maar 'n ander is nie altyd nodig, veral As jy iets soos 'n terugkeer, wat beteken dat in hierdie geval, indien dit vang dit jou program gaan eindig en dit sal nooit kry om hierdie. Dit is meer vir die geval waar jy nie noodwendig terugkeer iets. Want as dit was nie terugkeer enigiets, sou dit beteken dat as dit waar is, die res van hierdie sou nog steeds loop. En in daardie geval, jy wil 'n valse. As dit terugkeer, en jou program se einde, 'n ander is nie nodig om al die tyd, afhangende van die konteks. Jacob, het jy 'n vraag? Publiek: Ja. So doen die volgende karakter fgetc kry? Hoe die karakter te verhoog? Spreker 1: Ja. So fgetc kry die volgende karakter. Jy kan dink dit soos C ++ in 'n sin.
Publiek: So, wat was EOF?
Spreker 1: EOF is einde van die lêer. Dit is net 'n merker wat kan jy weet dat jy aan die einde van jou lêer. So dit gaan druk om jou standaard uit. En dan gaan dit te sluit die lêer wanneer dit gedoen is. En dan laat gaan die volgende lêer, reg? So algehele, wat beteken hierdie program doen?
Spreker 1: Ja. Hy druk net uit alles wat daar is. So as julle nog ooit gebruik CAT en dan die naam van 'n paar file-- Ek weet nie of enige van julle ooit gedoen wat op jou terminale. Maar as jy al ooit gebruik om die opdrag CAT-- C-A-T-- en dan wat lêer jy there-- dit druk dit uit vir jou terminale, wat kan wees super handig vir 'n paar dinge. Ek gebruik dit baie. Maak dit sin maak vir almal? Cool?
OK so jou taak now-- hetsy deur jouself of met die mense rondom you-- is om net skryf 'n eenvoudige program wat net sal skryf "Hello, world!" uit na 'n lêer.
Spreker 1: Ek was soos, het Ek doen dit sleg verlede week? Ek het nie gedink dit was so sleg nie. Ek is bly dat jy almal hier. Dit maak my regtig gelukkig. Ek is 'n meisie van 'n eenvoudige plesier. Ek het net soos wanneer my artikel bywoon. So ek is net om die begin vir julle ouens, sodat ons kan saam Code. Ek hou nie van om iemand op die plek nie, tensy jy wil wees.
Publiek: Vir die toets, doen Ons het 'n program te skryf?
Spreker 1: Jy kan gevra word om te skryf eenvoudige programme met die hand. Yup.
Publiek: Die toets is volgende week, reg?
Spreker 1: Die toets is volgende Woensdag. Dit beteken daar is 'n pragtige [? CSE?] gradering partytjie daarna, wat beteken dat jy jou tellings terug wat night-- op watter tyd? Wie weet? Maar dit sal die nag wees.
Alle regte. Hoe wil ons dit om te begin? Ek gee jou 'n hint-- begin met hierdie.
Publiek: Jy het 'n lêer oop te maak.
Spreker 1: Ja. So wat jy wil om dit te noem? Het jy net wil om dit te noem "lêer"? Kom ons maak dit maklik. So fopen-- wat is ons uitset toets gaan wees? Noem dit "Hello." En wat is ons af? Wat doen ons om hierdie lêer?
Publiek: lees. Skryf. Spreker 1: Ons skryf om dit te. Pragtige. OK, so ons het hierdie lêer nou. Wat moet ons doen? Publiek: kyk of dit nul. Spreker 1: kyk of dit null-- presies. Dit is wat ek graag wil hoor. Dit moet outomatiese wees, veral redelik baie van hierdie punt op. As jy begin segfaulting, het jy waarskynlik het nie gaan vir nul iewers. Nege keer uit tien, dis gaan jou fout te wees. So as jy net kon kry in die gewoonte, altyd kyk of dit is nul, jou lewe gaan wees mooi en easy-- of makliker.
So kyk om te sien of dit is nul. So as dit nie nul, wat is wat die bang gelyk means-- nie null-- dit is geldig. Wat wil ons doen? Ons wil net te druk om die lêer, reg? So wat gaan ons om te gebruik?
Spreker 1: Fprintf-- mooi. En fprintf neem twee arguments-- waar dit gaan en wat ons wil gedruk. So, wat is die eerste een? Waar gaan dit?
Spreker 1: Dit gaan dien. En wat wil ons gedruk? "Hello, world!" Alle regte. Ons het 'n laaste thing-- nog 'n groot paradigma hier. Publiek: Close. Spreker 1: Close. Daar gaan jy.
Publiek: Is dit gebeur As die lêer is nul? Spreker 1: Nee, dit is as dit nie nul. Publiek: O, as dit is not-- OK. Vir die fopen en dan die twee argumente wat gaan binne, wat beteken die eerste argument weer beteken?
Spreker 1: Die argument is net soos die naam van die lêer wat jy wil om te gaan. So na hierdie loop, sou jy het 'n paar lêer genaamd "hallo" wat het "Hello, world" in dit. Dit is al. Net die naam.
Publiek: En aangesien dit skryf, die lêer hoef nie reeds bestaan. Is dit wat jy sê?
Spreker 1: Right. Presies. As "Hallo" as 'n lêer nog nie bestaan ​​nie, is dit gaan 'n lêer genaamd te skep Hallo "en skryf dit vir jou.
Publiek: Wanneer jy vertel die program te skryf na die lêer, waarom jy skryf nie "lêer" in plaas van die naam van die lêer en fprintf--
Spreker 1: Omdat in hierdie geval, ons het dat groot FILE-- al in caps-- ster, liasseer. Dus is dit 'n verwysing na die lêer wat jy praat. Dit is die manier waarop Ons het net verwys. So in hierdie geval, jy kan dink file-- ha, ons kan this-- lêer hier gebruik verwys na die opening van die "Hallo" en laat dit skryf.
Publiek: Kan ons 'n "Hallo" plaas [? van net?] f lêer? Spreker 1: Nee, want "Hallo" moet oop en skryfbaar wees. Lêer hier is soos 'n aanwyscr wat sê OK, ons hierdie file-- hello-- dat ons is op soek na. Dit is geopen. En ons gaan om dit te skryf. As jy net gebruik "Hallo", wat vervat in dit. So dit gaan om uit te freak. Ek bedoel, jy kan dit genoem het. Jy kon gedoen het lêer, ster, "Hallo", is gelyk aan dit. Maar die hele punt is dat jy nodig om 'n lêer ster wyser om in staat wees om hierdie funksies te gebruik. Publiek: Kan jy doen lêer, ster, lêer, "Hallo" of het jy om te sit lêer ster lêer deur dit? Spreker 1: Jy kan doen lêer, ster, "Hello." Jy kan dit verander watter naam wat jy wil. Dit is heeltemal arbitrêre wat die naam is. Jy kan noem dit niks. Noem dit vlieg spaghetti, as jy wil.
Publiek: Wat is die "w" in aanhalingstekens vir?
Spreker 1: Die "w" is net die modus. So ons skryf hierdie lêer. Almal goeie? Duidelik? Ja.
Publiek: So wanneer dit skryf hierdie dien, waar dan vind ons dat die lêer?
Spreker 1: Dit sal in dieselfde wees gids wat jy tans in. As jy in pset drie en jy hierdie, binne jou pset drie gids gaan wees hierdie lêer genaamd "Hello." Cool? Almal goeie? Ek voel soos jy al om dit, wat is groot. OK. So terug na my skyfie show-- Ek is lief vir wanneer dinge werk. OK, pointers-- is julle opgewonde? Wysers is groot. Hulle neem 'n bietjie jou kop te draai om. Dit is my tweede jaar onderrig wysers. En ek dink ek het uiteindelik het dit. So as jy sukkel, is dit OK. Soos ek gesê het, teken prente help om 'n baie met dinge in CS, soveel as wat ek dink mense is geneig om te dink O, ons is op 'n rekenaar. Ons moet maar net-kode. No-- tekening foto's sal regtig help. En ek het regtig aanmoedig om te tap in jou kindergartner kant en bring kryt of merkers en teken. Want dit sal jou help. En as jy my sien by kantoorure, ek sal doen om stapels papier met penne teken dinge uit.
So, veral met pointers-- prentjies teken. En ek is seker ons is eintlik gaan tekening n paar foto's ook hier.
So julle ouens het almal Binky te sien, hierdie cool claymation ding. En ons dink dit is regtig snaaks toe Hy ontplof in 'n klomp van die stukke. Dit is 'n paar komiese verligting vir die klas. C [onhoorbaar] hierdie groot vermoë in staat wees om die geheue te beheer. En dit is een van die dinge wat werklik maak dit so 'n kragtige taal. Maar met groot krag kom groot verantwoordelikheid. En mal dinge kan gebeur as jy nie versigtig is nie. So wanneer jy gebruik wysers, wat jy wil maak seker dat jy regtig verstaan presies wat jy doen. Hopelik sal die volgende bietjie tyd sal jou help om werklik te verstaan wysers, hoe om dit te gebruik, en hoe om hulle te manipuleer.
So memory-- Ek is seker ons het gesien hierdie diagram voor. So dit is net 'n eenvoudige diagram van hoe dinge kan gestoor word geheue. So jy basies hierdie groot skikkings van een byte blokke is wat ons here-- effense stappe deur een elke keer. Dit is in Hex [onhoorbaar] so agt-bit blokke. En elke blok word geassosieer met 'n paar heksadesimale adres. So as jy ooit sien 0x, dit is net Notasie dat dit 'n heksadesimale adres. Jy kan aanvaar dit beteken sommige adres in die geheue. Ons praat oor geheue adresse wanneer jy sien heksadesimale.
Ons het SY veranderlikes, dryf is veranderlikes wat slaan. So SY winkel SY. Dryf winkel dryf. So het ons ook wenke dat die winkel geheue adresse. Dit is 'n soort van kartering. Wysers is uitsluitlik vir die geheue adresse. So dit is soos jou soort is daar. Jou toestel is 32-bietjie, wat beteken dat jou geheue adres is vier grepe. So 'n wyser wat jy het gaan ook vier grepe te wees. Of anders as dit vier grepe, geheue is vier grepe. Wysers winkel geheue. Daarom, hulle is vier grepe. Cool-- wil net om dit te versterk.
Jy moet hierdie komiese kry nou. Ek hoeveel van julle weet nie is Kletskerk fans, maar ek is lief vir Kletskerk. Dit is wonderlik.
Alle regte. So skep pointers-- soos ek gesê het, dit is pretty much net soos enigiets anders. Jy het 'n tipe. Jy het 'n naam. Reg? Dit is wat ons het daar. [? Hex?] Ster beteken dit is 'n muis, en dan alles wat jy wil om dit te noem. So het die tipe verteenwoordig wat jy kan stoor. Alle reg? Op dieselfde wyse as wat ons doen SY, ons weet ons 'n int is die stoor van daar. Met 'n wyser, dit hou 'n geheue adres. Maar wat beteken dit is that-- hier is waar 'n tekening gaan handig te pas kom. So in hierdie geval, ons het sommige value-- laat ons sê vier. Vier is by adres een. OK?
Die eerste een beteken hier dat dit 'n wyser 2x. Reg? Dit is 'n paar wyser x. x dalk iets wees, wat ook al. Wat ook al x is-- sê x is vier. Dit gaan die stoor geheue adres hier. So int, ster, x-- hierdie is 'n paar ander slot in memory-- wie weet wat dit is. Maar dit gaan 'n adres hier stoor. So hierdie like-- sou wees in hierdie geval, ook al, gestoor word op 0x1-- wat gestoor word by die adres wat ons wyser hou, het aan te pas met wat ons aangewese. So by 0x1, in hierdie geval, dit is x. Dit kan net ooit 'n int terwyl ons die gebruik van hierdie.
Net so, as ons 'n 'n ander 1j, ongeag adres is gestoor met 'n y het 'n char-- dieselfde ding met Z wees. In dieselfde manier, wanneer jy probeer en doen intx gelyk aan 0,4, dit gaan gil op jou en wees soos nee, jy het gesê dat jy 'n int wou hê. Dit is veronderstel om 'n int te wees. Hou op om dit 'n float te maak.
So laat dinge wees wat hulle wil wees. Laat dinge self. So groot ding is net watter tipe wyser dit is nie, dit is die enigste ding wat jy kan daar stoor. OK? Met die praktyk, soos met verlede week, alles lyk regtig soort van abstrakte. Ons gaan 'n paar praktyk te doen. Dit moet meer sin maak.
So verwysing en dereferencing-- dit werklik belangrik om hierdie reguit. Ek het nog steeds te verfris elke nou en dan. En ek is soos 'n wag, wat 'n mens wil ek doen? So het die ampersand sal eintlik gee jy die verwysing of adres van. So dit gee die adres in geheue waarvan veranderlike gestoor word. So dit gaan eintlik na julle terugkeer 'n heksadesimaal, terwyl dereferencing dit is eintlik gaan om te gee die data wat daar geberg word. OK? So ons gaan om te kyk na 'n voorbeeld baie vinnig, of eintlik volgende.
OK. So ons moet regtig dink versigtig hieroor. So hier het ons 'n paar heelgetal x. Ek gaan om te probeer en teken dit uit na die beste van my vermoëns. So ons gaan hierdie slot x te hê. En dit is die stoor van vyf. Die adres is 0x4. Cool? Alle goeie.
So nou het ons hierdie wyser. Dit was hier. En die ampersand gee ons Die adres van iets. So, in hierdie geval, dit is die adres van x. Wat is die adres van x? 04-- en dit wyser is op 0x08. Cool? So jy kan dink oor hierdie wyser, 04, wys net hier. En hulle geroep wysers want as ons meer in hierdie, jy gaan om te sien wat verwys na dinge. En een blok wys na 'n ander blok sal 'n baie meer sin maak nie. So hier is twee. En dan het ons het 'n paar kopie wat what-- 0x0c. En dit gaan dereference ons wyser.
So wat dit sê, is OK, hier is ons wyser. Die waarde wat dit stoor is 0x04, En wat dit gesê word na hierdie adres en sê vir my wat is in dit. So dit is effektief wat hierdie pyl doen. Jy kan dink van hierdie, soos jou ster. So OK, wanneer ons dit doen ster, beteken dit volg. Gaan na hierdie adres. En dit is basies net volgende hierdie pyl na hierdie geheue stuk. En gee ons wat in dit, wat 5. Dit is hoekom ons kopie is gelyk aan 5. Maak dit sin maak? Is daar iemand wat my nodig het om te gaan deur dat die weer, of stadiger? Jy wil my om te gaan deur dit een keer? OK. Ons gaan dit weer te teken. Wanneer ons begin, ons is almal eens ons het sommige stuk van die geheue wat 'n veranderlike x wat ons stel gelykstaande aan 5. Ons beheer nie waar dit is in die geheue. So hierdie plek is net arbitrêr opgedra. Goeie daar? OK. Dan inisialiseer ons 'n verwysing na 'n int. Dit is waarom dit toegelaat om te wys op x, want ons het 'n int hier. Ons het nog 'n stuk van geheue, want dit wyser is 'n veranderlike, net soos enigiets anders. Dit is arbitrêr opgedra 'n ruimte in die geheue. En wat dit stoor is die adres van x. Ampersand beteken die adres van x. So, wat is die adres van x?
Publiek: Dit is zero-- Spreker 1: 0x04. So then-- laaste een. Ons het 'n paar copy-- weer net nog 'n veranderlike. So laat ons ken 'n paar arbitrêre plek. En ons dereference ons wyser. Die ster beteken gaan na die adres gestoor in my wyser. Vertel my wat is daar. So die adres gestoor in ons wyser is 0x04. So gaan ons na daardie adres. Dit is wys om die adres. Wat is in die geheue blok? Dit is 'n vyf. So dit is wat ons ken ons kopie. Almal goeie? Cool. Again-- foto's.
So die dop van die waardes here-- ek gaan laat julle dink hieroor. Ons kan 'n ander prentjie teken. Maar ek wil hê dat jy om te probeer en die rede deur dit op jou eie vir 'n minuut.
Omdat hulle nie gee ons 'n voorbeeld adres, Ek gaan net ampersand x-- te doen wat behoort te help ry dit in die huis. Ampersand beteken adres.
So in die eerste een, almal saam met die eerste lyn. Sommige x stel se five-- paar ewekansige slot in die geheue. Int ster wyser is gelyk na die adres van x, reg? Int ster wyser skep hierdie blok, noem dit Pointer, en ken dit aan die adres van x. Ek is vreeslik op-karakters.
Nou wat ons doen is ons sê OK, dereference ons wyser. So ons gaan OK, wat is in ons wyser? Dit is ampersand x. Gaan na ampersand x en toewys dit.
So nou, is ampersand x gaan wees 35. So basies, as jy dereferencing, gaan jy OK. Jy gaan tekening foto's soos hierdie. Jy gaan tekening jou pyle oor waar dit is. So gaan na hierdie slot in die geheue en óf gee my daardie waarde terug, of dit moet verander. In hierdie geval, want ons is op hierdie waarde, ons toeken om dit te wees 35. Terwyl dit in die verlede een, as jy sien, ons is die toeken wat hier na iets anders.
Sodat hulle het hierdie awesome tafel. Dit is nie so sleg nie. Julle werk op dit. Ek gaan om dit te trek uit op die bord. Ons gaan om dit te vul saam, OK? So gryp 'n paar papier, gryp 'n vennoot, begin werk. Ek gaan 'n te kry groter stuk van die kryt. Want dit gaan 'n baie om te wees. OK. PROFESSOR: OK. Kom ons begin met die eerste ry. Ons sal daar begin, dan kan jy ouens kan dalk werk deur 'n paar meer. OK. 'n gelyk b keer c so wat is 'n? Dit is nie 'n truuk vraag, ek belowe.
STUDENT: 4 keer 5.
PROFESSOR: 4 keer 5. 20. So, wat is b? STUDENT: 4.
PROFESSOR: en C? STUDENT: 5. PROFESSOR: 5. En dan is dit net gaan om te word-teken 'n, ampersand b, ampersand c, reg? Nie sleg nie. Dit is eenvoudig genoeg. OK. So die volgende een. A is gelyk aan 'n keer c, in die geval iemand was nie vertroud met dit. Is almal vertroud met die tye gelyk? OK, al hierdie means-- dit snelskrif vir 'gelyk aan 'n keer c. Jy kan dit ook doen met afdeling, met Verder, met aftrek. Wat jy kan doen 'n leeftyd, of 'n plus gelyk c 'n gelyk aan 'n plus c, 'n minus gelyk c sou wees om 'gelyk aan 'n minus c. Dis net sintaktiese suiker.
So, in hierdie geval, 'n is gelyk aan 'n keer c sal ons wat gee? Weereens, nie 'n truuk vraag.
PROFESSOR: 100. Is daar enigiets anders verander? No. Miskien sal ek uiteindelik beter op my-karakters.
STUDENT: OK, jammer, hoe het jy 100? PROFESSOR: OK. So 'n is gelyk aan 'n keer c, so 'n keer c. STUDENT: O, jy gebruik 'n vir die previous-- PROFESSOR: Ja. So dit is ons mees onlangse waardes. Dit is wat jy moet wees deur gebruik te maak soos ons af beweeg, OK. So, b is die enigste ding wat verander, reg? So laat vul in alles anders. B. Wat is b gaan wees? Om te wees of nie te wees nie. So, wat is dit? Wat is die ster pa doen?
STUDENT: Kode van die ligging van pa.
STUDENT: Nee, nie heeltemal nie. So dit is 'n d verwysing.
STUDENT: So b oorhandig waarde van pa.
PROFESSOR: Ja, so pa is die adres van 'n, reg? So dit sê gaan na waar a gestoor en gee dit daardie waarde. So, wat is b? STUDENT: 100. PROFESSOR: 100. Volmaak. OK, so PC is wat verander. Alles bly dieselfde. Wat is 'n rekenaar gaan wees? Eenvoudige opdrag. PC is gelyk aan pa, en wat is pa?
STUDENT: ampersand a. PROFESSOR: Perfect. Nou kry ons interessant. OK, kom ons breek hierdie een af. Eerstens, wat is b keer c, want dit is die maklike deel van hierdie een, reg? B tye c is--
PROFESSOR: Ja, so wat hierdie een doen, As dit ster pb, wat verander?
STUDENT: Wat is in the-- PROFESSOR: Wat is in b? STUDENT: Wat is in die ruimte dat pb dui op. PROFESSOR: En pb wys aan- STUDENT: B. PROFESSOR: B. Dus is die enigste ding verandering is b, reg. So b keer c, 500. So dit is wat nou verander. Cool. Pragtige. Julle doen groot. Alle reg, hierdie een af ​​te breek. C is verander, reg? Sodat ons in alles kan vul. Kom ons kyk. OK. Ons weet dat c gaan die wees produk van twee getalle, reg? Watter twee getalle, al is?
Student: a en c?
PROFESSOR: So 'n is reg vir die eerste een. So ons d verwysing p van 'n, reg? P van 'n punte na 'n, sodat ons weet dat dit gaan 100 keer wat? Tye wat nie PC punt? Dui op 'n. So 100 keer 100 is 10,000. Doen wat sin maak? Cool. Pylvak, ouens, laaste ry. OK. Wat hier te verander?
STUDENT: A. PROFESSOR: A. Perfect, so alles kan dieselfde bly. OK. En wat is 'n? So dit is 'n tyd wat? Dit is ster pb. So ster pb beteken hier is pb, pb punte te b.
PROFESSOR: 500. So het ons 'n 500 keer 100. Dit is 50.000. Sjoe! Kyk na daardie.
STUDENT: Hoekom het ons die & C vir die last-- PROFESSOR: Jammer. STUDENT: O, OK. PROFESSOR: My slegte. Baie van die skrif. Almal goeie? Nie te sleg nie, reg? Neem net 'n bietjie terwyl deur te werk. As jy breek dit af, verstaan ​​wat elke deel verwys aan- as met alles wat dit is, yes-- breek dit af na die klein probleme en dan herkombineer, en jy kan 'n paar awesome dinge doen. Daar is die antwoorde nie, maar ons het dit gedoen. Wyser rekenkundige. Ag. My hande is al kalk. So voeg of af te trek int pas die wyser deur die grootte van die tipe wyser. Onthou hoe elke tipe het 'n ander grootte? Dus, net soos 'n dubbel of 'n lang lank is agt en int is vier, maar kar is een.
So wat jy wil doen is-- een ding om te onthou is net dat hoeveel jou wyser waarde eintlik verander sal afhang van die tipe wyser dit is. Almal goed met dit? Kan ek vee dit? Ons is goed? Awesome.
So as ons 'n paar wyser that-- dit gaan be-- ek gaan dit 'n int wyser te maak. Dit slaan nie. As jy wyser om te sê plus een, wat dit gaan doen is dit gaan om te werk dit deur die grootte van 'n int want dit is die tipe wyser dit is.
Met C, alles is baie streng en gereguleer. Die int wyser gaan werk deur die bedrag van die ruimte 'n int sou neem. 'N int vier grepe.
So, wat sou dit draai in? Jy is net die toevoeging van vier op hierdie. Nou is jou wyser sou be-- OK.
So as dit was 'n kar en ons het wyser plus een, wat sou dit nou wees? As dit started-- voorgee ons started-- nou is dit 0x08. Kom ons nou sê dat dit 'n char wyser, en ons het een. Wat sou dit verander na? Hoeveel grepe is 'n kar?
Spreker 1: Een. Publiek: So 0x09. Spreker 1: So sal dit nege wees. So net iets om te onthou. Net wanneer jy een by te voeg, dit is nie die toevoeging van een nie, tensy dit is 'n teken. Dit is die toevoeging van hoeveel grepe die tipe wat dit is, wat is die rede waarom ons het hierdie vergelyking hier. So dit is int keer die grootte van die tipe wyser.
So het ons die voorbeeld hier. y is tot daardie waarde, 0x4 opgedra, toe ons y plus gelyk aan een. Wat is in dit, wat is in x, nie verander nie. Wat beteken verandering is wat in y. Die adres gestoor in y bygewerk deur vier want daar is vier grepe in 'n int en dit is 'n int wyser.
Alle regte. So nou het ons 'n oefening. So die vraag is wat sal druk. Enige idees?
Publiek: Die aantal karakters in gelukkige kat? Spreker 1: Presies. So graag met jou string. Nie almal kry dit? Wil ons dit deur te loop?
Ja, OK. So wat ons het here-- ek soos hierdie so veel meer. Ek het nie [Onhoorbaar] belaglik.
So het ons ons string hier, gelukkig kat. Pragtige. Ons het 'n paar counter dat ons hou van. So ons het 'n paar char * wyser dat net is gelyk aan Str. Wat dit doen, is dit toeken 'n wyser aan die begin van die string. Want ek is seker, as dit is in lesing genoem, ons het julle dit gegee ouens data tipe genoem string.
Maar regtig snare is net 'n skikking of-- soos char *. Dit is 'n verwysing na 'n klomp van die karakters wat aangrensend is in die geheue. So dit stel dit net gelyk aan enige string is geïdentifiseer deur waar sy eerste karakter is. So dit is net die opstel van 'n sekere punt gelyk aan die begin van die string. Almal goeie daar? Cool.
So, dit is dereferencing ons wyser. So dit is eintlik gaan gee ons 'n bietjie waarde in hier, in ons string wat ons praat. En ons is so lank as wat gesê dit is nie nul Terminator. So hou gaan totdat jy aan die einde van die tou. Werk jou wyser deur een. So r, sal dit eintlik werk deur een elke keer, want dit is 'n kar, die kar *.
So dit gaan om deur te gaan. Dit gaan om te werk. Dus is die eerste keer dat dit loop, dit gaan by h hier te wees. Dit gaan om te werk.
Dit sal 'n 'n wees. Dit sal 'n p, y wees, en so aan en so voort. Ons sal werk toonbank. Wanneer dit bereik die einde, is dit net druk hoe ver dit is gekry. Ja.
Publiek: So dit tel die ruimte as een, reg? OK.
Spreker 1: dink so. Is dit 'n question--
Spreker 1: Geen sorge. Dit sal ek dit doen. Alle reg, sodat die een ding wat ek verstaan, is dat met 'n skikking, jy kan ook beskou dit as 'n wyser omdat skikkings is net deurlopende kolle van die geheue.
Sodat jy dit kan hanteer op dieselfde manier. Jy kan dit manipuleer met wysers, ook. So in plaas van om in hierdie geval, die analoog ding sou wees skikking 0 gelyk aan 1.
Maar in dieselfde manier waarop die 'n string word bepaal deur die begin van waar sy eerste karakter is, 'n skikking word bepaal deur waar sy eerste element is. Want ons weet, ons is gewaarborg nie, dat hierdie gaan deurlopende te wees blokke van die geheue. Dit is wat ons in staat stel om dit te doen. Ons weet hulle is deurlopende blokke van die geheue.
So in hierdie geval, deur dereferencing net skikking, wat ons vertel, OK, gaan na die begin van jou skikking, wat is hier. So kan jy stel dit gelyk aan een. En in hierdie geval, ongeag jou skikking tipe is, wanneer jy dit werk vir een, dit is net soos die opdatering dit na die volgende indeks. Jy kan dit doen omdat jy weet wat in jou skikking. So hy weet hoeveel om te werk jou wyser deur, wat dit aan so te werk dat jy by die volgende slot.
So dit is net 'n ander manier skryf skikking 0 gelyk aan 1, skikking 1 is gelyk aan 2, skikking bracket 2 is gelyk aan 3. Dit is net 'n ander manier om te dink oor dit. Want hulle is deurlopende blokke in die geheue, jy kan verwys na hulle óf deur die skikking notation-- wat ek persoonlik vind easier-- maar miskien wat jy nodig het om dit te manipuleer streng deur geheue adresse. En dit is die manier waarop jy dit sou doen. Soort van meer as 'n cool ding wat jy kan doen versus miskien nie iets wat jy eintlik gaan om te implementeer.
Ek gebruik dit in 61. Julle waarskynlik nie nodig nie bekommerd te wees oor dit te veel. Maar as jy belangstel, neem 61 volgende jaar. Ons is in die pylvak ouens. Ek weet, dit is 'n lang. Dinamiese Memory Allocation-- sodat ons weet dat 'n mens dinge wanneer ons gepraat tydens ons eerste artikel saam, Ons kyk na 'n ruil funksie waar dit was buite die omvang van ons belangrikste funksie. En ons is verby in hierdie waardes wat effektief was kopieë.
En sodra ruil klaar uitvoering, is dit net 'n stapel gelaat. Onthou, ons het 'n stapel raamwerk vir omruil. Dit laat en diegene waardes laat met dit. En hulle is weg. Ons kan niks doen nie saam met hulle en ons was hartseer want ons kan nie ons waardes ruil.
Maar met C, soos ek genoem het, het jy het 'n baie mag oor die geheue. So, wat jy kan doen is jy kan ken die dinge wat op die hoop hier wat sal daar bly totdat jy hulle vertel anders.
Hulle is soos goeie kinders. Hulle bly daar. Hulle laat nie. Hulle sal daar bly totdat jy soos, OK, jy kan weg te gaan.
Terwyl die dinge wat op die stapel, wat- hulle is soos stout kinders. Hulle sal net hardloop weg wanneer jy wil om daar te wees en dan is hulle weg. Jy kan nie kry hulle terug.
So het die hoop is-- ons gaan praat oor malloc en vry, wat Ek is seker dat jy ouens hore in lesing. En dit is basies 'n manier baie aanhoudende data te hê. So kan jy die data hou om so lank as wat jy wil. Mhm.
Publiek: Kan jy hoop definieer en stapel? Is hulle graag plekke om dinge te sit?
Spreker 1: So hulle is basies just-- hulle die manier waarop ons verwys net na die geheue. So hoop net plekke waar geheue dinamies toegeken is, terwyl stapel verwys meer rame te stapel wat meer sentraal tot die funksies wat eintlik hardloop. Jy het nie regtig beheer.
Die groot verskil, jy het beheer oor die hoop as jy wil. Jy het minder beheer oor die stapel. Die stapel hang af van die funksies wat uitgevoer word, en die volgorde waarin hulle is hardloop, en hoe dinge teruggekeer. Terwyl met die hoop, as ons sal sien, jy kan sê, OK, ek wil hierdie waarde te wees rond totdat ek jou sê anders. Jy word nie toegelaat om ontslae te raak van dit. Jy is nie toegelaat om dit te ignoreer. Jy gaan dit om rond te hou vir so lank as wat ek vir jou sê. Jy kry om die baas te wees in die hoop, terwyl die stack-- miskien as jy soos bedrieg jou pad kan jy die baas te wees. Maar nie heeltemal. En dit is regtig net die geheue. Dis net verskillende maniere verwys na die geheue.
Cool. So met dit, hoe om te beheer van jou geheue. Dit is met malloc, wat jy gaan kry om te gebruik. So dit is net kort vir die toekenning van geheue. Dit is al wat dit is. Daar is 'n klomp van die ander cool funksies wat alloc aan die einde, en hulle staan ​​vir verskillende dinge.
So wanneer jy dit nodig berging wat nodig jou huidige funksie te oorleef so dat wanneer jou huidige funksie hardloop weg, het jy nog die data wat jy het van dit, wat jy wil malloc te gebruik. Dit sal dit inisialiseer op die hoop. En soos ek gesê het, en hou sê, jy sal dit daar te hou totdat jy dit vertel anders, wat is die belangrikste ding hier.
So een ding om op te let, en dit is tipies baie belangrik, is dat hierdie sizeof is super nuttig te gebruik want afhangende van die tipe van die masjien jy hardloop, dit het verskillende bedrae geheue wat dit neem. So jy wil altyd die grootte van so te gebruik dat jy nie die masjien afhanklik is, sodat jou kode sal loop op 'n masjien.
En dit is net 'n deel van die skryf van goeie-kode. As dit werk op 'n masjien, maar nie enige van die ander, Hoe bruikbaar was jou program? Sodat jy altyd wil maak seker en gebruik sizeof.
Publiek: So is dit soos die grootte van 10 duim [onhoorbaar]?
Spreker 1: Dit is die grootte van 10 SY. ja. So grootte van SY sal terugkeer hoeveel kos een int neem. Of grootte van kar, hoe Hoeveel kos een kar nie. En dan hoeveel blokke van daardie wil jy hê?
So in hierdie geval, ons wil iets dat ons 10 SY te kan stoor. En dit sal ongeag werk van die masjien, wat is cool. So hoeveel grepe sal wat eintlik vir jou? Vinnige wiskunde.
Publiek: 40. Spreker 1: 40. Presies. So 'n groot ding. Wyser of malloc kan terugkeer null.
So weer, altyd kyk na sien of dit nul teruggekeer voordat jy probeer om iets te doen met dit. As jy probeer en dereference hierdie wyser nou, dit is net gaan om te segfault want jy gaan en probeer aan te raak nul wanneer jy nie moet hê. So altyd gaan vir nul. Weereens, kan alles wat jy doen.
Dit kan terugkeer null. Dit sal terugkeer nul as jy óf uit die ruimte, of vir watter rede ookal dit het in 'n paar geheue fout. Dit het soms terug net null. So jy moet net om te kyk vir dit. Dit is al wat hierdie skyfie sê. En dan wat ons het hier is 'n oproep te bevry. So in die dieselfde manier dat as jy open 'n lêer moet jy 'n lêer te sluit, As jy malloc geheue, het jy jy moet bevry dat die geheue. En julle sal kry regtig cool dinge om te doen.
En daar is 'n program wat jy kan hardloop sien as jy ooit lek geheue. Maar jy wil nie geheue te lek. Dit is regtig 'n slegte. Net gemors dinge.
Dit is sleg om te doen net soos ontwikkeling wyse vir die ontwerp doeltreffendheid. Maar dit is ook net 'n soort van sleg vir jou rekenaar. Dus net gratis dinge wanneer jy malloc hulle.
Julle sien die simmetrieë hier. Super eenvoudig. Net vrye en dan Wat ook al jou wyser, Wat ook al die naam van jou wyser is, en dit sal sorg bevry dit vir jou. Cool.
Dan het ons hierdie. So ons is net gaan om te loop deur middel van hierdie program. En dan moet jy die ouens gedoen word.
So [onhoorbaar] net belangrikste. So ons het 'n paar int * wyser. So het ons 'n wyser wat gaan SY te hou. En hoeveel SY gaan dit hou? Net een. Grootte van 'n int.
Ons gaan om te sien of wyser is nul, want dit is, wil ons sê nie niks doen nie. Dit is sleg. Sodat ons druk 'n fout uit geheue, mees dikwels terug 1 as julle gewoond is.
En dan het ons hier, ons dereference ons wyser. So dit beteken dat ons gaan om te slaan iets op die plek wat aan ons gegee. Int * wyser, of malloc, gee die adres van waar dit ter syde stel hierdie geheue vir jou. So dit is basies gee jou like-- as jy dink oor 'n klomp van die huise in 'n woonbuurt wat jy wil om te sit jou meubels in, malloc is soos OK, jy te gaan na die huis van drie. En dit gee jou die adres van die huis van drie.
So hierdie reg nou, hierdie wyser winkels 'n adres, slaan die adres van jou huis. * Ptr middel, OK, ek is by my huis. Cool. Ek moet 'n paar heelgetal te kry.
So jy vra vir iemand gee jou meubels nou. So jy kry 'n int. En sit dit in jou wyser waar dit verwys na.
En dan is dit net afdrukke uit, jy betree waar. En weer, die verwysing. So dit is soos jy na hierdie spreek en jy sien wat daar was. Cool?
En dan natuurlik ons ​​bevry ons wyser. Moenie vergeet om jou wyser te bevry. Moenie vergeet om te kyk vir nul. Moenie vergeet om jou wyser te bevry. Jy het twee dinge wat jy onthou van dit of dat jy moet onthou. Ja. Publiek: [onhoorbaar] dinge soos wat, die kar * s. Hoe kom ons nooit bevry diegene?
Spreker 1: Hm?
Publiek: Is dit soos snare? Jy het gesê snare is net soos char * s, reg? So hoekom doen ons nie bevry snare?
Spreker 1: Jy moet net te gratis as jy mallocing. Publiek: Ag, as jy mallocing. Spreker 1: So malloc en vry is twee dinge dat jy altyd moet saam. f oop, f naby, twee dinge julle saam moet hê. In beide gevalle, kyk vir nul. Ja.
Publiek: So vry is net sodat iets anders om daar te wees gestoor na hierdie program is dit gebruik?
Spreker 1: Dit is net sê, OK, ek is klaar met hierdie. Jy hoef nie om dit te hou rond. Anders jou rekenaar Net soos probeer en hou dit daar. En dan moet jy can't-- dit loop in die geheue kwessies later. Jy wil altyd om dit te bevry, want dit vertel jou rekenaar, OK, ek is gedoen met hierdie plek van die geheue. Jy kan dit terug vir my om later te gebruik. Cool? Ja.
Publiek: Ons gebruik die% d net omdat 'n dubbel wat kom terug, of waarom is-- [onhoorbaar].
Publiek: Kan jy% i gebruik?
Spreker 1: Jy kan% i gebruik. Enige laaste minuut vrae? Gaan voort. Publiek: Ek het net 'n vinnige vraag. So het die ptr veranderlike, that's-- soos met die int * ptr = malloc, dit is net sê dit is verwys na 'n plek in memory-- Spreker 1: Wil jy [onhoorbaar]? Publiek: --that is die grootte of-- nee, dit is OK. Maar dit is net te wys op 'n plek in geheue wat net soos vier grepe. Spreker 1: Right. So malloc die grootte van int sê, OK, ek gaan om te gaan afloop, vind vier grepe van die geheue vir jou. Wanneer dit bevind dat vier grepe van die geheue, is dit gee jou terug die adres van waar dit begin, en dit is wat gestoor in wyser, of ptr. Goed. Julle kyk minder verward as die meeste mense wanneer ek praat oor wyser, so ek voel redelik goed nou.
Alle regte. Soos altyd, moet jy die ouens almal gekry om jou pset2 grade deur die nou. Ek weet daar is 'n paar onstabiel gewees dinge waar dit sê, formule nie geldig of iets. As jy kry wat almal jou grade geldig is aan my kant. So ek kan jou ' screenshots van jou grade. Laat my net weet net so goed as jy ontbreek enige grade of iets Dit lyk nie of dit sin maak. Kom na my toe.
Ek het super trots op jou ouens reeds, so hou dit aan. En het 'n goeie res van jou week. Ek is seker ek sal sien 'n paar van julle by kantoorure.