[TEMA MUSICAL] 

ALTAVEU 1: Hola, tothom. Benvingut de nou a la secció. Preciós dia fora-- que és per això, que sóc Segur, hi ha solament quatre de vostès són aquí i no el nostre paquet de costum. He estat malalt aquest cap de setmana. Així que no tinc Starburst per a vosaltres. I puc començar a tossir terriblement llarg d'aquest. Així que tinguin paciència amb mi. Vaig a tractar realment i obtenir a través d'aquesta primera, però, abans que tingui un atac de tos. Però a penes ser fàcil en mi un poc bit-- això és tot el que demano. 

Així que la nostra agenda per avui-- només un reminder-- el seu concurs és la setmana que ve. T'ho vaig dir la setmana passada pel que no agafar amb la guàrdia baixa. Així que m'ho estic recordant de nou. La propera setmana el seu concurs. Amb aquesta finalitat, la setmana que ve de secció serà molt més de-- vaig a tractar i treballar en alguna revisió. Així que si vostès poguessin ajudar enviant-me les coses que vostè se senti còmode amb, que et preocupa, temes que li agradaria per em cobreixo, això seria genial. Així que puc tractar de treballar- a la nostra secció de la setmana vinent o enviar material addicional o preparació que no podria obtenir en altres llocs. 

Sí! Més gent està venint! Vaig pensar, què he fet tan malament passat setmana, que ningú vol tornar? Tinc por. Així que els altres tres coses que anem a repassar són redirecció, arxiu d'E / S, i a continuació, els punters i memòria dinàmica. Estic segur que ja està tot súper emocionada sobre pointers-- tema favorit de tots, tan simple d'entendre. Estic segur que tots els nois tens això, oi? 

Així que el primer és el primer, redirection-- això és bàsicament un camí per controlar la forma en què l'entrada les coses en el seu programa, com vostè les coses de sortida del seu programa. Les principals formes en que vostès han estat interactuar amb ell és només a través de fora estàndard amb la seva pantalla d'impressió aquí. Però hi ha maneres de pipe-- com veiem aquí és un dels nostres paraules- de la canonada que la informació o que les dades en un arxiu d'un arxiu. És només diferents formes de fer les coses en el seu programa i fora del seu programa, en lloc de acaba d'imprimir a aquesta pantalla o introduir coses des de la línia d'ordres. 

Així que primer és poc més gran que símbol d'intercalació. Així output-- simplement imprimeix la sortida a un arxiu en lloc de la pantalla. Així que si vostè tenia alguna cosa que imprimeix "Hola, món!" a la pantalla, si ho poses en el seu lloc a output.text, que crea aquest arxiu anomenat output.text. I quan s'obre, va a dir "Hola, món!" en aquest país. Això pot ser molt útil si vostè té un munt d'errors en realitat, com podem veure en aquest cas. Si ho fas dues intercalació, que va a imprimir els missatges d'error. 

Així que si vostè està tenint un problema amb compilació, que té una gran quantitat d'errors i que estiguis empantanegar a intentar per desplaçar-se a través de la línia d'ordres a través de tots ells, es pot simplement imprimir en un arxiu, obrir aquest arxiu perquè vostè pot desplaçar-se a través d'ells més fàcil. En realitat, jo vaig utilitzar que un molt quan vaig anar depurant els meus 181 conjunts de processadors de la màquina d'aprenentatge. Així que pot ser molt útil més endavant. També és útil si té un programa que potser és la generació d'una biblioteca o la generació d'un conjunt de cadenes, i vostè han de ser capaços de veure que que els està generant correctament. Aquesta és la manera de fer-ho. 

Així que si vostè les imprimeix en un arxiu, pot examinar més fàcilment, no? Versus tractant de desplaçar- a través de la seva línia d'ordres. I després una cosa a tenir en compte és que amb només el major d'accent circumflex, si vostè està escrivint a un arxiu que ja exists-- així com si ens trobem amb això la primera temps, ho posem a output.text, i després vam tenir un segon programa que aquest imprès com a programa de dos i va fer un gran que a output.text, sobreescriurà que-- així sobreescriure el que va ser alguna vegada a aquest arxiu per començar. 

Així que si vol annexar a un arxiu, com veiem aquí, que acaba de fer dues vegades més gran que els signes. I va a annexar a la mateixa. No serà sobreescrita. Així que si vostè necessita per executar múltiples programes i tipus de mantenir pista del que tots ells són tornar a vostè en un arxiu, aquesta és una manera de fer-ho. Si no li importa el que està en el seu arxiu i ha permès a sobreescriure, que només pot utilitzar un sol més gran que. Això té sentit per a tothom? 

AUDIÈNCIA: Com a punt slash hola major que el text del punt de sortida, igual que dues vegades, només va a mostrar a la sortida només dot text una segona temps-- 

ALTAVEU 1: Dret. Pel que seria bàsicament per complet sobreescriure el que hi era per començar. Si aquest arxiu aquí, el output.text ja existeix, bàsicament com es digui que de nou amb un sol major que només pot pensar-hi com de la mateixa manera que va reemplaçar l'arxiu. Igual que quan vostè està estalviant una Paraula document i vostè estalviar com, i es manté el mateix nom, i sobreescriu completament it-- aquest és el mateix tipus de coses. Algú té alguna pregunta sobre només donar sortida a un arxiu? Impressionant. 

Així que, òbviament, si s'inverteix el fletxa direcció, es pot fer d'entrada. Així que quan vostès tenien com César o VISIONEER i que tenia a l'entrada d'alguna cosa, vostè tenia un argument de línia d'ordres que en realitat entrada de la mateixa. Aquesta és una altra manera de fer-ho. Així que en lloc d'esperar per a la línia d'ordres, com quan se li demani per a la seva missatge de César o VISIONEER, si vostè tenia un arxiu de text que tenien el seu missatge, vostè podria escriure en això. 

Així que si això fos com a punt slash César 3 menys de text d'entrada fletxa, que és el seu missatge, que aniria bé. Quan el programa de César en realitat preguntat per l'entrada de l'usuari, ja ho tindria perquè que ha escrit en aquest arxiu. Això és només una altra manera. Només un revers de output-- acaba d'introduir per a les dades. 

I a continuació, l'últim és la canonada. So cool força d'aquest. Perquè li permet prendre la sortida d'un programa i el va posar com a d'entrada a un altre programa. No sé si algun de vostès jugat amb el desxifrat CS50 que podria tenir t'ha donat, però seria li permeten prendre alguna mostra presentar, escriviu-lo el seu xifrat, i després des d'allà escrigui que en el seu desxifrat per assegurar-se que va resultar la mateixa. Així que és una espècie de bucle de tres vies. No t'ho pensis. 

AUDIÈNCIA: Si un programa té múltiples entrades, Hi ha una manera de dir que el que d'entrada a utilitzar l'arxiu de text o la sortida de? 

ALTAVEU 1: Compta amb múltiples entrades. Sigui quina sigui presentar la seva input-- quan és demanant d'entrada que per primera vegada, és suposarà, crec, és anar a la canonada en tot l'arxiu. Així que si vostè té múltiples entrades, que estàs serà de canonades en diversos arxius. Així que si vostè està demanant missatges tres vegades en el seu codi, vostè va a estar posant en tres arxius diferents. I es posa boig. I vostè no hauria de tenir de preocupar d'això ara mateix. Però aquesta és la idea. 

