ANDI Peng: D'acord. Benvinguts a la quarta setmana de la secció. Fa un dia precios aquí a New Haven així que realment crec que l'escassa dispersió dels nens que es va unir a mi per a la secció d'avui, gràcies. Així que ràpidament, just abans que començar, l'agenda d'avui. Anem a anar a través d'una alguns anuncis breus. Tenim un horari molt boig que vénen en les pròximes dues setmanes més o menys, així que anem a anar sobre això. En segon lloc, ho sé topic-- favorit de tots Estic segur que això es va fondre la seva ment durant la conferència, no es preocupi, Encara espècie que no ho entenc. Està bé. Això va ser una broma. En realitat, jo ho entenc. Però m'asseguraré que vostès ho aconsegueix, també. Així que anem a passar un molt, molt bona quantitat temps parlant de punter d'avui. Com es pot veure, Candy xerrada és enorme avui. Estem realment va a mantenir que-- Sí, això és correcte. Seguiu prenent dolços. Vaig a passar a ells al voltant en aquest moment. No et preocupis. Intentarem de veritat per mantenir el sucre en la sang de les persones perquè aquest cervell es va a cremar alguns avui oxigen a causa punters són molt, molt difícil. Llavors anem a parlar sobre gestió de memòria que tipus de és en el mateix regne. I mourem a redirecció i arxiu I / S que són sintaxi just, agradable coses que hem de parlar. I després, finalment, estic va intentar una vegada més deixar com 10, 15 minuts per pset4. Això és degut als pocs dies, així que estem va realment amable de donar alguns consells útils si Ja es va iniciar en això. Fresc. D'ACORD. Així que alguns anuncis per aquesta propera setmana. Classificació. No sé realment en aquest punt quants de vostès nois estan realment en el meu et secció- bé allà? D'ACORD. Però, per a aquells de vostès que estan en la meva secció, només un parell comenta sobre qualificacions. En primer treball realment bo, de comentar. Aquells de vostès que no fan cap comentari, vostè saben qui són, ja que probablement té alguns punts d'estil dinged aquesta setmana. Només assegureu-vos que en la totalitat del seu programes afegeixen un parell de comentaris. Realment, l'estil és molt fàcil aconseguir punts correctes en el seu àmbit d'aplicació. Així que per a nosaltres, simplement fer Segur que ets una mica d'afegir una breu descripció en tot seus programes sobre el que estàs fent. Secondly-- això és un gran problema per una gran part del TA aquesta week-- passat així que assegureu-vos que hi ha la possibilitat de pujar a la carpeta correcta amb correctament programes amb nom. I la raó per la qual demanem això és perquè, en el curs d'anivellament, realment executar un script en el seu codi que descarrega automàticament tots els conjunts de processadors, corre proves d'exactitud en tots ells, a continuació, càrrega teves puntuacions directament en el llibre de qualificacions. No obstant això, en qualsevol moment, si anomenat incorrectament seu programa, cargols ell cap amunt tota la programa per a tothom. I així, legítimament, aquesta bella guió que hem escrit que fa tot això per a nosaltres, completament es bloqueja si no té el seu programa nomenat correctament. Així que només pujar a la correcta carpeta, haver-los cridat correctament, i llavors la vida és bona. Amb si els seus conjunts de processadors de tornada a vostès anteriors perquè em permet qualificar-los ràpidament. Sí. D'ACORD. I també parlarem sobre-- Yale té un molt, molt horari boig en aquestes properes dues setmanes. Així que aquells de vostès en Harvard, això no s'aplica. Però per a nosaltres, els nens encantadors de Yale tenim cosa que es diu caiguda break-- sento, Harvard-- on tenim cinc dies de descans de l'escola. I si bé això és preciosa, tipus de fa malbé el nostre ritme pset perquè conjunts de processadors s'han Dijous, divendres. I pel que si no som aquí Dijous, divendres, que no pot tenir una feina per a vostès degut dijous, els divendres. Així que el que farem és-- estem com el 99% segur que això és el que està passant, pot haver alguna canviar, però crec que és subtle-- és que anem a tener-- aquesta setmana és normal. Així que tenim la nostra secció de Dimarts, seguit de les hores d'oficina tota la resta de la setmana i després pset4 venç el divendres. Llavors, com vostès saben, com Els vaig recordar nois la setmana passada, tenim la nostra prova 0 pujant dimecres. I així, sent un estudiant a mi mateix, Sé que molt pocs de vosaltres nois en realitat estar treballant en pset5 els dos dies abans de la seva prova. Llavors, què anem a probablement acabar fent és, que la nit de dilluns, anem en realitat, 5: 30-07: 00, tenir una breu ressenya període de sessions sobre els temes coberts. No queda clar si es tracta d'un revisar sessió o un Q & A. Serà una espècie d'opinió forma en què anem a cobrir alguns temes d'interès per a vosaltres. I després el dilluns i dimarts a la nit d'aquesta setmana 8: 00-11: 00, tindrem horari d'oficina. Aquestes hores d'oficina va més probablement més de simplement entrar, demanar TA seves preguntes sobre qualsevol concepte que vostè està confós sobre, i van a classe d'anar amb vosaltres i conceptes de revisió de la prova. Qüestionari 0, si estàs en la Dilluns, dimecres secció, serà el dimecres de durant class-- dimecres durant la classe. I llavors, si vostè està en el Dimarts, Dijous secció, serà també durant la classe dijous. Realment no es pot triar quina la que vas. Si vostè és un dilluns, dimecres, has d'anar a dimecres. Si estàs en dimarts, dijous has d'anar a dijous. Però després d'aquella nit, nosaltres el personal és encantador, es tenir una prova gegant classificació de festa en que arribarem a les seves puntuacions de nou a vostè Aquella nit. A quina hora? Incert, qui sap, però ho farà estar de tornada en el termini de 24 hores perquè vostès amb sort tenir una mica de retroalimentació per al divendres. I després tenim una setmana molt boig. Així pset5 és una de les conjunts de processadors més difícils de l'any. Així que ho sento nois. El que anem a tractar de fer és que tindrem algun suport real d'aquest cap de setmana. Perquè, com vostès poden veure, el pset s'ha de abans de les vacances de tardor. No tenim suport a nois durant les vacances de tardor i pel que realment tipus de vull expressar això com, anem a acabar amb això, treballarem molt, molt dur aquestes properes dues setmanes, reben aquest qüestionari i afegir aquests dos conjunts de processadors fets amb i després vostès tenen un bon relaxant set dies sense pensar en CS. Així que perquè a succeir, és probable que estiguem va a moure la meva secció per a les tardes de diumenge. Es va filmar el que no es preocupi si vostè no pot venir. Però la filmació en línia ho farà ser-hi i accessible perquè vostès tenen Diumenge, Dilluns, dimarts, per treballar en pset5. I llavors és caiguda trencar-se i cap CS i després tornem i la seva tornada a la rutina. Però serà un setmana meravellosa per a les vacances de tardor i realment volem que sigui el més estrès gratis per a tothom com sigui possible, que És per això que ens vam traslladar al conjunt de processadors que s'ha de abans de les vacances de tardor en lloc de després. A causa és-- Vull dir, em sento una mica com en contra del propòsit de tenir la data límit després de les vacances de tardor si hi ha cap suport de totes maneres durant les vacances de tardor. Així que és rather-- Crec preferim centrar-nos en això ara. Algú té preguntes sobre aquest horari? Qualsevol cosa confusa? Sí. AUDIÈNCIA: Tenim encara tenim una conferència sobre el 21? ANDI Peng: Sí. Així que el dia 21, que serà una conferència que és en viu des Harvard. No sé si David és el rodatge o si en realitat està donant conferències, però que estarà disponible en línia per a vostès a l'accés. Així que assegureu-vos de tallar 1 hores en algun lloc de les vacances de tardor així que vostès poden agafar en aquesta conferència. Sí? AUDIÈNCIA: Sí. Ho sento. Tinc ací un couple-- ANDI Peng: No es preocupi. Aquí, prendre una mica de caramel. AUDIÈNCIA: Hey, em va cridar això. Així que per recapitular, no demà, però el Dimecres després d'això, tenim un concurs. ANDI Peng: Correcte. AUDIÈNCIA: I va ser-- ¿Quin és el format de la prova? ANDI Peng: Oh. Així t'enviarem un correu electrònic que cobreix tot el més en profunditat. Però, en essència, que només cobreix temes bàsics ja coberts en la primera meitat del semestre. Tindrem sessions de revisió i pregunta i respostes pel que no es preocupa per això. Però anem a anar sobre això també. AUDIÈNCIA: ¿Va a ser, ens portar als nostres ordinadors i codi allà- ANDI Peng: No. Va a ser que vostès escriuen i respondre a les preguntes de la mà. AUDIÈNCIA: Oh. ANDI Peng: Així que anem a donar pràctiques fora i coses així que vostès poden voler anar potser enrere i reescriure Mario amb la mà just per assegurar-se que vostès tenen una idea de com fer-ho. Perquè a vegades quan escriviu per que la mà oblidar comes i altres coses i això és molt dolent. AUDIÈNCIA: ¿No serà [inaudible]? Igual, que està rebent un punt i coma en tu-- ANDI Peng: Sí i no. Parlarem més en profunditat sobre com el disseny de qüestionari és i com anem a grau. Però, en essència, només sé que el format general serà vostè nois, ja sigui interpretant code-- respondre a les preguntes bàsiques. Si jo li vaig preguntar, què és una biblioteca? Vostès han de saber el que una la biblioteca fa i escriure això. O es em permet dir-ho, escriure un programa que imprimeix Hello World a la pantalla. Vostès escriuria, int main void printf hola coma món. Sí. AUDIÈNCIA: ¿Així que no va estar en qualsevol lloc [inaudible] nivell de dificultat del problema estableix? ANDI Peng: No. No. Ens won't-- si. Escriu la totalitat de la joc de 15 a 20 minuts, vaja. No, no serà això. No. AUDIÈNCIA: OK. Així que aquest és el dimecres. Durant aquesta setmana també han creat el problema més difícil? ANDI Peng: No. Així que el problema el va posar per el dia abans de les vacances de tardor. El schedule-- el correu electrònic va ser enviar realment fos Fa 20 minuts respecte a tot això. Així que vostès simplement consultar el seu correu electrònic. Serà allà. Sí. No et preocupis. Fresc. Teniu alguna pregunta generals sobre anuncis, classificació, qüestionaris, Abans d'aprofundir la dreta en punters que consumirà la major part del nostre temps secció d'avui? Fresc. Tot bé. Així ho van fer vostès tots Veure aquest lovely-- No sé el que ells diuen. El que l'animació amb plastilina va volar a si mateixa, ja que no utilitzar un punter correctament. Bé, el programa va probablement esclatar a si mateixa si no utilitzi punters correctament també. Així que farem Segur que això no succeeixi. Avui anem a fer una mica de diversió punter. Vaig a anar sobre les coses tan bé com crec que és possible en un marc de temps petit. Però hi ha tantes coses per cobrir que realment vull que vostès, si vostè no entén alguna cosa, que no només em va permetre seguir endavant. Perquè si no ho fa entendre alguna cosa, és probable que no va a entendre res del que dic després d'això. Així que per favor em parar i fer una pregunta. A causa de que tota la classe de boles de neu junts. Igual que, punters condueixen a plom de memòria en altres coses. I pel que si vostè no entén punters, aturar-me i nosaltres ho resoldrem i la vida va a estar bé. Fresc. Llavors, quants de vostès en la conferència, quan David va esmentar punters, seus cervells tipus de convertir en gelatina? Sí. Bé. Anem a tractar de de-Jell-O el teu cervell avui. Anem a realment sistemàtica passar pel que exactament un punter és, el que fa, i com els utilitzen. Així que tot el pointers-- normalment amb les variables hem estat utilitzant en la codificació, com variables com nombres sencers o cadenes o flotadors, tots són essencialment un valor que se'ls assigna així com una adreça que apunta a aquest valor. Així que vaig a treure això ara mateix. Gairebé no tenim guix però això està bé. Així, per exemple, normalment la forma en què hem estat utilitzant variables és que vam crear el nom de la variable de tipus int, anem a només dir. Així que aquí tenim int x i estem inicialitzar que int a 50. Així que aquí, en aquest bloc de memòria en la nostra ordinadors que hem emmagatzemat un nombre de 50. Llavors, on punters entren en joc és que l'equip itself--, aquí, físicament en el disc dur en la RAM del meu computer-- que només té una quantitat finita de memòria. No es pot mantenir l'emmagatzematge de les coses a la part superior de les coses a la part superior de les coses i tenen tots ells. Així que la forma en què dinàmicament assignem memòria per poder emmagatzemar el que volem i accedir-hi, és per tenir punters. Així que imagina't en el seu espai en la memòria, a la dreta. Si aquest és el RAM de la seva ordinador, vostè té aquests petits trossos o blocs o bytes de memòria en which-- aquests són només poc blocs que han estat assignats a terme en el disc dur o la memòria RAM del seu ordinador, i dins de cada un d'aquests blocs pots emmagatzemar diferents coses. Així, per exemple, un array en aquest exemple aquí és un byte que és que consta de vuit bits. El nombre canvia depenent del sistema operatiu del seu ordinador. Per exemple, quants de vostès tenen sentit parlar de 32 bits enfront de 64 bits de funcionament sistemes? Exactament. Així que tot el que està dient és que el memory-- que la forma en què l'equip gestiona la memòria és diferent. Què és això que és molt important entendre quines funcions si mateix en lloc de memòria de prestar atenció als números. Així que en realitat no importa el gran que aquesta matriu És a dir, només hem de importa el gran que què necessitem un int a ser, què tan gran Necessitem una cadena ser, què tan gran és un punter? D'ACORD. Així que serà molt , La informació densa de pesada. Vaig a donar a vostès un parell de moments d'alleugeriment d'historietes aquí. Tots Vostès haurien de poder entendre això ara. Perquè sabem que punters són direccions, i els que són diferents de variables. D'ACORD. Fresc. Acudits CS són els millors, no? Així que la forma en què anem sobre la creació d'un punter és un tipus molt específic de sintaxi. Igual que amb la creació de qualsevol tipus de variable, és serà una específica Sintaxi fem servir per crear-la. Així que quan es declara cap punter, un punter és només essentially-- Crec que l'important part de punters és que, mentre que una variable té tant un valor i una direcció, un punter és una adreça. El seu valor és una adreça. Així que és una adreça emmagatzemada en una direcció diferent. Si això té algun sentit. Anem a repassar això amb més detall, però aquesta és la forma genèrica de què-- de com s'emmagatzema una impressora. Així que la forma en què es crea un punter és fent qualsevol tipus de dades que el punter es va ser referència i llavors-- amb el star-- i després el nom del punter. Així que aquí, si volíem per crear un punter que apuntant cap a un nombre sencer, i ens volia el nom del punter sigui x, faríem int estrelles x. Sí? AUDIÈNCIA: I pel que si la següent línia que fer int x, int serà l'estrella de x indicar la ubicació de la x estàs definint després? ANDI Peng: Molt bona pregunta. Anem a repassar això en una parella llisca més tard. Sí. I després el mateix amb carbó i les mateixes carrosses cosa. Només sé que en aquest moment hem creat un punter, que en realitat no hem fixat de la mateixa manera res encara. En realitat no hem referenciat ella. El mateix aquí quan es crea una variable, que ha creat el nom de la variable, que en realitat no ha establert un valor a la mateixa. El mateix aquí. D'ACORD. Llavors, ¿com es defineixen els valors dels punters? És referenciant i eliminació de referències. Així que la forma en què podem referenciar 1 varia-- un punter, en essència tornem la direcció en la memòria dels quals s'emmagatzema una variable. Així que si jo tingués un pointer-- vaig a dibuixar aquesta vegada arribem a la següent diapositiva, però només sé que, en essència, la i- el signe i tot el que la variable-- fa és dir-li a la direcció d'on alguna cosa s'emmagatzema. I dereferencing és el contrari d'això, que és només l'estrella. L'estrella simplement li dóna la real les dades emmagatzemades en aquesta direcció. Així que un li dóna l'adreça emmagatzemat en una direcció, l'altre li dóna la real valor emmagatzemat en la direcció. Així que els dos d'ells donen que coses diferents. Un cop més, els portaobjectes es tots en línia de manera que no es preocupi si vostès no poden copiar això en el temps. Així que anem a fer una ullada en aquest exemple. Així que tenim un gegant matriu de memòria aquí, oi? Quan només tenim blocs de memòria o bytes de memòria, en el qual podem emmagatzemar diferents coses. Diguem que es tracta de la punts de direcció en la memòria. Així que cada vegada que tingui - veure el 0x, tot el que està dient vostè és que això és un dígit hexadecimal. Com vostès saben, els números podria basar-se en diferents bases. Base 10 és la forma en què normalment interpretar els nombres. També hi ha base 2, que és binari. I en aquest cas, hexadecimal és base 16. És només una forma diferent de dir de zero a 10-- o zero a nou i després també A, B, C, D, E, F. També fa referència a un nombre diferent. David es va acostar això en conferència breument. Si vostès són confós, busca-ho a google. Hi ha maneres molt fàcils d'aprendre el que és un dígit hexadecimal és. Tot el que és realment rellevant en aquest moment és per a vostè nois que saben que una dígits hexadecimals en C usted-- diu que típicament li diu que és un punter. O això és una adreça. Així que en aquest exemple aquí, int x és igual a 5. Estem creant un integer-- Ho sentim, una variable de tipus sencer i estem inicialitzar a 5. Així que aquí a la nostra targeta de memòria, podem veure que x està en la direcció de 0x0 i el valor que tens emmagatzemat a l'interior de la mateixa és de 5. Això hauria de donar-li sentit a tothom, no? D'ACORD. I llavors el que hem fet en la segona línia de codi és que hem creat un punter de tipus int. Això és el que el int indicador de l'estrella està fent. I això és igual que el signe x és que li dóna l'adreça d'alguna cosa. Així que la direcció de x en aquest exemple és 0x0. I perquè la direcció està sent emmagatzemat en aquest punter. ¿Això té sentit per a tothom? Així que pensar en esto-- pensar en pointers-- aquí en Yale tenim un sistema d'apartat postal on cada estudiant té un mailing enfront d'on es pot anar al soterrani de LW i vostè pot simplement anar i agafar tot el que necessita d'aquesta direcció. El mateix està succeint aquí a un ordinador. Vostè té aquests bytes de memòria que pot emmagatzemar informació en, però per saber què peces d'informació partit del que estàs tractant de trobar i on, necessita un punter que et diu com anar-hi. Així, per exemple, per a mi, el meu apartat de correus, Tinc un nombre de cinc dígits específic. Aquesta és la meva adreça. Així que puc anar físicament a la memòria, Puc mirar en la direcció, Puc anar a la casella de correu i accedir a les dades a l'interior. ¿Això té sentit per a tothom L'ordinador és essencialment fent exactament el mateix. Així que tot punter està fent és que és només la creació d'una memòria i les seves dades de memòria és en realitat la direcció d'una altra cosa. Llavors vostè pot anar a buscar això. Cada un de bo? Tothom bo amb mi fins ara? D'ACORD. Fresc. Tot bé. Així gairebé el mateix que abans. Així que tenim, primer, una variable crida x en què cas-- Vaig a canviar aquest valor a 5. Diguem que la direcció d'aquesta memòria és 0x0. 00. Gran. Així doncs, en el nostre segon línia de codi, que estem crearà un punter anomenada punter ptr. I la direcció d'això, anem a Només cal dir que és 0x01 a la memòria. I realment volem almacén-- el signe x li dóna l'adreça del que X era. I la direcció de x era 0x00. Així que aquest punter ara en realitat té la direcció emmagatzemada com el seu valor del que X era. Tothom amb mi fins ara? Fresc. I llavors, la forma en què hauríem de copiar, és si volem declarar i inicialitzar un altre bloc de memòria de tipus int. Oi? Això seria un int. Es diria còpia. I vas a get-- el l'indicador de l'estrella li dóna les dades reals d'aquesta direcció. El signe et dóna l'adreça, l'estrella que dóna les dades. Així que les dades de punter. Aquest punter apunta a 5. I així aquesta funció aquí-- l'estrella pointer-- va, aconsegueix el que està en aquest bloc i ho emmagatzema aquí. Tothom clara sobre com va succeir això? Allà- Així que els dos operadors de la dreta el signe i la star-- acaba de fer coses diferents quan s'utilitza en punters. Un que té la direcció, un vostè obté el valor real. Així que assegureu-vos que quan vostès estan codificació que no confondre els dos perquè són molt diferents. Aquí tenim un bon exemple d'un 0x01. Aquesta és una molt agradable nombre petit per recordar. En l'equip real vostè va a tenir un nombre cul gegant que és una cosa això no és agradable, no és agradable. Serà un valor escombraries. I així va realment, realment desordenar els seus programes. És molt important ara que tenim els fonaments sota per què-- similars, el que passa físicament quan s'està executant aquests blocs de codi. Everyone-- sí? AUDIÈNCIA: Llavors int x és igual int còpia? ANDI PENG: No, perquè, en aquest cas, int x-- el valor de x-- és igual a 5, oi? I després int còpia és igual a 5. Així que si anés a equiparar- entre si perquè són nombres enters, sí, s'avaluarien en true. Però si fossin cadenes en memòria, com el que David va fer durant exemple, això és diferent perquè que estan referència les adreces dels llocs de la memòria i que equivaldrien a fals. Així que aquí seria cert perquè estàs comparant directament values-- integers-- però en els altres que ets punts de referència. A causa que una cadena està en una matriu, i tot-- parlarem d'aquesta tarda- però matriu és essencialment només un Punter a un grup de caràcters en la memòria. Així que aquests són una mica diferents. Però en aquest cas, sí, vostè podria fer això. AUDIÈNCIA: Pot explicar la direcció de la còpia? ANDI Peng: Sí. Així que això és el sol-- no emplenar un valor però és només una mica a l'atzar una altra valor de les escombraries que no ens preocupem. Perquè una vegada que s'iniciï el programa t'adones que no ho fem realitat m'importa el que la adreces reals són, només hem de saber el que està en les direccions. Sí. AUDIÈNCIA: L'estrella al costat de int al segona línia, que és diferent no sigui: ANDI Peng: Sí. AUDIÈNCIA: --el desreferència i fer referència a l'estrella? ANDI Peng: Sí. Així que els autors de C-- qualsevol decidit a escriure el llenguatge de la C-- no era molt intel·ligent. No eren molt intel·ligents en l'intent esbrinar per què hauríem de fer això. Si fos jo, ho faria sens dubte utilitzar dos personatges diferents. Però es va decidir utilitzar la mateixa. Així que l'estrella després d'un int, que li diu a l'equip que vostè està a punt de crear un punter. Però si vostè està tractant d'eliminar la referència alguna cosa-- en altres paraules, anar a l'adreça i tirar les dades de somewhere-- l'estrella s'utilitza de manera diferent. Així que vostès acaba de tenir cura amb no fer malbé els dos usos. Fresc. Sí? AUDIÈNCIA: Llavors, només per repetir a assegurar-se que estic following-- ANDI Peng: Totalment bé. AUDIÈNCIA --al costat esquerre de aquesta diapositiva, fem una cosa que sabem. Declarem un enter [Inaudible] que són igual a 5. ANDI Peng: Sí. AUDIÈNCIA: Correcte. I després tenim una cosa int estrella i que diu que, d'acord, una cosa així com que declarar un sencer, ara estem declarant un punter. ANDI Peng: correctament. Correcte. AUDIÈNCIA: Oi? I el nostre punter ptr. ANDI Peng: Sí. El nom del punter és ptr. Punter. AUDIÈNCIA: I llavors iguals nx que simplement li diu a C que vol accedir al valor en sencer x-- el valor que sencer x va ser assignat. ANDI Peng: Aneu amb compte perquè signe x realitat diu usted-- l'equip que voler estirar la direcció del que x és. Així signe et dóna la direcció, estrelles, li dóna el valor. AUDIÈNCIA: Llavors volem la direcció. Diguem que x era at-- ANDI Peng: En realitat, saber el que x és, oi? Perquè sabem que x era-- estic inventant això, però anem a dir, arbitràriament, era 0x00. Oi? Així que sabem que la direcció és 0x00, i així quan anem i ampersand x, sabem que això d'avaluar tot 0x00. És per això que ens van guardar que com el valor de la nostra punter. Això té sentit? AUDIÈNCIA: Sí. I còpia va a ptr-- dereference ANDI Peng: Correcte. AUDIÈNCIA: -que és un punter que hem declarar que ens el compte direcció del nombre enter x. ANDI Peng: Sí. AUDIÈNCIA: I en aquest un cas, ptr estrelles és igual al valor de x que és igual a 5. ANDI Peng: Correcte. AUDIÈNCIA: Cool. I això és una manera més senzilla d'aconseguir això, o és que l'únic manera- ANDI Peng: Així que ara mateix no sembla molt lògic per a nosaltres passar tot aquest temps fent aquesta cosa molt complicada quan tot el que hem fet és simplement crear de dues sencers amb el valor de 5, oi? No té sentit. Però una vegada que anem a repassar assignació de memòria i- anem repassar per què això pot ser pràctic i útil més endavant. Confia en mi quan dic que no ho fem només crear aquestes funcions arbitràries per a vostè nois aprenguin perquè som tractant de ficar-se amb vostè. Hi ha realment utilitza per a tots ells coses i anem a parlar d'ells. AUDIÈNCIA: Awesome. ANDI Peng: Sí. AUDIÈNCIA: [inaudible]. ANDI Peng: Bona pregunta. AUDIÈNCIA: [inaudible]. ANDI Peng: No ho és. Realment no ho és. AUDIÈNCIA: Variables --Dos que també iguals [inaudible]. D'ACORD. ANDI Peng: Sí. D'ACORD. Abans de passar, és clar tothom? Sé Taylor, que va rebre en una mica tard. Està bé. Està en línia. Vas a veure els primers 20 minuts i estaràs bé. D'ACORD. Fresc. Tot bé. Així que això és essencialment una espècie de cosa similar que simplement ho vam fer. És només en una forma gràfica. Si es va a realitzar un seguiment del que que acaba de succeir, int x és igual a 5, tot el que hem fet en aquest punt és crear una variable anomenada x de tipus int. Anem a emmagatzemar el valor de 5 en l'interior de la mateixa. No hi ha cap punter perquè no tenim en realitat creat un punter però, ¿no? I després, en la següent línia, punter int estrella, aquí és on som en realitat crear físicament el punter i estem establint que igual o referències el punter, amb signe x. Que és on arreu memòria aquest va passar a ser. Jo en realitat no molestar que constitueixen un valor en aquesta ocasió. Però en aquest cas, aquest punt que seria igual a això. I llavors allà baix, l'estrella punter és la desreferència. Aquí és on som tirant de la informació. Així que el valor en x és en realitat serà igual a 35. Així que en aquest punt, tenim essencialment simplement reiniciat a 35 x sense tocar x. Només a través del punter que apuntava a x, en realitat podem canviar el que x era. Vaig a treure això cap a fora també. Així que aquí hem creat alguna direcció aleatòria aquí. Diguem 0x00 nou. Diguem que aquesta és la direcció. I hem creat un sencer anomenat x i el valor que he assignat a es 5. En la segona línia, int pointer-- de manera que ara que hem aconseguit aquesta segona cosa aquí es diu un pointer-- i anem A-- diguem és alguna altra adreça de memòria aleatòria. Així que anem a establir aquest igual al que era. I aquest punter va apuntar cap al valor de x I després, si canviem ell-- si fem indicador de l'estrella, això va a la valor del nostre punter. En aquest cas, es va a realitzar un seguiment Aquesta fletxa a aquest valor de x i que canviarà a 35. Efectivament, només canviem x x sense tocar. A través de punters només fan referència, podem anar i canviar el valor de x. Això té sentit? Així d'aquesta manera, podem realment canviar el nom i valors rechange i reassignar a coses que no vam fer realment fer nosaltres mateixos. ¿Això té sentit per a tothom? Fresc. D'ACORD. Gràfic tan complex aquí. Anar línia per línia. Essencialment, acaba de fer l'exacta el mateix que jo acabo de fer. Abans de passar, em realment vull fer només que tothom és molt clar en això. Així que aquí, el codi que tenim és int a és igual a 3, b és igual a 4, c és igual a 5. Per això hem creat tres enters nom a, b i c que són igual a 3, 4 i 5. I llavors estem creant 3 punters aquest punt a cadascuna d'aquestes variables. I ara anem per repassar essencialment el que passa quan s'opera en ells. Així que treure'ls. Prengui un full de paper-- no ho faig saber si vostès tots tenen paper, però aquells de vostès que no ho fan, potser demanar prestat a aquells de vostès que ho fan. Prengui fulls de paper i anar línia per línia. I en cada operació que vostè ho fa, Vull que vostès escriuen realment a terme ho és a, b i c en aquest punt. ¿I quines són les direccions, el que són els punters que apunten a una, bic en aquest punt? I llavors espero que això serà amable del seu pas nois a través de la forma de pensar dels punters. No anirem a través de tots ells. Potser et donaré five-- com tres minuts. Començar a treballar en els primers. Oh. Vaya. AUDIÈNCIA: En la segona línia, per què no és l'estrella variable [inaudible]? ANDI Peng: Recordeu que en operadors, en la primera setmana, parlem de com si vostè fa iguals, a més, això només significa una és igual a un plus c. En aquest cas-- pel que aquest és un altre forma en què es podria utilitzar l'estrella. A més de referència i declarant punters, recordar que també significa la multiplicació. Així que en aquest cas, que acabava de sigui a és igual a vegades c. Això és només tan diferents forma d'escriure això. AUDIÈNCIA: una és igual a vegades c. ANDI Peng: Sí. AUDIÈNCIA: Què vol dir si diu una carta signe? ANDI Peng: mitjans Ampersand vas a que-- ets anar al lloc el punter és apuntant i tirant de la direcció. Així signe et dóna l'adreça, estrelles, li dóna el valor real allà. AUDIÈNCIA: Som sobre la base de línia per línia? ANDI Peng: Ets sobre la base de línia per línia. Llavors només ha d'anar línia per línia un temps i llavors-- que no s'han de preocupar de acabar tot l'assumpte. Anem a tractar d'aconseguir a través de potser dos, tres línies i després anem a convocar i acabem això. És totalment bé si es perden vostès. Aquest és un concepte molt difícil. Si vostès estan preocupats que la classe diu així com David estava dient, no ho fa. Estem arribant a la pic conceptual de dificultat i després es va a estar pendent negatiu. Així que nois està gairebé allà. Tenim un munt de caramels per aconseguir vostès a través de la gepa. Crec que més o menys després de la caiguda trenquem estarem sobre la gepa i la vida va a estar bé una altra vegada. Així que no et preocupis en absolut. Tot bé. Et vaig a donar 20 nois més segons per acabar. D'ACORD. Tot bé. Anem a prendre una punyalada en això. Com vostès em donen respostes, Jo només vaig a escriure en. I és d'esperar nosaltres-- puc? En realitat no puc escriure-la. Vaig a dibuixar a la pissarra. Així que aquí en aquesta primera línia tenim una d'igual a b c estrella. També Elliot va plantejar una molt, molt bon punt. Perquè es va oblidar que a més de les dues formes en què poden utilitzar el símbol de l'estrella, en realitat hi ha una tercera via. Multiplicació. I així que no es confongui perquè que és la primera forma d'usar una estrella. És només dient l'ordinador que estic a punt de crear un punter. La segona manera de fer l'estrella del punter, que diu el punter que desitja accedir a les dades en aquest punter. I després, per descomptat, no hi ha una simple multiplicació entre dos nombres que et diu que vull multiplicar els dos. Així que hi ha un munt de maneres podem utilitzar el símbol de l'estrella. No es confongui. Només assegureu-vos que vostè els individus enteneu exactament el que els tres d'ells estan fent. Així que en aquesta primera línia, 1 és igual a b c. Així que anem a anar a través del és una, el que és b, el que és c? ¿I quin és el punter d'un, el punter a b, i el punter de c? Quins són els tots igualant? D'ACORD. Així que vam començar amb un igual a 3, b és igual a 4, i c és igual a 5, oi? Així que després d'aquesta primera línia, pot algú em digui què és? Sí. Siéntase lliure per simplement cridar respostes. 20. Bé. Quin és b? AUDIÈNCIA: 4. ANDI Peng: Quin és c? AUDIÈNCIA: 5. ANDI Peng: Yay. Bé. Quins són pa, pb i pc? AUDIÈNCIA: 000.001 i 002? ANDI Peng: Sí. Així que tipus d'una pregunta amb trampa però no realment perquè aquí treure memòries reals. Però com que, per exemple, no ho fem realment saben el que aquests números són, només podem dir signe. Ni tan sols sé si pot dibuixar un símbol d'unió. És com-- com ho fas? AUDIÈNCIA: Com dibuixar un vuit. ANDI Peng: Igual que un vuit. Així. D'ACORD. AUDIÈNCIA: Bingo. ANDI Peng: Matant ell. Així Ampersand 1, només pot fer això. Perquè el que fem en realitat no importa el que el valor d'aquesta és, i és una mica llarga valor cul de totes maneres, estem utilitzant només Giong dir un signe. Llavors quin és pb? AUDIÈNCIA: [inaudible]. ANDI Peng: Sí. Fresc. Tot bé. Fàcil primera línia. Vam aconseguir això. Els punters són fàcils. Està bé. Segona línia. I així, l'estrella és igual que és el mateix El que equival a dir unes vegades c. És només una manera més fàcil d'escriure. Així que no estem tractant de fer un punt o qualsevol cosa aquí. Així va fer amb la primera línia. Què és una a la segona línia després de fer a és igual a vegades c? AUDIÈNCIA: 100? ANDI Peng: És 100. Bé. Què hi ha de b? AUDIÈNCIA: [inaudible]. ANDI Peng: Què hi ha de c? AUDIÈNCIA: [inaudible]. ANDI Peng: I què hi ha dels punters? Són ells-- el mateix, no? D'ACORD. Ara tercera línia. Poc més complicat. b és igual pa estrelles. Pot algú dir-me, primer, el que fa pa estrelles iguals? AUDIÈNCIA: És el valor que s'emmagatzema en un. ANDI Peng: Exactament. ¿I quin és el valor que s'emmagatzema en una? AUDIÈNCIA: 100. ANDI Peng: OK. Així que el que anava a ser un després l'execució d'aquesta línia de codi? AUDIÈNCIA: [inaudible]. ANDI Peng: Què passa amb b? AUDIÈNCIA: 100. ANDI Peng: Sí. I després tota la resta és pràcticament sense canvis, no? A causa de que no el va tocar. Fresc. Quarta línia. Una mica més complexa. Així pc-- un cop més, la PC és el punter que apuntaven a C-- és igual a pa. Què és un? AUDIÈNCIA: 100. ANDI Peng: Què és la b? AUDIÈNCIA: 100. ANDI Peng: Quin és c? AUDIÈNCIA: 5. ANDI Peng: Quin és pa? AUDIÈNCIA: Ampersand a. ANDI Peng: pb? AUDIÈNCIA: Ampersand b. ANDI Peng: I complicat, quina és la PC ara? AUDIÈNCIA: Ampersand a. ANDI Peng: Yay. Woo Hoo. Vostès, ¿veuen? Això està bé. No és tan dolent. Tenim més dolços si no és tot bé, però crec que està bé. I anirem només un més abans de tirar-nos les més difícils. Les respostes que tenen aquí. En essència, sé que això és igual que les matemàtiques en aquest punt. Quan vostè té equacions simples com un més b, de vegades c, això és fàcil de fer. I quan s'inicia l'expansió a ella, només ha d'anar el cap de les operacions. El mateix que abans. Porteu un registre de si la seva estrelles està davant alguna cosa. Això et diu el valor. Si vostè té una i abans alguna cosa, que et diu la direcció. I vostè ha d'assignar qualsevol punters o aquest valor. Així que anem a repassar aquest últim ràpida real. No és aquest últim, ho sento. En realitat, vostès poden triar. Quin et nois vol anar més de les tres restants que tenim? No crec que només podem fer això perquè no podem simplement saltar a la línia. D'ACORD. Vostès no té una opció, és només el tercer a l'últim. Pc estrella és igual a b c. AUDIÈNCIA: Estrella pb? AUDIÈNCIA: Estrella pb. ANDI Peng: Ho sento? AUDIÈNCIA: Estrella pb. ANDI Peng: Star pb. Oh, el meu mal. Pb estrella és igual a b c. Vaig a donar a vostès 10 segons. Només cal pensar ràpidament. Això és que tenim el ara, el que passa després que executar aquesta cinquena línia allà? D'ACORD. Què és un? AUDIÈNCIA: 100. ANDI Peng: 100. Què és b ara? AUDIÈNCIA: 500. ANDI Peng: Good. Vol algú explicar per a mi per què això és 500? No em sento com si en realitat mai tocat b. Com ens les arreglem per canviar la valor de b sense tocar b? Sí? AUDIÈNCIA: A causa pb estrelles significa el valor en PB-- ANDI Peng: Exactament. AUDIÈNCIA: -que és b. ANDI Peng: Exactament. Així que aquí al nostre diagrama, la nostra punter PB és en realitat apunta a aquest dret aquí, la qual cosa és el real b física. I així, si vas i fas pb estrelles, això és seguint la fletxa del punter i canviant físicament el valor de b. Així que per això hem canviat a B 500 sense tocar b. I llavors tota la resta segueix sent el mateix perquè no toquem això. Això és b. Fresc. I llavors-- AUDIÈNCIA: Només tinc una pregunta. ANDI Peng: Sí? AUDIÈNCIA: Des we've-- ja no hi ha c signe, ¿Significa un signe redirigir a la mateixa cosa ara? ANDI Peng: Sí. Tan-- AUDIÈNCIA: Llavors la fletxa tipus de simplement mou i- ANDI Peng: Així essentially-- AUDIÈNCIA: --Ara no podem access-- ANDI Peng: --quan ens dereference c en-- em falsificador. Que ha sigut això? La tercera línia? Quarta. Quarta línia. Tot el que vam fer va ser, en essència, canviar aquesta fletxa i ho han apuntat cap a un lloc. AUDIÈNCIA: Així que no podem accedir c més. ANDI Peng: Si tinguessis aquesta exacta nombre, vostè pot accedir-hi. Però no. No tenim un punter c apuntant cap més. Crec que si volia per tornar a accedir-hi, crearia un altre punter que re-va assenyalar c o desreferenciado això i va assenyalar cap a enrere. Així que no, a partir d'ara, els tres punters, cap d'ells apunten a c. Cada un de bo? Les respostes estan en línia. Siéntase lliure, després de la secció, repassen els dos últims i de prova a si mateixos. Els mateixos conceptes, només un poc més complicat. Només has de seguir a través de la lògica de per què les coses són coses diferents. I la seva pista, els punters són un tema que ens agrada per a cobrir en les proves perquè són conceptualment molt difícil. Així que em permeto suggerir que vostè nois tots revisin aquesta taula o retallar conceptes similars això abans del seu concurs de la propera setmana. AUDIÈNCIA: disculpeme. ANDI Peng: Sí? AUDIÈNCIA: [inaudible] última un-- [inaudible]. ANDI Peng: 50.000? Que hauria de seguir un altre cop. Però somewhere-- Crec que la línia abans, que ha creat valor gegant c. c és igual a aquesta cosa gegant que és 100 vegades 500. No. AUDIÈNCIA: [inaudible]. ANDI Peng: Sí. 100 vegades 100, que és de 10.000. La qual cosa és 10.000. Així que de tornada hi ets multiplicant bi c. Així que el punter que apunta a B-- que és el valor de 500-- vegades A-- AUDIÈNCIA: [inaudible]. ANDI Peng: Potser això està malament. AUDIÈNCIA: No, no, no ho és. [Inaudible] punter en c està ara apuntant a A-- ANDI Peng: Sí. Té raó. AUDIÈNCIA: --és en el seu en uns iguals 1 vegades-- és el valor de c. ANDI Peng: Pots dir que una mica mica més fort pel que tothom pot escoltar-te? AUDIÈNCIA: Llavors punter en c Punts ara al que el punter d'un utilitza per assenyalar A-- i encara does-- però apunten a el mateix que és el d'una, ¿no? El valor d'una, però que ha estat recentment definida. I al principi que ets dient un abans era 100 vegades el valor en b que és 500. I això és, per molt que sigui. 50000. Et estan reasignando que al que el espai de memòria en c és-- el punter al c s'apunta que és un. Així que vostè està redefinint un ésser 50.000. ANDI Peng: Ella va poder secció d'ensenyar per a mi. La propera vegada que és tot teu. Aquí. Aquí hi ha més dolços per això. Et mereixes dolços per això. AUDIÈNCIA: gairebé vaig agafar això. ANDI Peng: Gairebé capturat aquest. Està bé. Sí. Però ella tenia raó. Així que el que has de fer és que-- Crec que de seguir el fet que els punters són ara apuntant a diferents valors. Així que la value-- sento, la punter de c tornar a apuntar a un. I perquè va canviar tots els nostres números. I per això, quan accedeixi a la valor emmagatzemat aquí, és diferent. Això té sentit? D'ACORD. Fresc. Tothom bo, abans de passar? AUDIÈNCIA: El ell-- quan vas per les files de la columna de l'esquerra, no la primera fila afecta la segona fila i després el second-- com, és tot-- ANDI Peng: Sí. Així que imagino que és de codi en el que acaba d'escriure en un igual a b c vegades, un estel és igual a c. Només imagino que tinc simplement va córrer aquest codi i no em imprimeixo el totes aquestes coses eren. Si jo fos només per imprimir la primera cosa a la part superior, que seria aquí. Si després em vaig trobar amb tots aquestes línies de codi, el que aquests valors haurien estar al final són això. Així que he fet un programa escrit aquí. No he fet tot la multiplicació. Però imagina't. Així que aquí només tinc una programa anomenat punters. Vaig a fer un zoom si guys-- acord. Així que he creat variables a, bi c. He creat iguals a 3, 4 i 5 i no tinc creat els seus corresponents indicadors. I llavors aquí només vaig imprimir el que és això. Així que permetin-me que corro. Vostès veure- escombraries. Vostès veuen com 1, b i c són aquests valors però els seus punters són aquest gegant valor de les escombraries que no ens preocupem? Així que si jo fos a connectar realitat en tota la multiplicació i després tornar a imprimir tots això, s'executaria a terme al que és a la part inferior. Així que si vostès volen jugar amb la codificació en realitat físicament, vostès només pot connectar tots els de. El codi serà en línia i llavors la seva valors han d'imprimir en què després. I llavors vostè veurà com el punter direccions realitat han reassignat. Així veuràs com la direcció del c es converteix en realitat per igualar qualsevol que sigui la direcció d'una era. I ells s'ajusten al que sigui que gran nombre és. Bona pregunta. Tothom està bé? Una última trucada per a les preguntes. D'ACORD. Tot bé. Així es preparen per tenir la seva ment cremat una mica mica més. Les matrius són en realitat només els punters. Això és tot el que són. I recorda, ¿quines són les cadenes? També són matrius. Llavors, què són cadenes en realitat? Són com punters a la a partir d'un char de més caràcters. Així que és només conceptes que comencen per construir a la part superior de l'altra. Així que això és què-- vostè recordi en la conferència, David, quan va tenir aquesta comparació de int cadena de mama és una cosa i després una altra mare cadena i tractar d'igualar els dos entre si, et donen diferents valors. És perquè les cadenes si no són valors. Tots ells són són adreces de memòria char-- que són matrius de caràcters i matrius són només punters. Així, en essència, quan David era comparing-- Està bé si em esborro tot això? Així que en la conferència quan David tenia mare és igual és igual a la mare, per a nosaltres que sembla ser la mateixa cosa. Oi? Però, a l'ordinador per sota de la capó, el que realment està succeint és que aquesta cadena, tot el que és és una matriu. Amb una ampersand-- o, ho sento, amb un terminador nul al final. Oi? Backslash 0. Barra invertida incorrecte. Així que tot el que were-- tot aquestes dues cadenes were-- són sèrie de quatre potes de mida amb les cartes de la mare i la mare. Però el que realment són les matrius són només punters a un lloc específic en la memòria que li diu que comenci la matriu. Així doncs, en aquest cas, tot això era era només un valor d'escombraries, alguns punter a l'atzar. I tot això es va anar algun altre valor d'escombraries. Diguem 0x200. I així, quan vostè tracta de la igualtat ells dos a un a l'altre, avaluen com false perquè el addresses-- els punters que were-- eren diferents. Considerant que és diferent si ets tractar de comparar nombres enters reals. Com si volgués compare-- en l'últim exemple-- int A a B, que avaluarien true com va dir Elliot perquè eren sencers que estaven emmagatzemats i que està avaluant només els valors. Aquí, perquè les cadenes són arrays i totes les matrius són punters, és per això que no ho són iguals entre si. Així que una mica confús, aquest gràfic. Però anem a imaginar. Tenim crear una matriu de mida 3 amb un índex de 0 a 2-- 0, 1, 2 amb els valors d'1, 2, 3 i emmagatzemats en ells. Tota la gamma de veritat does-- aquí, anem a dic que estic creant un punter a aquesta matriu que és accedir al valor en el primer índex d'aquest arranjament. Així que aquí seria 0. Oi? Tothom entén com aquesta primera línia avaluada? Gran. I així que si volies per inicialitzar els valors addicionals després d'això, tot el que estem fent és la reassignació. Per tant 0, 1, 2, 1. Així que aquest punter que una vegada va ser assenyalant aquí, tot el que estem fent es mou cap avall. Això és el que el més 1 està fent. I llavors podem posar 2 allà. Si volguéssim posar 3 en el qual després, ens agradaria esborrar aquest indicador, lloc 3 en aquest país. Té sentit tothom? Sí. ¿Vostè té una pregunta? AUDIÈNCIA: És [inaudible] té una pregunta, ho diré de totes maneres. No crec que en realitat és un pregunta però- en anglès, array és igual a 1 té sentit. Som com, OK, el primer. Però les coses són 0 Índex [Inaudible] la matriu és igual a 0 per indicar el primer lloc. ANDI Peng: Sí. Així que en realitat el que estic fent aquí és No estic accedint al primer índex. Tot el que estava doing-- el primer de tot, digues-me ¿quina varietat estrella fer? Què fa una estrella abans que un punter de fer? AUDIÈNCIA: Indica un punter. Que vostè està declarant un punter. Es de-- ANDI Peng: S'elimina referències els mitjans va i aconsegueix realment el valor. Oi? Així que en aquest cas, vol aconseguir el valor aquí i establir que a 1. Sí? Així que no estic actually-- no ho faig realment es preocupen per l'índex d'aquest, tot el que estic fent és simplement la iteració baix movent la meva punter per la matriu. I després, finalment, em ha de parar, no? I la forma en què m'aturo és quan em va colpejar, en el cas d'una cadena, un terminador nul. Ja ho sé, oh, si em va colpejar una part posterior-- si veig barra invertida 0, sé que he acabat amb aquesta i sé que puc simplement deixar d'iteració a través. Molt bona pregunta. I realment a anar més lluny en profunditat en aquesta setmana que a causa de que la peça que es va a implicar una gran quantitat d'ús de punters. Però només sé que en aquest moment, això és només una més-- diferent això és només una manera diferent per l'ordinador per escriure, en essència, el que hem estat fent. Igual que David va dir a donar una conferència, la forma en què accedir a una matriu és només per fer matriu 0, suport 0, si només volgut per accedir al primer valor. Tot l'equip està fent és convertir que en això i iterant si mateix. Així ho anomenem sintàctica sucre, que és només una forma elegant de dir fàcil d'usar maneres de nosaltres saber programar. Però l'equip per sota, el que està fent, en realitat és només tenir un punter que està ajustant. Però la forma en què escrivim, perquè és més fàcil per a nosaltres per pensar en les coses en termes de caixes i com moure per les caixes, és per tenir els suports. Ho sentim, però que en realitat era, molt malament però- si. AUDIÈNCIA: Llavors, com es comparar dues cadenes per veure si són iguals entre si? ANDI Peng: David escriure aquest programa a la conferència així que només vaig a anar més ràpidament i breument. La forma en què ho faries és que ho faria realitat que hagi d'anar i comparar la addresses-- o els valors obtingut a partir dels punters. Així que recordi, com obtenir el valor aquí? No m'importa sobre la direcció aquí. Com obtinc la realitat valor del que sigui aquí? AUDIÈNCIA: [inaudible]. ANDI Peng: Exactament. Així es compara l'estrella aquí davant de l'estrella aquí. Són aquelles iguals. I després cal baixar. Són l'estrella aquí i l'estrella aquí igual? D'ACORD. Són iguals. I que acaba de seguir baixant fins que has arribat al final de tots dos. I si tots ells són iguals, llavors vostè sap que la seva cadena és igual. I C té en realitat una funció escrita diu Cadena Comp, que en realitat només ho fa per vostè perquè no ' has d'escriure tu mateix. Sí? AUDIÈNCIA: Crec que en la conferència és quan fem la comparem. Nosaltres realment no necessitem una taulell com pi, oi? ANDI Peng: No ho fa perquè en realitat no importa quantes caixes que hem itera a través. Tot el que importa és que anem a seguir endavant fins que sàpiga parar. I saps que parar quan hi ha algun tipus d'indicació que estàs en un terminador nul. Sí. Tan-- AUDIÈNCIA: [inaudible]. ANDI Peng: Sí. Així en el cas de la comparació de cordes, jo realment no tenir cura com moltes cartes tracti: Necessito comparar si són veritables o falses si que són iguals entre si. No m'importa com moltes cartes es troben en cada un d'ells, no? Jo només m'importa que aquesta partits amb això i el després dels partits i el de després partits tot el camí fins al final. Oi? Això té sentit? Així que no m'importa com moltes cartes, Jo només m'importa que totes les lletres partit. Sí. D'ACORD. Puc passar d'això? Gran. Ens estem quedant una mica curt en temps, així que vaig a permetre que vostè acaba de nois a veure breument en aquest. Executar al seu ID de si vostès són curiosos. I vostès poden veure el que això serà imprimint. D'ACORD. Així que una cosa que tindrem també toquem en un bit és la idea de l'aritmètica de punters. La qual cosa, tot el que és, és en lloc d'ajustar els valors del que s'emmagatzema en la direcció del punter, és només realitat canviant la direcció de si mateix. Així que si vostè com volies que és humà per ajustar el punter de forma manual, la forma en què ho faries és només fer n vegades la mida del punter. Oi? Així que un int. Un int-- quants bytes en la memòria és un int? Són les quatre, no? Així que si jo sé que tinc una gran varietat de tot sencers i ho vull perquè apunti a la després, m'agradaria saber que jo només he de moure el punter cap avall quatre octets, oi? I així n vegades la mida dels bytes de punter és però molts bytes no ets més que va a moure el punter per. Així, per exemple, si tenim una sèrie de sencers, el primer, anem a dir, s'emmagatzema com 0x00. Vostè sap que el següent va a estar a 0x04 perquè això és quatre bytes més tard. I l'un després que va a ser 0x08 i així successivament i així successivament. I així, nois, mirin. Tot el que estem fent aquí és que disposa d'un punter i i va afegir que al seu la memòria perquè pugui moure cap avall els blocs de memòria assignats. És una espècie de concepte de nivell superior. Vostès no necessitaran saber per aquesta setmana, però això és tot el que està fent allà. D'ACORD. En una altra ocasió broma. Dues cadenes de peu en un bar. Un diu, m'agradaria un rom i els valors d'escombraries de Coca-Cola. L'altre diu, hauràs de disculpar el meu amic, ell no està acabada en nul. Vostès ho aconsegueix. Ho sento. Així és com em mantinc anar quan em PREP per a la secció és inserir unes diapositives parella broma. De totes formes. D'ACORD. Abans de passar en-- així que, en essència, tenim cobert tot el conceptual qüestions relacionades amb els punters. I després anem a talk-- mòbil més, parlar sobre per què això és important i com encaixa en el idea de la gestió de memòria. Però abans de seguir endavant, ¿Algú té preguntes sobre l'ús del punter, el que està passant quan crearà punters, com són les referències de cada una altra, com es dereferencing? Una pregunta sobre que abans de passar? D'ACORD. Gran. Així que això ens porta a aquesta major concepte de nivell superior de gestió de la memòria en el seu conjunt. Per tant, bàsicament, en l'ordinador, hi ha dos tipus bàsics de memòria o regions en què la memòria s'emmagatzema. Vostè té aquí el que s'anomena el munt i tens aquí baix el que crida l'pila. I parlarem de la pila primer perquè és el més finagley que quin tipus de conceptualment entendre el que està passant. Així que tota la pila és-- pensar com una pica de la memòria física on es té un bloc de memòria això es van reservar per al seu programa mentre s'està executant. I aquí és on, en essència, tot de s'emmagatzemen les variables locals. Així que això és només un zoom en la imatge d'aquesta pila. La pila d'aquí baix, jo sóc simplement apropar una mica més. Per tant, bàsicament, en una pila que té un munt de funcions en el seu programa. Així que anem a tornar a la setmana dos exemples on vam tenir la nostra funció principal així com una funció de cub on tractem de crear una funció que cubed-- que va tenir paràmetres com a entrada, tallada en glaçons ells i va tornar de tornada a principal. Així que la forma en què això està emmagatzemat en la memòria és que vostè té la seva funció principal aquí a la part inferior. I després, amb cada funció addicional que cridi i afegir per sobre d'això, la memòria simplement s'apila a la part superior. Penseu en això com una pila física. I pel que té tots vostès principal variables de les seves funcions principals, tot el que està passant aquí, emmagatzema. I després, quan vostè va cridar cub, va i es crea còpies de tots aquells paràmetres i els emmagatzema anteriorment en un lloc diferent. I així, per què ens preocupem? La raó per la qual ens importa és que no podem simplement utilitzar els paràmetres aquí-- les variables aquí-- i canviar-los, esperem que també poden canviar aquí, oi? La idea és que estan guardats en diferents llocs de la memòria de manera que, quan s'està accedint diferent funcions, el que vostè pensa que està succeint no està succeint realment, perquè el bits de memòria no estan interconnectats. Per tant el dubte que realment important per a nosaltres entendre la classe de És a dir, què passa si, quan ens estem quedant un programa, la mida d'una funció apilar frame-- tan físicament, com la quantitat de memòria què hem de donar-li? Potser és una funció gegant així que ha de donar-li aquesta quantitat de memòria. Però si fos més petit que havíem necessitarà una miqueta. Així que la idea és que quan ens estem quedant un programa la mida d'aquesta funció depèn de quants variables i el tipus de variables que volem donar-li. Però i si el nombre de variables-- i llurs mides, això no determinat perquè el codificador, però es determina pel reial usuari del seu programa. Així que si jo volia crear una funció que va tenir cordes de l'usuari, però jo no sé realment què tan gran aquestes cadenes són, és difícil per a mi assignar l'específica quantitat de memòria necessària. Oi? Perquè si aquesta function-- si Aquest usuari introdueix una cadena gegant, que crearà un error del que es diu en essència desbordament de pila on vagi més enllà de la límits de la memòria que vostè té. I llavors, què fem? Si no podem crear aquest gegant pila que pot salvar tot, Què fem per resoldre aquest problema? Així que seguirem endavant i parlar sobre aquest segon tipus de memòria i llavors podrem parlar de com podem utilitzar els dos junts per resoldre aquesta qüestió. Així que ara anem a ascendir a una part diferent de la memòria al nostre ordinador. Això es diu el munt. Així que tot el munt és una piscina memòria de què disposa es pot assignar de forma dinàmica. Així que això pot canviar, mentre que el programa s'està executant. I així, una regió de memòria no utilitzada que pot allowed-- ser que pot haver assignat amb la funció de anomenada malloc, o l'assignació de memòria. Per tant, bàsicament, quan s'està executant un programa, pot crear dinàmicament la memòria de el munt i l'ús que de tot aquí. I així llavors, totes les seves funcions aquí es pot accedir a la pila. I així malloc, aquesta idea que David tipus de forma ràpida, breument passat per alt en la conferència, és només una forma de vostè controli la seva memòria. Igual que, quan estàs creant apilar funcions, quan ets a que la seva funció principal amb les seves funcions aleatòries, vostè pensa en ells com els nens que s'acaba es va escapar quan estava acabat amb ells. Ells eren realment dolents fills. Vostè els creu ensenyar alguna cosa, i després quan vulgui accedir-hi de nou són No hi ha perquè el seu memòria simplement va fugir. Però malloc, o la pila, és una forma de tenir millors fills, on pots espècie de crear ells, els assignen valors, utilitzar ells-- que sonava realment bad-- usar-los, però, que volies, però llavors ser capaç de controlar i després alliberar memòria sempre que els necessiti. Així que, quan hagi acabat amb la seva funció, els nens s'acostin de nou a vostè i vostè encara ha de les dades allà. Així que la forma en què malloc, o crear, la memòria és la funció void estrelles mida malloc en bytes. Així que això és només el prototip per què ho fem. Així que un exemple és que vam crear un punter de tipus int-- iguals int estrella pointer-- mida malloc de int. Així que la raó per la qual fem mida de i no només un number-- perquè tots sabem que 1 int és de quatre bytes, dreta- però un int és només quatre bytes en certs sistemes operatius. La idea per a nosaltres com programadors és que ens voler crear codi que pot executar en tots els equips, no només nostres ordinadors simples. I per això ens agrada fer servir grandària i no només el número quatre. ¿Això té sentit per a tothom? Així mida de-- tot, és un C funció o operador que li indica quants bytes de memòria fa un cert tipus de variable prengui. Així que en aquest cas, la mida d'un int és de quatre. Quatre bytes. I malloc va a alliberar 4 bytes en el munt, llavors vostè pot utilitzar en el seu principal funció per a ser capaç d'emmagatzemar memòria. És clar que fins al moment tothom? Sí? AUDIÈNCIA: Sóc clar, però només per estar més clear-- ANDI Peng: OK. Totalment bé. AUDIÈNCIA: --size d'es [inaudible] pot en realitat [inaudible] i va a fer realment el El que nosaltres volem. No és un pseudo-. ANDI Peng: No. AUDIÈNCIA: És com una cosa-- reals ANDI Peng: Aquest és el codi real. AUDIÈNCIA: --ens pot utilitzar-lo. És real. Fresc. ANDI Peng: Mida de ve amb C. AUDIÈNCIA: Això me fa la vida més feliç. ANDI Peng: Sí. Així que si ets un programador mandrós com quin tipus de sóc de vegades, No m'agrada la memorització el que la mida d'un int és, no m'agrada la memorització amb la mida d'un flotador és. Grandària de tan sols li diu el que és i que és molt més fàcil. Tot bé. Així que una cosa important que vostès tots volem a tenir en compte quan s'està usant malloc és que sempre han de comprovar per veure si és nul. Així com he dit, de nou a aquesta foto de la pila. El munt és només aquest gegant pila de memòria que tens. I vostè vol ser capaç de prendre trossos de la memòria d'ella i utilitzar-la, oi? Però el que si vostè no té cap més memòria en aquest munt? Què passa si jo ja he fet servir tot d'ella i tracte de malloc més? Això no existeix. Bé, això és per què estàs aconseguirà un error. Esteu SEG culpa. Vas tenir una fallada de segmentació en el qual tractar d'accedir a coses que no hi són. I així, la forma en què fem això i la forma en què evitar això és que vam comprovar per veure si nul·la del punter. Així que si jo fos a malloc alguna cosa i jo no tenia més memòria, que imprimiria un error perquè el punter retornat a tu és simplement nul·la. I així, la forma en què fem esto-- això és només un gran disseny, simplement memoritzar esto-- és que qualsevol vegada que intenti malloc res, vostè va a necessitar comprovar per veure si és nul. Perquè cada vegada que intenti obtenir memòria de la pila, sempre cal fer Comprovar si hi ha memòria. Això és tot el que és. Així que més o menys aquests tres línies de codi, a aprendre de memòria. Cada vegada que malloc, plop en. Vostè va a necessitar. Perquè jo garanteixo que anem a vostè provar en un cas i el seu equip es va a explotar perquè ets va a tractar de memòria d'accés que és no existeix i les coses van a accident i no serà bo. Així que perforar que en el seu cervell. Malloc, nul. Bé. Tot bé. Llavors això engendra el qüestió del que succeeix després que hàgim acabat amb aquesta memòria. A causa de que tota la idea de tenir malloc era que tenim aquest munt que podem prendre memòria des i llavors podem usar-lo. Oi? I llavors, què hem de recordar és que, després que hàgim acabat amb ella, llavors podem alliberar-lo. Deixa-ho anar. Podem deixar-lo anar. O si vostè també va a filtrar memòria i més coses dolentes succeiran. Essencialment, cada vegada vostè està tocant la memòria, coses dolentes succeiran si no fer les coses correctament. Així que cal comprovar, en primer lloc, si vostè té la memòria disponible. I després, després que hagi acabat, vostè vol alliberar-lo i permetre que el seu sistema operatiu a prendre de nou. Així que la forma en que fem que és només això funció, lliure de buits, i el punter a aquest munt de memòria. Així que l'exemple és punter gratuïta. És bastant fàcil, simple, no vull oblidar-ho. Per tal de comprovar per veure si és nul·la, lliure. Cada un de bo? Així que una vegada més, el codi que vostès pot prendre la classe de forma ràpida una mirada a. Sé que és una gran quantitat de nova sintaxi i que està bé si ets com, ah, ¿Què significa això de nou? No et preocupis. Tot això estava destinat a ser que es presenten una acció, com totes aquestes coses es poden utilitzar junts. Així que això és posar junts com un grup del passat diapositives ens vam anar a través d'en un sol programa. AUDIÈNCIA: En certa manera que podem actually-- ANDI Peng: D'una manera que en realitat podem utilitzar. Vostè podria plop que en el seu ID, es pot executar i que havia de funcionar. AUDIÈNCIA: OK. Així que això és real? ANDI Peng: Això és real. Sí. Intento fer el que el fonts són diferents pel que que sempre que escric reals codi de la font és un codi font i que el meu codi de nota és diferent, però No sé si això funciona realment. AUDIÈNCIA: No. Penso que-- ANDI Peng: OK. AUDIÈNCIA: --sometimes [Inaudible] i estic com, això seria molt bonic si era realment una cosa útil però llavors no és una cosa útil. M'agrada que això és una cosa útil. ANDI Peng: OK. Sí. Vaig a passar això junt. Sé com, David, els nens són molt trist quan s'escriu codi fals. Tot bé. Sí? AUDIÈNCIA: Llavors els ptr aquí No és en realitat un punter, és un bloc de memòria? ANDI Peng: Així que estàs parlant la primera línia o el que ací baix? Estàs parlant d'aquest d'aquí? AUDIÈNCIA: El NAD és de coses diferents en-- ANDI Peng: Bé, pel que fins aquí el que estic doing-- realitat, anem a passar per aquí. Aquest tipus de vincles a molt bé tots els conceptes. Així que aquí tenim ptr int estrelles. Així int punter, que és on en realitat estem creant un punter que apunta a un sencer. Bé, va apuntar a un sencer. I anem a malloc, o donar-li, suficient memòria assignada per emmagatzemar un nombre sencer. Així que quatre octets en aquest cas. I llavors si que és igual als iguals null-- és igual null-- anem a imprimir. Oh, tens un error perquè vostè està fora de la memòria, no? En cas contrari el retorn, que simplement li diu al seu programa que tens un error. I després si ho fa tenir aquesta memòria, que és va a emmagatzemar ho aconsegueix int li dóna a la ubicació i establir-ho com el valor del punter. Així que en realitat va a esborrar físicament aquest valor i posar ho aconsegueix int devolucions. I després vas a imprimir tot el que van entrar. AUDIÈNCIA: ¿I això és va a estar a l'munt? ANDI Peng: Això va per estar en el munt. AUDIÈNCIA: I perquè serà accessible. ANDI Peng: Exactament. Niça. Bé. AUDIÈNCIA: Així que quan ens alliberem ptr en aquest pas final, estem alliberant el punter o estem alliberant el bloc? ANDI Peng: Sí. Així que estem alliberant a l'pointer-- així, alliberant al bloc de memòria. Així que l'única manera en què podem igualar l'accés la memòria és per tenir el punter. Si vostè no té el punter, ets com, oh, no sé on és, Oi? Així que si t'alliberes, estàs essencialment alliberant tot aquest bloc. Llavors l'equip sap, oh, no hi ha res útil aquí, Jo només puc posar les escombraries els valors de nou en ella de nou. AUDIÈNCIA: Llavors existeixen nombres enters al respecte? ANDI Peng: Existeixen els nombres enters? Ho sento. Es pot reformular la seva pregunta? AUDIÈNCIA: vaig voler dir, després d'alliberar el punter, el sencer que s'obté, caldrà encara existeixen? ANDI Peng: No, no ho farà. O almenys que va existir en la seva la memòria abans que el seu ordinador fa el que sigui amb ell, però hi ha no hi ha manera per tu per aconseguir això. Perquè alliberat el punter. Vostè no sap on és més. Sí. Vaig a passar aquí. Uf. Així que estem a través d'una gran quantitat del conceptual dificultats de gestió de memòria i només anem per passar essencialment 5, 10 minuts que van sobre les coses de sintaxi que serà utilitzable i útil per a vostès, però res massa conceptualment per aquí. D'ACORD. Així que estem canviant completament engranatges aquí. Gestió de la memòria, difícil. Punters, difícil. Sí. És molt, molt difícil. Totalment bé. És per això que la seva peça és serà molt dur. Però si vas i fas les coses que estem suposa que ha de fer, fer que les coses són nuls, vos de comprovar si les coses són null, assegureu-vos de memòria lliure, fan que les coses no són fuites, podràs bona. Se li ha establert. Tot bé. Així que anem a entrar en aquest completament nou concepte de redirecció. I així, fins ara, la principal via que hem estat interactuant amb el nostre programes és a través de l'entrada estàndard i la sortida estàndard. Oi? Nosaltres, com l'entrada de l'usuari les coses i l'equip escup de nou a nosaltres a la terminal. Però hi ha una altra formes perquè puguem interactuar amb l'ordinador amb el nostre programes que no són només jo coses físicament mecanografia quan estic em demana. I la forma en que fem que és a través de la major de pastanaga i el símbol de canalització. Així també podem llegir i escriure en arxius usant això. Així que la forma en què fem això és el superior a la pastanaga, tot el que està fent està escrivint el que la seva arxiu té un arxiu separat. Així, per exemple, si volia córrer hola món i volia que la sortida guardar en un altre arxiu i no només imprimeix a mi, pot simplement fer més gran que la pastanaga, output.txt. Així que tot el que està fent és prendre meu programa hello.world, i qualsevol que sigui la sortida és, és estalviar en un arxiu anomenat output.txt. Així que la forma en què David va fer el .csv amb els noms dels estudiants, que és el mateix que vostès poden fer. I el que és especialment útil en aquest cas són el major no sigui: els dos més gran que la pastanaga signes que es pot annexar a una sortida arxiu, el que significa que vostè simplement pot afegir en la part superior de la mateixa. Vostè pot simplement seguir afegint a output.txt de cada cosa addicional que vostè està fent. O, si vostè comença a rebre a més programes complicats, els dos més que la pastanaga, que només impressions els missatges d'error. Així que vostè té un gegant quantitat de missatges d'error i vols llegir a través de tots ells i que no vull haver de desplaçar a través del seu terminal, vostè pot fer realitat més gran que output.txt i que va a estalviar tots els seus errors en un arxiu anomenat output.txt que vostè pot anar a través i llegir. AUDIÈNCIA: On es guarda l'arxiu de text? ANDI Peng: Es guarda a la mateixa directori que el seu programa és. Així que vostè acaba d'anar enrere i mirar per ella. I el mateix que nosaltres pot fer per entrada és que en realitat podem tenir el contingut d'algun arxiu i ens pot introduir això en el nostre programa. Així que en lloc d'haver de fer-ho d'ordres arguments de la línia d'on físicament ha d'escriure coses cada vegada, vostè en realitat només hi ha un fitxer anomenat input.txt que així ho posa tot a. I després canonada és especialment bo perquè que pot prendre la sortida d'un programa de i utilitzar-lo com entrada d'un altre programa. Així per exemple, en Vigenère seus nois, existeix aquesta línia de codi que ha nois estan executant que potser potser realment no sabia el que era doing-- aquest ./generate 1.000 canonada ./42. Oi? Així que tot el que està fent, si només fer una ullada a aquest pas a pas, el ./generate, això vol dir que sóc córrer el meu programa genera. Que s'està portant en 1000 en la seva entrada. Així que vull per generar 1.000 a l'atzar nombres i vaig a la canonada que-- o vaig a utilitzar que-- sortida com a entrada per al meu programa anomenat troballa. I jo vaig a tractar de trobar 42 de els números generats a partir dels 1.000 nombres. Té aquesta línia de codi fa sentit a tots els altres? Així que d'aquesta manera estem estalviant nosaltres un munt de passos. Nosaltres no hem de córrer a generar, desar l'arxiu i després el posen en la troballa. Només podem fer-ho tot en una sola línia. Així que el que generen és la sortida, plop coses bé de nou a trobar. Sí? AUDIÈNCIA: I en termes d'ordres arguments de la línia, és això-- això és tres arguments de la línia d'ordres? És generar, find-- no, four-- generar, 1000, trobar i 42? O és ell-- ANDI Peng: Així que la canonada en realitat no comptar com un argument de línia d'ordres perquè el compilador o el Terminal sap que la canonada, oh, jo sé que he de mirar abans la canonada, perquè aquest és el meu sortida i he de vetllar pel canonada perquè aquest és el meu entrada. Pel que sap el que-- ./generate i 1000, aquests són dos de comandament llavors els arguments només per al primer programa. I llavors el ./find 42 són dos d'ordres arguments de la línia per al segon programa. Sí. Tothom bo en això? Així que molt ràpid, què fer aquestes tres línies de codi fan? Bastant simple. Algú em vol dir el que fa la primera línia? AUDIÈNCIA: [inaudible]. ANDI Peng: Penseu en això com sol-- ¿Què fa el major de la pastanaga? AUDIÈNCIA: Posa una mica en la següent línia. ANDI Peng: Llavors, què és el contrari d'això? AUDIÈNCIA: Posa la següent cosa en el primer. ANDI Peng: Sí. Així que tot el que està fent és que ets l'execució d'un programa de .hello-- s'està executant un programa anomenat hola. Vas a donar-li una entrada anomenada input.txt. Oi? A causa de que pensi en això com just anar físicament a saludar. I després vas a guardar el sortida en un arxiu anomenat output.txt. Què hi ha de la segona línia? Vols dir-me què la segona línia fa? AUDIÈNCIA: [inaudible]. ANDI Peng: Ho sento. Digues-ho de nou. Elliot. AUDIÈNCIA: Pel que posa un llista de nombres en la troballa. ANDI Peng: Sí. Així que trobar, recorda, en Per executar trobar-te necessita saber on vostè està buscant. I així tot el que està fent aquí és que se li està donant 1 preassignat conjunt de nombres, llavors va a trobar per buscar-hi per al nombre de 42. I després 15. Recordin, vostès van córrer aquest quan es prova el seu codi. Comprens ara el que estava fent? AUDIÈNCIA: És posar en el conjunt d'instruccions per [inaudible] a través d'una de tres per 3 per obtenir ell-- per guanyar el joc. ANDI Peng: Sí. AUDIÈNCIA: S'introdueix els instruccions en el programa. ANDI Peng: Més o menys. Així que el CS50 accent. / Pset3 / 3x3, tot el que estava fent era que vam crear un text arxiu que tenia tot el títols llestos per a vostès. I així, per al seu joc per jugar, que sol-- només cal posar això al seu programa. Així que havíem creat aquest tauler i llavors estem posar aquesta placa en el seu programa que va córrer i creat un mosaic de cada tres per tres. Això és tot el que estava fent. I el que no era en realitat la màgia passant darrere de les escenes que vostès no ho van fer programa que programem. Però ara vostès entenen per què ho vam fer així que està tot bé. Tot bé. Així, mentre la redirecció és una molt útil, C té un mecanisme general per a lectura i escriptura arxius del seu propi. Res conceptualment difícil aquí, així que estic només va a anar a través de molt, molt ràpid. Tot el que és és una mica de memorització i assegurar-se que els nois són sintàcticament usar-lo correctament. La forma en què ens agradaria fer que sigui crear una referència a l'arxiu, ens agradaria obrir l'arxiu, i després faria tota la lectura i l'escriptura i tanqueu el fitxer. Quan cosa que vostès vulgui tenir en compte és que en fer això, perquè estem tancant i obrint els arxius, tots aquests ordres estan inclosos al standard-- l'estàndard d'E / S biblioteca. Així que assegureu-vos sempre que estigui fent això que has included-- # Included-- estàndard d'E / S de punts h. Tan real ràpidament. El primer pas, que desitja crear una referència a aquest arxiu. I ara que hem punters acabat, nois em poden dir el que aquesta línia de codi està fent. Oi? Tot el que s'està fent és crear un punter nom de fitxer del tipus de fitxer. Perquè vostè sap que va perquè apunti a un arxiu i ja està va a obrir el fitxer. Llavors vostè és f open-- tot el que fa és obrir l'arxiu. Aquest és el nom de l'arxiu. I hi ha tres coses que vostè pot fer. Vostè pot llegir, escriure o annexar. Més en general, nois es llegir o escriure perquè vostè està bé serà introduir un arxiu o la sortida d'un. Així que més o menys r i w són els dos coses que van a utilitzar més. Així que en aquest cas, l'únic que he fet és crear un punter a un arxiu anomenat arxiu. Estic obrir-lo i estic reading-- estic obrir aquest fitxer anomenat fitxer.txt i ho estic llegint. Això és tot el que estic fent en aquest moment. I llavors aquests són només funciona en que es pot llegir coses diferents o escriure coses diferents o saltar a diferents llocs en la qual desitja cercar. Tots aquests són en línia. Tot això pot simplement Google. No hi ha necessitat de memoritzar-les. Ells hi són, un sol ús per al seu ús si vol ser capaç d'utilitzar-les. Així que si jo volia acaba de llegir en un caràcter alhora, Jo faria arxiu fgetc. O si volia llegir en una línia de text alhora, ho faria fgets. I així successivament i així successivament. Tot això només ho fan diferent el que vostès poden utilitzar. I després, finalment, després que jo sóc acabat de llegir o escriure, Jo només vaig a fclose aquest arxiu. I recordi, aquest és un dels que, recordeu, si us plau fer això o en cas contrari el seu arxiu no va a treballar. Sempre obrir un arxiu abans la lectura o la lectura, vostè ha de sempre tancar si l'obres. El mateix amb la memòria, no? Vostè ha de prendre sempre memòria i alliberar-la. Aquí vostè ha d'obrir sempre una presentar abans d'intentar llegir-lo i sempre cal tancar després d'obrir-lo. Així que això és també en línia. Vaig a desafiar els nois tipus d'escriure un programa que imprimeix hello.world en un arxiu. És molt simple. És essencialment només implica les poques línies de codi que eren simplement escrit prèviament. Vas a posar-los junts i escriure això. Així que algunes coses importants a tenir en compte mentre que vostès estan tractant d'utilitzar aquest. Si tot això és molt útil per a la seva conjunt de processadors d'aquesta setmana, és que fopen crea un punter d'arxiu. No és en realitat l'arxiu físic. Tot el que està apuntant a la el fitxer que voleu obrir. I tu ets en essència, sempre vostè està utilitzant qualsevol de les altres funcions com fread o fwrite o fgetc o fgets, és que està de pas per aquesta Punter a totes aquestes funcions. Així que vostè no està prenent en realitat que presentar i usar-lo per a les seves funcions, vostè està prenent el punter i posar-lo a aquestes funcions de manera que vostè pot utilitzar. I si vostè s'oblida de tancar el seu arxiu després d'usar-lo, el programa va a perdre memòria. Essencialment, tot el que significa és que les coses dolentes succeiran i el programa ho farà no funcioni correctament. I així, en el conjunt de processadors en Al principi, crec que hi ha un curt en què explained-- Nate explained-- quin era Valgrind. Tot Valgrind és és una manera perquè vostè assegureu-vos que vostè no està perdent memòria. Així que vostès volen fer Segur que veure aquest curt perquè això ho explica tot molt bé el que passa. D'ACORD. Així que em vaig anar a través d'aquesta realitat, molt ràpid perquè realment vol arribar a parlar de el conjunt de processadors abans que vostès se'n van. Algú té preguntes conceptualment? Parcialment tot això és la sintaxi només que que pot utilitzar per llegir o escriure arxius. Finalment, de tots favorit. Anem a parlar sobre el conjunt de processadors ara. Així, a mà alçada, quants de vostès llegeixen l'especificació aquesta setmana? Oh, això és mitjà. Això és bó. Així que això és realment un molt, molt divertit conjunt de processadors en el sentit que se sent com un detectiu perquè ets fent totes aquestes coses molt interessants que vostè no sabia que vostè podria fer però ara és molt cool que pot fer-les. I és en realitat molt senzill del que vostès pensen. Així les meitats bàsiques de aquest programa és que ets va descarregar el codi font o codi de distribució escrit per nosaltres. I vas a tenir una carpeta anomenada BMP i una altra carpeta anomenada JPG. Dins del seu BMP, ets va a tenir tres programes. Un d'ells ja està escrit per a vostè. Així copy.c és un programa que ja hem escrit per a tu que vols descarregar. Tot el que fa és prendre com a entrada una imatge i fa una còpia del mateix com a sortida. Això és tot el que l'arxiu està fent. Però el que vol fer per whodunit-- així que com molts de vostès nois recorden en cinquè grau o maybe-- estàs younger-- potser el tercer grau, quan vostès tenien missatges secrets i calia posar un tros de paper sobre ella per descodificar el missatge? Sí? Així que això és tot el que estem fent excepte que aquesta vegada d'un ordinador. Així que li hem donat a aquesta imatge encantadora. No es veu com res però per sota és una pista que va a ajudar amb respondre a la pregunta li demanem. En essència el que vols de fer és introduir aquest arxiu, ajustar algunes coses, potser ajustar els colors, canviar les coses, de manera que tot el que el missatge és pot venir a través. Així que a l'interior s'amaguen i informació píxels que si vostè escriu el seu codi correctament va a descodificar i li dirà el que aquesta pista és. I així alguns consells útils sobre com que aniries a l'apropar-se a aquest. De debò vols familiaritzar a tu mateix amb l'arxiu d'E / S perquè estem llegint arxius i escriure en arxius. Oi? I així, cada vegada que fem que, que implica File I / O. Vas a han de familiaritzar- amb, com obrir arxius d'imatges? Com s'escriu als arxius com imatges? Com ho fas totes aquestes coses? Això serà realment útil. En segon lloc, com estàs serà capaç de canviar els colors d'aclarir aquesta foto? Probablement va implicar ajustant les seves píxels o els seus valors RGB en algun lloc d'aquí, en essència. No hi ha forma de dret de la solució d'aquest, sempre que can-- com el temps que puguis tipus de ajustar els píxels perquè sigui semblar-se a una cosa que t'importa. Això és l'únic que ens importa també. Així que hi ha moltes maneres de fer això. Només jugar una estona amb ell fins vostè aconsegueix una cosa que funciona. I seria molt Em va sorprendre el poques línies de codi que ha de fer realitat això. Estic parlant com de tres línies de codi totals que vostè necessita per escriure per tal de fer això. Així que si vostè es troba escriptura 40, 30 línies de codi, probablement estàs fent malament. Tot el que has de fer és tipus de jugar amb els colors i veure com això funciona. Així que ens dirigim cap a una mica per més dur d'un problema. Aquí tenim redimensionar on li estem demanant A-- li estem donant com a entrada una imatge i el redimensionament aquesta imatge en alguna cosa més gran o alguna cosa més petit depenent de les dimensions que li donem. Així que recorda, en conferència que David ràpidament va mirar sobre com la informació és detectat pels equips en el sentit que és un tipus d'arxiu. Així que un arxiu de Word té especial personatges davant d'aquest digui-li al seu equip que és un arxiu de Word. El mateix amb un arxiu JPEG. En aquest cas anem per donar-li un arxiu JPEG. Tot el que sabem és que JPEG arxiu és una imatge, oi? Però els distingeix informàtics en formes molt específiques. Així que al principi de qualsevol arxiu JPEG, ets va a tenir el que es diu el mapa de bits informació de capçalera i la capçalera de l'arxiu de mapa de bits. Tots els que són són diferents peces de dades que compten seu ordinador, hey, escoltin, 1 JPEG pujant i aquestes són les dimensions o característiques d'aquest JPEG. Així que vostès realment volen saber quin tipus d'informació s'emmagatzema a l'interior d'aquests capçaleres i ¿Quin és la mida dels mateixos. Perquè quan s'està executant a través del seu programa, vostè va a voler saltar sobre aquesta quantitat. Oi? A causa de que no t'importa sobre com modificar la capçalera, vostè es preocupa sobre com modificar el que està després. Oi? Així que assegureu-vos que vostès saben el gran que són aquestes coses. En segon lloc, abans de començar tractant de canviar la mida de la seva imatge, vostè està probablement va voler guardar les dimensions de l'original. Oi? Perquè si jo dic que aquesta imatge és de 100 píxels per 100 píxels, i vull que vostè faci quatre vegades més grans, vostè sap que vostè ha de multiplicar aquestes dimensions per quatre. Així llavors vostè vol un fitxer de sortida 400 per 400 píxels, per exemple. Així que és realment útil per a vostès a guardar les dimensions de l'original. I a continuació, després, després de hagi finalitzat el canvi de mida, vostè pot escriure noves capçaleres amb aquestes noves dimensions després de canviar la mida. I la forma en què físicament pot crear en grans píxels és que es pot escriure nova RGB-- recordi, RGB, tot el que significa és de color vermell, verd, i els píxels blue-- a un arxiu de sortida. I vas a voler tenir diferents quantitats del que que anomenem farcit. Tots és de farciment són espais fotos abans i després que compten tu-- essencialment que digui-li a la seva imatge el gran que hauria de prendre cap amunt. Això és molt abstracte per a una gran quantitat de si vostè no ha llegit l'especificació conjunt de processadors, però serà molt útil per quan en realitat estàs llegint a través d'ell. Ets com, oh, sí, això té sentit. Per què he de fer això? Té sentit. Finalment, aquest és probablement un els programes més frustrants Alguna vegada només perquè no es pot dir si està funcionant o no. Tot aquest programa, es recuperen, és fent és que, si s'executa correctament, ha de ser capaç de sobte recuperar 50 imatges que es van perdre en el nostre disc dur. I així, el problema amb aquest programa és que realment no es pot provar que perquè o et vas recobrar ells o no. I perquè tipus de sol ha de jugar una estona amb ell, i si el seu programa és funciona correctament, podràs de sobte veure que en seu directori tens té una quantitat enorme de imatges que són ara. Llavors, com aniria aquest problema és que estem et va a donar el que és anomenat arxiu card.raw. En essència, això és només un arxiu danyat amb totes les fotos que emmagatzemen vostè va a necessitar per recuperar-se. Així que vostè està probablement va voler per introduir el seu card.raw, o obert, el seu arxiu card.raw i ja està voldrà manipular que sigui capaç d'emmagatzemar arxius JPEG. Així que m'agradaria començar pel seguiment i emmagatzematge cada JPEG individual com vostè ho troba. No va a totes diferents Tot d'una, només cal crear els 50 JPEG. Vostè va a voler mantenir un registre de quants vostè està obrint. I llavors vostè vol assegurar-se, quan estàs al gravar en una buffer-- vostès sabrà el que estic parlant una vegada que llegeixi el spec-- desitja assegureu-vos que vostè està utilitzant un sense signar char buffer. I a continuació, desitja sol·licitar a tu mateix la pregunta de, quants bytes es troben en una CF-- estan en un arxiu de la targeta? Aquesta és la quantitat que va a voler llegir en el seu memòria intermèdia. Vostè va a voler assegurar- els dos align perquè llavors no tindrà memòria aleatòria escapament. Vostè sap exactament quants bytes que necessita i quants bytes que volem que tinguin. I, finalment, que vols utilitzar una funció anomenada sprint-- s d'impressió F-- per generar arxiu personalitzat noms per a cada nou JPEG que vostè trobi. Per tal de crear i trobar arxius JPEG a la targeta, vostè va a voler emmagatzemar-los i anomenar-los. Oi? I pel que anem a que vulgueu utilitzar aquesta funció per crear els noms que pot emmagatzemar tots els seus arxius JPEG. I finalment, no us oblideu de tancar cada JPEG després que hagi acabat. Perquè el que ets farem és que ets va a tenir, probablement, algun tipus d'un bucle que itera a través de tots els seus arxius JPEG. Has de redactar un arxiu JPEG i reanomenar-lo com vostè ho troba. Però després d'haver acabat amb tots els formats JPEG, que necessita per tancar perquè pugui començar una vegada i passar a la següent imatge. I així, una cosa que és molt divertit que ens agrada fer, perquè es tracta de fixar un problema tan estrany sinó també un problema estranyament satisfactori conjunt, és que totes les fotos que tenir per a vostè, si vostè es recupera adequadament, totes les imatges són imatges de seu professorat meravellós, tant de Harvard, en aquí-- i aquí a Yale. I si per casualitat recuperar totes aquestes fotos i identificar el personal membres en aquestes targetes, i prendre selfies amb nosaltres si ens ha trobat al campus, per cada foto que es sotmeten a nosaltres, anem a donar-li un gigabyte d'espai de Dropbox. Així que anem a fer els càlculs aquí. Si hi ha 50 fotografies i 50 membres del personal docent, si per casualitat vostè troba els 50 de nosaltres, això és 50 gigabytes de Dropbox, Bàsicament, estarem vostè donant nois. Així que alguns incentius extra afegit si vostès no es va limitar a preocupar-se per recuperar imatges perdudes. També hi ha alguns incentius addicionals. És un conjunt de problemes divertit. Realment ho és. És una mica frustrant, però llavors es torna molt divertit quan te n'adones, wow, està funcionant i ara tenir totes aquestes fotos que acabo creat per mi mateix. Teniu alguna pregunta sobre el conjunt de processadors? Per a qualsevol persona que ja està començat, si vostè té preguntes, Vaig a ser aquí per un parell de minuts després secció si vols parlar amb mi. Ben fet, nois. Ho sento, jo informació objecte de dúmping en vosaltres. Els punters són molt, molt difícil i frustrant. I estic molt content que vostès es va quedar amb mi. Parlarem més en profunditat sobre la setmana que a mesura que vam començar fent taules hash i més funcions que els involucren. Sí. Així que si algú té alguna preguntes, estaré voltant. Gràcies per venir i prendre més dolços perquè hi ha més dolços. Fresc.