ANDI Pengo: Todo ben. Benvido á cuarta semana de sección. É un fermoso día aquí en New Haven entón eu realmente creo que a escasa dispersión dos nenos que uniuse a min para sección hoxe, grazas. Entón, rapidamente, pouco antes de comezar, a axenda para hoxe. Nós imos pasar por riba de un algúns anuncios breves. Temos unha programación realmente tolo chegando nas próximas dúas semanas ou así así que imos ir sobre iso. En segundo lugar, sei topic-- favorito de todos Estou seguro que iso derreteu súa mente durante charla, non se preocupe, Eu tipo de non obtelo. É moi ben. Iso foi unha broma. Realmente facer obtelo. Pero eu vou estar seguro de que vostedes obtelo, tamén. Entón, nós imos gastar un realmente, realmente bo valor tempo falando punteiro hoxe. Como verás, doces de Discusión é enorme hoxe. Nós realmente estamos indo a mantê- isso-- si, iso é certo. Continúe a tomar doces. Vou pasalas ao redor agora. Sen preocupacións. Nós imos realmente tentar para manter o azucre no sangue da xente porque o cerebro vai queimar un pouco de osíxeno hoxe porque punteiros son moi, moi difícil. Entón imos falar sobre xestión de memoria que é tipo de no mesmo reino. E nós estamos indo a ir para redirección e arquivo E /, que son só sintaxe, agradable cousas que deberiamos falar. E entón, finalmente, eu son vai unha vez deixar como 10, de 15 minutos para PSet4. Isto é debido en poucos días, entón estamos vai realmente darlle unha especie de algúns consellos útiles se xa comezou con iso. Legal. Aceptar. Así, algúns anuncios para esta semana. Grading. Eu realmente non sei en Neste punto, cantos de vós caras son realmente na miña section-- vostede Aceptar alí? Aceptar. Pero, para aqueles de vostedes que están na miña sección, só un par comenta clasificación. Primeiro traballo realmente bo, de comentar. Aqueles de vostedes que non comentamos, ten sabe quen é vostede porque probablemente ten algúns puntos de estilo dinged esta semana. Só asegúrese de que, en todo o seu programas de engadir un par de comentarios. Realmente, o estilo é realmente fácil de obter puntos correctos como un ámbito de aplicación. Polo tanto, para nós, pode facer Asegúrese de que vostede é do tipo adición dunha breve descrición en todos seus programas sobre o que está facendo. Secondly-- este é un enorme problema para unha morea de TAS este week-- pasado polo tanto asegúrese de que está cargando a o cartafol correcta con correctamente programas nomeados. E a razón pola que se require para iso é porque, no ámbito da clasificación, realmente executar un script no seu código que baixa automaticamente todos os seus Serie de exercicios, corre probas de exactitude de todos eles, e logo leva súas puntuacións directamente ao libro de notas. Con todo, en calquera punto, se nomeou o seu programa incorrectamente, el parafusos ata a completa programa para todos. E así, lexitimamente, este guión bonito que temos escrito que fai todo isto para nós, completamente fallo se non ten seu programa nomeado correctamente. Entón, só tes que facer a carga para o correcto cartafol, telos chamado correctamente, e, a continuación, a vida é boa. Recibe seus Serie de exercicios de volta para vós anteriores porque eu comezo a clasificalos los rapidamente. Si. Aceptar. E tamén imos falar about-- Yale ten un moi, moi calendario maluco nestas próximas dúas semanas. Así, aqueles de vostedes en Harvard, isto non se aplica. Pero para nós fillos adoráveis ​​en Yale temos algo chamado caída break-- sorry, Harvard-- onde temos cinco días de descanso da escola. E mentres tanto é encantador, tipo de meses ata o noso ritmo pset Serie de exercicios porque son debidos xoves, venres. E por iso, se non estamos aquí Xoves, venres, nós Non podes ter traballo para vostedes debido o xoves, venres. Entón o que nós imos facer é-- estamos como o 99% seguro de que este é o que está pasando, pode haber algunha cambiar, pero eu creo que é subtle-- é que imos have-- esta semana é normal. Polo tanto, temos a nosa sección sobre Martes seguido horas de expediente durante todo o resto da semana e, a continuación, PSet4 débese o venres. Entón, como vostedes todos saben, como Eu lembrei a vostedes a semana pasada, temos o noso quiz 0 chegando o mércores. E así, sendo un estudante min, Sei que moi poucos de vostedes caras van realmente estar traballando pset5 os dous días antes do seu quiz. Entón, o que nós estamos indo a probablemente acaban facendo é, que na noite de onte, imos realmente, 05:30 - 07:00, ter unha breve revisión sesión sobre temas cubertos. Claro se é unha avaliar sesión ou un Q & A. Será algún tipo de avaliación forma en que nós imos cubrir algúns temas relevantes para vós. E despois de luns e martes noites desa semana 8: 00-11: 00, nós imos ter o horario de oficina. Estas horas de expediente será máis probablemente será máis acabado de entrar, TAS preguntar as súas dúbidas sobre calquera conceptos que está confuso sobre, e tipo de pasar por riba contigo e revisar conceptos ao quiz. Cuestionario 0, se está no Luns, sección mércores Mércores será de durante class-- o mércores durante a clase. E entón, se está no Martes, a sección de xoves, será tamén durante a clase o xoves. Realmente non pode escoller cal deles vai para. Se é un luns, mércores, ten que ir mércores. Se é o martes, Xoves ten que ir a xoves. Pero, entón, aquela noite, nós encantador equipo, vai ter un quiz xigante clasificación festa en que nós imos chegar a súa puntuación de volta para ti aquela noite. A que hora? Por suposto, quen sabe, pero vai estar de volta a vostede en 24 horas de xeito que vostedes esperanza ter un feedback ata o venres. E entón temos unha semana realmente tolo. Así pset5 é un dos Serie de exercicios máis difíciles do ano. Caras sinto moito. O que nós estamos indo a tentar facer é que nós imos ter un apoio real que fin de semana. Porque, como podedes ver, o pset débese antes das vacacións de outono. Non temos soporte para vós durante as vacacións de outono e entón realmente tipo de quere esta frase como, imos acabar con iso, traballaremos moito, moi duro estas próximas dúas semanas, obter este quiz e engadir eses dous Serie de exercicios feitos con e entón vostedes teñen un relaxado sete días sen pensar en CS. Entón, para que a pasar, estamos probablemente vai cambiar a miña sección para tardes de domingo. Será filmado polo que non te preocupes se non pode vir. Pero as imaxes en liña vai estar alí e accesible de xeito que vostedes teñen domingo Luns, martes, para traballar en pset5. E entón é caída romper e ningunha CS e, a continuación, volvemos ea súa volta na rutina. Pero vai ser un encantador semana para as vacacións de outono e nós realmente queremos facelo o estrés libre para todos posible que É por iso que nós cambiamos o pset para ser debido antes das vacacións de outono e non despois. Porque it's-- É dicir, eu medio que sinto como derrota propósito de ter a fin do prazo tras a ruptura da caída, se hai ningún apoio de todos os xeitos durante as vacacións de outono. Polo tanto, é rather-- creo Preferimos concentrarse nel agora. Alguén ten preguntas sobre esta programación? Algo confuso? Si. Audiencia: Fai aínda temos unha charla sobre o 21? ANDI Pengo: Si. Entón, o día 21, alí vai ser unha charla que é en directo desde Harvard. Non sei se David está filmando el ou se está realmente conferencias, pero só pode estar dispoñible en liña para vós ao acceso. Polo tanto, só asegúrese de esculpir un hour nalgún lugar no outono break para que vostedes poidan incorporarse up en que charla. Si? Audiencia: É. Desculpe. Teño aquí un couple-- ANDI Pengo: Non se preocupe. Aquí, tome uns doces. Audiencia: Ola, eu peguei iso. Entón, só para recapitular, non mañá, pero o Mércores despois de que, temos un quiz. ANDI Pengo: Correcto. Audiencia: E vai ser-- cal é o formato da proba? ANDI Pengo: Oh. Entón, nós imos enviar un correo-e que abrangue todo o que máis en profundidade. Pero, esencialmente, só cobre temas básicos xa cuberto na primeira metade do semestre. Nós imos ter sesións de revisión e pregunta e respostas así, non se preocupa con iso. Pero nós imos estar indo sobre iso tamén. Audiencia: Será que vai ser, nós traer os nosos ordenadores e código há-- ANDI Pengo: Non. Será vostedes escriben e respondendo a preguntas de man. Audiencia: Oh. ANDI Pengo: Entón imos dar- prácticas fóra e outras cousas entón vostedes poden querer talvez ir volver e reescribir Mario a man só para asegurarse de que vostedes teñen unha idea de como facelo. Porque ás veces cando escribir a man vostede esquecerse comas e outras cousas e iso é moi malo. Audiencia: Non será [inaudível]? Tipo, está a recibir un punto e coma no your-- ANDI Pengo: Si e non. Falaremos máis en profundidade acerca de como o deseño cuestionario é e como imos grao. Pero, esencialmente, só sei que o formato xeral será vostede caras, quere interpretar code-- respondendo a preguntas básicas. Se eu lle preguntase, o que é unha biblioteca? Vostedes deben saber o que un biblioteca fai e escribir isto. Ou podo dicir, escribir un programa que Ola Mundo imprime en pantalla. Vostedes iría escribir, int main baleiro printf Ola coma mundo. Si. Audiencia: Entón iso non vai para estar en calquera lugar [inaudível] nivel de dificultade do conxunto de problemas? ANDI Pengo: Non. Non. Nós won't-- si. Fai a totalidade do xogo de 15 en 20 minutos, vai. Non, non vai ser isto. Non. Audiencia: Aceptar. Así que é mércores. Durante esta semana tamén ter o problema máis difícil establecer? ANDI Pengo: Non. Polo tanto, o problema define-lo debido o día antes das vacacións de outono. O schedule-- o correo electrónico foi realmente enviar para fóra 20 minutos respecto de todo isto. Entón vostedes pode comprobar os seus e-mails. Vai estar alí. Si. Sen preocupacións. Legal. Todas as preguntas xerais respecto ao anuncios, clasificación, quizzes, antes de mergullar a dereita en punteiros que consumirá a maioría do noso tempo sección de hoxe? Legal. Todo ben. Así que todos asistir a este lovely-- Non sei o que eles chaman. O onde a claymation fundou-se enriba porque non usar un punteiro correctamente. Ben, o seu programa vai probablemente fundir-se até se non empregue punteiros correctamente tamén. Entón, nós estamos indo facer estou seguro que iso non aconteza. Hoxe nós estamos indo a facer un pouco de diversión punteiro. Vou pasar por riba de cousas tan ben como eu creo é posible nun pequeno período de tempo. Pero hai tanta cousa para cubrir que realmente quero que vostedes, se non entender algo, non só déixeme continuar. Porque se non fai iso entender algo, probablemente non vai comprender todo o que eu dicir despois diso. Entón, por favor me parar e facer unha pregunta. Porque todo tipo de bolas de neve en conxunto. Como, punteiros ter en liderado de memoria en outras cousas. E por iso, se non entender as agullas, deixar de min e nós imos descubrir que ea vida se ve ben. Legal. Así como moitos de vós na charla, cando David mencionou punteiros, seus cerebros tipo de converter Jello-O? Si. Bo. Estamos indo para tratar de de-Jello-O cerebro hoxe. Nós imos realmente sistematicamente pasar polo que é exactamente un punteiro, o que fai, e como imos empregar las. Entón, todo tan pointers-- normalmente coas variables temos benvida a empregar na codificación, como variables como números enteiros ou cadeas ou Carrozas, todos eles son esencialmente un valor que lles é asignado así como un enderezo apuntando a este valor. Entón, eu estou indo a deseñar iso agora. Temos case ningún giz pero iso é OK. Así, por exemplo, normalmente a forma que temos benvida a empregar variables é que creamos o nome da variable do tipo int, imos só dicir. Entón aquí temos int x e estamos iniciar que int para 50. Entón, aquí neste bloque de memoria no noso ordenadores que xa almacenou un número de 50. Entón, onde punteiros entran en xogo é que o seu ordenador itself-- como, aquí, fisicamente no disco duro na RAM do meu Computador-- ten só unha cantidade finita de memoria. Non pode simplemente manter o almacenamento de cousas na parte superior das cousas por dentro de todo e te-los todos. Así, a forma que nós poñer dinamicamente memoria para poder almacenar o que queiramos e acceder a ela, é por punteiros. Entón, imaxine o seu espazo de memoria, non. Se este é o da súa RAM ordenador, ten eses pequenos anacos ou bloques ou bytes de memoria en which-- estes son só pouco bloques que se destinan a reserva fóra o disco duro ou memoria RAM do seu ordenador, e dentro de cada un destes bloques pode almacenar cousas distintas. Así, por exemplo, un Neste exemplo de matriz aquí é un byte que é que consta de oito bits. O número cambia dependendo da sistema operativo do seu ordenador. Por exemplo, como moitos de vostedes teñen escoitou falar de 32 bits contra operativo de 64 bits sistemas? Exactamente. Entón, todo o que non é pouca é que a memory-- que a forma que o seu ordenador xestiona a memoria é diferente. Que é por iso que é realmente importante comprender porque funcións en si, no canto de memoria que prestar atención aos números. Entón, nós realmente non me importa o grande esa matriz é, só se preocupe o grande que necesitamos un int para ser, o grande que necesitamos unha secuencia sendo, o grande é un punteiro? Aceptar. Por iso, vai ser moi , Información densa de abondo. Vou dar a vostedes un parella cómics momentos de alivio aquí. Vostedes deben ser capaces para entender iso agora. Porque sabemos que punteiros son enderezos, e os que son diferentes das variables. Aceptar. Legal. Bromas CS son a mellor, si? Así, a forma que nós imos sobre a creación dun punteiro é un tipo moi específico de sintaxe. Igual que a creación de calquera tipo de variable, é vai ser un específico sintaxe que usan para crealo. Entón, cando declarar calquera punteiro, un punteiro só essentially-- Creo que o importante parte punteiros é que mentres unha variable ten tanto un valor e un enderezo, un punteiro é un enderezo. O seu valor é un enderezo. Polo tanto, é un enderezo almacenado nun enderezo diferente. Se iso fai algún sentido. Nós falaremos sobre iso con máis detalles, pero esa é a forma xenérica de entendermos que de como unha impresora é almacenado. Así, o xeito que cree un punteiro é facendo calquera tipo de datos que o punteiro vai para ser referenciar e entăo-- coa star-- e despois o nome do punteiro. Entón, aquí, se quixésemos para crear un punteiro que apuntou a un número enteiro, e nós quixo o nome do punteiro para ser X, fariamos int x estrela. Si? Audiencia: E así se a seguinte liña vostede facer int x, int será a estrela x indican a localización do X está definindo despois? ANDI Pengo: Realmente boa pregunta. Nós falaremos sobre iso en un par desliza despois. Si. E entón mesmo con Char e mesmo coches alegóricos. Só sei que, neste punto creamos un punteiro, nós non temos realmente definir para igualar nada. Nós realmente non teño referenciado-lo. O mesmo aquí cando crea unha variable, que creou o nome da variable, non ten realmente definir un valor a ela. O mesmo aquí. Aceptar. Entón, como podemos definir valores punteiros? É referenciando e dereferencing. Así, a forma que podemos referenciar un varia-- un punteiro, en esencia retornamos a dirección na memoria de que unha variable é almacenado. Entón, se eu tivese un pointer-- Vou debuxar este xa que temos ao seguinte foto, pero só sei que, esencialmente, o correo oe comercial e todo o que o variable-- fai é dicirlle a dirección de onde algo é almacenado. E dereferencing é o contrario de que, que non é máis que a estrela. A estrela dálle só o real datos almacenados nese enderezo. Entón, dálle a dirección almacenado nun enderezo, outro dálle o real valor almacenado no enderezo. Entón, os dous dan vostede cousas distintas. Unha vez máis, as láminas son todo en liña así que non preocupa se vós non pode copiar este abaixo no tempo. Entón, imos dar un ollo neste exemplo aquí. Entón, temos un xigante matriz de memoria aquí, non? Onde só temos bloques de memoria, ou bytes de memoria, no que podemos almacenar cousas distintas. Nós só dicir que estes son os puntos de enderezos na memoria. Entón, cando ten - vexa o 0x, todo o que está dicindo é que Isto é un díxitos hexadecimais. Como todos sabedes, números podería basearse en bases distintas. Base de datos de 10 é como nós normalmente interpretar números. Hai tamén base 2, que é binario. E neste caso, hexadecimal é base 16. É só un xeito diferente de dicir de cero a 10-- ou cero a nove e, a continuación, tamén A, B, C, D, E, F. Tamén fai referencia a números diferentes. David, pasando esta charla en breve. Se vostedes son confuso, pode buscar en Google. Hai formas moi fáciles de aprender o que é un díxito hexadecimal. Todo o que é realmente relevante agora é para ti caras saber que un díxitos hexadecimais en C di vocę-- que tipicamente dille que é un punteiro. Ou iso é un enderezo. Así, neste exemplo aquí, int x é igual a 5. Estamos creando un integer-- Sentímolo, unha variable de tipo enteiro e estamos inicializar-lo a 5. Entón, aquí na nosa tarxeta de memoria, podemos ver que x é para o tipo de escola 0x0 eo valor que ten almacenado dentro do que é 5. Isto debe ter sentido para todos, non? Aceptar. E entón o que fixemos na segunda liña de código é que creamos un punteiro do tipo int. Iso é o que o int punteiro estrela está facendo. E iso é igual a que o ampersand x é dándolle o seu enderezo de algo. Así, a dirección de X en Neste exemplo é 0x0. E para que a dirección está a ser almacenado que punteiro. Isto ten sentido para todos? Entón, pense de isto-- pensar en pointers-- aquí en Yale temos un sistema de correo de voz onde cada alumno ten un mailing dirección onde pode ir no soto de LW e pode simplemente ir e coller o que precisa daquel enderezo. O mesmo pasa aquí nun ordenador. Tes eses bytes de memoria que pode almacenar información en, pero, a fin de saber que anacos de información match-se de que está intentando atopar e onde, precisa dun punteiro que di-lle como ir máis alá. Así, por exemplo, para min, a miña caixa de correos, Eu teño un número específico de cinco díxitos. Ese é o meu enderezo. Entón eu podo ir fisicamente a memoria, Podo ver o enderezo, Podo ir que a caixa de PO e acceder aos datos dentro. Isto ten sentido para todos Seu ordenador é esencialmente facendo exactamente o mesmo. Polo tanto, todos punteiro está facendo é que é só a creación dunha memoria e os teus datos de memoria é realmente a dirección de outra cousa. Entón podes ir e atopar iso. Todo o mundo é bo? Todos bo comigo ata agora? Aceptar. Legal. Todo ben. Así, case o mesmo que antes. Polo tanto, temos, en primeiro lugar, unha variable chamado X en que case-- Eu estou indo a cambiar ese valor para 5. Nós só dicir a dirección de isto en memoria é 0x0. 00. Gran. Así, pois, no noso segundo liña de código, somos vai crear un punteiro chamado punteiro PTR. E a dirección de que imos só dicir que é 0x01 na memoria. E nós realmente queren store-- oe comercial x dálle a dirección de que X foi. E a dirección x foi 0x00. Polo tanto, este punteiro agora de feito, ten a dirección almacenado como o valor de x que foi. Todos comigo ata agora? Legal. E entón, o camiño que teriamos que copiar, é se queremos declarar e arrincar outro bloque de memoria de tipo int. Non? Este sería un int. Sería chamado de copia. E está indo tan get-- o punteiro estrela dálle os datos reais de ese enderezo. O e comercial dálle a dirección, a estrela dálle os datos. Así, os datos no punteiro. Este punteiro está a apuntar cara 5. E así esta función aqui-- estrela pointer-- vai, recibe o que está este bloque e almacena-lo aquí. Todos clara sobre como isto aconteceu? Há-- Así, os dous operadores de dereito o comercial eo star-- só facer cousas distintas cando se usa en punteiros. Ten-se-lle a dirección, unha recibe o valor real. Entón asegúrese cando vostedes son codificación que non confundir as dúas cousas porque son moi diferentes. Aquí temos un bo exemplo dun 0x01. Iso é moi legal número pequeno de lembrar. No seu ordenador real terá un número aparvado xigante que é algo iso non é bo, non é agradable. Vai haber algún valor de lixo. E así vai, realmente, realmente interferir seus programas. É moi importante agora que temos os fundamentos abaixo para entender que, como o que está a suceder cando fisicamente está rodando eses bloques de código. Everyone-- si? Audiencia: Entón int x é igual a int copia? ANDI Pengo: Ningunha porque, neste caso, int x-- o valor x-- é igual a 5, non? E, a continuación, int copia é igual a 5. Entón, se fose para igualalo-los para outro porque son enteiros, si, eles ían avaliar a verdade. Pero se fosen cadeas na memoria, como o que David fixo durante exemplo, iso é diferente porque están facendo referencia os enderezos de sitios na memoria e equivalería a falsa. Entón, aquí sería verdade, porque está comparando directamente values-- integers-- pero nos outros é puntos de referencia. Porque é unha secuencia nunha matriz, e tudo-- imos falar sobre este later-- pero matriz é esencialmente só un Punteiro para unha morea de caracteres na memoria. Polo tanto, estas son un pouco diferentes. Pero neste caso, si, podería facelo. Audiencia: Pode explicar a dirección de copia? ANDI Pengo: Si. Entón é iso que eu apenas-- non enche un valor pero é só un outro chou valor de lixo que non se preocupan. Porque unha vez que inicia o programa entender que non, en realidade, realmente importa o que o enderezos reais son, nós só precisa saber o que está nos enderezos. Si. Audiencia: A estrela xunto a int no segunda liña, que é diferente than-- ANDI Pengo: Si. Audiencia: -o dereferencing e referenciar a estrela? ANDI Pengo: Si. Así, os autores de quen C-- decidiu escribir a lingua de C-- non era moi intelixente. Eles non foron moi intelixente no intento para descubrir por que deberiamos facelo. Se fose comigo, eu sempre usar dous personaxes diferentes. Pero decidiron utilizar a mesma. Así, a estrela despois dun int, que informa ao ordenador que está a piques de crear un punteiro. Pero se estás dereference algo-- noutras palabras, ir ao enderezo tire os datos de somewhere-- a estrela é utilizado de forma diferente. Entón vostedes só ter coidado con non desorde ambos usos. Legal. Si? Audiencia: Entón, só para repetir a asegúrese de que eu son following-- ANDI Pengo: Totalmente ben. Audiencia -En parte esquerda de que foto, nós facemos unha cousa que sabemos. Declaramos un enteiro [Inaudível] que son iguais a 5. ANDI Pengo: Si. Audiencia: Correcto. E entón temos algo int estrelas e que di que, OK, tipo de como nós declarou un enteiro, agora estamos declarando un punteiro. ANDI Pengo: correctamente. Correcto. Audiencia: Dereito? E o noso punteiro PTR é. ANDI Pengo: Yep. O nome do punteiro é PTR. Punteiro. Audiencia: E, a continuación, é igual a NX que di C que quere acceder ao valor en x-- enteiro o valor que integer x foi asignado. ANDI Pengo: Teña precaución porque, en realidade, ampersand x di vocę-- o ordenador que quere tirar a dirección do que x é. Entón comercial dálle a enderezo, estrela dálle o valor. Audiencia: Entón, nós queremos a dirección. Digamos que x era at-- ANDI Pengo: Nós, en realidade, sabe o que é x, non? Porque sabemos que son x foi-- inventando iso, pero imos só dicir, arbitrariamente, que era 0x00. Non? Entón, nós sabemos o enderezo está 0x00, e así cando imos e Ampersand x, sabemos que iso avaliará a 0x00. É por iso que almacenado que como o valor do noso punteiro. Isto ten sentido? Audiencia: Si. E copia vai para dereference ptr-- ANDI Pengo: Correcto. Audiencia: -que é un punteiro que temos declarou que nos di o enderezo do enteiro x. ANDI Pengo: Si. Audiencia: E neste un caso, estrela PTR é igual ao valor de x que é igual a 5. ANDI Pengo: Correcto. Audiencia: Cool. E esa é unha maneira máis sinxela de obter ou que é o que a única maneira-- ANDI Pengo: Entón, agora non parece moi lóxico para nós para gastar todo este tempo facendo esa cousa de super complicado cando todo o que fixemos foi só crear dous enteiros co valor de 5, non? Non ten sentido. Pero unha vez que nós imos pasar por riba reserva de memoria correo imos pasar por riba de por que isto pode ser accesible e útil máis tarde. Confío en min cando digo que non basta crear esas funcións arbitrarias para ti caras de aprender, porque somos intentando xogar con vostede. Hai realmente usa para todos eles cousas e imos falar sobre eles. Audiencia: Awesome. ANDI Pengo: Si. Audiencia: [inaudível]. ANDI Pengo: Boa pregunta. Audiencia: [inaudível]. ANDI Pengo: Non é. Realmente non é. Audiencia: variables --Dois que tamén igual [inaudível]. Aceptar. ANDI Pengo: Si. Aceptar. Antes de seguir adiante, está claro que todos? Sei Taylor, ten un pouco tarde. Está ben. É en liña. Vai ver o primeiro 20 minutos e vai ser todo de bo. Aceptar. Legal. Todo ben. Polo tanto, este é esencialmente unha especie de cousa semellante que acabamos de facer. É só nunha forma gráfica. Se estaba a seguir o que Só aconteceu, int x é igual a 5, todo o que fixemos neste momento é crear unha variable chamada x de tipo int. Estamos indo para almacenar o valor de 5 para dentro del. Non hai ningún punteiro porque non tivésemos realmente creado un punteiro aínda, non? E entón o próximo liña, punteiro int estrela, que é onde estamos, en realidade, creando fisicamente o punteiro e estamos definindo que igual ou referenciamento o punteiro para ampersand x. Que é onde en calquera lugar memoria este pasou a ser. Realmente non molesta tornándose un valor neste momento. Pero, neste caso, que o punto sería igual a isto. E entón alí en baixo, a estrela punteiro é o dereferencing. É onde estamos tirando a información. Así que o valor de x é a realidade será igual a 35. Polo tanto, neste punto, temos esencialmente só Acerar x 35 sen chegar a toca-x. Só a través do punteiro que estaba a apuntar cara x, podemos realmente cambiar o que estaba x. Eu estou indo a deseñar ese fóra tamén. Entón, aquí creamos algún enderezo aleatorio aquí. Nós só dicir 0x00 novo. Nós só dicir que é a dirección. E creamos un enteiro chamado x eo valor que lle atribúe a el é 5. Na segunda liña, Int pointer-- entón agora temos teño esa segunda cousa aquí chamado pointer-- e imos a-- imos só dicir é algún outro enderezo de memoria aleatorio. Entón, nós estamos indo a definir esta igual ao que quere que fose. E ese punteiro vai apuntan ao valor de x E entón, se mudarmos as-- se facemos punteiro estrela, que está indo para a valor do noso punteiro. Neste caso, vai rastrexar Esta frecha sobre a este valor de x e que vai mudalo a 35. Efectivamente, só cambiou x sen tocar x. A través punteiros só facendo referencia podemos ir e cambiar o valor de x. Isto ten sentido? Así, deste xeito, podemos realmente cambiar o nome e valores rechange e reaxusta para as cousas que nós non realmente facer a nós mesmos. Isto ten sentido para todos? Legal. Aceptar. Gráfico tan complexas aquí. Vaia liña por liña. Esencialmente, pode facer o exacto mesmo que eu fixen. Antes de seguir adiante, I Realmente quere só facer garantir que todos é moi claro sobre este asunto. Entón, ata aquí, o código que temos é int un é igual a 3, b é igual a 4, c é igual a 5. Entón creamos tres enteiros nomeados a, b e c que son iguais a 3, 4 e 5. E entón nós estamos creando tres punteiros Nese punto a cada unha destas variables. E agora imos para pasar por riba esencialmente o que ocorre cando opera sobre eles. Entón, atrae-los para fóra. Tome unha folla de paper-- non sei se vostedes todos teñen papel, pero aqueles de vostedes que non, quizais pedir prestado aqueles de vostedes que fan. Tome follas de papel e ir liña por liña. E cada operación que fai, Quero que vostedes realmente escribir fóra o que é, un b e c neste punto. E cales son os enderezos, cales son os punteiros que apuntan a un, b e c neste punto? E entón espero que isto vai tipo de paso que vostedes mediante como pensar punteiros. Non estamos indo a ir a través de todos eles. Poida que eu vou che dar five-- como, tres minutos. Comezar a facer os primeiros. Oh. Oops. Audiencia: Na segunda liña, por que Non é a variable [inaudível] estrela? ANDI Pengo: Teña en conta que no operadores, a primeira semana, falamos de como se fai máis iguais, iso só significa un é igual a un plus c. Neste case-- polo que esta é outra xeito en que a estrela se pode usar. Ademais referenciar e declarando punteiros, lembrar que tamén significa multiplicación. Polo tanto, neste caso, tiña acaba de ser igual a veces c. Isto é tan diferente xeito de escribir isto. Audiencia: un é igual a un veces c. ANDI Pengo: Si. Audiencia: Que significa que el di que carta comercial? ANDI Pengo: medios Ampersand está indo a isso-- é indo ao lugar do punteiro é apuntando e tirando o enderezo. Entón comercial dálle a dirección, estrela dálle o valor real alí. Audiencia: Somos nós con base na liña por liña? ANDI Pengo: Vostede é con base na liña por liña. Entón, só tes que ir unha liña de un tempo e entăo-- Non se preocupe con rematar a cousa toda. Imos tentar obter a través de quizais dous, tres liñas e despois imos convocar e acabar con isto. É totalmente Aceptar se vostedes están perdidos. Este é un concepto moi difícil. Se vostedes están preocupados que a clase é así como David estaba dicindo, iso non acontece. Estamos chegando ao pico conceptual de dificultade e, a continuación, que vai ser inclinada cara abaixo. Entón vostedes están case alí. Temos lotes de doces para vós a través do corcunda. Creo moi bonito despois de caída romper estaremos sobre a corcunda ea vida se ve ben novo. Entón non se preocupe en todo. Todo ben. Vou dar a vostedes 20 máis segundos para pechar. Aceptar. Todo ben. Imos dar unha facada no presente. Como vostedes me dar respostas, Eu só vou gravala-los. E espero que nós-- podo? En realidade, eu non podo escrebela no. Vou deseña-lo no taboleiro. Entón, aquí nesta primeira liña temos unha estrela é igual ab c. Tamén Elliot trouxo á tona unha realmente, realmente bo punto. Porque eu esquezo que, ademais de as dúas formas que podemos usar o símbolo de estrela, hai realmente unha terceira vía. Multiplicación. E por iso só non se confunden, porque que é a primeira forma de usar unha estrela. É só dicir ao ordenador que eu estou a piques de crear un punteiro. A segunda forma, facendo estrela do punteiro, di que o punteiro que quere para acceder aos datos a ese punteiro. E despois, claro, hai multiplicación só simple entre dous números que lle di que quero multiplicar os dous. Polo tanto, hai unha morea de formas podemos utilizar o símbolo da estrela. Non sexa confuso. Só asegúrese de que vostedes entenden o que os tres deles están facendo. Polo tanto, nesta primeira liña, a é igual a B veces c. Entón, imos pasar polo que é un, o que é b, o que é c? E o que é o punteiro dun, o punteiro para B eo punteiro para c? Que son todos aqueles igualando? Aceptar. Entón, imos comezar con un igual a 3, b é igual a 4, e c é igual a 5, non? Entón, despois de que a primeira liña, pode Alguén me diga o que é un? Si. Sinto-se libre para só berrar respostas. 20. Bo. ¿Que é b? Audiencia: 4. ANDI Pengo: O que hai de c? Audiencia: 5. ANDI Pengo: Yay. Bo. ¿Qué son o PA, PB, e PC? Audiencia: 000001 e 002? ANDI Pengo: Si. Así unha especie de pegadinha pero non é realmente porque aquí tirou memorias reais. Senón porque, por exemplo, non realmente sabe o que estas cifras son, podemos só dicir comercial. Eu non sei se eu pode deseñar un e comercial. É como-- como fai iso? Audiencia: Como deseñar un oito. ANDI Pengo: Como un oito. Así. Aceptar. Audiencia: Bingo. ANDI Pengo: matalo. Entón comercial Unha, pode simplemente facer. Porque realmente non importa o que o valor desta é, e é un pouco longo valor burro de calquera xeito, estamos usando só giong para dicir un 'e' comercial. Entón cal é pb? Audiencia: [inaudível]. ANDI Pengo: Si. Legal. Todo ben. Fácil primeira liña. Temos iso. Punteiros son fáciles. Está ben. Segunda liña. E así é igual a estrela é o mesmo cousa que dicir un é igual a un veces c. É só un xeito máis doado de escribir. Polo tanto, non estamos intentando facer un punto ou algo aquí. Así, feito coa primeira liña. ¿Que é unha liña na segunda despois de facer un é igual a un veces c? Audiencia: 100? ANDI Pengo: É 100. Bo. Como case b? Audiencia: [inaudível]. ANDI Pengo: Que tal c? Audiencia: [inaudível]. ANDI Pengo: E como sobre punteiros? They-- son o mesmo, non? Aceptar. Agora terceira liña. Pouco máis complicado. b é igual á estrela. Alguén me pode dicir, en primeiro lugar, o que fai estrela pa igual? Audiencia: É o valor que está almacenado nun. ANDI Pengo: Exactamente. E o que é o valor que é almacenado a unha? Audiencia: 100. ANDI Pengo: Aceptar. Entón, o que sería un ser despois executar esta liña de código? Audiencia: [inaudível]. ANDI Pengo: E sobre b? Audiencia: 100. ANDI Pengo: Si. E entón o resto é practicamente inalterada, non? Porque non tocalo. Legal. Cuarta liña. Un pouco máis complexo. Entón Pc, unha vez máis, PC é o punteiro que apuntaba a C-- iguala pa. ¿Que é un? Audiencia: 100. ANDI Pengo: Qué é b? Audiencia: 100. ANDI Pengo: Qué é c? Audiencia: 5. ANDI Pengo: Qué é pa? Audiencia: Ampersand a. ANDI Pengo: pb? Audiencia: Ampersand b. ANDI Pengo: E complicado, o que é PC agora? Audiencia: Ampersand a. ANDI Pengo: Yay. Woo hoo. Vostedes ver? Isto está todo correcto. Non é moi malo. Temos máis doces que non é todo seguro, pero creo que está todo ben. E nós imos pasar por riba de só unha máis antes de bater as máis difíciles. As respostas que eu teño aquí. Esencialmente, sabemos que este é exactamente como a aritmética neste momento. Cando ten ecuacións, como un máis b, c un veces, iso é fácil de facer. E cando comezar a ampliar enriba Lo, só tes que ir orde das operacións. O mesmo de antes. Manteña o control do seu caso estrelas é antes de calquera cousa. Isto di-lle o valor. Se tes un e antes algo, dille a dirección. E ten que asignar calquera dos punteiros ou ese valor. Entón, imos pasar por riba desa último rápida real. Non esta última, desculpe. De feito, podedes escoller. Cal deles caras queren ir ao longo das restantes tres que temos? Eu non creo que podemos só facelo porque non podemos simplemente ir para a liña. Aceptar. Vostedes non teñen unha opción, é só o terceiro para durar un. PC estrela é igual a B veces c. Audiencia: pb Star? Audiencia: pb Star. ANDI Pengo: Sentímolo? Audiencia: pb Star. ANDI Pengo: pb Star. Oh, meu mal. Pb estrela é igual a B veces c. Vou dar a vostedes 10 segundos. Basta pensar rapidamente. Este é que temos así agora, o que pasa despois de que realizar esta quinta liña alí? Aceptar. ¿Que é un? Audiencia: 100. ANDI Pengo: 100. ¿Que é b agora? Audiencia: 500. ANDI Pengo: Boa. Será que alguén quere explicar me por que isto é 500? Eu non me sinto como nós de feito, xa tocou b. Como é que podemos cambiar o valor de b sen tocar b? Si? Audiencia: Por estrela pb significa o valor en pb-- ANDI Pengo: Exactamente. Audiencia: -que é b. ANDI Pengo: Exactamente. Entón, aquí no noso diagrama, o noso punteiro pb realmente está a apuntar cara ese dereito aquí, o cal é o b física real. E por iso, se vai e fai estrela pb, que é seguindo a súa frecha do punteiro e físicamente cambiar o valor de b. É por iso que temos b cambiado 500 sen realmente tocar b. E entón o resto segue a ser o mesmo porque non toque niso. Isto é b. Legal. E logo-- Audiencia: Eu só teño unha pregunta. ANDI Pengo: Si? Audiencia: Desde we've-- non hai máis comercial c, isto significa un e comercial redireccionar para o mesmo agora? ANDI Pengo: Yep. Assim-- Audiencia: Entón a frecha tipo de só move correo ANDI Pengo: Entón essentially-- Audiencia: --now non podemos access-- ANDI Pengo: --quando nós dereference c on-- I falsificador. Que foi iso? A terceira liña? En cuarto lugar. Cuarta liña. Todo o que fixemos foi, esencialmente, cambiar esta frecha e telo apuntado para unha vez. Audiencia: Polo tanto, non podemos acceder c anymore. ANDI Pengo: Se tivese ese exacto número, pode acceder a ela. Pero ningunha. Non temos un punteiro que apunta a c máis. Eu creo que se quería para volver a acceder a ela, vostede crearía outro punteiro que re-sinalou c ou desreferenciado este e apuntou cara atrás. Entón, non, a partir de agora, os tres punteiros, ningún deles apuntar C. Todo o mundo é bo? As respostas están en liña. Sinto-se libre para, tras a sección, pasar por riba e os dous últimos probas vós. Mesmos conceptos, só un pouco máis complicado. Só ten que seguir a través da lóxica de por que as cousas son cousas diferentes. E información, punteiros son un tema que nós aman para cubrir sobre quizzes porque son conceptualmente moi reto. Entón eu sugiro que caras todas avaliar este gráfico ou barra conceptos semellantes aos que antes do seu exame na próxima semana. Audiencia: Desculpe-me. ANDI Pengo: Si? Audiencia: [inaudível] última um-- [inaudível]. ANDI Pengo: 50.000? Quere necesitas seguilo de volta para abaixo. Pero somewhere-- Creo que a liña antes, creou valor c xigante. c é igual a esa cousa xigante que é 100 veces 500. Non. Audiencia: [inaudível]. ANDI Pengo: Si. 100 veces 100 que é 10.000. Cal é 10.000. Entón, de volta para abaixo alí é multiplicando b e c. Así, o punteiro que apunta a B-- que é o valor de 500-- veces A-- Audiencia: [inaudível]. ANDI Pengo: Quizais iso é incorrecto. Audiencia: Non, non, non é. [Inaudível] punteiro no c agora está a apuntar cara um-- ANDI Pengo: Si. Está certo. Audiencia: -É a súa nun equals un vezes-- é o valor de c. ANDI Pengo: Pode dicir que un pouco de pouco máis alto para que todos poidan ouvídelo? Audiencia: Entón punteiro no c apunta agora en que o punteiro dun usado para ligar a-- e aínda does-- pero apuntan o mesmo que se a un, non? O valor de un, con todo foi recentemente definido. E a principios do que é dicir unha era anteriormente 100 veces o valor en b que é de 500. E así que é con todo moito do que é. 50.000. Eles está reasignación de que o que o espazo de memoria en c é-- o punteiro en c está a apuntar cara ao que é un. Entón está redefinindo a ser 50.000. ANDI Pengo: Podía ensinar a sección para min. A próxima vez que el é todo seu. Aquí. Aquí está máis doces para iso. Merece doces para iso. Audiencia: Eu case pego iso. ANDI Pengo: Vostede case colleu iso. Está ben. Si. Pero ela era exactamente correcto. Entón, o que tes que facer é isso-- creo que nós ten que seguir o feito que os punteiros están apuntar diferentes valores. Así, o value-- Sentímolo, o punteiro C repointed a un. E así que cambiou todos os nosos números. E é por iso que, cando accede á valor almacenado aí, é diferente. Isto ten sentido? Aceptar. Legal. Todos ben, antes de seguir adiante? Audiencia: Será que as-- cando está indo abaixo as liñas na columna da esquerda, a primeira liña afectar á segunda fila e, a continuación, o second-- como, por tudo-- ANDI Pengo: Si. Entón imaxino que é código onde eu escriba nun é igual a B veces c, unha estrela é igual a c. Basta imaxinar que eu teño só foi este código e eu non imprimir o que todas estas cousas eran. Se eu fose só para imprimir a primeira cousa na parte superior, el estaría aquí. Despois eu execute todo esas liñas de código, que eses valores deben estar no extremo que son. Entón, realmente escribín un programa aquí. Non teño feito todos a multiplicación. Pero imaxinen. Entón aquí eu só teño un programa chamado punteiros. Eu estou indo a aumentar o zoom se guys-- Aceptar. Entón, eu criei variables a, b, c. Eu define-los igual 3, 4 e 5 e eu teño crearon seus punteiros correspondentes. E entón aquí eu só vou para imprimir o que é. Entón deixe-me facer iso. Vostede caras see-- porco. Vostedes ver como un, b e c son os valores pero os seus punteiros son este xigante valor de lixo que non se preocupan? Entón, se eu fose realmente conectar en toda a multiplicación e logo reimprimir todos iso, sería executado fóra para o que está na parte inferior. Entón, se vostedes queren xogar de feito, con codificación fisicamente, vós pode simplemente conectar todos aqueles en. O código será en liña e, a continuación, o seu valores deben imprimir para que despois. E entón vai ver como o punteiro enderezos realmente trasladado. Entón, vai ver como o enderezo do c pasa a ser realmente para igualar calquera que sexa a dirección dunha era. E van coincidir co que quere que gran número é. Boa pregunta. Todo o mundo está ben? Unha última chamada para preguntas. Aceptar. Todo ben. Entón prepare-se para ter a súa mente soprado algo pouco máis. Arrays son realmente só punteiros. Isto é todo o que son. E lembre, o que son secuencias? Eles tamén son arrays. Entón, cales son realmente cordas? Son como punteiros para a comezando dun char de máis caracteres. Polo tanto, non é máis que conceptos que comezan para construír enriba uns dos outros. Entón, iso é para entender que Teña en conta que, en charla, David, cando tivo esa comparación de nai secuencia int é algo e, a continuación, outra nai corda e tentar igualar os dous un ao outro, eles danlle valores diferentes. É porque cordas si non son valores. Todos eles son son enderezos de memoria char-- son arrays de caracteres e matrices son só enlaces. Así, no esencial, cando David foi comparing-- Está todo ben se eu borrar todo isto? Así, en charla cando David nai tivo igualdade é igual a nai, -Nos que parece ser o mesmo. Non? Pero, no ordenador baixo a capo, o que está realmente a suceder é que esta cadea, todo o que é é unha matriz. Cunha ampersand-- ou, desculpe, cun terminador nulo ao final. Non? Backslash 0. Barra invertida mal. Entón, todos eles were-- todo estas dúas cordas were-- son variedade de fours con tamaño as cartas de nai e nai. Pero o que realmente son matrices son só punteiros para un lugar específico na memoria que lle di para comezar a súa matriz. Polo tanto, neste caso, todo isto era era só un valor de lixo, algúns punteiro aleatoria. E todo iso foi foi algún outro valor de lixo. Nós só dicir que 0x200. E así, cando se trata de igual Los entre si dous, eles avalían a falsa porque o addresses-- os punteiros were-- que eran diferentes. Tendo en conta que é diferente se está tentar comparar enteiros reais. Como se quería compare-- no último example-- int A para B, eles ían avaliar a verdade, como dixo Elliot porque eran números enteiros que foron almacenados e está avaliando só os valores. Aquí, porque cadeas son arrays e todas as matrices son punteiros, é por iso que eles non son iguais unha á outra. Entón, medio confuso, ese gráfico. Pero imos imaxinar. Temos crear unha matriz de tamaño 3 con índice de 0 a 2-- 0, 1, 2 cos valores de 1, 2, 3 e almacenada neles. Todo o arranxo de verdade does-- aquí, imos só dicir que eu estou creando un punteiro para esa matriz que é acceso ao valor no primeiro índice desta matriz. Entón, aquí sería 0. Non? Será que todo o mundo entender como que a primeira liña avaliadas? Gran. E por iso, se quería para arrincar os valores adicionais despois do que, todo o que estamos facendo é reasignación. Así, 0, 1, 2, 1. Polo tanto, este punteiro que era unha vez apuntando para aquí, todo o que estamos facendo está movendo para abaixo. Iso é o que o máis 1 está facendo. E entón podemos poñer dous alí. Se quixésemos poñer tres nun despois, nós ía borrar ese punteiro, poñer 3 en alí. Isto ten sentido todo? Si. Ten unha pregunta? Audiencia: É [inaudível] teñen unha pregunta, eu vou dicilo de calquera maneira. Eu non creo que é realmente un Mas-- pregunta en inglés, array é igual a 1 ten sentido. Somos como, OK, o primeiro. Pero as cousas son índice 0 [Inaudível] a matriz é igual a 0 para indicar que o primeiro punto. ANDI Pengo: Si. Entón, en realidade, o que estou facendo aquí é Non estou acceder ao primeiro índice. Todo o que eu estaba doing-- entón primeiro de todo, dígame o que facer matriz estrela? O que fai unha estrela antes dun punteiro de facer? Audiencia: Indica un punteiro. Que está declarando un punteiro. El de-- ANDI Pengo: É dereferences que medios vai e realmente obtén o valor. Non? Polo tanto, neste caso, quere comezar o valor definido aquí e que, a 1. Si? Entón eu non estou actually-- non realmente se preocupan o índice deste, todo o que eu estou facendo é só a iteración abaixo movendo miña punteiro abaixo a matriz. E, a continuación, finalmente, eu ten que parar con iso, non? E a forma que eu deixar é cando bati en caso dunha corda, un terminador nulo. Sei, oh si eu acertar un traseira-- se eu ver barra invertida 0, sei que eu son feito con este e sei que podo só deixar iterado. Realmente boa pregunta. E nós imos realmente ir máis lonxe en profundidade nesta semana porque a peza que vai involucrar unha morea de uso de punteiros. Pero só sei que agora, iso é só unha more-- diferente que é só un xeito diferente para o ordenador para escribir, esencialmente, o que temos está a facer. Como David dixo charla, o xeito que nós acceder a unha matriz é só por facer matriz 0, soporte 0, se nós só quería acceder ao primeiro valor. Todo o ordenador está facendo é converter que no que a iteración e si. Entón, nós o chamamos sintáctica azucre, que é só un xeito elegante de dicir agradable formas de saber programar. Pero o ordenador por baixo, o que está facendo, é realmente só ter un punteiro que está axustando. Pero a forma que nós escribilo lo, porque é máis fácil para nós para pensar sobre as cousas en termos de caixas e como baixar caixas, é por os soportes. Sentímolo, iso foi moi, realmente mal Mas-- si. Audiencia: Entón como é que comparar dúas cordas para ver se son iguais entre si? ANDI Pengo: Entón David escribiu este programa en charla entón eu estou indo só para ir máis rápido e breve. O xeito como faría iso é que realmente que ir e comparar o addresses-- ou os valores obtida a partir dos punteiros. Entón lembre, como obter o valor aquí? Eu non me importa sobre a dirección aquí. ¿Como comezar realmente a valor de todo o que está aquí? Audiencia: [inaudível]. ANDI Pengo: Exactamente. Entón comparar a estrela aquí contra a estrela aquí. Son aqueles iguais. E entón vai para abaixo. É a estrela aquí e a estrela aquí igual? Aceptar. Son iguais. E só vai manter abaixo ata que alcance o final de ambos. E se todos eles son iguais, entón vostede sabe que a súa secuencia é igual. E C, de feito, ten un función escrita chamada Corda Comp que en realidade só fai isto para vostede para que non ' ten que escribir-se. Si? Audiencia: Eu creo que en charla é cando facemos a comparación. Nós realmente non precisa dun contador como pi, non? ANDI Pengo: Non facer porque realmente non me importa cantas caixas nós iterado. Todo o que importa é que nós imos continuar ata que sei a parar. E vostede sabe cando deixar hai algún tipo de indicación que está nun terminador nulo. Si. Assim-- Audiencia: [inaudível]. ANDI Pengo: Si. Así, no caso de se comparar cordas, realmente non importa cantas cartas é-- necesito comparar se son verdadeiras ou falsas se son iguais entre si. Eu non me importa cantas cartas están en cada un deles, non? Só me importa que esta corresponde a este ea un tras partidas a un despois xogos de todo o camiño ata o final. Non? Isto ten sentido? Entón, realmente non me importa cantas letras, Só me importa que todas as letras xogo. Si. Aceptar. Podo seguir adiante con iso? Gran. Estamos executando un pouco curto en tempo, entón eu vou só permiten que caras para lanzar brevemente un ollar iso. Executa-lo no seu ID se vostedes están curiosos. E vostedes poden ver o que iso será imprimindo. Aceptar. Polo tanto, algo que tamén imos tocar nun bit é a idea de aritmética de punteiro. O que, todo o que é, é en vez de axustar os valores do que se garda no enderezo do punteiro, é só realmente cambiando o propio enderezo. Polo tanto, se como o ser humano quería para axustar o punteiro manualmente do xeito que faría iso é só facer n veces a dimensión do punteiro. Non? Entón, un int. Un int-- cantos bytes na memoria é un int? Son catro, non? Entón, se eu sei que eu teño unha matriz de todo ints e quero iso para apuntar para o despois, eu sabería que eu só teño que mover meu punteiro abaixo catro bytes, non? E así n veces o tamaño dos bytes de punteiro é, con todo moitos bytes é só indo para mover o punteiro para abaixo por. Así, por exemplo, se temos unha matriz de ints, o primeiro, imos só dicir, almacénase como valor 0x00. Vostede sabe que a próxima será en 0x04 porque iso é catro bytes máis tarde. E un despois que ser 0x08 e así por diante e así por diante. E así, caras, dar un ollo. Todo o que está facendo aquí é que ten un punteiro y e está engadindo que a súa memoria de modo que pode baixar os bloques de memoria alocada. Tipo de un concepto de nivel superior. Vostedes non precisarán saber a esta semana, pero iso é todo o que está facendo alí abaixo. Aceptar. Outra vez broma. Dúas cordas entran nun bar. Un di, gustaríame un ron e valores de lixo de Coca-Cola. O outro di, vai ter que desculparse meu amigo, non está terminada nula. Vostedes obtelo. Desculpe. Isto é como eu me manteño indo cando preparar á sección é que inserir un gracejo parella diapositivas. Anyways. Aceptar. Antes de pasar on-- así, esencialmente, temos cubriu toda a conceptual cuestións relacionadas coa punteiros. E entón nós imos talk-- en movemento máis, falar por que isto é importante e como iso encaixa no idea de xestión de memoria. Pero antes de seguir adiante, Alguén ten preguntas sobre o uso do punteiro, o que está a suceder cando está creando punteiros, como están a referenciar cada outro, como son dereferencing? Calquera dúbida sobre que antes de seguir adiante? Aceptar. Gran. Entón, iso nos trae a este concepto maior nivel de xestión de memoria no seu conxunto. Así, esencialmente, en ordenador, non hai dous tipos básicos de memoria ou rexións en que a memoria se garda. Tes aquí o que se chama a pila e ten aquí abaixo o que se chama a pila. E nós estamos indo falar a pila primeiro porque é o máis que finagley ten que tipo de conceptualmente entender o que está a suceder. Así, toda a pila é-- pensar Lo como unha pila de memoria física onde ten un bloque de memoria que está reservado para o seu programa mentres el está funcionando. E é aí que, esencialmente, todo das súas variables locais son almacenados. Polo tanto, este é só un zumbido na imaxe de que pila. A pila alí embaixo, eu son só o zoom en un pouco máis. Entón, esencialmente, nunha pila ten unha morea de función no seu programa. Entón imos voltar para a semana dous exemplos onde tivemos a nosa función principal , Así como unha función de cubo onde tratamos crear unha función que cubed-- que levou parámetros como entrada, los en cubos e devolto los de volta á principal. Así, a forma que que está almacenado na memoria é que ten a súa función principal aquí na parte inferior. E, a continuación, con cada función adicional que chamar e engadir enriba diso, a memoria só pilas na parte superior. Pense nisso como unha pila física. E así que ten todo de ti principal variables de súas principais funcións, todo o que está a suceder aquí, almacenado. E entón cando chamada cubo, que vai e crea unha copia de todos os parámetros e almacena-los arriba nun lugar diferente. E entón por que nos importa? A razón pola que nós nos importa é que non podemos só Use os parámetros aqui-- as variables aqui-- e nós cambia-las, esperamos los para tamén pode cambiar aquí, non? A idea é que están gardados en distintos lugares da memoria de xeito que, cando está accedendo diferente funcións, o que pensas que está a suceder non está realmente a suceder porque o bits de memoria non están conectados. E entón a cuestión que é realmente importante para nós tipo de entender é, que, cando estamos correndo un programa, o tamaño dunha función apilar frame-- tan fisicamente, como cantidade de memoria que temos que darlle? Quizais sexa unha función de xigante para que ten que dar esa cantidade de memoria. Pero, se fose menor teremos precisa un pouquiño. Así, a idea é que, cando estamos executando un programa que o tamaño da función é dependente de como moitas variables e do tipo de variables que queremos dar. Pero e se o número de variables-- e os seus tamaños, que é non determinado por ti, pero o codificador é determinada pola real usuario do seu programa. Entón, se eu quería crear unha función que tomou cordas do usuario, pero eu realmente non sei o quão grande aquelas cordas son, é difícil para min para poñer o específico cantidade de memoria necesaria. Non? Porque, se esta se function-- este usuario inserir unha cadea xigante, que vai crear un erro do que se chama esencialmente estourido de pila, onde vai alén da límites da memoria que ten. E entón o que imos facer? Se non podemos simplemente crear esta xigante apilar que pode gardar todo, o que imos facer para resolver este problema? Entón, imos seguir adiante e falar sobre o segundo tipo de memoria e despois podemos falar de como podemos utilizar os dous xuntos para resolver esta cuestión. Entón, agora imos ir cara arriba para unha parte distinta da memoria no noso ordenador. Iso é chamado de datos dinámicos. Así, toda a pila é unha piscina memoria dispoñible do que pode ser alocada dinamicamente. Así que pode cambiar mentres o programa está en execución. E así unha rexión de memoria non utilizada que pode ser allowed-- que se pode asignado coa función chamado malloc, ou distribución de memoria. Así, esencialmente, cando está executando un programa, podes crear dinamicamente a memoria de a pila e usar isto todo aquí debaixo. E entón, as súas funcións aquí pode acceder ao heap. E así malloc, esa idea de que David tipo de forma rápida, brevemente encuberto na charla, é só un xeito para controlar a súa memoria. Como, cando está só creando apilar funcións, cando é só ter a súa principal función coas súas funcións aleatorias, pensar neles como nenos que, así fuxiu cando se fixo con eles. Eran nenos realmente malas. Crea-los, ensinarlles algo, e entón cando quere acceder a eles de novo son non hai por que o seu memoria só fuxiu. Pero malloc, ou a pila, é un xeito de ter fillos mellores, onde pode tipo de crear Los, asignar-lles valores, usar eles-- que soaba realmente bad-- usalos con todo quería, pero, a continuación, ser capaz de controlar eles e, a continuación, liberar memoria sempre que precisa deles. Polo tanto, cando está feito co seu función, os nenos volven para ti e aínda ten que os datos alí. Así, a forma que nós malloc, ou crear, memoria é pola estrela función void malloc tamaño en bytes. Entón, iso é só o prototipo por que facemos isto. Entón, un exemplo é que creamos un punteiro do tipo int-- iguais int estrela pointer-- malloc tamaño int. Así, a razón pola que facemos tamaño do e non só un number-- porque todos sabemos que un int é de catro bytes, direita-- pero un int é só catro bytes en certos sistemas operativos. A idea para nós, programadores é que quere crear código que pode realizar en todos os ordenadores, non só nosos ordenadores simple. E é por iso que nos gusta de usar de tamaño e non só o número de catro. Isto ten sentido para todos? Así tamaño de-- todo, é un C función ou operador que informa cantos bytes de memoria fai un certo tipo de variable ocupan. Polo tanto, neste caso, o tamaño dun int é catro. Catro bytes. E malloc vai liberar ata catro bytes na súa pila, entón podes usar no seu principal función de poder almacenar memoria. Claro que todo en que medida? Si? Audiencia: Eu son claro, pero só para ser máis clear-- ANDI Pengo: Aceptar. Totalmente ben. Audiencia: --size de é [inaudível] realmente [inaudível] e que vai realmente facer o cousa que queremos que el. Non é un pseudocódigo. ANDI Pengo: Non. Audiencia: É como un verdadeiro coisa-- ANDI Pengo: Este é o código real. Audiencia: --nós pode usalo. É real. Legal. ANDI Pengo Tamaño ven con C. Audiencia: Isto fai miña vida máis feliz. ANDI Pengo: Si. Entón, se vostede é un desenvolvedor preguiceiro como eu medio que son ás veces, Eu non me gusta de memorización o tamaño dun int é, eu non me gusta de memorización co tamaño dun flotador é. Tamaño de só di o que que é, e iso é moito máis fácil. Todo ben. Entón, unha cousa importante que todos queren para manter presente cando está usando malloc é que sempre ten que comprobar a ver se é nulo. Entón, como dixen, de volta á que a imaxe do heap. A pila é só este xigante pila de memoria que ten. E quere ser capaz de aproveitar anacos de memoria dela e usalo, non? Pero e se non ten ningunha máis memoria heap en que? E se eu xa usei todo del e intento malloc máis? Iso non existe. Ben, é por iso que é indo para obter un erro. Está indo a SEG culpa. Vai ter un fallo de segmento, onde accederes as cousas que non están alí. E así o xeito no que facemos e que a forma que nós evitar isto é que encontramos a ver se nula do punteiro. Entón, se eu fose algo malloc e eu non tiña máis memoria, que ía imprimir un erro porque o punteiro devolto a vostede é só nulo. E así o xeito no que facemos isto-- iso é gran deseño, só memorizar isto-- é que calquera xa que se trata de malloc nada, está indo a necesidade de comprobar a ver se é nulo. Porque sempre que intenta obter memoria do heap, sempre ten que facer Asegúrese de que ten memoria. Isto é todo o que é. Entón, basicamente os tres liñas de código, memorizar. Cada vez que malloc, plop a eles. Vai ter deles. Porque eu asegura que, imos para proba-lo en un caso eo seu ordenador vai explotar, porque está vai memoria de acceso que é non alí e as cousas van accidente e iso non vai ser bo. Entón, só que perforar no seu cerebro. Malloc, null. Bo. Todo ben. Entón este xera a cuestión do que acontece despois de que termine de usar esa memoria. Porque toda a idea Tendo era de malloc que temos este chea que poidamos tomar memoria desde e entón podemos usalo. Non? E entón o que temos que lembrar é que, despois de que está feito con el, podemos entón libera-lo. Déixao ir. Podemos deixar ir. Ou tamén vai baleirar memoria e máis cousas malas van pasar. Esencialmente, sempre está tocando de memoria, cousas malas van ocorrer se non facer as cousas correctamente. Entón tes que comprobar a ver, en primeiro lugar, se ten a memoria dispoñible. E, a continuación, despois que fixo, quere liberalos lo e facer o seu sistema operativo para levalo de volta. Entón, a nosa forma de facelo é só iso función, nula libre, eo apuntador para aquel monte de memoria. Así, o exemplo é punteiro libre. É moi fácil, simple, non quero esquece-lo. Entón confía para ver se é nulo, libre. Todo o mundo é bo? Entón unha vez máis, o código que vostedes pode tipo de rapidamente ter un ollar. Sei que é un monte de nova sintaxe e está todo ben se é como, ah, o que significa iso de novo? Sen preocupacións. Todo isto estaba a ser está mostrando unha acción, como todas esas cousas poden ser utilizados en conxunto. Así que é poñer xuntos como unha banda de pasado láminas nós só fomos mediante nun programa. Audiencia: En certo xeito que pode actually-- ANDI Pengo: Dunha forma que podemos realmente usar. Podería plop que na súa identificación, pode executa-lo e ía traballar. Audiencia: Aceptar. Entón, iso é real? ANDI Pengo: Isto é real. Si. Intento facelo para que o fontes son diferentes, así que cada vez que escriba reais código fonte é o código fonte e que o meu código de nota é diferente, pero Non sei se isto realmente funciona. Audiencia: Non. Coido isso-- ANDI Pengo: Aceptar. Audiencia: --sometimes [Inaudível] e eu son como, iso sería realmente bonito se era realmente unha cousa útil pero non é unha cousa útil. Gústame que iso é unha cousa útil. ANDI Pengo: Aceptar. Si. Vou pasar iso xunto. Sexa como, David, os nenos son realmente triste cando escribir código falso. Todo ben. Si? Audiencia: Entón os PTR aquí non é en realidade un punteiro, é un bloque de memoria? ANDI Pengo: Entón está falando a primeira liña ou a un aquí abaixo? Está falando sobre ese aquí? Audiencia O PTR é cousas distintas em-- ANDI Pengo: Ben, ata aquí enriba o que eu estou realmente doing--, imos só pasar por aquí. Este tipo de lazos en ben todos os conceptos. Polo tanto, temos aquí int estrela PTR. Entón int punteiro, que é onde en realidade estamos creando un punteiro que apunta a un enteiro. Ben, que vai apuntar a un número enteiro. E nós estamos indo a malloc, ou darlle, memoria suficiente asignado para almacenar un número enteiro. Así, catro bytes neste caso. E entón, se isto é igual a igual null-- é igual a null-- imos imprimir. Oh, vostede ten un erro porque está fóra de memoria, non? Se non, a entrega de unha, que di o seu programa que ten un erro. E entón se fai ten esa memoria, é indo para almacenar todo o que chegar int dálle a pé e define-lo como o valor do punteiro. Entón vai realmente para apaga fisicamente este valor e poñer o que obter retorno int. E entón vai imprimir todo o que eles entraron. Audiencia: E iso é será na pila? ANDI Pengo: Isto vai estar na pila. Audiencia: E así que estará accesible. ANDI Pengo: Exactamente. Niza. Bo. Audiencia: Entón, cando nós liberados PTR neste etapa final, estamos liberando o punteiro ou estamos liberando o bloque? ANDI Pengo: Si. Entón, nós estamos liberando o pointer-- ben, liberando o bloque de memoria. Así, a única forma que podemos incluso o acceso a memoria é tendo o punteiro. Se non ten o punteiro, que é como, oh, eu non sei onde está, non? Entón, se liberala, está esencialmente liberando deste bloque enteiro. A continuación, o ordenador sabe, oh, non hai nada de útil aquí, Podo só poñer o lixo valores de volta para ela de novo. Audiencia: Entón hai enteiros sobre iso? ANDI Pengo: Non hai números enteiros? Desculpe. Pode reformular a súa pregunta? Audiencia: eu quería dicir, despois de liberar o punteiro, o enteiro que comeza, será que aínda existe? ANDI Pengo: Non, non vai. Ou polo menos vai existir na súa memoria antes do seu ordenador fai o que quere con el, pero non hai ningunha forma de conseguir isto. Porque liberou o punteiro. Non sabe onde é máis. Si. Vou seguir adiante aquí. Ufa. Entón, nós estamos por unha morea de o conceptual dificultades de xestión de memoria e nós só estamos indo para pasar, esencialmente, 5, 10 minutos, indo sobre as cousas de sintaxe que será utilizable e útil para vós, pero nada moi conceptualmente por aí. Aceptar. Entón, nós estamos cambiando completamente engrenaxes aquí. Xestión de memoria, difícil. Punteiros, difícil. Si. É moi, moi difícil. Totalmente ben. É por iso que a súa peza é vai ser moi difícil. Pero se ir e facer as cousas que nós somos debería facer, facer que as cousas son nulos, asegúrese de comprobar que as cousas están null, asegúrese de memoria libre, garantir que as cousas non son vazando, vai ser bo. Vai ser definido. Todo ben. Entón, imos pasar esta concepto totalmente novo de redirección. E así antes de agora, o principal forma que temos interagido coa nosa programas é a través da entrada estándar e saída estándar. Non? Nós, como a entrada do usuario cousas eo ordenador cospe-lo de volta para nós no terminal. Pero existen outras formas para nós para interactuar co ordenador coa nosa programas que non son só me cousas fisicamente dixitación en cando estou solicitado. E o xeito de facermos isto é por medio do que a maior cenoria eo símbolo pipe. Por iso, tamén pode ler e gardar arquivos usando iso. Así, a forma que nós facemos este é o maior que a cenoria, todo o que está a facer está escribindo calquera que sexa o seu ficheiro ten a un arquivo separado. Así, por exemplo, se eu quería correr Ola mundo e eu quería a saída ser gardados noutro arquivo e non só impreso para min, eu pode só facer maior que a cenoria, output.txt. Entón, todo o que está facendo é tomar meu programa hello.world, e calquera que sexa a saída é, é aforrar nun ficheiro chamado output.txt. Así, o xeito que David fixo o .csv cos nomes dos alumnos, é o mesmo que vostedes poden facer. E o que é especialmente útil aquí son o maior than-- os dous superiores a cenoria sinais que pode achegar a unha saída ficheiro, o que significa que pode só engadir enriba dela. Pode só continuar a engadir a output.txt de cada cousa adicional que está facendo. Ou, se comezar a entrar máis programas complicados, os dous máis que a cenoria, que só impresións as mensaxes de erro. Entón, digamos que teña un xigante cantidade de mensaxes de erro e quere ler a través de todos eles e Non quero ter que desprazarse a través do seu terminal, realmente pode só facer maior que resultado.txt e está indo para salvar todos os seus erros nun ficheiro chamado output.txt que pode percorrer e ler. Audiencia: Onde está o arquivo de texto gardados? ANDI Pengo: É salvo na mesma directorio que o seu programa é. Entón acaba de volver e ollar para el. E o mesmo que nós pode facer esta entrada é que poidamos realmente tomar o contido dalgún arquivo e nós pode introducir iso no noso programa. Entón en vez de ter que facer de comandos Argumentos da liña de onde físicamente ten que escribir cousas cada vez, realmente só ten un arquivo chamado input.txt que pon todo. E entón pipe é especialmente legal porque pode levar a saída dun programa e usalo como entrada doutro programa. Así, por exemplo, en Vigenère dos seus rapaces, hai esta liña de código que caras están en execución que quizais quizais realmente non sabía o que era doing-- este ./generate 1000 tubo ./42. Non? Entón, todo o que está facendo, se nós só bótalle un ollo neste paso a paso, o ./generate, isto significa que eu son executando o meu programa xerar. Que está a tomar en 1000 na súa entrada. Entón, quero xerar 1.000 chou números e eu vou tubo isso-- ou eu vou usar isso-- saída como entrada para o meu programa chamado find. E eu vou tentar atopar 42 de os números xerados daqueles 1000 números. Será que esta liña de código fai sentido para todos? Así, deste xeito estamos aforrar nos unha tonelada de pasos. Non temos para realizar xerar, gardar o ficheiro e, a continuación, colocar-lo en atopar. Podemos só facer todo nunha liña. Entón o que xeran é saída, plop-lo de volta en atopar. Si? Audiencia: E en termos de comandos argumentos de liña, é isso-- que é tres argumentos liña de comandos? É xerar, find-- non, four-- xerar, 1.000, atopar e 42? Ou é as-- ANDI Pengo: Entón o tubo realmente non contar como un argumento da liña de comandos porque o compilador ou o Terminal sabe que o tubo, Oh, eu sei que eu teño ollar antes o tubo, porque esa é a miña saída e debo coidar do tubo, porque esa é a miña entrada. Por iso, sabe o isso-- ./generate e 1.000, estes son dous argumentos de comandos, a continuación, só para o primeiro programa. E entón o ./find 42 son dous comandos argumentos de liña para o segundo programa. Si. Todos boa sobre iso? Entón, só ben rápido, o que facer estas tres liñas de código fai? Razoablemente simple. Alguén quere me dizer- que a primeira liña fai? Audiencia: [inaudível]. ANDI Pengo: Pense nisso como apenas-- o que fai o maior que a cenoria facer? Audiencia: Pon algo á seguinte liña. ANDI Pengo: Entón, cal é o contrario do que? Audiencia: Ela pon a próxima cousa en o primeiro. ANDI Pengo: Si. Entón, todo o que está facendo é que é executar un programa .hello-- está executando un programa chamado Ola. Está indo a darlle unha entrada chamada input.txt. Non? Porque pensar nela como só indo fisicamente en Ola. E entón está indo para salvar o saída nun ficheiro chamado output.txt. Como sobre a segunda liña? Quere me dicir o que a segunda liña faise? Audiencia: [inaudível]. ANDI Pengo: Sentímolo. Diga iso de novo. Elliot. Audiencia: Entón, el pon un lista de números para atopar. ANDI Pengo: Si. Entón, atopar, lembre-se, en Para realizar atopalo Debe saber onde está a procurar. E así todo o que está facendo aquí é que está dándolle un conxunto de pre considerarse números, entón vai atopar para buscar aqueles para o número de 42. E, a continuación, 15. Teña en conta que, vostedes foi este cando deu o seu código. Agora entende o que estaba facendo? Audiencia: É poñer en o conxunto de instrucións para [inaudível] por medio dun de tres por tres para as-- para gañar o partido. ANDI Pengo: Si. Audiencia: É entradas aqueles instrucións para o programa. ANDI Pengo: Moi bonito. Así, o CS50 til. / Pset3 / 3x3, todo o que estaba facendo era que creamos un texto ficheiro que todo o títulos listos para vós. E así para o seu xogo para xogar, só-- nós só poñer isto no seu programa. Entón nós tiñamos creado este tarxeta e, a continuación, estamos poñer este consello no seu programa que foi e creou unha tella de tres por tres. Isto é todo o que estaba facendo. E por iso non foi realmente máxica pasando nos bastidores que vostedes non fixeron programa que programado. Pero agora vostedes entenden por que nós fixemos iso polo que é todo de bo. Todo ben. Así, mentres a redirección é moi útil, C ten un mecanismo xeral para lectura e escritura arquivos do teu sitio. Nada conceptualmente difícil aquí, entón eu son só vai pasar por moi, moi rápido. Todo o que é algunha memorización e asegurarse de caras son sintaticamente usalo correctamente. O xeito que fariamos é dicir crear unha referencia para o arquivo, nós abrir o ficheiro, e entón nós faría toda a lectura e escritura e, a continuación, pecha o arquivo. Cando unha cousa que vostedes quere ter en conta é que ao facer isto, porque estamos pechando e abrindo ficheiros, todos os comandos están incluídos no standard-- estándar E / biblioteca. Entón asegúrese sempre que está facelo que included-- # Included-- estándar I / O punto h. Tan real rápido. Paso un, quere crear unha referencia a ese ficheiro. E agora que temos punteiros feito, podedes dicirme o que esta liña de código está facendo. Non? Todo o que está facendo é crear unha punteiro nomeado ficheiro de tipo de ficheiro. Porque sabe que vai para ligar a un ficheiro e está vai abrir o ficheiro. Entón está f open-- todo fai é abrir o ficheiro. Este é o nome do ficheiro. E hai tres cousas que podes facer. Pode ler, escribir ou engadir. A maioría Xeralmente, caras estará lendo ou escribindo porque está ou vai ser introducindo un ficheiro ou unha saída. Entón, practicamente re w son os dous cousas que vai usar máis. Polo tanto, neste caso, todo o que eu teño feito é crear un punteiro para un ficheiro chamado arquivo. Estou abrindo o seu e eu son eu son reading-- abrir este ficheiro chamado file.txt e eu estou lendo. Isto é todo o que eu estou facendo neste momento. E, a continuación, estes son só funciona en que pode ler cousas distintas ou escribir cousas distintas ou saltar a lugares diferentes onde queiras mirar. Todos estes son en liña. Todo isto pode só Google. Non é necesario lembra-las. Son só alí, desbotable para o seu uso se desexa poder usalos. Entón, se eu quería só ler nun carácter de cada vez, Eu faría calquera arquivo fgetc. Ou se eu quería ler nunha liña de texto de cada vez, eu faría fgets. E así por diante e así por diante. Todos estes só facer diferente cousas que vostedes poden usar. E entón, finalmente, despois de que eu son rematar de ler ou escribir, Só vou usar fclose ese ficheiro. E lembre, este é un destes, lembre-se, por favor facelo ou ben o seu ficheiro non vai traballar. Sempre abrir un ficheiro lectura ou a lectura, ten que sempre pechalo se abrilo. O mesmo coa memoria, non? Vostede ten que ter sempre memoria e libre-lo. Aquí ten que abrir sempre unha ficheiro antes de lelo e sempre ten que pechalo despois que abrilo. Polo tanto, este é tamén en liña. Vou desafia-lo caras para tipo de escribir un programa que imprime hello.world a un arquivo. É realmente sinxelo. É, esencialmente, implica só as poucas liñas de código que foron escritas anteriormente. Está indo a poñer-los xuntos e escribir isto. Por iso, algunhas cousas importantes a ter en conta mentres vostedes están tentando usar iso. Se todo isto é moi útil para a súa pset esta semana, é que fopen crea un punteiro de arquivo. Non é, en realidade, o arquivo físico. Todo o que está a apuntar cara ao ficheiro que quere abrir. E é, esencialmente, sempre que vostede está a usar calquera das outras funcións como fread ou fwrite ou fgetc ou fgets, é que está só de paso en torno a esta Punteiro para todas esas funcións. Entón, non está realmente tendo que arquivo e usalo para as súas funcións, só está tomando o punteiro e poñelas para estas funcións de modo que pode empregar. E se esquecer de pechar seu ficheiro despois de que usalo, o programa vai baleirar memoria. Esencialmente, todos os medios que é que as cousas malas van acontecer eo seu programa non funcionar correctamente. E así por diante o pset en o comezo, creo hai unha pequena onde explained-- Nate explained-- que Valgrind foi. Todos Valgrind é un xeito de ti asegúrese de que non está con baleirado de memoria. Entón vostedes queren facer Asegúrese de que asistir a este curto porque iso explica todo moi ben o que pasa. Aceptar. Entón eu pase por iso, realmente, moi rapidamente, porque realmente quero comezar a falar o pset antes de vós saír. Alguén ten preguntas conceptualmente? Principalmente todo isto é só sintaxe que pode usar para ler ou escribir arquivos. Finalmente, o favorito de todos. Nós imos falar sobre o pset agora. Así, mostra da man, cantos de vostedes ler especificación esta semana? Oh, iso é a metade. Iso é bo. Polo tanto, esta é realmente unha realidade, pset realmente divertido no sentido que se sentir como un detective porque é facendo todas estas cousas realmente legais que non sabía que podería facer pero agora é moi legal que pode facelas. E é realmente moi máis simple do que vostedes pensan. Así, as metades básicos de este programa son que está indo para descargar o código fonte ou código de distribución escrito por nós. E vai ter un cartafol chamada BMP e outro cartafol chamado JPG. Dentro do seu BMP, é terá tres programas. Un deles xa está escrito para ti. Así, é un programa copy.c nós xa escribimos para ti que está indo a baixar. Todo o que fai é tomar como entrada unha imaxe e fai unha copia do mesmo como saída. Isto é todo o que ficheiro está facendo. Pero o que quere facer para whodunit-- así como moitos de vós Teña en conta que caras na quinta serie ou maybe-- está younger-- quizais terceira serie, cando vostedes tiñan mensaxes secretas e tiña que poñer un anaco de papel sobre ela para descodificar a mensaxe? Si? Entón, iso é todo o que estamos facendo só que esta vez a un ordenador. Entón, nós demos-lle esta imaxe fermosa. Non parece algo mais por baixo é un indicio de que está indo para axudar con respondendo á pregunta pedímoslle. Esencialmente, o que quere que facer é introducir o ficheiro, axustar algunhas cousas ao redor, quizais axustar as cores, cambiar as cousas, para que todo a mensaxe é pode chegar a través. Entón, dentro están escondidos píxeles e información que se escribir o seu código correctamente vai decodificar e dicirlle o que esta pista é. E por iso algúns consellos útiles sobre como ía sobre abordar este. Realmente quere coñecemento Se con arquivo E / porque estamos a lectura de arquivos e gravación de arquivos. Non? E así sempre que facemos que, que implica ficheiro I / O. Vai ten que familiarizarse con, como abrir arquivos de imaxes? Como escribir para arquivos como fotos? Como fai todas esas cousas? Isto vai ser realmente útil. En segundo lugar, como está será capaz de cambiar as cores que aclarar esta imaxe? El probablemente vai implicar axustando os seus píxeles ou os seus valores RGB nalgún lugar alí, esencialmente. Non hai ningunha maneira dereita de resolver este sempre que can-- sempre que pode tipo de axustar os píxeles para facelo coma algo que lle gusta. Isto é todo o que nós nos preocupa tamén. Polo tanto, hai moitas maneiras de facelo. Só xogar con el ata comeza algo que funciona. E sería moi Sorprendido como algunhas liñas de código precisa realmente facer iso. Estou falando como tres liñas de código total de que ten que escribir a fin de facer iso. Entón, se atopa-se escribir 40, 30 liñas de código, probablemente está facendo mal. Todo o que tes que facer é tipo de xogar coas cores para ver como funciona isto. Polo tanto, despois, dirixir-se para un pouco a máis difícil de un problema. Aquí temos redimensionar onde estamos pedindo que a-- estamos dándolle como entrada unha imaxe ea súa Adaptación esta imaxe en algo maior ou algo menor dependendo das dimensións que lle dan. Entón lembre, en charla que David rapidamente mirou sobre a información é posible polos seus ordenadores para dicir que é un tipo de ficheiro. Así, un arquivo de Word ten especial caracteres diante do que informa ao seu ordenador é un arquivo de Word. O mesmo cun JPEG. Neste caso imos para darlle un ficheiro JPEG. Todo o que si sabemos é que JPEG ficheiro é unha imaxe, non? Pero os distingue de ordenador Lo de formas moi específicas. Así, a principios de calquera arquivo JPEG, é terá o que se chama bitmap Información cabeceira eo cabeceira do ficheiro de mapa de bits. Todos estes son son diferentes partes de datos que informa ao seu ordenador, hey, escoite, un JPEGs chegando e estas son as dimensións ou características dese JPEG. Entón vostedes realmente queren saber que información se garda dentro destes cabeceiras e o que é o tamaño deles. Porque cando está executando a través do seu programa, vai querer saltar por riba dese importe. Non? Porque non me importa sobre como modificar a cabeceira, lle importa sobre como modificar o que está despois. Non? Polo tanto, asegúrese de que vostede sabe quão grande son esas cousas. En segundo lugar, antes de comezar intentando cambiar o tamaño da imaxe, probablemente vai querer gardar as dimensións do orixinal. Non? Porque se eu te contar esta imaxe é de 100 píxeles por 100 píxeles, e quero que faga catro veces maiores, vostede sabe que ten que multiplicar esas dimensións por catro. Entón quere un ficheiro de saída 400 por 400 píxeles, por exemplo. Entón, é realmente útil para vós gardar as dimensións do orixinal. E, a continuación, despois, tras termine de Adaptación, pode escribir novas cabeceiras con estas novas dimensións despois do redimensionamento. E a forma que físicamente pode crear en grandes píxeles é que pode escribir nova RGB-- lembre, RGB, todo o que significa vermello, verde, e píxeles blue-- a un arquivo fóra. E vai querer ter cantidades diferentes de que que chamamos enchido. Todo é de recheo son espazos fotos antes e despois que dicir, esencialmente, que your-- contar a súa imaxe como gran debe tomar-se. Isto é moi abstracto para unha morea de se aínda non leu a especificación pset, pero vai ser moi útil para cando en realidade estás lendo a través del. Vostede é como, oh, si, iso ten sentido. Por que eu teño que facer iso? Ten sentido. Para rematar, este pode ser un dos os programas máis frustrantes sempre só porque non pode dicir que funciona ou non. Todo isto programa, recupere, é facendo é que, se executado correctamente, debe ser capaz de súpeto recuperar 50 imaxes que foron perdidos na nosa disco duro. E así o problema con este programa é que non pode realmente probalo porque ou recuperado Los ou non fixo. E para que tipo de só ten que xogar con el, e se o seu programa é funcionando correctamente, vai de súpeto ver que en seu directorio que ten ten unha cantidade xigante de imaxes que están alí agora. Entón, como eu ía abordar este problema é, somos vai darlle o que é chamado ficheiro card.raw. Esencialmente, iso é só un arquivo corrupto con todas as imaxes almacenadas que vai ter para se recuperar. Entón probablemente vai querer a entrada do seu card.raw, ou aberto, seu arquivo card.raw e está Vai querer manipular que sexa capaz de almacenar JPEG. Así, quere comezar por rastrexar e almacenar JPEG cada individuo como atopalo. Non vai a todos individualmente De súpeto só crear os 50 JPEGs. Vai querer manter o control de cantos está abrindo. E entón quere asegurarse de, cando está de gravación nunha buffer-- vostedes vai saber o que eu estou falando unha vez que ler a spec-- quere asegúrese de que está a usar un sen sinatura char buffer. E entón quere preguntar Se a cuestión de, cantos bytes son en CF-- están nun arquivo de tarxeta? Ese é o número que vai quero ler no seu buffer. Vai querer asegurarse de os dous align porque entón non terá memoria aleatoria vazando. Vostede sabe exactamente cantas bytes que precisa e cantas bytes que quere que teñan. E entón, finalmente, quere usar unha función chamada sprint-- s impresión F-- para xerar arquivo personalizado nomes para cada novo JPEG que atopa. Entón, como crear e atopar JPEGs no seu cartón, vai querer almacena-los e nomealos. Non? E así vai quere usar esta función para crear os nomes que pode almacenar todos os seus JPEGs. E, para rematar, non se esqueza de pechar cada JPEG despois que fixo. Porque o que está vai facer é que é vai probablemente teñen algún tipo de bucle que percorre todos os seus JPEGs. Está indo a escribir un JPEG e renome-lo como atopalo. Pero despois que fixo con cada JPEG, precisa pecha-la para que poida comezar máis e pasar á seguinte imaxe. E así por algo que é realmente divertido que nos gusta facer, porque esta é establecer un problema tan estraño pero tamén un problema estrañamente satisfactorio conxunto, é que todas as imaxes que teño para vostede, se vostede recuperar correctamente, Todas as imaxes son fotos de seu marabilloso corpo docente, tanto de Harvard, en aqui-- e aquí en Yale. E se ocorrer de recuperar todas esas imaxes e identificar os funcionarios membros deses tarxetas, e tomar selfies connosco se atopar-nos en torno ao campus, para cada foto que enviar para nós, imos darlle un gigabyte de espazo Dropbox. Entón, imos facer a matemática aquí. Se hai 50 cadros e 50 membros do persoal docente, se ocorrer de atopar todos os 50 de nós, iso é 50 gigabytes de Dropbox, basicamente, nós estaremos dando a vostedes. Así, algúns incentivos adicionais adicional se vós non o fixo só se preocupan a recuperación de imaxes perdidas. Hai tamén algúns incentivos adicionais. É un conxunto de problemas diversión. Realmente é. É medio frustrante, pero, a continuación, tórnase moi divertido cando entender, wow, que funciona e agora eu ten todas esas imaxes que eu acaba creado por min mesmo. Calquera preguntas sobre a pset? Para quen xa está comezou, se ten dúbidas, Eu vou estar aquí por uns minutos despois sección se quere falar comigo. Moi ben, rapaces. Me desculpe, eu información dumping sobre vós. Os punteiros son realmente, realmente desafiante e frustrante. E eu estou realmente contento que vostedes quedou comigo. Falaremos máis en profundidade sobre a próxima semana a medida que comezar a facer táboas de hash e máis funcións que os envolven. Si. Entón, se alguén ten algunha preguntas, eu estarei por preto. Grazas por vir e ter máis doces porque hai máis doce. Legal.