Així que sí, és la canonada de sortida de només un programa utilitza l'entrada en l'altre. Tothom bé allà? Refredar. Okay. Vostè probablement no tindrà de fer massa amb ella. Però vostè ha d'entendre maneres que vostè pot utilitzar això. I hi ha alguns casos que és possible que vulgueu utilitzar. 

Així que presento I / O- Jo sé el que ets dient-- que estem acostumats a la lectura de i per escrit a la nostra pantalla d'allà, que és estàndard i la sortida estàndard. I això és el que vostès han estat fent des del començament de la classe aquí. Però també es pot llegir i escriure arxius, que és l'únic arxiu I / O- manera d'entrada d'arxiu, sortida és tot el que representa. Així que això significa bàsicament que vostè pot emmagatzemar les seves dades ara. 

Quan vostè acaba d'imprimir a la pantalla, és bàsicament ha anat, oi? Tan aviat com vostè fa "Hola món "i executar" Hola món " imprimeix "Hola món" a la pantalla. Però realment no es pot fer res amb ella a partir d'aquí. Si s'emmagatzema en un text arxiu, i de cop i volta vostè té aquests dades que se li permet manipular o posar-lo en un arxiu, o posar-lo en un programa posterior. Una de les raons raó per la qual fem això és només com una manera d'emmagatzemar dades per al seu ús posterior. 

Tinc un parell de passos aquí simplement caminar a través d'estàndard I / O. En el pas un, heu de crear una referència a l'arxiu amb tot tapes de l'arxiu d'estrelles. Així que crea un punter a un arxiu. Així que vostè vol per obrir-lo. I vostè diu, literalment, arxiu només és igual a fopen. I això va a retornar un punter a l'arxiu que acaba d'obrir. Vaig veure un parell de vostès nois en hores d'oficina. 

Però una de les coses és punters remember-- pot haver alguna adreça o nul·la, no? Si alguna vegada tenim un cas en el qual alguna cosa pot tornar null, ¿Què és el que hem de fer abans que alguna vegada ho fem servir? Hem de comprovar si és nul o no, oi? A causa de que alguns de vostès poden haver tingut el problema pel qual qualsevol objecte estava sent retornat en ruptura era nul·la. Ha intentat fer alguna funció en ell. I el seu lloc informàtic criticat. Dreta? Aposto a que un parell de vostès pot haver tingut aquest problema. 

Així que amb fopen, fopen, o bé retornar un punter a l'arxiu, o si alguna cosa surt malament, que va a tornar null. Així que sempre cal comprovar que no ha tornat nul abans d'intentar fer qualsevol altra cosa. Això és com un paradigma estàndard que vostè va a necessitar aquí. Si alguna vegada hi ha una possibilitat que alguna cosa podria tornar null, comprovar per assegurar-se que no ho fa abans de continuar. En cas contrari, et vas per obtenir encantadores faltes lloc. I a ningú li agrada tractar amb aquells. 

Així que com veiem aquí, el primer argument és només la ruta d'accés a l'arxiu. Si no existeix aquest arxiu, que crearà aquest arxiu. I només estarà en blanc. I a continuació, el segon argument és la manera que desitgi. Volem llegir d'aquest arxiu? Vols escriure d'ella? Vols afegir? Així que en realitat el que acabo de said-- si el fitxer no existeix i que està tractant de llegir des ella, que llançarà un error. Si l'arxiu nom-- com si file.text encara no existeix i voleu escriure a ella, es crearà un arxiu en blanc anomenat file.text per a vostè. I si vol annexar, vostè ha de fer el mateix. Això té sentit? Si vostè està tractant de llegir des un arxiu que encara no existeix, que llançarà un error. En cas contrari, es crearà l'arxiu perquè vostè faci el que vulgui amb ella. Refredar. Ara podem llegir el fitxer. I això és només una mica d'anar a través de les diferents funcions que tenim per a l'arxiu d'E / S. Aquesta voluntat ser necessari en conjunt de processadors d'aquesta setmana, si no recordo malament. Sí, absolutament serà necessària en conjunt de processadors d'aquesta setmana. Així fgetc torna el següent caràcter. fgets només retorna una línia de text. Es tornarà res fins una nova línia, i es trencarà. Així fread llegeix un cert nombre de bytes i els col·loca en una matriu, que és una cosa que es podria vull fer amb re-size-- podria ser útil. 

Quantes persones han llegit l'especificació de conjunt de processadors, per cert? Okay. [Inaudible] 

ALTAVEU 1: OK. Bé. Definitivament llegir que-- és un conjunt de processadors de la diversió. Tens l'oportunitat de recuperar un record esborrat card-- realment emocionant quan funciona. Però sens dubte, començar a llegir això. Vingui a parlar amb mi si té preguntes al respecte. 

OK, així que com anava dient, fread llegeix un cert nombre de bytes. Això és un nombre arbitrari que es va a establir. I llavors només fseek mou a una determinada posició. Així que potser no té cura sobre els propers 10 bytes. El que desitja és passar directament. No es preocupen per ells. Vols llegir a partir de les 11 bytes. fseek li permet fer això. Per tant, li permet ser selectiu sobre el que estàs llegint. A causa fgetc, fgets, i lectura fread a partir d'un cert lloc a l'arxiu. 

Una manera de pensar en això és si aquesta és el nostre arxiu, quan s'obri per primera vegada, vostè té aquesta posició a l'arxiu que comença pel principi. Sempre que cridi fgetc, fgetf, o fread, que va a començar des aquesta marca de posició. Diguem que el que desitja és llegir aquest tros de memòria aquí. No es pot dir. Has de buscar per aquí i després llegir a partir d'aquí o llegir, aconsegueix, o getc, depenent del que vulguis. Així que busqui només li permet ometre parts de la memòria. I aquesta és l'única manera pot ometre coses sense llegir-los en la seva memòria intermèdia. Això té sentit per a tothom? 

Òbviament, hi ha una gran quantitat de aquí-- paral·lel la nostra redirecció de la sortida o d'entrada, vostè ha llegit i escriure. Així fputc simplement escriu un caràcter a l'arxiu. fputs escriu una línia. Fprintf imprimeix una sortida formatada. Així que si vostè té pestanyes, o en l'espai, o el que sigui. I llavors fwrite escriu alguns matriu de bytes a un arxiu. Així que això és de la mateixa manera fwrite i fread són anàlegs fgets opposites--, fputs, i després un munt fputc i fgetc-- , Coses ràpides de bojos. 

Només tipus de mantenir aquest handy-- vostè tindrà diferents moments on potser el que desitja un caràcter a la vegada. Potser vostè vol una línia sencera. Amb la seva pset-- diccionari que es troba en dos conjunts de processadors, Jo crec, et donem un tot diccionari en un format de text que té cada paraula separats per una línia. Així que si volies llegir en una paraula al mateix temps, el que podria utilitzar si estàs llegint i tots estan separats en noves línies, i el que desitja és una paraula al mateix temps? 

Audiència: fgets 

ALTAVEU 1: Dret. Fgets-- ja que torna el que està en una línia. I si cada paraula és la seva pròpia línia, podem utilitzar fgets. Refredar. Això té sentit, tot el món? Fresc? Sí, anem a arribar a la part divertida amb punters molt aviat, en el qual arribar a fer una mica de matemàtiques. I serà gran. 

