>> [Música tocando]
>> Davin: Todo ben, persoal.
Polo tanto, esta é a revisión para a primeira proba.
Está todo o mundo preparado para o cuestionario o mércores?
ALLISON: Woo!
ALUMNO: Woo!
Davin: Yeah.
ALLISON: Yeah!
Davin: que está preparado cara.
Este cara, dúas mans, agradable.
Entón revisión quiz hoxe, que vai para ser de aproximadamente unha hora e media.
Nós imos pasar por riba de todos os principais conceptos que debes saber para o quiz.
Nós imos pasar por riba de algunha codificación por exemplos de man, que son en cada cuestionario.
E se ten dúbidas, Sinto-se libre levantando a man e todo
así.
Ben, sobre loxística o cuestionario están en liña.
Entón imos dividir a xente ata en salas diferentes.
Baséase no seu nome.
Entón, se tes algunha preguntas sobre onde ir ou sobre o material é, como,
a palabra oficial sobre o que está pasando estar no cuestionario, comprobar en liña.
E iso é todo ata a data.
Entón, se non hai preguntas para comezar, imos comezar.
E aquí está Allison.
>> [Claps]
>> ALLISON: OK, grazas, Rob.
Apreciar-lo.
Davin debería virado a este.
Esta é unha lista non exhaustiva de temas, como sempre, como Davin dixo.
Consulte a documentación cuestionario en liña sobre cero.
Pero iso é moi much-- é no plano de estudos
é todo o que temos ido máis ata agora.
Todo aquí é un xogo xusto, así como calquera outra cousa
que poden ser mencionado na charla.
>> A miña sección, aquí, é só unha morea de revisión.
Hai un par de exercicios que vostedes poidan traballar.
Pero para a maior parte, nós realmente quero chegar a Davin cos códigos
por exercicios de man.
>> Entón, eu estou indo a voar por iso.
Se ten algunha dúbida, me deixar.
Levante súa man.
Eu prometer que eu probablemente vou velo.
Se non, pode movela ao redor.
Eu vou estar falando rápido.
Espero que todo o mundo está OK con iso.
>> OK, palabra especial, Davin obviamente Esquecín o meu de follas estes diapositivas.
[Risas] Vostede está en apuros, cara.
Así consellos para cuestionario cero, práctica de codificación en papel.
Vostedes están indo para obter un practicar con que agora con Davin,
así que non vai estar completamente só.
Coido que nós estamos indo realmente a través destas dúas funcións.
Así estará ben preparado alí.
>> Estar familiarizado cos seus conxuntos de problemas.
Houbo preguntas en enquisas anteriores
que lle vai preguntar, por exemplo, para codificar se algo moi semellante ao Mario.
Polo tanto, ser moi familiarizado con seu problema define, así
como as preguntas que lle preguntar no inicio o formulario
que cubra, vontade atender-lo moi ben.
>> Fai unha proba anterior, en virtude as limitacións de tempo.
Estas probas son longos.
O tempo pasa moi rápido.
E, moitas veces, non entende o quão rápido vai ata que realmente
poñer-se baixo estas restricións.
Entón, se pode simplemente esculpir, xa sabe, 75 minutos, ou esta noite ou mañá
tomar un destes cuestionarios baixo iso, estará en moito mellor forma.
>> E, tamén, a creación da súa folla de referencia.
Lembre, ten un páxina adiante e de atrás
como referencia para a súa proba o mércores.
Creación que é unha boa forma de estudar.
Todo o que está a ter problemas con que quere incluír alí.
Todo o que os seus TFS ser, como, isto é realmente importante.
Debes saber isto, son quizais as cousas que ten alí
se non te-los memorizado.
Mesmo se coñece-los realmente así, ás veces telo aí
é só unha especie de confort para ti, que sei quizzes son estressantes.
Así, calquera comodidade que comeza pode axudar.
Todo ben, tamén, durmir e comer e lle gusta das cousas normais
que dicirlle para probas.
>> Entón, comezando fácil, tipos de datos e tamaños.
Como dixen, iso é só ir estar me xogando unha morea de cousas
se aquí que ten que saber.
Polo tanto, temos os nosos chars que son unha bytes, ints
que son catro bytes, a longo de lonxitude, que son oito bytes.
Basicamente, é só ti quero soster enteiros grandes.
Carrozas, que son catro, dobres, que son oito.
Unha vez máis, só lle dá máis espazo para os seus coches alegóricos.
E a continuación, escriba estrela, de xeito que calquera punteiro nunha máquina de 32 bits,
que é todo o que vostedes teñen que saber, é de catro bytes.
>> Así, todas as cousas que debería sabe, quizais as cousas
quere ter en súa folla de referencia.
OK, a conversión binaria en binario, conversión
para hexadecimal, e cara atrás, todas as cousas que debes saber.
Así, a partir de binario para decimal.
Vostedes queren tomar un minuto rápido e intentar descubrir cada unha delas
e despois me diga o que son?
>> Eu tamén teño o doce na miña bolsa, para que calquera persoa que responde recibe doces, pola maneira.
E eu teño moita.
Déixeme incorporarse iso.
Vou dar isto para Gabe.
Así, pode distribuír doces para quen é bo e cooperativo.
>> OK, eu vin a man alí no fondo.
>> Estudante: Si, o primeiro é 42.
>> ALLISON: Si, primeiro é 42, correcto.
Estudante: [inaudível].
[Risas]
ALLISON: luns, alí en amarelo?
ALUMNO: 110010.
ALLISON: Correcto, e este último, aquí no fondo?
Ademais, si, vostede sabe que quere?
Só ten que tirar para fóra doces.
Como preto de doces para todos?
>> Estudante: [inaudível] cando estamos a facer.
>> ALLISON: Shh.
E, a continuación, o último.
Quen quere responder?
Ben alí.
>> ALUMNO: 11.100.
>> ALLISON: 11100, mira isto.
Parabéns, excelente traballo, todos.
OK, todo o mundo medio que entende o proceso para facelo?
Vostede, pasando de binario para decimal do xeito que eu tenden a facelo, está escribindo para fóra
as potencias de 2.
Entón eu digo, OK, 0 veces 2-0, polo tanto, iso é 0, 1 2 veces ao primeiro,
é 2 indo diante dese xeito.
Alguén quere que eu explícitamente pasar por un exemplo de binario?
OK, legal.
>> Decimal para binario é moi semellante.
Eu tenden a escribir as potencias de 2.
Comece o que é o máis grande, pero non ir máis alá do decimal
que está a procurar.
E, a continuación, tipo de traballar o seu camiño atrás sumando as cousas como necesarias.
>> E, a continuación, con suma, é como adición normal.
Se xa ten o caso en que está engadindo dous 1s, é obvio que se fai 2.
2 en binario é agora un 0, entón tes que para transportar o seu 1 á seguinte columna.
Legal.
>> Hexadecimal, isto pode ser algo que é un pouco menos familiar.
Así como Rob estaba me contando antemán, o seu truco para este
é só para división la en catro anacos de bytes, OK?
Bits, desculpe.
Vexa?
Grazas Rob.
É por iso que está aquí. [Noise] OK, entón nós só rompe-lo
en catro bits de anacos.
Así, con binarios para hexadecimal, Mira a primeira 4,
que é, se temos catro 1s nun liña, o número que iso simboliza?
>> ALUMNO: F.
>> ALLISON: Entón, nese caso, o que é 11111111 ou- si?
ESTUDANTE: FF.
ALLISON: Perfecto, FF.
Tan grande, doces para ti.
Agora, para saber como hexadecimal para binario, nós basta pensar sobre que tipo de forma inversa.
Para cada número ou letra que que temos no noso hexadecimal,
só convertelo en seus catro bits [Risas] para a súa conversión de catro bits.
Entón, 5, neste caso, o que é 5 se estamos representando o con catro bits?
>> ALUMNO: 010?
Mm-hm.
E entón A, que é en realidade, 10, estaría?
1010.
Polo tanto, temos que, aquí.
Así, a conversión entre hexadecimal e binario en realidade non é tan malo así.
Se ollar para el de catro bits anacos, será de ouro.
Everyone-- si?
>> ROB: Isto é tontería, pero sempre recordo
Un, xa que dun suposto ser 10.
E binario é só de 10 a 10, assim--
>> ALLISON: Ah, alí imos nós.
>> ROB: Hey.
>> ALLISON: Ei, doces para Rob.
Hai cousas non-chocolate alí.
Así, pode que algúns.
Matemáticas de modo ASCII.
Comporte-se.
Así matemáticas ASCII, como vostedes probablemente non recordo mal
p set 2 con Visioneer e César, que fixo unha morea de presente.
Teña en conta que, os personaxes son fundamentalmente só números.
Así, podemos facer contas con eles, só como nós facemos matemáticas con ints.
>> Entón temos un pouco cousa simple aquí.
Temos algúns en que é inicializar a 65.
E B igual ao valor ASCII de A máis 1, char C igual a D menos 1,
e carácter D igual a 68.
Entón nós estamos indo a impresión todos eles, como vemos aquí.
E alguén me pode dicir o que iso vai imprimir?
Estudante: [inaudível].
ALLISON: Exactamente, por iso, Unha cousa a notar é
que estamos imprimindo caracteres de cada vez, aquí.
Estamos designando aínda que A e B son enteiros cando os declarou anteriormente.
Estamos imprimir-los como personaxes de a porcentaxe C e nosa declaración de printf,
para que todo imprimirá como personaxes.
E, por suposto, o valor ASCII 65 vontade imprimir como A. O valor ASCII de A + 1
Sería 66, o que faría orgullo de B. Entón, en realidade, nós
obter A B C D. Todo o mundo bo alí?
Algunha pregunta?
Impresionante.
>> OK, ámbito de aplicación.
Entón alcance é, obviamente, un moi cousa importante a entender, aquí.
Unha morea de ti, se ter erros de compilación,
e el di que non ten acceso a algunha variable,
probablemente é porque definiuse o dentro dun loop
e entón intentou acceder a ela fóra del, ou viceversa.
>> Entón alcance na súa esencia, el só determina onde
dicimos que unha variable existe, onde nós pode mudalo, onde podemos acceder a ela.
É só unha especie de dicir estas son os únicos lugares onde ten acceso
a esta variable.
>> Así, os dous alcance que falamos durante a clase son globais e locais.
Así, as variables globais que falan sobre cando está definíndose os anteriores principal.
Isto significa que todo o seu programa ten acceso a el,
e existe durante o tempo como o programa é executado, OK?
Local significa que é máis confinado a unha rexión.
Así, sempre que ten funcións específicas como intercambio, sempre falar.
Falamos sempre sobre intercambio con A e B. A e B hai dentro desa función.
Non hai en ningún outro lugar.
>> Como así, cando tense declaracións ou loops.
Sempre que temos, por exemplo, nas un loop temos int I é igual a 0.
Temos algunha condición e actualiza-lo.
Só existe dentro do claves dese loop.
Se tentar acceder a ela en outro lugar, o compilador ía berrar contigo.
Sería como, o que está intentando facer?
Isto non existe.
Entón esta é a dous diferentes tipos de alcance.
Isto ten sentido para todos?
>> Así, por exemplo aquí, este é só un programa sinxelo.
O que vostedes pensan que é ocorrerá en cada punto
que tratamos imprimir?
Entón, este aquí, o que vai pasar?
ALUMNO: Ha imprimir tres.
ALLISON: Certo.
Vai imprimir tres.
E aquí?
Estudante: Non vai funcionar.
ALLISON: Non vai funcionar.
Está fóra de alcance, non?
Variable local non existe fóra desas claves, todo ben?
E entón o que dicir aquí?
>> Estudante: [inaudível].
>> ALLISON: O que?
Rob, vai.
>> ROB: Eu só dixo.
As variables globais deben subliñado variable global.
>> ALLISON: Ah, si, me desculpe.
Grazas, Rob.
Rob é como o noso compilador residente.
El só vai berrar para nós cando nós precisa del. [Risas] Si, iso
Debe ser subliñado variable global.
Entón, supoñendo que esta foi subliñado mundial
variable, o que vai pasar aquí?
ESTUDANTE: Isto vai funcionar.
ALLISON: El vai traballar.
Entón, que vai imprimir, polo que só un exemplo moi sinxelo.
OK, prototipos.
Entón, obviamente, nós realmente salientar a vós
para realizar funcións se ter sentido nos seus programas.
Pero, por suposto, cando facer as súas propias funcións,
normalmente vai define-los despois de inicio.
E vai tentar chamalos na principal.
E se non usar un prototipo, o compilador pode berrar contigo.
>> Prototype é basicamente só dicindo o seu compilador
que eu teño esa función por baixo de inicio.
Vou chamalo antes de que eu define-lo.
Só Manteña.
Eu prometer que está definido, e terá todo o que necesitas.
>> Así, a forma como o facemos é só o seu regreso Tipo, o nome da función, a súa entrada
lista.
É basicamente a primeira liña da súa declaración de función.
É realmente todo que é.
Pero esta é só unha tipo xeral de formato.
>> Así, no noso exemplo aquí, que vostedes deben
vimos no apartado nalgún momento, temos
algúns int cubo que leva algún int de entrada.
E nós temos o noso principal función, que esixe cubo.
E cubo é definido tras o feito.
>> Entón, se non tivésemos entrada int cubo na parte superior, cando ligamos cubo
dentro principal, o noso compilador ía estar con rabia de nós.
Sería como, o que está falando?
O cubo non existe.
Non sei o que está pedindo.
E eu só vou parar.
>> Pero por que fixemos o noso prototipo na parte superior, dixemos,
vostede sabe, cando ve cubo, non se preocupe con iso.
Eu prometer que se define no mesmo.
E vou deixar facer o que quere.
Entón, se xa ten unha función que é declarado despois que chamalo
por primeira vez, ten que ten un prototipo na parte superior.
>> Si?
>> ROB: El é cadrado, non cubagem.
>> ALLISON: Oh meu Deus.
Non have-- Gabe, eu penso era o noso revisor.
OK persoal, teña paciencia comigo, aquí.
Espero que todo o mundo está quedando a idea.
OK, entón iso debe ter foi ao cadrado, non en cubos.
Pero a idea segue sendo a mesma.
Calquera función que estamos chamando despois o feito debe ter un prototipo.
Todo o mundo ben con iso?
Outros erros de dixitación?
Está ben.
Posibles erros de dixitación aquí antes de comezar, Rob?
[Risas] OK, entón estruturas.
Basicamente, estruturas permiten que para crear o seu propio tipo de datos.
Tanto como un int ou un char ou unha boia, é só un outro tipo.
Gústame pensar niso como, como, crear o seu propio tipo de datos.
Entón, el permite que fai iso.
E que ten diferentes tipos de datos.
>> Entón, se se lembra, nunha matriz, que só pode manter as cousas do mesmo tipo.
Structs nos permiten realizar múltiples cousas de tipos diferentes.
Polo tanto, neste caso aquí, nós ten un struct chamado Student,
nomeado aquí na parte inferior.
E nós temos algúns id int e algún nome cadea.
Polo tanto, este é só un outro tipo de datos.
Agora temos un tipo de datos chamado Student.
>> Entón, por que podemos pensar en como só un outro tipo de datos,
podemos declarar variables como fariamos con calquera outro.
Entón, en vez de só ter, tipo, un int estudante, só temos un alumno,
estudante 1.
Oh, mire.
É Rob.
Entón, aquí estamos declarando unha estrutura, é unha variable
chamado estudante 1 do tipo alumno.
Por iso, vai ter id e nome asociado a el.
>> E a forma como acessamos estes elementos dentro da nosa estrutura
é co operador punto, aquí.
Polo tanto, neste caso, nos declarou algún estudante 1.
Nós concedido o ID para ser un.
E nós asignado o nome a ser Rob.
OK, todo o mundo ben con iso?
Use-o só como-- si?
>> Estudante: Si, cando typedef-- necesitamos utilizar typedef?
>> ALLISON: Entón typedef só isso-- di Rob, ten
me pode resolver neste caso estou wrong-- pero typedef é só realmente declarando
lo como un tipo que pode usar, non?
>> ROB: Si, é basicamente polo que é só a creación de
un alias, ou un alcume para un tipo.
Entón pode escribir que [inaudível].
Entón, [inaudível] existe, e agora só temos
[Inaudível] significa exactamente o mesmo.
E aquí, estamos ingresaran, creo, algún tipo struct 2 [inaudível].
Entón é só un apelido para un determinado tipo.
>> ESTUDANTE: Cadea [inaudível] biblioteca se ingresaran anteriormente como carbón estrela.
>> ALLISON: Para os nosos propósitos aquí, se está declarando un struct,
só facer typedef struct.
OK, entón de antemán, esta é só unha variable normal aquí.
Nós acceder a ela con un punto.
se temos un punteiro para un struct, podemos realmente
usar unha frecha, que é moi legal.
>> Polo tanto, neste caso, temos un punteiro para un estudante de un que é do tipo de estudante.
Teña en conta que, co seu construción punteiro,
Quere o que quere que escriba o seu punteiro está a apuntar para ser no inicio.
Polo tanto, temos algún estudante 1, aquí.
E xa que este alumno 1 é agora un agroma,
podemos realmente ir estudante nome unha frecha no canto de punto, porque é un punteiro,
e asignar Rob.
E agora, se quere Rob optar Davin,
este é só amosar que unha forma diferente de facelo.
>> Entón, en vez de usar a frecha, ten pode Também-- vou rematar isto e, a continuación,
asumir que podería question-- Tamén fan referencia un alumno.
Isto é dicir como ir o que está á estudante 1, que
sería o noso struct alumno.
Acceder-lle con un punto e o elemento que quere, e entón transferir-lo.
Non era unha pregunta.
Estudante: Si, entón como é que ten usar [inaudível] cando está
facendo estrela estudante sen [Inaudível] de estudante?
ALLISON: Por este é a creación dun punteiro.
ROB: Nós imos falar sobre iso.
ALLISON: Estamos indo falar sobre iso máis tarde na revisión.
Entón, só tes que soster ese pensamento.
Se aínda lle molesta no final, veña falar con un de nós.
>> Entón, eses fan exactamente o mesmo.
Estamos só mostrándolle dous diferentes formas de facelo.
Alumno 1 é agora un punteiro, así pode acceder ao elemento de nome
no interior da estrutura cunha frecha.
Ou pode eliminar a referencia o punteiro, e entón acceder a ela, como faría normalmente.
Será que isto ten sentido para cada un?
Se todo o punteiro cousas son un pouco confuso, Gabe vai falar sobre iso,
e entón quizais esta fará máis sentido.
Si?
>> Estudante: Si, así como é esta distinta da?
ALLISON: o anterior?
Así, o estudante 1 neste caso non é un punteiro.
É só a súa estrutura actual.
>> ALUMNO: Aceptar.
>> ALLISON: Considerando este é un punteiro para un struct.
>> ALUMNO: OK, pero non o tipo de acaban traballando o mesmo [inaudível].
>> ALLISON: É o mesmo funciona de forma eficaz.
A súa sintaxe é só diferente.
ALUMNO: Aceptar.
>> ALLISON: Si, son eficazmente o mesmo.
É só dependendo do contexto, pode querer un sobre o outro.
Si?
>> ALUMNO: Cando fai as referencias á 1--
ALLISON: Mm-hm?
ESTUDANTE: Por que teñen os parénteses?
ALLISON: Por estudante 1 é o punteiro.
Entón, ten que asegurarse de que está só dereferencing o punteiro.
>> ALUMNO: Aceptar.
>> ALLISON: Entón, nese caso aquí, os parénteses arredor da cal
significa que está dereferencing estudante 1.
Entón vai para onde estudante 1 puntos, o que é a súa estrutura.
Entón, agora pode pensar niso como que struct,
para que poidamos utilizar a nosa operación normal do punto.
Algunha pregunta?
Legal, impresionante.
>> Entón último, creo que é o meu último slide, Woo!
OK, entón punto flotante imprecisión.
Falamos brevemente sobre que durante a charla.
Basicamente, temos infinitos números reais.
E se algún de vós amo a matemática, hai
todo tipo de cousas legais coa xente.
>> Pero hai infinitos moitos números reais.
Pero son só finito moitos bits que temos.
Entón está indo sempre ten imprecisión, é todo.
E iso é que é só unha especie de como algo que ten que saber.
Que, como podemos pedirlle por que imprecisión existe punto flotante?
Así, só algo que debes saber.
E con iso, eu estou virando la para punteiros.
>> Binky: Ola, persoal.
Binky do meu nome.
Vou falar punteiros.
Si, por iso é realmente punteiros miña parte favorita neste curso.
Entón, só para deixar claro o que Allison estaba falando aquí, entón a razón
para entendermos que a única diferenza aquí, a gran diferenza foi a forma
declaramos cousas.
Así estrela estudante significa que este é un punteiro para un estudante.
Considerando que o foto antes, o estudante é un struct real, como un alumno real,
conteñen calquera destas cousas.
>> E a razón pola que nós quere a-- si, Davin?
>> Davin: Que fai a frecha significa?
>> Binky: Os medios de frecha exactamente o mesmo como esta.
Entón, o que realmente non precisa de frecha.
Como, se é único programa en C, pode só usar ese.
Sentímolo, eu non o que é.
Pode só usar esta sintaxe.
>> Pero algunhas persoas, cando eles estaban designado C,
descubriron que a xente usado que a sintaxe que logo,
que van gustar só chegar cunha estrutura de sintaxe para el.
E iso ocorreu en a forma desta frecha.
E é moi bo, porque el simboliza algo
como estamos, en realidade, seguir esta frecha, este punteiro,
para un espazo na memoria.
E cando chegamos alí, queremos mirar para o nome dese alumno,
se iso ten sentido.
Ok?
>> Polo tanto, este é exactamente o mesmo.
Esta é exactamente o mesmo que iso.
Son compilados exactamente o mesmo, OK?
E a razón pola que aquí malloc algo, é porque, neste caso,
nosa variable é realmente só unha variable punteiro.
Entón, só temos un espazo en memoria que está sostendo un punteiro.
Nós realmente non temos ningún espazo que mantén a estrutura real.
>> Polo tanto, este ten que ser feito en dúas etapas.
Temos que crear o memoria para poñer a estrutura en.
E nós temos que crear o memoria para poñer o punteiro no.
Entón, son basicamente dous diferentes variables, aquí.
Un deles é do tipo alumno, agás que realmente non ten un nome.
E o outro é do tipo estrela estudante.
E entón estudante de 1 puntos alí, se iso ten sentido.
Ok?
>> Así, a razón pola que usamos punteiros é porque todo
nun ordenador, cada variable nun ordenador ten dúas cousas.
El ten o seu valor.
E ten o seu enderezo.
E un bo xeito de conceituar esta é que hai
moitos problemas cando proba a usar funcións.
E imos tratar ollar a un destes.
É dicir, que vai pensar en memoria como caixas.
>> Sempre penso en variables cando di que na é igual a 5.
Pensa en poñer 5 nunha caixa.
Así que se queres pasar que int nunha función?
Só pass-- non sabe-- x nunha función.
Pero o que pasa é normalmente como seres humanos, ten
pensaría algo como eu son pasando a caixa para unha persoa.
E iso realmente non acontecer en computadores.
O que pasa é que copiar o valor do cadro de caixa da persoa.
>> Entón o que eu estou tentando dicir é que se ten un function-- sorry-- aquí,
se temos unha función como a de cinco ata alí, se tentar pasar unha variable,
el só vai copiar.
Un NX initialize é igual a 3, que vai para copiar este valor até a variable a
alí enriba.
OK, e este é o tipo de razón por iso que queremos usar punteiros.
Porque en vez de dando só o valor,
no canto de só pasar só o valor dunha función,
queremos pasar por referencia.
O que chamamos paso por referencia é amable de dar a caixa para a función,
para que a función tamén pode cambiar os valores dentro desa caixa.
>> OK, entón só algúns punteiro básica material é crear punteiros,
só declaralo la un tipo, e pór unha estrela despois.
E o tipo é só o que está apuntando.
Entón, se é unha estrela int, está apuntando para un int.
Se é unha estrela char, está apuntando para un gráfico.
E se é unha estrela alumno, está apuntando a un estudante.
Ok?
>> E son todos os 4 bytes de longo.
Como esta variable En realidade, non
Debe manter un char, un int ou un estudante.
El só precisa manter un enderezo.
É por iso que eles son os 4 bytes longa nunha máquina normal de 32 bits.
Ok?
Entón, aquí, x é unha variable que apunta para un int. y apunta a un char. puntos z
a unha boia.
Todas as preguntas aquí?
Legal.
E hai dous diferentes símbolos teñen
a ter en conta cando benvida ao punteiro.
Entón, facendo referencia e dereferencing son os grandes.
Así, o comercial de nome da variable dálle a?
ALUMNO: Enderezo.
Binky: Enderezo.
Entón, se declarar un int é igual a 5, a continuación, comercial
dun que lle vai dar a dirección.
E realmente pode probar para imprimir iso e ver
a dirección na memoria a variable ten.
E entón dereferencing-- de xeito que estaba se referindo,
recibindo o dereferencing address-- é exactamente o contrario.
OK, así como tempos é o oposto dunha división,
estrela é o contrario do comercial.
Entón medio dereferencing ir alí.
Entón, se dá star-- I non sabe-- 50, que é
vai ir ao enderezo de número 50 dentro do seu ordenador.
OK, e por que nós vemos que son opostos?
Porque o que pasa se fai algo así como estrela comercial Unha?
Ben, un comercial dálle a dirección dunha variable, a dirección dun.
Pero estrelas significa ir máis alá.
>> Entón o que ocorre se ir ao enderezo dun?
Só pode un, non?
Así vai a dirección do un é o mesmo que un.
É por iso que eles son xeralmente referiuse á same-- este
e iso son referidas operadores como contrario.
Ok?
So cool.
>> Baixo o capó, por exemplo, se declararmos int x é igual a 5,
temos unha variable.
E recorda que eu dixen que cada variable-- e iso é unha cousa boa
para manterse en mente-- ten dous cousas distintas asociado.
Ten un e un valor requirido.
Ok?
>> Así, o valor, neste caso, é de 5.
E a dirección é-- imos dicir, eu son facendo algo up-- é 0x04.
E a única razón pola que nós normalmente representar os enderezos en hexadecimal
é un, porque é como bo.
El vai ben co binario.
É doado converter de e para binario.
E non queda moi grande se ten un número moi grande.
Entón, nos gusta de usar hexadecimal en enderezos de impresión.
Pero eu podería representar este como un enteiro.
É moi ben.
>> E por iso ten un enderezo 4 e un valor de 5.
E entón eu dixo punteiro int estrela.
Polo tanto, este é un tipo, previo diferente.
Int punteiro estrela igual a dirección de x.
Entón, o que será o valor de PTR?
Será o enderezo de x, aquí abaixo.
OK, entón o valor vai ser o mesmo que o enderezo.
Esa é a asignación de operar eu estou facendo.
E entón PTR terá seu propio enderezo, o que acaba,
neste caso, o 8, OK?
>> E entón eu crear unha nova copia de enteiro.
E digo int copia é igual a ir máis alá.
Entón, vai para o PTR está a apuntar.
Ben, o que iso PTR ten?
PTR ten 0x04.
Qué acontece se eu tentar ir alí?
Vou atopar a cara que ten dirección x e que ten un enderezo 4.
E quen ten abordar catro é x.
Será que isto ten sentido?
Si?
>> ALUMNO: Neste caso, é o punteiro nunha pila?
>> Binky: Neste caso, it's-- boa pregunta.
Realmente non penso sobre iso ao facer-se estes enderezos.
Pero se esta é, tipo, todo estas son as variables locais,
entón x vai vivir em-- todo vai vivir na pila.
Entón, todo está indo estar apuntando á pila.
Só ten a pila cando comezar a usar malloc, non?
>> Entón, se se lembra pila é cada vez chamar unha función no seu programa,
como, por exemplo principal, ou calquera outra función, como printf.
Todos os lugares son variables vai poñer nun cadro de pila.
E eles están indo para obter como apilados na pila.
Iso é o que se chama pila.
E todas estas variables locais van estar alí.
E o heap-- e imos para falar máis sobre este later--
a pila é onde todos alocada dinámica vidas de memoria.
Legal?
>> Imos para ese foto.
Si?
>> ALUMNO: Por que non é int copia retornando 0x04?
>> Binky: Por que non é int copia retornando 0x04?
>> ALUMNO: ¿Por que non é que [inaudível]?
>> Binky: Porque o que é un valor de PTR?
>> ALUMNO: 0x04.
>> Binky: 0x04.
Qué acontece se vai a 0x04?
O que gañou?
>> ALUMNO: Oh, Aceptar.
Binky: Ve?
Estudante: Si.
Binky: Entón comeza 5.
Así copia terá 5, se iso ten sentido.
Si?
>> ALUMNO: poderiamos conseguir 5 no cadro o valor [inaudível]
se colocarmos int copiar [inaudível].
>> Binky: Int-- que faría, si.
Isto faría practicamente o mesmo.
Pero deste xeito, podemos pasar abordar a funcións.
E esa é a cousa legal imos facer agora.
>> Polo tanto, este tipo de exercicio sempre vén á tona on-- moi xeralmente xorde en cuestionarios.
Entón, é realmente bo para tratar facer este tipo de cousas mesmo.
Polo tanto, proba manter o control do que a dirección é e quere que os valores das variables
son en cada punto.
Polo tanto, esta é exactamente o que imos facer.
Aquí, temos medidas, un, dous, tres, catro, cinco.
Un, dous, tres, catro, cinco.
E imos manter o control os valores de x e dun.
>> Entón, o que isto está facendo, se esta é unha código de buggy, nós estamos intentando facer a cinco.
Entón, estamos tentando entrar nunha variable e cambie o seu valor para 5.
E recorda se miña analoxía de ter un caixa e entregando a caixa a alguén?
Entón principal ten esta caixa chamada x.
E que contén o valor 3.
E eu estou tentando entregar esta caixa para a cinco.
>> E quero cinco para cambiar o valor desta caixa para 5.
E entón eu só imprimir o valor de x.
Este é o meu function-- iso é o que eu estou tentando facer.
Eu só estou tentando actualizar o valor de x para 5.
Claro que a función fai?
>> OK, entón o que será o valores de x e un aquí,
primeira liña, á dereita antes da primeira linha-- eu dizer-- do programa?
>> ESTUDANTE: Probablemente lixo.
>> Binky: Só o material de lixo.
Entón, eu só poñer N / A. Así nós realmente non sabemos.
Como, a nin sequera existe aínda, por que non chamaron a cinco.
Int un non está declarado.
E x vai existir aquí, pero nós non temos realmente
asignado calquera valor a ela, entón OK?
>> E entón, o que será o Os valores de x e un número en dous?
>> Estudante: [inaudível].
>> Binky: Entón x será 3.
Iso é doado, porque estamos atribuíndo 3 a el.
E un non existe porque un só vive ata cinco.
Entón eu vou ter 3 e nada.
ou como lixo, sexa cal sexa, realmente non definido.
E agora, esta é a liña importante.
Aquí, nós estamos indo a realmente chamar a cinco.
E recorda que eu dixen.
Nunca pasar no cadro.
Nós só copiar o valor de a caixa a outra caixa.
Isto é todo ordenadores que, por favor copie cousas dun lugar a outro.
>> Entón, para cinco, o que realmente fai é el copia o valor de x para un.
Entón, o que será aquí?
Os valores de x e dun.
3 e 3, imos copiar que ao longo de x para un.
Legal.
>> Agora que estamos aquí.
E agora nós estamos indo para actualizar un é igual a 5.
O que vai ocorrer na liña de catro?
>> Estudante: [inaudível].
>> Binky: un é actualizado, pero x non se actualizado.
Como x aínda vive na principal, é un completamente diferente bloque de memoria.
É unha variable distinta.
unha é outra variable.
Eles teñen o mesmo valor porque eu
copiado sobre o valor de x para un.
Pero agora cando fago un é igual a 5, el realmente non afectar de forma algunha x.
Esta é a parte máis complicada.
Será que ten sentido para todo o mundo?
Si?
ALUMNO: Só unha pregunta, ten tres.
Por que é un já-- Oh, non, é 3.
Sentímolo, non importa.
Lin 5.
>> Binky: Si, 3, 3.
>> Estudante: [inaudível], si.
Binky: E entón imos asignar 5 a un, pero realmente non cambia x.
Boa?
Estudante: Si.
Binky: Si?
Pode explicar de novo como un cópiase [inaudível]?
>> Binky: OK, entón cando chamar a cinco de x, de xeito que esta liña de código aquí.
a cinco dos x, o que é x?
x está só a 3, neste punto, non?
Entón, vostede podería só pensar en poñer a 3 aquí e esquecendo x.
Basta pór a 3 aquí.
Tipo, imos copiar o valor de x ao int a que está alí enriba.
Ok?
>> Así, o valor de x é 3.
Estamos indo para copiar 3 ata a.
E todo isto outro bloque de memoria, esta outra variable
chamado un terán 3, así.
Será que isto ten sentido?
Si?
>> ALUMNO: Se der a cinco como telo como un número enteiro x no canto dun,
tería que resolver todo?
>> Binky: Se é un integer-- non, que non estaba a reparar todo.
Entón esa é unha pregunta moi boa.
Realmente non importa o que chama esas variables.
Unha vez máis, será cuestión de alcance, porque non son a mesma x.
Son completamente espazos diferentes na memoria.
Estudante: [inaudível].
Binky: Entón, iso realmente non importa o que chamalos.
Isto non reparar as cousas, OK?
Máis preguntas?
Si?
>> ESTUDANTE: Como é volver número cinco [inaudível]?
Binky: OK, non fixemos iso aínda.
Imos ao número cinco, entón.
>> Estudante: [inaudível]?
>> Binky: O que?
>> ALUMNO: Ten un retorno en todo?
Binky: Non temos un retorno, non do principal.
Pero principal retorna 0 automaticamente se non regresa nada.
Si?
>> ALUMNO: Podería facer main-- ou podería facer para cinco retorno dun?
>> Binky: Poderiamos ter a cinco devolver un, si.
Pero, entón, teríamos de asignar x é igual ao valor de retorno de ata cinco,
o que sería un pouco programa diferente.
Ía traballar.
Pero o que queremos facer é o que é chámase cambiar algo no lugar.
Entón, nós queremos, en realidade, cambiar ese marco e non se preocupe
sobre ter que volver valores ou calquera cousa.
Ok?
>> Este é só como a función de intercambio David mostrou na charla, só que eu son
só lidando con unha variable.
E usou dous, entón int a eb e entón variable temporal e outros enfeites.
Ok?
Entón, cal é a última liña?
Despois de cinco retorno, é simplemente a un vai ir aínda.
Non teremos un máis, e só x aínda vai vivir.
>> E difícil de adiviñar? X non cambiar o seu valor,
ao final, porque estamos cambiando só o valor dun.
É por iso que foi de 3 x todo.
Ok?
Boa.
Polo tanto, este programa de non conseguir o que quería.
Agora, imos resolve-lo.
>> E o programa de corrección é usar punteiros.
O que facemos é que temos tres liñas que son diferentes.
Os primeiros si non estamos pasando x.
Estamos pasando a dirección de x.
Entón, en vez de copiar o valor da caixa,
Eu aínda vou copiar algo.
Pero eu estou copiando a dirección da caixa.
>> Entón, se eu pasar a dirección do caixa para a cinco, despois a cinco
poderá descubrir que, en memoria e cambiar o seu valor.
>> Así, e despois alí enriba, eu teño un que non é un int máis.
un é unha estrela int.
É un punteiro para un enteiro.
E entón, por que eu estou pasando o abordar aquí, e entón o que fago
non é un é igual a 5, xa un está sostendo un enderezo.
Entón o que quero facer é ir alí e actualizar o contido deste enderezo
con 5.
>> OK, entón imos pasar por todas as liñas de un por un.
Entón, cando eu comezar, eu aínda ten N / A, N / A, N / A
para todo na primeira liña, porque eu non teño realmente
declarou cousas aínda.
E despois a liña dous, eu teño x é igual a 3.
A int estrela a non existir, mesmo que antes.
>> Agora queda interesante.
Entón eu vou pasar.
E imos supor que a dirección de x é 12 en hexadecimal.
Nós só asumir iso.
Eu fi-lo cara arriba.
Entón o que estou pasando aquí é un a cinco.
Estou pasando 12.
>> Entón o valor que un ten?
>> Estudante: [inaudível].
>> Binky: Sentímolo?
>> Estudante: [inaudível].
Binky: Si, como, deixar de asumir que estamos aquí, agora.
Estou preguntando.
>> Estudante: [inaudível].
>> Binky: foi iniciada.
>> Estudante: [inaudível].
Binky: Por nós pasamos algo para a función.
Si?
>> ALUMNO: Enderezo x.
Binky: Vai ter o seu enderezo de x.
E o enderezo de x é 12, bo.
Entón x será tres, porque nós non cambiaron realmente x aínda.
E entón un será 0x12, entón a dirección de x, porque iso é
o que nós pasamos a cinco.
>> E entón o que pasa se intentemos ir alí?
Que atoparemos?
Entón, se tentar imprimir unha estrela, imos seguir este enderezo
e obter o valor dentro.
E o valor é só o mesmo valor que x
ten porque esa é a enderezo de x, que será de 3.
Será que somos bos?
>> OK, e logo agora, nós realmente ir alí.
E nós actualizamos o que quere É neste enderezo 12.
Facemos máis cinco.
Entón, agora ambos x e unha estrela son cinco.
>> Por que?
Xa que a dirección de x é 12.
E un ten tamén 12 como o seu valor.
Entón, se seguirmos 12, estamos só atoparás x.
Polo tanto, todo o que facemos con estrela un ocorrerá
ax, porque contén un a dirección de x.
Ok?
>> E iso é como o cerne da corrección.
Entón, agora somos capaces, desde cinco anos, de feito,
memoria de acceso que viviu no inicio.
Polo tanto, esta memoria non vive no cinco, como antes, esta dirección 12.
E fomos capaces de ir alí e cambie o seu valor para 5.
>> E entón, cando volvemos, esquecemos a.
Esquecemos nos de unha estrela.
E x aínda é cinco.
Entón, se quere aplicar unha función de intercambio,
que tería só que facer exactamente o mesmo, agás que precisa para int estrelas aquí,
e así por diante e así por diante.
Ok?
Será que somos bos?
Legal.
>> Entón punteiro aritmética.
Este é un tema un pouco complicado.
Así, verifícase que os punteiros son só enteiros.
Pode pensar neles como números enteiros.
Porque na memoria, ten como dirección de memoria cero, un, dous, tres,
catro, cinco.
Así, podemos resumir enderezos de memoria.
>> E iso é xeralmente o que fai cando está dentro e array, por exemplo.
Unha matriz é como un contiguo bloque de memoria, de lotes de caracteres,
por exemplo, os lotes de ints.
Entón, se quere ir ao int segundo ou no terceiro int,
pode simplemente sumar algo para o primeiro dirección, e vai chegar alí.
Polo tanto, esta é realmente útil para iso.
>> E a cousa para manter presente, con todo, é
que non é só gusta aritmética normal no sentido
que, se está lidando con, digamos, unha estrela int, e engadir un a el,
entón non vai engadir 1 ao enderezo,
está indo a engadir 4 ao enderezo.
Por un int é de 4 bytes.
>> Polo tanto, este é só como camiñando nun array.
Se temos unha serie de lotes de ints e entón imos tentar ir ao segundo,
É basicamente só suma dos enderezo do primeiro un máis un.
Pero iso non vai ser-- só digamos que a dirección do primeiro é 4.
Aquí, no caso en apreciado.
E se sumarmos, polo que este é o que está pasando.
Temos un int.
Int x é igual a 5.
X ten un valor de 5.
E nós arrincar este punteiro, int y int estrela y é igual ao enderezo de x.
>> Imos asumir que a dirección de x é 4.
O que vai ocorrer agora, se eu engadir unha suma de y?
Vai realmente suma 4 no canto de só un.
Entón eu engadir a 1, pero, en realidade, engadiu 4, xa que o equipo de intelixente.
Entón, que vai realmente engadir polo i veces o tamaño do tipo de punteiro.
Ok?
>> Polo tanto, se se tratase dun carbón animal, por exemplo, se isto fose un char estrela y,
e se engadimos 1, entón iso sería ser de 5, porque carácter é un byte de lonxitude.
Boa?
>> E, finalmente, chegamos ao punteiros e matrices.
Acontece que cada vez está lidando con unha matriz,
en realidade está lidando cun punteiro.
A razón conceptual moi agradable para dicir que as matrices son moi grandes.
Entón lembre que eu dixen que cada vez que pasar cousas ao redor,
copiar todo.
Entón, se ten unha matriz iso é moi, moi grande,
realmente non quere copiar todo o tempo
ti pasalo ao redor para outro función, porque iso é só
enormes cantidades de traballo.
Entón, o que fai é só pasado a dirección do primeiro byte.
E, a continuación, a función terá acceso a todos os elementos desta matriz.
Entón, pasou a matriz a través do seu enderezo, de xeito que a dirección do primeiro byte.
>> Entón, se nós declaramos int serie 3, aquí, sabemos
como acceder ao primeiro elemento utilizando a notación de corchetes.
Se se lembrar do soporte notación, array soporte 0 é igual a 1.
Ben, iso sería exactamente o aínda que só ir alí e poñer un.
OK, é exactamente o mesmo.
Así, a notación de corchetes aquí será o mesmo que esta liña.
>> E difícil de adiviñar o que a notación de corchetes para soporte de matriz 1 será?
Será só o mesmo que iso.
Entón, engadir un para matriz.
Mover un longo na memoria.
Vaia alí, e poñer a 2.
Ok?
E esta liña é o mesmo.
Queremos ir á terceira caixa, de xeito matriz máis dous.
Vaia alí, e poñer a 3.
Entón, na memoria, o que é vai pasar é que estamos
terá 1, 2, e 3, como o tres elementos desta matriz.
>> Poderiamos ter feito isto usando nosa notación soporte familiar.
Eu só quero que vostedes saben que son a mesma cousa.
OK, preguntas sobre iso?
Niza.
Agora, eu estou indo a man la para Hannah,
>> HANNAH: Yay, yee-haw.
>> Binky: Fala de memoria e artigo de material.
[Aplausos]
>> HANNAH: Ola, legal, entón nós estamos imos falar un pouco máis
sobre a memoria, que acabamos enderezado usando punteiros.
Polo tanto, hai dúas partes principais da memoria que estamos preocupados.
Temos a pila, que crece se no fondo, e heap, que
vai para abaixo dende o principio.
E a pila vai realizar todas as nosas variables de instancia.
Así, cada un chama a unha función obtén o seu propio pequeno cadro na pila.
Así como Gabe mencionado anteriormente, se nós chamar a función de novo e de novo,
imos apilar as cousas na pila.
>> E do mesmo xeito, a pila, que comeza na parte superior
vai realizar toda a memoria que dinámicamente reservar.
E así como nós dinamicamente reservar a memoria,
este vai descender ao fondo.
Algunhas cousas para estar en conta cando Utilizamos a pila eo heap,
coa pila, se temos moi many-- imos dizer-- chamadas recursivas,
e estamos chamando unha función de novo, e de novo, e de novo, e de novo,
e está acumulando, empilhado, empilhado.
E iso vai chocar coa pila.
Nós imos estar sen memoria.
Isto vai causar unha problema para o ordenador.
E iso chámase estourido de pila.
Entón, iso é sempre algo que debe ser consciente e tentar evitar.
E a pila, ten que lembrar para non baleirar accidentalmente memoria.
Cada vez que usar malloc, non esqueza liberar esa memoria.
Se non, que vai só estar na pila desperdiçado,
eo ordenador non vai saber que é libre para usar a memoria.
Entón, estas son algunhas cousas que ter moito coidado con cando
está lidando con a pila eo heap.
Calquera dúbida con isto?
Impresionante.
>> OK, legal.
Polo tanto, este tipo de ten a mesma idea como estourido de pila, onde
estamos indo alén da límites do que a memoria
é que se quere que sexa capaz de usar.
Entón tome, por exemplo, un buffer, ou podería só pensar nel como un array.
E nós dixemos, OK, imos crear esta bo abano pouco.
Vai ser unha cadea.
Ou que vai almacenar caracteres.
E está indo só para dicir Ola.
E é indeterminado.
É iso aí.
>> Pero se eu fose alguén mal e quería facer algo de malo con esa matriz, o que
Podería facer é tentar escribir tras o final da cadea.
E como vai ver, si Escribo o suficiente,
Podo realmente afectar a dirección do remitente.
E se eu comezar a afectar a dirección do remitente,
Eu afectar o xeito no que o programa é executado.
E, no canto de volver, ten sabe, unha secuencia feliz como Ola, eu
podería facer algo malo, como ir ao noutro lugar no seu ordenador, aínda
memoria, cambia-lo, o que quero facer.
Entón é iso que este sería parecido é se eu medio que encheu-se
con valor de lixo aleatorio, neste caso, só un.
E entón cando realmente chegou ao enderezo de memoria,
Comece a enche-lo con algo que fixen o que eu quería facer.
Calquera dúbida con buffer overflow?
Impresionante, non voando a través deste material.
>> OK, entón nós falamos unha morea de sobre punteiro con Gabe.
Como podemos realmente obter un punteiro?
Como podemos obter un enderezo na memoria?
Ben, podemos utilizar este bo función malloc chamada, que
está indo a obter un pequeno anaco de memoria,
especialmente na heap, como discutir,
e el lle vai dar de volta un Punteiro ao enderezo na memoria.
E o argumento de que nós ten que dar a malloc
é a cantidade de espazo na memoria que queremos.
>> Así pode ver o tamaño en bytes.
Digamos, por exemplo, ou de feito, neste exemplo,
alocamos abondo espazo para 10 enteiros.
Entón, probablemente o que imos querer para poñer aquí é un array de 10 enteiros.
Entón, nós darlle tamaño enteiros, o que Aprendemos era cantos bytes?
ESTUDANTE: 4.
HANNAH 4, bonito, e nós quero 10 destes nunha liña,
de xeito que temos espazo suficiente para almacenar todos os 10 números enteiros, neste caso.
Algo super importante, calquera momento que chama malloc,
ten que comprobar a null.
Se non comprobar a nulidade, así, malloc se é executado fóra do espazo
e xa non pode darlle calquera máis memoria, el volverá nulo.
Entón, se non verificar, malloc pode devolver nulo.
E entón, se intentamos desreferenciava un punteiro nulo,
nós estamos indo a obter un fallo de segmentación, que imos falar agora.
Impresionante.
>> OK, preguntas con malloc?
Si?
>> ALUMNO: Será que a comprobación nulo [Inaudível] non fagas iso no cuestionario?
>> HANNAH: Por suposto, a pregunta era el matter-- no cuestionario,
recibirá puntos fóra se non marcar para null?
Si, vai gañar puntos fóra se non comprobar a nulidade.
Cada vez que chama malloc, tanto no quiz e as súas Serie de exercicios e na vida real,
ten que comprobar a null.
Boa pregunta.
>> Gabe: E se eu non liberar?
HANNAH: Gabe quere saber o que se non o facemos libre.
Entón teremos unha escape de memoria no noso heap.
Algunha pregunta?
Si?
>> ESTUDANTE: Pode pasar por riba de você- buffer overflow rapidamente de novo?
>> HANNAH: Claro.
A cuestión era que podemos pasar por riba estourido de buffer realmente rápido.
Imos volver a eses diapositivas.
Así, un tapón, pode simplemente pense nisto como unha matriz, non?
Ten algún espazo na memoria.
E cando nós primeiro crear a nosa matriz, sabemos matrices teñen tamaño fixo,
ou o noso tapón ten un tamaño fixo.
>> Entón, digamos que, neste caso, temos só espazo suficiente para escribir a secuencia Ola.
Ou tamén pasado que conectado, se somos pasado o que a nosa matriz que dixo que podería realizar,
poderiamos realmente comezar escrita na memoria
que o ordenador non fai queren que a xente escribir en.
E, especialmente, se se loita algo así como o retorno
enderezo da función, o que, como calquera outro anaco de memoria,
é só un lugar na súa ordenador, realmente pode
cambialo e comezar a facer cousas malas.
Responder a súa pregunta?
Incrible, calquera outra cousa?
Si?
>> Estudante: Entón pila [inaudível], ten dixo que vai do fondo indo para arriba.
Dentro da franxa de pila, fai a memoria vai de, como,
de arriba abaixo pertencente a cada pausa?
>> HANNAH: Como você- retrasar a Rob nun presente.
>> ROB: El vai crecer na mesma dirección que a pila crece.
HANNAH: Aceptar.
ROB: Entón eu fico confuso.
Esta será a abstracción.
HANNAH: Aceptar.
ROB: Isto é correcto.
Polo tanto, se a pila está crecendo se, a continuación, el generally--
Non ten que ser así. pero pode declarar int x.
Entón declarar int y.
Logo, int x será xeralmente inferior na pila do que int y.
Pero isto é só un feito.
Isto non é como unha cousa importante semente.
>> ROB: Entón a pregunta de novo foi só o que pasa cada cadro se acumula.
Así, cada función recibe un anaquiño da pila.
E como ir cara arriba, dentro dese anaquiño, dentro dese marco,
imos dicir que as variables dentro desta estrutura de mover-se tamén.
Pregunta?
>> ROB: Só estar no micrófono.
HANNAH: Ah, si.
ROB: Eu vou falar para ti.
HANNAH: Ah, si, Aceptar.
ROB: A excepción é para matrices e estruturas,
onde as matrices, un menor índice na matriz,
e en estruturas con maior campo nas estruturas
son garantir a ser en enderezos máis baixos que un valor máis tarde na matriz.
Polo tanto, aqueles son garantir.
Pero todas as variables específicas dentro, como int x e y int dentro dunha función,
non hai ningunha relación necesaria entre os enderezos.
HANNAH: Outra cuestión aquí?
Estudante: Entón, en tapón fluxo, só estourido de buffer
só aconteceu cando ter, como, atribuído
unha cantidade dunha matriz logo é maior que?
Como, pode?
Entón, se está pedindo algo do user--
>> HANNAH: Mm-hm.
Estudante: Poden eles forzosamente darlle algo de volta
que é maior que calquera cousa xa alocada para eles?
HANNAH: Por suposto, así que o cuestión era basicamente
o usuario pode darlle máis do que pedir?
Estudante: Si.
HANNAH: Ben, pode previr o usuario de facelo.
Podería dicir especificamente non facer me dar máis do que x número de bytes
Eu só lle dei espazo para un número x de bytes, x número de caracteres.
Entón, iso é algo que quere evitar.
Si?
¿Que é a diferenza entre estourido de pila e estourido de buffer?
>> HANNAH: OK, entón a pila overflow-- oh, o que
é a diferenza entre a pila estourido e estourido de buffer?
Por iso, queremos pensar de estourido de pila pasando cando estamos realmente
empilhado estas chamadas de función.
Imos dicir que ten unha función recursiva, porque sabemos que cada vez que
chamar unha función, que é fica seu propio cadro na pila.
>> Entón, nós apilar moi alto, e entón comezamos a rebosar.
E usamos moita memoria, e non teñen calquera lugar esquerda.
Recibimos este erro.
>> Buffer overflow é dentro dun programa.
Queremos non pode necesariamente falta de memoria do mesmo xeito
que pode se estamos empilhado se tantas chamadas de función,
pero escribimos pasado a memoria que sabemos que podemos usar.
E iso nos permite facer cousas malas.
Si?
>> ROB: Si, pode querer só para repetir iso,
pero tamén pode pensar dun estourido de pila
canto como un tipo específico de buffer overflow.
Ou só pensar no seu apilar como realmente un gran buffer.
Entón, cando rebosar ti empilhar, é como unha especie de buffer overflow.
Pero un estourido de pila é só un termo específico utilizado cando a pila
si reborda.
>> HANNAH: Certo, entón a repetir para o vídeo,
que pode pensar de estourido de pila como un tipo específico de buffer overflow.
Legal?
Máis algunha pregunta antes de irmos?
Impresionante.
>> OK, legal, entón imos falar algunhas mensaxes de erro comúns.
Isto é algo que ten apareceu en varios cuestionarios,
así que algo que paga a pena tomar unha segunda ollada.
Estou seguro de que atopou polo menos algúns deles
como está facendo o seu problema se pon.
Entón asegúrese de que pode falar sobre eles no quiz.
>> Así, o primeiro é un fallo de segmentación.
E iso é en calquera momento que tentan acceder a memoria
que non está autorizado a acceder.
Entón migh ver iso, por exemplo, na fuga.
Se detectar colisión volver nulo, e entón
tente facer algo que o valor nulo,
o ordenador daría un fallo de segmentación.
Entón, un, unha cousa importante a facer, a fin de tratar de evitar esta
é sempre comprobar a null.
>> Tamén pode ver declaración implícita da función.
Entón, iso é o que pasa cando Allison mostre
como podemos facer un prototipo, non?
Entón, imos dicir que temos algúns función que definimos.
Digamos cubo.
E que vai na parte inferior da nosa función, baixo principal.
>> Se esquecemos de dicir ao ordenador sobre cubo, cando principal intenta chamar cubo,
o ordenador será, como, oh meu Deus.
Eu non teño idea o que iso significa.
Non sei o que facer, aquí.
Así, o prototipo di non se preocupe.
Eu vou dicir a vostede.
>> Vai vir.
Non grite comigo.
Non me dea un implícito declaración de función.
Polo tanto, se recibe este erro, unha cousa que vai querer facer
é estar seguro de que o seu prototipo.
Ok?
>> E por último pero non menos importante, identificador non declarado
é, esencialmente, cando se trata de usar un variable que non declarou.
Entón, de súpeto, comeza dicindo como n plus plus.
E o ordenador di que é n?
Nunca me dixo n era unha cousa.
>> Entón, unha cousa que ten que ter seguro que fixo é dicir ao ordenador o que n é.
Así, por exemplo, n pode ser un número enteiro.
E entón vai evitar este erro.
Calquera dúbida sobre os erros máis comúns?
Si?
>> ALUMNO: Para o implícito declaración de función,
pode ser tamén que omitiu un das bibliotecas que debería
co fin de incluír, no canto de o prototipo?
>> HANNAH: Certo, entón o cuestión era, podería
tamén recibir este erro se esqueceuse de incluír unha biblioteca.
>> Estudante: Si.
>> HANNAH: Absolutamente, pois do mesmo xeito
que queremos poñer os nosos prototipos antes a función principal,
se temos unha biblioteca, aqueles van para incluír esencialmente os prototipos,
inclúen os axustes das funcións.
Excelente pregunta.
>> ALUMNO: Para unha segmentación fallo, tería que tamén
deberse nós, como, tratou para acceder a unha variable,
como, dun xeito diferente [inaudível] do que foi declarado en?
HANNAH: Por suposto, iso sería nós obter un fallo de segmentación
se intentamos acceder a un variable fóra do alcance?
Isto foi unha pregunta?
Estudante: Si.
HANNAH: Beautiful.
Entón, probablemente, está indo para obter un erro identificador non declarado no seu lugar.
El só vai dicir Non sei o que é.
Cool, calquera outra cousa?
Si, vale, bonito.
>> Todos destro, entón recursão.
Entón, eu mencionen algunhas veces para que puidésemos obter un estourido de pila
porque estamos chamando a nosa función recursiva tantas veces.
Estamos recibindo todos estes pila marcos, blah, blah, blah.
O que aínda é unha función recursiva?
Ben, unha función recursiva é calquera función que chama a si mesmo.
>> Algunhas cousas para estar en conta cando están implementando función recursiva,
non se esqueza de incluír un caso base.
Un caso base é a punto no que nos terminais.
Así, por exemplo, se estamos a codificación, , Dicir, Fibonacci de forma recursiva,
queremos estar seguro de que cando chegamos ao ou o primeiro número de Fibonacci 0,
estes dous números ten estes casos, porque estes non son dependentes
sobre as cousas que viñeron antes.
Aqueles teñen os seus propios valores.
>> Algúns profesionais a recursividade, que é un cuestión que xa vimos en probas anteriores.
Elas poden levar a máis conciso código, elegante.
E unha morea de funcións, unha morea de diferentes algoritmos,
realmente se prestan a recursividade.
A súa definición pode ser recursiva en si.
Entón Fibonacci é unha delas.
Factorial é unha delas.
Merge sort é um-- todo cousas que podes ollar.
OK, todas as preguntas?
Si?
>> ALUMNO: É un caso de canto semellante a un caso de base?
Ou será que, por algún outro tipo de [inaudível]?
>> HANNAH: Por suposto, así que un caso canto é tan any--
é caso canto o mesmo que no caso de base?
Un caso canto é algo que o seu código pode comportarse un pouco diferente.
Se base é unha especie de relación, nos que son como casos particulares
que quere ollar.
Pero a idea dun caso base é que quere que a súa función recursiva
para deixar en algún momento.
El non pode continuar chamando-se para sempre.
El que deixar nalgún momento.
>> ROB: Si, a miúdo, os seus casos base pode ser exemplos de bases de canto.
>> HANNAH: Correcto, legal, algo?
>> ALUMNO: Podería explicar baséase algo máis?
Non entendo moi ben [Inaudível] casos base.
>> HANNAH: Dos casos base?
>> ALUMNO: casos de Base, si.
>> HANNAH: Ah si, con certeza.
Imos ver.
Non temos giz por aquí?
Si, nós facemos.
OK, entón moi rapidamente, eu vou intento escribir o suficientemente
así podes ver na pantalla.
Imos falar, realmente rapidamente, de Fibonacci.
Entón, eu vou dar-lle a secuencia de Fibonacci.
Pode buscar a definición.
>> Esencialmente, cada número na secuencia é a suma dos dous números anteriores.
OK, entón o camiño que eu acabamos de describir Fibonacci,
podería escoitar a recursividade, non?
Cando eu dixen que cada número é a suma dos dous números anteriores,
poderiamos dicir Aceptar.
Ben, o Fibonacci enésima number-- entón imos
dicir que temos esta función chamado FIB fib-- de n
será igual a FIB de n menos 1 plus-- Sentímolo,
imos pasar á seguinte liña sobre lorota aqui-- de n menos 2.
>> OK, entón iso funciona moi ben se está mirando para, por exemplo, a cero, un,
dous, tres, catro, número quinta Fibonacci,
onde pode dicir que 5 é igual a 2 + 3.
Pero e se está no inicio?
E se está só acertando estes dous primeiros valores?
>> Para obter este 1, non se pode dicir engadir os dous anteriores,
porque que o cero correo eu non sei.
Entón, nalgún momento, precisamos parar.
Nalgún momento, necesitamos dicir que estes dous só teñen as súas propias definicións.
O número 0 Fibonacci é 0.
E o primeiro número de Fibonacci é 1.
>> Así, a forma que eu podería codificar tanto, eu diría se n é inferior a dous,
despois é só volver n.
E iso sería o meu caso base.
É así que eu sei que deixar cunha función recursiva.
Está claro?
Impresionante.
Algo sobre recursão?
Linda.
>> Imos axiña falar investigación e os tempos especie executados.
E entón eu vou dar algúns Davin tempo para falar de exemplos de codificación.
Entón, aquí están a procura principal e tipo que debes saber sobre.
Guarantee-- eu non podo asegurar, porque eu non vin o quiz--
pero iso vén se cuestionario tras proba tras deixar de fumar.
Entón, en definitiva usar este gráfico.
Tipo, este gráfico.
Pon-o na súa folla de fraude.
Vai ser unha persoa feliz.
>> Isto dinos os tempos de execución de cada destes algoritmos de ordenación e busca.
Así, procura lineal, verás run tempo, e mesmo coa procura binaria.
Ir sobre o que estes algoritmos facer, a idea xeral.
Véxanse algúns pseudocódigo, se non o propio código.
>> Vai ver que ten unha especie de burbulla superior ligado no peor caso de n ao cadrado.
Entón, se a nosa gama foi completamente atrás antes de que quería para clasificalo,
diriamos que iso é vai tomar medidas n ao cadrado.
Pero, no mellor caso, de xeito que o límite inferior para o mellor caso
será se é xa perfectamente ordenados.
Entón todo o que temos que facer é comproba que está clasificada.
Existe unha pregunta aquí?
>> ALUMNO: Cando faría quere usar tipo?
A especie.
Estou só curioso.
>> HANNAH: Cando desexa utilizar a selección tipo?
Isto un?
A que está n ao cadrado en ambos casos?
>> Estudante: [inaudível].
>> HANNAH: Entón, é moi diferente.
Se ten específico requisitos para o seu programa,
como cousas como se nós só dixo implantar un sorry-- search--
aplicar un tipo, vai probablemente vai querer ir
a un dos que ten un mellor caso de n,
ou un límite inferior no mellor caso n.
Pero pode haber certas cousas, como, por exemplo,
swaps son realmente caros, por algunha razón.
Entón desexa facer bubble sort, porque
Ten que facer tantos swaps, cousas así.
Calquera si outro--?
>> ESTUDANTE: Sería [inaudível] dicir que [inaudível]?
HANNAH: Iso é unha cousa que ía dicirlle
se está mirando para a súa implementación.
O xeito que eu sería realmente pensar por que é n
cadrado é que debemos correr a través da nosa matriz de lonxitude n,
cada vez facendo como máximo, n swaps.
E nós temos que facer este proceso n veces.
>> Entón, cando ten que facer, como máximo, n swaps e para n atravesa a matriz,
alí será n ao cadrado.
Pero si, iso será revelado a través deste dobre para loop,
como a cuestión asked-- ou nested bucle for, debo dicir.
Ok?
>> E, a continuación, merge sort, que é o tipo máis rápido agora,
ou que nós Cubrimos en CS50, sabe que o algoritmo principal é
esta idea de invadir anacos separados e, a continuación,
unindo estes bits ordenados.
E nos log n log n.
Calquera dúbida sobre investigacións e tipo antes de pasalo?
Imos ver.
>> Oh, listas ligadas.
Sentímolo, teño máis dun tema.
OK, impresionante, listas ligadas.
Problema coas matrices, eles teñen un tamaño fixo.
Entón, se non sabe como é grande súa entrada será,
non quere crear unha matriz.
Porque se creamos un matriz que é demasiado pequeno,
que pode executar en buffer overflow.
>> Entón, en vez diso, poderíamos facer algo con listas ligadas, que
permítenos ter unha dinámica estrutura de datos de tamaño
que nos permitirá almacenar unha cantidade de datos máis flexible.
Así, dentro de cada nodo na nosa lista ligada, temos dúas pezas.
Temos o valor real que almacena.
Entón, iso é só a cousa que faría ver na matriz, por exemplo.
E entón nós tamén manter o control dun punteiro para a seguinte cousa na memoria.
>> A diferenza de matrices, as cales sabemos que están todos indo
para ser-- elementos da matriz son todos un despois do outro en memory-- conectado
listas podería estar en calquera lugar da memoria.
Son lugares arbitrarios.
Entón, se fósemos realmente ir atopalos, nós
Debe manter o control do seguinte cousa na nosa lista.
>> E, a continuación, a fin de saber onde esta lista como un todo é,
todos temos que seguir é o primeiro elemento na nosa lista ligada.
E iso vai permitir seguir adiante.
>> Entón é así que pode definir un modo.
Esta é unha grande oportunidade para sacar proveito de estruturas.
Porque ten esa idea, ben, para un determinado nodo, teño dúas pezas.
Eu teño o valor real en si.
E entón eu teño un punteiro para a seguinte elemento da lista ligada.
Entón ve, temos un enteiro n, que será o valor real,
e logo, un punteiro para un nó, chamado próxima.
Así que vai ser o seguinte elemento na nosa lista ligada.
Estudante: Si?
Ten que especificar que a estrela é como un struct?
>> HANNAH: Si, así que unha vez que este É case como unha especie de,
parece unha recursiva en que definición
Debe saber o que un nó é dentro para atopar un nó.
Xa que non ten realmente sabe o que un nó é completamente
ata chegar ao final do isto-- e tras iso, podemos chamalo só
un node-- dentro desta definición, necesitamos chamalo dun nodo struct.
Excelente pregunta.
Algo máis?
Si?
>> ALUMNO: Por que nós ten que dicir nodo dúas veces?
Porque, cando estabamos na [inaudível] nós só tivemos que facelo en punto e coma,
pero agora temos que descubrir que nó struct? [Inaudível].
HANNAH: Entón, eu creo no último exemplo,
estabamos só creando calquera momento quería usar un estudante despois diso, vostede
tiven que usar struct node-- Estou sorry-- estudante struct.
Isto nos permitiu, despois do feito, só nó uso engadir un novo tipo, esencialmente.
Isto ten sentido?
Entón nós teriamos que volver e mirar o código antes.
Pero eu creo que nós non utilizamos typedef.
E a pregunta, Por que necesitamos utilizar typedef?
Typedef permítenos evitar a struct palabra ao principio.
Si?
ALUMNO: Que tipo de preguntas viría
en termos en canto a nós e listas ligadas?
>> HANNAH: Entón, unha cousa é, poderiamos dicir como quizais lle buscar unha lista ligada?
OK, porque é un pouco máis complicado
do que se está buscando a través dunha matriz.
Podemos só ollar elemento cero, elemento un, dous elemento, bla, bla,
bla.
Se queremos buscar a través dunha lista ligada,
nós realmente temos que seguir este pequeno labirinto de punteiros.
Entón, imos realmente ir por iso moi rapidamente.
Que poderiamos facer en ordenar a-- imos dicir que
quero só iterado nosa lista enteiramente conectados.
Queremos comezar na cabeza.
E, a continuación, a fin de pasar ao seguinte elemento,
no canto de só incrementando por un como se pode en pasar por unha matriz,
nós estamos indo realmente para siga o seguinte punteiro,
para que poidamos atopar onde en memoria ao seguinte elemento é.
Entón, sei que non é suficiente para levar todo isto en agora,
pero vai ter eses diapositivas.
Así, pode pasar por este un pouco máis lentamente.
Pero, esencialmente, o que queremos que facer é seguir estes punteiros
a través da totalidade da lista encadeada.
Polo tanto, esta é unha cuestión pode ser solicitado.
>> Algo a ter en conta con inserción, digamos
queriamos poñer un novo elemento na parte de diante da nosa lista ligada.
Temos que ter moito coidado sobre a orde na que nós
realocados os punteiros.
Porque imos dicir que eu só dixen Aceptar.
Fai punto cabeza a este novo elemento.
Basta facelo ligar a un Entón, temos esencialmente perdeu o resto da nosa lista,
porque eu non me lembro onde dúas vidas.
>> Entón temos que facer nun orde moi específica.
En primeiro lugar, facer o novo punto elemento para a cabeza.
E, entón, facer a cabeza apuntar para o novo elemento.
Entón imos ver o que parece con arrows-- só como aquel.
Entón, primeiro ten a nova punto elemento para a cabeza de idade.
E agora temos a cabeza apuntar ao novo primeiro elemento.
Calquera dúbida con isto?
>> OK aquí está un código novo, algo a ollar a un pouco máis tarde.
E agora vou entrega-lo para Davin para GDB e algo de práctica
codificación en papel.
Linda.
>> ROB: E Rob.
>> HANNAH: Oh, Davin e Rob.
Sinto moito.
>> ALUMNO: Woo!
>> ROB: Grazas.
>> Davin: Quere dicir todo ben rápido?
ROB: Si, si.
Davin: Xa que estou enriba.
OK, mentres coloca o Rob micrófono conectado, entón o que é GDB?
Todo o mundo debe ter visto en GDB clase e tamén no horario de oficina.
E ten que estar a usar.
Entón, cal é o GDB?
Calquera?
>> ALUMNO: É un depurador.
>> Davin: É un depurador.
E o que iso permitirá que faga?
Como, por que nos gusta GDB?
ALUMNO: Para retardar o programa.
Davin: Certo, entón podes andar por el como un ritmo humano.
E entón o que son algúns comandos que pode facer?
Ben, pausa pode ser seu mando favorito.
Por que permite romper a programa e realmente atravesala la
liña por liña.
>> Run permite que executa-o.
Logo, como entrar por.
Cal é o próximo e entre paso?
Espera, dicir isto en voz alta.
Foi correcta.
>> Estudante: [inaudível].
>> Davin: Si, impresionante.
Así como, xunto e paso, se you're-- digamos que ten unha función que
definir.
Digamos que algúns na súa función principal, e só está acertando next, next,
seguinte.
Está realmente indo a executar esta función,
pero vai ir sobre el.
Se acertar o paso, ou s ou o que quere, que é
vai realmente saltar en que a función,
e, a continuación, pode bater seguinte para ver as diferentes conexións
dentro desa función particular.
Si?
>> Estudante: Existe un xeito para ir, como, volver atrás?
Davin: Finish, si, rematar con ir para fóra.
Por iso, vai rematar esta función, e entón está
estará de volta en principal, por exemplo.
Imprimir ha imprimir lo xa.
Algo que sempre uso é display.
O display imprimir lo constantemente ao longo de todo
do seu programa.
>> Por exemplo, se está en un loop for, e
quero ver como algo está cambiando, e non quere, como, constantemente
estar facendo como impresión, impresión, impresión, display
ha amosar esta variable continuamente, cada vez que bater en Seguinte.
E continuar.
Entón GBD, iso é GDB.
>> Estudante: Cal é a única onde [inaudível]?
Davin: Que é?
>> ESTUDANTE: Cal é as-- as variables locais.
ROB: Hai algo realmente como os veciños locais ou algo así.
Eu can't--
>> Davin: Pode ser algo parecido, si.
>> HANNAH: En os veciños?
>> Davin: É iso.
Esa é a única.
ROB: Beautiful.
>> Davin: Yeah.
>> Estudante: Qué seguir facer?
>> Davin: É continues-- polo que é só seguirá os seus programas.
Entón, se romper e bater seguir, que vai
só para executar o programa, ata chega esta pausa de novo.
Así, por exemplo, se rompe nunha función,
e vai facer como por loop ou algo así,
e acertar seguir, que vai seguir e volver a ese rango.
Ou non hai ningunha ruptura, que vai seguir e rematar o programa.
>> ROB: Entón, só tes que gustar paradas executados logo o primeiro punto de interrupción
acertar, se logo hit seguir, que vai manter
indo ata que el é o seguinte punto de interrupción.
E entón continuará ao seguinte punto de interrupción.
Davin: Calquera outras preguntas sobre GDB?
Entón eu creo que, no pasado, nós pedímoslle que
GDB é e dar un exemplo de algunhas cousas que
pode facer GDB, de xeito simple real, pero si.
Alí vai.
E nós?
>> ROB: Si, así que dirección foi?
ALUMNO: Era iso.
Davin: Agarde.
ROB: Este cara?
Davin: Que un.
ROB: Este cara, oh, eu non entendín.
Polo tanto, non eran claras sobre o que as-- non
sabe quen foi-- pero a cuestión.
Non sabemos exactamente o que estaban pregunta sobre iso, entón só
para aclarar algo.
Entón, primeiro, como dixen antes, typedef está sempre usando só
crear un apelido a un tipo.
Entón, aquí, o apelido que estamos crear é para este nodo struct tipo.
>> Entón, primeiro, ignorando este nodo no typedef, de xeito que este struct nodo crespos
prepare-se para a próxima crespos Brace é o tipo de nodo struct.
E necesitamos que o nó alí enriba, porque nós
cómpre facer referencia nó aquí.
Así, con este tipo de estrutura recursiva, ten que dar este struct un nome,
ou entón non podía dicir nodo struct aquí.
Considerando que, antes con estudante cando foron escritas, eu creo,
que non teñen a dicir alumno alí enriba, porque nós
non teño que dicir struct alumno dentro da propia estrutura.
Por iso, é o recursiva que obríganos a dicir nó alí.
>> Este nodo é só o nome que estamos dando nó ao typedef.
Así que o nó non é o mesmo que o nó.
Pero ese nó struct é o aínda que o nó struct.
Davin: Entón sempre que chamar, como, nó na súa función principal,
non vai ten que dicir nodo struct.
Pode só dicir que nós, porque é un nó diferente-- é basicamente
está dicindo, Aceptar.
En vez de ter que chamar struct nó no meu código,
Eu só quero cambiar o nome como nodo para facelo máis fácil.
>> ROB: Se sempre usar typedef, entón que
é o único lugar que vai ter para declarar unha variable coa nó struct
protagonizar, si.
>> Davin: OK, entón a última parte É difícil ensinar because--
ROB: O que?
>> Davin: Por a codificación en papel.
Así, cada ano, temos código sobre cuestións de papel.
Entón eu creo que o ano pasado, 12 dos 80 puntos foron código no papel.
Ano antes, 10 de 80, ano antes diso, 20 dos 100,
polo que moi poucos destes.
Entón vai ter que ser capaz para codificar estas funcións coa man.
>> Entón eu entender que poderiamos pasar por un algúns deles para ver como as persoas fan,
tipo de camiñar por os lentamente coas persoas.
Así, en xeral, e strlen atoi foron moi popular.
O ano pasado, creo que tivemos GetPositiveInt e randomInt.
Pero pow, entón o poder, tamén un positivo tamén.
Nós só pasar por quizais un ou dous deles en conxunto.
O que a xente quere ver?
>> ALUMNO: Atoi.
Estudante: Si.
Davin: Atoi?
Estudante: [inaudível].
Davin: OK, eu vou para facelo no taboleiro.
Ten unha preferencia se fago iso aquí ou alí?
Alí, Gabe di que non.
>> ROB: E este é pensamentos xerais sobre estas cuestións de codificación.
Probe escribir algo.
Non deixalo en branco.
>> Davin: Si.
ROB: Se pode obter o tipo de retorno correcto,
ou que poderiamos dar a ti, pero se pode, como,
escribir a sinatura da función xeral, Se pode obter os casos base correcta,
ou casos de canto, ou lembrando cheque de nulo,
sempre que teña algún cousas, entón quizais nós
pode darlle un par apunta para o problema.
Non basta deixar en branco.
>> Davin: Si, e se son só completamente
perplexo coa forma como a realmente converterse código.
Se escribir pseudocódigo, iso é moi bo tamén.
Entón, é como, é unha cuestión de seis puntos, e escribir o pseudocódigo correcto,
vai ter polo menos dous puntos.
Polo tanto, non basta deixar los en branco.
Tente poñer algo.
>> ROB: El que ser o pseudocódigo correcto, con todo.
>> Davin: Si.
ROB: Entón, nós estamos xeralmente son menos tolerante con erros en pseudocódigo.
Davin: OK, entón vostedes quería ver atoi.
OK, entón só realmente-- entón o que quere facer
é que vai ser dado algún tipo de número.
Pero ese número non é será un int, non?
Que será?
>> Estudante: [inaudível].
>> Davin: Vai ser unha cadea, non?
Entón, se foi dado un string-- imos dizer--
>> ROB: Debo puxar arriba un editor?
Podo tirar up--
>> Davin: Ah, quere facelo on--
>> ROB: Prefire o consello?
>> Davin: O que quere facer?
Quero dicir, quere facelo a man?
Ou quere facelo polo ordenador?
>> ROB: Fai-o coa man.
>> Davin: [Risas]
ROB: Fai-o coa man.
>> Davin: OK, así que será atoi.
Entón, cal é ele-- Quero dicir, nós imos probablemente, dar iso a ti.
Pero que é o que vai volver?
>> ALUMNO: Int.
>> Davin: El vai volver int, non?
Assim-- Non quero facelo alí.
Vou facelo aquí.
>> ROB: Pode tirar abaixo e empuxe-se sobre ela.
>> Davin: si.
[Risas] cambio do xogo.
OK, así que será atoi int, eo que é que vai tomar?
Unha estrela char, entón só un corda, estrela s, así.
>> ROB: Estrela agradable, agradable.
Davin: Isto non pode estar alí, Aceptar.
ROB: Yeah.
Davin: OK, entón o primeiro cousa que quere que eu fazer--
Non sei se alguén mirou na práctica solutions--
pero o que vai querer facer é que está
Vai querer ter un loop, porque é
Vai querer realmente pasar por esta cadea.
Entón atenciosa-- entón imos dicir nós estamos indo a un loop,
e nós estamos indo a percorrer cada elemento da cadea.
Canto tempo é ese?
Cantas veces é que imos iterado nese loop?
ALUMNO: Sterln?
Davin: Sterln, si.
Entón, digamos que a lonxitude é igual a int sterln s.
E só curioso, por que é sempre amable de mellor de facelo do lado de fóra de loops?
Como, por que é mellor chamar esta función fóra dun loop?
Só unha rápida comprobación de sanidade?
Si?
Estudante: Entón non facer ten que manter a verificación el.
Pode só [inaudível].
>> Davin: Exactamente, entón si, o que ela dixo.
Entón, non debemos manter a verificación el.
Así, por exemplo, se eu estou chamando esta función dentro dun loop,
entón eu vou seguir chamando esa función varias veces.
E iso vai diminuír a eficiencia do seu programa.
Por iso é sempre útil declaralo la fóra.
>> ROB: Isto é dito, en calquera destes problemas,
moi ben, sempre que obter un Solución de traballo, que obtén todo o crédito.
Entón non se preocupe se o seu proxecto é absolutamente horrendo.
Pode facernos chat lectura do seu código.
Pero desde que funciona, vai conseguir os puntos.
>> Davin: Si.
OK, entón eu vou declarar algunha variable.
El só vai chamar int suma.
E eu estou indo a definir esta igual a cero, como aquel.
E iso só vai para ser un espazo reservado.
Así que será o que eu vou volver.
Entón eu vou para, finalmente, volver suma fóra deste programa.
Entón, eu teño esas dúas variables.
Teño lonxitude.
Teño suma.
E agora imos saltar ao noso cadea.
>> Entón, imos ter o noso loop for.
Entón, catro int I é igual a 0 w, mentres I é menor que a lonxitude I máis aló.
E agora-
ROB: Nice.
Davin: OK, e agora aquí vén a carne do noso código.
Entón pode realmente facer iso basicamente nunha liña.
Entón, alguén ten unha idea de que imos facer a continuación?
OK, entón iso é OK.
Entón, nós estamos facendo para dicir suma equals-- me deixe fuxir esta suma over--
é igual a suma 10 veces plus-- estamos vai levar s eu menos un
Cita 0 unha cita feito, así.
ROB: Moi intuitivo.
>> Davin: Esmagado-lo.
OK, entón someone-- eu puiden, eu puiden.
OK, entón iso vai claramente superior.
O que isto significa?
Entón, alguén sabe o que significa isto?
Todo o mundo pode ver iso?
Non, ninguén pode ver iso, OK.
Vou a--
>> ROB: Vou escribir o fórmula só aquí.
Davin: OK, Rob vai facelo no ordenador, o que é divertido.
ROB: Oh meu Deus.
Ou eu non vou.
Davin: Agarde.
ALUMNO: Eu teño unha pregunta.
Davin: Si, con certeza.
Estudante: [inaudível]?
Davin: Aceptar, polo que, en realidade, como, só, en xeral,
se fose poñer, como, nesta declaración int
I é igual á lonxitude 0 comas é igual sterln, isso--
>> Estudante: [inaudível].
>> Davin: Isto é bo, porque que--
ALUMNO: Por que aínda que empregar lonxitude?
Por que non poderiamos só [inaudível] sterln s, como se todo o tempo [inaudível]?
>> Davin: Quere dicir aquí?
>> Estudante: Si.
Davin: Por cada tempo presente para carreiras de circuíto,
que vai avaliar esta condición.
ESTUDANTE: Certo.
Davin: E se ten sterln alí, entón é
terá que realmente chamar que a función de cada vez.
Entón, en vez de só comparando-a con un int,
vai estar chamando a función e logo, comparando-a
ao valor de retorno.
Si, por iso é xusto, si.
>> Bo, OK, entón agora todos poden velo.
Que does-- dicir como, é iso.
Este é a conxestión, así aquí.
O que significa isto?
O que estou facendo?
Si, unha idea?
Si?
>> Estudante: Ben, entón cando está entrando nunha matriz,
vai estar indo de esquerda a dereita,
entón está indo a ir en decimal dende abaixo o [inaudível].
Davin: Exactamente.
Estudante: Entón, cada un ten que multiplicar
o que viu como o valor do int por o momento que comeza a se mover máis que un.
>> Davin: Perfecto, perfecto, así, por exemplo, imos
dicir que eu dei você- eu son vai escribir aquí.
Non, eu non son.
Vou escribir aquí.
Imos dicir que eu te dei 76, non?
Imos dicir que eu te dou 76.
Isto é unha cadea, para comezar, OK?
>> Así, a lonxitude é o que?
2, non?
Suma é 0.
A continuación, ir ao noso loop.
OK, a primeira iteración tanto, que é o que vai ser?
Será suma é 0.
Así resumir veces 10 0.
Isto é sen sentido.
Entón, o que iso fai?
Estudante: [inaudível].
>> Davin: El vai transformar esta caracteres nun número enteiro, non?
É unha especie de como o seu problema set-- este light--
é tipo como con problema definido para Visioneer.
Está lidando con valores ASCII.
Entón, se eu darlle, así, un sete, pero é un personaxe,
e quere saber, OK, o díxito é iso?
Si, podería, si.
Entón, o díxito é iso?
Podería restar 0 a partir del, pero ten que restar 0, o personaxe.
>> E onde algunhas persoas tropezar, son
como, OK, ben, eu teño que saber os valores ASCII para este cuestionario?
Non, definitivamente non facer Debe saber o ASCII
valores de, como, en minúsculas un, maiúsculas A, cero.
>> ROB: Non hai ningunha razón para non poñer isto na folla de fraude.
>> Davin: Definitivamente non facer perder o seu espazo con este.
Pode literally-- soa vez de dicir 48, como ata
alí, que é equivalente a dicindo un, un apóstrofo,
así, exactamente o mesmo.
>> ROB: Vostede case podería pensar niso como se-- Deus, eu teño do meu,
oops-- case se podía pensar niso como se tivésemos algo como isto de hash
definir 0 como 48.
Iso non vai funcionar.
Pero pense nisto como comiñas simples 0 comiñas simples, e para todos os personaxes.
Pense nisso como unha constante que representa o valor ASCII.
>> Davin: Si.
OK, entón a primeira vez, de forma con 76-- así na primeira vez,
este é só o carácter 7 menos o carácter 0,
e estes son sete integers-- ben, aqueles
San sete espazos de distancia uns dos outro na táboa ASCII ou o que quere.
Entón, que vai voltar un int de 7.
Entón, agora, suma igual a 7.
>> OK, ben, imos saltar neste loop novo.
OK, agora é a suma de 10 veces.
Entón está efectivamente movendo a 7 á esquerda.
Será que isto ten sentido?
Está efectivamente movelo á esquerda.
>> E entón add-- este será 6 menos 0.
Iso é 6.
Por iso, será 70 + 6.
76, que é o seu número.
Polo tanto, independentemente de que o número Eu dei a vostede, é só lentamente
indo desprazar os valores maiores á esquerda, un factor de 10
cada vez no loop for, e logo engadir, que corresponda.
>> Na parte de atrás?
ESTUDANTE: Non temos que facer verificación no programa?
>> ROB: Entón, na medida en que a comprobación vai para o programa,
queremos lle dicir moito moito o que tes que comprobar.
Se non lle din nada, a continuación, xeralmente
asumir que ten que comprobar a maioría das cousas.
Como pode, só para ser seguro, probablemente debería comprobar hey, é s null?
Entón eu non teño ningunha idea do que volver.
Pero queremos dicirlle este tipo de cousas.
0, eu non sei.
>> Davin: E por que quere para comprobar de novo se s é igual a null?
Estudante: [inaudível].
Davin: Por do char estrela.
É un punteiro.
Así, un perfectamente aceptable declaración, eu podería dicir, OK,
s é igual a cero, porque podería ser un punteiro para null.
Así, sempre que ten punteiros no seu camiño en como esta,
vostede probabelmente debería comprobar.
Porque se non comprobar se, e entón, entón vai no seu loop for,
e está doing-- fuxir cara a abaixo.
Scoot abaixo.
>> ROB: Sentímolo, é iso.
>> Davin: E así, como, é nulo, e entón
facelo, o que erro vai conseguir?
ALUMNO: Vai obter un fallo set.
Davin: Está indo a definir culpa, non, porque é
intentando índice para null.
Entón vai tentar índice na memoria que non posúe.
Polo tanto, este, se este é nula, e o fas, vai ciclo.
>> ROB: Eu tamén creo que o exame no que pedimos a esta pregunta, podemos dicirlle
que pode simplemente asumir é un número positivo.
Porque atoi tamén se espera para xestionar números negativos,
entón tería que caso especial.
Ei, é a primeira personaxe un trazo, caso en que, OK,
agora é un enteiro negativo.
Nós imos dicirlle estes tipos de cousas.
Nós imos dicirlle o que precisa para xestionar.
Davin: Si.
Entón, eu estou seguro que algunhas persoas poidan have-- se comezou a ollar para exames antigos,
viu sterln.
Isto é un popular.
E eu creo que en sterln, tiña que facer esta comprobación para nulo, o regreso
0 ou algo parecido.
Tipo, tiña que comprobar a null.
E se non o fixo, que foi punto fóra no quiz.
Sexa como sexa, fai todo o mundo sentir Aceptar con atoi?
Alguén quere pasar por riba de pezas de novo?
ROB: Oh si, eu creo que nós tamén dicirlle que
pode asumir que todo o que é-- eles están realmente entrando nun número,
que non ten que preocuparse, como, letras estar na cadea, así.
Davin: Yeah.
Si?
ALUMNO: Pode ir ao longo de máis dunha vez cando
usa comiñas dobres e comiñas simples?
>> Davin: Claro, así entre comiñas, moi simplemente, é comiñas dobres son cadeas.
Entón, se dobrar Cita calquera cousa, iso é unha cadea.
Así, como se eu tivese ese 0 aquí, e eu fixen iso, iso é unha cadea.
Isto non é un personaxe.
Entón eu non podo atopar este valor no meu ASCII gráfico, porque é unha cadea, si.
>> OK, todas as outras preguntas?
Si?
>> Estudante: Entón xa respondeu iso,
pero como, cando en realidade estamos escribindo isto no cuestionario,
quere que a xente escribe con barras ceros [inaudível]?
Davin: Non.
A cuestión era que ten que pór unha barra través dos ceros
para indicar se son ceros?
Non, nós imos descubrir iso.
Si, grazas, son bos.
OK, algo máis?
Alguén quere a-- entón eu creo que nós funcionamos algo ao longo do tempo.
Queres ver outro, ou?
ALUMNO: randomInt.
>> Davin: randomInt, OK, exactamente.
Entón imos facer randomInt.
Vou facelo por aquí.
Entón randomInt é realmente moi simple.
Creo atoi é probablemente o máis difícil unha que se require nos anos anteriores.
Estudante: [inaudível].
>> Davin: O que?
ROB: Eu estou vendo se é tipo de visible dende aquí.
Davin: É?
ROB: Eu non creo que é going-- creo vai correr cara á dereita.
Davin: OK, entón eu vou facer un agasallo.
E entón só poñelas na pantalla.
>> ROB: Todo ben.
>> Davin: Queres ser o meu escriba?
>> ROB: Yeah.
>> Davin: Nice.
OK, eu podo borrar isto?
>> Estudante: Si.
>> Davin: Isto é tan difícil.
(Cantando) Está facendo o que está facendo.
E facer o que non fai.
Todo correcto.
>> OK, se ben me lembra, en o quiz do randomInt era como,
OK, eu vou lle dar dous números, como un a e un b.
E quero que me dea un RandomInt entre eses números.
Entón randomInt vai tomar dous números de
así RandomInt-- e é vai voltar un int.
>> Entón, cal é o valor de retorno?
Eu só lle dixen.
Int, non?
Así, e entón é vai levar dous ints.
Por iso, vai levar int un e int b, así.
Entón, o que é randomInt vai facer é que vai
para volver algún valor aleatorio entre estes dous valores.
Por iso, será maior do que un, menos de b.
Entón, eu creo que probablemente pode supoñer que a é o menor dos dous valores.
Entón, se estamos lidando con aleatoriedade, que a función
vimos que dános cousas aleatorias?
ALUMNO: Drand.
Davin: Drand, exactamente.
Entón, vai probablemente quere usar o seu drand.
Entón pode dicir int chou, e nós imos só dicir que é igual a 0 momento.
E eles están, imos dicir, OK, iguais aleatorios drand 48.
E o que iso volver?
O que fai esta función lle dar?
>> ESTUDANTE: Entre 0 e 1.
>> Davin: Si, entre 0 e 1.
Entón vai ser--
>> ROB: E iso é-- creo queremos lle dicir iso.
Tipo, pode utilizar drand 48.
Podes comprobar que o exame pasado.
Pero nós probablemente diría vostede Pode usar drand 48, que
retorna un flotador entre 0 e 1.
>> Davin: Si, si, eu son seguro sobre o exame
el di que probablemente quere usar drand, si.
Entón, que vai volver algún valor entre 0 e 1.
E entón o que está Vai querer facer?
Ben, quere multiplicar por-- espera, eu creo que é así, me desculpe.
Eu só vou facer iso.
Non sei.
>> Entón b menos un.
Entón, por que b menos un?
Entón, digamos que drand lle dá de volta un OK int--, eu vou facer o resto,
por iso, unha.
Entón, o que é does-- y b menos un.
Entón, imos dicir que drand lle dá de volta o valor máximo que podería, finalmente,
darlle.
Que será?
ESTUDANTE: 1.
>> Davin: 1, non?
Entón, se isto é un, e está multiplicándose a por b menos un,
ben, iso é só o diferenza entre menos A.
E se, a continuación, engadir que de volta a un, que é o que?
É basicamente b.
Será que isto ten sentido?
>> Estudante: Si.
>> Davin: Entón, se isto é o máximo valora-lo podería ser,
que vai ser un.
E entón este é só o diferenza entre os dous.
Engadir nun, entón iso é vai volver ao acaso.
E, no caso de canto que drand lle dá de volta un,
chou só será efectivamente ser b.
Pero iso é o máximo que se pode.
Entón, se vai ser menor que que, por iso, imos dicir que é como 0,9,
así entón 0,9 veces b menos un será menos
que a diferenza entre b menos un.
>> E entón se engadir que en que un, entón este valor é
será maior que un, porque está engadindo algo para el,
pero vai ser menor que b.
Entón está indo a obter un chou número, porque está chamando drand.
E que rand, este número aleatorio é vai estar nalgún lugar entre un
e b.
Será que isto ten sentido?
>> ROB: Só poñelas números de formigón, de xeito
imos dicir que quere escoller un número aleatorio entre 7 e 10.
Entón b menos unha é a nosa gama.
Polo tanto, hai unha serie de tres números queremos escoller.
E, a continuación, multiplicando que, entre 0 e 1 1,
que, a continuación, dá-nos some-- digamos que nos dá 1,5.
>> Logo, 1,5, queremos ir 7-10.
Entón 1.5 máis 7 tráenos de volta ao noso 7-10 intervalo.
E entón nós estamos almacenando-o dentro un número enteiro, de xeito que truncados a 8 abaixo.
E entón nós só devolver iso.
Entón b menos unha é a nosa gama.
un desprázase para os números que queremos dentro dese rango.
Entón, entre 7 e 10, e entón nós pode devolver o que imos acabar con.
>> Davin: Si, bo.
>> ROB: Grazas.
>> Davin: Si, o que hai?
>> ALUMNO: Será que executa-lo a calquera tipo de Erros ASCII cando we're-- se drand é
voltar un float [inaudível].
>> ROB: Entón, así como Rob dixo: porque acaso non é un int,
así drand será un float.
Así, e logo se multiplica para fóra.
E pode obter algún tipo de números flotador.
E entón vai truncar.
>> ALUMNO: Aceptar.
Davin: Yeah.
ROB: E se o compilador foron para avisar sobre, como, perda de precisión,
só xogou un int en alí, e entón é bo.
Davin: Si?
>> ESTUDANTE: Tería o mesma probabilidade de obter,
como, b ou un [inaudível]?
>> ROB: Entón, eu estou realmente é-- wondering-- é randomInt suposto
para ser un número a partir dun a menos que b?
Como, se é entre 7 e 10, cales son as posibilidades?
7, 8 e 9, ou 7, 8, 9, 10?
Davin: Eu esquezo.
Sobre o problema set--
>> ROB: Eu creo que é 7, 8, 9.
>> Davin: Ela di especificamente que un de inclusiva e dunha exclusiva.
>> ROB: Yeah.
>> Davin: Pero eu don't-- Estou não--
>> ROB: Entón, eu creo que estes se non incluído, caso en que,
hai un xeito probabilidade de 7, 8 e 9.
Non hai ningunha probabilidade de 10.
Davin: Si?
ALUMNO: Eu teño unha pregunta.
Queremos establecer unha función retorna non un valor, senón unha matriz.
Entón cal sería o sintaxe despois volver?
>> Davin: OK, entón would-- tras o retorno?
Entón, digamos que declarara un array nalgún lugar alí enriba.
Entón tería que voltar só nome da matriz.
>> ALUMNO: OK, grazas.
Despois é só volver con a--
Davin: Oh, espera, desculpe.
A cuestión era como retornar un array.
>> ROB: Aínda que non puidese ser unha matriz declarada
na pila ou algo así.
Tería que ser algo malloced porque malloc
é como dar a volta asignación automática de memoria.
>> Davin: Si.
ROB: Como comeza en torno de ámbito local.
>> Davin: Pero faría basta voltar a súa nome--
>> Estudante: [inaudível] non é un valor, por exemplo, dous números, polo que
[Inaudível].
>> Davin: Non pode volver número múltiple.
Non pode, como, return--
>> ALUMNO: Eu falei sobre o retorno unha matriz ou algo parecido.
>> Davin: Si, entón a pregunta é Podo voltar varios valores.
Non podes voltar varios valores.
Non pode, así, volver a entón b volver ou algo parecido.
Porque despois de volver, ten volver para fóra da función.
E, a continuación, a función está feito, e como Rob dixo, está na pila.
>> Polo tanto, todo o que a memoria só queda retorno para o equipo.
Todo é esquecido, basicamente.
Entón, se quere volver múltiple valores, ten que voltar un array,
E o xeito de facelo é mallocing.
E entón volvería x así.
Basicamente, só devolver o nome.
E cando volver algo como isto, está
en realidade, non o retorno do valor.
>> Entón, digamos que almacenou os valores nunha matriz.
Non é realmente voltar estes valores.
Como, se eu volvese un int, eu son retornando realmente copias dos valores.
Pero, se eu fose para volver algo como iso,
Estou volvendo unha referencia a eses valores.
Entón, eu estou volvendo basicamente un de enderezos de memoria para os valores.
Será que isto ten sentido?
Estudante: Si.
Davin: Nice.
Si?
>> ALUMNO: Cando está usando drand aquí,
ten que poñer srand antes diso?
>> Davin: Non, non, eu non penso así.
>> ROB: Si, entón tes dicir nada sobre srand?
O nivel de vostedes nunca dicindo srand en todo é só para facer srand de null.
Entón drand no seu propio traballo.
E vai sementar automaticamente con o tempo actual, é o que usa.
Davin: Si?
ALUMNO: Vostede [inaudível] cos números?
Davin: Si, pode.
Estudante: Entón, podería dicir, como, 4 veces 2.
A cousa é, non pode asumir logo é un int catro bytes.
O only--
>> Davin: É dicir, para o quiz que poida.
[Risas]
>> ROB: Hum, non.
Davin: Si, si, pode.
Se preguntar quão grande é un int, non pode ser, como, catro ou oito.
ROB: Ah, entón se o pregunta é concreto,
como, se é un problema de codificación, ten que dicir o tamaño do int.
Se é unha táboa, ou el di cantos bytes,
non debe cubrir o tamaño enteiros.
>> ESTUDANTES: [Risas]
>> Davin: Certo, entón por que é tamaño do int importante aquí?
Así como, se nós estamos indo a 32 bits procesador ou algo parecido,
a continuación, el será catro bytes.
Pero nalgúns dos máis novos material, que podería ser o que?
Podería ser oito, non?
Entón, se só isso- código ríxido catro, logo nalgunhas máquinas, que vai funcionar.
Algunhas máquinas, que non vai funcionar.
Pero se o cuestionario que estamos como o grande é un int?
Pon catro.
ROB: Certo.
Davin: Si?
Estudante: Entón por que estamos declarando [Inaudível] dentro dunha función,
debemos poñer 3 dentro desa función?
Ou podemos usalo fóra?
Davin: Pode usalo fóra esa función.
Entón, está pedindo libre.
>> ESTUDANTE: perder o control de onde [inaudível].
>> ROB: Ah, o libre non happen-- iso forma parte da maxia do malloc
é que non está restrinxida ao ámbito local.
Ten control total sobre canto tempo as súas variables de vivir.
Entón chamamos malloc aquí, pode ser unha función completamente separado.
Pode ser de 10 horas máis tarde que finalmente chame gratis.
>> Davin: Entón, por exemplo, como unha parella semanas a partir de agora, cando finalmente
facer o dicionario ortográfico Serie de exercicios, vai
ter algunha función que crea toneladas de nodos.
Entón está mallocing toneladas de nós nesta función.
E tras unha función separada, está
Vai querer liberar todos eses nós.
Así, pode literalmente só pasar liberar un punteiro, polo tanto, un enderezo de memoria
ao que malloced.
E iso vai estar ben.
Non ten que liberar, semellantes, na mesma función.
Si?
>> Estudante: Entón un malloc variable [inaudível] aí?
É iso que está dicindo?
Davin: Agarde, dicir iso?
Sentímolo.
>> ALUMNO: Se unha variable malloc pode ser libre en calquera lugar do código,
logo eles poden acceder en calquera parte do código?
Pode perder los local?
>> Davin: Oh, ela preguntou: como, a variable, como--
>> ROB: Entón aínda que ter algún tipo de referencia
para o bloque do malloc de memoria.
Entón, aquí, estamos volvendo x.
ALUMNO: Oh.
ROB: Si non volver x aquí, e iso era só baleiro,
entón non teriamos acceso ao o punteiro que foi malloced,
e é batido memoria.
>> ALUMNO: Aceptar.
>> Davin: Así como, imos dicir que ten iso, como, aquí.
ROB: Non.
Davin: Na miña principal función, eu non podo só chamar este xe ser, como, OK,
nesta función, eu fixen iso.
>> ROB: Certo.
>> Davin: Entón eu vou chamar x en, como, principal ou algo parecido.
Non pode facelo.
Vas para voltar algo.
Pero que é o que vai volver?
Vai volver un enderezo de memoria.
E por retornar a memoria dirección, que se pode acceder noutros lugares.
Máis algunha pregunta?
Si?
>> ALUMNO: É a función anterior sendo de verificación para [inaudível]?
>> Davin: Por que non teño que facer iso?
Estudante: [inaudível].
Davin: Porque é non mallocing nada.
Por iso é não-- si, é non como un string s.
É un punteiro a algún lugar.
Estes son só valores.
ALUMNO: Aceptar.
Davin: Yeah.
Algo máis?
ROB: Si?
ALUMNO: Pero cando [inaudível]?
>> ROB: Entón, a fin de liberar o memoria, diriamos aquí.
Así, x é o noso punteiro a o bloque de memoria.
Nós liberar ese punteiro.
E nós non necesariamente facelo aquí.
Podemos facelo en calquera lugar.
Pero só chamar gratis en algo que malloc retorna.
Entón malloc, aquí, volveu o que está sendo almacenado en x.
Así, podemos chamar gratis en x.
Algunha última pregunta?
>> Davin: Algunha última pregunta?
Si?
>> ESTUDANTE: Sentímolo, pero pode volver a explicar por que ía liberar alí?
Por que [inaudível]?
>> Davin: Por aquí?
>> Estudante: Si, como despois.
Davin: Probablemente Non quero un libre aquí.
ROB: Probablemente non o faría.
Davin: Si, que isto non faría nada.
Este sería, así, crear memoria, facer cousas para el,
e, a continuación, inmediatamente esquece-lo, si.
>> ROB: Pero podemos facer, como, aquí por algún motivo.
Poderiamos dicir int estrela y é igual a matriz de retorno.
Fai algo con y, quizais imprimir o contido.
E entón, finalmente, estamos a facer.
Podemos liberar y.
Estudante: [inaudível].
Davin: Debo cambiar para abaixo?
Grazas.
ROB: Nice.
>> Davin: OK, é iso.
ROB: Todo ben, bo.
Boa sorte.
>> Davin: Se ten dúbidas, envíanos.
Boa sorte.