[TEMA MUSIC] SPEAKER 1: Bok, svima. Dobro došli natrag u odjeljak. Lijep dan out-- što je razlog zašto sam Sigurno je da postoje samo četiri od vas ovdje a ne naš uobičajeni paket. Ja sam bio bolestan ovaj vikend. Pa nemam eksplozija za vas dečki. I ja mogu početi kašljati Strašno tijekom ove. Dakle, samo nose sa mnom. Ja ću stvarno probati i dobiti kroz ovaj prvi, ipak, prije nego što imam kašlja napad. Ali samo biti lako na mene a Malo bit-- to je sve što tražim. Dakle, naš plan za today-- samo reminder-- vaš kviz je sljedeći tjedan. Rekao sam ti ovo zadnji tjedan pa njega Ne bih vas uhvatiti nespremnog. Zato sam vas podsjetio opet. Idući tjedan je vaš kviz. U tom smislu, sljedeći tjedan-a Dio će biti puno više of-- Pokušat ću i raditi u nekom pregledu. Dakle, ako ti dečki mogli mi pomoći od strane mene slanjem stvari koje ste zadovoljni sa, da ste zabrinuti, Teme koje bi željeli za ja pokriti, to bi bilo sjajno. Dakle, ja mogu pokušati ih raditi u našem dijelu sljedećeg tjedna ili vam poslati dodatne materijale ili prep da ne bi mogli dobiti negdje drugdje. Da! Više ljudi dolaze! Mislio sam, jesam li to loše prošli tjedna, da nitko ne želi da se vrati? Bojim se. Dakle, ostala tri stvari da ćemo ići preko su preusmjeravanje, file I / O, a zatim upućuje i dinamička memorija. Siguran sam da ste svi super uzbuđeni pointers-- svačija omiljena tema, tako jednostavno razumjeti. Siguran sam da ste vi svi dobili to, zar ne? Pa krenimo redom, redirection-- ovo je zapravo samo način kontrolirati kako vam ulaz stvari u svom programu, Kako gledate stvari iz svog programa. Glavni načini da dečki su u interakciji s njim je samo kroz standardne out s print screen ovdje. No, postoje načini za pipe-- kao što vidimo ovdje je jedan od naših words-- vrste od cijevi da informacije ili da su podaci u datoteku iz datoteke. To je samo različite načine dobivanje stvari u svoj program i iz svog programa, umjesto samo ih ispisa na ovom zaslonu ili unosom stvari iz naredbenog retka. Dakle, prvi je malo veći od znak za umetanje. Tako output-- to samo ispisuje izlaz u datoteku umjesto zaslona. Dakle, ako ste imali nešto što tiskani "Pozdrav, svijet!" na zaslonu, ako ga stavi umjesto na output.text, da stvara ovu datoteku pod nazivom output.text. A kad ga otvorite, to će reći: "Pozdrav, svijet!" tamo. To može biti iznimno korisna ako imate tonu pogrešaka Zapravo, kao što smo vidjeli u ovom jednom. Ako to ne učinite dvije znak za umetanje, to će ispisali poruke o pogreškama. Dakle, ako ste ima problema s izrađuju, ima puno pogrešaka a vi ste uzimajući zapeli u pokušaju Za kretanje kroz u vašem naredbenog retka kroz sve njih, možete samo ih ispisati u datoteku, otvoriti tu datoteku, tako da se kretati kroz njih lakše. Ja zapravo koristi da Puno kada je sam za ispravljanje pogrešaka moji 181 psets za strojno učenje. Dakle, to može biti super korisna kasnije. Također je korisno ako imate program da možda stvara knjižnicu ili stvaraju neki set žice, a vi trebaju biti u stanju vidjeti da to ih stvaraju ispravno. To je način za to. Dakle, ako ste ih ispisati u datoteku, te Možete ih lakše ispitati, zar ne? Versus pokušava pomicanje putem naredbenog retka. A onda je jedna stvar imati na umu je da sa samo veći nego znak za umetanje, ako pisanje u datoteku koja je već exists-- pa kao da smo trčali ovo prvi vrijeme, stavi smo output.text, i onda smo imali drugu programa da je tiskana ovo kao dva programa i nije veći nego output.text, to će prebrisati that-- tako prepisati ono što je ikada u da je datoteka za početak. Dakle, ako želite dodati u datoteku, kao što smo vidjeli ovdje, ti samo napraviti dvije veće od znakova. I to će dodati na njega. Neće ga prepisati. Dakle, ako vam je potrebna za pokretanje višestruki Programi i vrsta zadržati Staza od onoga što svi od njih su povratka na vas u datoteku, to je način da to učinite. Ako ne briga što je u vašoj datoteci i to je dopušteno da se prepisati, možete samo koristiti jedan veći od. Je li to smisla svima? PUBLIKA: Kao točka slash Pozdrav veći od izlaza dot teksta, kao što su dva puta, to samo ću pokazati samo na izlazu dot Tekst drugi time-- SPEAKER 1: Točno. Dakle, to bi zapravo samo potpunosti prepisati ono što je bilo u početku. Ako ova datoteka ovdje output.text već postoji, u osnovi ono što vi zovete da je opet s jednim Greater ne možete samo misliti na njega kao kao što ga zamijeniti datoteku. Kao i kada ste spremanju riječ dokumenata i vi spasiti što, i zadržati isti naziv, a je potpuno it-- prebrisati To je ista vrsta stvar. Bilo tko imati bilo kakvih pitanja o Samo izlaza u datoteku? Strašan. Dakle, očito, ako preokrenuti strelica smjera, to može učiniti ulaz. Pa kad ti dečki imali kao Cezar ili Visioneer a vi morali ulazni nešto, ste imali naredbe argument koji zapravo ga unijeti. Ovo je još jedan način za to. Dakle, umjesto da čeka za naredbenog retka, kao kad si pitao za svoje Poruka u Cezara ili Visioneer, ako ste imali tekstualnu datoteku koji je imao svoju poruku, možete samo upišite ga u to. Dakle, ako bi to bilo kao točku slash Cezara 3 manje od strelica unos teksta, koji je vaša poruka, da će pokrenuti sasvim u redu. Kada je vaš program zapravo Caesar pitao za ulaz od korisnika, to bi ga već imaju, jer ste upisali u ovu datoteku. To je samo još jedan način. Samo naličje output-- samo ulaz za vaše podatke. A onda posljednja je cijev. Dakle, ovaj je prilično cool. Zato što vam omogućuje da uzeti izlaz jednog Program i staviti ga kao ulaz za drugi program. Ne znam je li itko od vas igrao s odgonetnuti da CS50 može imati ti dao, ali to bi omogućuju vam da se neki uzorak datoteku, upišite ga u svoj enkripcije, a onda od tamo upisati da u svoj dešifriranja kako bi bili sigurni ispalo isto. Dakle, to je vrsta kao što su tri puta petlje. Idi za to. PUBLIKA: Ako program ima više ulaza, postoji način da ga koji ulazni reći koristiti tekstualnu datoteku ili izlaz za? SPEAKER 1: Ona ima više ulaza. Bez obzira podnijeti svoj input-- kada je molba za ulaz taj prvi put, to je ide pretpostaviti, mislim, to je ide cijev u cijeloj datoteci. Dakle, ako imate više ulaza, ti si će se cjevovod u više datoteka. Dakle, ako ste tražili poruke tri puta u svom kodu, vi ćete biti stavljajući u tri različite datoteke. I to dobiva lud. A da ne bi trebali imati brinuti o tome sada. No, to je ideja. Tako da, cijevi je samo izlaz iz jednog Program koristi ulaz u drugi. Svatko dobro tamo? Cool. U redu. Vjerojatno nećete imati učiniti previše s njom. Ali, trebate razumjeti načina na koje možete koristiti. A tu su i neki slučajevi koji možda želite ga koristiti. Tako sam podnijeti / O- Znam što si saying-- smo navikli čitati iz i pisanje našem ekrana nalazi, što je standard u i standard van. I to je ono što ste vi bili radi od početka klase ovdje. Ali, također možete čitati i pisati datoteke, što je sve file I / O- tako datoteku ulaz, Izlaz je sve to stoji. Dakle, to zapravo znači da je možete pohraniti svoje podatke. Kada samo ga ispisati na zaslon, to je u osnovi nema, zar ne? Čim bi "Pozdrav svijet "i trčanje" Pozdrav svijetu " ispisuje "Hello World" na zaslonu. Ali stvarno ne mogu učiniti ništa s njim od tamo. Ako pohraniti u tekstu datoteke, a zatim je iznenada imate ove podatke koje ste dopušteno manipulirati ili ga staviti u datoteku, ili ga staviti u programu kasnije. Jedan od razloga zašto radimo to samo kao način za pohranu podataka za kasniju uporabu. Imam par koraka ovdje samo hodanje kroz standardni I / O. U jednom koraku možete potrebno je stvoriti referencu do datoteke sa svima kape DATOTEKA zvijezda datoteku. Tako da stvara pokazivač na datoteku. Pa onda ga želite otvoriti. A ti kažem, doslovno, Samo datoteku jednak fopen. A to će se vratiti pokazivač na datoteku koju ste upravo otvorili. Vidio sam par vas dečki na radnog vremena. Ali jedna od stvari je remember-- upućuje može biti neka adresa ili nula, zar ne? Ako smo ikada imali slučaj gdje nešto može vratiti null, Što moramo učiniti prije nego što smo ikada koristiti? Moramo provjeriti jesu li to je null ili ne, zar ne? Budući da su neki od vas možda imali problem gdje god objekt bio vratio se u bijeg bio ništavan. Pokušali ste izvoditi neke funkcije na njemu. A vaše računalo stranica zamjeriti. Pravo? Kladim se par vas možda su imali taj problem. Tako je s fopen, fopen će ili povratak pokazivač na datoteku, ili ako nešto pođe po zlu, to će se vratiti null. Dakle, uvijek je potrebno provjeriti da se nije vratio null Prije nego što pokušate napraviti bilo što drugo. To je kao standardni paradigme da ćeš morati ovdje. Ako postoji ikada šansa da nešto može vratiti null, provjerite je li ga ne prije nego što nastavite. Inače, idete dobiti lijep stranice pogreške. A nitko ne voli nositi s tim. Dakle, kao što smo vidjeli ovdje, prvi argument je samo put do datoteke. Ako taj datoteka ne postoji, to će stvoriti tu datoteku. I to samo ide da bude prazna. A onda drugi argument je mod koji želite. Ne želimo čitati iz te datoteke? Želite li pisati od njega? Želite li dodati? Pa zapravo ono što sam upravo said-- Ako datoteka ne postoji a vi pokušavate čitati iz da, to će baciti na pogrešku. Ako datoteka name-- sviđa, ako file.text još ne postoji a želite pisati na njega, to će stvoriti prazan file file.text za vas. A ako želite dodati, što bi trebalo učiniti istu stvar. Znači li to smisla? Ako pokušavate čitati iz datoteka koja još ne postoji, to će baciti na pogrešku. Inače, to će stvoriti datoteku za vas učiniti ono što želite s njim. Cool. Sada možemo pročitati iz datoteke. A to je samo vrsta ide kroz različite funkcije da imamo za file I / O. To će biti potrebno u ovotjednom pset, ako sam dobro sjećam. Da, to će biti apsolutno Potrebno je u ovotjednom pset. Dakle fgetc vraća sljedeći znak. fgets samo vraća liniju teksta. To će vratiti sve do nova linija, a to će se slomiti. Tako fread čita određeni broj bitova i stavlja ih u niz, koji je je nešto što bi moglo želite učiniti s ponovnim size-- moglo biti korisno. Koliko ljudi su čitali pset spec, usput? U redu. [Nečujan] SPEAKER 1: U redu. U redu. Definitivno pročitati that-- je zabavno pset. Moći ćete oporaviti izbrisane memorije card-- jako uzbudljivo kada to radi. No, svakako, početi čitati to. Dođite razgovarati sa mnom ako vas Za sva pitanja o njemu. U redu, kako sam rekao, fread čita određeni broj bajtova. To je neki proizvoljni broj da ćeš postaviti. A onda fseek samo poteze u određenom položaju. Dakle, možda ne briga o sljedećih 10 bajtova. Vi samo želite preskočiti. Vi ne brinu o onima. Želite li pročitati s početkom u 11 bajta. fseek vam omogućuje da učinite to. Dakle, to vam omogućuje da se selektivno o onome što čitate. Zbog fgetc, fgets i fread pročitano iz određenog mjesta u datoteci. Način da misle o tome je li to je naš datoteka, kada ste ga otvorili, imate tu poziciju u datoteci koja počinje na početku. Kad god nazvati fgetc, fgetf ili fread, to će početi od ova pozicija čuvar. Recimo da samo želite čitati ovaj komad memorije ovamo. Ne možete samo nazvati. Morate tražiti ovamo a onda pročitati od tamo ili pročitali, dobiva ili getc, ovisno o tome što želite. Dakle, traže samo vam omogućuje da preskočiti dijelove memorije. I to je jedini način možete preskočiti stvari bez čitanja ih u svoj tampon. Je li to smisla svima? Očito, postoji Puno paralelno here-- naš izlaz ili ulaz preusmjeravanje, ste čitati i pisati. Dakle fputc samo piše znakova u datoteci. fputs piše liniju. Fprintf ispisuje formatirani izlaz. Dakle, ako imate kartice, ili prostora, ili sitnica. A onda fwrite piše neke Niz bajtova u datoteci. Dakle, to je isti način fwrite i fread su analogne opposites-- fgets, fputs i zatim fputc i fgetc-- puno od ludi, brze stvari. Samo vrsta zadržati ovu handy-- imat ćete različite puta gdje možda jednostavno želite jedan znak na vrijeme. Možda želite cijelu liniju. Uz vašu rječniku pset-- koji je u dva psets, Vjerujem, dajemo vam cjelinu rječnik u tekstualnom obliku koji je svaku riječ odvojene linije. Dakle, ako ste željeli pročitati jednom riječju u isto vrijeme, što možda koristite, ako ste čitajući i svi smo razdvojeni na novim linijama, a vi samo želite jednu riječ u isto vrijeme? Publika: Fgets SPEAKER 1: Točno. Fgets-- jer to vraća sve što je na jednoj liniji. A ako svaka riječ je njezina vlastita linija, možemo koristiti fgets. Cool. Je li to smisla, svima? Cool? Da, mi ćemo doći do zabavni dio s pokazivačima Vrlo brzo, u kojem vas dobili učiniti neke matematike. I to će biti sjajno. Prošle step-- zatvorite datoteku. Sa tako mnogo stvari ovdje, jedan od naših paradigmi je, ako se može vratiti null, provjerite null. Ako otvorite nešto, bilo bi bolje da ga zatvoriti. U redu, tako da ne završiš dok si učinjeno, osim ako ste ga zatvorili. Nešto kao da je nije gotova dok se mast dama pjeva. To je poput zatvaranja datoteku. Kao što kaže ovdje, samo ponavljam, uvijek otvorite datoteku prije nego što ste čitanje ili pisanje na njega. I uvijek ga zatvoriti, ako ste ga otvorili. Sve u redu? Cool. Dakle, ovdje je primjer. Dakle tiny-- Ne znam je li vama dečki mogu vidjeti da je vrlo dobro. Kad bismo mogli povećati svjetlina nekako. Dopustite mi da zapravo to učiniti ako mogu. U redu, vi stvarno ne mogu vidim da na sve, može li? U redu, idemo to učiniti, onda. [Nečujan] Pretpostavljam da je to puno bolje vidjeti. Može li itko vidi gdje moje miš otišao je pitanje? Ah, tu je is-- što se bori! U redu. U osnovi, vi bi trebali imati kakav ideje o tome što se to radi. To nije savršena. Ali ja radije to objasniti nego što troše više vremena pokušavajući ga oblikovati ispravno. Uglavnom, kao što vidite ovdje, počnemo s otvaranja datoteke. I mi imamo neke datoteka baze podataka da smo otvor koji kaže da je našim studentima. A mi ćemo pisati na njega. Pa naravno, vrati null. Dakle, moramo provjeriti null. A onda, ako to nije null, možemo proći. I kao što vidite, mi smo petlje ovuda. Tu su studenti. Studenti se mljeveno meso definiran kao tri. A što mi radimo je da smo ispis na datoteku, zar ne? Dakle, ono što smo ispis na naše datoteke? PUBLIKA: rezultat da su u nizu? SPEAKER 1: Da. Na rezultate koji su u array-- točno. Dakle, mi otvaramo ovu datoteka baze podataka, koji Pretpostavljam da je neka vrsta od razreda baze podataka. A mi smo samo ispis ocjene svakog studenta na tu datoteku. Cool? Dobro. Strašan. U redu. Vratimo to-- PUBLIKA: Imam kratko pitanje. Je printf ne za petlju? To je samo u ako petlji? SPEAKER 1: Ne, to je u for petlji. Ja ne mogu vidjeti moj miš vrlo dobro ovdje. Tako sam se bori da format koji ispravno. Taj nosač treba otišao. To bi trebao biti ovdje. To je ono što je u vašem for petlje. Tu. Sada je dosta. Dakle, to je kako bi trebalo, osim be-- za taj posljednji nosač da sam odbio. U redu. Je li to smisla svima? U redu. Idemo krenuti dalje na sljedeću stvar then-- koji je, zapravo, idete trebati vidjeti kod. Dakle Samo ću se kopirati da je tijekom upravo sada. U redu. Tako ću vam pokazati dečki ovaj kod. I želim vam da isprobate i lik kako ono što je trebao učiniti. Dakle, s obzirom that-- uzeti minutu ili tako. Pokušajte shvatiti što se ovdje događa. Bilo koji ideja? Znamo da imamo najmanje dva argumenti u naredbenog retka, zar ne? Pretpostavljam da je jedan od kojih će biti da [nečujan] našeg programa je a onda nešto drugo. Jer ako [nečujan] manje nego dva, mi vikati na njih. Pravo? I iz uporabe, izgleda to će biti neka vrsta datoteke. Svi se slažemo da to? Pa sad, što je petlje radi? Što se to događa kroz? PUBLIKA: Sve datoteke. SPEAKER 1: Točno. To se događa kroz sve datoteke koje smo ulaz tamo. Dakle, za svaku datoteku, to je otvaraju neki string tamo. To otvara tu datoteku. Pravo? I to čita iz njega. Naravno, provjeravajući je li to nula. A onda to znači tiskanje. Ako je nula, to je samo nam govori da to nije varalica koji postoji. Jer ne zaboravite, sa pročitajte naš datoteka mora postojati. Pravo? Uz pisati i dodati, možete dobiti daleko s njom. No, s čitanje, naša file mora postojati. A onda, ako on ne postoji, Što radimo ovdje? Ajmo započeti ovdje. Što je to do-- ovo prvi znak. Što to učiniti? On dobiva jedan znak, zar ne? Pa što se to radi? Postaje prvi znak. Svatko zna EOF? PUBLIKA: Kraj datoteke? SPEAKER 1: Kraj file-- točno. Dakle, to će proći Cijeli datoteka, zar ne? A onda će se ažurirati uzimajući sve naknadne karakter. Pravo? A što se to radi? PUBLIKA: Stavljanje da in-- SPEAKER 1: Putchar ispisuje na svoj screensaver. [Nečujan] znak. I onda kad je [nečujan] to će zatvoriti datoteku. PUBLIKA: Zar ne trebate [? drugo? ?] SPEAKER 1: Ne nužno. Mislim, to je vrsta implicirano u tome. Zbog toga se vraća, iako, dokle jer to ne uhvatiti toga, ti si u redu. Mislim da je vjerojatno dobro vježbati za napraviti ostalo. Ali ostalo nije uvijek potrebno posebno ako imate nešto poput povratka, koji je znači da u ovom slučaju, ako se uhvati je, vaš program će završiti i to nikada neću doći do toga. To je više za slučaj gdje ste ne nužno povratka nešto. Jer ako to nije bilo vraćaju ništa, to bi značilo da, ako je to istina, Ostatak to još uvijek će se kandidirati. I u tom slučaju, bi htio lažna. Ako se to vraća, i Vaš program je kraj, drugo nije potrebno sve vrijeme, ovisno o kontekstu. Jakov, jeste li pitanje? PUBLIKA: Da. Dakle, ne fgetc dobiti sljedeći znak? Kako povećati lik? SPEAKER 1: Da. Dakle fgetc dobiva sljedeći znak. Možete misliti o tome kao C ++ u smislu. PUBLIKA: Pa što je EOF? SPEAKER 1: EOF je kraj datoteke. To je samo čuvar koji vam omogućuje da znate da ste na kraju datoteke. Dakle, to će se ispisati na svom standardu van. A onda će se zatvoriti datoteka kada se to radi. A onda idemo slijedeću sliku, zar ne? Dakle sveukupno, što ovaj program učiniti? [Nečujan] SPEAKER 1: Da. To samo ispisuje sve tamo. Dakle, ako vi ikad koristili CAT a zatim naziv nekog file-- Ne znam je li itko od vas ima ikada učinio da na svom terminalu. Ali, ako ste ikada koristili Naredba CAT-- C--T-- a zatim god datoteka imate there-- ga ga ispisuje na svoj terminal, koji je može biti super zgodan za neke stvari. I to puno koristiti. Je li to smisla svima? Cool? U redu tako da vaš zadatak now-- bilo sami ili s ljudima oko you-- je samo napisati jednostavan program koji će samo pisati "Zdravo svijete!" na datoteku. [Nečujan] [Nečujan] SPEAKER 1: Bio sam poput učinio Ja to loše prošli tjedan? Ja ne mislim da je to loše. Drago mi je da ste svi ovdje. To stvarno me čini sretnim. Ja sam djevojka od jednostavnih užitaka. I baš kao i kad je moj poglavlje pohađa. Pa ja sam samo dobivanje to krene ti dečki, tako da možemo kodirati zajedno. Ne volim nikoga stavljajući na licu mjesta, osim ako želite biti. PUBLIKA: Za kviza, učinite moramo napisati program? SPEAKER 1: Vi svibanj biti zatraženo da pisati jednostavne programe rukom. Yup. PUBLIKA: kviz je sljedeći tjedan, zar ne? SPEAKER 1: kviz je sljedeće srijede. To znači da je lijep [? CSE?] ocjenjivanja stranku nakon što znači da ćete dobiti svoje rezultate natrag da night-- u koje vrijeme? Tko zna? No, to će se te noći. U redu. Kako želimo početi ovo? Ja ću vam dati hint-- počinje s tim. PUBLIKA: Morate otvoriti datoteku. SPEAKER 1: Da. Dakle, ono što želiš nazvati? Da li samo želite nazvati "datoteka"? Učinimo to lako. Dakle fopen-- što je naš reproducirati ispitni će biti? Nazovite ga "Zdravo." A što je naš način rada? Što radimo na ovu sliku? PUBLIKA: Pročitajte. Pisanje. SPEAKER 1: Pišemo na njega. Lijepa. U redu, tako da imamo ovu datoteku. Ono što trebamo učiniti? PUBLIKA: Provjerite ako je null. SPEAKER 1: Provjerite je li to točno null--. To je ono što sam želio čuti. To bi trebalo biti automatsko, pogotovo prilično mnogo od ove točke. Ako počnete segfaulting, vjerojatno nije provjerite null negdje. Devet od deset puta, to je će biti vaša greška. Dakle, ako ste samo mogli doći u navika, uvijek provjerite je li to nula, Vaš život će biti lijepo i easy-- ili lakše. Dakle, provjerite da li je to nula. Dakle, ako to nije null, koja je ono prasak jednaka means-- ne null-- je valjana. Ono što želimo učiniti? Mi samo želimo ispisati tom dokumentu, zar ne? Pa što ćemo koristiti? PUBLIKA: Fprintf SPEAKER 1: Fprintf-- lijep. I fprintf traje dvije arguments-- gdje je to to se događa i što želimo ispisati. Dakle, što je prvi? Gdje se to događa? PUBLIKA: File. SPEAKER 1: Bit će to podnijeti. A ono što želimo tiskati? "Pozdrav, svijet!" U redu. Imamo jedan zadnji stvar-- još jedan veliki paradigma ovdje. PUBLIKA: Zatvori. SPEAKER 1: Zatvori. Tu idete. PUBLIKA: Je li ovo događa ako datoteka je null? SPEAKER 1: Ne, ovo je ako to nije null. PUBLIKA: Oh, ako je not-- redu. Za fopen a zatim dva argumenta koji idu unutra, Što prvi argument znači opet? SPEAKER 1: Argument je baš kao i ime datoteke da želite ići. Tako je nakon toga radi, što bi imaju neku datoteku pod nazivom "Hello" koji je imao "Hello, svijet" u njemu. To je sve. Samo ime. PUBLIKA: A budući da je pisanje, datoteka ne mora već postoje. Je li to ono što je rekao? SPEAKER 1: Točno. Točno. Ako je "Hello" kao datoteke još ne postoji, to je će stvoriti datoteku pod nazivom Pozdrav "i pisati na njemu za vas. PUBLIKA: Kada govorite program je napisao u datoteku, zašto pišete "file" umjesto naziv datoteke i fprintf-- SPEAKER 1: Budući da u ovom slučaju, imamo da je velika FILE-- sve u caps-- zvijezda, podnijeti. Tako da je pokazivač na datoteku da ste razgovarali o tome. To je način na koji samo smo se odnosi na njega. Dakle, u ovom slučaju, Možete misliti file-- AHA, možemo koristiti this-- datoteku ovdje odnosi se na otvaranju "Hello" i ostavljajući ga pisati. PUBLIKA: Možemo li staviti "Hello" umjesto [? samo?] f datoteku? SPEAKER 1: Ne, jer je "Hello" treba biti otvoren i dijeljenim resursima. File ovdje je kao pokazivač koji kaže u redu, mi ima tu file-- hello-- da gledamo. To je otvorena. I mi ćemo pisati na njega. Ako ste samo koristiti "Hello", koja je kapsulirana u to. Tako da će poludjeti. Mislim, mogli ste ga nazvali. Mogli su napraviti datoteku, star, "Hello", jednak. No, cijela stvar je da vas potreban pokazivač datoteke zvijezda u cilju biti u mogućnosti koristiti ove funkcije. PUBLIKA: Možete li napraviti datoteka, zvijezda, datoteke, "Hello" ili imate staviti podnijeti zvijezdu, datoteke u njoj? SPEAKER 1: Moglo bi ne datoteke, zvijezdu, "Hello". Možete promijeniti to god ime želite. To je potpuno proizvoljan što je to ime. Možete imenovati ga ništa. Ime ga leti špagete, ako ste htjeli. PUBLIKA: Što je "w" u navodnike za? SPEAKER 1: "w" je samo način rada. Tako smo pišete na ovu datoteku. Svi su dobro? Vedro? Da. PUBLIKA: Pa kad piše ovo podnijeti, gdje ćemo onda pronaći tu sliku? SPEAKER 1: To će biti u istom katalog da ste trenutno u. Ako ste u pset tri i li to, pokrenuti unutar pset tri mape će biti Na ovu sliku pod nazivom "Pozdrav." Cool? Svi su dobro? Osjećam se kao da ste sve uzimajući ga, što je super. U redu. Dakle, natrag na moje slide show-- Volim kada se stvari rade. U redu, pointers-- Jeste li vi uzbuđeni? Pokazivače su veliki. Oni su se malo omotati glavu oko. Ovo je moja druga godina nastavna upućuje. I mislim da na kraju sam ga dobio. Dakle, ako se bore, to je u redu. Kao što sam rekao prije, crtanje slike pomaže puno sa stvarima u CS, koliko god mislim da ljudi imaju tendenciju misliti oh, mi smo na računalu. Trebamo samo kod. No-- crtanje slika stvarno će vam pomoći. A ja stvarno vam savjetujemo da slavina u vašem djetetu iz vrtića stranu i izvedem bojice ili markeri i nacrtati. Zato što će vam pomoći. A ako me vidi na radno vrijeme, sam će biti nošenje oko hrpe papira s olovke za crtanje stvari. Dakle, posebno s pointers-- nacrtati slike. I siguran sam da mi zapravo ide biti crtež neke slike ovdje. Pa vi svi dobili vidjeti Binky, ovaj cool claymation stvar. A mi mislimo da je stvarno smiješno kada on eksplodira u hrpu komada. To je neki strip olakšanje za klasu. C [nečujan] ovo velika sposobnost biti u mogućnosti kontrolirati memorije. I to je jedna od stvari koje stvarno čini ga tako snažan jezik. No, s velikom moći dolazi velika odgovornost. A lude stvari mogu dogoditi ako niste oprezni. Dakle, ako koristite pokazivače, želite napraviti jeste li stvarno razumjeti upravo ono što radite. Nadam se da sljedeći malo Vrijeme će vam pomoći da zaista razumiju naputke, kako ih koristiti, i kako ih manipulirati. Tako memory-- Siguran sam da imamo vidio ovaj dijagram prije. Dakle, ovo je samo jednostavan dijagram kako se stvari mogu biti pohranjeni memorije. Dakle, u osnovi imaju oni veliki nizovi jedan bajta blokova je ono što smo here-- blagi koracima po jedan svaki put. To je u hex [nečujan] tako osam-bitni blokova. I svaki blok povezan s nekim heksadecimalnom adresu. Dakle, ako ste ikada vidjeli 0x, to je samo notating da je heksadecimalni adresa. Možete pretpostaviti to znači neka adresa u memoriji. Govorimo o memorijskim adresama kad god vidim heksadecimalni. Imamo Ints su varijable, pluta su varijable koje spremaju. Dakle Ints trgovine Ints. Pluta trgovine pluta. Dakle, imamo i naputke da trgovina memorije adrese. To je vrsta mapiranja. Upućuje se isključivo za memorijske adrese. Dakle, to je kao vaš tip tamo. Vaš uređaj je 32-bitni, što znači da je vaša memorijska adresa četiri bajta. Dakle, bilo pokazivač da imate također će biti četiri bajta. Inače, ako je to četiri bajtova, memorija je četiri bajta. Upućuje trgovine memorije. Dakle, oni su četiri bajta. Cool-- samo žele pojačati to. Te bi trebao dobiti ovaj strip danas. Ne znam koliko vas xkcd su navijači, ali ja volim xkcd. To je super. U redu. Dakle, stvarajući pointers-- kao što sam rekao, to je prilično baš kao i bilo što drugo. Imate vrstu. Imate ime. Pravo? To je ono što smo tamo. [? Hex?] Zvjezdica znači da je pokazivač, a onda što god želite nazvati. Tako tipa predstavlja ono što se može pohraniti. Sve u redu? Na isti način, ako radimo Ints, znamo mi pohranjivanje int tamo. Sa pokazivačem ga ima memorijsku adresu. No, ono što to znači je that-- ovdje gdje crtež će doći u ruci. Dakle, u ovom slučaju, imamo neki value-- recimo četiri. Četiri je na adresu jednog. OK? Ovaj prvi ovdje znači da je pokazivač 2x. Pravo? To je neki pointer x. x može biti nešto, bilo što. Bez obzira x is-- kažu x je četiri. To će pohraniti memorije adresu ovdje. Dakle int, zvijezda, x-- je to neki drugi termin u memory-- tko zna što je to. No, to će pohraniti adresu ovdje. Dakle, to bi bilo like-- U tom slučaju, što god, pohranjena na 0x1-- god se pohranjuju na adresu koju naš pokazivač drži, mora uskladiti s što smo označeni. Dakle u 0x1, u ovom slučaju, to je x. To samo može ikada biti int dok nas koristeći ovaj. Isto tako, ako imamo još jedna 1g, bez obzira na adresa je pohranjena u y ima biti char-- ista stvar s z. Na isti način, kad god vas probati i učiniti intx iznosi 0,4, to će vikati na tebe i biti kao nitko, rekli ste htjeli int. To je trebao biti int. Prestanite pokušavati da plutaju napraviti. Pa neka to biti ono što žele biti. Neka se stvari budu ono što jesu. Dakle, velika stvar je samo bez obzira na tip pokazivača je, to je jedini stvar koju možete pohraniti tamo. OK? S praksom, kao i sa prošli tjedan, sve Čini se zapravo vrsta sažetak. Idemo napraviti neke prakse. Trebalo bi više smisla. Dakle, s pozivom i dereferencing-- je zaista važno da se to ravno. Još uvijek imam osvježiti svaki sada i onda. I ja sam poput čekanja, koje ne želim? Tako će zapravo dati znak za struju li referenca ili adresu. Tako se vraća na adresu u memorije od kojih je promjenjiva je pohranjena. Dakle, to će se zapravo vratiti na vas heksadecimalni, dok ga dereferencing zapravo će vam dati podatke koji se pohranjuju tamo. OK? Tako ćemo pogledati primjer jako brzo, ili zapravo do sljedećeg. U redu. Dakle, moramo razmišljati stvarno Pažljivo o tome. Dakle, ovdje imamo neki cijeli broj x. Ja ću pokušati izvući ovu kako bi najbolje moje sposobnosti. Tako ćemo imati taj slot x. I to je spremanje pet. Njegova je adresa 0x4. Cool? Sve dobro. Tako sada imamo pokazivač. Bilo je ovdje. A znak za struju nam daje adresu nečega. Dakle, u ovom slučaju, to je adresa x. Koja je adresa x? 04-- a to pokazivač na 0x08. Cool? Dakle, možete misliti o tome pokazivač, 04, samo ukazuje ovamo. I oni su pozvani upućuje jer kao što smo dobili još u ovo, idete vidjeti upućuju na stvari. I jedan blok upućuju na drugo Blok će napraviti puno više smisla. Dakle, ovdje su dva. I onda imamo neke kopija, što je what-- 0x0c. I to će dereference našoj karti. Pa što to govori je OK, ovdje je naš pokazivač. Vrijednost pohranjuje je 0x04, a što to govori se ići na ovu adresu i reci mi što je u njoj. Tako da je učinkovito Što to strelica radi. Možete misliti o tome kao što je vaša zvijezda. Dakle, u redu, kada radimo zvijezda, to znači slijediti. Idi na ovu adresu. I to je zapravo samo slijedi ovu strelicu za ovaj komad memorije. I dajte nam ono što je u njemu, što je 5. To je razlog zašto je naš primjerak jednaka 5. Znači li to smisla? Da li netko morati me proći opet, ili sporije? Želiš ići putem još jednom trenutku? U redu. Mi ćemo ga ponovno iscrtavanje. Kad smo počeli, svi smo suglasni smo neki komad memorije koja je promjenjiva x da smo postavili jednaka 5. Mi ne kontroliramo gdje je u memoriji. Dakle, ovo mjesto je samo proizvoljno dodijeljena. Dobro postoji? U redu. Onda smo inicijalizirati pokazivač na int. To je razlog zašto je dopustio da se ukazati na x jer imamo int u ovdje. Imamo još jedan komad memorije jer to kazaljke je varijabla baš kao i bilo što drugo. To je proizvoljno dodijeljena neki prostor u memoriji. A što se sprema je adresa x. Ampersand znači adresu x. Dakle, ono što je adresa x? PUBLIKA: To je zero-- SPEAKER 1: 0x04. Tako then-- posljednja. Imamo neke copy-- opet samo još jedna varijabla. Tako ćemo dodijeliti neku proizvoljnu mjesto. A mi dereference našoj karti. Zvijezda znači ići adresa pohranjena u mojoj karti. Reci mi što je tamo. Dakle, adresa pohranjena u našem pokazivačem 0x04. Dakle, idemo na tu adresu. To ukazuje na tu adresu. Ono što je u ovom memorijskom bloku? To je pet. Dakle, to je ono što smo dodijelili našu kopiju. Svi su dobro? Cool. Again-- slika. Dakle praćenje vrijednosti here-- sam ide na to da vi mislite o tome. Možemo izvući još jednu sliku. Ali želim pokušati i razlog kroz to na svoju ruku, za minutu. Budući da oni nisu dali nam primjer adresa, Samo ću učiniti ampersand x-- što bi trebalo pomoći voziti ga kući. Ampersand znači adresu. Tako je u prvom jednom, svima ići s prve linije. Neki x set-a five-- neke slučajni utor u memoriji. Int zvijezda pokazivač je jednaka na adresu x, zar ne? Int zvijezda pokazivač stvara ovaj blok, naziva se pokazivač, i dodjeljuje na adresu x. Ja sam strašno na znakom. Sada ono što mi radimo je kažemo U redu, dereference našoj karti. Dakle, idemo u redu, što je u našoj karti? To je znak za struju x. Idi na Ampersand x i preraspodijeliti ga. Tako sada, znak za struju x će biti 35. Tako je u osnovi, kada ste dereferencing, idete u redu. Ti ćeš biti crtanje Slike poput ove. Ti ćeš biti crtanje vaš strelice preko gdje je. Dakle, ići na ovaj utor u memoriji i bilo dajte mi tu vrijednost leđa, ili izmijeniti ga. U ovom slučaju, jer smo na to vrijednost, mi smo ga dodjeljuje se 35. Dok je u posljednja jedan, ako primijetite, mi su dodjeljivanje što je Ovdje se nešto drugo. Tako su ovaj strašan stol. To nije tako loše. Vi raditi na njemu. Ja ću ga izvući na brodu. Mi ćemo ga ispuniti zajedno, u redu? Dakle, zgrabite neki papir, zgrabiti partner, početi raditi. Idem dobiti Veći komad krede. Jer to će biti puno. U redu. Profesor: U redu. Počnimo s prvom redu. Počet ćemo tamo, onda vam dečki Možda može raditi kroz neki više. U redu. jednako b puta c pa što je? To nije trik pitanje, obećajem. UČENIK: 4 puta 5. Profesor: 4 puta 5. 20. Dakle, što je b? UČENIK: 4. Profesor: I c? UČENIK: 5. Profesor: 5. A onda to samo ide na biti znakom, a ampersand b, znak za struju c, zar ne? Nije loše. To je vrlo jednostavna. U redu. Dakle, sljedeći jedan. C jednak puta, u slučaju tko je bio upoznat s tim. Jesu li svi upoznati s vremena jednaka? OK, sve to means-- je to stenogram za jednak puta c. Također možete to učiniti s podjelom, s toga, uz oduzimanje. Možete napraviti jednakima, odnosno plus jednako c znači iznosi plus c, minus jednak c će biti jednako minus c. To je samo sintaktička šećera. Dakle, u ovom slučaju, je jednaka puta c će nam što dati? Opet, nije trik pitanje. UČENIK: 100. Profesor: 100. Ima li još nešto promijeniti? Ne. Možda ću napokon dobiti bolji u mojim znakom. UČENIK: U redu, ispričavam se, kako ste dobili 100? Profesor: U redu. Dakle, jednako puta c, pa puta c. UČENIK: Oh, vi koristite za previous-- Profesor: Da. Dakle, to su naši najnoviji vrijednosti. To su ono što bi trebao biti pomoću kao što smo pomaknuti prema dolje, u redu. Dakle, b je jedina stvar mijenja, zar ne? Tako ćemo ispuniti sve ostalo. B. Što je b će biti? Biti ili ne biti. Pa što se to radi? Što je zvijezda godišnje radi? UČENIK: Kod na mjesto godišnje. UČENIK: Ne, ne baš. Dakle, ovo je d referenca. UČENIK: Pa b je predao vrijednost godišnje. Profesor: Da, tako je godišnje adresu, zar ne? Dakle, to govori idu tamo gdje je pohranjuju i dati mu tu vrijednost. Dakle, što je b? UČENIK: 100. Profesor: 100. Savršeno. U redu, pa kom je što se mijenja. Sve ostalo ostaje isto. Što je računalo će biti? Jednostavan zadatak. PC je jednaka godišnje, a što je PA? UČENIK: znak. Profesor: Savršeno. Sada smo sve zanimljivo. OK, neka je razbiti ovaj dolje. Prvo, ono što je b puta c, jer to je jednostavno dio ove jedne, zar ne? B puta c is-- UČENIK: 500. Profesor: Da, tako što je ovaj jedan radi, Ako je to zvijezda pb, što se mijenja? UČENIK: Što je u the-- Profesor: Što je u B? UČENIK: Što je u prostoru da pb ukazuje na. Profesor: A pb se ukazuje to-- UČENIK: B. Profesor: B. Dakle jedini stvar se mijenja b, u pravu. Dakle, b puta c, 500. Dakle, to je ono što mijenja sada. Cool. Lijepa. Vi dečki rade sjajno. U redu, nego što se ovaj dolje. C mijenja, zar ne? Tako možemo ispuniti sve ostalo. Da vidimo. U redu. Znamo da je c će biti proizvod dva broja, zar ne? Koje dvije brojke, iako? UČENIK: ic? Profesor: Tako je pravo za prvi. Tako smo bih pozivom p, zar ne? P od točke do, tako da znamo da je to će biti 100 puta više nego što? Vremena Što li kom točku na? Bodovi se. Dakle 100 puta 100 10.000. Da li to smisla? Cool. Početna protežu, dečki, zadnji red. U redu. Što se mijenja ovdje? UČENIK: A. PROFESOR: A. Savršen, tako sve ostalo može ostati isti. U redu. A što je? Dakle, to je ono puta? To je zvijezda pb. Dakle zvijezda pb znači evo pb, PB ukazuje na b. UČENIK: 500. Profesor: 500. Dakle, imamo 500 puta 100. To je 50.000. Uh! Pogledajte kako. UČENIK: Zašto moramo & c last-- Profesor: Žao mi je. UČENIK: Oh, u redu. Profesor: Moj je loše. Mnogo pisanja. Svi su dobro? Nije loše, zar ne? Samo treba malo dok je raditi kroz. Ako ga razbiti, razumijem što svaki dio se odnosi to-- kao sa svime to je, yes-- ga razbiti na malo Problemi i rekombiniraju, a možete napraviti neki strašan stvari. Tu su odgovori, ali mi je to učinio. Pointer aritmetika. Ah. Ruke su mi svi poput krede. Dakle, dodavanjem ili oduzimanjem int prilagođava pokazivač po veličini i vrsti pokazivača. Sjeti se kako svaki tip ima različite veličine? Dakle, kao što su bračni ili dugo dugo jest osam i int je četiri, ali char je jedan. Dakle, ono što želite učiniti is-- jednu stvar za zapamtiti je upravo to koliko je vaš Pokazivač vrijednost zapravo mijenja ovisiti o Vrsta pokazivača je. Svi su dobri s ovim? Mogu li ga izbrisati? Mi smo dobri? Strašan. Dakle, ako imamo neke pokazivač that-- ovo će be-- sam ide to int kazaljke bi. Ona pohranjuje ovo. Ako ste bili reći pokazivač plus jedan, što će učiniti je da će se ažurirati je po veličini int jer to je Vrsta pokazivača je. Uz C, sve je vrlo strogi i uređeno. Int pokazivač će se ažurirati Količina prostora int bi potrajati. Int je četiri bajta. Pa što će to prerasti u? Ti si samo dodao četiri na to. Sada pokazivač će be-- redu. Dakle, ako je to char i nismo pokazivač plus jedan, što bi to bilo sada? Ako started-- praveći se nalazimo started-- sada je 0x08. Idemo sada reći da je to bio char pokazivač, a mi ga dodali. Što bi to promijeniti? Koliko bajta je char? PUBLIKA: Jedan. SPEAKER 1: Jedna. PUBLIKA: Pa 0x09. SPEAKER 1: Pa to bi bilo devet. Dakle, samo nešto zapamtiti. Baš kad ste dodali jedan, to nije dodavanjem jednog, osim ako to char. On je dodao kako su mnogi bajtova tip da je, zbog čega smo ova jednadžba ovdje. Tako da je int puta veći tipa pokazivača. Dakle, imamo primjer ovdje. y je dodijeljen toj vrijednosti, 0x4, kad smo radili y plus jedan jednako. Što je u tome, što je U x, ne mijenja. Što je promjena što je u y. Adresa pohranjena u y ažurira četiri jer postoje četiri bajta u int i to je int kazaljke. U redu. Tako sada imamo još jednu vježbu. Dakle, pitanje je što će se ispisati. Bilo koji ideja? PUBLIKA: Broj likovi u sretnoj mačka? SPEAKER 1: Točno. Tako se sviđa sa svojim niz. Da li su svi dobili to? Ne želimo hodati kroz njega? Da, u redu. Dakle, ono što imamo here-- sam kao što je to toliko više. Ja ne moram [Nečujan] smiješno. Dakle, imamo niz ovdje, sretna mačka. Lijepa. Imamo neke brojač koji mi smo praćenje. Dakle, imamo neke char * pokazivač da je upravo postavljena jednaka Str. Što to radi je to dodjeljivanje neke pokazivač na početku svog niza. Jer siguran sam, kao što je to spominje se u predavanju, mi smo vam dali dečki to vrsta podataka zove niz. Ali stvarno žice su samo Niz of-- kao char *. To je pokazivač hrpa likova da su susjedni u memoriji. Dakle, ovo samo ga postavlja jednaka bilo je niz identificirati gdje njezin prvi lik. Dakle, ovo je samo postavljanje neku točku jednaka početak niza. Svatko dobro tamo? Cool. Dakle, ovo je dereferencing naš pokazivač. Dakle, to je zapravo ide daju nam neku vrijednost ovdje, u našem nizu da govorimo o tome. A mi govoriš dok to nije null terminator. Dakle, zadržati ide dok ne dobijete za kraj niza. Ažuriranje pokazivač po jedan. Dakle r, to će zapravo ažurirati po jedan svaki put jer je to char, char *. Dakle, to će proći. To će se ažurirati. Dakle, po prvi put ove teče, to će biti ovdje na sat. To će se ažurirati. To će biti. To će biti p, y, i tako dalje i tako dalje. Mi ćemo ažurirati brojač. Kada se dođe do kraja ga, Samo ispisuje koliko je stečen. Da. PUBLIKA: Pa to broji Prostor kao jedan, zar ne? U redu. SPEAKER 1: Misli tako. Je li to question-- PUBLIKA: [nečujan]. SPEAKER 1: Bez brige. To sam učinio. U redu, tako da jedna stvar mi razumijem da je s nizom, možete ga tretirati kao Pokazivač jer polja su samo kontinuirani točke memorije. Tako da ga se može tretirati na isti način. Možete ih manipulirati s pokazivača, previše. Dakle, umjesto da rade, u ovom Slučaj, analogna stvar bi niz 0 jednaka 1. Ali na isti način kako Niz je određena od početka gdje njegov prvi znak je, niz određuje gdje je njezin prvi element. Jer znamo, da smo zajamčena, da su ti će biti kontinuirana blokovi memorije. To je ono što nam omogućuje da to učinite. Znamo da su kontinuirani blokovi memorije. Dakle, u ovom slučaju, po dereferencing Samo niz, kako nam kaže, U redu, idite na početak Vaš polje, što je ovdje. Dakle, možete ga postaviti jednaka jedan. I u ovom slučaju, bez obzira na niz tip je, kada ga ažurirati po jedan, to je baš kao i ažuriranje to na sljedeći indeks. Možete to učiniti, jer vas Znaš što je u svom nizu. Pa zna koliko ažurirati svoj pokazivač strane, ono adresa ga na tako ažurirati da ste na sljedećem utor. Dakle, ovo je samo drugačiji način pisanja niz 0 jednaka 1, Niz 1 iznosi 2, niz Nosač 2 jednako 3. To je samo još jedan način da mislim o tome. Budući da su kontinuirani blokova u memoriji, možete uputiti na njima bilo od niza notation-- što ja osobno nalaze easier-- ali možda morate ga manipulirati strogo po memorijskih adresa. I to je način na koji će to učiniti. Vrsta više nalik super stvar koju možete napraviti Možda ne u odnosu na nešto što ste zapravo ide za provedbu. Ja ga koristiti u 61. Vi vjerojatno ne treba brinuti o tome previše. Ali, ako ste zainteresirani, potrajati 61 sljedeće godine. Mi smo u kući stretch dečki. Znam, to je dugo. Dinamička memorija Allocation-- pa znamo da je jedan stvari kad smo razgovarali tijekom naš prvi odjeljak zajedno, Gledali smo swap funkcija gdje je izvan dosega naše glavne funkcije. I mi smo prolazili u tim vrijednostima koji su bili učinkovito primjeraka. I nakon zamjene završio izvršenja, to je samo ostavio hrpu. Zapamtite, imamo stog okvir za swapa. To ostavlja i onima Vrijednosti ostaviti s njom. I oni su otišli. Nismo mogli ništa učiniti s njima i bili smo tužni jer ne možemo mijenjati naše vrijednosti. No, s C, kao što sam spomenuo, te imaju veliku moć nad memorije. Pa što možete učiniti je da možete izdvojiti stvari na hrpi ovdje koji će tamo ostati dok se ne što im reći drugačije. Oni su poput dobre djece. Oni tamo ostati. Oni ne ostavljaju. Oni će tamo ostati dok ne budete kao, u redu, možete otići. Dok stvari na dimnjaku, who-- oni su kao nestašan djecu. Oni samo ću pobjeći kad želite biti tamo i onda su otišli. Ne možete ih dobiti natrag. Dakle hrpa is-- ćemo govoriti o malloc i besplatno, što Siguran sam da dečki čuli na predavanju. I to je zapravo način da imaju vrlo uporni podatke. Dakle, možete zadržati podatke oko koliko god želite. MHM. PUBLIKA: Možete li definirati gomilu i stog? Jesu li oni vole mjesta za staviti stvari? SPEAKER 1: Pa oni su osnovi just-- oni način na koji se odnosi samo na memoriju. Dakle, gomila je samo mjesta gdje se memorije je dodijeljeno dinamički, dok je snop odnosi više stog okvire da su u središtu Funkcije koje su zapravo trčanje. Vi stvarno nemate kontrolu. Velika razlika, imate kontrolu preko gomila, ako želite. Imate manje kontrole nad snopa. Stog ovisi o Funkcije koje se izvode, i poredak u kojem su trčanje, a kako stvari vratio. Dok s hrpu, kao ćemo vidjeti, možete reći: U redu, želim ta vrijednost biti okolo dok sam vam reći drugačije. Ne smiju se dobili osloboditi od njega. Ne smiješ ga nadjačati. Ti ćeš ga zadržati oko koliko god ti kažem. Moći ćete biti gazda u hrpi, dok stack-- možda ako kao izdejstvovati svoj put možete biti šef. Ali ne baš. I to je zapravo samo uspomena. To je samo različite načine upućivanja na memoriju. Cool. Dakle, s tim, kako kontrolirati svoje pamćenje. To je s malloc, koji ti si idući u dobiti na korištenje. Dakle, to je samo kratko za dodjelu memorije. To je sve što je. Postoji hrpa drugih povjetarca Funkcije koje imaju Alloc na kraju, a oni stoje za različite stvari. Dakle, kada vam je potrebno za pohranu kako treba nadživjeti svoju trenutnu funkciju tako da kad vaš trenutni Funkcija bježi, još uvijek imate podatke koji vas dobio od njega, želite koristiti malloc. To će ga resetirali na hrpi. I kao što sam rekao i zadržati govoreći, vi ćete ga zadržati tamo dok ga ne reci inače, što je važna stvar ovdje. Dakle, jedna stvar za primijetiti i to je obično jako važno, je da ovaj sizeof je super korisno upotrijebiti zbog toga, ovisno o tipu stroja radite, može imati različite količine memorije koja je potrebno. Dakle, uvijek želite koristiti veličinu tako da niste ovisni stroj, tako da je vaš broj će se izvoditi na bilo kojem uređaju. A to je samo dio pisanja dobrog koda. Ako se to radi na jednom stroju, ali ne i bilo koji od drugih, kako korisno je vaš program? Dakle, uvijek želite pobrinite se i koristiti sizeof. PUBLIKA: Tako je da kao veličine 10 inča [nečujan]? SPEAKER 1: To je veličina 10 Ints. Da. Dakle, veličina Ints će se vratiti koliko se jedan int potrajati. Ili veličina char, kako koliko se jedan char poduzeti. A onda koliko blokovi to želite? Dakle, u ovom slučaju, želimo nešto da možemo pohraniti 10 Ints u. I to će raditi bez obzira stroja, što je super. Pa koliko je bajtova će koji zapravo dati? Brzi matematike. PUBLIKA: 40. SPEAKER 1: 40. Točno. Dakle, još jedna velika stvar. Pointer ili malloc može vratiti null. Pa opet, uvijek provjerite vidjeti je li se vratio null Prije nego što pokušate i učiniti ništa s njom. Ako ste probati i dereference ovo pokazivač sada, to samo će segfault zato što je otišao i pokušao dotaknuti nula kada ne bi trebali imati. Dakle, uvijek provjerite null. Opet, sve što možete učiniti. To bi moglo vratiti null. To će vratiti null ako ste bilo Nema više prostora, ili iz bilo kojeg razloga je naletio na neku memorijsku bug. Ponekad jednostavno vraća null. Dakle, samo trebate provjeriti za to. To je sve to slide govori. I onda ono što imamo Ovdje je poziv da se oslobodi. Tako je u isti način, ako vas otvoriti datoteku, morate zatvoriti datoteku, Ako vas malloc memorije, što moraš osloboditi tu memoriju. A vi ćete dobiti učiniti stvarno cool stvari. I tu je program možete pokrenuti s vidjeti ako ste ikada ste curenje memorije. Ali vi ne želite propuštati memorije. To je jako loše. Samo zabrljati stvari. Loše je učiniti baš kao i programiranje mudro učinkovitosti dizajna. Ali to je također samo vrsta od loše za vaše računalo. Dakle, samo besplatne stvari kada ih malloc. Vi vidite simetrije ovdje. Super jednostavan. Samo besplatno, a zatim bez obzira na pokazivač, bez obzira na ime pokazivač je, i to će se pobrinuti za to oslobađanje za vas. Cool. Onda smo to. Tako smo samo ćeš prošetati kroz ovaj program. A onda ti dečki su učinili. Tako [nečujan] samo glavna. Dakle, imamo neke int * pokazivač. Dakle, imamo pokazivač koja će održati Ints. A koliko Ints će to držati? Samo jedan. Veličina int. Provjerili smo je li Pokazivač je null, jer njega je, želimo reći ne učiniti ništa. To je loše. Tako smo ispisati neku pogrešku iz memorije, najčešće vratiti 1, što ti dečki su navikli. A onda smo ovdje, mi dereference našoj karti. Dakle, to znači da ćemo za pohranu nešto na mjestu određenom za nas. Int * pokazivač, ili malloc, vraća adresu gdje se izdvaja to memorije za vas. Dakle, to je u osnovi dajući vam like-- ako vas razmišljati o hrpa kuće u susjedstvu da želite staviti Vaš namještaj u, malloc je kao u redu, dobivate otići do kuće tri. I to vam se daje adresu kuće tri. Dakle, ovo sada, to Pokazivač se pohranjuje adresa, pohranjuje adresu svoje kuće. * PTR znači, u redu, ja sam u mojoj kući. Cool. Moram dobiti neki cijeli broj. Dakle tražiš nekoga da vam namještaja sada. Tako ćete dobiti neki int. I to ga stavlja u svoj pokazivač gdje je pokazujući. I onda ga samo ispisuje se, gdje god ste unijeli. I opet, referenca. Dakle, to je kao da je otišao na to adresu i vi vidjeli ono što je tamo. Cool? I onda naravno smo oslobodili našu pokazivač. Nemojte zaboraviti da bez svog pokazivač. Ne zaboravite da provjerite null. Nemojte zaboraviti da bez svog pokazivač. Imate dvije stvari koje se sjećam iz to, ili da se sjetite. Da. PUBLIKA: [nečujan] stvari kao što je to, char * e. Kako to da mi nikada osloboditi one? SPEAKER 1: Hm? PUBLIKA: Jesu li one poput žice? Rekao si žice baš kao char * s, zar ne? Pa zašto ne bismo osloboditi žice? SPEAKER 1: Vi samo besplatno ako ste mallocing. PUBLIKA: Oh, ako ste mallocing. SPEAKER 1: Pa malloc i slobodni su dvije stvari da uvijek treba imati zajedno. f otvoren, f blizu, dvije stvari trebali ste zajedno. U oba tim slučajevima, provjerite null. Da. PUBLIKA: Dakle, slobodno je samo dopuštajući nešto drugo skladištiti tamo nakon ovaj program je to koristi? SPEAKER 1: To je jednostavno govoreći, OK, ja sam učinio s tim. Ne morate ga zadržati oko. U suprotnom računalo neće Baš kao i probati i držati ga tamo. I onda can't-- to radi u memorijskim problemima kasnije. Uvijek želim ga osloboditi, jer to govori vaše računalo, u redu, ja sam učinjeno s ovog mjesta memorije. Možete ga dobiti natrag za mene koristiti kasnije. Cool? Da. PUBLIKA: Tako smo koristili% d samo jer dvostruka koji je vraća, ili zašto is-- [nečujan]. PUBLIKA: Mogu li koristiti% sam? SPEAKER 1: Možete koristiti% ja. Bilo last minute pitanja? Samo naprijed. PUBLIKA: Imam samo brzo pitanje. Dakle, varijabla ptr, that's-- kao što, s int * ptr = malloc, to samo govori da je pokazujući na mjesto u memory-- SPEAKER 1: Želite li [nečujan]? PUBLIKA: --that je Veličina of-- ne, to je u redu. No, to je samo ukazuje na mjesto u memorija koja je baš kao i četiri bajta. SPEAKER 1: Točno. Dakle malloc veličinu od int, kaže, U redu, ja ću otići otrčati, nalaze četiri bajta memorije za vas. Kada se utvrdi da četiri bajtova memorije ga, daje li poduprijeti adresu gdje ona počinje, i to je ono što pohranjeni u kazaljke, ili PTR. Dobro. Ti dečki izgledaju manje zbunjeni od većine Ljudi Kada govorim o pointer, pa sam upravo sada osjeća prilično dobro. U redu. Kao i uvijek, vi bi trebali imati sve dobivši svoje pset2 ocjene do sada. Znam da je bilo nekih klimav stvari gdje se kaže, formula ne vrijedi ili nešto. Ako ste uzimajući da, sve Vaši razreda vrijede na mojoj strani. Dakle, ja mogu vam poslati screenshotovi iz vaših razreda. Samo javite mi, kao i ako ste nedostaje bilo ocjene ili nešto ne čini se da ima smisla. Dođite k meni. Bio sam iznimno ponosan na vas Dečki su već, kako ga zadržati. I imaju dobar ostatak vašeg tjedna. Siguran sam da ću vidjeti neke od vas na radnog vremena.