Darrera step-- tancar l'arxiu. Amb tantes coses aquí, un dels nostres paradigmes és si es pot tornar nul, comprovar nul·la. Si s'obre una mica, serà millor que el tanqui. Acceptar, per la qual cosa no està fet fins que estigui acabat a menys que hi hagi tancat la mateixa. Una cosa així com que no ha acabat fins que la senyora grossa canta. Això és com tancar l'arxiu. Com es diu aquí, només reiterar, sempre obrir el fitxer abans que estigui llegint o escrivint-hi. I sempre tancar si has obert. Bé? Refredar. 

Així que aquí està un exemple. Així tiny-- No sé si vostè nois poden veure que molt bé. Si tan sols poguéssim augmentar la brillantor d'alguna manera. Déjame fer això realitat, si puc. Bé, vostès no poden realment veure això en absolut, podeu? Bé, anem a fer això, llavors. [Inaudible] 

Suposo que això és molt millor per veure. Algú pot veure on el meu ratolí es va anar és la pregunta? Ah, aquí ho és-- lluita! 

Okay. Bàsicament, vostès han de tenir tipus d'una idea del que això està fent. No és perfecte. Però prefereixo explicar-ho d'gastar més temps tractant de formatar correctament. Bàsicament, com es veu aquí, vam començar amb obrir l'arxiu. I tenim alguns arxiu de base de dades que estem l'obertura que diu que és els nostres estudiants. I anem a escriure-hi. Així que per descomptat, tornar null. Així que hem de comprovar si hi ha nul·la. I després, si no és nul, passem per. I com pots veure, estem bucle a través d'aquí. Hi ha estudiants. Els estudiants de hash és definida com tres. I el que estem fent és que estem imprimir a l'arxiu, no? Així que el que estem imprimint al nostre arxiu? 

AUDIÈNCIA: Les qualificacions que es troben en la matriu? 

ALTAVEU 1: Sí. Les puntuacions que es troben en la array-- exactament. Així que estem obrint aquest arxiu de base de dades, el que Suposo que és algun tipus base de dades dels graus. I només estem imprimint el puntuacions de cada estudiant per a aquest arxiu. Fresc? Bé. Impressionant. Okay. Tornem A-- 

AUDIÈNCIA: Tinc una pregunta ràpida. És el printf no en el bucle for? Això és només en el cas de bucle? ALTAVEU 1: No, és en el bucle for. No puc veure el meu ratolí molt bé aquí. Així que estic lluitant per format que correctament. Aquest suport ha de desaparèixer. Hauria d'estar aquí baix. Això és el que està en el seu cicle for. Ja està. Ara que és bastant. Així que és com ha de ser: amb excepció per a aquest últim tram que em vaig acomiadar. Okay. Això té sentit per a tothom? Okay. Seguirem endavant a la següent cosa llavors-- que, en realitat, vas a haver de veure el codi. Així que només vaig a copiar que en aquest moment. Okay. Així que vaig a mostrar nois aquest codi. I vull que vostè provi i figura el que se suposa que ha de fer. 

Així que donat que-- prendre un minut més o menys. Intenta esbrinar el que està passant aquí. 

Alguna idea? 

Sabem que tenim com a mínim dos arguments en la línia d'ordres, oi? Suposo que una de les quals serà que [inaudible] del nostre programa és i després alguna cosa més. Perquè si [inaudible] és menor de dues, cridem a ells. Dreta? I a partir de la utilització, es veu com que hi haurà algun tipus d'arxiu. Tots estem d'acord amb això? Així que ara, ¿quin és el bucle fent? Què va a través? 

AUDIÈNCIA: Tots els arxius. ALTAVEU 1: Exactament. Es va a través de tot el els arxius que hem d'entrada hi ha. Així que per a cada arxiu, és l'obertura d'una corda allà. És l'obertura d'aquest arxiu. Dreta? I hi ha la lectura de la mateixa. Per descomptat, comprovar si és nul. I després hi ha la impressió. Si és nul, és només que ens diu que això no és un arxiu que existeix. Perquè recorda, amb llegiu el nostre arxiu ha d'existir. Dreta? Amb escriptura i d'annexió, vostè pot sortir amb la seva. Però amb lectura, el nostre fitxer ha d'existir. 

I després, si existeix, ¿Què estem fent aquí? Anem a començar aquí. Què és això fer-- aquest primer caràcter. Què fa? Es posa un personatge, ¿no? Llavors, ¿què està fent això? S'està fent el primer caràcter. Algú sap EOF? 

AUDIÈNCIA: Fi d'arxiu? 

ALTAVEU 1: Cap de file-- exactament. Així que va a anar a través de tot l'arxiu, no? I després es va a actualitzar per aconseguir tots els personatges posterior. Dreta? ¿I què està fent? AUDIÈNCIA: Posar que en-- 

ALTAVEU 1: impressions putchar per al protector de pantalla. [Inaudible] el caràcter. I després, quan es [inaudible] això tancarà l'arxiu. 

AUDIÈNCIA: No necessita un [? una altra cosa? ?] 

ALTAVEU 1: No necessàriament. Vull dir, és una espècie de implícit en això. Com que aquest torna, però, sempre ja que això no agafa això, vostè està molt bé. Vull dir que és probablement bo practicar a fer una cosa. Però una cosa no és sempre especialment necessària si tens alguna cosa com un retorn, que significa que en aquest cas si les captures ella, el seu programa va a acabar i que mai va a arribar a això. És més per al cas que vostè és no necessàriament tornant alguna cosa. Perquè si això no era tornar res, això significaria que si això fos cert, la resta d'aquest seguiria funcionant. I en aquest cas, voldria un fals. Si es tracta de tornar, i final del seu programa, una persona no cal tot el temps, depenent del context. Jacob, sabia vostè té una pregunta? AUDIÈNCIA: Sí. També ho fa fgetc obtenir el següent personatge? Com augmenta el caràcter? ALTAVEU 1: Sí. Així fgetc obté el següent caràcter. Vostè pot pensar en ell com C ++ en un sentit. 

AUDIÈNCIA: Llavors, ¿què era EOF? 

ALTAVEU 1: EOF és el final de l'arxiu. És només un marcador que li permet saber que esteu en el final del seu arxiu. Així que això va a imprimir a la seva sortida estàndard. I després es va a tancar l'arxiu quan es fa. I després anirem a el següent arxiu, ¿no? Així que en general, el que fa aquest programa? 

[Inaudible] 

ALTAVEU 1: Sí. Simplement imprimeix tot el que hi ha. Així CAT si vostès han utilitzat alguna vegada i després el nom d'algun file-- No sé si algun de vostès té Alguna vegada has fet això en el seu terminal. Però si alguna vegada utilitza el comandament CAT-- C-A-T- i llavors qualsevol cosa arxiu vostè ha de allà-- l'imprimeix al seu terminal, que pot ser molt útil per a algunes coses. Jo el faig servir molt. Això té sentit per a tothom? Fresc? 

Acceptar tant la seva tasca sigui per ara-- si mateix o amb la gent al voltant de usted-- és simplement escriure un programa senzill que s'acaba d'escriure "Hola, món!" en un arxiu. 

[Inaudible] 

[Inaudible] 

ALTAVEU 1: jo estava com, ho va fer Ho faig tan malament l'última setmana? Jo no crec que hagi estat tan dolent. M'alegro que estiguis aquí tot. Realment em fa feliç. Sóc una noia dels plaers simples. A mi m'agrada quan el meu secció assisteix. Així que m'estic fent això va començar per vostès perquè puguem codificar junts. No m'agrada posar a ningú en el lloc a menys que vostè vol ser. 

AUDIÈNCIA: Per al concurs, fer hem d'escriure un programa? 

