>> [Música tema]
>> COLUMNA 1: Ola, todos.
Benvido de volta á sección.
Bo día out-- que é por iso, eu son seguro, hai só catro de vós aquí
e non o noso paquete de costume.
Teño estado enfermo este fin de semana.
Entón, eu non teño Starburst para vós.
E podo comezar a tossir terriblemente ao longo deste.
Entón, só teña paciencia comigo.
Vou realmente tentar e pasar por iso en primeiro lugar,
porén, antes de ter un ataque de tose.
Pero só ser doado para min un pouco bit-- iso é todo o que podo facer.
>> Polo tanto, a nosa axenda para today-- só un reminder-- súa proba é a próxima semana.
Eu dixen que iso a semana pasada polo que non ía incorporarse vostede desprevenido.
Entón, eu estou lembrando de novo.
A próxima semana o quiz.
Para ese fin, semana sección será moito máis
de-- eu vou tentar e traballar nalgunha revisión.
Entón, se vostedes poderían me axudar enviando-me
cousas que está cómodo con, que está preocupado,
temas que desexa me cubrir, iso sería óptimo.
Entón, podo tentar traballo-los na nosa sección na próxima semana
ou enviar-lle material extra ou prepara que non pode obter en outro lugar.
>> Yeah!
Máis xente está chegando!
Eu penso, eu fixen iso mal pasado semana, que ninguén quere volver?
Estou con medo.
Así, os outros tres cousas que nós imos pasar por riba de
son redirección, arquivo I / O, e logo punteiros e memoria dinámica.
Estou seguro que é todo super animado sobre pointers-- tema favorito de todos,
tan sinxelo de entender.
Estou seguro que todos ten iso, non?
>> Así, as primeiras cousas primeiro, redirection-- este é basicamente só unha forma
para controlar como entrada as cousas no seu programa,
como as cousas de saída do seu programa.
As principais formas que vostedes Foron interactuar con el
é só por fóra estándar coa súa pantalla de impresión aquí.
Pero hai formas de pipe-- como vemos aquí
é un da nosa especie palavras-- de tubo que a información
ou que os datos nun arquivo dun arquivo.
É só formas diferentes de facer as cousas no seu programa
e fóra do seu programa, en vez de só imprimir-los a esta pantalla
ou introducir cousas desde a liña de comandos.
>> Entón, primeiro é pouco maior acento circunflexo.
Entón output-- el só imprime a saída a un ficheiro no canto da súa pantalla.
Entón, se tiña algo que impreso "Ola, mundo!" para a pantalla,
se poñelas en vez para output.text, que
crea o ficheiro chamado output.text.
E cando abri-lo, que vai dicir "Ola, mundo!" alí dentro.
Isto pode ser útil super se ten unha tonelada de erros
en realidade, como podemos ver nun presente.
Se fai dous circunflexo, que vai imprimir as mensaxes de erro.
>> Entón, se está a ter un problema con compilación, el ten unha morea de erros
e está quedando Atol no intento para percorrer na súa liña de comandos
a través de todos eles, pode só imprimir-los nun arquivo,
abrir o ficheiro para que pode percorrelo los máis fácil.
Realmente usado que un moi cando estaba depurando
meus 181 Serie de exercicios para aprendizaxe de máquina.
Por iso, pode ser super útil máis adiante.
Tamén é útil se ten un programa de talvez que está a xerar unha biblioteca
ou xerar algún conxunto de cordas, e
ten que ser capaz de ver que está xerando los correctamente.
Esta é a forma de facelo.
>> Entón, se imprimir a eles nun ficheiro, se pode máis facilmente examina-los, non?
Versus intentando desprazar a través da súa liña de ordes.
E entón unha cousa a notar é que, con só o maior
do acento circunflexo, se está escribindo a un ficheiro que xa exists--
así como se nós corremos este o primeiro tempo, colocar-lo para output.text,
e despois tivemos un segundo programa que imprimiu tanto como programa de dous
e fixo un maior que a output.text, el substituirá isso-- así
substituír o que foi sempre en o ficheiro para comezar.
>> Entón, se quere achegar nun ficheiro, como vemos aquí,
acaba de facer dous sinais de maior que.
E vai achegar a el.
Non vai substituílo.
Entón, se precisa realizar múltiples programas e tipo de manter
a par do que todos eles son retornando para ti nun ficheiro,
iso é un xeito de facelo.
Se non lle importa o que está no seu ficheiro e se admite para ser substituído,
pode só usar un único grande que.
Isto ten sentido para todos?
>> Audiencia: Como punto barra Ola maior de texto de saída do punto, como dúas veces,
el só vai amosar só na saída texto dot un segundo tempo--
>> COLUMNA 1: Certo.
Por iso, sería basicamente só completamente substituír o que estaba alí para comezar.
Se este ficheiro aquí, o output.text xa
hai basicamente o que chama que de novo con un único grande
que pode só pensar niso como como substituíu o ficheiro.
Como cando está salvando unha Palabra documento e gardar como,
e manter o mesmo nome, e el substitúe completamente ele--
este é o mesmo tipo de cousas.
Alguén ten algunha dúbida sobre só a saída a un ficheiro?
Impresionante.
>> Entón, obviamente, se inverter a arrow dirección, pode facer de entrada.
Entón, cando vostedes tiñan como César ou Visioneer
e tiña que entrada de algo, tiña un argumento de liña de comandos
que, en realidade, escribilo novamente.
Esta é outra forma de facelo.
Entón, en vez de esperar a un ventá de consola,
como cando pediu a súa mensaxe en César ou Visioneer,
se tivese un ficheiro de texto que tivo a súa mensaxe,
pode simplemente escriba-lo para iso.
>> Entón, se isto fose como punto barra César 3 menos que o texto de entrada frecha, que
é a súa mensaxe, que ía funcionar ben.
Cando o seu programa César realmente pediu a entrada do usuario,
el xa tería porque inseriu neste arquivo.
Isto é só outra forma.
Só un reverso da output-- Só a entrada para os seus datos.
>> E, a continuación, o último é un tubo.
Entón, dun presente moi legal.
Porque permite que levar a saída dun
programa e poñelas como entrada a outro programa.
Non sei se algún de vós vai co descifrar
CS50 que pode ter deu, pero sería
permitir que Tomé algunha mostra ficheiro, escriba-o na súa criptografía,
e, a continuación, a partir de aí tipo que na súa descifrado
para asegurarse de que acabou o mesmo.
Entón, é tipo como lazo de tres vías.
Dalle.
>> Audiencia: Un programa ten múltiples entradas,
hai un xeito de contala que entrada usar o ficheiro de texto ou a saída?
>> COLUMNA 1: Ten varias entradas.
Sexa cal sexa o seu arquivo input-- cando é pedindo entrada que por primeira vez, é
vai asumir, eu creo, é vai tubo en todo o arquivo.
Entón se ten varias entradas, está será tubo en varios arquivos.
Entón, se está pedindo mensaxes tres veces no seu código,
vai estar poñendo en tres ficheiros diferentes.
E el está tolo.
E non debe ter que se preocupar con iso agora.
Pero esa é a idea.
>> Entón, si, a tubo é só saída dun programa utiliza a entrada á outra.
Todos bo alí?
Legal.
Está ben.
Probablemente non terá facer moito con el.
Pero ten que entender formas que pode usar isto.
E hai algúns casos en que pode querer usalo.
>> Entón ficheiro I / O- Sei o que está dizendo-- que estamos afeitos a ler dende
e escribir a nosa pantalla de alí, que é estándar e estándar para fóra.
E iso é o que vostedes foron facendo desde o inicio da clase aquí.
Pero tamén se pode ler e gravar arquivos, que é todo o arquivo I / O- así ficheiro de entrada,
saída é todo o que el representa.
Entón isto significa basicamente que pode almacenar os seus datos agora.
>> Cando só imprimir lo para o pantalla, é basicamente ido aínda, non?
Así que fai "Ola mundo "e realizar" Ola, mundo "
el imprime "Ola, mundo" para a pantalla.
Pero o que realmente non pode facer nada con el de alí.
Se almacenar nun texto ficheiro, a continuación, de súpeto
tes eses datos que está autorizado manipular ou poñelas nun arquivo,
ou poñer-lo nun programa máis tarde.
Unha das razóns por que facemos isto é só
como unha forma de almacenar os datos para o seu uso posterior.
>> Eu teño un par de pasos aquí só camiñando por defecto
I / O. Na etapa un, que crear un referente
para o arquivo con todos tapas de ficheiro Ficheiro estrela.
Así que crea un enlace a un arquivo.
Entón quere abrilo.
E vostede di, literalmente, só ficheiro é igual a fopen.
E iso vai volver Punteiro ao ficheiro que acaba de abrir.
Vin un par de ti caras no horario de oficina.
>> Pero unha das cousas é punteiros recorde--
pode ser un enderezo ou nulo, non?
Se algunha vez ter un caso en que algo pode volver nulo,
o que temos que facer antes de nós nunca usalo?
Necesitamos comprobar se é nulo ou non, non?
Porque algúns de vostedes poden ter o problema en que calquera obxecto
estaba sendo devolto en fuga foi nula.
Tentou realizar algunha función nel.
E a súa web ordenador falla.
Non?
¿Podería supoñer que un par de ti pode ter este problema.
>> Así, con fopen, fopen van quere voltar un punteiro para o arquivo,
ou se algo sae mal, vai volver nulo.
Así, sempre que comprobar que non teña retorno nulo
antes de facer calquera outra cousa.
Isto é debido a un paradigma estándar que vai ter aquí.
Se sempre hai unha posibilidade de que algo podería volver nulo,
asegúrese de que non antes de continuar.
Se non, vai para obter fallos lugar fermoso.
E ninguén gusta de xestionar aqueles.
>> Así como podemos ver aquí, o primeiro argumento é só o camiño para o arquivo.
Se o ficheiro non existe, que vai crear o ficheiro.
E iso só se ve en branco.
E, a continuación, o segundo argumento é o xeito que quere.
Non queremos ler dende este ficheiro?
Quere escribir a partir del?
Quere engadir?
Entón, en realidade o que acabo de disse- se o ficheiro non existe
e estás lendo el, que lanzará un erro.
Se o ficheiro nome-- gusta se non file.text non existe aínda
e quere escribir para el, el creará
un arquivo baleiro chamado file.text para ti.
E se quere achegar, ten que facer o mesmo.
Será que isto ten sentido?
Se estás a ler un arquivo que aínda non existe,
vai lanzar un erro.
Se non, ha crear o ficheiro para facer o que quere con el.
Legal.
Agora podemos ler desde o ficheiro.
E esta é só unha especie de ir a través dos diferentes funcións
que temos de arquivo I / O. Esta vontade ser necesaria en pset desta semana,
se ben me lembra.
Si, é absolutamente será necesario pset desta semana.
Entón fgetc retorna ao seguinte carácter.
fgets retorna só unha liña de texto.
El pode voltar calquera cousa ata unha nova liña, e vai romper.
Así fread le un certo número de bytes e os pon
nunha matriz, que é algo que pode
quere facer re-size-- pode ser útil.
>> Cantas persoas teñen lido especificación pset, polo camiño?
Está ben.
[Inaudível]
>> COLUMNA 1: Aceptar.
Todo correcto.
Definitivamente ler isso-- é un pset divertido.
Comeza a recuperar a memoria excluídos card-- realmente emocionante cando funciona.
Pero, en definitiva, comezar a ler isto.
Veña falar comigo, se ten dúbidas sobre iso.
>> OK, entón como eu estaba dicindo, fread le un certo número de bytes.
Isto é un número arbitrario que está indo a definir.
E entón fseek só movementos para unha determinada posición.
Entón, talvez non lle importa sobre os próximos 10 bytes.
Só quere saltar.
Non lle importa con quen.
Quere ler byte desde 11.
fseek permite que fai iso.
Entón, el permite que sexa selectivo sobre o que está lendo.
Porque fgetc, fgets e fread lectura a partir dun determinado lugar o arquivo.
>> Unha forma de pensar sobre iso é que esta é o noso arquivo, cando abri-lo,
ten esa posición no ficheiro que comeza no inicio.
Sempre que chamar fgetc, fgetf, ou fread,
que vai comezar a partir de este marcador de posición.
Imos dicir que só quere ler este anaco de memoria aquí.
Non pode simplemente conectar.
Ten que buscar aquí e, a continuación, ler a partir de aí
ou ler, queda, ou getc, dependendo do que quere.
Entón busque só permite que saltar partes da memoria.
E esa é a única forma, pode saltar as cousas
sen le-los no seu buffer.
Isto ten sentido para todos?
>> Obviamente, hai unha chea de aquí- paralelo
noso redirección de saída ou de entrada, ler e escribir.
Entón fputc só escribe un caracteres para o ficheiro.
fputs escribe unha liña.
Fprintf imprime unha saída formatada.
Entón se ten pestanas, ou espazo, ou outros enfeites.
E entón fwrite escribe algúns matriz de bytes nun ficheiro.
Polo tanto, este é o mesmo camiño fwrite e fread son análogas
fgets opposites--, fputs, e a continuación, os lotes fputc e fgetc--
de tolos, cousas rápidas.
>> Só unha especie de manter este handy-- vai ter momentos diferentes
onde quizais só quere un carácter de cada vez.
Quizais quere unha liña enteira.
Co seu pset-- dicionario que é en dous Serie de exercicios,
Eu creo, nós dámoslle un todo dicionario en formato de texto
que ten cada palabra separados por unha liña.
Entón, se quería ler nunha palabra de cada vez,
o que pode usar se está lendo e eles están todos separados en novas liñas,
e só quere unha palabra de cada vez?
>> Audiencia: fgets
>> COLUMNA 1: Certo.
Fgets-- porque que regresa o que está nunha liña.
E, se cada palabra é a súa propia liña, podemos utilizar fgets.
Legal.
Isto ten sentido, todo?
Legal?
Si, nós estamos indo para chegar a a parte divertida con punteiros
moi pronto, onde comeza a facer un pouco de matemáticas.
E vai ser gran.
>> Última step-- pechar o seu arquivo.
Con tantas cousas aquí, un dos nosos paradigmas
é se el pode volver null, comproba nulo.
Se abrir algo, é mellor pecha-lo.
OK, entón non está feito ata que estea feito a menos que xa pechou.
Tipo de como non acabou ata que a señora gorda canta.
Isto é como pechar o seu arquivo.
Como se di aquí, só para reiterar, sempre
abrir o ficheiro antes de ti lendo ou escribindo para el.
E sempre pechalo se xa abriu.
Todo certo?
Legal.
>> Entón aquí está un exemplo.
Entón tiny-- Non sei se vostedes poden ver iso moi ben.
Se puidésemos aumentar o brillo de algunha maneira.
Déixeme realmente facelo se eu poida.
OK, vostedes non poden realmente ver que en todo, non é?
OK, imos facelo, entón.
[Inaudível]
>> Supoño que iso é moito mellor para ver.
Calquera pode ver onde a miña rato se é a pregunta?
Ah, aí é-- que se está traballando!
>> Está ben.
Basicamente, vostedes deben ter tipo dunha idea do que iso está facendo.
Non é perfecto.
Pero prefiro explicar iso do que gastar máis tempo intentando formato-lo correctamente.
Basicamente, como ve aquí, comezamos co arquivo aberto.
E nós temos uns arquivo de base de datos que estamos
apertura que di que é os nosos alumnos.
E nós estamos indo a escribir para el.
Entón, por suposto, volver nulo.
Entón, temos que comprobar a nulidade.
E entón, se non é null, nós atravesamos.
E como podes ver, estamos looping por aquí.
Hai alumnos.
Estudantes de hash é definida como tres.
E o que estamos facendo é que estamos impresión para o arquivo, non?
Entón o que estamos imprimindo ao noso arquivo?
>> Audiencia: As puntuacións que están na matriz?
>> COLUMNA 1: Si.
As puntuacións que están en o array-- exactamente.
Entón estamos abrindo este arquivo de base de datos, que
Eu supoño que é algún tipo de base de datos de notas.
E nós estamos só imprimir o correas de cada alumno para este ficheiro.
Legal?
Boa.
Impresionante.
Está ben.
Imos volver a--
>> Audiencia: Eu teño unha pregunta rápida.
É o printf non no loop?
Isto é só no caso loop?
COLUMNA 1: Non, é o loop for.
Eu non podo ver o meu rato moi ben ata aquí.
Entón, eu estou loitando para formato que axeitadamente.
Este soporte debe ser ido.
Debe ser por aquí.
Isto é o que está no seu loop.
Alí.
Agora é fermosa.
Entón é así que debe ser-- excepto a última pista que eu dimitir.
Está ben.
Isto ten sentido para todos?
Está ben.
Nós imos seguir adiante á seguinte cousa entăo--
que, en realidade, está indo a necesidade de ver o código.
Entón, eu estou indo só para copia que máis agora.
Está ben.
Entón eu vou amosar para vós este código.
E quero que tente e figura o que se quere facer.
>> Así, dado isso-- levar un minuto ou así.
Tratar de descubrir o que está pasando aquí.
>> Calquera ideas?
>> Sabemos que temos polo menos dous argumentos na liña de comandos, non?
Eu asumo un dos cales será que [inaudível] do noso programa é
e entón algo máis.
Porque se [inaudível] é menos de dous, nós berrar con eles.
Non?
E a partir do uso, parece que que vai haber algún tipo de ficheiro.
Estamos todos de acordo con iso?
Entón, agora, o que é o lazo está facendo?
Que vai pasar?
>> Audiencia: Todos os ficheiros.
COLUMNA 1: Exactamente.
Está pasando por toda a arquivos que temos de entrada alí.
Así, para cada ficheiro, é abrindo algunha corda alí.
É abrir este ficheiro.
Non?
E é a lectura da mesma.
Claro que, se comprobar se é nulo.
E el está imprimindo.
Se é nula, é só nos dicir que iso non é un arquivo que existe.
Porque lembre, con ler noso arquivo ten que existir.
Non?
Con gravación e de aumento, pode ir lonxe con el.
Pero, con lectura, o noso arquivo ten que existir.
>> E entón, se existe, o que estamos facendo aquí?
Imos comezar.
¿Que é iso fazer-- este primeiro carácter.
O que fai?
Recibe un personaxe, non?
Entón o que é esta a facer?
Está quedando o primeiro carácter.
Alguén sabe EOF?
>> Audiencia: Fin do ficheiro?
>> COLUMNA 1: Fin da file-- exactamente.
Entón, que vai pasar por o arquivo enteiro, non?
E entón vai actualizar por quedando cada personaxe posterior.
Non?
E o que está facendo?
Audiencia: Poñer que em--
>> COLUMNA 1: impresións putchar para o seu protector de pantalla.
[Inaudível] o personaxe.
E entón, cando [inaudível] Isto pechar o ficheiro.
>> Audiencia: Non precisa de un [? máis? ?]
>> COLUMNA 1: Non necesariamente.
É dicir, é unha especie de implícita neste.
Porque este retorna, con todo, con tal como iso non incorporarse este, está ben.
Quero dicir, é probablemente bo práctica para facer outra cousa.
Pero unha persoa non sempre é especialmente necesario
se ten algo como un retorno, que
significa que, neste caso, se pega el, o seu programa vai acabar
e nunca imos chegar a iso.
É máis para o caso en que está non necesariamente algo retornando.
Por se isto non fose retornando nada,
iso significaría que, se iso fose verdade, o resto deste aínda sería executado.
E, nese caso, ten quere ter un falso.
Se está volvendo, e final do seu programa,
unha persoa non é necesario todo tempo, dependendo do contexto.
Jacob, ten unha pregunta?
Audiencia: Yeah.
O mesmo acontece con fgetc obter o próximo personaxe?
Como o personaxe aumentar?
COLUMNA 1: Si.
Entón fgetc obtén o próximo personaxe.
Pode pensar niso como C ++ nun sentido.
>> Audiencia: Entón, cal foi EOF?
>> COLUMNA 1: EOF é o final do arquivo.
É só un marcador que permite que vostede sabe que está ao final do seu arquivo.
Entón, iso vai imprimir co seu patrón para fóra.
E entón vai pechar o ficheiro cando está feito.
E entón imos para o seguinte ficheiro, non?
Polo tanto, en xeral, o que este programa fai?
>> [Inaudível]
>> COLUMNA 1: Si.
El só imprime todo o que hai.
Entón CAT se vós xa usei e logo, o nome dalgúns file--
Non sei se algún de vós ten xa o fixo no seu terminal.
Pero se nunca usar o mando CAT-- C-A-T--
e logo, calquera arquivo ten que há--
imprime-o para o seu terminal, que pode ser super útil para algunhas cousas.
Eu usalo moito.
Isto ten sentido para todos?
Legal?
>> OK así que a súa tarefa agora- ou por só ou con xente ao redor você-
é só para escribir un programa sinxelo que só vai escribir "Ola, mundo!"
para un arquivo.
>> [Inaudível]
>> COLUMNA 1: Eu estaba tipo, fixo Fago isto apenas a semana pasada?
Non creo que foi tan malo así.
Estou feliz por estar todos aquí.
El realmente me fai feliz.
Eu son unha rapaza de praceres simples.
Eu só me gusta cando a miña sección atende.
Entón eu estou só comezando iso comezou por vós para que poidamos codificar xuntos.
Eu non me gusta de poñer calquera en o lugar, a menos que quere ser.
>> Audiencia: Para o cuestionario, facer temos que escribir un programa?
>> COLUMNA 1: Pode ser solicitada a escribir programas simple coa man.
Si.
>> Audiencia: A proba é a próxima semana, non?
>> COLUMNA 1: A proba está próximo mércores.
Isto significa que hai un fermoso [? CSE?] clasificación despois partido, que
significa que terá a súa puntuación volta que noite-- en que momento?
Quen sabe?
Pero será que a noite.
>> Todo correcto.
Como queremos comezar este?
Vou che dar un hint-- comeza con iso.
>> Audiencia: Ten que abrir un arquivo.
>> COLUMNA 1: Si.
Entón o que quere chamar iso?
Só quere chamalo "ficheiro"?
Imos facelo doado.
Entón, cal é o noso fopen-- proba de saída será?
Chamalo "Ola".
E o que é o noso xeito?
O que estamos facendo para este ficheiro?
>> Audiencia: Lea.
Escribindo.
COLUMNA 1: Estamos escribindo para el.
Encantador.
OK, entón temos o ficheiro agora.
O que necesitamos facer?
Audiencia: Asegúrese de que el é nulo.
COLUMNA 1: Asegúrese de que é null-- exactamente.
Iso é o que me gusta de escoitar.
Isto debería ser automático, especialmente practicamente a partir deste punto.
Se comezar a segfaulting, probablemente non comprobar null en algún lugar.
Nove de cada dez veces, iso é será o seu erro.
Entón, se podería só entrar no costume, sempre comproba que é nulo,
súa vida será agradable e easy-- ou máis fácil.
>> Entón, asegúrese de que el é nulo.
Entón, se non é nulo, o que é o que o estrondo igual
means-- non null-- é válido.
O que queremos facer?
Nós só queremos imprimir para o ficheiro, non?
Entón que é o que imos empregar?
>> Audiencia: fprintf
>> COLUMNA 1: Fprintf-- encantador.
E fprintf leva dous arguments-- onde vai eo que queremos impreso.
Entón, cal é a primeira?
Onde é que vai?
>> Audiencia: Ficheiro.
>> COLUMNA 1: Vai para o ficheiro.
E o que queremos impreso?
"Ola, mundo!"
Todo correcto.
Temos unha última coisa-- outro gran paradigma aquí.
Audiencia: Close.
COLUMNA 1: Pechar.
Alí vai.
>> Audiencia: Isto está pasando se o ficheiro é nulo?
COLUMNA 1: Non, iso é, se non é nulo.
Audiencia: Ah, si é não-- Aceptar.
Para o fopen e, a continuación, o dous argumentos que van dentro,
que é o que o primeiro argumento dicir de novo?
>> COLUMNA 1: O argumento é así como o nome do ficheiro
que quere ir.
Así, tras este corre, faría ten algún arquivo chamado "Ola"
que tiña "Ola, mundo" dentro del.
Iso é todo.
Só o nome.
>> Audiencia: E xa que é a escritura, o ficheiro non ten que existir.
É iso que dixo?
>> COLUMNA 1: Certo.
Exactamente.
Se "Ola" como un ficheiro aínda non existe, é
creará un ficheiro chamado Ola "e escribir a el para ti.
>> Audiencia: Cando está dicindo o programa a escribiu para o arquivo,
Por que escribe "ficheiro" no canto de o nome do ficheiro e fprintf--
>> COLUMNA 1: Por que neste caso temos que gran FILE-- todo en estrela caps--,
arquivar.
Polo tanto, é un punteiro para o arquivo que está falando.
Esta é a forma que nós só se refiren a el.
Polo tanto, neste caso, Pode pensar en aha file--,
podemos utilizar isto-- arquivo aquí refírese á apertura do "Ola"
e deixalo escribir.
>> Audiencia: Poderiamos poñer un "Ola" no seu lugar [? de só?] ficheiro f?
COLUMNA 1: Non, porque "Ola" ten que ser aberto e escribir nel.
Arquivo aquí é como un designador que di OK, nós
ter este hello-- file-- que estamos mirando.
Foi aberto.
E nós estamos indo a escribir para el.
Se usar só "Ola", que é encapsulado na mesma.
Entón, que vai surtar.
Quero dicir, que podería ter chamado el.
Vostede podería ter feito de arquivo, estrela, "Ola", é igual a iso.
Pero a cuestión toda é que precisa dun punteiro de arquivo estrela en orde
para poder usar estas funcións.
Audiencia: Podería facer arquivo, estrela, arquivo, "Ola"
ou ten que poñer arquivar estrela, arquivo por el?
COLUMNA 1: Podería facer arquivo, estrela, "Ola".
Pode cambiar isto para calquera nome que sexa.
É completamente arbitrario o que este nome é.
Pode nomealo de nada.
Nomee-espaguetes do voo, se quixese.
>> Audiencia: Qué é o "w" entre comiñas para?
>> COLUMNA 1: O "w" é só o modo.
Entón, nós estamos escribindo a este ficheiro.
Todo o mundo bo?
Clear?
Si.
>> Audiencia: Entón, cando escribe esta ficheiro, onde é que imos entón atopar o ficheiro?
>> COLUMNA 1: El vai estar na mesma directorio que está actualmente en.
Se vostede está en pset tres e realizar este, dentro da súa pset
tres cartafol será este ficheiro chamado "Ola".
Legal?
Todo o mundo bo?
Eu sinto que é todo logralo, o que é óptimo.
Está ben.
Entón, de volta ao meu diapositivas show-- Eu amo cando as cousas funcionan.
OK, pointers-- Vostedes están animado?
Punteiros son grandes.
Eles levan un pouco de romper a cabeza por aí.
Este é o meu segundo ano punteiros de ensino.
E eu creo que finalmente conseguilo.
Entón, se loitar, é OK.
Como dixen antes, deseñar axuda moito coas cousas na CS,
tanto como eu creo que a xente tende pensar Oh, nós estamos nun ordenador.
Nós debemos só código.
Não-- imaxes de deseño realmente vai axudar.
E eu realmente incentivos-lo a tocar no seu lado kindergartner
e traer para fóra giz de cera ou etiquetas e sorteo.
Porque vai axudar.
E se me ver no horario de oficina, eu será que transportan preto de pilas de papel
con penas de deseño as cousas.
>> Así, particularmente con pointers-- facer fotos.
E estou seguro de que estamos realmente indo a estar deseñando algunhas fotos aquí tamén.
>> Entón vós todos ten que ver Binky, esta cousa legal claymation.
E pensamos que é realmente divertido cando explota en unha morea de pezas.
É un pouco de alivio cómico á clase.
C [inaudível] este gran capacidade para poder controlar de memoria.
E é unha das cousas que realmente fai unha linguaxe tan poderosa.
Pero con gran poder vén gran responsabilidade.
E as cousas tolas pode ocorrer se non ten coidado.
Entón, cando está a usar punteiros, quere facer
Asegúrese de que realmente entender exactamente o que está facendo.
Esperemos que o próximo pouco de tempo vai axudar a realmente entender
punteiros, como usalos, e como manipula-los.
>> Entón memory-- eu estou seguro que temos vin ese diagrama antes.
Polo tanto, este é só un simple diagrama de como as cousas poderían ser gardados memoria.
Entón, ten basicamente estes enormes matrices de bloques dun byte
é o que temos aquí- lixeira incrementada nun de cada vez.
Esta é en hexadecimal [inaudível] tan rueiros de oito bits.
E cada bloque está asociado con algún enderezo hexadecimal.
Entón, se xa viu a 0x, que está só notating
que é un enderezo hexadecimal.
Pode asumir iso significa algún enderezo na memoria.
Estamos a falar de enderezos de memoria sempre que ve hexadecimal.
>> Temos ints son variables, flotadores son variables que almacenan.
Entón, almacenar ints ints.
Tenda de Carrozas flota.
Entón nós tamén temos punteiros que os enderezos de memoria tenda.
Isto é unha especie de cartografía.
Os punteiros son exclusivamente para enderezos de memoria.
Entón, iso é como o seu tipo de alí.
O seu dispositivo é de 32 bits, o que significa que o enderezo de memoria é de catro bytes.
Así, calquera punteiro que ten Tamén será catro bytes.
Ou se é catro bytes, memoria é de catro bytes.
Memoria tenda punteiros.
Polo tanto, son catro bytes.
Cool-- só quero reforzar iso.
>> Debe comezar este comic agora.
Non sei cantos de vostedes son fans xkcd, pero eu amo xkcd.
É xenial.
>> Todo correcto.
Así, a creación pointers-- como dixen, é practicamente como calquera outra cousa.
Ten un tipo.
Ten un nome.
Non?
Iso é o que temos alí. [? Hex?] Estrela significa que é un punteiro,
e logo, o que quere chamalo.
Así, o tipo representa o que pode almacenar.
Todo certo?
Do mesmo xeito que se facemos ints, sabemos que estamos almacenando un int alí.
Cun punteiro, el ten un enderezo de memoria.
Pero o que iso significa é isso-- aquí é onde un deseño que vai vir a cadra.
Polo tanto, neste caso, temos algúns value-- digamos catro.
Catro é o enderezo dun.
Ok?
>> Este primeiro aquí significa que é un 2x punteiro.
Non?
É un punteiro x.
x pode ser algo, calquera cousa.
O que quere dicir x é-- x é catro.
Vai para almacenar o dirección de memoria aquí.
Así, int, estrela, x-- este é algunha outra ranura en memory--
quen sabe o que é iso.
Pero que vai gardar un enderezo aquí.
Polo tanto, este sería como-- neste caso, o que quere,
almacénase a 0x1-- todo o que é almacenado no enderezo que o noso punteiro detén,
cómpre corresponderse con o que temos designado.
Así, en 0x1, neste caso, esta é x.
Isto só se pode sempre unha int mentres estamos usando isto.
>> Do mesmo xeito, se temos 1a outro, sexa cal sexa
enderezo é almacenado cun y ten para ser unha mesma cousa char-- con z.
Do mesmo xeito, sempre que tentar facer INTX igual 0.4,
vai berrar con vostede e ser como non, dixo que quería un int.
Isto é suposta ser un int.
Pare de tentar facelo un float.
>> Entón deixe as cousas seren o que queren ser.
Deixa que as cousas sexan eles mesmos.
Tan grande cousa é só calquera tipo de punteiro
é, esa é a única cousa que pode almacenar alí.
Ok?
Coa práctica, como con a semana pasada, todo
Parece realmente unha especie de resumo.
Nós imos facer algunha práctica.
Debe facer máis sentido.
>> Entón, referenciando e dereferencing-- é realmente importante para obter estes recta.
Eu aínda teño que actualizar de cando en vez.
E eu son como espera, que un que quero?
Así, o comercial vai realmente dar a referencia ou a dirección de.
Así, el retorna a dirección en memoria de cal variable é almacenada.
Entón, que vai realmente voltar a vostede un hexadecimal, mentres que dereferencing
está realmente indo a darlle os datos que se almacenan alí.
Ok?
Entón, imos ollar un exemplo moi rápido, é realmente o próximo.
>> Está ben.
Entón, nós temos que pensar realmente coidadosamente sobre iso.
Polo tanto, temos aquí un enteiro x.
Vou tentar sacar esta para o mellor das miñas habilidades.
Entón, nós imos ter ese slot x.
E é almacenar cinco.
Enderezo é 0x4.
Legal?
Todo de bo.
>> Polo tanto, agora temos este punteiro.
Foi por aquí.
E o comercial dános a dirección de algo.
Así, neste caso, é a dirección de x.
Cal é o enderezo de x?
04-- e este punteiro está no 0x08.
Legal?
Así, pode pensar sobre iso punteiro, 04, só apunta para aquí.
E son chamados de punteiros porque, como temos máis para iso,
vai ver a apuntar cara as cousas.
E un bloque apuntando a outra bloque fará moito máis sentido.
Entón, aquí están dous.
E entón temos algúns copia, que é 0x0c what--.
E que vai desreferenciava noso punteiro.
>> Entón o que está dicindo é OK, aquí está o noso punteiro.
O valor que almacena é 0x04, eo que está dicindo é ir a esta dirección
e me diga o que está nel.
Entón, iso é efectivamente o que esta frecha está facendo.
Pode pensar niso como a súa estrela.
Entón, OK, cando facemos estrela, que significa seguir.
Ir a esta dirección.
E iso é basicamente seguinte nesta frecha para este anaco de memoria.
E dá-nos o que está nel, que é 5.
É por iso que a nosa copia é igual a 5.
Será que isto ten sentido?
Alguén ten me pasar por iso de novo, ou máis a modo?
Quere que eu vaia por iso unha vez máis?
Está ben.
Estamos indo para redesenhá-lo de novo.
Cando comezamos, todos de acordo que temos algún anaco de memoria que é unha variable
x que establecemos igual a 5.
Non controlamos onde está na memoria.
Polo tanto, este punto é só asignado arbitrariamente.
Boa alí?
Está ben.
Logo arrincar un punteiro para un int.
É por iso que se admite para apuntar x, porque temos un int aquí.
Temos outro anaco de memoria, porque este punteiro
é unha variable como calquera outra cousa.
É asignado arbitrariamente un espazo na memoria.
E o que almacena é a dirección de x.
Ampersand significa enderezo de x.
Entón, cal é a dirección de x?
>> Audiencia: É zero--
COLUMNA 1: 0x04.
Entón entăo-- último.
Temos algunhas copy-- novo só outra variable.
Entón, imos asignar un lugar arbitrario.
E nós desreferenciava noso punteiro.
A estrela significa ir á enderezo almacenado no meu punteiro.
Dime o que está aí.
Así, a dirección almacenado na nosa punteiro é 0x04.
Entón imos a este enderezo.
Está apuntando a este enderezo.
O que está dentro deste bloque de memoria?
É un cinco.
Entón é iso que nos atribuímos a nosa copia.
Todo o mundo bo?
Legal.
Fotos novamente--.
>> Entón, seguindo os valores de aquí- Eu son deixará vostedes pensan sobre iso.
Podemos tirar outra foto.
Pero quero que tente e razón por iso no seu propio país por un minuto.
>> Xa que eles non dan nós un exemplo de dirección,
Eu só vou facer x-- comercial que debe axudar a dirixir-lo a casa.
Ampersand significa dirección.
>> Así, o primeiro, todo ir coa primeira liña.
Algúns x de five-- algún conxunto ranura na memoria aleatoria.
Punteiro estrela Int é igual ao enderezo de x, non?
Int punteiro estrela crea Neste bloque, o chama de punteiro,
e atribúe-lo para a dirección de x.
Eu son terrible e comercial.
>> Agora, o que estamos facendo é que dicimos OK, desreferenciava noso punteiro.
Entón imos OK, o que está na nosa punteiro?
É comercial x.
Ir Ampersand xe reaxusta-lo.
>> Entón, agora, comercial x será 35.
Entón, basicamente, cando está dereferencing, vai Aceptar.
Vai ser deseño fotos como esta.
Vai ser deseño súas frechas sobre onde está.
Entón, vai a ese slot na memoria e quere dáme ese valor de volta, ou cambia-lo.
Neste caso, porque estamos neste valor, estamos atribuíndolle a ser de 35.
Considerando que, no pasado un, se observar, nos
Foron atribuíndo o que estaba aquí para outra cousa.
>> Entón eles teñen esta táboa incrible.
Non é tan malo así.
Vostedes traballar nel.
Vou tirala no taboleiro.
Estamos indo a enche-lo xuntos, OK?
Entón tome un pouco de papel, grab un compañeiro, comezar a traballar.
Eu estou indo a obter un maior anaco de giz.
Porque vai ser moito.
Está ben.
PROFESOR: Aceptar.
Imos comezar coa primeira liña.
Imos comezar por aí, entón vostedes quizais poida traballar con un pouco máis.
Está ben.
un é igual a B veces c entón o que é un?
Non é unha pregunta capciosa, eu prometer.
>> ALUMNO: 4 veces 5.
>> PROFESOR: 4 veces 5.
20.
Entón, cal é b?
ESTUDANTE: 4.
>> PROFESOR: E c?
ESTUDANTE: 5.
PROFESOR: 5.
E entón que é só ir a ser comercial Unha, ampersand b,
c comercial, non?
Non é malo.
É sinxelo o suficiente.
Está ben.
Entón a próxima.
A é igual a veces c, no caso ninguén estaba familiarizado con iso.
Está todo o mundo coñece cos tempos iguais?
OK, todo isto means-- este é acceso directo a un é igual a un veces c.
Tamén pode facelo coa división, con adición, con resta.
Pode facer un igual, ou un plus é igual a c significa un é igual a un máis c, un sinal de menos igual
c sería un é igual a un menos c.
É só azucre sintático.
>> Así, neste caso, a é igual a unha veces c ía-nos o que dar?
De novo, non é unha pregunta capciosa.
>> ESTUDANTE: 100.
>> PROFESOR: 100.
Será que algo cambiou?
Non.
Poida que eu finalmente chegar mellor para os meus e comercial.
>> ALUMNO: OK, desculpe, como conseguiu 100?
PROFESOR: Aceptar.
Así, a é igual a un veces c, así que unha veces c.
ALUMNO: Oh, está a usar un para o previous--
PROFESOR: Si.
Entón, eses son os nosos valores máis recentes.
Estes son o que ten que ser usando como nós nos movemos para abaixo, Aceptar.
Así, b é o único que cambia, non?
Entón, imos cubrir todo o demais.
B. Que é b será?
Para ser ou non ser.
Entón o que é esta a facer?
¿Que é a estrela pa facer?
>> ALUMNO: Código para o lugar do pa.
>> Estudante: Non, non é ben así.
Polo tanto, esta é unha referencia d.
>> Estudante: Entón b é o valor de man pa.
>> PROFESOR: Si, por iso é pa a dirección de un, non?
Entón está dicindo para ir onde a é almacenados e darlle ese valor.
Entón, o que é b?
ESTUDANTE: 100.
PROFESOR: 100.
Perfecto.
OK, entón PC é o que está cambiando.
Todo o resto permanece o mesmo.
Qué é o ordenador será?
Recoñecemento simple.
Pc é igual ao ano, eo que é pa?
>> ALUMNO: Ampersand a.
PROFESOR: Perfecto.
Agora estamos empezando a estar interesante.
OK, imos romper este abaixo.
En primeiro lugar, o que é b veces c, porque iso é a parte máis doado de un regalo, non?
B veces c é--
>> ALUMNO: 500.
>> PROFESOR: Si, por iso o que é este facer,
Se é estrela pb, o que está cambiando?
>> Estudante: Que está as--
PROFESOR: Que está b?
Estudante: Qué é o espazo pb que está apuntando.
PROFESOR: E pb está apuntando a--
ALUMNO: B.
PROFESOR: B. Así, a única unha cousa que cambia é b, seguro.
Entón b veces c, 500.
Entón, iso é o que cambia agora.
Legal.
Encantador.
Vostedes están indo moi ben.
Todo ben, rompendo un regalo para abaixo.
C está cambiando, non?
Así, podemos cubrir todo o demais.
Imos ver.
Está ben.
Sabemos que c será o produto de dous números, non?
Cales son os dous números, aínda?
>> ALUMNO: A e C?
>> PROFESOR: Entón é un dereita para o primeiro.
Entón, estamos facendo referencia d p de un, non?
P dun apunta a un, polo que sabemos que que será de 100 veces o que?
Veces o que fai punto para PC?
Apunta a un.
Así, é 100 100 veces 10.000.
Será que isto ten sentido?
Legal.
Fragmento de inicio, caras, última liña.
Está ben.
O que está cambiando aquí?
>> ALUMNO: A.
PROFESOR: A. Perfecto, así todo pode quedar na mesma.
Está ben.
E o que é un?
Polo tanto, é unha veces o que?
Este é estrela pb.
Así estrela pb significa aquí pb, puntos de pb para b.
>> ALUMNO: 500.
>> PROFESOR: 500.
Polo tanto, temos 500 veces 100.
Isto é 50.000.
Ufa!
Olle para iso.
>> ALUMNO: Por que temos o & c á last--
PROFESOR: Sentímolo.
ALUMNO: Oh, Aceptar.
PROFESOR: My bad.
Lotes de escritura.
Todo o mundo bo?
Non é tan malo, non?
Só ten un pouco tempo para traballar.
Se división la, entender o que cada parte
está referindo a-- como con todo o que é,
sim-- decompô-lo para o pequeno problemas e logo, se recombinam,
e pode facer algunhas cousas incribles.
Non son as respostas, pero nós fixemos iso.
A aritmética de punteiro.
Ah.
Miñas mans están todos farináceo.
Así, engadindo ou subtraindo int axusta o punteiro
polo tamaño do tipo de punteiro.
Lembre-se de como cada tipo ten un tamaño diferente?
Así como unha parella ou un longo tempo é oito e int é catro, pero de char é unha delas.
>> Entón, o que quere facer é-- unha cousa a lembrar
é só iso o que o seu valor do punteiro realmente cambia
dependerá da tipo de punteiro que é.
Todo o mundo ben con iso?
Podo apagala?
Somos bos?
Impresionante.
>> Entón, se temos algún punteiro isso-- iso vai ser-- eu son
vai facelo un punteiro int.
El almacena esta.
Se tivese que dicir punteiro un máis, o que vai facer
é que vai actualizar por iso o tamaño dun int
porque esa é a tipo de punteiro que é.
>> Con C, todo é moi rigoroso e regulamentado.
O punteiro int vai actualizar por a cantidade de espazo un int tomaría.
Un int é de catro bytes.
>> Entón, o que este converterse?
Está só a adición de catro para iso.
Agora o punteiro sería ser-- Aceptar.
>> Entón, se el era un char e fixemos punteiro un máis, o que sería agora?
Se started-- finxindo que started-- agora é 0x08.
Imos agora dicir que este foi un carbonizar punteiro, e engadimos un.
Que sería pasar a?
Cantos bytes é un char?
>> Audiencia: One.
>> COLUMNA 1: One.
Audiencia: Entón 0x09.
COLUMNA 1: Entón sería nove.
Polo tanto, só algo para lembrar.
Só cando engade un, non é engadindo un a menos que sexa un char.
É a suma de cantos bytes do tipo que é,
que é por iso que temos esta ecuación aquí.
Por iso, é int veces o tamaño do tipo de punteiro.
>> Polo tanto, temos o exemplo aquí.
y foi atribuído a ese valor, 0x4, cando fixemos y máis é igual a un.
O que está nel, o que é en x, non cambia.
O que cambia é o que está y.
O enderezo almacenado y actualizado por catro porque hai catro bytes nun int
e é un punteiro int.
>> Todo correcto.
Polo tanto, agora temos outro exercicio.
Polo tanto, a cuestión é o que será impreso.
Calquera ideas?
>> Audiencia: O número de personaxes de gato feliz?
COLUMNA 1: Exactamente.
Así como coa súa corda.
Será que todo o mundo pode iso?
Non queremos pasar por ela?
>> Si, Aceptar.
Entón o que temos aquí- I así moito máis.
Non teño a [Inaudível] ridiculamente.
>> Polo tanto, temos a nosa cadea aquí, gato feliz.
Encantador.
Temos que algúns contador estamos mantendo o control de.
Polo tanto, temos algúns de char * punteiro que só é igualada a STR.
O que isto está a facer é que é asignar algún punteiro
para o inicio da secuencia.
Porque eu estou seguro que, como foi mencionado na charla,
demos a vostedes esta tipo de datos chamado cadea.
>> Pero realmente cordas son só unha variedade de-- como char *.
É un punteiro para unha banda de personaxes que son colindantes na memoria.
Polo tanto, esta só define que igual a calquera secuencia é
identificado por onde seu primeiro personaxe.
Polo tanto, esta é só a creación nalgún punto igual ao inicio da cadea.
Todos bo alí?
Legal.
>> Polo tanto, esta é dereferencing noso punteiro.
Por iso realmente vai darnos algún valor aquí,
na nosa cadea que estamos a falar.
E nós estamos dicindo sempre que non é terminador nulo.
Entón siga indo ata chegar ao fin da cadea.
Actualiza o teu punteiro por un.
Así, r, que vai realmente actualizar por un cada vez, porque este é un char,
o char *.
>> Entón, que vai pasar.
Vai actualizar.
Así, a primeira vez que este é executado, que vai estar aquí na hora.
Vai actualizar.
>> Será un a.
Vai ser un p, y, e así por diante e así por diante.
Imos actualizar balcón.
Cando se chega ao final, el só imprime o quão lonxe está quedando.
Si.
>> Audiencia: Entón conta o espazo como un, non?
Está ben.
>> COLUMNA 1: Creo que si.
É que unha question--
>> Audiencia: [inaudível].
>> COLUMNA 1: Non se preocupe.
Isto fago iso.
Todo ben, entón unha cousa que eu entender é que, cunha matriz,
tamén se pode trata-lo como un punteiro porque as matrices son só
manchas continuas de memoria.
>> Así, pode tratalo do mesmo xeito.
Pode manipulalos los con punteiros tamén.
Entón, en vez de facer, neste caso, a cousa análoga
0 sería matriz é igual a 1.
>> Pero do mesmo xeito que unha cadea determínase
polo inicio da onde súa primeira personaxe é,
unha matriz é determinada pola onde o primeiro elemento é.
Porque sabemos, estamos garantir que estes
van ser continua bloques de memoria.
Iso é o que nos permite facelo.
Sabemos que están continua bloques de memoria.
>> Polo tanto, neste caso, por dereferencing só matriz, que nos di:
OK, vaia para o inicio da súa matriz, que é aquí.
Así, pode configurar-lo igual a un.
E neste caso, calquera que sexa a súa matriz tipo é, cando actualiza-lo por un,
iso é só como actualizar Lo ao seguinte índice.
Podes facelo, porque saber o que está na súa matriz.
Por iso, sabe o que a actualizar o punteiro por,
o enderezo para actualiza-lo para así que é o próximo slot.
>> Polo tanto, esta é só unha forma diferente de escribir gama 0 é igual a 1,
serie 1 é igual a 2, array soporte 2 é igual a 3.
É só unha outra forma de pensar sobre iso.
Porque son continuas bloques na memoria,
pode referirse a eles ou pola matriz notation--
que eu, persoalmente, atopar easier-- pero quizais
ten que manipula-lo estrictamente por enderezos de memoria.
E esta é a forma que faría iso.
Tipo de máis ou menos como un cousa legal que podería facer
contra quizais non algo que está realmente vai aplicar.
>> Eu usalo en 61.
Vostedes probablemente non precisa que preocuparse moito con iso.
Pero se vostede está interesado, ter 61 o próximo ano.
Estamos nas caras estiramento casa.
Sei, é moito tempo.
Memoria Dinámica Allocation-- polo que sabemos que un
das cousas cando falamos durante a primeira sección en conxunto,
nós miramos para un intercambio función onde se
fóra do ámbito da nosa función principal.
E nós estabamos pasando eses valores que foron eficazmente copias.
>> E unha vez rematado de intercambio execución, el só deixou unha pila.
Teña en conta que temos un apilar marco para intercambio.
El deixa e aqueles valores ir con el.
E eles foron aínda.
Non podía facer nada con eles e quedamos tristes
por que non podemos cambiar os nosos valores.
>> Pero con C, como mencionei, vostede ten unha morea de poder sobre a memoria.
Entón, o que podes facer é que pode reservar as cousas na pila aquí
que vai estar alí ata de lles dicir o contrario.
>> Son como bos fillos.
Fican alí.
Non deixan.
Eles van estar alí ata que estea como, OK, pode ir aínda.
>> Considerando as cousas na pila, who-- son como nenos desobedientes.
Eles só vai fuxir cando quere estar alí e, a continuación, eles se foron.
Non podes levalos de volta.
>> Así, a pila é-- imos falar malloc e free, que
Eu estou seguro que vostedes escoitou falar sobre a charla.
E iso é basicamente unha forma ter datos moi persistentes.
Así, pode manter os datos arredor sempre que queira.
Hum.
>> Audiencia: Podes establecer heap e pila?
Son como lugares para colocar as cousas?
>> COLUMNA 1: Entón, están basicamente só-- son
a forma como nos referimos só á memoria.
Entón pila é só lugares onde memoria é alocada dinámica,
Considerando pila refírese a máis a pila de cadros
que son máis central para o funcións que son realmente en execución.
Realmente non ten control.
>> A gran diferenza, ten control sobre o monte, se quere.
Ten menos control sobre a pila.
A pila depende do funcións que están en execución,
e a orde na que eles son correr, e como as cousas son devoltos.
Considerando que, coa pila, como imos ver, pode dicir,
OK, eu quero que ese valor é arredor ata que eu diga o contrario.
Non ten permiso para se librar del.
Non ten permiso para substituílo.
Está indo a mantelo en torno a durante o tempo que eu lle digo.
Comeza a ser o xefe no heap, mentres que o stack-- quizais se
como finagle seu camiño pode ser o xefe.
Pero non é ben así.
E é realmente só memoria.
É só formas diferentes de referirse a memoria.
>> Legal.
Entón, con iso, a forma de controlar a súa memoria.
É con malloc, que vai comezar a usar.
Entón é só curto para distribución de memoria.
Isto é todo o que é.
Hai unha morea de outras legal funcións que teñen alloc ao final,
e eles representan cousas diferentes.
>> Entón, cando precisa de almacenamento que precisa para durar máis que a súa función actual para
que cando o seu actual función foxe,
aínda ten os datos que teño a partir del, quere usar malloc.
Isto vai arrincar-lo na pila.
E como dixen e manter dicindo, vai mantelo alí
ata que diga o contrario, que é a cousa importante aquí.
>> Entón, unha cousa a notar, e iso é normalmente moi importante,
é que este sizeof é super útil para usar
porque, dependendo do tipo da máquina que está executando,
pode ter cantidades variables de memoria que é preciso.
Así, sempre quere usar o tamaño de forma que non é dependente da máquina,
de xeito que o seu código será executar en calquera máquina.
>> E iso é só parte de escribir código bo.
Se funciona nunha máquina, pero non calquera das outras,
quão útil foi o seu programa?
Así, sempre quere comproba se e usar sizeof.
>> Audiencia: Así é que, como o tamaño de 10 polgadas [inaudível]?
>> COLUMNA 1: Este é o tamaño de 10 ints.
si.
Así, o tamaño de ints volverá como é que un int tomar.
Ou o tamaño do char, como é igual un carácter take.
E entón cantos bloques de que quere?
>> Polo tanto, neste caso, queremos algo que pode almacenar 10 ints a.
E vai traballar independentemente da máquina, o que é legal.
Entón, cantos bytes vontade que realmente darlle?
Matemáticas rápida.
>> Audiencia: 40.
COLUMNA 1: 40.
Exactamente.
Así, outra gran cousa.
Punteiro ou malloc pode devolver nulo.
>> Entón, de novo, sempre comproba a ver se voltou nulo
antes de facer calquera cousa con el.
Se tentar e desreferenciava este punteiro agora,
el só vai segfault porque foi e intentou
tocar nulo cando non debe ter.
Polo tanto, asegúrese de sempre para nulo.
Unha vez máis, todo o que podes facer.
>> Pode volver nulo.
Vai volver nulo se é ou fóra do espazo, ou por calquera motivo
el foi para algún erro de memoria.
Ás veces, só devolve nulo.
Entón, vostede só ten que comprobar a el.
Isto é todo o que este slide está dicindo.
E entón o que temos aquí é unha chamada para liberar.
Así, do mesmo xeito que se abrir un arquivo ten que pechar un arquivo,
se memoria malloc, ten Debe liberar esa memoria.
E vostedes comezarán para facer cousas ben legais.
>> E hai un programa que pode realizar a vexa se está sempre con baleirado de memoria.
Pero non quere baleirar memoria.
É moi malo.
Só a desorde todo.
>> É malo para facer exactamente como a programación sabio para a eficiencia do proxecto.
Pero tamén é só tipo de malo para o seu ordenador.
Entón, só cousas libres cando malloc-los.
>> Vostedes ver as simetrías aquí.
Super sinxelo.
Só libre e, a continuación, calquera que sexa o punteiro,
calquera que sexa o nome o punteiro é, e
vai coidar de liberalo la para ti.
Legal.
>> Entón temos iso.
Entón, nós só estamos indo a camiñar por este programa.
E entón vostedes están feitos.
>> Entón, [inaudível] só inicio.
Polo tanto, temos algúns punteiro int *.
Polo tanto, temos un punteiro que vai soster ints.
E cantas ints é que vai soster?
Só un.
Tamaño dun int.
>> Imos comprobar a ver se punteiro é nulo porque
é, queremos dicir non faga nada.
É malo.
Entón, nós imprimir algún erro fóra do memoria, na maioría das veces voltar 1,
como vostedes están afeitos.
>> E entón temos aquí, nós desreferenciava noso punteiro.
Entón isto significa que nós estamos indo para almacenar algo no lugar que nos foi dado.
Int * punteiro, ou malloc, volve o dirección de onde reservou esta
memoria para ti.
Entón é basicamente dándolle como-- se
pensar en unha morea de casas nun barrio
que quere poñer seu mobiliario en, malloc
é como OK, recibe para ir á casa de tres.
E dálle o enderezo da casa de tres.
>> Entón iso agora, este tendas punteiro un enderezo,
almacena a dirección da súa casa.
* Medio PTR, OK, eu estou na miña casa.
Legal.
Que ter algún enteiro.
>> Entón, está pedindo a alguén para darlle móbiles agora.
Para que obteña algún int.
E iso pon-lo no seu punteiro onde está apuntando.
>> E, entón, só impresións fóra, entrou onde quere.
E, de novo, a referencia.
Entón, iso é como se para iso abordar e viu o que estaba alí.
Legal?
>> E entón é claro que liberar o noso punteiro.
Non esqueza liberar o punteiro.
Non esqueza comprobar a null.
Non esqueza liberar o punteiro.
Ten dúas cousas que recorda de iso, é que ten que lembrar.
Si.
Audiencia: cousas [inaudível] así, o char * s.
Como é que nós nunca liberar aqueles?
>> COLUMNA 1: Hm?
>> Audiencia: Son aqueles que, como cordas?
Vostede dixo que as cordas son como char * s, non?
Entón, por que non liberar cordas?
>> COLUMNA 1: Só para libre se está mallocing.
Audiencia: Ah, se está mallocing.
COLUMNA 1: Entón malloc e libre son dúas cousas
que debe ter sempre en conxunto.
f aberto, f preto, dúas cousas ten que ter xuntos.
En ambos os casos, para comprobar nulo.
Si.
>> Audiencia: Entón libre é só permitindo que calquera outra cousa
para ser almacenado alí despois este programa ten usado?
>> COLUMNA 1: É só dicir, OK, eu estou feito con isto.
Non precisa mantelo por preto.
Se non, o seu ordenador vai só me gusta de tentar mantelo alí.
E entón corre can't-- en problemas de memoria máis tarde.
Sempre quere liberalo lo porque el di a súa computadora, OK, eu son
feito con este lugar de memoria.
Pode te-lo de volta para min a usar máis tarde.
Legal?
Si.
>> Audiencia: Entón usamos o% d só porque unha parella que está volvendo,
ou porque é-- [inaudível].
>> Audiencia: Pode usar% i?
>> COLUMNA 1: Podes usar% i.
Calquera dúbida de última hora?
Continúe.
Audiencia: Eu só teño unha pregunta rápida.
Así, a variable PTR, that's-- como, co int * PTR = malloc,
que só está dicindo que é apuntando a un lugar en memory--
COLUMNA 1: Queres [inaudível]?
Audiencia: --que é o tamaño de-- non, é OK.
Pero é só apuntar a un lugar en memoria que é como catro bytes.
COLUMNA 1: Certo.
Entón malloc o tamaño do int di: OK, eu estou indo a ir correr,
atopar catro bytes de memoria para ti.
Cando se descobre que catro bytes de memoria,
lle dá de volta a dirección de onde comeza,
e iso é o que almacenado no punteiro, ou PTR.
Boa.
Vostedes parecen menos confuso do que a maioría persoas cando falo de punteiro,
así que eu estou me sentindo moi ben agora.
>> Todo correcto.
Como sempre, vostedes deben ter todos comezara as súas notas pset2 ata agora.
Sei que houbo algúns inestable cousas onde se di, fórmula non é válido
ou algo así.
Se está a recibir este, todo súas notas son válidos do meu lado.
Entón podo enviar-lle screenshots das súas notas.
Só deixe-me saber ben se está falta calquera notas ou algo
non parece facer sentido.
Veña ata min.
>> Teño sido super orgullosa de ti caras xa, co fin de manter-se.
E ter un bo resto da súa semana.
Eu estou seguro que vou ver algúns de ti no horario de oficina.