[TEMA MUSIC] SPEAKER 1: Živjo, vsi. Dobrodošli nazaj v oddelku. Lep dan out--, ki je razlog, zakaj sem prepričani, da so le štiri izmed vas tukaj in ne naš običajni paket. Bil sem bolan ta vikend. Torej nimam zvezdnimi za vas. In jaz lahko začne kašelj strašno ves to. Torej le nosijo s seboj. Bom zares poskusiti in priti skozi ta prvi, čeprav, preden sem imela kašelj napad. Ampak samo enostavno mi je malo bit--, da je vse, kar sem vprašal. Torej, naša agenda za today-- samo reminder-- vaš kviz naslednji teden. Rekel sem ti to prejšnji teden, tako da Ne bi vas ujeli nepripravljene. Tako da sem vas spomnim še enkrat. Naslednji teden je tvoj kviz. V ta namen, naslednji teden je oddelek bo veliko bolj of-- bom poskusil in dela v nekaterih pregledu. Torej, če vi lahko pomagaj mi jih me pošilja stvari, ki ste zadovoljni s, da ste v skrbeh, teme, ki bi si želeli za me za kritje, da bi bilo super. Tako da sem lahko poskusite in jih dela v našem oddelku za naslednji teden ali vam poslali dodatno gradivo ali prep da ne boste mogli dobiti drugje. Ja! Več ljudi, ki prihajajo! Mislil sem, da sem naredil slabo last teden, da nihče ne želi, da pridejo nazaj? Strah me je. Torej ostalih treh stvari da bomo šli čez so preusmerjanje, datoteko I / O, in potem kazalci in dinamičnega pomnilnika. Prepričan sem, da ste vsi super navdušen pointers-- priljubljena tema vsakogar, tako enostavno razumeti. Prepričan sem, da vi vsi dobili, kajne? Torej, prvi stvari prvi, redirection-- to je v bistvu samo pot za nadzor nad tem, kako vložek stvari v vašem programu, Kako si izhodne stvari iz vašega programa. Glavni načini, ki jih fantje so bili v stiku z njim je samo preko standardne out s svojim tiskanja zaslona tukaj. Vendar pa obstajajo načini za pipe-- kot vidimo tukaj je eden od naših words-- naravi cevnega da informacije ali pa, da so podatki v datoteki iz datoteke. To je samo na različne načine pridobivanje stvari v vašem programu in iz svojega programa, namesto samo jih natisnete na tem zaslonu ali vnašanjem stvari v ukazni vrstici. Torej prva je malo večja kot strešica. Torej output-- to samo natisne izhod v datoteko namesto zaslona. Torej, če si imel nekaj, natisnjeno "Hello, world!" na zaslon, če ste jo dali namesto da output.text, da ustvari datoteko z imenom output.text. In ko ga odprete, se bo pravijo "Hello, world!" tam. To je lahko zelo uporabno če imate tono napak pravzaprav, kot smo videli v tem. Če boste to storili dve Caret, bo tiskanje sporočil o napakah. Torej, če imate težave z prevajanje, da ima veliko napak in ste dobili bogged v poskusu se lahko pomikate v ukazni vrstici skozi vse njih, lahko samo jih tiskati v datoteko, odpreti to datoteko, tako da boste lahko pomikate po njih lažje. Dejansko sem rabil, da veliko, ko sem bil debugging moji 181 psets za strojno učenje. Tako da je lahko super koristno kasneje. Koristno je tudi, če imate program da morda ustvarja knjižnico ali ustvarjajo nekaj niz strun, in si potrebujejo, da bi lahko videli, da to je njihovo pravilno ustvarjanje. To je način za to. Torej, če ste jih tiskati v datoteko, vas Lahko jih lažje preučiti, kajne? Versus poskuša, da se pomaknete skozi ukazni vrstici. In potem ena stvar, ki ugotavlja je, da s samo večja kot strešica, če se pišeš na datoteko, ki je že exists-- tako, kot če bi tekel to prva Tokrat smo ga na output.text, in potem bomo imeli drugega programa da je ta natisnjena programa dveh in naredil več, kot pa output.text, bo prepisalo that-- tako prepisati, kar je bilo doslej v Ta datoteka za začetek. Torej, če želite, da pripnemo v datoteko, kot vidimo tukaj, si naredil dve večji od znakov. In bo pripet k njej. To ne bo mogel spremeniti. Torej, če boste potrebovali za zagon multiple Programi in vrsta hrani tir, kaj vse so vračajo na vas v datoteko, to je način, da to storite. Če vam ni vseeno, kaj je v vaši datoteki in to je dovoljeno, da se prepišejo, lahko preprosto uporabite eno večja od. Ali to smiselno za vsakogar? OBČINSTVO: Kot pika poševnica zdravo večja kot izhod dot besedila, kot dvakrat, to bom pokazal samo na izhodu dot besedilo drugega time-- SPEAKER 1: Right. Tako da bi v bistvu samo v celoti prepisati kaj je bilo na začetku. Če ta datoteka tukaj output.text že obstaja, v bistvu karkoli pokličeš da še enkrat z enim in je višja kot si lahko samo pomislim saj, kot je zamenjala datoteko. Kot takrat, ko ste za varčevanje a Word dokument in vam prihrani as, in boste obdržali isto ime, in je it-- popolnoma prepiše to je isto reč. Kdo kakršne koli vprašanja o samo prikazovanje v datoteko? Super. Torej je očitno, če se obrne arrow smer, lahko to storite vhod. Torej, ko so imeli fantje kot Cezarja ali VISIONEER in si moral vhodni nečesa, boste imeli argument ukazne vrstice da dejansko vhod je. To je še en način za to. Torej, namesto da bi čakali za ukazno vrstico kot takrat, ko ste prosili za vaše Sporočilo v cesarju ali VISIONEER, če ste imeli besedilno datoteko da je bilo vaše sporočilo, si lahko samo ga vnesite v to. Tako da, če bi bilo to všeč piko poševnica Cezarja 3 manj kot puščica vnos besedila, ki je vaše sporočilo, da bi bilo v redu. Ko se vaš program Caesar dejansko prosil za vnos od uporabnika, bi ga že imeli, ker ki ste jih vnesli v tej datoteki. To je samo še en način. Samo hrbtni strani output-- Samo vhod za vaše podatke. In potem zadnja je cev. Tako da to je zelo kul. Saj vam omogoča, da vzemite moči enega program in ga dal kot vhod v drug program. Ne vem, če kdo od vas igral s razvozlati da CS50 morda vam ga je dal, vendar bi vam omogočajo, da sprejmejo nekatere vzorca datoteke, ga vnesite v vaš šifriranje, in nato od tam tip da v svoj dešifriranje zagotoviti je izkazalo enako. Torej, to je nekako kot tristezni zanke. Gre za to. OBČINSTVO: Če program ima več vhodov, ali obstaja način, da to, kateri vhod povedati uporabiti besedilno datoteko ali izhod za? SPEAKER 1: ima več vhodov. Karkoli vložite input-- ko je prosi za vnos to prvič, da je predpostavljam, mislim, da je bo cev v celoten spis. Torej, če imate več vhodov, ste dogaja, da se po cevi v več datotek. Torej, če ste prosi za sporočila trikrat kodo, boste dajali v treh različnih datotek. In postane noro. In ti ne bi bilo treba skrbeti, da se prav zdaj. Ampak to je ideja. Torej, ja, cev je samo izhod enega Program uporablja vložek v drugo. Vsi dobro tam? Cool. OK. Vam verjetno ne bo narediti preveč z njo. Vendar morate razumeti, načini, ki jih lahko uporabite. In obstaja nekaj primerov, ki boste morda želeli, da ga uporabljate. Torej datoteko I / O- Vem, kaj ste saying-- smo se uporabljajo za branje iz in pisanje na našem zaslonu tam, ki je standardna in standardni ven. In to je tisto, kar ste vi bili počne že od začetka razreda tukaj. Lahko pa tudi brati in pisati datotek ki je vse datoteka I / O- tako vložite vložek, proizvodnja je vse to pomeni. Torej je to v bistvu pomeni, da lahko shranite svoje podatke zdaj. Ko si ga natisnete na zaslon, je to v bistvu ni več, kajne? Takoj, ko se bo "Hello svet "in run" Hello world " Tiska "Zdravo svet" na zaslonu. Vendar vam ne morem storiti kaj z njo od tam. Če shranite v besedilu Datoteka, nato pa nenadoma imate te podatke, da ste dovoljene manipulirati ali ga daste v datoteko, ali ga v programu kasneje. Eden od razlogov zakaj mi je to le kot način za shranjevanje podatkov za kasnejšo uporabo. Imam nekaj korakov tukaj Samo hoja skozi standardna I / O. V prvem koraku, vi morali ustvariti sklic v datoteko z vsemi kape Datoteka zvezda. Tako da ustvari kazalec na datoteko. Torej hočeš, da ga odprete. In pravite, dobesedno, samo datoteka enaka fopen. In to se dogaja, da se vrnete kazalec na datoteko, ki jo pravkar začela. Videl sem nekaj vas Fantje na uradnih ur. Toda ena od stvari, je remember-- kazalci lahko nekateri naslov ali null, kajne? Če bomo kdaj imeli primer, ko je nekaj, kar se lahko vrne null, kaj moramo storiti preden smo kdaj ga uporabite? Moramo preveriti, če je nična ali ne, kajne? Ker so nekateri od vas lahko imela vprašanje, pri katerem koli objekt smo se vrnili v zamahu je nična. Poskušali ste izvesti nekatere funkcije na njem. In računalnik site očitati. Kajne? Stavim, da nekaj vas Morda je imel to težavo. Torej z fopen, bo fopen bodisi vrne kazalec na datoteko, ali če gre kaj narobe, to se dogaja, da se vrne null. Torej, morate vedno preveriti da se ni vrnil null preden boste poskušali storiti ničesar drugega. To je kot standardno paradigmo da boste potrebovali tukaj. Če je kdaj priložnost, da nekaj, kar bi lahko vrne null, preverite, ali je ne, preden boste nadaljevali. V nasprotnem primeru boste da bi dobili lep napake na kraju samem. In nihče ne mara, da se ukvarjajo s temi. Torej, kot vidimo tukaj, je prvi argument je le pot do datoteke. Če ta datoteka ne obstaja, to se dogaja, da ustvarite to datoteko. In to je le, da bo prazno. In potem drugi argument je način, ki ga želite. Ali želimo brati iz te datoteke? Ali želite napisati od njega? Ali želite priložiti? Torej, kaj pravzaprav sem said-- če datoteka ne obstaja in ga poskušate brati iz to, da se bo vrgel napako. Če datoteka name-- všeč, če file.text še ne obstaja in želite pisati za njo, bo ustvaril prazno datoteko z imenom file.text za vas. In če želite priložiti, morate narediti isto stvar. Ali to smiselno? Če poskušate brati iz datoteka, ki še ne obstaja, to bo vrgel napako. V nasprotnem primeru bo ustvaril datoteko za vas to, kar hočeš z njo. Cool. Sedaj lahko brati iz datoteke. In to je le nekako šlo z različnimi funkcijami da imamo za datoteko I / O. Ta volja potrebno v pset ta teden, če se prav spomnim. Ja, to absolutno ne bo potrebno pset ta teden. Torej fgetc vrne naslednji znak. fgets vrne ravno vrstico besedila. To se bo vrnil nič do Nova linija, in se bo zlomil. Torej fread bere nekatere število bajtov in jih postavlja v array, ki je nekaj, kar bi lahko želite storiti s ponovnim size-- lahko koristno. Koliko ljudi je prebralo pset spec, mimogrede? OK. [Neslišno] SPEAKER 1: OK. Vse je v redu. Definitivno se glasi that-- je zabavno pset. Dobiš, da obnoviti izbrisano spomin card-- res razburljivo, ko deluje. Ampak zagotovo, da začne brati. Pridi govoriti z mano, če vas vprašanja v zvezi z njo. OK, tako kot sem rekel, fread prebere določeno število bajtov. To je nekaj poljubnega števila da boš nastaviti. In potem fseek le poteze na določenem položaju. Mogoče vam ni mar O naslednjih 10 bajtov. Pravkar želite preskočiti naprej. Vam ni mar za tiste. Želite prebrati pričetkom ob bajt 11. fseek vam omogoča, da to storim. Torej, to vam omogoča, da selektivno o tem, kaj bereš. Ker fgetc, fgets in fread prebrane iz določenega kraja v datoteki. Način, da razmišljajo o tem, če je to je naša datoteka, ko ste prvič odprli, imate ta položaj v datoteki ki se začne na začetku. Kadarkoli pokličete fgetc, fgetf ali fread, to se dogaja, da se začne z ta položaj marker. Recimo, da si želite, da se glasi ta kos pomnilnika tukaj. Ne moreš kar poklicati. Moraš iskati tukaj in nato brati od tam ali bere, dobi, ali getc, odvisno od tega, kaj želite. Tako iščejo samo vam omogoča, da preskočite dele pomnilnika. In to je samo Tako lahko preskočite stvari ne da bi jih branje v svoj buffer. Ali to smiselno za vsakogar? Očitno je, da je Veliko vzporedno here-- naš izhod, vhod ali preusmeritev, ki ste jih brati in pisati. Torej fputc samo piše znak v datoteko. fputs piše črto. Fprintf natisne oblikovan izhod. Torej, če imate zavihke, ali prostor, ali malenkosti. In potem fwrite piše nekaj niz bajtov v datoteko. Torej je to enako fwrite in fread so podobna opposites-- fgets, fputs in nato fputc in fgetc-- veliko od norih, hitro stvari. Samo nekako ohraniti to handy-- boste imeli različne čase kje pa si samo želim en znak naenkrat. Morda želite celotno linijo. Z vašim slovarju pset-- ki je v dveh psets, Verjamem, da smo vam celoto Slovar v besedilni obliki ki ima vsako besedo ločena s črto. Torej, če boste želeli prebrati z eno besedo naenkrat, Kaj lahko uporabljate, če berete in vsi so se ločili na novih progah, in si samo želim eno besedo naenkrat? Publika: Fgets SPEAKER 1: Right. Fgets-- saj da se vrne vse, kar je v eni vrstici. In če je vsaka beseda, je njegova lastna linija, lahko uporabite fgets. Cool. Ali to smisla, vsi? Cool? Ja, bomo dobili zabaven del s kazalci Zelo kmalu, kjer vas dobili storiti nekaj matematike. In to bo super. Zadnja step-- zaprite datoteko. S tukaj toliko stvari, eden od naših paradigem je, če se lahko vrne null, preverite null. Če odprete nekaj, Raje ga zaprete. OK, da vam ne bo storil, dokler niste storiti, če ste ga zaprli. Nekako kot da ni več dokler dama maščobe poje. To je, kot zapiranju datoteke. Kot tukaj piše, samo ponoviti, vedno odprite datoteko, preden ste branjem ali zapisovanjem na njej. In to vedno zapreti, če ste jo odprli. Vse v redu? Cool. Torej, tukaj je primer. Torej tiny-- Ne vem, če vas fantje, lahko vidite, da je zelo dobro. Če bi le lahko poveča svetlost nekako. Dovolite mi, da to dejansko storili, če bom lahko. OK, fantje, ne more zares vidim, da sploh lahko? OK, bomo to storili, potem. [Neslišno] Predvidevam, da je to veliko bolje videti. Lahko kdo videl kje moj Miška je šla vprašanje? Ah, tam je is-- kaj se bori! OK. V bistvu, bi vidva imela vrsta ideje o tem, kaj to počne. To ni popoln. Ampak jaz bi raje razloži kot porabijo več časa, da bi jo pravilno oblikovati. V bistvu, kot vidite tu, začnemo z odprto datoteko. In imamo nekaj Datoteka zbirke podatkov, ki smo odprtine, ki pravi, da naši učenci. In bomo pisati. Torej, seveda, vrne null. Zato moramo preveriti null. In potem, če to ni null, gremo skozi. In kot vidite, mi smo zanka tu skozi. Obstajajo študentov. Študenti se hash opredeljena kot tri. In kaj delamo, je smo tiskanje v datoteko, kajne? Torej, kaj smo se izpisuje na našo datoteko? OBČINSTVO: The rezultati da so v matriki? SPEAKER 1: Ja. So rezultati, ki so v array-- natančno. Tako odpiramo to Datoteka zbirke podatkov, ki Predvidevam, da je neke vrste podatkovne baze razredov. In smo samo tiskanje rezultati vsakega študenta do te datoteke. Cool? Dobro. Super. OK. Vrnimo se to-- OBČINSTVO: Imam hitro vprašanje. Je printf ni v zanko? To je samo v if zanki? SPEAKER 1: Ne, to je v zanko. Ne vidim mojo miško zelo dobro tukaj. Tako da sem borijo, da bi format, ki pravilno. Ta nosilec je treba izginil. Moralo bi biti tukaj. To je tisto, kar je v vaši zanko. Tam. Zdaj je lepa. Torej, to je, kako bi bilo be-- razen za ta zadnji nosilec, ki sem zavrnilo. OK. Ali to smiselno za vsakogar? OK. Bomo, da se premaknete na na naslednjo stvar then-- ki, pravzaprav, boš bi morali videti kodo. Tako da sem le, da bo kopiranje, da več kot zdaj. OK. Torej, jaz bom vam pokazal fantje to kodo. In želim vam, da poskusite in slika kaj je to moral storiti. Torej, glede that-- vzeti minuto ali tako. Poskusite ugotoviti, kaj se dogaja tukaj. Vse ideje? Vemo, da imamo vsaj dve argumenti v ukazni vrstici, kajne? Predvidevam od katerih se bo da [neslišno] o je naš program in potem je nekaj drugega. Ker če [neslišno] je manj razen dveh, smo kričati na njih. Kajne? In iz uporabe, izgleda, to se dogaja, da je neke vrste datoteke. Vsi se strinjamo s tem? Torej, zdaj, kaj je zanka počne? Kaj gre skozi? OBČINSTVO: Vse datoteke. SPEAKER 1: Točno tako. To se dogaja skozi vse datoteke, ki smo jih tam vhod. Torej, za vsako datoteko, to je odpira nekaj niz tam. To je odpiranje te datoteke. Kajne? In to je branje iz nje. Seveda, da preveri, ali je nična. In potem je tiskanje. Če je nična, to je samo nam poveste da to ni datoteka, ki obstaja. Saj se spomnite, z preberite naša datoteka mora obstajati. Kajne? Z napisati in append, lahko izmaže. Ampak s prebrano, naša datoteka mora obstajati. In potem, če to ne obstaja, kaj počnemo tukaj? Naj samo začnete tukaj. Kaj je to do-- to prvi znak. Kaj počne? Dobi en znak, kajne? Torej, kaj to delaš? To je že prvi znak. Kdo ve EOF? OBČINSTVO: Konec datoteke? SPEAKER 1: Konec file-- točno. Tako se dogaja, da gredo skozi celoten spis, kajne? In potem se dogaja, da ga posodobiti dobili vse kasnejše značaj. Kajne? In kaj počne? OBČINSTVO: Prenos ki in-- SPEAKER 1: Putchar odtisi za ohranjevalnik zaslona. [Neslišno] znak. In potem, ko je [neslišno] to bo zaprite datoteko. OBČINSTVO: Ali se vam ne potrebujete [? drugega? ?] SPEAKER 1: Ni nujno. Mislim, da je nekako vpletena v to. Ker se ta vrne, čeprav, dokler to ne ujamejo to, da ste v redu. Mislim, da je verjetno dobra vadijo narediti drugje. Vendar je še vedno ne potrebno posebej če imate kaj kot donosa, ki pomeni, da v tem primeru, če je ulov je, vaš program se bo končala in ga nikoli ne bomo prišli do tega. To je bolj za primer, kjer ste ni nujno, da se vračajo nekaj. Ker če to ni bilo vrača ničesar, bi to pomenilo, da če bi bilo to res, Preostanek bi to še vedno teče. In v tem primeru boste bi želeli false. Če je to vrača, in konec svojega programa, drugega ni potrebno vse čas, odvisno od konteksta. Jacob, si kakšno vprašanje? OBČINSTVO: Ja. Tako da ne fgetc dobili naslednji znak? Kako povečati lik? SPEAKER 1: Ja. Torej fgetc dobi naslednji znak. Lahko si o njej mislijo kot C ++ v nekem smislu. OBČINSTVO: Torej, kaj je bil EOF? SPEAKER 1: EOF je konec datoteke. To je samo marker, ki vam omogoča, da vedo, da ste na koncu datoteke. Torej, to se dogaja, da natisnete na vašem standardu ven. In potem se dogaja, da zaprete datoteke, če je to storjeno. In potem gremo Naslednja slika, kajne? Torej na splošno, kaj ta program naredi? [Neslišno] SPEAKER 1: Ja. Samo natisne vse, kar obstaja. Torej, če ste vi kdaj uporablja CAT in nato ime neke file-- Ne vem, če ima kdo od vas kdaj naredil, da je na vašem terminalu. Ampak, če boste kdaj uporabiti Ukaz CAT-- C-T-- in potem karkoli datoteka ste ga there-- ga natisne na vaš terminala, ki lahko super priročno za nekatere stvari. Sem ga veliko uporabljajo. Ali to smiselno za vsakogar? Cool? OK, tako da vaša naloga now-- bodisi sami ali z ljudmi okoli you-- je, da samo napisati preprost program da bo samo napisati "Hello, world!" ven v datoteko. [Neslišno] [Neslišno] SPEAKER 1: Mislil sem si naredil Storim, da slabo prejšnji teden? Nisem si mislil, da je tako hudo. Vesel sem, da ste vsi tukaj. To je pravzaprav tisto, kar me veseli. Sem dekle preprostih užitkov. Pravkar mi je všeč, ko je moj oddelek obiskuje. Tako da sem ravno to začelo fantje, tako da bomo lahko kodo skupaj. Ne maram nikogar dajanje na mesto, če hočeš biti. OBČINSTVO: Za kviz, storite moramo napisati program? SPEAKER 1: Morda boste morali pisati enostavne programe z roko. Yup. OBČINSTVO: Kviz je naslednji teden, kajne? SPEAKER 1: Kviz je naslednjo sredo. To pomeni, da je lepa [? CSE?] razvrščanje stranka zatem, ki pomeni, da boste dobili svoje rezultate nazaj, da night-- ob katerem času? Kdo ve? Vendar pa bo, da je noč. Vse je v redu. Kako želimo, da začnete to? Jaz ti bom hint-- začne z tem. OBČINSTVO: Moraš odpreti datoteko. SPEAKER 1: Ja. Torej, kaj želite poklicati to? Ali si želite, da ga imenujejo "file"? Naj bo enostavno. Torej, kaj je naša fopen-- izhod preizkus bo? Call it "Hello". In kaj je naš način? Kaj počnemo s to sliko? OBČINSTVO: Preberi. Pisanje. SPEAKER 1: Pišemo z njo. Lovely. OK, tako da imamo zdaj to datoteko. Kaj moramo storiti? OBČINSTVO: Preverite, če je nična. SPEAKER 1: Preverite, če je null-- natančno. To je tisto, kar sem želel slišati. Da mora biti samodejna, še posebej, precej od te točke naprej. Če začnete segfaulting, boste verjetno ni preverite null nekje. Devetkrat od desetih, ki je bo tvoja napaka. Torej, če bi lahko samo dobil v navada, vedno preverite, če je nična, Vaše življenje se dogaja, da lepo in easy-- ali lažje. Zato preverite, če je nična. Torej, če to ni null, ki je tisto, kar bang enaka means-- ne null-- je veljavna. Kaj želimo narediti? Pravkar smo želeli natisniti do te datoteke, kajne? Torej, kaj bomo za uporabo? OBČINSTVO: Fprintf SPEAKER 1: Fprintf-- lepo. In fprintf traja dve arguments-- kjer to se dogaja in kaj želimo natisnjeno. Torej, kaj je prva? Kadar se to dogaja? OBČINSTVO: Datoteka. SPEAKER 1: To se dogaja v datoteko. In kaj želimo natisnjeno? "Hello, world!" Vse je v redu. Imamo zadnjo thing-- en velik paradigma tukaj. OBČINSTVO: Close. SPEAKER 1: Close. Tukaj imaš. OBČINSTVO: Je to dogaja če je datoteka null? SPEAKER 1: Ne, to je, če to ni nič. OBČINSTVO: Oh, če je not-- OK. Za fopen in nato dva argumenta, ki gredo v notranjosti, Kaj je prvi argument spet pomeni? SPEAKER 1: argument je tako kot ime datoteke da hočeš iti. Torej, po tem, ko ta poteka, bi vam imajo neko datoteko z imenom "zdravo" da je imel "Zdravo, svet" v njem. To je vse. Samo ime. OBČINSTVO: In ker je to pisanje, dokumentacije ni že obstajajo. Je to tisto, kar si rekel? SPEAKER 1: Right. Točno tako. Če "Hello", kot datoteka še ne obstaja, to je dogaja, da ustvarite datoteko z imenom Hello "in napisali, da to za vas. OBČINSTVO: Ko govoriš Program bi napisal v datoteko, zakaj pišeš "file" namesto ime datoteke in fprintf-- SPEAKER 1: Ker je v tem primeru imamo da velika FILE-- vse v caps-- zvezda, datoteko. Torej, to je kazalec na datoteko da govoriš. To je način, da smo samo sklicujejo. Torej, v tem primeru lahko zamislite file-- aha, lahko uporabimo this-- datoteko tukaj se nanaša na odprtje "Hello" in najemnin je pisati. OBČINSTVO: Bi lahko dal "Hello" namesto [? od samo?] f datoteke? SPEAKER 1: Ne, ker "Hello" mora biti odprt in pisalne. Datoteke tukaj je kot označevalec, ki pravi OK, imajo to file-- hello-- da gledaš. To je bila odprta. In se bomo pisati. Če ste šele raba "Hello", ki je zapisana v njej. Tako da se bo znorel. Mislim, lahko bi ga poimenovali. Lahko bi naredil datoteko, zvezda, "Hello", enak. Ampak bistvo je, da vas Potrebujemo datoteka zvezdicami kazalec, da bi na da bi lahko uporabila te funkcije. OBČINSTVO: Ali bi lahko datoteka, zvezda, datoteka, "Hello" ali pa boste morali vložiti datoteke zvezdo, datoteko z njim? SPEAKER 1: Lahko bi storiti datoteke, zvezda, "Hello". To lahko spremenite v ne glede na ime, ki ga želite. To je popolnoma arbitrarna kaj je to ime. Lahko jo poimenujete ničesar. Je ime, ki plujejo špageti, če si hotel. OBČINSTVO: Kaj je "w", v narekovajih, za? SPEAKER 1: "w" je le način. Tako da smo pisno to datoteko. Vsi dobro? Jasno? Da. OBČINSTVO: Torej, ko piše to datoteko, kje smo potem ugotovili, da datoteko? SPEAKER 1: To bo v enaki imenik, ki ste trenutno. Če ste v pset tri in zaženete to v vašem pset tri mape se bo Ta datoteka se imenuje "Hello". Cool? Vsi dobro? Počutim se, kot da ste vse ga dobili, kar je super. OK. Torej nazaj k mojim slide show-- Obožujem, ko stvari delujejo. OK, pointers-- Ali vidva razburjen? Kazalci so super. Vzamejo malo zaviti svojo glavo okoli. To je moje drugo leto poučevanje kazalci. In mislim, da sem končno dobil. Torej, če ste se borijo, da je v redu. Kot sem že prej povedal, risanje slike veliko pomaga s stvarmi v CS, toliko, kot mislim, da ljudje misliti, oh, smo na računalniku. Mi bi samo kodo. No-- risanje slike bo res pomagal. In res vam, da izkoristiti v svoj kindergartner strani in bi iz barvice ali označevalci in žrebanje. Saj vam bo pomagal. In če me vidiš na uradnih ur, I bo prenašanje skladovnic papirja z boksi risanje stvari. Torej, še posebej z pointers-- pripravi slike. In prepričan sem, da smo se dejansko dogaja, da je risba nekaj slik tudi tukaj. Torej, vi vsi dobili za prikaz Binky, to kul claymation stvar. In mislimo, da je to res smešno, ko je eksplodirala v kup kosov. To je nekaj stripov olajšave za razred. C [neslišno] to veliko sposobnost da lahko za nadzor pomnilnika. In to je ena od stvari, ki so zares jo naredi tako močan jezik. Vendar z veliko močjo pride velika odgovornost. In nore stvari, se lahko zgodi, če niste previdni. Torej, ko boste uporabljali kazalci, ki jih želite prepričajte, da ste resnično razumejo točno to, kar delaš. Upajmo, da naslednjič malo Čas bo pomagal resnično razumejo nasvetov, kako jih uporabljati, in kako z njimi manipulirajo. Torej memory-- Prepričan sem, da smo jih Pred videl ta diagram. Torej je to samo preprost diagram kako bi lahko stvari shranijo spomin. Torej ste v bistvu imajo ti ogromne nizi ene bajtov kaj imamo here-- rahlo korakih po eno vsakič. To je v hex [neslišno] tako osem-bitni bloki. In je vsak blok povezana z nekaj šestnajstiškem naslov. Torej, če ste že kdaj videli 0x, ki je pravkar notating da je v šestnajstiškem naslov. Lahko prevzame to pomeni, nekatere naslov v pomnilniku. Govorimo o pomnilniških naslovov ko boste videli šestnajstiški. Imamo Ints so spremenljivke, boje so spremenljivke, ki shranjujejo. Torej Ints store ints. Plava trgovina plava. Torej imamo tudi kazalci da store naslovi pomnilnika. To je neke vrste preslikavo. Kazalci so izključno za pomnilniške naslove. Tako, da je kot vaš tip tam. Vaš aparat je 32-bitna, kar pomeni, da je tvoj spomin naslov štiri bajte. Zato je vsak kazalec, da imate se tudi dogaja, da štiri bajte. Ali pa, če je štiri bajte, Pomnilnik je štiri bajte. Kazalci trgovina spomin. Torej, oni so štiri bajte. Cool-- samo želijo okrepiti to. Moral bi dobiti ta strip zdaj. Ne vem, koliko vas so xkcd fans, toda ljubim xkcd. To je super. Vse je v redu. Tako ustvarja pointers-- kot sem rekel, to je precej, tako kot karkoli drugega. Imate vrsto. Imaš ime. Kajne? To je tisto, kar imamo tam. [? Hex?] Zvezdicami pomeni, da je kazalec, in potem karkoli želite poklicati ga. Torej predstavlja tip kaj lahko shranite. Vse v redu? Na enak način, če delamo ints, vemo, da smo shranjevanje int tam. S kazalcem, jo ima naslov pomnilnika. Ampak kaj to pomeni, je that-- tukaj je, kjer Risba bo prišel prav. Torej v tem primeru imamo nekateri value-- recimo štiri. Štiri je na enem naslovu. OK? Ta prva tukaj pomeni da je kazalec 2x. Kajne? To je nekaj kazalec x. x lahko nekaj, karkoli. Karkoli x is-- pravijo x je štiri. To se dogaja, da shranite pomnilniški naslov tukaj. Torej int, zvezda, x-- je to nekateri drugi slot v memory-- kdo ve, kaj je to. Ampak to se dogaja, da shranite naslov tukaj. Torej bi bilo to like-- v tem primeru, glede, je shranjena na 0x1-- karkoli je shranjena na naslov, ki ga ima naša kazalec, mora ujemati z kaj smo imenovani. Torej na 0x1, v tem primeru, to je x. To je mogoče le, kdaj int, medtem ko smo s pomočjo tega. Podobno, če imamo drugo 1y, karkoli naslov je shranjena z je y biti char-- ista stvar z z. Na enak način, kadarkoli vas poskusiti in narediti intx enak 0,4, to se dogaja kričati na vas in se kot ne, si rekel, da si je želel int. To naj bi int. Stop trudijo, da bi to float. Torej stvari, to, kar hočejo biti. Naj stvari so. Tako velika stvar, ki je le ne glede na vrsto kazalca je, da je le stvar, ki jo lahko tam shranite. OK? V praksi, kot pri prejšnji teden, vse Zdi se res nekako abstraktna. Bomo storili nekaj prakse. To bi bilo bolj smiselno. Torej Reference in dereferencing-- je zelo pomembno, da se ti naravnost. Jaz še vedno morali osvežiti in nato vsakih zdaj. In sem kot čakati, katera ne želim? Tako da bo znak pove dejansko dajejo si reference ali naslov. Tako se vrne naslov v Spomin, ki je shranjena spremenljivka. Tako se dogaja, da se dejansko vrne na vas šestnajstiški, medtem ko ga Dereferenciranje se dejansko dogaja, da vam Podatki, ki so tam shranjeni. OK? Torej, gremo pogledati na primer zelo hitro, ali dejansko up zraven. OK. Zato moramo res misliš natančno o tem. Torej, tukaj imamo nekaj celo število x. Bom poskusila pripraviti to ven najboljših močeh. Torej bomo imeli to režo x. In to je shranjevanje pet. Njen naslov je 0x4. Cool? Vse dobro. Torej, zdaj imamo ta kazalec. Bilo je tukaj. In znak pove nam daje naslov nečesa. Torej, v tem primeru, da je naslov x. Kakšen je naslov x? 04-- in to kazalec na 0x08. Cool? Torej si lahko misliš o tem kazalec, 04, samo poudarja tukaj. In oni so imenovani kazalci saj, kot smo dobili več v to, boste videli kaže na stvari. In en blok kaže na drugo blok bo veliko bolj smiselno. Torej, tukaj sta dva. In potem imamo nekaj izvod, ki je what-- 0x0C. In to se dogaja, dereference naši kazalcem. Torej, kaj je rekel je, OK, tukaj je naš kazalec. Vrednost, ki jo hrani je 0x04, In kaj to je rekel je, pojdite na ta naslov in mi povej, kaj je v njej. Tako da je dejansko kaj je to puščica počne. Lahko pomislite na to kot vaš zvezda. Torej OK, ko bomo zvezdo, to pomeni slediti. Pojdi na ta naslov. In to je v bistvu samo po Ta puščica na ta kos pomnilnika. In nam dal vedeti, kaj je v njem, kar je 5. Prav zato naša kopija je enaka 5. Ali to smiselno? Ali kdo me potrebujejo, da gredo skozi da še enkrat, ali bolj počasi? Hočeš, da grem skozi to še enkrat? OK. Bomo ponovno izvlečete. Ko smo začeli, smo se vsi strinjamo, imamo nekateri kos pomnilnika, ki je spremenljiva x da smo postavili enaka 5. Ne nadzorujemo kadar je v pomnilniku. Torej, na tem mestu je samo samovoljno določeni. Je dobro? OK. Potem smo inicializirati kazalec na int. To je, zakaj je dovoljeno, da kaže na x, ker imamo int tukaj. Imamo še en kos spomin, ker je ta kazalec je spremenljiva tako kot karkoli drugega. To je arbitrarno dodeljena nekaj prostora v pomnilniku. In kaj se shranjuje je naslov x. Znak pove pomeni naslov x. Torej, kaj je naslov x? OBČINSTVO: To je zero-- SPEAKER 1: 0x04. Torej then-- zadnja. Spet smo imeli nekaj copy-- samo še ena spremenljivka. Torej, kaj je dodeliti nekaj samovoljno mesto. In smo dereference našega kazalca. Zvezda pomeni iti naslov shranjen v moji kazalcem. Povej mi, kaj je tam. Torej naslov shranjen v našem kazalec je 0x04. Torej, gremo na ta naslov. To se kaže na ta naslov. Kaj je v tej spominski blok? To je pet. Torej, to je tisto, kar moramo določiti našo kopijo. Vsi dobro? Cool. Again-- slik. Torej sledenje vrednosti here-- sem bodo pustili, da mislita o tem. Lahko potegnemo še eno sliko. Ampak želim, da poskusite in razlog skozi to sami za minuto. Saj ni dal nam na primer naslov, Jaz sem le, da bo naredil 'znak x-- ki naj bi ga peljem domov. Znak pove pomeni naslov. Torej, v prvi, vsakogar iti s prvo vrstico. Nekateri x set je five-- nekaj naključno reža v pomnilniku. Int zvezda kazalec je enaka na naslov x, kajne? Int zvezda pointer ustvarja ta blok, poziva, da kazalec, in ga dodeli naslovu x. Jaz sem grozno na ampersands. Kaj zdaj delamo, je rečemo OK, dereference našega kazalca. Torej gremo OK, kaj je v našem kazalcem? To je znak pove x. Pojdi na znak pove x in ga prerazporedil. Torej, zdaj, znak pove x se bo 35. Torej v bistvu, ko ste Dereferenciranje, greš OK. Boš risba slike, kot je ta. Boš risba puščice več, kje je. Torej, pojdite na to mesto v pomnilniku in bodisi Daj mi, da je vrednost nazaj, ali jo spremeni. V tem primeru, ker smo na tem vrednost, smo ga dodelile 35. Medtem ko je v lanskem eno, če ste opazili, smo so dodeljevanje, kar je bilo tukaj nekaj drugega. Tako imajo to super mizo. Saj ni tako slabo. Vi delate na njem. Jaz grem, da ga potegnili na krov. Bomo, da ga izpolnite skupaj, OK? Torej zgrabi nekaj papirja, zgrabi partner, začnete delati. Jaz bom dobil večji kos krede. Saj se dogaja, da je veliko. OK. PROFESOR: OK. Začnimo s prvo vrstico. Bomo začeli tam, potem vama morda lahko delo prek nekaj več. OK. enak b krat c kaj je? To ni trik vprašanje, obljubim. ŠTUDENT: 4 krat 5. PROFESOR: 4 krat 5. 20. Torej, kaj je b? ŠTUDENT: 4. PROFESOR: In c? ŠTUDENT: 5. PROFESOR: 5. In potem je to le, da bo se znak pove a, b 'in' znak, znaka & c, kajne? Ni slabo. To je dovolj preprost. OK. Torej naslednjega. Enaka krat c, v primeru kdo je bil seznanjeni s tem. Vsakdo pozna s časi enaka? OK, vse to means-- je to okrajšava za enak krat c. Lahko to storite tudi z delitvijo, z dodatkom, z odštevanjem. To lahko storite enaka ali plus enaka c pomeni enako plus c, minus enako c bi bila enaka minus c. To je samo skladenjska sladkor. Torej, v tem primeru, je enako krat c bi nam kaj dal? Again, ni trik vprašanje. ŠTUDENT: 100. PROFESOR: 100. Ali še kaj spremeniti? No. Mogoče bom končno dobil boljši pri mojih ampersands. ŠTUDENT: OK, žal mi je, kako si dobil 100? PROFESOR: OK. Torej je enako krat c, tako da časi c. ŠTUDENT: Oh, ki ga uporabljate za previous-- PROFESOR: Da. Torej, to so naše zadnje vrednosti. Gre za tisto, kar bi morali biti uporabljajo kot gremo dol, v redu. Torej, b, je edina stvar, ki spreminja, kajne? Torej, kaj je izpolniti vse ostalo. B. Kaj je b bo? Biti ali ne biti. Torej, kaj to delaš? Kaj je zvezda letno delaš? ŠTUDENT: Koda za lokacijo na leto. ŠTUDENT: No, ne čisto. Torej je to sklicevanje d. ŠTUDENT: Torej b izroči vrednost letno. PROFESOR: Ja, tako je letno naslov, kajne? Torej, to je rekel, tja, kjer je shranjujejo in ji te vrednosti. Torej, kaj je b? ŠTUDENT: 100. PROFESOR: 100. Popolna. OK, tako da pc je, kaj se spreminja. Vse ostalo ostane enako. Kaj je pc bo? Enostavna naloga. Pc je enaka letno, in kaj je letno? ŠTUDENT: 'znak. PROFESOR: Popolna. Zdaj smo dobili zanimivo. OK, kaj je prekinil tole dol. Prvič, kaj je b-krat c, ker je to enostavno del tega enega, kajne? Krat B c is-- ŠTUDENT: 500. PROFESOR: Ja, tako Kaj je to ena izvaja, Če je zvezdicami pb, kaj se je spremenilo? ŠTUDENT: Kaj je v the-- Profesor: Kaj je v B? ŠTUDENT: Kaj je v prostoru da pb kaľe. PROFESOR: In pb je obrnjen to-- STUDENT: B. PROFESOR: samo B. Torej stvar menjava je b, kajne. Torej b časi c, 500. Torej, to je tisto, kar se spreminja zdaj. Cool. Lovely. Vi počnete super. Vse je v redu, lomljenje to eno navzdol. C se spreminja, kajne? Tako bomo lahko izpolnite vse ostalo. Poglejmo. OK. Vemo, da c se bo produkt dveh števil, kajne? Kaj dveh številk, čeprav? ŠTUDENT: in c? PROFESOR: Torej je Pravica za prvega. Tako da smo d navajanje P, kajne? P a ne kaže, da bomo vedeli, da ta se bo 100-krat, kaj? Times, kaj počne pc točko? Izpostavlja. Torej 100 krat 100 je 10.000. Ali je to smiselno? Cool. Home odsek, fantje, zadnja vrstica. OK. Kaj se je spremenilo tukaj? STUDENT: A. PROFESOR: A. Popoln, tako vse ostalo lahko ostane enaka. OK. In kaj je? Torej, to je čas, kaj? To je zvezda pb. Torej zvezda pb pomeni tukaj pb, pb točk, da b. ŠTUDENT: 500. PROFESOR: 500. Torej imamo 500-krat 100. To je 50.000. Uh! Poglej. ŠTUDENT: Zakaj imamo & c za last-- PROFESOR: Žal mi je. ŠTUDENT: Oh, OK. PROFESOR: Moja napaka. Veliko pisanja. Vsi dobro? Ni slabo, kajne? Samo traja malo medtem ko je za delo prek. Če ga razčleniti, razumeti, kaj vsak del sklicuje to-- kot z vsem, kar je to, yes-- ga razčleniti na malo Težave in nato rekombinacije, in lahko naredite nekaj super stvari. Tam so odgovori, vendar pa smo to. Pointer aritmetično. Ah. Moje roke so vsi kredasto. Tako da dodate ali odvzamete int prilagodi kazalec z velikostjo tipa kazalca. Spominjam se, kako vsak tip ima drugačno velikost? Tako kot dvojna ali dolgo časa je osem in int je štiri, ampak znak je ena. Torej, kaj želite storiti is-- eno stvar, da se spomnimo je samo, da koliko vaš pointer vrednost dejansko spreminja bo odvisna tip kazalca je. Vsakdo dobro s tem? Morem izbrisati? Mi smo dobri? Super. Torej, če imamo nekaj pointer that-- to se bo be-- sem dogaja, da je int kazalec. V njej so zbrani to. Če bi rekli, kazalec plus ena, kar se dogaja, da storijo se dogaja, da posodobite je po velikosti notr ker je to tip kazalca je. S C, je vse zelo stroga in urejeno. Int kazalec se bo posodobitev, ki jih Količina prostora int bi potrebovali. Int je štiri bajte. Torej, kaj bi to postala? Ste pravkar dodali štiri na to. Sedaj bi vaš kazalec be-- OK. Torej, če je bil znak in smo naredili kazalec plus ena, kaj bi to bilo zdaj? Če started-- pretvarja nahajamo started-- zdaj je 0x08. Poglejmo zdaj pravijo, da je to char kazalec, in smo jo dodali. Kaj bi se spremenilo, da? Koliko bajtov je char? OBČINSTVO: One. SPEAKER 1: One. OBČINSTVO: Torej 0x09. SPEAKER 1: Torej bi bilo devet. Torej samo nekaj, da se spomnimo. Samo, ko ste dodali eno, to ni dodajanjem enega razen če je to znak. To je dodal, koliko bajti vrsto, da gre, ki je, zakaj smo ta enačba tukaj. Torej, to je int krat velikost tipa kazalca. Torej imamo primer tukaj. y je bila dodeljena ta vrednost, 0x4, ko sva y plus enaka ena. Kaj je v tem, kaj je vx, ne spremeni. Kaj se je spremenilo, kaj je v y. Naslov shranjeni v y spremenil štiri ker obstajajo štiri bajte v int in to je int kazalec. Vse je v redu. Torej, zdaj imamo še eno vajo. Torej, vprašanje je, kaj bo natisnil. Vse ideje? OBČINSTVO: število znaki v srečno mačko? SPEAKER 1: Točno tako. Tako radi s svojo vrvico. Ali vsakdo dobil? Ali želimo, da sprehod skozi to? Ja, OK. Torej, kaj imamo here-- I kot je ta toliko bolj. Nimam za [Neslišno] smešno. Torej imamo niz tukaj, srečen mačka. Lovely. Imamo nekaj števec, ki smo sledenja. Torej imamo nekaj char * kazalec da samo je enak Str. Kaj to počne je, da je dodeljevanje nekaj kazalec na začetku svojega niza. Ker sem prepričan, saj ji je bila omenjena v predavanju, smo dal fantje to podatkovni tip se imenuje niz. Ampak res nizi so le Niz of-- kot char *. To je kazalec na kup znakov ki ležita v pomnilniku. Torej je to samo določa enaka katerikoli niz je opredeljena kjer Njen prvi znak je. Torej, to je le nekaj nastavitev točke enaka začetka niza. Vsi dobro tam? Cool. Torej, to je Dereferenciranje našo kazalec. Tako da se dejansko dogaja, da nam nekaj vrednosti tukaj, v naši niz, ki smo govoriš. In mi praviš, dokler to ni null terminator. Tako nadaljuj, dokler ne prideš na koncu niza. Posodobite kazalec po enega. Torej r, da bo dejansko posodobi z enim vsakič, ker je to znak, char *. Tako se dogaja, da gredo skozi. To se dogaja, da se posodobi. Torej prvič to poteka, to se dogaja, da je tukaj na uro. To se dogaja, da se posodobi. To bo. To bo p, y, in tako naprej in tako naprej. Bomo posodobiti števec. Ko doseže konec je, Samo natisne, kako daleč je to dobila. Da. OBČINSTVO: Torej Šteje prostor kot ena, kajne? OK. SPEAKER 1: Misliš. Je to question-- OBČINSTVO: [neslišno]. SPEAKER 1: Brez skrbi. To sem naredil. Vse je v redu, tako da ena stvar, ki sem razumeti je, da s paleto, lahko pa tudi obravnava kot pointer, ker nizi so le stalno lise pomnilnika. Tako da lahko obravnavajo na enak način. Jih lahko manipulirajo s kazalci, preveč. Torej, namesto da bi se v tem Primer, ki je analogen stvar bo matrika 0 enaka 1. Toda na enak način, niz se določi z začetkom kadar njen prvi znak je, matrika opredeljujejo če je njen prvi element je. Saj vemo, da smo zagotovljeno, da ti se bodo stalno bloki pomnilnika. To je tisto, kar nam omogoča, da to storijo. Vemo, da smo stalno bloki pomnilnika. Torej, v tem primeru, ki ga Dereferenciranje Samo matrika, ki nam pove, OK, pojdite na začetek Vaše matrika, ki je tukaj. Torej, lahko nastavite, da enaka ena. In v tem primeru, ne glede na vaš niz tip je, ko ga posodobiti z enim, to je tako kot posodabljanje ga do naslednjega indeksa. To lahko storite, da zaradi tebe vedo, kaj je v vaši array. Zato ve, koliko posodobite kazalec, ki ga, kaj naslov, da ga je tako posodobiti da si ob naslednjem režo. Torej je to le drugačen način pisanje matrika 0 je enaka 1, Niz 1 enaka 2, niz Nosilec 2 je enak 3. To je samo še en način, da razmišljajo o tem. Ker so stalno bloki v spominu, lahko na njih sklicuje, bodisi ga polja notation-- ki sem ga osebno easier-- najti, vendar morda morate manipulirati strogo pomnilniških naslovov. In to je način, kako bi to naredil. Nekako bolj všeč cool stvar, ki jo lahko naredite versus morda ni nekaj, ki ste ga dejansko dogaja izvajati. Uporabljam ga v 61. Vidva ne potrebujejo preveč skrbi. Ampak, če vas zanima, bo 61 naslednje leto. Mi smo na fante zadnjem odseku. Vem, da je dolgo. Dynamic Memory Allocation-- tako da vemo, da je eden stvari, ko smo se pogovarjali med naš prvi oddelek skupaj, smo iskali zamenjave funkcija, kjer je bilo izven področja naše glavno funkcijo. In smo bili mimo teh vrednot da so bili dejansko kopije. In ko swap končan izvršitve, je pravkar zapustil kup. Ne pozabite, da imamo kup okvir za zamenjavo. Zapusti, in tistimi, Vrednosti pusti z njim. In so šli. Mi ne bi mogel storiti ničesar z njimi in smo bili žalostni ker ne moremo zamenjati naše vrednote. Ampak s C, kot sem že omenil, se vam imajo veliko moč v spomin. Torej, kaj lahko naredite, je, da lahko razporediti stvari na kupu tukaj da bodo tam ostali, dokler povej jim kako drugače. Oni so kot dobri otroci. Ostanejo tam. Ne zapustijo. Ti bom ostal tam, dokler niste všeč, OK, lahko greš proč. Ker so stvari na kupu, who-- oni kot poredne otroke. Ti bom samo pobegnil, če želite biti tam in potem oni so odšli. Jih ne morete dobiti nazaj. Torej kup is-- bomo govoriti funkcije malloc in free, ki Prepričan sem, da fantje slišali na predavanju. In to je v bistvu način da imajo zelo obstojna podatkov. Tako da lahko hrani podatke približno tako dolgo, kot želite. Mhm. OBČINSTVO: Lahko določite kup in kup? Ali jim je všeč prostore za vlaganje stvari? SPEAKER 1: Torej, oni so v bistvu just-- oni Tako smo se nanašajo samo na spomin. Torej je samo kup krajev, kjer spomin je dodeljen dinamično, ker sveženj se nanaša več zlagati okvirji da so bolj v središču Funkcije, ki so dejansko teče. Saj ni res imeti nadzor. Velika razlika, imate nadzor čez kup, če želite. Imate manj nadzora nad dimnika. Sveženj odvisna funkcije, ki se izvajajo, in red, v katerem so teči in kako se stvari vrne. Ker se z kup, kot bomo videli, lahko rečem, OK, hočem to vrednost, da bo okoli dokler ti ne rečem drugače. Nimate dovoljenja, da se znebite tega. Ne smeš ga prepisal. Boš, da ostane okoli tako dolgo, kot sem vam povedal. Dobiš, da je šef v kup, ker je stack-- Mogoče, če kot finagle svojo pot ste lahko šef. Vendar ne povsem. In to je res samo spomin. To je samo različne načine sklicevanja na spomin. Cool. Torej, s tem, kako nadzor vaš spomin. To je s funkcije malloc, ki boste dobili za uporabo. Torej, to je samo kratek za dodeljevanje pomnilnika. To je vse kar je. Obstaja kup drugih kul Funkcije, ki imajo Aloc na koncu, in stojijo za različne stvari. Torej, ko boste potrebovali za shranjevanje, ki potrebuje da preživeti svojo trenutno funkcijo tako da ko vaš trenutni Funkcija zbeži, še vedno imate podatke, ki vas dobil od njega, ki ga želite uporabiti funkcije malloc. To bo inicializacijo na kup. In kot sem rekel in vodi rekoč, da boste tam pusti dokler ga ne povem drugače, ki je pomembna stvar tukaj. Torej, ena stvar, da obvestilo, in to je običajno zelo pomembno, je, da ta sizeof je zelo koristno uporabljati ker glede na vrsto stroja ste tekmovanje v teku, da imajo lahko različne količine pomnilnika, ki je potreben. Tako da boste vedno želeli uporabiti velikost, tako da nisi stroj odvisni, tako da bo vaša koda deluje na kateri koli napravi. In to je samo del pisanje dobre kode. Če deluje na enem stroju, vendar ne katerikoli od drugih, kako koristno je vaš program? Tako da boste vedno želeli prepričajte in uporabo sizeof. OBČINSTVO: Torej je to všeč velikost 10 cm [neslišno]? SPEAKER 1: To je velikost 10 ints. ja. Tako da bo velikost ints vrniti koliko naj nekdo int sprejeti. Ali velikosti char, kako stane en char vzemi. In potem koliko blokov od tega želiš? Torej v tem primeru želimo nekaj da bomo lahko shranite do 10 ints. In bo to delo ne glede na stroja, ki je kul. Torej, koliko bajtov bo ki dejansko daš? Quick math. OBČINSTVO: 40. SPEAKER 1: 40. Točno tako. Torej, še ena velika stvar. Kazalec oziroma funkcije malloc lahko vrne null. Torej še enkrat, vedno preverite, vidim, če se je vrnila null Preden poskusite in storiti ničesar s tem. Če poskusite in sledenja ta kazalec zdaj, to je le, da bo segfault ker si šel in skušal na dotik null, ko ne bi bilo treba. Zato vedno preverite null. Še enkrat, vse, kar lahko storite. Morda se vrne null. To bomo vrnili null, če ste bodisi zmanjkalo prostora, ali iz katerega koli razloga Potekal je v neko spominsko bug. Včasih se samo vrne null. Tako da boste morali preveriti za to. To je vse to slide je rekel. In potem, kaj imamo tukaj je poziv k osvoboditi. Torej, na enak način, če vas Datoteko odprete tako morate zapreti datoteko, če vas funkcije malloc pomnilnika, boste morate sprostiti ta pomnilnik. In bodo fantje dobili narediti res kul stvari. In tam je program, ki ga lahko vodijo do vidim, če ste kdaj pušča spomin. Vendar ne želite, da pušča spomin. To je zelo slabo. Samo nered stvari. To je slabo, da ne samo kot programiranje pametno za učinkovitost oblikovanja. Ampak to je tudi samo vrste slabega za vaš računalnik. Torej samo proste stvari ko jih funkcije malloc. Vi vidite simetrije tukaj. Super preprosta. Samo svobodni in nato ne glede na vaš kazalec, ne glede na ime vaš kazalec, in to bo poskrbel, da sprostitev za vas. Cool. Potem imamo to. Tako da smo le, da bo sprehod skozi ta program. In potem so naredili vi. Tako [neslišno] samo glavno. Torej imamo nekaj int * kazalec. Torej imamo kazalec da se dogaja, da imajo ints. In koliko Ints se dogaja, da imajo? Samo eno. Velikost notr. Preveriti moramo, da vidim, če kazalec je nična, ker je je, da smo želeli povedati, ne naredi ničesar. To je slabo. Tako smo natisniti nekaj napak izven pomnilnik, najbolj pogosto vrne 1, kot fantje so navajeni. In potem imamo tu, dereference naši kazalcem. Torej to pomeni, da bomo za shranjevanje nekaj, na lokaciji, ki nam. Int * kazalec ali funkcije malloc vrne naslov, kjer je razveljavilo to pomnilnik za vas. Torej, to je v bistvu vam daje like-- če vas pomislite kup hiš v soseski da si želite, da bi vaše pohištvo v, funkcije malloc je kot OK, dobiš iti v hišo tri. In to ti je daje naslov hiši tri. Tako da je to sedaj, to Kazalec trgovin naslov, shrani naslov vaše hiše. * PTR pomeni, OK, sem v moji hiši. Cool. Moram nekaj celo število. Torej ste prosi za nekoga da vam pohištvo zdaj. Tako da boste dobili nekaj int. In to ga postavlja v vašem kazalec kjer se kaže, da. In potem se je le odtisi ven, ki ste ga vnesli, kjerkoli. In spet, reference. Torej, to je tako, kot si šel v to obravnavati in ste videli, kaj je bilo tam. Cool? In potem seveda moramo osvoboditi našo kazalec. Ne pozabite, da brez svoje kazalec. Ne pozabite, da preverite null. Ne pozabite, da brez svoje kazalec. Imate dve stvari, ki jih spomnite iz To, ali pa, da si je treba zapomniti. Da. OBČINSTVO: [neslišno] stuff kot je ta, char * s. Kako to, da ne bomo nikoli osvoboditi teh? SPEAKER 1: Hm? OBČINSTVO: Ali so tisti, kot strune? Rekli ste, da so nizi tako kot char * s, kajne? Torej, zakaj ne bomo sprostili strune? SPEAKER 1: Vi samo brezplačno, če ste mallocing. OBČINSTVO: Oh, če ste mallocing. SPEAKER 1: Torej funkcije malloc in prosti sta dve stvari, da morate vedno skupaj. f odprta, f blizu, dve stvari bi morali imeti skupaj. V obeh teh primerih preverite null. Da. OBČINSTVO: Torej prost je le kar nekaj drugega da se tam shranijo po Ta program je to uporablja? SPEAKER 1: To je samo rekel, OK, sem naredil s tem. Vam ni treba, da ostane okoli. V nasprotnem primeru bo vaš računalnik Tako kot poskusiti in se tam pusti. In potem si can't-- teče v vprašanjih spominske kasneje. Vedno ga želite sprostiti, ker pripoveduje računalnik, OK, sem storiti s to mesto pomnilnika. Ga imate lahko nazaj za mene za kasnejšo uporabo. Cool? Da. OBČINSTVO: Torej smo uporabili% d pravkar kajti dvakrat je vrnil, ali zakaj is-- [neslišno]. OBČINSTVO: Lahko uporabite% i? SPEAKER 1: Lahko uporabite% i. Morebitne last minute vprašanja? Pojdi naprej. OBČINSTVO: Pravkar sem na hitro vprašanje. Torej spremenljivka ptr, that's-- podobno, int * ptr = funkcije malloc, ki je samo rekel, da je kaže na mesto v memory-- SPEAKER 1: Želite [neslišno]? OBČINSTVO: --that je Velikost of-- no, to je OK. Ampak to samo kaže na mesto v pomnilnika, ki je tako kot štiri bajte. SPEAKER 1: Right. Torej funkcije malloc velikosti int pravi, OK, bom šel nogama, našli štiri bajte pomnilnika za vas. Ko ugotovi, da štiri bajtov pomnilnika je, vam omogoča varnostno naslov kje se začne, in to je tisto, shranjeni V kazalca ali PTR. Dobro. Vidva videti manj zmeden, kot najbolj ljudje, ko govorijo o kazalcem, tako se počutim precej dobro zdaj. Vse je v redu. Kot vedno, bi vidva imela vse gotten svoje pset2 ocene, ki jih je sedaj. Vem, da je bilo nekaj deformiranega stvari, kjer piše, formule ni veljaven ali kaj podobnega. Če ste dobili, da je vse tvoje stopnje so veljavne na moji strani. Tako da sem lahko vam poslali screenshots vaših razredih. Samo povej mi, kot tudi, če ste vedeli, manjkajo razrede ali kaj ne zdi smiselna. Pridi k meni. Bil sem zelo ponosen na vas fantje že, da ne odnehaj. In imajo dober preostanek tedna. Prepričan sem, da bomo videli nekaj od vas pri uradnih ur.