ALTAVEU 1: Se li pot demanar a escriure programes senzills a mà. Sí. 

AUDIÈNCIA: El concurs és la setmana que ve, no? 

ALTAVEU 1: El concurs és dimecres que ve. Això vol dir que hi ha una encantadora [? CSE?] classificació de festa després, que significa que obtindrà la seva puntuació esquena que nit-- en quin moment? Qui sap? Però serà aquesta nit. 

Bé. Com volem que començar això? Et vaig a donar un hint-- comença amb això. 

AUDIÈNCIA: Vostè ha d'obrir un arxiu. 

ALTAVEU 1: Sí. Llavors, ¿què és el que vols trucar a això? És el que desitja és cridar-la "arxiu"? Farem que sigui fàcil. Així que quina és la nostra fopen-- prova de sortida serà? Llámelo "Hola." I el que és la nostra manera? Què estem fent amb aquest fitxer? 

AUDIÈNCIA: Llegir. Escriure. ALTAVEU 1: Estem escrivint a la mateixa. Preciós. Acceptar, per la qual cosa tenim ara aquest fitxer. Què necessitem fer? AUDIÈNCIA: Comproveu si és nul. ALTAVEU 1: Comproveu si és null-- exactament. Això és el que m'agrada escoltar. Això hauria de ser automàtica, especialment més o menys a partir d'ara. Si comences a violació de segment, és probable que no comprovar la nul·la alguna part. Nou de cada deu vegades, això és serà el seu error. Així que si vostè podria aconseguir en el hàbit, comprovi sempre si és nul, la teva vida serà agradable i easy-- o més fàcil. 

Així que comprovar per veure si és nul. Així que si no és nul·la, el que és el que és igual a l'explosió vol dir: no null-- és vàlida. Què volem fer? Només volem imprimir a aquest fitxer, no? Llavors, ¿què utilitzarem? 

AUDIÈNCIA: fprintf 

ALTAVEU 1: Fprintf-- encantadora. I fprintf pren dues arguments-- on que va i el que volem imprimir. Així que quina és la primera? On va? 

AUDIÈNCIA: Arxiu. 

ALTAVEU 1: Es va a presentar. ¿I què és el que volem impresa? "Hola, món!" Bé. Tenim una última cosa-- un altre gran paradigma aquí. AUDIÈNCIA: Tanca. ALTAVEU 1: Tancar. Cal anar. 

AUDIÈNCIA: Això està passant si l'arxiu és nul? ALTAVEU 1: No, això és si no és nul. AUDIÈNCIA: Oh, si és no-- acord. Per al fopen i després el dos arguments que van dins, ¿Què vol dir de nou el primer argument? 

ALTAVEU 1: L'argument és de la mateixa manera que el nom del fitxer que vol anar. Així que després d'això s'executa, ho faria tenir algun arxiu anomenat "hola" que tenien "Hola, món" dins d'ella. Això és tot. Només el nom. 

AUDIÈNCIA: I ja que és l'escriptura, la arxiu no ha de ja existeixen. És això el que vas dir? 

ALTAVEU 1: Dret. Exactament. Si "Hola" com un arxiu no existeix, però, que és crearà un arxiu anomenat Hola "i escriure-hi per a vostè. 

AUDIÈNCIA: Quan vostè està dient el programa va escriure en el fitxer, Per què escrius "arxiu" en lloc de el nom de l'arxiu i fprintf-- 

ALTAVEU 1: Com que en aquest cas, tenim que gran FILE-- tot en estrella caps--, presentar. Així que és un punter a l'arxiu que vostè està parlant. Aquesta és la forma que que acabem de referir-nos a ella. Així que en aquest cas, pot pensar en aha file--, podem utilitzar esto-- arxiu aquí es refereix a l'obertura de "Hola" i deixant que s'escrigui. 

AUDIÈNCIA: Podríem posar un "Hola" en lloc [? de just?] arxiu f? ALTAVEU 1: No, perquè "Hola" ha de ser obert i es pugui escriure. Present aquí és com un designador que diu bé, que tenir aquest hello-- file-- que estem veient. Ha estat obert. I anem a escriure-hi. Si vostè només ha d'utilitzar "Hola", que està encapsulat en el mateix. Així que va a flipar. Vull dir, vostè podria haver anomenat ell. Podries haver fet arxiu, estrella, "Hola", és igual que. Però el punt és que vostè necessitarà un punter estrella arxiu en ordre per poder utilitzar aquestes funcions. AUDIÈNCIA: Podria vostè fer arxiu, estrella, arxiu, "Hola" o què has de posar presentar estrella, arxiu per ella? ALTAVEU 1: Vostè podria fer arxiu, estrella, "Hola." Vostè pot canviar això a qualsevol nom que vulgueu. És completament arbitrària el que dic. Vostè pot nomenar qualsevol cosa. Nom volant espaguetis, si volies. 

AUDIÈNCIA: Què és la "w" entre cometes per? 

ALTAVEU 1: La "w" és només la manera. Així que estem escrivint a aquesta imatge. Tothom bé? És clar? Sí. 

AUDIÈNCIA: Així que quan s'escriu aquest arxiu, on ens trobem, doncs, aquest arxiu? 

ALTAVEU 1: Serà en el mateix directori que vostè està actualment en. Si estàs en conjunt de processadors de tres i executar aquest, dins del seu conjunt de processadors 03:00 carpeta serà aquest arxiu es diu "Hola." Fresc? Tothom bé? Em sento com si estigués tot aconseguir-ho, la qual cosa és genial. Okay. Així que de tornada al meu show-- diapositiva M'encanta quan les coses funcionen. Acceptar, pointers-- Són vostès emocionat? Els punters són grans. Prenen una mica per embolicar el seu cap al voltant. Aquest és el meu segon any punters d'ensenyament. I crec que per fi ho vaig aconseguir. Així que si vostè lluita, que està bé. Com he dit abans, fer dibuixos ajuda molt amb les coses a la CS, tant com jo crec que la gent tendeix pensar oh, estem davant un ordinador. Hem només codi. Imatges de dibuix no- realment l'ajudarà. I realment t'animo a aprofitar la seva banda kindergartner i dur a terme els creyones o marcadors i taules. A causa de que l'ajudarà. I si em veus a les hores d'oficina, jo serà portar al voltant de piles de paper amb les plomes de dibuix les coses. 

Així especialment amb pointers-- fer dibuixos. I estic segur que estem en realitat va a estar dibuixant algunes fotos aquí també. 

Així que vosaltres tots arribem a veure Binky, aquesta bon aspecte animació amb plastilina. I pensem que és realment divertit quan que explota en un munt de peces. És una mica d'alleujament còmic per a la classe. C [inaudible] aquesta gran capacitat ser capaç de controlar la memòria. I és una de les coses que realment el converteix en un llenguatge tan poderós. Però amb gran poder ve gran responsabilitat. I les coses boges que pot succeir si vostè no té cura. Així que quan vostè està utilitzant punters, que volen fer Segur que realment entén exactament el que estàs fent. Esperem que el proper mica de el temps l'ajudarà realment a entendre punters, com usar-los, i com manipular-los. 

