>> JASON HIRSCHHORN: Bienvenido a la semana cuatro, cada uno.
Tenemos una semana de mucho trabajo por delante.
El lunes de esta semana y el miércoles la semana pasada, que ha sido introducido en
punteros, y así que espero que tenga soplado su mente, pero esperemos que no
te hizo demasiado confundido.
Si es así, vamos a ir más que en sección de hoy, así como vamos
hacer punteros.
Vamos a ir a la pila, lo que lo que hemos hablado en la conferencia
ya, y vamos a hacer alusión a lo que vendrá el miércoles y más allá
en términos de gestión de la memoria.
Y, por último, vamos a hablar un poco sobre la Lengua Portable Stanford,
que es la biblioteca de ustedes son utilizando esta semana para poner en práctica el
establece problema.
>> Como he mostrado toda la semana pasada -
Quería poner esta diapositiva de nuevo, porque se trata de una lista de la
recursos que están disponibles a usted CS50.
Esto es lo que le damos fuera de la caja, y estos son increíblemente
importante para lo que el diapositiva siguiente mostrará.
Pero antes de llegar a la siguiente diapositiva, Quiero entrar en esto de nuevo.
>> Para cada conferencia, hay notas que se toman.
Es un resumen de la conferencia, pero también tiene fragmentos de código y útil
consejos y trucos.
Así que si usted desea revisar la conferencia - espero que no te perdiste la conferencia, pero
si lo has hecho, deberías rewatch - pero cuando se quiere revisar conferencia,
definitivamente echa un vistazo a los apuntes de clase.
También hay código fuente en línea de cada conferencia.
>> cs50.net/shorts son cortos, Entre 6 y 12 videos de un minuto.
Ustedes han visto a muchos de ellos.
También hay videos no asignamos a usted, pero cubren temas que son
cubierto de conferencia en este curso.
Así que si usted desea actualizar en los temas, se echa un vistazo a estos pantalones cortos.
>> study.cs50.net tiene cebadores sobre un montón de temas.
Tiene videos.
Tiene problemas de práctica.
Es un recurso fantástico.
Ven alguna pregunta, pero también interrogar a tiempo.
>> Un par de más recursos.
Existe el comando man en el terminal que le da una cierta
información sobre una determinada función o comando.
Hay Google, mi recurso favorito - uno de mis recursos favoritos.
Mi recurso favorito es el último, que vamos a llegar a en un segundo.
Hay cs50.net/discuss.
Ese es nuestro foro de clases.
Hay horas de oficina de lunes a Los jueves, de 8:00 a 11:00.
También hay horas de oficina en línea para los estudiantes de extensión.
>> Y, por último, si necesitas algo, tiene preguntas, comentarios o
preocupaciones, usted tiene mi información de contacto.
Póngase en contacto conmigo, por favor.
>> Así que como he insinuado, el próximo miércoles, un semanas a partir de mañana, es su primera
concurso, concurso de cero, ya que en la computadora ciencia empezamos a contar desde cero.
Más información será proporcionada en dar una conferencia de mañana, y una mano que se
ser publicado finalmente en línea, con más detalles específicos, en particular, la
ubicación de prueba cero.
Pero va a tener lugar el próximo miércoles en lugar de la conferencia.
No hay conferencia el próximo lunes porque es un día de fiesta.
>> La prueba incluirá todo el material desde la semana cero y la semana cinco,
por lo que a través de esta semana, a través de dar una conferencia mañana.
Material incluye las conferencias.
Material incluye secciones.
Material incluye los conjuntos de problemas, y especialmente aquellas partes que comienzan
de los boletines de problemas donde te paseabas a través de alguna información básica sobre
lo que está a punto de cubrir.
No mirar a través de los boletines de problemas.
>> Para ayudar a todos con el cuestionario, junto Lunes, a pesar de ser un día de fiesta,
el curso será el anfitrión de una sesión de revisión de todo el curso.
Video de la sesión de revisión de todo el curso será publicado en línea si
no son capaces de hacerlo.
Además, el próximo martes en la sección vamos a estar haciendo un montón de prueba
revisar y espero jugar algunos peligro también, pero vamos a
puede pasarse de responder a todas sus preguntas, pero voy a venir con
una gran cantidad de preguntas útiles y la información basada
en 10 años de pruebas.
Tengo una idea bastante buena de lo que es va a aparecer y cómo preguntas son
va a pedir, así que vamos a repasar los de la sección el próximo martes.
>> Además, yo no he puesto esta diapositiva hasta la semana pasada, pero esto es algo que
lo hizo la semana pasada.
Así es como nos acercamos mucho de los problemas de codificación que hicimos.
Quería destilar nuestro enfoque en algunos pasos simples que pueden ayudar a
que con la solución de un problema de codificación.
>> Recuerde que la semana pasada, codificamos binario búsqueda, y lo primero que hicimos
cuando queríamos código binario de búsqueda es que pensamos acerca de nuestro
encabeza cómo funcionaba.
Nosotros no sacamos una foto en la clase, pero Le pregunté a todo el mundo para ver el corto
vídeo, que no tiene una imagen representación de cómo
búsqueda binaria funcionó.
El primero y realmente queríamos hacer entender algo se haga un
foto de entender su lógica, para asegurarse de que sepamos
cómo funciona esta cosa.
>> La siguiente cosa que usted hizo en la sección La semana pasada fue que tomamos nuestra salud mental
modelo, y nos convertimos en algunos pseudocódigo.
Pseudocódigo, una vez más, la programación-como sintaxis en palabras, pero no el código C.
Ni siquiera específica para C. Nos tomamos nuestro ideas y tomó el Inglés que utilizamos
para expresarlo, y lo escribió en algún tipo de programa de modo parecido.
Así que eso es sólo la parte de la lógica.
Nos ocupamos de nuestra lógica primero.
Rompimos esta programación dura problema en dos partes, y tomamos
cuidar de la parte de la lógica de primer.
>> Y luego nos acercamos la parte de sintaxis.
Recuerde que después trazamos la pseudocódigo, escogimos partes del
pseudocódigo que sabíamos hace corresponder con elementos específicos en C. Por ejemplo,
para los bucles, si las condiciones, o una mayor o igual a los operadores.
Y finalmente, la última cosa que hicimos, la última cosa que hicimos, fue
realmente codificar este programa en C.
>> Vamos a pasar por este proceso hoy de nuevo en un tiempo relativamente grande
problema de codificación que tendrá el mayor parte de la segunda mitad de la sección,
pero yo quería poner este marco aquí para ustedes.
Es la forma en que hemos estado acercando problemas en clase, y como probablemente
usted ha estado acercando a estos problemas por su cuenta fuera de la sección.
Así que voy a dejar esto aquí, y nos referiremos de nuevo a esto cuando
estamos de codificación más tarde hoy y vaya sistemáticamente a través de los siguientes pasos.
>> Por último, la retroalimentación.
Si usted tiene alguna reacción para mí, la sitio web es en la parte superior de esta diapositiva,
sayat.me/cs50.
Dame un poco de retroalimentación.
Tengo algunos comentarios fantásticos de ustedes la semana pasada.
Dijiste que te gustaba la pseudocoding y codificación que hicimos.
También alguien me dio un enlace a un estudio que se ha demostrado que la espera
seis y cincuenta y siete segundos después de preguntar si alguien tiene preguntas es la óptima
tiempo para esperar.
Así que si usted tiene sus cronómetros a cabo, hoy voy a tratar de esperar siete
segundos después de que me pregunte si alguien tiene cualquier pregunta antes de continuar.
>> Así que antes de seguir adelante, ¿alguien tiene alguna pregunta hasta ahora?
>> Sala de control me dio siete segundos.
Bien, nadie tenía alguna pregunta, pero no dude en preguntar si lo haces.
>> En primer lugar, esta semana vamos a cubrir punteros, como ya insinuamos en el
orden del día al inicio de la clase.
Punteros que has visto en clase.
Probablemente han fundido su mente.
Eso está bien, eso es lo que han hecho con cientos de estudiantes CS50 antes que tú.
Así que en los próximos 10 a 30 minutos, van a ir a través de estos indicadores
lenta y sistemáticamente.
Si en algún momento usted tiene alguna preguntas, por favor, me pregunta.
Te garantizo que sus compañeros en esta sección y viendo en casa tienen la
mismas preguntas.
>> Vamos a hablar en general, en primer lugar, antes de que sumergirse en punteros, sobre las variables
y los datos, que hemos estado usando antes.
Además de tener estas cosas hasta en un portaobjetos, voy
llamar a cabo.
>> Como esta diapositiva dice, los datos en la memoria tiene un valor y una dirección, por lo que estamos
va a representar algo en la memoria.
Recuerde que la semana pasada, o cuando has visto matrices están elaborando, por lo general, dibujamos
como serie de cajas, así que vamos a simplemente dibujar una variable como una caja
en algún lugar de la memoria.
Este cuadro, en este ejemplo, vamos a llamarlo X, y tiene un valor.
En este caso, estamos inicializando la variable a un valor de 50.
>> También te darás cuenta de que además de sólo el valor, la variable x tiene un
ubicación en la memoria.
De hecho, como usted es probablemente un poco conscientes de, la memoria tiene un
cantidad limitada de espacios.
Sólo hay tantas cajas dentro de su equipo en el que puede almacenar cosas.
Y mejor aún, para que sepa que las cosas se almacenan, cada caja tiene un
dirección específica, un número específico donde se puede encontrar.
Al igual que todos los estudiantes de primer año tienen su dirección postal en el Centro de Ciencias,
cada caja en la memoria tiene una dirección específica.
Cuando vaya a esa dirección, que puede obtener lo que encuentra allí.
>> Yo voy a ser totalmente arbitraria con la dirección de esta variable, pero estoy
va a decir que la dirección es 123.
Ahora, no me acaba de escribir 1-2-3.
Escribí 0x123.
La parte 0x significa esto es un número hexadecimal.
Y no vamos a hablar de hexadecimal mucho hoy, pero tenga en cuenta que
cuando nos referimos a las direcciones de memoria, nos referimos a ellos en hexadecimal.
Así que cada vez que estoy hablando de un dirección, voy a poner que 0x, y eso es
Sólo digo 123 es un número hexadecimal.
Está en la base 16.
No está en la base 10.
>> ¿Alguien tiene alguna preguntas hasta ahora?
>> Perfect.
Así que esa es una variable.
Hemos visto esto antes, pero ahora estamos empezando a ir bajo el capó y ver
lo que está sucediendo realmente.
>> Así, los punteros.
Lo bueno de los punteros es que a diferencia de una variable normal que tiene
algún valor, algún entero, algunos carácter, tal vez una serie de
caracteres, si estamos hablando de un matriz, el valor que tiene un puntero es
una dirección.
Hasta en la pantalla, tenemos la int x es igual a 50 que hemos creado antes.
Yo ya he dibujado esa caja.
>> También vamos a dibujar un cuadro.
Esto va a ser - ¡oh, Dios mío.
Necesitamos un nuevo marcador.
No es mucho mejor.
>> Pero vamos a llamar a este cuadro - esto se llama la variable puntero.
Pointer también tiene una dirección.
Está en una dirección diferente.
Es una variable diferente.
No va a estar en la parte superior de la primera.
No se puede tomar puso dos cosas dentro de un buzón de correo.
No se puede sobrescribir el inicial uno, por lo que vamos a
dirección diferente aquí.
Vamos a darle la dirección 456.
Pero el valor del puntero va a ser un dirección, y en este caso, se va
ser abordado de la variable x.
Así puntero dentro, estamos almacenando la dirección 123.
>> Y la sintaxis que utilizo para escribirlo - estamos va a ir sobre la sintaxis de una
segundo, pero sabe que la sintaxis de este diapositiva es la sintaxis que usaría
para establecer esta situación hasta -
antes de llegar a la sintaxis, sin embargo, me quiero dejar claro a todo el mundo y
asegúrese de que todo el mundo entiende que punteros a diferencia de las variables
tener una dirección como su valor, no es un entero o un char.
>> Hasta aquí todo bien?
>> Generalmente también, cuando estamos dibujando estos cosas, no sólo voy a
señalar a la dirección aquí.
Me voy a tomar una flecha de este caja a la otra variable que es
que apunta a dar la sensación de que si yo fuera a mirar en la dirección 123, si
Yo fuera a utilizar este puntero de encontrar lo que está señalando, me gustaría tener
esta caja aquí.
Me gustaría conseguir el número 50.
>> Sí, la pregunta?
>> ESTUDIANTE: Si el puntero almacena una dirección, entonces, ¿cómo elegimos matrices, e INT
estrella, o como un char estrella, o lo que sea?
>> JASON HIRSCHHORN: ¿Puede usted repetir la parte media?
Te perdí.
>> ESTUDIANTE: ¿Cómo se elige arrays, como una estrella o una estrella int char, o
lo que sea, si siempre almacena una dirección?
>> JASON HIRSCHHORN: Buena pregunta.
¿Cómo elegimos lo que en realidad es señalando si se
siempre almacena una dirección?
Si en vez de derecho escrito int estrellas aquí, escribí estrella char, sería
señalando -
eso es lo que escribiríamos si queríamos que apunte a un personaje.
Profundo, profundo de los unos y ceros mundo, que int, que char, no
realmente importa.
Pero en términos de C, no quiero que ser muy específico en términos de la
tipo de cosa que usted está señalando.
En el nivel en el que estamos programando, vamos a escribir la
tipo de cosas que estamos a punto de a pesar de que siempre es un
abordar dentro de esta caja.
¿Usted tiene una pregunta?
Aceptar.
>> Ahora vamos a mirar una sintaxis para los punteros.
La primera línea en esta diapositiva -
int estrella, espacio, puntero -
inicializa y genera -
no inicializa, más bien.
No establezca su valor a nada, pero crea este puntero.
Así que en términos de mi diagrama -
vamos a ir a este lado -
esa primera línea, int estrellas puntero, crea un cuadro.
Este cuadro es la variable puntero, y está en una dirección.
Vamos a darle una diferente dirección, 999.
>> Eso es todo lo que hace la línea.
Hemos visto esto antes.
Eso es como cualquier momento, si yo tuviera que acaba escribir int x allí, lo haría
exactamente lo mismo, crear una caja llamada x.
En este caso, estamos dando que un tipo diferente.
Así que no va a ser un int.
Va a ser un int estrella, y por lo que este cuadro es un poco
diferente que si fuera simplemente ser un char, por ejemplo.
>> Debido caracteres, memoria, son sólo un byte en la memoria.
Los punteros son cuatro bytes.
Así que este cuadro se verá un poco diferente si escribimos int estrellas como
oposición a la charla.
Pero aparte de eso, estamos creando un caja, y es en una dirección específica.
Eso es todo lo que la primera línea hace.
>> La segunda línea de código, int x es igual a 50, de nuevo crea otro cuadro de x en una
diferente ubicación.
Le daremos la dislocación 111.
Y esto es en realidad inicializando el puntero además de
la creación de la caja.
Estamos poniendo un 50 dentro de esta caja.
>> La tercera línea de código, puntero es igual a la dirección x.
Eso significa que los operadores de direcciones una cosa muy específica.
Siempre ponemos el signo delante de un nombre de variable, estamos diciendo dar
me la dirección de esa variable.
Así que cuando escribo signo x, eso es diciendo dame la dirección de x, en
este caso, 111.
>> ¿Sí?
>> ESTUDIANTE: ¿Sería aceptable si pasar a conocer la dirección de este
particular, la variable sólo decir puntero es igual 0x111?
>> JASON HIRSCHHORN: Así que si usted sabía que esto fue en el 111, se puede escribir
puntero x es igual a esta hexadecimal número, pero no puedo ver un camino que
sabría nunca lo que es, de manera que es por qué usamos esta sintaxis.
Pero, de nuevo, de que signo x, signo está diciendo dame la dirección de este
variables, y al igual que cualquier igualdad signo no, eso es el almacenamiento que
valor dentro de puntero.
>> Así que cada vez que vea que signo, creo que esto me está dando la dirección de
esta cosa.
Ampersand x me está dando la Dirección de esta caja de x.
Una vez más, si lo hiciéramos puntero signo, lo puedo obtener?
>> ESTUDIANTE: Dirección del puntero.
>> JASON HIRSCHHORN: La dirección del puntero.
Específicamente, ¿qué?
>> ESTUDIANTE: 0x999.
>> JASON HIRSCHHORN: 999.
Puntero Ampersand daría me 999 en este caso.
Ampersand frente a cualquier variable que da la
dirección de esa variable.
Por supuesto, realmente no me importa la dirección de este puntero.
Me importa mucho más sobre el dirección de esta variable.
>> Finalmente, el último símbolo que vamos para ver en realidad es el mismo símbolo,
que asterisco.
Pero en esta última línea, es utilizado un poco diferente.
Observe cómo en esta última línea está al lado de la variable.
Como antes de que fuera al lado del tipo, se fue parte de este tipo, estamos creando
este puntero tipo entero, ahora la estrella significa algo
un poco diferente.
Significa ir a tratar el valor -
int puntero -
tratar el valor de esta variable como una dirección, vaya a esa dirección, y
dame ese valor.
>> Así que significa que la estrella, de nuevo, trate la valor y el puntero como una dirección, vaya a
esa dirección, y devolverá ese valor.
En este caso, ese valor es 50, por lo que esta línea printf 50.
¿Sí?
>> ESTUDIANTE: Entonces, si tratamos de hacerlo en algo que no fue declarado como un
puntero, como en x, y el valor es de 50, habría que tratar de ir para hacer frente a 50,
o sería sólo nos dan un error?
>> JASON HIRSCHHORN: Si lo hiciéramos estrella x, y trató a printf que, lo que el
compilador hacer, o lo que el programa lo haría cuando se estaba ejecutando, es
trataría 50 como una dirección y vaya a abordar el número 50 en su programa.
Generalmente, cuando vas a estos direcciones al azar, no se van a
ir a una dirección donde algo es agradable allí.
Vas a ir a una muy mala dirección que no se supone que vaya
a, y su programa se va a estrellar.
>> Así que sí, tienes toda la razón.
Haría exactamente lo mismo, pero cuando tratamos de ir a las direcciones que nos
no hayan solicitado o no tener declarada, o que son simplemente al azar
direcciones, casi siempre ponemos en problemas y nuestros errores en el programa.
>> ¿Eso responde a su pregunta?
>> ESTUDIANTE: Sí, supongo Tengo otro.
Así que si tienes frío hacer eso y sería ir a esa dirección, ¿cuál es el
punto de declarar un puntero como un puntero si pudiéramos decir un puntero
igual cosa ampersand?
Y entonces sería como una significativa dirección, y podíamos ir allí, ¿verdad?
>> JASON HIRSCHHORN: ¿Puede usted repetir la pregunta?
>> ESTUDIANTE: ¿Por qué tenemos que declarar la puntero como un int estrella si lo haría
trabajar sólo declararemos como como un int regular, debido a que aún lo haría
tener una cosa que podría ser entonces dereferenced, ¿verdad?
>> JASON HIRSCHHORN: ¿Por qué estamos declarándolo como un int estrellas en vez
que al igual que un entero y ahorro de este número en ella?
>> ESTUDIANTE: Sí.
>> JASON HIRSCHHORN: Porque cuando usamos las cosas -
gran pregunta -
cuando usamos las cosas, cada vez que estamos usando un puntero y vamos a
tratar algo como punteros, otros van las cosas en que yo no voy
ir a ahora que ayuda si el programa sabe que
esta cosa es un puntero.
Se tratará de manera diferente en algunos otras maneras en que es irrelevante para nosotros,
pero vamos a utilizarlo como un puntero, debemos decir que vamos a
estar usando esto como un puntero.
>> Así que es básicamente cómo funcionan los punteros.
No es mucho más complicado de lo que eso, pero por desgracia, se convierte en un
cuando mucho más complicado lo ponemos en práctica.
>> A continuación, vamos a hacer algo bastante grande.
En lugar de simplemente tirar un par de líneas de código en línea, me pongo un 4, 5,
6, 7, 8 9, 10 líneas de código.
Y en lugar de la codificación de estos fuera de su ordenador o ejecutar este programa
en el equipo, quiero que saques una hoja de papel y un lápiz o un
pluma, y ​​averiguar lo que cada uno de las líneas de estos códigos hacen.
Comience con la columna de la izquierda, trabajando desde arriba a abajo, que inicializa
hay una gran cantidad de estas variables, y y luego ir a través de cada línea de código en
la columna y la figura de la derecha lo que sucede.
Voy a dar a todo el mundo tres minutos para comenzar por su cuenta, y luego vamos a
pasa este como un grupo.
>> Vamos a empezar yendo sobre esto como un grupo.
Está bien si no ha terminado.
Voy a comenzar con la mano izquierda lado de la columna, y luego me voy
invitar a ustedes aquí, los valientes que entre ustedes aquí, para ejecutar
una línea de código en el lado derecho la columna y, a continuación, vamos a trabajar
nuestro camino a través.
>> Así que en primer lugar, que la primera línea de código, int x es igual a 2 coma y es igual a 8 coma z
es igual a 12, crea tres variables.
Lo hice todo en una sola línea.
Esa es una sintaxis muy útil para crear múltiples cosas del
mismo tipo en una línea.
>> Así que tenemos tres cajas.
¿Todos pueden ver a los tres, o es que es demasiado baja?
Aceptar.
>> Tenemos x, y, z.
Y en x, obtenemos 2.
In y, obtenemos 8.
y en z, obtenemos 12.
Bastante estándar hasta ahora.
>> Siguiente estamos creando otro caja, otra variable.
Se trata de un puntero de int.
Se llama puntero x.
Vamos a dibujar que aquí.
>> ¿Y qué estamos almacenando dentro puntero x?
>> ESTUDIANTE: La dirección de x.
>> JASON HIRSCHHORN: la dirección de x.
En este caso, no sé la dirección de x.
Podría ser cualquier cosa, pero yo voy a hacer algo ahora para que sea
más fácil para nosotros.
Pondremos x en 111.
Así que ahora se pone 0x111, y vamos a dar un agradable flecha para significar
está apuntando a x.
>> Del mismo modo, tengo puntero y y z puntero.
Consiguen valores.
Le daremos a esta 0x222, 0x333.
>> Esa es nuestra configuración inicial en el lado izquierdo de la columna.
Hemos creado tres enteros y hemos creado tres punteros.
Dentro de cada indicador, ahorramos la dirección de uno de los tres inicial
las variables que hemos creado.
>> Ahora, en el lado derecho de la columna, estamos usando ese asterisco
símbolo en un número de maneras diferentes, no todos los cuales son para utilizarlo para
eliminar la referencia de algo o de ir a una dirección específica y
devolver el valor allí.
>> ¿Puede alguien decirme cuál es el primera línea de código hace?
Alguien levantar la mano que aún no ha hablado.
Usted?
>> ESTUDIANTE: Establecer z a 16.
>> JASON HIRSCHHORN: Está ambientada z a 16.
Así que z es igual a x por y.
En ese caso, es sólo la multiplicación que estamos haciendo.
Así que z es igual a x por y, 2 veces 8 es 16.
Perfect.
Así que vamos a actualizar esto.
Z = 16.
>> Esa segunda línea de código x espacio estrellas es igual a espacio y.
¿Qué hace esa línea de código?
Jeff.
>> ESTUDIANTE: x es igual a x veces y?
>> JASON HIRSCHHORN: Exactamente.
Esa es la notación abreviada para x es igual a x por y.
Usted probablemente ha visto las cosas como x más iguales y?
Eso es x es igual ax más y.
En este caso, estamos haciendo algo un poco diferente, x es igual a x por y.
>> Entonces, ¿qué necesito para actualizar esta lista?
>> ESTUDIANTE: x es 16.
>> JASON HIRSCHHORN: x es 16.
>> Cambios en el color verde son los que que hemos hecho hasta ahora.
A continuación, tenemos y igual estrellas puntero x.
¿Puede alguien caminar a través de lo que esta línea de código hace?
¿Qué hace esta línea de código?
Caminar a través de mí desde el principio.
>> ESTUDIANTE: Se necesita lo que sea puntero x es señalando, el valor que se está
señalado por que, y lo almacena en y.
>> JASON HIRSCHHORN: Excelente.
Voy a repetir eso de nuevo.
Usted hizo un trabajo fantástico, pero por lo que podemos enfatizarlo, esa estrella significa tratar
la cosa en esa variable como una dirección e ir a ella.
Por lo tanto, el tratamiento de la cosa en puntero x como un dirección, vaya a ella, tomar ese valor
16, y luego sólo estamos ahorrando en la variable y.
Así que ahora y se sobrescribe, y es ahora de 16.
>> La siguiente línea de código, indicador de la estrella subrayar x es igual a x por y.
¿Qué hace esa línea de código?
De nuevo, si usted es un poco perdido aquí, evaluarla de derecha a izquierda.
Así Mondo, lo que hace la derecha parte de eso?
>> ESTUDIANTE: El lado derecho justo multiplica lo que está en el
cuadro es xe y.
>> JASON HIRSCHHORN: Y eso es 16 y 16, por lo que es eso igual?
>> ESTUDIANTE: 256.
>> JASON HIRSCHHORN: 256.
¿Y dónde estamos ahorrando 256?
>> ESTUDIANTE: Usted está ahorrando en lo que sea puntero x hace referencia,
que es el cuadro de x.
Así que ahora se convierte en x 256.
>> JASON HIRSCHHORN: Así que la estrella, de nuevo, significa ir a.
Vamos a lo que el puntero X está apuntando a.
Se apunta a x, y hay estamos ahorrando el valor 256.
>> ¿Una pregunta sobre que uno específico?
No hemos visto a la estrella utilizada en a mano izquierda, sin embargo, de
un operador de asignación.
>> Así que esa es la cuarta línea de código.
La quinta línea de código, puede alguien que no ha hablado todavía me dan la
quinta línea de código, o caminar a través de ella conmigo?
Annie, ¿qué hace?
>> ESTUDIANTE: Cambie el valor del puntero x para el valor de puntero y.
>> JASON HIRSCHHORN: Eso es exactamente correcto.
El valor de puntero y es esta dirección aquí, y estamos almacenando que en
el puntero variable x.
Así que esto se convierte en 222.
Y me voy a mover la flecha, también, para indicar que ahora
tiene una dirección diferente.
>> Así que ahora puntero subrayado x y el puntero de subrayado y
tener el mismo valor.
Eso es lo que hace esa línea.
Así que, esencialmente, son tanto que apunta a y.
Si sólo teníamos nuestros punteros, y nosotros realmente no sabíamos las variables, se
habría perdido x.
Pero, por suerte, hemos salvado x en esta función, por lo que todavía
saber donde x es.
Pero vamos a ver ese problema viene más adelante, que si perdemos un puntero a
algo, no podríamos saber realmente donde es o ser capaz de recuperarlo.
Pero eso es para el futuro.
Así que por ahora, eso es toda la razón, Annie.
>> Y, por último, que la última línea de código.
¿Puede alguien darme lo que el última línea de código hace?
¿Sí?
>> ESTUDIANTE: Se multiplica lo que está en puntero y, por lo que 16 veces 16 -
>> JASON HIRSCHHORN: 16 es no en el puntero y.
>> Estudiante: Bueno, va a esa dirección, lo encuentra, y luego se multiplica
que por lo mismo - lo hace el lo mismo con el puntero de z, se multiplica
los valores y la almacena en x.
>> JASON HIRSCHHORN: Exactamente.
Entonces, ¿qué tengo que actualizar?
¿Cuál debe ser x?
>> ESTUDIANTE: La parte superior izquierda, 256.
>> JASON HIRSCHHORN: ¿Y qué Cómo puedo cambiar a?
Lo sentimos, pero vamos a ir hacia arriba.
>> ESTUDIANTE: Se debe seguir siendo el mismo.
>> JASON HIRSCHHORN: Sí, en realidad todavía es igual a 256.
Pero eso es exactamente correcto.
Vamos a descomponerlo.
Vamos a ver aquí, esto en paréntesis, indicador de la estrella y, que
trata a lo que hay en el puntero y como una dirección, va a ese
dirección, toma la 16.
Así que ahora tenemos un 16, y estamos multiplicando por el que
lo mismo en z.
El ir a esa dirección, tomando un 16.
16 veces 16 es 256, y estamos almacenando que dentro de x. x ya pasa a
igual 256, así que no estamos va a hacer el cambio.
>> Usted no tiene este archivo en este momento, pero en el código fuente de este
sección que se publicará en línea en cs50.net/sections, he escrito todo
de esto, exactamente lo que hicimos.
Y de hecho incluido alguna otra información aquí, que estamos
va a pasar en un segundo.
>> Hacemos estas operaciones, como se puede ver aquí mismo y, a continuación, imprima la
valor resultante de la variable específica que ha sido cambiado.
Ya se ha escrito este código.
Voy a ejecutar este código.
>> Y ahora vamos a caminar a través de la salida.
Vamos a empezar por el principio.
El valor de x es igual a 2.
Eso debería tener sentido.
Eso fue lo que inicialmente inicializado a.
>> Dirección de x es esta locura.
Una vez más, vemos, sin embargo, a pesar de que parece un poco loco al primero
inspección, vemos que 0x allí.
Este es un número hexadecimal.
>> Y luego vemos todos estas cosas locas.
Hay una b y una f, y también una c en ese país.
Ninguno de los que son normales cero a nueve dígitos, pero debido a hexadecimal
es base 16, que realmente necesita un par de otros símbolos para
representar cada dígito.
Así que de nuevo, no vamos a hablar de hexadecimal demasiado, pero sabe
que cuando estás escribiendo hexadecimal números, verás algo de cero
a través de 9 cosas más a partir de una F a través de.
Así que, aunque no todos son cero a través de nueve números, este es un
número, esta es una dirección.
Y podría ser expresada en base 10 si queríamos.
>> El valor de puntero de x aquí es También un número hexadecimal, y lo que es
Es el mismo de?
¿Qué es este número el mismo que?
>> Dirección de x, ¿verdad?
La línea derecha por encima de él, esos dos direcciones son idénticas, y eso es
lo que esperamos.
La dirección de x es el valor del puntero a x.
>> A continuación, tenemos la dirección de puntero x, y que es,
de nuevo, algunos de números aleatorios.
Si vamos a inspeccionarlo, notamos que comparte una gran parte del
mismos números que los otros.
Es diferente, pero comparte una gran cantidad de los mismos números.
Se acuerden hablando de búfer errores de desbordamiento?
Cuando usted puede escribir sobre las cosas que son Cerca de ti en la memoria, si vas
más allá de los límites de una matriz.
Una vez más, no vamos a hablar de que en este momento, pero para aquellos de ustedes
curioso, estas cosas son en realidad bastante cerca uno del otro.
Estas cajas están muy cerca el uno al otro en la memoria.
>> Y, por último, puntero x puntos a la valor, y por supuesto, es 2.
Hice esa estrella.
Seguimos la dirección de puntero x inicialmente, y
devuelto un valor de x.
>> Por último, vemos exactamente lo que acabamos de hacer.
Primera z es 16, entonces x es 16, entonces y es 16.
x eventualmente se convierte en 256 aquí.
Y de nuevo, x no se cambia por esa última línea de código.
Sigue siendo un 256.
>> Si desea repetir esto por su cuenta una vez más, o ir a través de él, o
cambiar algunos de estos valores, me he ya se ha escrito el código.
Usted puede hacer los cambios en el código y ver cómo esos cambios realmente
jugar en la vida real.
>> Antes de continuar con los punteros, lo hace Alguien tiene alguna pregunta?
>> Aceptar.
¿Todos pueden tener un lado, y lo puso en el aire, y -
cierra los ojos -
pon tu mano derecha en el aire como un puño, y me da un pulgar arriba, pulgar
abajo, pulgares medio, lo cómodo estás con punteros hasta ahora.
Cierra los ojos.
>> Aceptar.
Usted puede poner sus manos hacia abajo y abre los ojos.
Gracias.
>> Vamos a seguir adelante.
Vamos a seguir hablando de punteros, pero vamos a hablar
sobre ellos en un poco de un contexto diferente.
Vamos a hablar de arrays y punteros.
Y recuerda que la semana pasada Soplé sus mentes?
Cerebro de alguien, se fueron aquí en el suelo.
Yo estaba bastante seguro sopló la mente de esa persona.
Esa fue una mala broma.
>> [Risas]
>> JASON HIRSCHHORN: Voy a trabajar en eso.
Pero de todos modos, las cadenas que encontramos fuera eran arrays.
Las matrices son realmente punteros.
>> ¿Qué quiero decir con eso?
Bueno, si creamos una serie de seis personajes, que esta línea de código
hace aquí -
char, arreglo, soporte abierto, seis, cerca soporte, punto y coma - de nuevo, crea un
serie de seis caracteres.
Llenarlo.
>> Tengo una foto de ella aquí.
Estas cajas, vemos que la empapó con algunos personajes y la nula
terminador en el extremo.
Y abajo, aquí es donde me gustaría a dirigir su atención.
La primera caja -
que hemos hecho esto antes.
De hecho, hemos hecho esto en cada conjunto de problemas.
Puede referirse a la primera caja en esta matriz como soporte de matriz cero.
Lo hemos hecho un millón de veces.
>> Puedo referir realmente a la mismo cuadro de otra manera.
Puedo referirme a ella como variedad estrella.
Debido a la matriz, si fuéramos realmente imprimir lo que es igual a la matriz, la matriz es
una dirección, y es una dirección de el primer cuadro de esta matriz.
Para que el operador estrellas trata lo que es almacenada en el arreglo como una dirección, va a
esa dirección, y regresa el valor allí.
Array estrella volverá f igual soporte de matriz cero devuelve f.
>> Una vez más, todos los lugares que hemos estado escribiendo cero soporte matriz, array estrella haría
han hecho exactamente lo mismo.
De hecho, el soporte de matriz cero es sólo nuestra capa de azúcar de
lo que realmente ocurrió.
Es realmente variedad estrella es la más forma correcta, si no es correcta
manera, pensar en lo que es sucediendo realmente.
>> Así que eso es todo bien y bueno, pero aquí es donde se pone fantástico.
Vamos al segundo carácter aquí, este cero.
En caso de ser un O, pero vamos a darle un cero.
Estamos referimos a que, antes, la segundo cuadro en una matriz, como un array
soporte de uno cada vez que nos hemos iterado a través de una matriz.
>> Hay otra manera de referirse a él, y eso es abajo.
Esa estrella, paren abiertas, array más 1, paren cerrado.
Así que debido a las matrices se colocan - estos cajas están uno al lado del otro
en la memoria -
array estrella va a la primera.
Así que si vamos a tomar matriz que dirección, añadir 1 a la misma, y ​​luego ir a
que la nueva dirección, que va ser lo correcto al lado
la dirección original.
>> ¿Sí?
>> ESTUDIANTE: Entonces, si array era, en lugar de siendo caracteres, sería enteros, a continuación,
habría que incrementar por 4 cada vez?
>> JASON HIRSCHHORN: eso es una gran pregunta.
Permítanme llamar algo primero, entonces estoy va a responder a su pregunta.
>> Para dibujar esta en la pantalla realmente rápidamente antes de llegar a su
pregunta, tenemos nuestra matriz -
y se va, pero yo sólo voy a centrarse en el primer par de unos.
En la memoria, hay una caja que creamos cuando nos
inicializado esta matriz.
Esta es la variable de la matriz, y es una dirección.
Es, de hecho, la dirección de la Lo primero, la primera casilla.
Así que este cuadro está en alguna parte.
Estas seis cajas están en otra parte.
>> Cuando hacemos el soporte de matriz cero, estamos va a conseguir lo primero aquí.
Y cuando lo hacemos variedad estrella, vamos para conseguir exactamente lo mismo, el valor
esa matriz está señalando.
>> Cuando hacemos matriz soporte 1, vamos para obtener el segundo cuadro, sino también,
porque el puntero está fuera de los paréntesis, primero vamos a añadir
1 a esta dirección, y luego nos vamos seguir ese y nos la dará
segunda casilla.
Y así sucesivamente y así sucesivamente.
>> Matriz más 2 va a añadir 2 del presente abordar aquí, porque una vez más, las direcciones
están representados sólo números como hexadecimal, a menudo.
Así que añadir 2 a la misma, y ​​para continuar, a la tercera caja, que pasa a ser, como usted
puede ver, dos espacios de distancia en el primer cuadro.
>> Con suerte, eso lo hizo menos confuso en lugar de más confuso.
Pero, ¿que hacen que sea más confuso?
Una vez más, voy a llegar a su pregunta en un segundo.
¿Eso es más confuso para nadie, o ¿alguien tiene alguna
preguntas acerca de esta idea de matrices como punteros?
>> Fantástico.
También sería fantástico si tuviera preguntas.
Pero pasar a su pregunta.
>> La pregunta era enteros en la memoria tomar hasta cuatro bytes, por lo que cuatro cajas.
Si pensamos en una cajas como un byte, enteros ocupan cuatro cajas.
>> Así que dicen que estos son números enteros ahora.
Este es un arreglo int aquí.
Voy a hacer un poco de direcciones aleatorias.
Así que si se trataba de un arreglo int, el primero podría ser un 10.
El próximo uno cuatro cajas más porque enteros son cuatro cajas grandes.
Hay esté 10, 11, 12, 13, por lo que éste sería un 14.
Éste sería un 18.
Éste sería un 22, y así sucesivamente.
>> Así que de nuevo, son caracteres de un byte.
Están justo al lado del otro, por lo que este mapa hablábamos
antes de que funciona perfectamente.
>> Pero usted acaba de traer para arriba el caso de enteros.
Bueno, si he añadido 1 de la presente, se iría a 11.
Sería en el medio de esta int si he seguido realmente
específicamente por el estilo.
En realidad estaba cuadro iba por la caja en la memoria.
>> Lo bueno de este tipo de aritmética de punteros es el programa es
lo suficientemente inteligente como para saber lo que quieres decir.
Cuando usted está agregando 1 a una memoria dirección que apunta a un
número entero, no es en realidad va añadir una manzana.
Se va a añadir cuatro cuadras.
Se va a escalar ese número para que usted compre el tamaño.
>> Y esto se remonta a la pregunta de Curtis, ¿por qué hacemos int estrellas en vez
de estrellas Char?
¿Era eso a tu pregunta?
Alguien le preguntó que antes, ¿no?
Por qué lo hacemos int estrellas en vez de carbón estrella, si se va a tratar no
importa qué?
Y eso es para que nos ayude con este tipo de aritmética de punteros.
Si declaramos algo como una estrella de carbón pero que realmente va a través de
enteros, cuando añadimos 1, sólo se mover una caja en lugar de la
cuatro que lógicamente esperamos que se mueva otra vez.
>> Así que de nuevo, en la aritmética de punteros, cuando estamos tratando a estas cosas como
direcciones, a continuación, añadiendo o restando a ellos y luego siguiendo a
averiguar lo que está pasando en la memoria, el número le sumamos a ellos se redujo
por el tamaño del tipo de cosas están señalando.
>> Así que si están apuntando a un entero -
Sé que me repito -
pero si son un número entero, que está en realidad va a pasar cuatro
cajas más cada vez.
Si son un char, eres va a mover una caja.
Si son mucho, mucho, que es de ocho bytes, usted va a mover
ocho cajas más.
Cualquiera que sea el tamaño de la tipo de datos, ¿quién sabe?
Realmente no importa para nuestros propósitos.
Todo lo que tenemos que saber es, en realidad, esta matemática aquí, sólo añadir 1
a nosotros llegar a la segunda casilla con independencia de qué tipo de cosa es en
que la segunda caja.
>> Espero que haya algún tipo de preguntas aquí, porque era mucho, y yo
no podría haber hecho una perfecta trabajo en explicar eso.
¿En serio?
No hay preguntas?
Para el público en su casa - ahí vamos.
>> ESTUDIANTE: Si se va a realizar una serie en una función, y usted quiere que
devolver esa matriz a otra cosa, ¿cómo devolverlo?
>> JASON HIRSCHHORN: Excelente pregunta.
Así que si quería hacer una matriz en una función y, a continuación, devolver esa matriz -
así que vamos a decir vamos a hacer una serie en una función llamada por el principal.
Main llama esta función, y esto función crea la matriz, entonces
la devuelve al principal.
>> Ahora que hemos visto algo similar a esto antes.
¿Dónde hemos visto algo similar donde principal crea la matriz, y luego
la función que manipula dicha información?
¿Qué hemos escrito antes eso se hace eso?
>> ESTUDIANTE: Clasificación?
>> JASON HIRSCHHORN: Clasificación ha hecho eso.
Juego de 15 también ha hecho eso.
En la clasificación, pasamos de la matriz, la pajar, y luego nos lo arreglaron por
destructivamente actualización diferente partes en esa matriz.
Así que tomamos nuestra matriz original - recuerde, uno de los parámetros a la
función de clasificación fue array -
>> ESTUDIANTE: ¿No es eso una matriz global?
>> JASON HIRSCHHORN: Así es.
Sí, vamos a volver allí.
Pero si hubiera sido creada en -
¿fue un mundial, o fue creado en la función?
Echemos un vistazo.
Podemos responder a eso.
>> Parece que no es un array global.
Se ha creado aquí mismo en esta línea una matriz de enteros, y entonces es
pasado a nuestra función de clasificación.
Así que no es un arreglo global.
Se creó en principal, aprobada a nuestra función de clasificación.
Nuestra función de clasificación destructivamente lo actualiza, y lo devuelve.
Como podemos ver hacia arriba, más o menos -
oh, Dios mío, lo siento.
>> ESTUDIANTE: Ordenar simplemente devuelve si o no la encuentra?
>> JASON HIRSCHHORN: Así es.
Lo siento.
Ordenar realidad - vamos a abrir eso.
Ordenar es nula.
Ordenar no devuelve nada porque actualiza especie destructiva de la matriz,
la matriz original.
>> Así que eso es lo que hemos visto antes, pero su pregunta era ¿qué pasa si una especie
en realidad crea la matriz?
>> ESTUDIANTE: Consulte devuelve la actualización array, o algo así.
>> JASON HIRSCHHORN: Otra cosa que se podría haber hecho fue principal llamado
la función.
Trabajo de esa función es la de crear un gama de algo, una serie de
enteros, y luego regresan que array es creado a principal.
>> Así como hemos visto antes al hablar alrededor de la pila, lo que vamos a
hablar un poco más tarde hoy, una vez al devuelve la función, todo lo que era
creado en esa función, todos sus variables locales, desaparecen.
Hemos visto que la idea del alcance antes.
Es por eso que hemos creado mundial variables que en algún momento, para escapar de esta
problema de las cosas va a desaparecer cuando sus funciones devuelven.
>> Lo que se puede hacer en ese caso es la función sería crear la matriz no como
una variable local en la pila.
Crearía en una parte diferente de memoria que permite que las cosas sean
guardan incluso cuando las funciones se han vuelto y el marco de la función, el
apilar marco, ha dejado la pila.
>> Voy a utilizar algunos terminología aquí.
No vas a conocer a esta hasta mañana, pero esa zona de
memoria se llama el montón, y Yo no quiero entrar en eso.
Pero lo que esa función podría hacer, de nuevo simplificar en exceso potencialmente, es crear
esa matriz en un espacio diferente en memoria que en realidad se queda allí por
siempre y cuando usted quiere que permanezca allí, y que va a pasar de nuevo a un puntero principal
a esa matriz guardada en que otra parte de la memoria.
Así que tiene unas cajas en otro lugar que no se deje destruidos cuando el
función devuelve y pasa de nuevo a principal una dirección a ese conjunto de cajas.
>> Esto probablemente no es una suficiente responder a su pregunta, pero
que se estudiarán más mañana cuando ustedes habláis
sobre el montón de conferencia.
>> Pasemos - oh, Dios mío!
Eso es un delfín!
¿Cómo adorable es eso?
Dios!
Ellos son mi animal preferido, por lo que son realmente adorables.
Tengo tres animales delfín de peluche.
Pero basta de mí.
>> Todos ustedes tienen sus ordenadores abrir delante de usted.
Aquí está tu tarea de codificación.
Vamos a comenzar con pseudocódigo, sin embargo, así que no te emociones demasiado.
>> Usted tiene que escribir un programa que toma una y sólo una línea de comandos
argumento, y eso es el número de delfines para ser entrenados.
Ese número debe ser mayor que 0.
>> A continuación, vamos a permitir que el entrenador para entrar en una era de
cada uno de estos delfines.
Cada era, de nuevo, en caso de ser mayor que 0.
Y todas estas edades debe ser almacenados en una matriz.
>> Para tener una edad, sin embargo, es necesario llamar a una función con la siguiente
prototipo -
int estrella, espacio, getAge, paréntesis, vacío, cerrar paréntesis, punto y coma.
>> Por último, quiero que la impriman la edad del delfín más viejo.
Así que de nuevo, antes de empezar a escribir en código, tener una hoja de papel o tener
gedit abierto si lo desea, y escribir algunos pseudocódigo para este.
En tres minutos, vamos para repasar el pseudocódigo.
Vas a tener otros tres minutos a que el código y, a continuación vamos a repasar la codificación
juntos.
>> Y si usted tiene alguna pregunta, porque esto no está claro, levanta la mano y
Voy a venir alrededor, y estoy feliz para responder a su pregunta.
Pero para empezar, tomar tres minutos escribir pseudocódigo para asegurarse de que
entender la lógica de este problema.
>> Vamos a tomar una puñalada en el pseudocódigo como un grupo.
Voy a escribir esto en la pizarra como usted me da el pseudocódigo.
¿Quién quiere dar yo la primera línea?
En primer lugar de la línea tal vez la más fácil, así que si no tienes
sin embargo participado, comience aquí.
¿Cuál es la primera línea de pseudocódigo.
>> ESTUDIANTE: Primera línea es comprobar que la número de argumentos que reciba.
>> JASON HIRSCHHORN: Exactamente.
Compruebe el número de argumentos, primero Lo que tenemos que hacer.
Siguiente?
>> ESTUDIANTE: Compruebe que ese comando, el primer argumento, es mayor que 0?
>> JASON HIRSCHHORN: Compruebe que el primer argumento es mayor que 0, sí.
La siguiente línea, adelante.
>> ESTUDIANTE: Entonces usted probablemente querrá almacenar ese argumento de la línea de comandos en
una variable, o usted podría ir a la siguiente etapa.
>> JASON HIRSCHHORN: Sí, una vez más, vamos a tener una cadena de aquí, pero queremos una
entero porque es un número, por lo que necesitamos para hacer el
cadena en un entero.
>> ESTUDIANTE: x, y.
>> JASON HIRSCHHORN: Eso es correcto.
Por lo tanto, vamos a escribir eso.
String - Whoa, mira a ese marcador.
Esa es la segunda cosa que necesitamos hacer, tomar la cuerda y
convertirlo en un int.
¿Qué sigue?
>> ESTUDIANTE: Crear una matriz de enteros con el tamaño de la primera línea de comandos
argumento que no está programado?
>> JASON HIRSCHHORN: ¿Lo sientes?
>> ESTUDIANTE: Basta con crear una matriz de enteros, y hacer que el tamaño del comando
argumento de la línea que tienes.
>> JASON HIRSCHHORN: Crear matriz de tamaño -
haremos arg, cualquiera que sea ese argumento era.
¿De acuerdo?
¿Qué sigue?
>> Así que tenemos la matriz, permite el entrenador para entrar en un
edad para cada delfín.
Para tener una edad, llamar a una función con el siguiente prototipo.
Así que tenemos nuestra matriz.
¿Qué necesitamos hacer?
>> ESTUDIANTE: Para n delfines?
>> JASON HIRSCHHORN: OK.
Voy a escribir para cada uno.
Para cada una de delfines, lo que Qué tenemos que hacer?
Vaya por delante?
>> ESTUDIANTE: Llame a la función.
>> JASON HIRSCHHORN: Call la función, en Aceptar.
>> ESTUDIANTE: En pseudocoding, debe usted definir funciones como en un aparte
bloque de pseudocódigo?
>> JASON HIRSCHHORN: Así que, sí.
Vamos a hacer una caja separada de pseudocódigo aquí, pseudocódigo para getAge.
Así que esta función, para cada delfín que llamamos getAge y
getAge devuelve algo.
Entonces, ¿dónde deberíamos poner el Lo que estamos volviendo?
Devuelve un puntero int, ¿verdad?
Ese es el tipo de retorno, de acuerdo a que prototipo de función.
Entonces, ¿dónde estamos poniendo que int puntero.
>> ESTUDIANTE: En la matriz.
>> JASON HIRSCHHORN: En la matriz.
Eso suena muy bien.
Llame getAge, puso de retorno valor en la matriz.
>> Hagamos una pausa getAge por un segundo.
Volveremos a eso.
Y voy a dejar de empezar conmigo en eso, Marcus.
Pero hemos llegado a cada edad.
A todos ellos les hemos puesto en la matriz.
¿Qué hacemos al final?
¿Cómo nos terminamos principal?
¿Cuál es la última cosa que necesitamos hacer?
Alden?
>> ESTUDIANTE: Podríamos clasificarlos, y a continuación, imprimir el hallazgo más grande.
>> JASON HIRSCHHORN: Podríamos clasificarlos, sí.
Entonces, ¿cómo resolvemos?
>> ESTUDIANTE: Podríamos igual que -
>> JASON HIRSCHHORN: ¿Necesitamos para ordenar aquí, sin embargo?
>> ESTUDIANTE: Supongo que no.
>> JASON HIRSCHHORN: OK.
Has hecho esto antes.
¿Cuál fue la primera forma usted escribió búsqueda?
>> ESTUDIANTE: Podríamos comprobar cada uno contra el otro uno.
>> JASON HIRSCHHORN: Vamos a hacer eso.
Vamos a buscar a través de cada uno y sólo realizar un seguimiento de la edad antigua.
Buscar más antiguo, y entonces, ¿qué hacer tenemos que ver con el antiguo?
>> ESTUDIANTE: devolverlo.
Imprimirlo, lo siento.
>> JASON HIRSCHHORN: Eso es.
Exactamente derecha.
Imprima más antigua.
>> Aceptar.
Marcus?
>> ESTUDIANTE: Realizar un seguimiento de la más antiguo a medida que los agrega?
>> JASON HIRSCHHORN: OK, buscar más antigua.
Así podríamos seguir la pista de los más antiguos como los sumamos allí.
Llame getAge, poner el valor de retorno en la matriz, y luego ver si este es el
actual más antigua, tal vez salvar en una variable diferente?
Eso funcionaría también.
Eso podría en realidad nos ahorrará un viaje, pero esto es fantástico.
Voy a dejar este hasta aquí por ahora.
Pero si usted quiere en su aplicación tome ese paso
aún más, eso sería genial.
>> Marcus?
Vamos a hacer getAge aquí.
>> MARCUS: OK.
Preguntar al usuario para una edad.
>> JASON HIRSCHHORN: Ask el usuario de una era.
Aceptar.
¿Todos pueden ver eso?
Por aquí?
Aceptar, pide al usuario una edad.
Sigue adelante, tienes esto.
>> MARCUS: Supongo que realmente no entiendo por qué es mejor devolver un int estrella de lo que
sólo un int, como entonces sólo devolver la edad para almacenarlo.
>> JASON HIRSCHHORN: No es necesariamente mejor volver.
Sería funcionar igual de bien en regresar, pero quiero que regreses int estrellas.
>> MARCUS: OK.
Realmente no sé qué -
>> JASON HIRSCHHORN: OK.
¿Alguien tiene alguna idea?
Pedimos usuario para una edad.
Estamos recibiendo un número entero.
>> Aceptar.
Entonces, ¿por qué no nos detenemos aquí.
Vamos a ir a nuestro próximo paso en la lógica, el mapa estas cosas en ver,
y después de que ustedes se codificar ese primer parte, y código bien todo eso
juntos, pero un getAge en particular.
Y vamos a averiguar lo que está pasando con ese int estrellas.
>> Pero antes de hacer eso, antes de saltar en código C, se puede señalar a alguien
algunas cosas que ven en nuestro pseudocódigo eso mapa en código normal?
En C?
Por lo que algunas cosas en pseudocódigo, algunas palabras ves, algunos de sangrado que haya
ver, algunas cosas que le dan un poco de pistas sobre cómo codificar esto en C?
>> ESTUDIANTE: Para lazo.
>> JASON HIRSCHHORN: ¿Dónde?
>> ESTUDIANTE:. Porque "para cada" delfín "
>> JASON HIRSCHHORN: OK.
Eso es.
Tenemos un lazo allí.
¿Qué más?
Mondo?
>> ESTUDIANTE: La cadena a int cosa sería una de i
>> JASON HIRSCHHORN: OK.
Así hemos visto que la función anterior.
Otras cosas que vemos?
>> ESTUDIANTE: Printf.
>> JASON HIRSCHHORN: Exactamente.
No, obviamente, pero espero que tengamos familiarizado ahora con printf.
¿Qué más?
¿Sí?
>> ESTUDIANTE: Lectura de un array es simplemente declarando una matriz?
>> JASON HIRSCHHORN: OK.
Así, de tamaño arg.
Eso es correcto.
No sé qué escribir que como, pero sí, declarando una.
Otra palabra para crearlo.
Cualesquiera otras cosas que vemos aquí?
Estructuras que conocemos?
¿Qué pasa con esa línea de "búsqueda por mayor? "¿Qué tipo de
estructura puede que utilizar?
Alden, se lo sugirió.
>> ESTUDIANTE: Sólo tienes que buscar.
así como sólo un bucle.
>> JASON HIRSCHHORN: Un bucle.
Así, buscan.
Probablemente se esté hablando de lineal buscar aquí, así que es probable que
simplemente usando un bucle estándar de pasar por todo, por lo que
Curtis sugirió que podría poner en el bucle anterior.
>> Cualesquiera otras cosas que vemos?
Compruebe el número de argumentos.
¿Cómo comprobamos algo?
>> ESTUDIANTE: Si los estados.
Y
>> JASON HIRSCHHORN: Eso es si una condición.
>> Así que, ¿por qué no empezar codificación de este programa.
Usted tiene el pseudocódigo aquí.
Comience a escribir y en el código C.
Una vez más, vamos a averiguar lo que es pasa con eso int estrella y
cómo realmente podemos escribir este programa para que se ajuste a la
especificación que te he dado.
Si lo desea, sin embargo, comenzar con sólo int quedaría invalidada.
Simplemente devuelve un entero.
>> Eso ayuda a ponerse en marcha.
Sólo codificar que.
Código sólo como el tipo de retorno como un int, no como un int estrellas.
Pero entonces vamos a convertirlo en int estrella otra vez para que podamos cumplir con
la especificación.
También explorará cómo uno podría realmente llegar a lo que era Jeff
hablando antes.
Así que toma tres a cinco minutos para codificar este.
>> Vamos a ir a través de este código juntos.
Pido disculpas si hubo una falta de claridad en algunas partes de este.
Pero lo que vamos a mirar a la derecha ahora es que ya he escrito todo el
código de lo que se verá como si sólo estamos devolviendo un
entero con getAge.
Y vamos a ir a través de ese código, y entonces vamos a ver cómo podemos
realmente conseguir que se alinean con lo que era nos pide devolver un int estrellas.
>> Aquí está el código.
Y de nuevo, me disculpo que no podemos codificar esta como un grupo, pero quiero
para asegurarse de que superaremos.
>> Por la parte superior, tenemos nuestra función prototipo, getAge.
Hemos visto eso antes.
Vuelva tipo primero, y luego nombrar, entonces los parámetros.
>> Hasta aquí, hemos incluido tres bibliotecas.
¿Puede alguien decirme qué esta línea 12 lo hace?
De Sharp incluye live.h estándar?
¿Qué hace esa línea?
Si yo le preguntara esto en un concurso, y Le pedí que me das la respuesta en
dos frases, ¿qué le dirías?
>> ESTUDIANTE: [inaudible]
le permite utilizar todas las funciones almacenado en ese archivo.
>> JASON HIRSCHHORN: Eso es una buena respuesta.
Es la función de cabecera que tiene el prototipos de un número de funciones,
y si usted va a utilizar los de su biblioteca, esto está diciendo estos
existen funciones.
¿Qué más tengo que hacer si soy incluyendo, por ejemplo, la biblioteca CS50?
¿Qué más tengo que hacer cuando Puedo compilar mi programa?
>> ESTUDIANTE: [inaudible] incluir utilizando el tablero l.
Así que tenemos que vincular en aquellos biblioteca CS50 con tablero l de pie para el enlace.
Enlaces tablero l CS50 en los reales y ceros, la ejecución real
de, por ejemplo, obtener cadena o conseguir int.
>> Así que estamos en principal.
Asegúrese de usuario introdujo una y sólo un argumento de línea de comandos.
Al igual que nuestro pseudocódigo, tenemos que si condicionar aquí.
Esperemos que los chicos están muy familiarizados con esta línea y es capaz de
escribir este código con bastante rapidez, comprobar argc.
>> A continuación, lo estamos haciendo a un i LINE.
Una vez más, has visto eso antes.
Eso es convertir una cadena a un entero.
>> Lo siguiente que hago es que tengo otra condición if.
Me estoy asegurando de que entraron en una positiva número de delfines por la
especificaciones, comprobar si delfines es menor que 1.
Así que de nuevo, esta primera parte de la código, estas tres cosas -
comprobar el número de argumentos, si n es mayor que cero -
que ha escrito el código mucho, validar la entrada del usuario.
Usted debe estar bastante familiarizado con escribir el código y ser capaz de
escribir bastante rápido.
>> A continuación, vamos inicializar un nuevo array.
¿Qué tipo de cosas estamos poniendo en esta matriz?
Los enteros por esta primera tres personajes.
>> A continuación, estamos recibiendo las edades, y una normal, bucle for itera a través de una matriz,
y estamos llamando a esta función getAge, almacenar el valor de retorno de
getAge en la matriz.
Una vez más, usted ha escrito código como esto mucho antes, también.
Una de las cosas que esperamos que pueda espigar de pasar por su pasado
problemas de esta prueba es que una gran cantidad de lo que vas a seguir haciendo
son cosas que ya has hecho.
Es muy importante ver a los patrones para que usted no va a
hacer su trabajo muy duro para usted en el futuro, pensando que nunca he hecho
esto antes.
Usted ha hecho todas estas cosas antes.
>> A continuación, nuestras últimas líneas de código.
Estamos manteniendo un registro de la edad antigua, pasando a través de cada edad, al igual que lo
sugerido, Alden.
Y si la edad de la cosa actual estamos iteración a través de es mayor
que el número más antiguo que hemos almacenado, actualizamos el número más antiguo.
>> Y, por último, al final, es la impresión de el número más antiguo.
Una vez más, usted ha hecho esto antes.
En realidad se ha escrito búsqueda lineal.
Usted ha escrito eso.
Fue un poco diferente.
Buscabas un número específico, no es el mejor, pero
que ha escrito el código anterior.
>> Y, por último, en Int. getAge, usted ha visto esto antes.
Tenemos un bucle do-while pidiendo para la entrada del usuario hasta que
cumple una determinada condición.
Y, por último, sólo estamos volviendo que entero.
>> Así que todo el código que has visto antes y por escrito antes.
Nada es nuevo aquí.
Por supuesto, me he presentado en un diferente manera, y tal vez era demasiado
confundiendo con mis instrucciones, pero usted ha visto esto antes.
Esta lógica eres 100% capaz.
Y si nos encontramos con este programa muy rápido -
Yo ya he hecho, por lo que vamos a correr. / entrenador.
>> ¿Qué pasó?
>> ESTUDIANTE: [inaudible].
>> JASON HIRSCHHORN: No lo hice dar ningún argumento.
Vamos a entrenar cinco delfines.
Esa sería una de dos, tres, cuatro, cinco años de edad.
Y como se puede ver a la derecha aquí, impreso el de mayor edad.
Así que vamos a ir de nuevo en gedit.
>> Pero por supuesto, esto no era lo que el especificación estaba pidiendo.
Se pide al prototipo.
No los rendimientos en número entero, pero los retornos en int estrellas.
Así que si me voy a cambiar hasta allí en el prototipo que será mejor
cambiarlo aquí.
>> Y ahora vamos a trabajar a través de esto, aquí mismo.
Vamos a comenzar en la parte inferior.
La edad no es un int estrellas.
La edad es el tipo de variable?
>> ESTUDIANTE: Un entero.
>> JASON HIRSCHHORN: Así que la línea 63, la edad no debe ser un número entero.
Debe ser un int estrellas.
¿Cómo puedo hacer que un int estrella?
>> ESTUDIANTE: [inaudible].
>> JASON HIRSCHHORN: Ponga una estrella allí.
Y ahora vamos a ver aquí abajo.
67, getInt devuelve un entero, y estamos el almacenamiento de número entero que en la edad.
Pero si estamos tratando a la edad como puntero ahora, ¿qué necesitamos
actualizar esta línea?
>> ESTUDIANTE: Ponga una estrella.
>> JASON HIRSCHHORN: Ponga una estrella antes de la edad.
¿Es eso lo que dijiste?
>> ESTUDIANTE: Sí.
>> JASON HIRSCHHORN: Así es.
Debido getInt devuelve un entero.
Queremos ir a la ubicación dada a nosotros en la edad y ponemos un entero allí.
Si lo hemos hecho esta línea de código, que iríamos volver a lo que Curtis estaba hablando
anterior, el ahorro de una edad, un loco número entero, tal vez el entero 5.
Con el tiempo tratamos de ir a la ubicación 5 en la memoria, y nos metemos en una gran cantidad de
problemas por eso.
>> Así que necesitamos esa estrella allí, y la línea 69?
Una vez más, la edad, es en la memoria abordar aquí.
Entonces, ¿qué tenemos que actualizar esta línea?
Alguien más?
¿Cómo tenemos que actualizar esta línea?
>> ESTUDIANTE: Ponga un asterisco allí.
>> JASON HIRSCHHORN: Exactamente.
Añadir un poco de estrellas ahí.
Ahora estamos llegando al valor señalado a la edad en lugar de la edad.
>> Así que de nuevo, vimos este código va desde un entero hasta el punto final.
Bastante similar.
Tenemos que mirar por todos esos lugares que tenía la edad, y tenemos que cambiarlas
un poco, porque no queremos que La caja del cambio de la edad tanto como la edad
está señalando.
>> Y volviendo la edad, ¿es correcto?
Eso es correcto, porque la edad es un puntero int.
Sí, la pregunta?
>> ESTUDIANTE: ¿Podemos mantenerlo int edad en todo y, a continuación, al final, poner
un signo delante de la edad?
>> JASON HIRSCHHORN: Y devolver su dirección?
Esa es una excelente pregunta.
Usted puede hacer eso, pero vamos a llegar a que en un segundo y la respuesta que
pregunta en un segundo.
Pregunta fantástico.
>> Hasta aquí, si nos estamos convirtiendo un int puntero, ¿qué tipo de cosas es
edades de delfines almacenar en ella?
Si estamos devolviendo un puntero int derecho aquí, qué tipo de cosa es
edades de delfines almacenar en ella?
Int punteros, así que la línea 37 debe ser int estrellas.
Ese es el tipo de esta matriz.
No es el almacenamiento de enteros más.
Ha almacenar int punteros.
>> Y finalmente, aquí abajo, edades de delfines soporte de i, que nos va a dar,
de nuevo, y int puntero.
No queremos que un puntero de int.
Queremos que el valor apuntado que por ese int.
Así Hassan, ¿cómo podemos cambiar esta línea?
>> ESTUDIANTE: Ponga una estrella?
>> JASON HIRSCHHORN: Exactamente, poner una estrella allí.
Eso nos dará un valor.
¿Qué pasa con la línea 51?
>> ESTUDIANTE: Otra de las estrellas.
>> JASON HIRSCHHORN: Otra de las estrellas.
Eso es exactamente correcto.
Así que estamos tratando, de nuevo ahora, estos cosas como int punteros.
>> ESTUDIANTE: ¿es un problema en absoluto que, en getAge, edad int estrellas está nunca dada
ubicación e?
>> JASON HIRSCHHORN: Es un problema que edad int estrella nunca se le da un
ubicación, y que va a ser un parecido problema de lo que eras
hablando con sólo volver edad y comercial y
mantenerlo como un int.
Pero quiero ejecutar este código primero y ver qué pasa.
>> Aceptar.
Así edad variable no inicializado cuando se utiliza aquí.
Por lo tanto, dice, "inicializar la variable "Edad" para silenciar a esta advertencia, "y
sugiere darle nulo.
Vamos a darle un valor nulo.
Así que debemos deshacernos de advertencia tha.
Debemos ser capaces de compilar.
>> ¿Qué edad es el delfín?
Digamos, 1.
Culpa Seg.
>> Así que me gustaría ir a través de GDB, y yo animo a ir a través de GDB en
su cuenta para averiguar por qué esta programa sólo SEG criticado.
Yo no voy a dejar esto como un melodrama, sin embargo, y me voy a
abrir esta función.
Vamos a entender por qué este programa seg criticado.
Así que como todo en la pila, cuando un función se llama, una bandeja se añade a
la pila proverbial donde locales se almacenan las variables.
Cuando una función devuelve, esa bandeja se va.
Esas variables locales desaparecen también.
>> Edad estrella Int. equivale nulo es un local de variable guardada en ese marco de pila.
Cuando esta función se va, este variables desaparece también.
Así que pasamos en la dirección de lo que sea.
Pasamos de edad.
Es una dirección, pasamos por eso en.
Pero en última instancia, nosotros -
>> Lo siento, me estoy adelantando a mí mismo.
¿Por qué este programa realmente SEG fallo en este caso fue porque la edad apuntaba
en null, que es un lugar específico, y nulo es un lugar que no está
permitido tocar.
Y así cuando tratamos de escribir esta línea de código, va a envejecer y hacer
algo allí, nos dieron en problemas, y ahí es donde nos segùn criticado.
Debido a que la edad de la estrella, la edad de nuevo está apuntando a null.
Queremos en null, que es una zona mala.
Intentamos getInt allí, 1 en nuestro caso, y ahí es donde nos segùn criticado.
>> Pero decir que un caso de opt-in, decir que nos había dado esta una dirección legítima
aquí, como bf4ac, algo vimos antes.
Aun así, cuando este programa regresó, se correría en un problema porque
que la dirección hubiera ido.
La dirección de variable local habría desaparecido.
Independientemente de la edad se señaló que no lo haría haber existido nunca más.
>> La forma en que arreglar eso es algo que has visto
antes, la función malloc.
Y usted ha sido introducido en que la función malloc antes.
Usted ha visto esto?
Malloc te da un poco de memoria que no desaparece cuando el
marco de pila se va.
Así que escribir esta línea de código -
y yo voy a dar a usted por ahora -
malloc.
Y ya que estamos almacenando un int, estamos va a malloc de suficiente espacio.
Vamos a decir que dar me una caja del tamaño de int.
Malloc devuelve una dirección, y estamos ahorro de esa dirección en la edad.
>> Ahora cuando ejecutamos este programa -
no vamos a SEG culpa porque los bloques de memoria que conseguimos a través de
malloc no desaparecen cuando el marco de pila desaparece.
Viven hasta que queramos para deshacerse de ellos.
>> Y esto se remonta a su pregunta, Jeff, de antes.
¿Cómo puedo crear cosas dentro de mi funciones que quiero utilizar más tarde
en principal o en diferentes funciones?
Yo uso malloc, y paso sus direcciones alrededor.
>> Eso era mucho, lo admito, para cubrir en este momento.
Así que por favor, si usted tiene cualquier duda, consulte a distancia.
>> ESTUDIANTE: Entonces malloc no está en La pila más, entonces?
>> JASON HIRSCHHORN: Eso es exactamente correcto.
El malloc caja te da no está en la pila.
Se está dando a usted en esta otra parte de la memoria que vamos a
hablar en la conferencia el miércoles.
El nombre es el montón, pero no quiero hablar demasiado sobre él con excepción
Es este otro lugar que no recibe borrados cuando la función se va.
>> ¿Alguna otra pregunta?
>> ESTUDIANTE: Yo creo que si no ha utilizado un función separada y se pone todo esto
código en principal, que todavía necesitará utilizar malloc?
>> JASON HIRSCHHORN: Muy buena pregunta.
Esto probablemente no es el más eficiente forma de escribir este programa.
Se podría haber hecho fácilmente este do-while bucle principal y guardado
a ti mismo un montón de problemas.
La razón por la que quería hacerlo como esto se debe a que quería que todo el mundo
ser capaz de ver cómo, en principal, podemos crear una gran variedad de
punteros, punteros int.
Podemos inicializar los punteros en otro lugar, los puso en este otro
área de la memoria que se mantiene durante el tiempo que queremos que se quede, y entonces podemos
acceder a ellos más tarde.
>> Por ejemplo, aquí se hicieron búsquedas a través de ellos.
Podríamos haber hecho otra cosas a ellos.
Podríamos haber llegado a y encontró la media.
Podríamos haber hecho un montón de cosas.
El punto es que usted puede no perder de algunas cosas en medio principal
una matriz, crear esas cosas en algún lugar otra cosa, y luego seguir utilizando
ellos más adelante.
>> Y esta idea, lo que estamos haciendo ahora, va a llegar a mucho en el futuro
P-series y los problemas que quiere resolver.
Es por eso que lo hicimos como éste incluso aunque hay que admitir que es enrevesado
bit en este contexto.
>> ESTUDIANTE: [inaudible]
si usted puede mantener todas las edades como int valores reales en lugar de punteros,
podrías usar la edad ampersand ahora?
>> JASON HIRSCHHORN: ¿Lo sientes?
>> ESTUDIANTE: Si usted sacó las estrellas en todas las edades, y sólo arrojó
edad signo, al final, funcionaría eso?
>> JASON HIRSCHHORN: Así malloc devuelve una dirección.
>> ESTUDIANTE: OK, a la derecha.
>> JASON HIRSCHHORN: Devuelve una dirección, por lo que la edad tiene que ser un int
puntero, porque va a ser almacenados en una dirección.
>> Tenemos seis minutos para el final.
Voy a saltar de hablar alrededor de la pila por ahora.
Voy a entrar en tres minutos brevemente en SPL, la más importante
cosas que creo que necesitas saber para el conjunto de problemas.
>> Sin embargo, antes de llegar aquí, porque este es lo que vamos a terminar en,
dos recordatorios finales.
Uno, la verdad es que pasó por cosas bastante rápido en esta sección.
Pido disculpas por ese ritmo.
Si usted tiene alguna pregunta acerca de algo de lo que fuimos, por qué algo
funcionado de la manera que lo hizo, o algo que no explican tan claramente como pude
haber, por favor, me tira un correo electrónico o hablar a mí después de clases, y voy a ser feliz
para explicar a usted más en profundidad.
Así que por favor llegar si tiene preguntas.
>> Una vez más, el sitio web de la retroalimentación también.
Tome un poco de tiempo después de clase si usted tiene y dame un poco de retroalimentación.
Te lo agradezco mucho.
Como se vio al principio de la clase, He leído a través de ellos, responder a ellas
si quieres una respuesta, y yo te tomas muy a pecho.
Eso significa mucho para mí.
>> Vamos a terminar la clase hablando de la biblioteca que va a
estar usando esta semana.
Usted probablemente ha visto un código como lo que tener en la pantalla antes, GRect
paleta es igual newGRect, (x, y, ancho, alto).
Ustedes tienen probablemente a través de la lectura a través de la especificación se sentía bastante
cómodo con esto, pero para aquellos que eran menos cómodo, para que usted
chicos así, quiero volver a pasar por encima de este línea y vea cómo es similar a
lo que hemos utilizado antes.
>> Al igual que con cualquier variable -
se trata de un objeto, pero al igual que con cualquier variable, tenemos el primer tipo
y sobre todo aquí, GRect.
>> A continuación tenemos el nombre del objeto, y por último tenemos la función que
inicializa, nos da la paleta que queremos.
A veces escribimos int x es igual a 5, y inicializamos algo directamente.
A veces escribimos cadena nombre es igual a conseguir cuerda.
Utilizamos una función para obtener algo, y tomamos su valor de retorno, y
ese es nuestro nuevo valor.
>> Así que hemos visto esta idea antes, donde funciones que pueden o no necesitar
entrada crea realmente la cosa para nosotros, en lugar de
crearnos directamente.
Así que hemos visto este código antes.
Esperemos que esta idea de un objeto, o al menos la creación de un objeto, no es tan
abrumadora si se puede conceptualizar como apenas muy similar a las cosas
que hemos visto antes.
>> Sin embargo, lo bueno de los objetos como distinta de las variables es que
puede hacer cosas con ellos.
No es posible cambiar el color de un variable, pero que de hecho puede cambiar
el color de un objeto, o al menos en SPL puede cambiar la
color de los objetos.
>> No se puede mover una variable en una ventana, pero se puede mover
un objeto en una ventana.
Usted puede obtener la ubicación de un objeto.
Realmente no se puede obtener una La ubicación de variable.
Eso es lo bueno de objetos en esta biblioteca.
>> Sin embargo, estas funciones pueden ser un poco confuso.
Realmente no hemos utilizado las funciones o objetos antes, así que me pareció que era
útil para entender de forma genérica para expresar o hacer cosas con los objetos, o
entender objetos.
Y como te darás cuenta, tengo dos funciones escritas aquí, funciones
que haya visto antes - añadir, ventana coma paddle, y el color establecido
paddle negro coma.
En estos dos casos, tenemos una función que toma dos argumentos y
hace algo.
>> Ahora más genéricamente, todos estos funciones que vas a escribir que
tener que lidiar con los objetos tomar un lugar y un qué.
A dónde está el objeto que desea hacer algo para, en este
caso, una ventana o panel.
Y el qué es lo que quieres hacerlo o dar a la misma.
>> Cuando se está configurando el color algo, ¿dónde están
que el establecimiento del color?
Con el objeto de paddle.
Y de qué color se le ajuste?
Negro.
Con la función de complemento, donde haces algo?
Con el objeto de ventana.
Y lo que le están dando a ella?
Usted está dando la paleta.
>> Se dará cuenta de que las funciones que le uso, color set, ubicación establecida, et
etc, etc, todo seguir este patrón.
Toman algo que quieres hacer algo, el objeto que desea
hacer algo para, y lo que quieren hacer con él, o lo que usted quiere tener
cambiado, o lo que usted quiere tener agregado, o el color específico
usted quiere que sea.
O si no está lleno, ¿quieres hacen que sea llena, et cetera, et cetera.
>> Es cierto que una breve discusión de la Stanford -
¿qué es?
Biblioteca Programación Stanford?
Biblioteca Portable, es cierto!
Gracias, clase.
Stanford Biblioteca Portable.
Pero una vez más, mucha más información dada en la especificación conjunto de problemas, pero
espero que esto hace que sea un poco más fácil de entender objeto,
especialmente en lo que han sido relativas a los cosas que hemos visto y hecho antes.
>> Así que con eso, es la cuarta semana.
Disfrutar aprendiendo sobre la mañana montón.
Buena suerte en tu examen la próxima semana, pero por supuesto, voy a ver antes de esa fecha,
esperemos que en la sección del próximo martes.
Pero también, si usted tiene alguna pregunta, comentarios, inquietudes, no dude en
para llegar.
Y después de la clase, voy a caminar a otro lado si usted quiere hablar acerca de su problema
establecer o tener algunas preguntas.