Així memory-- Estic segur que hem aquest diagrama vist abans. Així que això és només un simple diagrama de com les coses podrien ser emmagatzemats memòria. Així que, bàsicament, té aquests grans arranjaments de blocs d'un byte és el que tenim aquí-- lleuger increments en un cada vegada. Això és en hexadecimal [inaudible] de manera que els blocs de vuit bits. I cada bloc s'associa amb una mica de direcció hexadecimal. Així que si alguna vegada veu la 0x, això és només notating que es tracta d'una adreça hexadecimal. Vostè pot assumir que això significa alguna direcció en la memòria. Estem parlant de les direccions de memòria cada vegada que vegi hexadecimal. 

Tenim sencers són variables, carrosses són variables que emmagatzemen. Així ints emmagatzemar sencers. Botiga flotadors flota. Així que també tenim punters que les direccions de memòria botiga. Això és una espècie de mapeig. Els punters són exclusivament per a adreces de memòria. Així que això és com el tipus d'allà. El seu aparell és de 32 bits, el que significa que la seva adreça de memòria és de quatre bytes. Així que qualsevol punter que tens També serà quatre bytes. O bé si es tracta de quatre bytes, la memòria és de quatre bytes. Memòria d'emmagatzematge de punters. Per tant, són quatre bytes. Cool-- només volen reforçar això. 

Vostè ha d'obtenir aquest còmic ara. No sé quants de vostès són aficionats xkcd, però m'encanta xkcd. És genial. 

Bé. Així que la creació de pointers-- com he dit, és més o menys com qualsevol altra cosa. Vostè té un tipus. Vostè té un nom. Dreta? Això és el que tenim allà. [? Hex?] Significa estrella és un punter, i després el que vulguis dir. Així que el tipus representa el que pot emmagatzemar. Bé? De la mateixa manera que si ho fem sencers, sabem que estem emmagatzemant 1 int allà. Amb un punter, es exerceix en una direcció de memòria. Però el que significa és que-- és on aquí un dibuix anirà molt bé. Així que en aquest cas, tenim alguns value-- diguem 04:00. Cuatro és en direcció d'un. D'acord? 

Aquesta primera un aquí significa que és un punter de 2x. Dreta? És cert punter x. x pot ser alguna cosa, el que sigui. Qualsevol que sigui x és-- dir x és quatre. Es va a emmagatzemar el direcció de memòria aquí. Així int, estrella, x-- això és alguna altra ranura en memory-- que sap el que és això. Però va a emmagatzemar una adreça aquí. Així que aquest seria com-- en aquest cas, el que, s'emmagatzema a 0x1-- el que s'emmagatzema en la direcció que el nostre punter es manté, ha de coincidir amb el que hem designat. Així que en 0x1, en aquest cas, això és x. Això només pot ser mai una int mentre estem utilitzant això. 

De la mateixa manera, si tenim 1a altra, qualsevol que sigui la direcció es guarden amb un i té a ser una mateixa cosa char-- amb z. De la mateixa manera, cada vegada que es tractar de fer INTX és igual a 0,4, que va a cridar a vostè i ser com no, vas dir que volies 1 int. Això se suposa que és un int. Deixa de tractar de fer que sigui un flotador. 

Així que deixa que les coses siguin el que volen ser. Deixeu que les coses siguin ells mateixos. Així que alguna cosa gran està a només qualsevol que sigui el tipus de punter que és, aquesta és l'única que pot emmagatzemar allà. D'acord? Amb la pràctica, com amb la setmana passada, tot sembla molt amable de abstracte. Anem a fer una mica de pràctica. Ha de tenir més sentit. 

Així referència i dereferencing-- és realment important per obtenir aquests recta. Encara he de refrescar de tant en tant. I jo sóc com espera, el que un és el que vull? Així que el signe realment donar que la referència o l'adreça de. Per tant, torna la direcció en memòria de quina variable s'emmagatzema. Així que tornarà realment a vostè 1 hexadecimal, mentre que eliminació de referències que realment es va a donar les dades que s'emmagatzema allà. D'acord? Així que anem a veure un exemple molt ràpid, o en realitat fins a la pròxima. 

Okay. Així que hem de pensar realment acuradament sobre això. Així que aquí tenim algun sencer x. Vaig a tractar de dibuixar aquest potser de les meves habilitats. Així que anem a tenir aquesta ranura x. I hi ha el emmagatzematge de cinc. La seva adreça és 0x4. Fresc? Tot bé. 

Així que ara tenim aquest punter. Va ser per aquí. I el símbol d'unió ens dóna la direcció d'alguna cosa. Així, en aquest cas, és l'adreça de x. Quina és l'adreça de x? 04-- i aquest punter és a 0x08. Fresc? Així que vostè pot pensar en això punter, 04, només assenyala cap aquí. I es diuen punters perquè a mesura que més en això, vas a veure que apunta a les coses. I a una quadra apuntant a un altre bloc farà molt més sentit. Així que aquí són dos. I després tenim alguns còpia, que és 0x0C què--. I es va a eliminar la referència del nostre punter. 

Així que el que està dient és OK, aquí està el nostre punter. El valor s'emmagatzema és 0x04, ¿I què que està dient és anar a aquesta adreça i digues-me el que està en ell. Així que això és efectivament el que aquesta fletxa està fent. Vostè pot pensar en això com la seva estrella. Així que bé, quan fem estrella, que significa seguir. Aneu a aquesta adreça. I això és, bàsicament, només després de aquesta fletxa per a aquest tros de memòria. I ens donen el que hi ha en ell, que és 5. És per això que la nostra còpia és igual a 5. Això té sentit? Em necessita ningú per anar a través de que de nou, o més lentament? Vols que me'n vagi a través d'ell una vegada més? Okay. Anem a tornar a dibuixar de nou. Quan vam començar, tots estem d'acord que tenim algun tros de memòria que és una variable x que ens vam proposar igual a 5. Nosaltres no controlem on està en la memòria. Així que aquest lloc és només arbitràriament assignat. Bé allà? Okay. Després inicialitzem un punter a un int. És per això que se li permet apuntar a x perquè tenim un int a aquí. Tenim un altre tros de memòria perquè aquest punter és una variable com qualsevol altra cosa. Se li assigna arbitràriament una mica d'espai a la memòria. I el que s'emmagatzema és l'adreça de x. Ampersand significa direcció de x. Llavors, ¿quina és la direcció de x? 

AUDIÈNCIA: És zero-- ALTAVEU 1: 0x04. Així llavors-- últim. Tenim alguns copy-- de nou només una altra variable. Així que anem a assignar un lloc arbitrari. I nosaltres desreferenciar nostre punter. L'estrella vol dir anar a la direcció emmagatzemada en el meu punter. Digues el que hi ha. Així que la direcció emmagatzemada en el nostre punter és 0x04. Així que anem a aquesta direcció. Està apuntant a aquesta direcció. Què hi ha dins d'aquest bloc de memòria? És un cinc. Així que això és el que nosaltres assignem la nostra còpia. Tothom bé? Refredar. Imatges nou--. 

Així que el seguiment dels valors aquí-- Estic deixarà que vostès pensen sobre això. Podem treure una altra foto. Però vull que vostè provi i la raó a través d'això pel seu compte durant un minut. 

Com que no donen nosaltres una adreça d'exemple, Jo només vaig a fer x-- signe el que hauria d'ajudar a impulsar a casa. Ampersand significa direcció. 

Així, en el primer, tot el món anar amb la primera línia. Alguns x five-- algun conjunt ranura aleatòria en la memòria. Int indicador de l'estrella és igual a la direcció de x, oi? Punter estrella Int crea aquest bloc, l'anomena el punter, i assigna a la direcció de x. Sóc terrible en símbols d'unió. 

Ara el que estem fent és que diem Acceptar, suprimir la referència del nostre punter. Així que anem bé, el que està en el nostre punter? És símbol d'unió x. Anar a ampersand x i reassignar. 

Així que ara, signe x serà 35. Així que, bàsicament, quan estàs eliminació de referències, que vagi bé. Vostè serà el dibuix foto com aquesta. Vostè serà el dibuix les seves fletxes sobre on és. Així que anar a aquesta ranura a la memòria i, o bé dóna'm aquest valor de nou, o alterar-lo. En aquest cas, pel fet que estem en aquest valor, estem assignant a ser 35. Mentre que en el passat un, si et fixes, ens van ser l'assignació del que era aquí a una altra cosa. 

Així que tenen aquest quadre impressionant. No és tan dolent. Vostès hi treballa. Vaig a trucar a terme en el tauler. Anem a omplir junts, d'acord? Així que agafa una mica de paper, agafar un soci, començar a treballar. Vaig a aconseguir un tros de guix. Com que serà molt. Okay. PROFESSOR: OK. Anem a començar amb la primera fila. Anem a començar aquí, llavors vostès potser pot treballar a través d'una mica més. Okay. és igual a b c així que el que és un? No és una pregunta amb trampa, t'ho prometo. 

ESTUDIANT: 4 vegades 5. 

PROFESSOR: 4 vegades 5. 20. Llavors, ¿què és b? ESTUDIANT: 4. 

PROFESSOR: I c? ESTUDIANT: 5. PROFESSOR: 5. I llavors aquest és només va a ser un signe, símbol d'unió b, ampersand c, oi? No està malament. És bastant simple. Okay. Així que la següent. A és igual a vegades c, en cas ningú estava familiaritzat amb això. Tothom coneix amb els temps és igual a? Bé, tot això vol dir: això és abreujada d'una és igual de vegades c. També pot fer-ho amb la divisió, amb l'addició, amb la resta. Vostè pot fer una iguals, o un punt a favor és igual a c significa que a és igual a un plus c, 1 menys igual c seria igual a un menys c. És només el sucre sintàctica. 

Per tant, en aquest cas, a és igual a unes vegades c ens ho donarien? Una vegada més, no és una pregunta amb trampa. 

ESTUDIANT: 100. 

PROFESSOR: 100. Canvia alguna cosa més? No Potser vaig a aconseguir finalment millor en els meus símbols d'unió. 

ESTUDIANT: OK, ho sento, com s'obté el 100? PROFESSOR: OK. Així que a és igual a una vegades c, així que una vegades c. ESTUDIANT: Oh, es fan servir una per al previous-- PROFESSOR: Sí. Així que aquests són els nostres valors més recents. Aquests són el que ha de ser utilitzant a mesura que avancem cap avall, a D'acord. Per tant, b és l'única cosa que canvia, no? Així que anem a omplir en tota la resta. B. Què és b serà? Ser o no ser. Llavors, ¿què està fent això? Quina és l'estrella pa fer? 

ESTUDIANT: El codi per a la ubicació de pa. 

ESTUDIANT: No, no del tot. Així que aquesta és una referència d. 

Estudiant: Llavors b és el valor de la mà de pa. 

PROFESSOR: Sí, així és pa la direcció d'una, oi? Així que està dient anar a on a és emmagatzemada i donar-li aquest valor. Llavors, ¿què és b? ESTUDIANT: 100. PROFESSOR: 100. Perfecte. OK, així que la PC és el que està canviant. Tota la resta es manté igual. Què és PC serà? Assignació simple. Pc és igual per randa, i el que és pa? 

ESTUDIANT: Ampersand a. PROFESSOR: Perfecte. Ara estem arribant interessant. OK, anem a trencar aquest un baix. En primer lloc, quin és B vegades c, perquè això és la part fàcil d'aquest un, oi? B vegades c és-- 

ESTUDIANT: 500. 

PROFESSOR: Sí, així que el que està fent aquest, Si és pb estrella, el que està canviant? 

ESTUDIANT: Què hi ha a ell-- PROFESSOR: Què hi ha a B? ESTUDIANT: Què hi ha a l'espai que el PP està apuntant. PROFESSOR: I PB està apuntant A-- ESTUDIANT: B. PROFESSOR: B. Així que l'única El que canvia és b, dreta. Així b vegades c, 500. Així que això és el que canvia ara. Refredar. Preciós. Vostès estan fent molt bé. Molt bé, trencant aquest un baix. C està canviant, no? Així que podem omplir en tota la resta. Anem a veure. Okay. Sabem que c serà la producte de dos nombres, no? Quins dos nombres, però? 

ESTUDIANT: A i C? 

PROFESSOR: Llavors a és adequat per a la primera. Així que estem fent referència D p d'una, oi? P d'uns punts a una, així que sabem que això serà 100 vegades més del que? Els temps el que fa punt PC a? Punts a un. Així que 100 vegades 100 és 10.000. Això té sentit? Refredar. Recta final, nois, última fila. Okay. Què està canviant en aquesta llista? 

ESTUDIANT: A. PROFESSOR: A. perfecte, per la qual cosa tota la resta pot romandre igual. Okay. I el que és una? Així que és un moment, ¿què? Això és pb estrelles. Així pb estrella vol dir que aquí està pb, pb a punts b. 

ESTUDIANT: 500. 

PROFESSOR: 500. Així que tenim 500 vegades 100. Això és 50.000. Sort! Mira això. 

ESTUDIANT: Per què tenim el & c de la last-- PROFESSOR: Ho sentim. ESTUDIANT: Oh, OK. PROFESSOR: El meu mal. Les porcions de l'escriptura. Tothom bé? No està malament, oi? Només es necessita una mica mentre que per a treballar a través. Si ho desglossem, entendre el que cada part s'està referint com A-- amb tot el que és, sí- descompondre a la petita problemes i després es recombinen, i vostè pot fer algunes coses impressionants. Hi ha les respostes, però ens van fer això. L'aritmètica de punters. Ah. Les meves mans són tots calcari. Així que sumar o restar int ajusta el punter per la grandària de l'tipus de punter. Recordeu com cada tipus té una mida diferent? Així com un doble o un llarg temps és el 08:04, però és int char és un. 

Llavors, ¿què vols fer és-- una cosa per recordar és només que la quantitat de la seva valor del punter canvia realment dependrà de la tipus de punter que és. Tothom bo amb això? Puc esborrar-ho? Estem bé? Impressionant. 

Així que si tenim algun punter que-- això serà: sóc farà que sigui un punter int. Emmagatzema això. Si hagués de dir punter més un, el que va a fer es va a actualitzar per la grandària d'un int perquè aquesta és la tipus de punter que és. 

Amb C, tot és molt estricte i regulat. El punter int va a actualitzar per la quantitat d'espai en un int prendria. Un int és de quatre bytes. 

Llavors, ¿què seria aquesta volta a? No ets més que afegir quatre a aquest. Ara el punter podria ser: D'acord. 

Així que si es tractava d'un char i ho vam fer punter més un, quin seria ara? Si started-- fent veure que started-- ara és 0x08. Ara anem a dir que es tractava d'un xerrades punter, i hem afegit una. ¿Què faria falta per canviar? Quants bytes és un char? 

AUDIÈNCIA: Un. 

ALTAVEU 1: Un. AUDIÈNCIA: Així 0x09. ALTAVEU 1: Així que seria de nou. Així que només una mica per recordar. Just quan s'agrega un, no és l'addició d'un a menys que sigui un char. És l'addició de quants bytes del tipus que és, és per això que tenim aquesta equació aquí. Així que és int vegades la grandària del tipus de punter. 

Així tenim l'exemple aquí. i va ser assignat a aquest valor, 0x4, quan ho vam fer ia més és igual a un. Què hi ha en ell, el que és en x, no canvia. El que sí que canvia és el que està en i. La direcció emmagatzemada en i actualitzat per quatre perquè hi ha quatre bytes en un int i és un punter int. 

Bé. Així que ara tenim un altre exercici. Així que la pregunta és què voleu imprimir. Alguna idea? 

AUDIÈNCIA: El nombre de personatges de gat feliç? ALTAVEU 1: Exactament. Així que, com amb la seva cadena. Tothom aconsegueix això? Volem que caminar a través d'ell? 

Sí, OK. Així que el que hem de aquí-- com això molt més. Jo no he de [Inaudible] ridículament. 

Així que tenim la nostra cadena aquí, gat feliç. Preciós. Hem algun comptador que estem no perdre de vista. Així que tenim alguns char * punter que només es fixa igual a STR. El que això fa és que és l'assignació d'algun punter l'inici de la cadena. Perquè estic segur, ja que es va esmentar en la conferència, els hem donat nois aquest tipus de dades anomenat cadena. 

Però en realitat són només cadenes una matriu de-- com char *. És un punter a un munt de personatges que són contigües a la memòria. Així que aquest només estableix que igual a qualsevol cadena és identificat per on el seu primer personatge. Així que això s'acaba posant algun moment igual al principi de la cadena. Tothom bé allà? Refredar. 

Així que aquesta és la nostra eliminació de referències de punter. Així que en realitat va a donar-nos algun valor aquí, en la nostra cadena que estem parlant. I estem dient tot el temps que no és nul terminador. Així que seguir endavant fins a arribar al final de la cadena. Actualitzi el seu punter per un. Així r, s'actualitzarà en realitat per un cada vegada, perquè aquest és un char, el char *. 

Així que passarà. Es va a actualitzar. Així que la primera vegada que això passa, que estarà aquí a les h. Es va a actualitzar. 

Serà un a. Serà una p, i, i així successivament i així successivament. Anem a actualitzar taulell. Quan arriba al final, només imprimeix fins a quin punt s'ha tornat. Sí. 

AUDIÈNCIA: Així Compte l'espai com un, oi? Okay. 

ALTAVEU 1: Penseu en això. Això és una pregunta-- 

AUDIÈNCIA: [inaudible]. 

ALTAVEU 1: No es preocupi. Això ho faig. Molt bé, així que l'únic que entendre és que amb una matriu, també es pot tractar com un punter perquè matrius són només taques contínues de memòria. 

Així que vostè pot tractar de la mateixa manera. Vostè pot manipular amb punters, també. Així que en comptes de fer, en aquest cas, la cosa anàloga seria array 0 és igual a 1. 

Però de la mateixa manera que una cadena es determina per l'inici d'on el seu primer personatge és, una matriu està determinat per on el seu primer element és. Perquè sabem, estem garantit, que aquests seran contínua blocs de memòria. Això és el que ens permet fer això. Sabem que estan contínua blocs de memòria. 

Així que en aquest cas, per eliminació de referències només matriu, que ens diu: Acceptar, aneu a l'inici de la seva matriu, que és aquí. Així que vostè pot configurar igual a un. I en aquest cas, sigui quina sigui la seva matriu tipus és, en actualitzar per un, això és igual que l'actualització al següent índex. Vostè pot fer això perquè vostè saber el que hi ha a la matriu. Per tant, sap quant Actualitza el teu punter, la qual cosa la direcció d'actualitzar a tan que vostè està en la següent ranura. 

Així que això és només una forma diferent de l'escriptura matriu 0 és igual a 1, matriu 1 és igual a 2, sèrie el suport 2 és igual a 3. És només una altra manera de pensar-hi. Com que són contínues blocs en memòria, pot fer referència a ells, ja sigui per la matriu notation-- que jo personalment trobar easier-- però potser que necessita per manipular- estrictament per les direccions de memòria. I aquesta és la forma en què ho faries. Una cosa així com una més de El millor que podria fer davant potser no alguna cosa que et en realitat va a implementar. 

Jo el faig servir en el 61. Vostès probablement no necessitis de preocupar massa. Però si vostè està interessat, tenir 61 anys després. Estem en els nois recta final. Jo sé, és llarga. Memòria Dinàmica Allocation-- així que sabem que un de les coses quan parlem durant la nostra primera secció junts, ens fixem en un canvi funció d'on estava fora de l'abast de la nostra funció principal. I estàvem passant en aquests valors que eren efectivament còpies. 

I un cop acabat d'intercanvi execució, que acaba de sortir d'una pila. Recordeu que tenim una apilar marc d'intercanvi. Deixa i als els valors se'n van amb ell. I se'n van anar. No podíem fer res amb ells i ens va entristir perquè no podem canviar els nostres valors. 

Però amb C, com ja he esmentat, que tenir una gran quantitat de poder sobre la memòria. Així que el que pot fer vostè és pot assignar les coses en el munt aquí que es quedaran allà fins vostè els diu el contrari. 

Són com nens bons. Es queden allà. No deixen. Es quedaran allà fins que estigui com, OK, pot anar-se'n. 

Mentre que les coses a la pila, que-- són com nens entremaliats. Ells només fugen quan vulgui ser-hi i després se'n van. Vostè no pot recuperar-los. 

Així que el munt és-- anem a parlar de malloc i lliure, que Estic segur que els nois sentit parlar en la conferència. I això és bàsicament una manera per tenir dades molt persistents. Així que vostè pot mantenir les dades al voltant de tot el temps que vulguis. MHM. 

AUDIÈNCIA: Pots definir el munt i la pila? Són com a llocs per a posar les coses? 

ALTAVEU 1: Així que són bàsicament sol-- són la forma en què ens referim només a la memòria. Així munt es col·loca just on memòria s'assigna de forma dinàmica, mentre que la pila es refereix més per a marcs de pila que són més central a la funcions que s'executen en realitat. Segur que no té control. 

La gran diferència, vostè té el control sobre el munt si vols. Vostè té menys control sobre la pila. La pila depèn de la funcions que s'estan executant, i l'ordre en el que són funcionen, i com es retornen les coses. Mentre que amb el munt, com anem a veure, es pot dir, OK, jo vull que aquest valor sigui voltant fins que et digui el contrari. No està autoritzat a desfer-se'n. No està autoritzat a anul·lar-lo. Vostè va a mantenir al voltant de durant el temps que jo et digui. Tens l'oportunitat de ser el cap en el munt, mentre que el stack-- potser si com Finagle el seu camí pot ser el cap. Però no del tot. I no deixa de ser la memòria. És només diferents maneres de referir-se a la memòria. 

Refredar. Així que amb això, com controlar la seva memòria. És amb malloc, que vostè va a arribar a utilitzar. Així que és només a curt per a l'assignació de memòria. Això és tot el que és. Hi ha un munt d'altres fresc funcions que tenen Alloc al final, i que representen diferents coses. 

Així que quan vostè necessita d'emmagatzematge que necessita per sobreviure a la seva funció actual, de manera que quan el seu actual funció fuig, vostè encara ha les dades que té d'ell, que voleu utilitzar malloc. Això va a inicialitzar en el munt. I com he dit i segueixo dient, podràs mantenir-hi fins que vostè li indiqui el contrari, que és l'important aquí. 

Així que una cosa a notar, i això és en general molt important, és que aquest sizeof és super útil fer servir ja que depenent del tipus de de la màquina que s'està executant, pot tenir quantitats variables de la memòria que es necessita. Així que sempre es vol utilitzar la mida del que que no és depenent de la màquina, perquè el seu codi serà executar en qualsevol màquina. 

I això és només part d'escriure bon codi. Si funciona en una màquina, però no qualsevol dels altres, Què tan útil va ser el seu programa? Així que un sempre vol vos d'usar i sizeof. 

AUDIÈNCIA: Així és que igual que la grandària de 10 polzades [inaudible]? 

ALTAVEU 1: Aquest és la mida de 10 punts. si. Així que la mida de sencers tornarà quant pot prendre int. O la mida de char, com Quant costa una sola presa Char. I a continuació, el nombre de blocs que és el que vols? 

Així que en aquest cas, volem alguna cosa que podem emmagatzemar 10 punts a. I va a treballar independentment de la màquina, la qual cosa és genial. Llavors, ¿quants bytes que en realitat li donarà? Matemàtiques ràpida. 

AUDIÈNCIA: 40. ALTAVEU 1: 40. Exactament. Així que una altra cosa gran. Punter o malloc poden retornar null. 

Així que de nou, sempre consulti al veure si es torna nul abans de tractar de fer res amb ella. Si tractes d'eliminar la referència aquest punter ara, que només va a segfault perquè et vas i provat tocar nul·la quan vostè no ha de tenir. Així que sempre comprovar nul·la. Un cop més, tot el que pot fer. 

Pot tornar null. Es tornarà nul·la si estàs bé sense espai, o per qualsevol raó es va topar amb alguns errors de memòria. De vegades només retorna un valor nul. Així que només cal comprovar per a això. Això és tot aquesta diapositiva està dient. I llavors el que tenim aquí és una crida a alliberar. Així que de la mateixa manera que si obrir un arxiu és necessari tancar un arxiu, si la memòria malloc, que Has alliberar-te de que la memòria. I vostès aconseguiran per fer coses realment cool. 

I hi ha un programa que es pot executar a veure si alguna vegada la fuga de memòria. Però no vol perdre memòria. És realment dolent. A només espatllar les coses. 

És dolent per a fer el mateix que la programació savi per a l'eficiència del disseny. Però també és només una mica de dolent per al seu equip. Així les coses simplement gratuïtes quan malloc ells. 

Vostès veuen el simetries aquí. Súper simple. Tot just lliure i després qualsevol que sigui el punter, qualsevol que sigui el nom de el punter és, i s'encarregarà d'alliberar per vostè. Refredar. 

Després tenim això. Així que només anem a caminar a través d'aquest programa. I després es fan vostès. 

Així que [inaudible] només principal. Així que tenim una mica de punter int *. Així que tenim un punter això va a celebrar sencers. I quants enters es va a celebrar? Només un. Mida d'un int. 

Verifiquem si punter és nul perquè És a dir, volem dir que no fer res. És dolent. Així és la impressió d'un cert error de memòria, el més sovint tornen 1, com vostès estan acostumats. 

I després tenim aquí, eliminar la referència del nostre punter. Així que això significa que anem a emmagatzemar alguna cosa en el lloc que ens ha donat. Int * punter, o malloc, retorna el direcció d'on a un costat aquest memòria per a vostè. Així que és bàsicament donant-li com-- si pensar en un munt de cases en un barri que vostè vol posar seus mobles a, malloc és com Acceptar, s'obté per anar a la casa de tres. I és que la dóna direcció de la casa de tres. 

Així que això ara mateix, aquesta botigues punter una adreça, emmagatzema l'adreça de casa. * Mitjans PTR, OK, estic a casa meva. Refredar. Necessito aconseguir algun sencer. 

Així que vostè està demanant a algú per donar-li mobles ara. Perquè pugui obtenir algun int. I ho posa en el punter on està assenyalant. 

I llavors, només s'imprimeix a terme, sempre que sigui introduïda. I de nou, la referència. Així que això és com vostè va anar a aquesta DIRECCIÓ I vostè va veure el que hi havia. Fresc? 

I després, per descomptat, ens alliberem del nostre punter. No us oblideu de alliberar el punter. No us oblideu de comprovar la nul·la. No us oblideu de alliberar el punter. Vostè ha dues coses que vostè recorda de això, o que ha de recordar. Sí. AUDIÈNCIA: [inaudible] coses així, el char * s. Com és que mai alliberem aquests? 

ALTAVEU 1: Hm? 

AUDIÈNCIA: Són aquells que, com cordes? Vostè va dir que les cadenes són igual que char * s, no? Llavors, ¿per què no ens alliberem cadenes? 

ALTAVEU 1: Només per lliure si vostè està mallocing. AUDIÈNCIA: Oh, si vostè està mallocing. ALTAVEU 1: Així que malloc i lliure són dues coses que sempre s'ha de tenir junts. f obert, prop de f, dues coses vostè ha de tenir junts. En ambdós casos, per comprovar nul·la. Sí. 

AUDIÈNCIA: Així és lliure només permetent una mica més per a ser emmagatzemats allí després de aquest programa l'ha utilitzat? 

ALTAVEU 1: S'acaba dient: Bé, he acabat amb això. No és necessari per mantenir-lo al voltant. En cas contrari, l'equip ho farà Igual que tractar de mantenir-hi. I llavors vostè can't-- s'executa en problemes de memòria més endavant. Un sempre vol alliberar perquè que li diu al seu equip, està bé, estic fet amb aquest lloc de la memòria. Vostè pot haver de tornar per a mi a fer servir més tard. Fresc? Sí. 

AUDIÈNCIA: Així que fem servir el% d només perquè un doble que va a tornar, o per què és- [inaudible]. 

AUDIÈNCIA: Es pot utilitzar% i? 

ALTAVEU 1: Podeu utilitzar% i. Per a qualsevol dubte d'última hora? Seguir endavant. AUDIÈNCIA: Només tinc una pregunta ràpida. Així que la variable ptr, Això és-- com, amb la int * ptr = malloc, això és només dient que és apuntant a un lloc en memory-- ALTAVEU 1: Vols [inaudible]? AUDIÈNCIA: --que és la mida de-- no, està bé. Però és només apuntant a un lloc en memòria que és com quatre bytes. ALTAVEU 1: Dret. Així malloc la mida de int diu, OK, jo vaig a anar a córrer fora, trobar quatre octets de memòria per a vostè. Quan troba que 4 bytes de la memòria, li dóna una còpia de la direcció d'on comença, i això és el que emmagatzema a punter, o PTR. Bé. Vostès miren menys confusa que la majoria la gent quan parlo de punter, així que em sento molt bé en aquest moment. 

Bé. Com sempre, vostès han de tenir tots aconseguit els seus qualificacions PSet2 per ara. Sé que hi ha hagut una certa wonky coses on diu, fórmula no és vàlida o alguna cosa així. Si vostè està aconseguint que, tots les seves qualificacions són vàlides del meu costat. Així que et puc enviar captures de pantalla de les teves qualificacions. Només m'ho dius a mi saber així si ets falta cap graus o alguna cosa no sembla tenir sentit. Vine a mi. 

He estat molt orgullós de tu nois ja, així que segueixin així. I tenir un bon descans de la setmana. Estic segur que vaig a veure una mica de que en hores d'oficina.