1 00:00:00,000 --> 00:00:02,670 >> [TEMA MUSICAL] 2 00:00:02,670 --> 00:00:11,834 3 00:00:11,834 --> 00:00:13,365 >> ALTAVOZ 1: Hola, todo el mundo. 4 00:00:13,365 --> 00:00:14,365 Bienvenido de nuevo a la sección. 5 00:00:14,365 --> 00:00:15,700 6 00:00:15,700 --> 00:00:18,700 Precioso día fuera-- que es por eso, que soy Seguro, hay solamente cuatro de ustedes están aquí 7 00:00:18,700 --> 00:00:21,180 y no nuestro paquete de costumbre. 8 00:00:21,180 --> 00:00:22,670 He estado enfermo este fin de semana. 9 00:00:22,670 --> 00:00:24,294 Así que no tengo Starburst para ustedes. 10 00:00:24,294 --> 00:00:26,400 Y puedo empezar a toser terriblemente largo de este. 11 00:00:26,400 --> 00:00:27,790 Así que tengan paciencia conmigo. 12 00:00:27,790 --> 00:00:30,624 Voy a tratar realmente y obtener a través de esta primera, 13 00:00:30,624 --> 00:00:32,290 sin embargo, antes de que tenga un ataque de tos. 14 00:00:32,290 --> 00:00:33,410 15 00:00:33,410 --> 00:00:37,390 Pero apenas ser fácil en mí un poco bit-- eso es todo lo que pido. 16 00:00:37,390 --> 00:00:39,370 17 00:00:39,370 --> 00:00:44,289 >> Así que nuestra agenda para hoy-- sólo un reminder-- su concurso es la próxima semana. 18 00:00:44,289 --> 00:00:46,830 Te lo dije la semana pasada por lo que no coger con la guardia baja. 19 00:00:46,830 --> 00:00:47,954 Así que me lo estoy recordando de nuevo. 20 00:00:47,954 --> 00:00:49,180 La próxima semana su concurso. 21 00:00:49,180 --> 00:00:52,730 Con ese fin, la semana próxima de sección será mucho más 22 00:00:52,730 --> 00:00:55,180 de-- voy a tratar y trabajar en alguna revisión. 23 00:00:55,180 --> 00:00:58,130 Así que si ustedes pudieran ayudarme enviándome 24 00:00:58,130 --> 00:01:00,990 las cosas que usted se sienta cómodo con, que te preocupa, 25 00:01:00,990 --> 00:01:03,530 temas que le gustaría para me cubro, eso sería genial. 26 00:01:03,530 --> 00:01:05,740 Así que puedo tratar de trabajarlos en nuestra sección de la semana que viene 27 00:01:05,740 --> 00:01:11,540 o enviar material adicional o preparación que no podría obtener en otros lugares. 28 00:01:11,540 --> 00:01:12,150 >> ¡Sí! 29 00:01:12,150 --> 00:01:13,520 Más gente está viniendo! 30 00:01:13,520 --> 00:01:17,320 Pensé, qué he hecho tan mal pasado semana, que nadie quiere volver? 31 00:01:17,320 --> 00:01:18,065 Tengo miedo. 32 00:01:18,065 --> 00:01:18,892 33 00:01:18,892 --> 00:01:21,100 Así que los otros tres cosas que vamos a repasar 34 00:01:21,100 --> 00:01:24,850 son redirección, archivo de E / S, y a continuación, los punteros y memoria dinámica. 35 00:01:24,850 --> 00:01:29,160 Estoy seguro de que ya está todo súper emocionada acerca de pointers-- tema favorito de todos, 36 00:01:29,160 --> 00:01:31,310 tan simple de entender. 37 00:01:31,310 --> 00:01:33,130 Estoy seguro de que todos los chicos tienes eso, ¿verdad? 38 00:01:33,130 --> 00:01:39,510 >> Así que lo primero es lo primero, redirection-- esto es básicamente un camino 39 00:01:39,510 --> 00:01:42,920 para controlar la forma en que la entrada las cosas en su programa, 40 00:01:42,920 --> 00:01:44,606 cómo usted las cosas de salida de su programa. 41 00:01:44,606 --> 00:01:46,980 Las principales formas en que ustedes han sido interactuar con él 42 00:01:46,980 --> 00:01:51,650 es sólo a través de fuera estándar con su pantalla de impresión aquí. 43 00:01:51,650 --> 00:01:55,940 Pero hay maneras de pipe-- como vemos aquí 44 00:01:55,940 --> 00:01:58,980 es uno de los nuestros palabras- de la tubería que la información 45 00:01:58,980 --> 00:02:02,850 o que los datos en un archivo de un archivo. 46 00:02:02,850 --> 00:02:05,820 Es sólo diferentes formas de hacer las cosas en su programa 47 00:02:05,820 --> 00:02:10,681 y fuera de su programa, en lugar de acaba de imprimir a esta pantalla 48 00:02:10,681 --> 00:02:12,430 o introducir cosas desde la línea de comandos. 49 00:02:12,430 --> 00:02:13,760 50 00:02:13,760 --> 00:02:18,030 >> Así que primero es poco mayor que símbolo de intercalación. 51 00:02:18,030 --> 00:02:22,085 Así output-- simplemente imprime la salida a un archivo en lugar de la pantalla. 52 00:02:22,085 --> 00:02:23,620 53 00:02:23,620 --> 00:02:29,500 Así que si usted tenía algo que imprime "Hola, mundo!" a la pantalla, 54 00:02:29,500 --> 00:02:32,400 si lo pones en su lugar a output.text, que 55 00:02:32,400 --> 00:02:35,220 crea este archivo llamado output.text. 56 00:02:35,220 --> 00:02:38,550 Y cuando se abre, va a decir "¡Hola, mundo!" en ese país. 57 00:02:38,550 --> 00:02:41,410 Esto puede ser muy útil si usted tiene un montón de errores 58 00:02:41,410 --> 00:02:43,430 en realidad, como podemos ver en este caso. 59 00:02:43,430 --> 00:02:46,810 Si lo haces dos intercalación, que va a imprimir los mensajes de error. 60 00:02:46,810 --> 00:02:52,090 >> Así que si usted está teniendo un problema con compilación, que tiene una gran cantidad de errores 61 00:02:52,090 --> 00:02:56,770 y que estés empantanarse en intentar para desplazarse a través de la línea de comandos 62 00:02:56,770 --> 00:02:59,110 a través de todos ellos, se puede simplemente imprimir en un archivo, 63 00:02:59,110 --> 00:03:02,130 abrir ese archivo para que usted puede desplazarse a través de ellos más fácil. 64 00:03:02,130 --> 00:03:05,160 En realidad, yo utilicé que un mucho cuando fui depurando 65 00:03:05,160 --> 00:03:07,970 mis 181 conjuntos de procesadores de la máquina de aprendizaje. 66 00:03:07,970 --> 00:03:10,000 Así que puede ser muy útil más adelante. 67 00:03:10,000 --> 00:03:18,370 También es útil si tiene un programa que tal vez es la generación de una biblioteca 68 00:03:18,370 --> 00:03:20,430 o la generación de un conjunto de cadenas, y usted 69 00:03:20,430 --> 00:03:22,846 tienen que ser capaces de ver que que les está generando correctamente. 70 00:03:22,846 --> 00:03:23,860 71 00:03:23,860 --> 00:03:25,160 Esta es la manera de hacerlo. 72 00:03:25,160 --> 00:03:28,280 >> Así que si usted las imprime en un archivo, puede examinar más fácilmente, ¿no? 73 00:03:28,280 --> 00:03:30,930 Versus tratando de desplazarse a través de su línea de comandos. 74 00:03:30,930 --> 00:03:32,740 75 00:03:32,740 --> 00:03:35,820 Y luego una cosa a tener en cuenta es que con sólo el mayor 76 00:03:35,820 --> 00:03:40,090 de acento circunflejo, si usted está escribiendo a un archivo que ya exists-- 77 00:03:40,090 --> 00:03:44,990 así como si nos encontramos con esto la primera tiempo, lo ponemos a output.text, 78 00:03:44,990 --> 00:03:49,970 y luego tuvimos un segundo programa que este impreso como programa de dos 79 00:03:49,970 --> 00:03:54,250 e hizo un mayor que a output.text, sobrescribirá que-- así 80 00:03:54,250 --> 00:03:56,715 sobrescribir lo que fue alguna vez en ese archivo para empezar. 81 00:03:56,715 --> 00:03:57,720 82 00:03:57,720 --> 00:04:00,750 >> Así que si usted desea anexar a un archivo, como vemos aquí, 83 00:04:00,750 --> 00:04:04,779 que acaba de hacer dos veces mayor que los signos. 84 00:04:04,779 --> 00:04:05,820 Y va a anexar a la misma. 85 00:04:05,820 --> 00:04:06,750 No será sobrescrita. 86 00:04:06,750 --> 00:04:09,770 Así que si usted necesita para ejecutar múltiples programas y tipo de mantener 87 00:04:09,770 --> 00:04:13,170 pista de lo que todos ellos son volver a usted en un archivo, 88 00:04:13,170 --> 00:04:14,190 esa es una manera de hacerlo. 89 00:04:14,190 --> 00:04:17,231 Si no le importa lo que está en su archivo y ha permitido a sobrescribir, 90 00:04:17,231 --> 00:04:19,204 que sólo puede utilizar un solo mayor que. 91 00:04:19,204 --> 00:04:20,600 ¿Eso tiene sentido para todo el mundo? 92 00:04:20,600 --> 00:04:23,205 93 00:04:23,205 --> 00:04:31,140 >> AUDIENCIA: Como punto slash hola mayor que el texto del punto de salida, al igual que dos veces, 94 00:04:31,140 --> 00:04:34,030 sólo va a mostrar en la salida sólo dot texto una segunda tiempo-- 95 00:04:34,030 --> 00:04:34,810 >> ALTAVOZ 1: Derecho. 96 00:04:34,810 --> 00:04:40,450 Por lo que sería básicamente por completo sobrescribir lo que estaba allí para empezar. 97 00:04:40,450 --> 00:04:44,260 Si este archivo aquí, el output.text ya 98 00:04:44,260 --> 00:04:48,230 existe, básicamente como se llame que de nuevo con un solo mayor 99 00:04:48,230 --> 00:04:51,920 que sólo puede pensar en él como al igual que reemplazó el archivo. 100 00:04:51,920 --> 00:04:54,824 Al igual que cuando usted está ahorrando una Palabra documento y usted ahorrar como, 101 00:04:54,824 --> 00:04:57,365 y se mantiene el mismo nombre, y sobrescribe completamente it-- 102 00:04:57,365 --> 00:04:58,680 este es el mismo tipo de cosas. 103 00:04:58,680 --> 00:05:00,380 104 00:05:00,380 --> 00:05:03,550 ¿Alguien tiene alguna pregunta sobre sólo dar salida a un archivo? 105 00:05:03,550 --> 00:05:05,051 106 00:05:05,051 --> 00:05:05,550 Impresionante. 107 00:05:05,550 --> 00:05:11,440 >> Así que, obviamente, si se invierte el flecha dirección, se puede hacer de entrada. 108 00:05:11,440 --> 00:05:13,090 109 00:05:13,090 --> 00:05:19,960 Así que cuando ustedes tenían como César o Visioneer 110 00:05:19,960 --> 00:05:23,195 y que tenía a la entrada de algo, usted tenía un argumento de línea de comandos 111 00:05:23,195 --> 00:05:24,960 que en realidad entrada de la misma. 112 00:05:24,960 --> 00:05:27,410 Esta es otra manera de hacerlo. 113 00:05:27,410 --> 00:05:30,520 Así que en lugar de esperar para la línea de comandos, 114 00:05:30,520 --> 00:05:33,800 como cuando se le pida para su mensaje de César o Visioneer, 115 00:05:33,800 --> 00:05:36,490 si usted tenía un archivo de texto que tenían su mensaje, 116 00:05:36,490 --> 00:05:38,280 usted podría escribir en eso. 117 00:05:38,280 --> 00:05:44,930 >> Así que si esto fuera como punto slash César 3 menos de texto de entrada flecha, que 118 00:05:44,930 --> 00:05:47,240 es su mensaje, que iría bien. 119 00:05:47,240 --> 00:05:51,310 120 00:05:51,310 --> 00:05:54,020 Cuando el programa de César en realidad preguntado por la entrada del usuario, 121 00:05:54,020 --> 00:05:57,360 ya lo tendría porque que ha escrito en este archivo. 122 00:05:57,360 --> 00:05:58,830 Eso es sólo otra manera. 123 00:05:58,830 --> 00:06:02,445 Sólo un reverso de output-- acaba de introducir para sus datos. 124 00:06:02,445 --> 00:06:04,570 125 00:06:04,570 --> 00:06:06,680 >> Y a continuación, el último es la tubería. 126 00:06:06,680 --> 00:06:07,780 So cool bastante de éste. 127 00:06:07,780 --> 00:06:09,890 Porque le permite tomar la salida de uno 128 00:06:09,890 --> 00:06:13,695 programa y lo puso como de entrada a otro programa. 129 00:06:13,695 --> 00:06:15,250 130 00:06:15,250 --> 00:06:18,630 No sé si alguno de ustedes jugado con el descifrado 131 00:06:18,630 --> 00:06:20,590 CS50 que podría tener te ha dado, pero sería 132 00:06:20,590 --> 00:06:27,380 le permiten tomar alguna muestra presentar, escríbalo en su cifrado, 133 00:06:27,380 --> 00:06:30,350 y luego desde allí escriba que en su descifrado 134 00:06:30,350 --> 00:06:32,470 para asegurarse de que resultó la misma. 135 00:06:32,470 --> 00:06:34,050 Así que es una especie de bucle de tres vías. 136 00:06:34,050 --> 00:06:38,400 137 00:06:38,400 --> 00:06:39,423 No te lo pienses. 138 00:06:39,423 --> 00:06:41,785 >> AUDIENCIA: Si un programa tiene múltiples entradas, 139 00:06:41,785 --> 00:06:47,646 ¿hay una manera de decir que lo que de entrada a utilizar el archivo de texto o la salida de? 140 00:06:47,646 --> 00:06:49,325 >> ALTAVOZ 1: Cuenta con múltiples entradas. 141 00:06:49,325 --> 00:06:52,190 142 00:06:52,190 --> 00:07:00,430 Sea cual sea presentar su input-- cuando es pidiendo de entrada que por primera vez, es 143 00:07:00,430 --> 00:07:03,240 va a suponer, creo, es ir a la tubería en todo el archivo. 144 00:07:03,240 --> 00:07:03,979 145 00:07:03,979 --> 00:07:07,145 Así que si usted tiene múltiples entradas, que estás va a ser de tuberías en varios archivos. 146 00:07:07,145 --> 00:07:08,190 147 00:07:08,190 --> 00:07:12,390 Así que si usted está pidiendo mensajes tres veces en su código, 148 00:07:12,390 --> 00:07:15,230 usted va a estar poniendo en tres archivos diferentes. 149 00:07:15,230 --> 00:07:15,980 Y se pone loco. 150 00:07:15,980 --> 00:07:18,188 Y usted no debería tener que preocuparse de eso ahora mismo. 151 00:07:18,188 --> 00:07:19,150 Pero esa es la idea. 152 00:07:19,150 --> 00:07:20,680 153 00:07:20,680 --> 00:07:26,822 >> Así que sí, es la tubería de salida de sólo uno programa utiliza la entrada en el otro. 154 00:07:26,822 --> 00:07:27,665 Todo el mundo bien allí? 155 00:07:27,665 --> 00:07:28,565 156 00:07:28,565 --> 00:07:29,065 Enfriar. 157 00:07:29,065 --> 00:07:30,170 158 00:07:30,170 --> 00:07:30,932 Okay. 159 00:07:30,932 --> 00:07:32,890 Usted probablemente no tendrá de hacer demasiado con ella. 160 00:07:32,890 --> 00:07:35,670 Pero usted debe entender maneras que usted puede utilizar esto. 161 00:07:35,670 --> 00:07:38,910 Y hay algunos casos que es posible que desee utilizarlo. 162 00:07:38,910 --> 00:07:44,590 >> Así que presento I / O- Yo sé lo que eres diciendo-- que estamos acostumbrados a la lectura de 163 00:07:44,590 --> 00:07:50,500 y por escrito a nuestra pantalla de allí, que es estándar y la salida estándar. 164 00:07:50,500 --> 00:07:54,370 Y eso es lo que ustedes han sido haciendo desde el comienzo de la clase aquí. 165 00:07:54,370 --> 00:07:58,220 Pero también se puede leer y escribir archivos, que es lo único archivo I / O- modo de entrada de archivo, 166 00:07:58,220 --> 00:07:59,850 salida es todo lo que representa. 167 00:07:59,850 --> 00:08:00,930 168 00:08:00,930 --> 00:08:04,360 Así que esto significa básicamente que usted puede almacenar sus datos ahora. 169 00:08:04,360 --> 00:08:08,460 >> Cuando usted acaba de imprimir a la pantalla, es básicamente ha ido, ¿verdad? 170 00:08:08,460 --> 00:08:12,507 Tan pronto como usted hace "Hola mundo "y ejecutar" Hola mundo " 171 00:08:12,507 --> 00:08:14,090 imprime "Hola mundo" en la pantalla. 172 00:08:14,090 --> 00:08:16,370 Pero realmente no se puede hacer nada con ella a partir de ahí. 173 00:08:16,370 --> 00:08:18,950 Si almacena en un texto archivo, y de repente 174 00:08:18,950 --> 00:08:22,789 usted tiene estos datos que se le permite manipular o ponerlo en un archivo, 175 00:08:22,789 --> 00:08:24,080 o ponerlo en un programa posterior. 176 00:08:24,080 --> 00:08:26,370 177 00:08:26,370 --> 00:08:29,290 Una de las razones razón por la que hacemos esto es sólo 178 00:08:29,290 --> 00:08:31,560 como una manera de almacenar datos para su uso posterior. 179 00:08:31,560 --> 00:08:34,790 180 00:08:34,790 --> 00:08:37,279 >> Tengo un par de pasos aquí simplemente caminar a través de estándar 181 00:08:37,279 --> 00:08:39,450 I / O. En el paso uno, necesitará crear una referencia 182 00:08:39,450 --> 00:08:43,480 al archivo con todo tapas del archivo de estrellas. 183 00:08:43,480 --> 00:08:45,740 Así que crea un puntero a un archivo. 184 00:08:45,740 --> 00:08:48,080 185 00:08:48,080 --> 00:08:49,650 Así que usted quiere para abrirlo. 186 00:08:49,650 --> 00:08:52,940 Y usted dice, literalmente, archivo sólo es igual a fopen. 187 00:08:52,940 --> 00:08:57,400 Y esto va a devolver un puntero al archivo que acaba de abrir. 188 00:08:57,400 --> 00:08:59,610 189 00:08:59,610 --> 00:09:01,460 Vi un par de ustedes chicos en horas de oficina. 190 00:09:01,460 --> 00:09:07,400 >> Pero una de las cosas es punteros remember-- 191 00:09:07,400 --> 00:09:10,409 puede haber alguna dirección o nula, ¿no? 192 00:09:10,409 --> 00:09:12,700 Si alguna vez tenemos un caso en el que algo puede devolver null, 193 00:09:12,700 --> 00:09:14,990 ¿qué tenemos que hacer antes de que alguna vez lo usamos? 194 00:09:14,990 --> 00:09:16,220 195 00:09:16,220 --> 00:09:19,000 Tenemos que comprobar si es nulo o no, ¿verdad? 196 00:09:19,000 --> 00:09:23,600 Debido a que algunos de ustedes pueden haber tenido el problema por el que cualquier objeto 197 00:09:23,600 --> 00:09:26,110 estaba siendo devuelto en ruptura era nula. 198 00:09:26,110 --> 00:09:28,170 Ha intentado realizar alguna función en él. 199 00:09:28,170 --> 00:09:29,770 Y su sitio informático criticado. 200 00:09:29,770 --> 00:09:30,725 Derecha? 201 00:09:30,725 --> 00:09:33,640 Apuesto a que un par de ustedes puede haber tenido ese problema. 202 00:09:33,640 --> 00:09:38,890 >> Así que con fopen, fopen, o bien devolver un puntero al archivo, 203 00:09:38,890 --> 00:09:41,200 o si algo sale mal, que va a devolver null. 204 00:09:41,200 --> 00:09:45,980 Así que siempre hay que comprobar que no ha vuelto nulo 205 00:09:45,980 --> 00:09:47,880 antes de intentar hacer cualquier otra cosa. 206 00:09:47,880 --> 00:09:49,110 207 00:09:49,110 --> 00:09:51,974 Esto es como un paradigma estándar que usted va a necesitar aquí. 208 00:09:51,974 --> 00:09:54,390 Si alguna vez hay una posibilidad de que algo podría devolver null, 209 00:09:54,390 --> 00:09:56,590 comprobar para asegurarse de que no lo hace antes de continuar. 210 00:09:56,590 --> 00:09:58,911 De lo contrario, te vas para obtener encantadoras faltas sitio. 211 00:09:58,911 --> 00:10:00,410 Y a nadie le gusta tratar con aquellos. 212 00:10:00,410 --> 00:10:03,180 213 00:10:03,180 --> 00:10:06,410 >> Así que como vemos aquí, el primer argumento es sólo la ruta de acceso al archivo. 214 00:10:06,410 --> 00:10:09,380 Si no existe ese archivo, que va a crear ese archivo. 215 00:10:09,380 --> 00:10:10,713 Y sólo va a estar en blanco. 216 00:10:10,713 --> 00:10:10,789 217 00:10:10,789 --> 00:10:13,080 Y a continuación, el segundo argumento es el modo que desee. 218 00:10:13,080 --> 00:10:14,610 ¿Queremos leer de este archivo? 219 00:10:14,610 --> 00:10:15,560 ¿Quieres escribir de ella? 220 00:10:15,560 --> 00:10:16,476 ¿Quieres añadir? 221 00:10:16,476 --> 00:10:17,600 222 00:10:17,600 --> 00:10:20,670 Así que en realidad lo que acabo de said-- si el archivo no existe 223 00:10:20,670 --> 00:10:23,400 y que está tratando de leer desde ella, que va a lanzar un error. 224 00:10:23,400 --> 00:10:26,890 Si el archivo nombre-- como si file.text aún no existe 225 00:10:26,890 --> 00:10:29,250 y desea escribir a ella, se creará 226 00:10:29,250 --> 00:10:33,110 un archivo en blanco llamado file.text para usted. 227 00:10:33,110 --> 00:10:36,612 Y si usted desea anexar, usted debe hacer lo mismo. 228 00:10:36,612 --> 00:10:38,081 ¿Eso tiene sentido? 229 00:10:38,081 --> 00:10:40,580 Si usted está tratando de leer desde un archivo que aún no existe, 230 00:10:40,580 --> 00:10:41,590 que va a lanzar un error. 231 00:10:41,590 --> 00:10:44,340 De lo contrario, se creará el archivo para que usted haga lo que quiera con ella. 232 00:10:44,340 --> 00:10:45,970 233 00:10:45,970 --> 00:10:46,470 Enfriar. 234 00:10:46,470 --> 00:10:47,510 235 00:10:47,510 --> 00:10:48,880 Ahora podemos leer el archivo. 236 00:10:48,880 --> 00:10:52,570 Y esto es sólo un poco de ir a través de las diferentes funciones 237 00:10:52,570 --> 00:10:58,980 que tenemos para el archivo de E / S. Esta voluntad ser necesario en conjunto de procesadores de esta semana, 238 00:10:58,980 --> 00:11:00,505 si no recuerdo mal. 239 00:11:00,505 --> 00:11:02,880 Sí, absolutamente será necesaria en conjunto de procesadores de esta semana. 240 00:11:02,880 --> 00:11:04,260 241 00:11:04,260 --> 00:11:07,010 Así fgetc devuelve el siguiente carácter. 242 00:11:07,010 --> 00:11:08,350 243 00:11:08,350 --> 00:11:10,300 fgets sólo devuelve una línea de texto. 244 00:11:10,300 --> 00:11:11,790 245 00:11:11,790 --> 00:11:14,610 Se devolverá nada hasta una nueva línea, y se romperá. 246 00:11:14,610 --> 00:11:15,950 247 00:11:15,950 --> 00:11:18,700 Así fread lee un cierto número de bytes y los coloca 248 00:11:18,700 --> 00:11:20,700 en una matriz, que es algo que se podría 249 00:11:20,700 --> 00:11:25,485 quiero hacer con re-size-- podría ser útil. 250 00:11:25,485 --> 00:11:26,550 251 00:11:26,550 --> 00:11:29,290 >> ¿Cuántas personas han leído la especificación de conjunto de procesadores, por cierto? 252 00:11:29,290 --> 00:11:30,980 253 00:11:30,980 --> 00:11:32,261 Okay. 254 00:11:32,261 --> 00:11:32,760 [Inaudible] 255 00:11:32,760 --> 00:11:35,380 256 00:11:35,380 --> 00:11:36,580 >> ALTAVOZ 1: OK. 257 00:11:36,580 --> 00:11:37,530 Bien. 258 00:11:37,530 --> 00:11:41,940 Definitivamente leer que-- es un conjunto de procesadores de la diversión. 259 00:11:41,940 --> 00:11:51,320 Tienes la oportunidad de recuperar un recuerdo borrado card-- realmente emocionante cuando funciona. 260 00:11:51,320 --> 00:11:54,100 Pero sin duda, comenzar a leer eso. 261 00:11:54,100 --> 00:11:56,280 Venga a hablar conmigo si tiene preguntas al respecto. 262 00:11:56,280 --> 00:11:59,290 >> OK, así que como iba diciendo, fread lee un cierto número de bytes. 263 00:11:59,290 --> 00:12:01,340 264 00:12:01,340 --> 00:12:03,590 Eso es un número arbitrario que se va a establecer. 265 00:12:03,590 --> 00:12:05,990 266 00:12:05,990 --> 00:12:08,260 Y entonces sólo fseek mueve a una determinada posición. 267 00:12:08,260 --> 00:12:11,150 Así que tal vez usted no cuida acerca de los próximos 10 bytes. 268 00:12:11,150 --> 00:12:12,880 Lo que desea es pasar directamente. 269 00:12:12,880 --> 00:12:14,030 Usted no se preocupan por ellos. 270 00:12:14,030 --> 00:12:16,280 ¿Quieres leer a partir de las 11 bytes. 271 00:12:16,280 --> 00:12:18,252 fseek le permite hacer eso. 272 00:12:18,252 --> 00:12:20,710 Por lo tanto, le permite ser selectivo acerca de lo que estás leyendo. 273 00:12:20,710 --> 00:12:25,880 Debido fgetc, fgets, y lectura fread a partir de un cierto lugar en el archivo. 274 00:12:25,880 --> 00:12:27,260 275 00:12:27,260 --> 00:12:35,090 >> Una manera de pensar en esto es si esta es nuestro archivo, cuando se abra por primera vez, 276 00:12:35,090 --> 00:12:41,140 usted tiene esta posición en el archivo que comienza por el principio. 277 00:12:41,140 --> 00:12:45,040 Siempre que llame fgetc, fgetf, o fread, 278 00:12:45,040 --> 00:12:48,875 que va a empezar desde esta marca de posición. 279 00:12:48,875 --> 00:12:51,340 280 00:12:51,340 --> 00:12:55,245 Digamos que lo que desea es leer este trozo de memoria aquí. 281 00:12:55,245 --> 00:12:56,300 282 00:12:56,300 --> 00:12:57,960 No se puede llamar. 283 00:12:57,960 --> 00:13:02,430 Tienes que buscar por aquí y luego leer a partir de ahí 284 00:13:02,430 --> 00:13:06,540 o leer, consigue, o getc, dependiendo de lo que quieras. 285 00:13:06,540 --> 00:13:09,310 Así que busque sólo le permite omitir partes de la memoria. 286 00:13:09,310 --> 00:13:11,590 Y esa es la única manera puede omitir cosas 287 00:13:11,590 --> 00:13:14,012 sin leerlos en su búfer. 288 00:13:14,012 --> 00:13:15,470 ¿Eso tiene sentido para todo el mundo? 289 00:13:15,470 --> 00:13:21,110 290 00:13:21,110 --> 00:13:24,780 >> Obviamente, hay una gran cantidad de aquí-- paralelo 291 00:13:24,780 --> 00:13:27,780 nuestra redirección de la salida o de entrada, usted ha leído y escribir. 292 00:13:27,780 --> 00:13:31,800 Así fputc simplemente escribe un carácter en el archivo. 293 00:13:31,800 --> 00:13:33,655 fputs escribe una línea. 294 00:13:33,655 --> 00:13:35,030 295 00:13:35,030 --> 00:13:37,420 Fprintf imprime una salida formateada. 296 00:13:37,420 --> 00:13:41,190 Así que si usted tiene pestañas, o en el espacio, o lo que sea. 297 00:13:41,190 --> 00:13:44,180 Y entonces fwrite escribe algunos matriz de bytes a un archivo. 298 00:13:44,180 --> 00:13:48,860 Así que esto es de la misma manera fwrite y fread son análogos 299 00:13:48,860 --> 00:13:57,550 fgets opposites--, fputs, y luego un montón fputc y fgetc-- 300 00:13:57,550 --> 00:14:00,710 , cosas rápidas de locos. 301 00:14:00,710 --> 00:14:05,300 >> Sólo tipo de mantener este handy-- usted tendrá diferentes momentos 302 00:14:05,300 --> 00:14:08,680 donde tal vez lo que desea un carácter a la vez. 303 00:14:08,680 --> 00:14:09,890 Tal vez usted quiere una línea entera. 304 00:14:09,890 --> 00:14:14,320 Con su pset-- diccionario que se encuentra en dos conjuntos de procesadores, 305 00:14:14,320 --> 00:14:19,690 Yo creo, te damos un todo diccionario en un formato de texto 306 00:14:19,690 --> 00:14:22,252 que tiene cada palabra separados por una línea. 307 00:14:22,252 --> 00:14:24,210 Así que si querías leer en una palabra a la vez, 308 00:14:24,210 --> 00:14:31,769 lo que podría utilizar si estás leyendo y todos están separados en nuevas líneas, 309 00:14:31,769 --> 00:14:33,310 y lo que desea es una palabra a la vez? 310 00:14:33,310 --> 00:14:35,320 311 00:14:35,320 --> 00:14:36,040 >> Audiencia: fgets 312 00:14:36,040 --> 00:14:36,748 >> ALTAVOZ 1: Derecho. 313 00:14:36,748 --> 00:14:39,960 Fgets-- ya que devuelve lo que está en una línea. 314 00:14:39,960 --> 00:14:42,750 Y si cada palabra es su propia línea, podemos utilizar fgets. 315 00:14:42,750 --> 00:14:44,511 316 00:14:44,511 --> 00:14:45,010 Enfriar. 317 00:14:45,010 --> 00:14:47,290 ¿Eso tiene sentido, todo el mundo? 318 00:14:47,290 --> 00:14:48,020 Fresco? 319 00:14:48,020 --> 00:14:50,020 Sí, vamos a llegar a la parte divertida con punteros 320 00:14:50,020 --> 00:14:51,728 muy pronto, en el que llegar a hacer un poco de matemáticas. 321 00:14:51,728 --> 00:14:52,776 Y va a ser grande. 322 00:14:52,776 --> 00:14:55,690 323 00:14:55,690 --> 00:14:57,740 >> Última step-- cerrar el archivo. 324 00:14:57,740 --> 00:15:01,090 Con tantas cosas aquí, uno de nuestros paradigmas 325 00:15:01,090 --> 00:15:03,550 es si se puede volver nulo, comprobar nula. 326 00:15:03,550 --> 00:15:06,160 Si abre algo, será mejor que lo cierre. 327 00:15:06,160 --> 00:15:10,419 Aceptar, por lo que no está hecho hasta que esté terminado a menos que haya cerrado la misma. 328 00:15:10,419 --> 00:15:12,585 Algo así como que no ha terminado hasta que la señora gorda canta. 329 00:15:12,585 --> 00:15:14,130 Eso es como cerrar el archivo. 330 00:15:14,130 --> 00:15:16,860 331 00:15:16,860 --> 00:15:19,190 Como se dice aquí, sólo reiterar, siempre 332 00:15:19,190 --> 00:15:21,750 abrir el archivo antes de que esté leyendo o escribiendo en ella. 333 00:15:21,750 --> 00:15:24,450 Y siempre cerrarla si has abierto. 334 00:15:24,450 --> 00:15:25,460 Bien? 335 00:15:25,460 --> 00:15:25,960 Enfriar. 336 00:15:25,960 --> 00:15:26,835 >> Así que aquí está un ejemplo. 337 00:15:26,835 --> 00:15:29,250 338 00:15:29,250 --> 00:15:34,330 Así tiny-- No sé si usted chicos pueden ver que muy bien. 339 00:15:34,330 --> 00:15:36,805 Si tan sólo pudiéramos aumentar el brillo de alguna manera. 340 00:15:36,805 --> 00:15:40,430 341 00:15:40,430 --> 00:15:45,030 Déjame hacer esto realidad, si puedo. 342 00:15:45,030 --> 00:15:48,020 343 00:15:48,020 --> 00:15:51,470 Bueno, ustedes no pueden realmente ver eso en absoluto, puede usted? 344 00:15:51,470 --> 00:15:52,905 Bien, vamos a hacer esto, entonces. 345 00:15:52,905 --> 00:16:35,094 346 00:16:35,094 --> 00:16:35,594 [Inaudible] 347 00:16:35,594 --> 00:16:56,670 348 00:16:56,670 --> 00:16:58,605 >> Supongo que esto es mucho mejor para ver. 349 00:16:58,605 --> 00:17:17,330 350 00:17:17,330 --> 00:17:19,455 ¿Alguien puede ver donde mi ratón se fue es la pregunta? 351 00:17:19,455 --> 00:17:22,837 Ah, ahí lo es-- lucha! 352 00:17:22,837 --> 00:17:48,910 353 00:17:48,910 --> 00:17:49,520 >> Okay. 354 00:17:49,520 --> 00:17:53,845 Básicamente, ustedes deben tener tipo de una idea de lo que esto está haciendo. 355 00:17:53,845 --> 00:17:56,740 356 00:17:56,740 --> 00:17:57,600 No es perfecto. 357 00:17:57,600 --> 00:17:58,851 358 00:17:58,851 --> 00:18:02,425 Pero prefiero explicarlo de gastar más tiempo tratando de formatear correctamente. 359 00:18:02,425 --> 00:18:03,610 360 00:18:03,610 --> 00:18:07,280 Básicamente, como se ve aquí, empezamos con abrir el archivo. 361 00:18:07,280 --> 00:18:09,620 Y tenemos algunos archivo de base de datos que estamos 362 00:18:09,620 --> 00:18:12,300 la apertura que dice que es nuestros estudiantes. 363 00:18:12,300 --> 00:18:14,020 Y vamos a escribir en él. 364 00:18:14,020 --> 00:18:15,060 365 00:18:15,060 --> 00:18:17,720 Así que por supuesto, devolver null. 366 00:18:17,720 --> 00:18:19,650 Así que tenemos que comprobar si hay nula. 367 00:18:19,650 --> 00:18:22,930 Y luego, si no es nulo, pasamos por. 368 00:18:22,930 --> 00:18:25,660 Y como puedes ver, estamos bucle a través de aquí. 369 00:18:25,660 --> 00:18:26,960 Hay estudiantes. 370 00:18:26,960 --> 00:18:30,520 Los estudiantes de hash es definida como tres. 371 00:18:30,520 --> 00:18:34,060 Y lo que estamos haciendo es que estamos imprimir en el archivo, ¿no? 372 00:18:34,060 --> 00:18:36,975 Así que lo que estamos imprimiendo a nuestro archivo? 373 00:18:36,975 --> 00:18:47,040 374 00:18:47,040 --> 00:18:48,906 >> AUDIENCIA: Las calificaciones que se encuentran en la matriz? 375 00:18:48,906 --> 00:18:49,680 >> ALTAVOZ 1: Sí. 376 00:18:49,680 --> 00:18:50,980 Las puntuaciones que se encuentran en la array-- exactamente. 377 00:18:50,980 --> 00:18:53,050 Así que estamos abriendo este archivo de base de datos, lo que 378 00:18:53,050 --> 00:18:56,040 Supongo que es algún tipo base de datos de los grados. 379 00:18:56,040 --> 00:19:01,100 Y sólo estamos imprimiendo el puntuaciones de cada estudiante para ese archivo. 380 00:19:01,100 --> 00:19:02,140 Fresco? 381 00:19:02,140 --> 00:19:02,640 Bueno. 382 00:19:02,640 --> 00:19:03,811 383 00:19:03,811 --> 00:19:04,310 Impresionante. 384 00:19:04,310 --> 00:19:05,100 Okay. 385 00:19:05,100 --> 00:19:06,950 Volvamos a-- 386 00:19:06,950 --> 00:19:08,646 >> AUDIENCIA: Tengo una pregunta rápida. 387 00:19:08,646 --> 00:19:11,570 ¿Es el printf no en el bucle for? 388 00:19:11,570 --> 00:19:12,870 Eso es sólo en el caso de bucle? 389 00:19:12,870 --> 00:19:14,370 ALTAVOZ 1: No, es en el bucle for. 390 00:19:14,370 --> 00:19:16,150 391 00:19:16,150 --> 00:19:18,810 No puedo ver mi ratón muy bien aquí. 392 00:19:18,810 --> 00:19:21,359 Así que estoy luchando por formato que correctamente. 393 00:19:21,359 --> 00:19:22,525 Este soporte debe desaparecer. 394 00:19:22,525 --> 00:19:23,610 395 00:19:23,610 --> 00:19:25,130 Debería estar aquí abajo. 396 00:19:25,130 --> 00:19:26,605 Esto es lo que está en su ciclo for. 397 00:19:26,605 --> 00:20:10,680 398 00:20:10,680 --> 00:20:11,180 Ya está. 399 00:20:11,180 --> 00:20:12,160 Ahora que es bastante. 400 00:20:12,160 --> 00:20:16,720 Así que es como debe ser: con excepción para ese último tramo que me despedí. 401 00:20:16,720 --> 00:20:17,220 Okay. 402 00:20:17,220 --> 00:20:19,491 ¿Eso tiene sentido para todo el mundo? 403 00:20:19,491 --> 00:20:19,990 Okay. 404 00:20:19,990 --> 00:20:23,750 Vamos a seguir adelante a la siguiente cosa entonces-- 405 00:20:23,750 --> 00:20:26,180 que, en realidad, vas a tener que ver el código. 406 00:20:26,180 --> 00:20:28,370 Así que sólo voy a copiar que en este momento. 407 00:20:28,370 --> 00:20:31,500 408 00:20:31,500 --> 00:20:32,000 Okay. 409 00:20:32,000 --> 00:20:35,110 Así que voy a mostrarle chicos este código. 410 00:20:35,110 --> 00:20:38,240 Y quiero que usted pruebe y figura lo que se supone que debe hacer. 411 00:20:38,240 --> 00:20:49,740 412 00:20:49,740 --> 00:20:52,480 >> Así que dado que-- tomar un minuto más o menos. 413 00:20:52,480 --> 00:20:54,440 Trate de averiguar lo que está pasando aquí. 414 00:20:54,440 --> 00:21:58,840 415 00:21:58,840 --> 00:21:59,570 >> ¿Alguna idea? 416 00:21:59,570 --> 00:22:08,180 417 00:22:08,180 --> 00:22:12,470 >> Sabemos que tenemos por lo menos dos argumentos en la línea de comandos, ¿verdad? 418 00:22:12,470 --> 00:22:16,270 Supongo que una de las cuales va a ser que [inaudible] de nuestro programa es 419 00:22:16,270 --> 00:22:17,530 y luego algo más. 420 00:22:17,530 --> 00:22:19,980 Porque si [inaudible] es menor de dos, gritamos en ellos. 421 00:22:19,980 --> 00:22:21,140 Derecha? 422 00:22:21,140 --> 00:22:25,300 Y a partir de la utilización, se ve como que va a haber algún tipo de archivo. 423 00:22:25,300 --> 00:22:26,260 Todos estamos de acuerdo con eso? 424 00:22:26,260 --> 00:22:29,110 425 00:22:29,110 --> 00:22:31,570 Así que ahora, ¿cuál es el bucle haciendo? 426 00:22:31,570 --> 00:22:32,570 ¿Qué va a través? 427 00:22:32,570 --> 00:22:35,000 428 00:22:35,000 --> 00:22:36,449 >> AUDIENCIA: Todos los archivos. 429 00:22:36,449 --> 00:22:37,240 ALTAVOZ 1: Exactamente. 430 00:22:37,240 --> 00:22:39,650 Se va a través de todo el los archivos que hemos de entrada hay. 431 00:22:39,650 --> 00:22:40,720 432 00:22:40,720 --> 00:22:46,040 Así que para cada archivo, es la apertura de una cuerda allí. 433 00:22:46,040 --> 00:22:47,560 Es la apertura de ese archivo. 434 00:22:47,560 --> 00:22:48,060 Derecha? 435 00:22:48,060 --> 00:22:49,140 436 00:22:49,140 --> 00:22:52,380 Y está la lectura de la misma. 437 00:22:52,380 --> 00:22:53,420 438 00:22:53,420 --> 00:22:55,540 Por supuesto, comprobar si es nulo. 439 00:22:55,540 --> 00:22:57,220 Y luego está la impresión. 440 00:22:57,220 --> 00:23:01,460 Si es nulo, es sólo que nos dice que eso no es un archivo que existe. 441 00:23:01,460 --> 00:23:04,290 Porque recuerda, con lea nuestro archivo tiene que existir. 442 00:23:04,290 --> 00:23:04,810 Derecha? 443 00:23:04,810 --> 00:23:06,870 Con escritura y de anexión, usted puede salirse con la suya. 444 00:23:06,870 --> 00:23:08,970 Pero con lectura, nuestro fichero tiene que existir. 445 00:23:08,970 --> 00:23:10,430 446 00:23:10,430 --> 00:23:13,330 >> Y luego, si existe, ¿qué estamos haciendo aquí? 447 00:23:13,330 --> 00:23:14,810 448 00:23:14,810 --> 00:23:15,780 Vamos a empezar aquí. 449 00:23:15,780 --> 00:23:18,815 ¿Qué es esto hacer-- este primer carácter. 450 00:23:18,815 --> 00:23:20,960 451 00:23:20,960 --> 00:23:21,790 ¿Qué hace? 452 00:23:21,790 --> 00:23:24,100 Se pone un personaje, ¿no? 453 00:23:24,100 --> 00:23:25,400 Entonces, ¿qué está haciendo esto? 454 00:23:25,400 --> 00:23:26,775 Se está haciendo el primer carácter. 455 00:23:26,775 --> 00:23:28,860 456 00:23:28,860 --> 00:23:30,200 Alguien sabe EOF? 457 00:23:30,200 --> 00:23:31,170 >> AUDIENCIA: Fin de archivo? 458 00:23:31,170 --> 00:23:32,680 >> ALTAVOZ 1: Fin de file-- exactamente. 459 00:23:32,680 --> 00:23:35,310 Así que va a ir a través de todo el archivo, ¿no? 460 00:23:35,310 --> 00:23:36,710 461 00:23:36,710 --> 00:23:40,780 Y luego se va a actualizar por conseguir todos los personajes posterior. 462 00:23:40,780 --> 00:23:41,565 Derecha? 463 00:23:41,565 --> 00:23:43,636 ¿Y qué está haciendo? 464 00:23:43,636 --> 00:23:44,760 AUDIENCIA: Poner que en-- 465 00:23:44,760 --> 00:23:46,741 466 00:23:46,741 --> 00:23:49,170 >> ALTAVOZ 1: impresiones putchar para el protector de pantalla. 467 00:23:49,170 --> 00:23:50,867 468 00:23:50,867 --> 00:23:51,950 [Inaudible] el carácter. 469 00:23:51,950 --> 00:23:54,300 Y luego, cuando se [inaudible] esto cerrará el archivo. 470 00:23:54,300 --> 00:23:57,370 >> AUDIENCIA: ¿No necesita un [? otra cosa? ?] 471 00:23:57,370 --> 00:23:59,005 >> ALTAVOZ 1: No necesariamente. 472 00:23:59,005 --> 00:24:01,480 Quiero decir, es una especie de implícito en esto. 473 00:24:01,480 --> 00:24:06,780 Debido a que este vuelve, sin embargo, siempre ya que esto no coge esto, usted está muy bien. 474 00:24:06,780 --> 00:24:07,940 475 00:24:07,940 --> 00:24:10,250 Quiero decir que es probablemente bueno practicar a hacer una cosa. 476 00:24:10,250 --> 00:24:15,755 Pero una cosa no es siempre especialmente necesaria 477 00:24:15,755 --> 00:24:17,610 si tienes algo como un retorno, que 478 00:24:17,610 --> 00:24:20,640 significa que en este caso si las capturas ella, su programa va a terminar 479 00:24:20,640 --> 00:24:21,850 y que nunca va a llegar a esto. 480 00:24:21,850 --> 00:24:23,030 481 00:24:23,030 --> 00:24:29,190 Es más para el caso de que usted es no necesariamente volviendo algo. 482 00:24:29,190 --> 00:24:31,370 Porque si esto no era devolver nada, 483 00:24:31,370 --> 00:24:34,430 esto significaría que si esto fuera cierto, el resto de este seguiría funcionando. 484 00:24:34,430 --> 00:24:36,138 Y en ese caso, querría un falso. 485 00:24:36,138 --> 00:24:38,240 Si se trata de volver, y final de su programa, 486 00:24:38,240 --> 00:24:41,960 una persona no es necesario todo el tiempo, dependiendo del contexto. 487 00:24:41,960 --> 00:24:43,084 488 00:24:43,084 --> 00:24:44,375 Jacob, ¿sabía usted tiene una pregunta? 489 00:24:44,375 --> 00:24:46,100 AUDIENCIA: Sí. 490 00:24:46,100 --> 00:24:49,300 También lo hace fgetc obtener el siguiente personaje? 491 00:24:49,300 --> 00:24:50,734 ¿Cómo aumenta el carácter? 492 00:24:50,734 --> 00:24:51,400 ALTAVOZ 1: Sí. 493 00:24:51,400 --> 00:24:52,774 Así fgetc obtiene el siguiente carácter. 494 00:24:52,774 --> 00:24:54,140 495 00:24:54,140 --> 00:24:56,866 Usted puede pensar en él como C ++ en un sentido. 496 00:24:56,866 --> 00:24:58,350 >> AUDIENCIA: Entonces, ¿qué era EOF? 497 00:24:58,350 --> 00:25:00,877 >> ALTAVOZ 1: EOF es el final del archivo. 498 00:25:00,877 --> 00:25:03,960 Es sólo un marcador que le permite saber que estás en el final de su archivo. 499 00:25:03,960 --> 00:25:06,742 Así que esto va a imprimir a su salida estándar. 500 00:25:06,742 --> 00:25:08,950 Y luego se va a cerrar el archivo cuando se hace. 501 00:25:08,950 --> 00:25:10,700 Y luego vamos a ir a el siguiente archivo, ¿no? 502 00:25:10,700 --> 00:25:12,660 Así que en general, lo que hace este programa? 503 00:25:12,660 --> 00:25:15,402 504 00:25:15,402 --> 00:25:16,090 >> [Inaudible] 505 00:25:16,090 --> 00:25:16,900 >> ALTAVOZ 1: Sí. 506 00:25:16,900 --> 00:25:18,770 Simplemente imprime todo lo que hay. 507 00:25:18,770 --> 00:25:23,270 Así CAT si ustedes han utilizado alguna vez y luego el nombre de algún file-- 508 00:25:23,270 --> 00:25:26,240 No sé si alguno de ustedes tiene Alguna vez has hecho eso en su terminal. 509 00:25:26,240 --> 00:25:29,630 Pero si alguna vez utiliza el comando CAT-- C-A-T- 510 00:25:29,630 --> 00:25:31,880 y entonces cualquier cosa archivo usted tiene que allí-- 511 00:25:31,880 --> 00:25:37,260 lo imprime a su terminal, que puede ser muy útil para algunas cosas. 512 00:25:37,260 --> 00:25:38,746 Yo lo uso mucho. 513 00:25:38,746 --> 00:25:40,120 ¿Eso tiene sentido para todo el mundo? 514 00:25:40,120 --> 00:25:41,480 515 00:25:41,480 --> 00:25:42,100 Fresco? 516 00:25:42,100 --> 00:25:46,530 >> Aceptar lo que su tarea sea por ahora-- sí mismo o con la gente alrededor de usted-- 517 00:25:46,530 --> 00:25:54,930 es simplemente escribir un programa sencillo que se acaba de escribir "Hola, mundo!" 518 00:25:54,930 --> 00:25:56,255 en un archivo. 519 00:25:56,255 --> 00:26:00,215 >> [Inaudible] 520 00:26:00,215 --> 00:26:56,210 521 00:26:56,210 --> 00:26:57,040 >> [Inaudible] 522 00:26:57,040 --> 00:26:59,248 >> ALTAVOZ 1: yo estaba como, lo hizo Lo hago tan mal la última semana? 523 00:26:59,248 --> 00:27:00,201 524 00:27:00,201 --> 00:27:01,492 Yo no creo que haya sido tan malo. 525 00:27:01,492 --> 00:27:02,479 526 00:27:02,479 --> 00:27:03,520 Me alegro de que estés aquí todo. 527 00:27:03,520 --> 00:27:04,655 Realmente me hace feliz. 528 00:27:04,655 --> 00:27:07,565 529 00:27:07,565 --> 00:27:10,160 Soy una chica de los placeres simples. 530 00:27:10,160 --> 00:27:11,688 A mí me gusta cuando mi sección asiste. 531 00:27:11,688 --> 00:27:13,830 532 00:27:13,830 --> 00:27:18,270 Así que me estoy haciendo esto empezó por ustedes para que podamos codificar juntos. 533 00:27:18,270 --> 00:27:22,290 No me gusta poner a nadie en el lugar a menos que usted quiere ser. 534 00:27:22,290 --> 00:27:26,486 535 00:27:26,486 --> 00:27:30,086 >> AUDIENCIA: Para el concurso, hacer tenemos que escribir un programa? 536 00:27:30,086 --> 00:27:33,260 >> ALTAVOZ 1: Se le puede pedir a escribir programas sencillos a mano. 537 00:27:33,260 --> 00:27:35,940 538 00:27:35,940 --> 00:27:36,590 Sí. 539 00:27:36,590 --> 00:27:38,510 >> AUDIENCIA: El concurso es la semana que viene, ¿no? 540 00:27:38,510 --> 00:27:40,108 >> ALTAVOZ 1: El concurso es el próximo miércoles. 541 00:27:40,108 --> 00:27:40,855 542 00:27:40,855 --> 00:27:43,730 Eso significa que hay una encantadora [? CSE?] clasificación de fiesta después, que 543 00:27:43,730 --> 00:27:50,390 significa que obtendrá su puntuación espalda que noche-- en qué momento? 544 00:27:50,390 --> 00:27:50,890 Quién sabe? 545 00:27:50,890 --> 00:27:51,973 Pero va a ser esa noche. 546 00:27:51,973 --> 00:28:02,020 547 00:28:02,020 --> 00:28:02,855 >> Bien. 548 00:28:02,855 --> 00:28:04,250 ¿Cómo queremos que empezar esto? 549 00:28:04,250 --> 00:28:07,964 550 00:28:07,964 --> 00:28:09,630 Te voy a dar un hint-- comienza con esto. 551 00:28:09,630 --> 00:28:11,455 >> AUDIENCIA: Usted tiene que abrir un archivo. 552 00:28:11,455 --> 00:28:12,250 >> ALTAVOZ 1: Sí. 553 00:28:12,250 --> 00:28:14,060 Entonces, ¿qué es lo que quieres llamar a esto? 554 00:28:14,060 --> 00:28:16,150 ¿Es lo que desea es llamarla "archivo"? 555 00:28:16,150 --> 00:28:17,480 Vamos a hacer que sea fácil. 556 00:28:17,480 --> 00:28:26,752 Así que ¿cuál es nuestra fopen-- prueba de salida va a ser? 557 00:28:26,752 --> 00:28:36,130 Llámelo "Hola." 558 00:28:36,130 --> 00:28:37,810 Y lo que es nuestro modo? 559 00:28:37,810 --> 00:28:39,764 560 00:28:39,764 --> 00:28:41,055 ¿Qué estamos haciendo con este archivo? 561 00:28:41,055 --> 00:28:42,676 562 00:28:42,676 --> 00:28:43,500 >> AUDIENCIA: Leer. 563 00:28:43,500 --> 00:28:44,401 564 00:28:44,401 --> 00:28:44,900 Escribir. 565 00:28:44,900 --> 00:28:46,191 ALTAVOZ 1: Estamos escribiendo a la misma. 566 00:28:46,191 --> 00:28:47,360 567 00:28:47,360 --> 00:28:47,860 Precioso. 568 00:28:47,860 --> 00:28:50,330 569 00:28:50,330 --> 00:28:52,860 Aceptar, por lo que tenemos este archivo ahora. 570 00:28:52,860 --> 00:28:54,920 571 00:28:54,920 --> 00:28:56,212 ¿Qué necesitamos hacer? 572 00:28:56,212 --> 00:28:57,420 AUDIENCIA: Compruebe si es nulo. 573 00:28:57,420 --> 00:28:59,820 ALTAVOZ 1: Compruebe si es null-- exactamente. 574 00:28:59,820 --> 00:29:01,980 Eso es lo que me gusta escuchar. 575 00:29:01,980 --> 00:29:05,930 Eso debería ser automática, especialmente más o menos a partir de ahora. 576 00:29:05,930 --> 00:29:07,530 577 00:29:07,530 --> 00:29:10,950 Si empiezas en violación de segmento, es probable que no comprobar la nula alguna parte. 578 00:29:10,950 --> 00:29:12,480 Nueve de cada diez veces, eso es va a ser su error. 579 00:29:12,480 --> 00:29:15,400 Así que si usted podría conseguir en el hábito, compruebe siempre si es nulo, 580 00:29:15,400 --> 00:29:18,150 tu vida va a ser agradable y easy-- o más fácil. 581 00:29:18,150 --> 00:29:19,480 >> Así que comprobar para ver si es nulo. 582 00:29:19,480 --> 00:29:21,200 583 00:29:21,200 --> 00:29:24,820 Así que si no es nula, lo que es lo que es igual a la explosión 584 00:29:24,820 --> 00:29:26,784 significa: no null-- es válida. 585 00:29:26,784 --> 00:29:27,700 ¿Qué queremos hacer? 586 00:29:27,700 --> 00:29:29,750 587 00:29:29,750 --> 00:29:31,570 Sólo queremos imprimir a ese archivo, ¿no? 588 00:29:31,570 --> 00:29:32,923 Entonces, ¿qué vamos a utilizar? 589 00:29:32,923 --> 00:29:34,092 >> AUDIENCIA: fprintf 590 00:29:34,092 --> 00:29:36,800 >> ALTAVOZ 1: Fprintf-- encantadora. 591 00:29:36,800 --> 00:29:38,150 592 00:29:38,150 --> 00:29:44,000 Y fprintf toma dos arguments-- donde que va y lo que queremos imprimir. 593 00:29:44,000 --> 00:29:45,820 Así que ¿cuál es la primera? 594 00:29:45,820 --> 00:29:46,570 ¿Dónde va? 595 00:29:46,570 --> 00:29:47,490 >> AUDIENCIA: Archivo. 596 00:29:47,490 --> 00:29:48,785 >> ALTAVOZ 1: Se va a presentar. 597 00:29:48,785 --> 00:29:49,784 598 00:29:49,784 --> 00:29:50,950 ¿Y qué es lo que queremos impresa? 599 00:29:50,950 --> 00:29:52,900 600 00:29:52,900 --> 00:29:58,065 "Hola, mundo!" 601 00:29:58,065 --> 00:29:58,565 Bien. 602 00:29:58,565 --> 00:30:03,670 Tenemos una última cosa-- otro gran paradigma aquí. 603 00:30:03,670 --> 00:30:04,479 604 00:30:04,479 --> 00:30:05,145 AUDIENCIA: Cerrar. 605 00:30:05,145 --> 00:30:05,853 ALTAVOZ 1: Cerrar. 606 00:30:05,853 --> 00:30:09,990 607 00:30:09,990 --> 00:30:10,540 Hay que ir. 608 00:30:10,540 --> 00:30:13,384 >> AUDIENCIA: ¿Esto está ocurriendo si el archivo es nulo? 609 00:30:13,384 --> 00:30:15,050 ALTAVOZ 1: No, esto es si no es nulo. 610 00:30:15,050 --> 00:30:16,881 AUDIENCIA: ¡Oh, si es no-- Aceptar. 611 00:30:16,881 --> 00:30:21,728 612 00:30:21,728 --> 00:30:25,410 Para el fopen y luego el dos argumentos que van dentro, 613 00:30:25,410 --> 00:30:27,655 ¿qué significa de nuevo el primer argumento? 614 00:30:27,655 --> 00:30:30,392 >> ALTAVOZ 1: El argumento es al igual que el nombre del archivo 615 00:30:30,392 --> 00:30:31,350 que desea ir. 616 00:30:31,350 --> 00:30:36,020 Así que después de esto se ejecuta, lo haría tener algún archivo llamado "hola" 617 00:30:36,020 --> 00:30:38,320 que tenían "Hola, mundo" dentro de ella. 618 00:30:38,320 --> 00:30:38,820 Eso es todo. 619 00:30:38,820 --> 00:30:39,500 Sólo el nombre. 620 00:30:39,500 --> 00:30:42,685 621 00:30:42,685 --> 00:30:48,650 >> AUDIENCIA: Y ya que es la escritura, la archivo no tiene que ya existen. 622 00:30:48,650 --> 00:30:49,675 ¿Es eso lo que dijiste? 623 00:30:49,675 --> 00:30:50,410 >> ALTAVOZ 1: Derecho. 624 00:30:50,410 --> 00:30:50,910 Exactamente. 625 00:30:50,910 --> 00:30:53,110 626 00:30:53,110 --> 00:30:55,839 Si "Hola" como un archivo no existe, sin embargo, que es 627 00:30:55,839 --> 00:30:58,380 va a crear un archivo llamado Hola "y escribir en él para usted. 628 00:30:58,380 --> 00:30:59,631 629 00:30:59,631 --> 00:31:03,610 >> AUDIENCIA: Cuando usted está diciendo el programa escribió en el fichero, 630 00:31:03,610 --> 00:31:08,075 ¿Por qué escribes "archivo" en lugar de el nombre del archivo y fprintf-- 631 00:31:08,075 --> 00:31:13,600 >> ALTAVOZ 1: Debido a que en este caso, tenemos que gran FILE-- todo en estrella caps--, 632 00:31:13,600 --> 00:31:14,260 presentar. 633 00:31:14,260 --> 00:31:17,370 Así que es un puntero al archivo que usted está hablando. 634 00:31:17,370 --> 00:31:19,930 Esta es la forma que que acabamos de referirnos a ella. 635 00:31:19,930 --> 00:31:24,850 Así que en este caso, puede pensar en aha file--, 636 00:31:24,850 --> 00:31:31,271 podemos utilizar esto-- archivo aquí se refiere a la apertura de "Hola" 637 00:31:31,271 --> 00:31:32,145 y dejando que se escriba. 638 00:31:32,145 --> 00:31:34,728 >> AUDIENCIA: ¿Podríamos poner un "Hola" en lugar [? de justo?] archivo f? 639 00:31:34,728 --> 00:31:40,160 ALTAVOZ 1: No, porque "Hola" tiene que ser abierto y se pueda escribir. 640 00:31:40,160 --> 00:31:41,820 641 00:31:41,820 --> 00:31:45,980 Presente aquí es como un designador que dice bien, que 642 00:31:45,980 --> 00:31:49,190 tener este hello-- file-- que estamos viendo. 643 00:31:49,190 --> 00:31:50,680 Ha sido abierto. 644 00:31:50,680 --> 00:31:52,140 Y vamos a escribir en él. 645 00:31:52,140 --> 00:31:55,130 Si usted sólo tiene que utilizar "Hola", que está encapsulado en el mismo. 646 00:31:55,130 --> 00:31:56,846 Así que va a flipar. 647 00:31:56,846 --> 00:31:58,590 648 00:31:58,590 --> 00:32:00,300 Quiero decir, usted podría haber llamado él. 649 00:32:00,300 --> 00:32:03,960 Podrías haber hecho archivo, estrella, "Hola", es igual que. 650 00:32:03,960 --> 00:32:07,840 Pero el punto es que usted necesitará un puntero estrella archivo en orden 651 00:32:07,840 --> 00:32:09,281 para poder utilizar estas funciones. 652 00:32:09,281 --> 00:32:11,280 AUDIENCIA: ¿Podría usted hacer archivo, estrella, archivo, "Hola" 653 00:32:11,280 --> 00:32:13,113 o qué tienes que poner presentar estrella, archivo por ella? 654 00:32:13,113 --> 00:32:16,330 ALTAVOZ 1: Usted podría hacer archivo, estrella, "Hola." 655 00:32:16,330 --> 00:32:19,790 Usted puede cambiar esto a cualquier nombre que desee. 656 00:32:19,790 --> 00:32:22,114 Es completamente arbitraria lo que llamo. 657 00:32:22,114 --> 00:32:23,179 658 00:32:23,179 --> 00:32:24,220 Usted puede nombrar cualquier cosa. 659 00:32:24,220 --> 00:32:25,501 660 00:32:25,501 --> 00:32:28,020 Nombre volando espaguetis, si querías. 661 00:32:28,020 --> 00:32:29,690 >> AUDIENCIA: ¿Qué es la "w" entre comillas para? 662 00:32:29,690 --> 00:32:31,540 >> ALTAVOZ 1: La "w" es sólo el modo. 663 00:32:31,540 --> 00:32:33,170 Así que estamos escribiendo a este archivo. 664 00:32:33,170 --> 00:32:34,410 665 00:32:34,410 --> 00:32:35,320 Todo el mundo bien? 666 00:32:35,320 --> 00:32:36,227 Claro? 667 00:32:36,227 --> 00:32:36,981 Sí. 668 00:32:36,981 --> 00:32:40,365 >> AUDIENCIA: Así que cuando se escribe este archivo, ¿dónde nos encontramos entonces ese archivo? 669 00:32:40,365 --> 00:32:43,820 >> ALTAVOZ 1: Va a ser en el mismo directorio que usted está actualmente en. 670 00:32:43,820 --> 00:32:45,650 671 00:32:45,650 --> 00:32:48,880 Si estás en conjunto de procesadores de tres y ejecutar este, dentro de su conjunto de procesadores 672 00:32:48,880 --> 00:32:52,600 tres carpeta va a ser este archivo se llama "Hola." 673 00:32:52,600 --> 00:32:53,160 Fresco? 674 00:32:53,160 --> 00:32:53,757 Todo el mundo bien? 675 00:32:53,757 --> 00:32:55,840 Me siento como si estuviera todo conseguirlo, lo cual es genial. 676 00:32:55,840 --> 00:32:57,290 677 00:32:57,290 --> 00:32:57,790 Okay. 678 00:32:57,790 --> 00:33:05,960 Así que de vuelta a mi show-- diapositiva Me encanta cuando las cosas funcionan. 679 00:33:05,960 --> 00:33:08,674 Aceptar, pointers-- ¿Son ustedes emocionado? 680 00:33:08,674 --> 00:33:09,465 Los punteros son grandes. 681 00:33:09,465 --> 00:33:11,581 682 00:33:11,581 --> 00:33:13,580 Toman un poco para envolver su cabeza alrededor. 683 00:33:13,580 --> 00:33:15,288 Este es mi segundo año punteros de enseñanza. 684 00:33:15,288 --> 00:33:16,850 Y creo que por fin lo conseguí. 685 00:33:16,850 --> 00:33:18,650 Así que si usted lucha, que está bien. 686 00:33:18,650 --> 00:33:19,940 687 00:33:19,940 --> 00:33:24,070 Como he dicho antes, hacer dibujos ayuda mucho con las cosas en la CS, 688 00:33:24,070 --> 00:33:27,400 tanto como yo creo que la gente tiende pensar oh, estamos frente a una computadora. 689 00:33:27,400 --> 00:33:28,399 Debemos sólo código. 690 00:33:28,399 --> 00:33:30,190 Imágenes de dibujo no-- realmente le ayudará. 691 00:33:30,190 --> 00:33:32,773 Y realmente te animo a aprovechar su lado kindergartner 692 00:33:32,773 --> 00:33:35,010 y llevar a cabo los creyones o marcadores y tablas. 693 00:33:35,010 --> 00:33:36,110 Debido a que le ayudará. 694 00:33:36,110 --> 00:33:39,380 Y si me ves en las horas de oficina, yo será llevar alrededor de pilas de papel 695 00:33:39,380 --> 00:33:41,580 con las plumas de dibujo las cosas. 696 00:33:41,580 --> 00:33:44,370 >> Así especialmente con pointers-- hacer dibujos. 697 00:33:44,370 --> 00:33:47,970 Y estoy seguro de que estamos en realidad va a estar dibujando algunas fotos aquí también. 698 00:33:47,970 --> 00:33:51,270 >> Así que ustedes todos llegamos a ver Binky, esta cosa divertida animación con plastilina. 699 00:33:51,270 --> 00:33:54,720 Y pensamos que es realmente divertido cuando que explota en un montón de piezas. 700 00:33:54,720 --> 00:33:56,280 701 00:33:56,280 --> 00:33:57,755 Es un poco de alivio cómico para la clase. 702 00:33:57,755 --> 00:34:02,140 703 00:34:02,140 --> 00:34:05,900 C [inaudible] esta gran capacidad ser capaz de controlar la memoria. 704 00:34:05,900 --> 00:34:10,090 Y es una de las cosas que realmente lo convierte en un lenguaje tan poderoso. 705 00:34:10,090 --> 00:34:13,469 Pero con gran poder viene gran responsabilidad. 706 00:34:13,469 --> 00:34:16,230 Y las cosas locas que puede suceder si usted no tiene cuidado. 707 00:34:16,230 --> 00:34:18,560 Así que cuando usted está utilizando punteros, que quieren hacer 708 00:34:18,560 --> 00:34:21,440 Seguro de que realmente entiende exactamente lo que estás haciendo. 709 00:34:21,440 --> 00:34:25,530 Esperemos que el próximo poco de el tiempo le ayudará realmente a entender 710 00:34:25,530 --> 00:34:27,850 punteros, cómo usarlos, y cómo manipularlos. 711 00:34:27,850 --> 00:34:29,170 712 00:34:29,170 --> 00:34:33,460 >> Así memory-- Estoy seguro de que hemos este diagrama visto antes. 713 00:34:33,460 --> 00:34:38,540 Así que esto es sólo un simple diagrama de cómo las cosas podrían ser almacenados memoria. 714 00:34:38,540 --> 00:34:43,145 Así que, básicamente, tiene estos grandes arreglos de bloques de un byte 715 00:34:43,145 --> 00:34:46,000 es lo que tenemos aquí-- ligero incrementos en uno cada vez. 716 00:34:46,000 --> 00:34:51,810 Esto es en hexadecimal [inaudible] por lo que los bloques de ocho bits. 717 00:34:51,810 --> 00:34:55,510 Y cada bloque se asocia con un poco de dirección hexadecimal. 718 00:34:55,510 --> 00:34:58,750 Así que si alguna vez ve la 0x, eso es sólo notating 719 00:34:58,750 --> 00:35:00,670 que se trata de una dirección hexadecimal. 720 00:35:00,670 --> 00:35:03,970 Usted puede asumir que esto significa alguna dirección en la memoria. 721 00:35:03,970 --> 00:35:06,935 Estamos hablando de las direcciones de memoria cada vez que vea hexadecimal. 722 00:35:06,935 --> 00:35:10,420 723 00:35:10,420 --> 00:35:14,630 >> Tenemos enteros son variables, carrozas son variables que almacenan. 724 00:35:14,630 --> 00:35:16,260 Así ints almacenar enteros. 725 00:35:16,260 --> 00:35:17,430 Tienda flotadores flota. 726 00:35:17,430 --> 00:35:20,260 Así que también tenemos punteros que las direcciones de memoria tienda. 727 00:35:20,260 --> 00:35:21,660 Eso es una especie de mapeo. 728 00:35:21,660 --> 00:35:24,240 Los punteros son exclusivamente para direcciones de memoria. 729 00:35:24,240 --> 00:35:25,780 730 00:35:25,780 --> 00:35:27,292 Así que eso es como el tipo de allí. 731 00:35:27,292 --> 00:35:29,550 732 00:35:29,550 --> 00:35:34,470 Su aparato es de 32 bits, lo que significa que su dirección de memoria es de cuatro bytes. 733 00:35:34,470 --> 00:35:37,830 Así que cualquier puntero que tienes También va a ser cuatro bytes. 734 00:35:37,830 --> 00:35:43,200 O bien si se trata de cuatro bytes, la memoria es de cuatro bytes. 735 00:35:43,200 --> 00:35:44,790 Memoria de almacenamiento de punteros. 736 00:35:44,790 --> 00:35:46,430 Por lo tanto, son cuatro bytes. 737 00:35:46,430 --> 00:35:48,460 Cool-- sólo quieren reforzar eso. 738 00:35:48,460 --> 00:35:50,120 739 00:35:50,120 --> 00:35:52,220 >> Usted debe obtener este cómic ahora. 740 00:35:52,220 --> 00:35:55,040 No sé cuántos de ustedes son aficionados xkcd, pero me encanta xkcd. 741 00:35:55,040 --> 00:35:55,780 Es genial. 742 00:35:55,780 --> 00:35:57,290 743 00:35:57,290 --> 00:35:57,790 >> Bien. 744 00:35:57,790 --> 00:36:01,640 Así que la creación de pointers-- como he dicho, es más o menos como cualquier otra cosa. 745 00:36:01,640 --> 00:36:02,930 Usted tiene un tipo. 746 00:36:02,930 --> 00:36:04,050 Usted tiene un nombre. 747 00:36:04,050 --> 00:36:04,810 Derecha? 748 00:36:04,810 --> 00:36:10,410 Eso es lo que tenemos allí. [? Hex?] Significa estrella es un puntero, 749 00:36:10,410 --> 00:36:12,250 y luego lo que quieras llamarlo. 750 00:36:12,250 --> 00:36:15,770 Así que el tipo representa lo que puede almacenar. 751 00:36:15,770 --> 00:36:16,850 752 00:36:16,850 --> 00:36:17,990 Bien? 753 00:36:17,990 --> 00:36:24,350 De la misma manera que si lo hacemos enteros, sabemos que estamos almacenando un int allí. 754 00:36:24,350 --> 00:36:25,990 755 00:36:25,990 --> 00:36:30,280 Con un puntero, se ejerce en una dirección de memoria. 756 00:36:30,280 --> 00:36:34,240 Pero lo que significa es que-- es donde aquí un dibujo va a venir muy bien. 757 00:36:34,240 --> 00:36:36,170 758 00:36:36,170 --> 00:36:45,980 Así que en este caso, tenemos algunos value-- digamos cuatro. 759 00:36:45,980 --> 00:36:49,306 Cuatro es en dirección de uno. 760 00:36:49,306 --> 00:36:49,805 ¿De acuerdo? 761 00:36:49,805 --> 00:36:51,550 762 00:36:51,550 --> 00:36:56,170 >> Esta primera uno aquí significa que es un puntero de 2x. 763 00:36:56,170 --> 00:36:56,740 Derecha? 764 00:36:56,740 --> 00:36:57,628 Es cierto puntero x. 765 00:36:57,628 --> 00:36:58,852 766 00:36:58,852 --> 00:37:00,940 x puede ser algo, lo que sea. 767 00:37:00,940 --> 00:37:01,960 768 00:37:01,960 --> 00:37:05,130 Cualquiera que sea x es-- decir x es cuatro. 769 00:37:05,130 --> 00:37:07,280 Se va a almacenar el dirección de memoria aquí. 770 00:37:07,280 --> 00:37:12,260 Así int, estrella, x-- esto es alguna otra ranura en memory-- 771 00:37:12,260 --> 00:37:13,590 que sabe lo que es esto. 772 00:37:13,590 --> 00:37:15,430 Pero va a almacenar una dirección aquí. 773 00:37:15,430 --> 00:37:27,040 Así que este sería como-- en este caso, lo que, 774 00:37:27,040 --> 00:37:32,630 se almacena a 0x1-- lo que se almacena en la dirección que nuestro puntero se mantiene, 775 00:37:32,630 --> 00:37:35,280 tiene que coincidir con lo que hemos designado. 776 00:37:35,280 --> 00:37:40,330 Así que en 0x1, en este caso, esto es x. 777 00:37:40,330 --> 00:37:42,500 778 00:37:42,500 --> 00:37:49,340 Esto sólo puede ser nunca una int mientras estamos usando esto. 779 00:37:49,340 --> 00:37:52,950 >> Del mismo modo, si tenemos 1a otra, cualquiera que sea 780 00:37:52,950 --> 00:37:59,130 la dirección se guardan con un y tiene a ser una misma cosa char-- con z. 781 00:37:59,130 --> 00:38:05,840 De la misma manera, cada vez que se tratar de hacer INTX es igual a 0,4, 782 00:38:05,840 --> 00:38:09,275 que va a gritar a usted y ser como no, dijiste que querías un int. 783 00:38:09,275 --> 00:38:10,525 Esto se supone que es un int. 784 00:38:10,525 --> 00:38:11,900 Deja de tratar de hacer que sea un flotador. 785 00:38:11,900 --> 00:38:14,150 >> Así que deja que las cosas sean lo que quieren ser. 786 00:38:14,150 --> 00:38:15,159 787 00:38:15,159 --> 00:38:16,200 Deje que las cosas sean ellos mismos. 788 00:38:16,200 --> 00:38:19,380 789 00:38:19,380 --> 00:38:23,450 Así que algo grande está a sólo cualquiera que sea el tipo de puntero 790 00:38:23,450 --> 00:38:26,101 que es, esa es la única que puede almacenar allí. 791 00:38:26,101 --> 00:38:26,600 ¿De acuerdo? 792 00:38:26,600 --> 00:38:27,910 793 00:38:27,910 --> 00:38:31,160 Con la práctica, como con la semana pasada, todo 794 00:38:31,160 --> 00:38:32,817 parece muy amable de abstracto. 795 00:38:32,817 --> 00:38:34,150 Vamos a hacer un poco de práctica. 796 00:38:34,150 --> 00:38:36,760 Debe tener más sentido. 797 00:38:36,760 --> 00:38:44,580 >> Así referencia y dereferencing-- es realmente importante para obtener estos recta. 798 00:38:44,580 --> 00:38:46,630 Todavía tengo que refrescar de vez en cuando. 799 00:38:46,630 --> 00:38:48,450 Y yo soy como espera, lo que uno es lo que quiero? 800 00:38:48,450 --> 00:38:56,080 Así que el signo realmente dar que la referencia o la dirección de. 801 00:38:56,080 --> 00:39:00,100 Por lo tanto, devuelve la dirección en memoria de qué variable se almacena. 802 00:39:00,100 --> 00:39:01,170 803 00:39:01,170 --> 00:39:07,020 Así que va a volver realmente a usted un hexadecimal, mientras que eliminación de referencias 804 00:39:07,020 --> 00:39:10,641 que realmente se va a dar los datos que se almacena allí. 805 00:39:10,641 --> 00:39:11,140 ¿De acuerdo? 806 00:39:11,140 --> 00:39:12,680 807 00:39:12,680 --> 00:39:16,060 Así que vamos a ver un ejemplo muy rápido, o en realidad hasta la próxima. 808 00:39:16,060 --> 00:39:18,050 809 00:39:18,050 --> 00:39:19,150 >> Okay. 810 00:39:19,150 --> 00:39:21,790 Así que tenemos que pensar realmente cuidadosamente acerca de esto. 811 00:39:21,790 --> 00:39:23,860 Así que aquí tenemos algún entero x. 812 00:39:23,860 --> 00:39:26,485 Voy a tratar de dibujar este a lo mejor de mis habilidades. 813 00:39:26,485 --> 00:39:30,230 814 00:39:30,230 --> 00:39:32,410 Así que vamos a tener esta ranura x. 815 00:39:32,410 --> 00:39:35,850 816 00:39:35,850 --> 00:39:37,315 Y está el almacenamiento de cinco. 817 00:39:37,315 --> 00:39:38,640 818 00:39:38,640 --> 00:39:40,090 Su dirección es 0x4. 819 00:39:40,090 --> 00:39:41,920 820 00:39:41,920 --> 00:39:43,160 Fresco? 821 00:39:43,160 --> 00:39:44,100 Todo bien. 822 00:39:44,100 --> 00:39:45,470 >> Así que ahora tenemos este puntero. 823 00:39:45,470 --> 00:39:46,916 824 00:39:46,916 --> 00:39:47,990 Fue por aquí. 825 00:39:47,990 --> 00:39:52,130 826 00:39:52,130 --> 00:39:57,560 Y el símbolo de unión nos da la dirección de algo. 827 00:39:57,560 --> 00:40:00,780 Así, en este caso, es la dirección de x. 828 00:40:00,780 --> 00:40:01,875 ¿Cuál es la dirección de x? 829 00:40:01,875 --> 00:40:05,660 830 00:40:05,660 --> 00:40:12,590 04-- y este puntero es a 0x08. 831 00:40:12,590 --> 00:40:14,490 832 00:40:14,490 --> 00:40:14,990 Fresco? 833 00:40:14,990 --> 00:40:16,570 834 00:40:16,570 --> 00:40:21,570 Así que usted puede pensar en esto puntero, 04, sólo señala hacia aquí. 835 00:40:21,570 --> 00:40:22,840 836 00:40:22,840 --> 00:40:25,740 Y se llaman punteros porque a medida que más en esto, 837 00:40:25,740 --> 00:40:28,450 vas a ver que apunta a las cosas. 838 00:40:28,450 --> 00:40:31,470 Y a una cuadra apuntando a otro bloque hará mucho más sentido. 839 00:40:31,470 --> 00:40:32,760 840 00:40:32,760 --> 00:40:33,890 Así que aquí son dos. 841 00:40:33,890 --> 00:40:38,230 Y luego tenemos algunos copia, que es 0x0c qué--. 842 00:40:38,230 --> 00:40:41,290 843 00:40:41,290 --> 00:40:43,420 Y se va a eliminar la referencia de nuestro puntero. 844 00:40:43,420 --> 00:40:46,790 >> Así que lo que está diciendo es OK, aquí está nuestro puntero. 845 00:40:46,790 --> 00:40:53,090 El valor se almacena es 0x04, ¿Y qué que está diciendo es ir a esta dirección 846 00:40:53,090 --> 00:40:54,300 y dime lo que está en él. 847 00:40:54,300 --> 00:40:55,520 848 00:40:55,520 --> 00:40:57,710 Así que eso es efectivamente lo que esta flecha está haciendo. 849 00:40:57,710 --> 00:40:58,750 850 00:40:58,750 --> 00:41:01,280 Usted puede pensar en esto como su estrella. 851 00:41:01,280 --> 00:41:05,410 Así que bien, cuando hacemos estrella, que significa seguir. 852 00:41:05,410 --> 00:41:06,810 Vaya a esta dirección. 853 00:41:06,810 --> 00:41:11,430 Y eso es, básicamente, sólo después de esta flecha para este trozo de memoria. 854 00:41:11,430 --> 00:41:15,380 Y nos dan lo que hay en él, que es 5. 855 00:41:15,380 --> 00:41:18,840 Es por eso que nuestra copia es igual a 5. 856 00:41:18,840 --> 00:41:20,120 ¿Eso tiene sentido? 857 00:41:20,120 --> 00:41:22,769 ¿Me necesita a nadie para ir a través de que de nuevo, o más lentamente? 858 00:41:22,769 --> 00:41:24,560 ¿Quieres que me vaya a través de él una vez más? 859 00:41:24,560 --> 00:41:25,060 Okay. 860 00:41:25,060 --> 00:41:27,549 861 00:41:27,549 --> 00:41:28,840 Vamos a volver a dibujar de nuevo. 862 00:41:28,840 --> 00:41:31,930 863 00:41:31,930 --> 00:41:37,205 Cuando empezamos, todos estamos de acuerdo que tenemos algún trozo de memoria que es una variable 864 00:41:37,205 --> 00:41:40,890 x que nos propusimos igual a 5. 865 00:41:40,890 --> 00:41:42,910 Nosotros no controlamos donde está en la memoria. 866 00:41:42,910 --> 00:41:45,520 Así que este lugar es sólo arbitrariamente asignado. 867 00:41:45,520 --> 00:41:47,770 868 00:41:47,770 --> 00:41:48,731 Bueno allí? 869 00:41:48,731 --> 00:41:49,230 Okay. 870 00:41:49,230 --> 00:41:50,420 871 00:41:50,420 --> 00:41:53,330 Luego inicializamos un puntero a un int. 872 00:41:53,330 --> 00:41:56,900 Es por eso que se le permite apuntar a x porque tenemos un int en aquí. 873 00:41:56,900 --> 00:42:00,840 Tenemos otro trozo de memoria porque este puntero 874 00:42:00,840 --> 00:42:03,485 es una variable como cualquier otra cosa. 875 00:42:03,485 --> 00:42:06,615 Se le asigna arbitrariamente algo de espacio en la memoria. 876 00:42:06,615 --> 00:42:07,630 877 00:42:07,630 --> 00:42:10,830 Y lo que se almacena es la dirección de x. 878 00:42:10,830 --> 00:42:13,200 Ampersand significa dirección de x. 879 00:42:13,200 --> 00:42:14,575 Entonces, ¿cuál es la dirección de x? 880 00:42:14,575 --> 00:42:19,179 881 00:42:19,179 --> 00:42:20,614 >> AUDIENCIA: Es zero-- 882 00:42:20,614 --> 00:42:21,280 ALTAVOZ 1: 0x04. 883 00:42:21,280 --> 00:42:24,350 884 00:42:24,350 --> 00:42:25,940 Así entonces-- último. 885 00:42:25,940 --> 00:42:30,650 Tenemos algunos copy-- de nuevo sólo otra variable. 886 00:42:30,650 --> 00:42:32,520 Así que vamos a asignar un lugar arbitrario. 887 00:42:32,520 --> 00:42:35,260 888 00:42:35,260 --> 00:42:38,080 Y nosotros desreferenciar nuestro puntero. 889 00:42:38,080 --> 00:42:42,490 La estrella significa ir a la dirección almacenada en mi puntero. 890 00:42:42,490 --> 00:42:44,480 Dime lo que hay. 891 00:42:44,480 --> 00:42:47,290 Así que la dirección almacenada en nuestro puntero es 0x04. 892 00:42:47,290 --> 00:42:49,070 893 00:42:49,070 --> 00:42:51,310 Así que vamos a esa dirección. 894 00:42:51,310 --> 00:42:52,402 895 00:42:52,402 --> 00:42:54,590 Está apuntando a esa dirección. 896 00:42:54,590 --> 00:42:57,481 ¿Qué hay dentro de este bloque de memoria? 897 00:42:57,481 --> 00:42:57,980 Es un cinco. 898 00:42:57,980 --> 00:42:59,210 899 00:42:59,210 --> 00:43:01,650 Así que eso es lo que nosotros asignamos nuestra copia. 900 00:43:01,650 --> 00:43:03,430 901 00:43:03,430 --> 00:43:04,860 Todo el mundo bien? 902 00:43:04,860 --> 00:43:05,360 Enfriar. 903 00:43:05,360 --> 00:43:07,010 904 00:43:07,010 --> 00:43:08,330 Imágenes nuevo--. 905 00:43:08,330 --> 00:43:19,750 906 00:43:19,750 --> 00:43:25,200 >> Así que el seguimiento de los valores aquí-- Estoy va a dejar que ustedes piensan acerca de esto. 907 00:43:25,200 --> 00:43:26,550 908 00:43:26,550 --> 00:43:27,750 Podemos sacar otra foto. 909 00:43:27,750 --> 00:43:31,260 Pero quiero que usted pruebe y la razón a través de esto por su cuenta durante un minuto. 910 00:43:31,260 --> 00:44:01,430 911 00:44:01,430 --> 00:44:04,149 >> Como no dan nosotros una dirección de ejemplo, 912 00:44:04,149 --> 00:44:06,940 Yo sólo voy a hacer x-- signo lo que debería ayudar a impulsar a casa. 913 00:44:06,940 --> 00:44:07,950 Ampersand significa dirección. 914 00:44:07,950 --> 00:44:09,540 915 00:44:09,540 --> 00:44:12,360 >> Así, en el primero, todo el mundo ir con la primera línea. 916 00:44:12,360 --> 00:44:15,690 Algunos de x five-- algún conjunto ranura aleatoria en la memoria. 917 00:44:15,690 --> 00:44:17,660 918 00:44:17,660 --> 00:44:23,200 Int indicador de la estrella es igual a la dirección de x, ¿verdad? 919 00:44:23,200 --> 00:44:28,180 Puntero estrella Int crea este bloque, lo llama el puntero, 920 00:44:28,180 --> 00:44:30,650 y asigna a la dirección de x. 921 00:44:30,650 --> 00:44:32,750 922 00:44:32,750 --> 00:44:34,230 Soy terrible en símbolos de unión. 923 00:44:34,230 --> 00:44:36,460 924 00:44:36,460 --> 00:44:40,550 >> Ahora lo que estamos haciendo es que decimos Aceptar, eliminar la referencia de nuestro puntero. 925 00:44:40,550 --> 00:44:42,760 Así que vamos bien, lo que está en nuestro puntero? 926 00:44:42,760 --> 00:44:44,820 Es símbolo de unión x. 927 00:44:44,820 --> 00:44:49,400 Ir a ampersand x y reasignarlo. 928 00:44:49,400 --> 00:44:51,620 929 00:44:51,620 --> 00:44:57,480 >> Así que ahora, signo x va a ser 35. 930 00:44:57,480 --> 00:45:01,540 931 00:45:01,540 --> 00:45:05,174 Así que, básicamente, cuando estás eliminación de referencias, que vaya bien. 932 00:45:05,174 --> 00:45:07,090 Usted va a ser el dibujo foto como esta. 933 00:45:07,090 --> 00:45:09,423 Usted va a ser el dibujo sus flechas sobre dónde está. 934 00:45:09,423 --> 00:45:16,030 Así que ir a esta ranura en la memoria y, o bien dame ese valor de nuevo, o alterarlo. 935 00:45:16,030 --> 00:45:21,620 En este caso, debido a que estamos en este valor, estamos asignando a ser 35. 936 00:45:21,620 --> 00:45:24,700 Mientras que en el pasado uno, si te fijas, nos 937 00:45:24,700 --> 00:45:27,680 fueron la asignación de lo que era aquí a otra cosa. 938 00:45:27,680 --> 00:45:30,450 939 00:45:30,450 --> 00:45:32,245 >> Así que tienen este cuadro impresionante. 940 00:45:32,245 --> 00:45:35,000 941 00:45:35,000 --> 00:45:36,890 No es tan malo. 942 00:45:36,890 --> 00:45:37,970 Ustedes trabaja en él. 943 00:45:37,970 --> 00:45:39,640 Voy a llamar a cabo en el tablero. 944 00:45:39,640 --> 00:45:41,306 Vamos a llenarlo juntos, ¿de acuerdo? 945 00:45:41,306 --> 00:45:42,290 946 00:45:42,290 --> 00:45:45,530 Así que coge un poco de papel, agarrar un socio, empezar a trabajar. 947 00:45:45,530 --> 00:45:53,897 948 00:45:53,897 --> 00:45:55,605 Voy a conseguir un mayor trozo de tiza. 949 00:45:55,605 --> 00:45:56,624 950 00:45:56,624 --> 00:45:58,150 Debido a que va a ser mucho. 951 00:45:58,150 --> 00:45:59,410 952 00:45:59,410 --> 00:45:59,910 Okay. 953 00:45:59,910 --> 00:48:08,567 954 00:48:08,567 --> 00:48:09,150 PROFESOR: OK. 955 00:48:09,150 --> 00:48:11,599 956 00:48:11,599 --> 00:48:12,890 Vamos a empezar con la primera fila. 957 00:48:12,890 --> 00:48:14,070 958 00:48:14,070 --> 00:48:16,970 Vamos a empezar ahí, entonces ustedes tal vez puede trabajar a través de un poco más. 959 00:48:16,970 --> 00:48:17,870 Okay. 960 00:48:17,870 --> 00:48:19,810 una es igual a b c así que lo que es un? 961 00:48:19,810 --> 00:48:21,420 962 00:48:21,420 --> 00:48:23,260 No es una pregunta con trampa, te lo prometo. 963 00:48:23,260 --> 00:48:24,440 >> ESTUDIANTE: 4 veces 5. 964 00:48:24,440 --> 00:48:25,420 >> PROFESOR: 4 veces 5. 965 00:48:25,420 --> 00:48:25,920 20. 966 00:48:25,920 --> 00:48:26,730 Entonces, ¿qué es b? 967 00:48:26,730 --> 00:48:27,921 968 00:48:27,921 --> 00:48:28,420 ESTUDIANTE: 4. 969 00:48:28,420 --> 00:48:30,204 970 00:48:30,204 --> 00:48:31,043 >> PROFESOR: Y c? 971 00:48:31,043 --> 00:48:31,542 ESTUDIANTE: 5. 972 00:48:31,542 --> 00:48:32,083 PROFESOR: 5. 973 00:48:32,083 --> 00:48:35,960 Y entonces este es sólo va a ser un signo, símbolo de unión b, 974 00:48:35,960 --> 00:48:38,575 ampersand c, ¿verdad? 975 00:48:38,575 --> 00:48:39,728 976 00:48:39,728 --> 00:48:40,596 No está mal. 977 00:48:40,596 --> 00:48:42,081 Es bastante simple. 978 00:48:42,081 --> 00:48:42,580 Okay. 979 00:48:42,580 --> 00:48:44,300 Así que la siguiente. 980 00:48:44,300 --> 00:48:48,725 A es igual a veces c, en caso nadie estaba familiarizado con eso. 981 00:48:48,725 --> 00:48:49,812 982 00:48:49,812 --> 00:48:53,300 ¿Todo el mundo conoce con los tiempos es igual a? 983 00:48:53,300 --> 00:49:00,105 Bien, todo esto significa: esto es abreviada de una es igual a veces c. 984 00:49:00,105 --> 00:49:04,840 También puede hacerlo con la división, con la adición, con la resta. 985 00:49:04,840 --> 00:49:12,130 Usted puede hacer una iguales, o un punto a favor es igual a c significa que a es igual a un plus c, un menos igual 986 00:49:12,130 --> 00:49:15,190 c sería igual a un menos c. 987 00:49:15,190 --> 00:49:16,690 Es sólo el azúcar sintáctica. 988 00:49:16,690 --> 00:49:19,380 989 00:49:19,380 --> 00:49:24,140 >> Por lo tanto, en este caso, a es igual a unas veces c nos lo darían? 990 00:49:24,140 --> 00:49:25,910 991 00:49:25,910 --> 00:49:28,186 Una vez más, no es una pregunta con trampa. 992 00:49:28,186 --> 00:49:28,965 >> ESTUDIANTE: 100. 993 00:49:28,965 --> 00:49:29,300 >> PROFESOR: 100. 994 00:49:29,300 --> 00:49:30,383 ¿Cambia algo más? 995 00:49:30,383 --> 00:49:31,790 996 00:49:31,790 --> 00:49:32,290 No. 997 00:49:32,290 --> 00:49:37,380 998 00:49:37,380 --> 00:49:39,850 Tal vez voy a conseguir finalmente mejor en mis símbolos de unión. 999 00:49:39,850 --> 00:49:42,047 >> ESTUDIANTE: OK, lo siento, ¿cómo se obtiene el 100? 1000 00:49:42,047 --> 00:49:42,630 PROFESOR: OK. 1001 00:49:42,630 --> 00:49:46,594 Así que a es igual a una veces c, así que una veces c. 1002 00:49:46,594 --> 00:49:48,510 ESTUDIANTE: Oh, estás usando una para el previous-- 1003 00:49:48,510 --> 00:49:49,135 PROFESOR: Sí. 1004 00:49:49,135 --> 00:49:51,450 Así que estos son nuestros valores más recientes. 1005 00:49:51,450 --> 00:49:53,990 Estos son lo que debe ser utilizando a medida que avanzamos hacia abajo, en Aceptar. 1006 00:49:53,990 --> 00:49:57,290 1007 00:49:57,290 --> 00:50:01,520 Por lo tanto, b es la única cosa que cambia, ¿no? 1008 00:50:01,520 --> 00:50:02,910 Así que vamos a llenar en todo lo demás. 1009 00:50:02,910 --> 00:50:09,110 1010 00:50:09,110 --> 00:50:11,330 B. ¿Qué es b va a ser? 1011 00:50:11,330 --> 00:50:13,020 1012 00:50:13,020 --> 00:50:14,140 Ser o no ser. 1013 00:50:14,140 --> 00:50:18,680 1014 00:50:18,680 --> 00:50:20,240 Entonces, ¿qué está haciendo esto? 1015 00:50:20,240 --> 00:50:21,605 ¿Cuál es la estrella pa hacer? 1016 00:50:21,605 --> 00:50:23,280 1017 00:50:23,280 --> 00:50:25,350 >> ESTUDIANTE: El código para la ubicación de pa. 1018 00:50:25,350 --> 00:50:26,390 1019 00:50:26,390 --> 00:50:27,480 >> ESTUDIANTE: No, no del todo. 1020 00:50:27,480 --> 00:50:29,470 Así que esta es una referencia d. 1021 00:50:29,470 --> 00:50:31,580 >> Estudiante: Entonces b es el valor de la mano de pa. 1022 00:50:31,580 --> 00:50:37,340 >> PROFESOR: Sí, así es pa la dirección de una, ¿verdad? 1023 00:50:37,340 --> 00:50:42,430 Así que está diciendo ir a donde a es almacenada y darle ese valor. 1024 00:50:42,430 --> 00:50:43,884 Entonces, ¿qué es b? 1025 00:50:43,884 --> 00:50:44,425 ESTUDIANTE: 100. 1026 00:50:44,425 --> 00:50:46,534 PROFESOR: 100. 1027 00:50:46,534 --> 00:50:47,450 Perfect. 1028 00:50:47,450 --> 00:50:49,879 OK, así que la PC es lo que está cambiando. 1029 00:50:49,879 --> 00:50:51,170 Todo lo demás se mantiene igual. 1030 00:50:51,170 --> 00:50:57,160 1031 00:50:57,160 --> 00:50:58,620 ¿Qué es PC va a ser? 1032 00:50:58,620 --> 00:51:00,770 1033 00:51:00,770 --> 00:51:01,580 Asignación simple. 1034 00:51:01,580 --> 00:51:03,520 1035 00:51:03,520 --> 00:51:05,990 Pc es igual a pa, y lo que es pa? 1036 00:51:05,990 --> 00:51:07,049 >> ESTUDIANTE: Ampersand a. 1037 00:51:07,049 --> 00:51:07,840 PROFESOR: Perfecto. 1038 00:51:07,840 --> 00:51:09,490 1039 00:51:09,490 --> 00:51:10,740 Ahora estamos llegando interesante. 1040 00:51:10,740 --> 00:51:12,310 1041 00:51:12,310 --> 00:51:15,230 OK, vamos a romper este uno abajo. 1042 00:51:15,230 --> 00:51:21,110 En primer lugar, ¿cuál es B veces c, porque eso es la parte fácil de este uno, ¿verdad? 1043 00:51:21,110 --> 00:51:22,360 B veces c es-- 1044 00:51:22,360 --> 00:51:23,320 >> ESTUDIANTE: 500. 1045 00:51:23,320 --> 00:51:28,880 >> PROFESOR: Sí, así que lo que está haciendo este, 1046 00:51:28,880 --> 00:51:33,705 Si es pb estrella, lo que está cambiando? 1047 00:51:33,705 --> 00:51:35,320 1048 00:51:35,320 --> 00:51:37,242 >> ESTUDIANTE: ¿Qué hay en el-- 1049 00:51:37,242 --> 00:51:38,200 PROFESOR: ¿Qué hay en B? 1050 00:51:38,200 --> 00:51:41,340 ESTUDIANTE: ¿Qué hay en el espacio que el PP está apuntando. 1051 00:51:41,340 --> 00:51:43,406 PROFESOR: Y PB está apuntando a-- 1052 00:51:43,406 --> 00:51:43,905 ESTUDIANTE: B. 1053 00:51:43,905 --> 00:51:46,740 PROFESOR: B. Así que la única Lo que cambia es b, derecha. 1054 00:51:46,740 --> 00:51:50,800 Así b veces c, 500. 1055 00:51:50,800 --> 00:51:52,367 Así que eso es lo que cambia ahora. 1056 00:51:52,367 --> 00:51:59,091 1057 00:51:59,091 --> 00:51:59,590 Enfriar. 1058 00:51:59,590 --> 00:52:00,340 1059 00:52:00,340 --> 00:52:00,840 Precioso. 1060 00:52:00,840 --> 00:52:01,905 Ustedes están haciendo muy bien. 1061 00:52:01,905 --> 00:52:03,650 1062 00:52:03,650 --> 00:52:06,740 Muy bien, rompiendo este uno abajo. 1063 00:52:06,740 --> 00:52:08,050 1064 00:52:08,050 --> 00:52:09,630 C está cambiando, ¿no? 1065 00:52:09,630 --> 00:52:11,530 Así que podemos llenar en todo lo demás. 1066 00:52:11,530 --> 00:52:12,540 1067 00:52:12,540 --> 00:52:13,205 Vamos a ver. 1068 00:52:13,205 --> 00:52:19,125 1069 00:52:19,125 --> 00:52:19,625 Okay. 1070 00:52:19,625 --> 00:52:21,420 1071 00:52:21,420 --> 00:52:24,740 Sabemos que c va a ser la producto de dos números, ¿no? 1072 00:52:24,740 --> 00:52:26,290 1073 00:52:26,290 --> 00:52:27,980 ¿Qué dos números, sin embargo? 1074 00:52:27,980 --> 00:52:28,970 >> ESTUDIANTE: A y C? 1075 00:52:28,970 --> 00:52:31,930 >> PROFESOR: Entonces a es adecuado para la primera. 1076 00:52:31,930 --> 00:52:34,385 Así que estamos haciendo referencia D p de una, ¿verdad? 1077 00:52:34,385 --> 00:52:35,390 1078 00:52:35,390 --> 00:52:42,870 P de unos puntos a una, así que sabemos que esto va a ser 100 veces más de lo? 1079 00:52:42,870 --> 00:52:46,232 Los tiempos lo que hace punto PC a? 1080 00:52:46,232 --> 00:52:47,410 1081 00:52:47,410 --> 00:52:48,740 Puntos a una. 1082 00:52:48,740 --> 00:52:55,038 Así que 100 veces 100 es 10.000. 1083 00:52:55,038 --> 00:52:56,170 ¿Eso tiene sentido? 1084 00:52:56,170 --> 00:52:57,640 1085 00:52:57,640 --> 00:52:58,200 Enfriar. 1086 00:52:58,200 --> 00:53:00,500 Recta final, chicos, última fila. 1087 00:53:00,500 --> 00:53:01,190 Okay. 1088 00:53:01,190 --> 00:53:02,160 ¿Qué está cambiando en esta lista? 1089 00:53:02,160 --> 00:53:05,640 1090 00:53:05,640 --> 00:53:06,935 >> ESTUDIANTE: A. 1091 00:53:06,935 --> 00:53:09,435 PROFESOR: A. perfecto, por lo que todo lo demás puede permanecer igual. 1092 00:53:09,435 --> 00:53:16,210 1093 00:53:16,210 --> 00:53:16,710 Okay. 1094 00:53:16,710 --> 00:53:17,970 Y lo que es una? 1095 00:53:17,970 --> 00:53:23,610 1096 00:53:23,610 --> 00:53:26,060 Así que es un momento, ¿qué? 1097 00:53:26,060 --> 00:53:27,120 Esto es pb estrellas. 1098 00:53:27,120 --> 00:53:29,750 1099 00:53:29,750 --> 00:53:34,490 Así pb estrella significa que aquí está pb, pb a puntos b. 1100 00:53:34,490 --> 00:53:35,370 >> ESTUDIANTE: 500. 1101 00:53:35,370 --> 00:53:36,230 >> PROFESOR: 500. 1102 00:53:36,230 --> 00:53:39,236 Así que tenemos 500 veces 100. 1103 00:53:39,236 --> 00:53:41,758 Eso es 50.000. 1104 00:53:41,758 --> 00:53:43,216 ¡Menos mal! 1105 00:53:43,216 --> 00:53:45,646 Mira eso. 1106 00:53:45,646 --> 00:53:47,982 >> ESTUDIANTE: ¿Por qué tenemos el & c de la last-- 1107 00:53:47,982 --> 00:53:48,690 PROFESOR: Lo sentimos. 1108 00:53:48,690 --> 00:53:50,080 ESTUDIANTE: Oh, OK. 1109 00:53:50,080 --> 00:53:51,600 PROFESOR: Mi mal. 1110 00:53:51,600 --> 00:53:52,890 Las porciones de la escritura. 1111 00:53:52,890 --> 00:53:53,917 1112 00:53:53,917 --> 00:53:54,500 Todo el mundo bien? 1113 00:53:54,500 --> 00:53:55,630 1114 00:53:55,630 --> 00:53:56,660 No está mal, ¿verdad? 1115 00:53:56,660 --> 00:53:58,490 Solo se necesita un poco mientras que para trabajar a través. 1116 00:53:58,490 --> 00:54:01,080 Si lo desglosamos, entender lo que cada parte 1117 00:54:01,080 --> 00:54:03,197 se está refiriendo como a-- con todo lo que es, 1118 00:54:03,197 --> 00:54:05,780 sí-- descomponerlo a la pequeña problemas y luego se recombinan, 1119 00:54:05,780 --> 00:54:07,345 y usted puede hacer algunas cosas impresionantes. 1120 00:54:07,345 --> 00:54:08,970 Hay las respuestas, pero nos hicieron eso. 1121 00:54:08,970 --> 00:54:10,324 1122 00:54:10,324 --> 00:54:11,115 La aritmética de punteros. 1123 00:54:11,115 --> 00:54:13,961 1124 00:54:13,961 --> 00:54:14,460 Ah. 1125 00:54:14,460 --> 00:54:15,510 Mis manos son todos calcáreo. 1126 00:54:15,510 --> 00:54:17,970 Así que sumar o restar int ajusta el puntero 1127 00:54:17,970 --> 00:54:21,890 por el tamaño de el tipo de puntero. 1128 00:54:21,890 --> 00:54:22,940 1129 00:54:22,940 --> 00:54:28,390 Recuerde cómo cada tipo tiene un tamaño diferente? 1130 00:54:28,390 --> 00:54:34,890 Así como un doble o un largo tiempo es el ocho y cuatro, pero es int char es uno. 1131 00:54:34,890 --> 00:54:38,360 >> Entonces, ¿qué quieres hacer es-- una cosa para recordar 1132 00:54:38,360 --> 00:54:44,080 es sólo que la cantidad de su valor del puntero cambia realmente 1133 00:54:44,080 --> 00:54:46,550 dependerá de la tipo de puntero que es. 1134 00:54:46,550 --> 00:54:50,820 1135 00:54:50,820 --> 00:54:51,820 Todo el mundo bueno con esto? 1136 00:54:51,820 --> 00:54:52,760 ¿Puedo borrarlo? 1137 00:54:52,760 --> 00:54:53,440 Estamos bien? 1138 00:54:53,440 --> 00:54:53,940 Impresionante. 1139 00:54:53,940 --> 00:55:01,020 1140 00:55:01,020 --> 00:55:07,501 >> Así que si tenemos algún puntero que-- esto va a ser: soy 1141 00:55:07,501 --> 00:55:08,834 va a hacer que sea un puntero int. 1142 00:55:08,834 --> 00:55:10,610 1143 00:55:10,610 --> 00:55:12,760 Almacena esto. 1144 00:55:12,760 --> 00:55:14,210 1145 00:55:14,210 --> 00:55:20,170 Si tuviera que decir puntero más uno, lo que va a hacer 1146 00:55:20,170 --> 00:55:23,420 se va a actualizar por el tamaño de un int 1147 00:55:23,420 --> 00:55:25,950 porque esa es la tipo de puntero que es. 1148 00:55:25,950 --> 00:55:28,260 >> Con C, todo es muy estricto y regulado. 1149 00:55:28,260 --> 00:55:29,440 1150 00:55:29,440 --> 00:55:35,260 El puntero int va a actualizar por la cantidad de espacio en un int tomaría. 1151 00:55:35,260 --> 00:55:36,260 Un int es de cuatro bytes. 1152 00:55:36,260 --> 00:55:37,650 1153 00:55:37,650 --> 00:55:39,060 >> Entonces, ¿qué sería esta vuelta en? 1154 00:55:39,060 --> 00:55:40,876 1155 00:55:40,876 --> 00:55:44,390 No eres más que añadir cuatro en este. 1156 00:55:44,390 --> 00:55:50,040 Ahora el puntero podría ser: Aceptar. 1157 00:55:50,040 --> 00:55:51,820 1158 00:55:51,820 --> 00:55:55,380 >> Así que si se trataba de un char y lo hicimos puntero más uno, ¿cuál sería ahora? 1159 00:55:55,380 --> 00:56:00,300 1160 00:56:00,300 --> 00:56:03,330 Si started-- fingiendo que started-- ahora es 0x08. 1161 00:56:03,330 --> 00:56:04,850 1162 00:56:04,850 --> 00:56:10,850 Ahora vamos a decir que se trataba de un charlas puntero, y hemos añadido una. 1163 00:56:10,850 --> 00:56:11,850 ¿Qué haría falta para cambiar? 1164 00:56:11,850 --> 00:56:14,989 1165 00:56:14,989 --> 00:56:16,030 ¿Cuántos bytes es un char? 1166 00:56:16,030 --> 00:56:16,680 >> AUDIENCIA: Uno. 1167 00:56:16,680 --> 00:56:17,304 >> ALTAVOZ 1: Uno. 1168 00:56:17,304 --> 00:56:18,309 AUDIENCIA: Así 0x09. 1169 00:56:18,309 --> 00:56:19,600 ALTAVOZ 1: Así que sería de nueve. 1170 00:56:19,600 --> 00:56:22,571 1171 00:56:22,571 --> 00:56:23,820 Así que sólo algo para recordar. 1172 00:56:23,820 --> 00:56:28,340 Justo cuando se agrega uno, no es la adición de uno a menos que sea un char. 1173 00:56:28,340 --> 00:56:34,190 Es la adición de cuántos bytes del tipo que es, 1174 00:56:34,190 --> 00:56:36,960 es por ello que tenemos esta ecuación aquí. 1175 00:56:36,960 --> 00:56:40,190 Así que es int veces el tamaño del tipo de puntero. 1176 00:56:40,190 --> 00:56:42,850 1177 00:56:42,850 --> 00:56:44,730 >> Así tenemos el ejemplo aquí. 1178 00:56:44,730 --> 00:56:47,250 1179 00:56:47,250 --> 00:56:54,430 y fue asignado a ese valor, 0x4, cuando lo hicimos y además es igual a uno. 1180 00:56:54,430 --> 00:56:56,830 ¿Qué hay en él, lo que es en x, no cambia. 1181 00:56:56,830 --> 00:56:58,610 Lo que sí cambia es lo que está en y. 1182 00:56:58,610 --> 00:57:04,980 La dirección almacenada en y actualizado por cuatro porque hay cuatro bytes en un int 1183 00:57:04,980 --> 00:57:06,097 y es un puntero int. 1184 00:57:06,097 --> 00:57:07,290 1185 00:57:07,290 --> 00:57:07,790 >> Bien. 1186 00:57:07,790 --> 00:57:09,123 Así que ahora tenemos otro ejercicio. 1187 00:57:09,123 --> 00:57:11,140 1188 00:57:11,140 --> 00:57:13,500 Así que la pregunta es qué va a imprimir. 1189 00:57:13,500 --> 00:57:36,710 1190 00:57:36,710 --> 00:57:37,650 ¿Alguna idea? 1191 00:57:37,650 --> 00:57:41,690 1192 00:57:41,690 --> 00:57:43,699 >> AUDIENCIA: El número de personajes de gato feliz? 1193 00:57:43,699 --> 00:57:44,490 ALTAVOZ 1: Exactamente. 1194 00:57:44,490 --> 00:57:45,531 Así que, como con su cadena. 1195 00:57:45,531 --> 00:57:47,302 1196 00:57:47,302 --> 00:57:48,260 ¿Todo el mundo consigue eso? 1197 00:57:48,260 --> 00:57:49,509 ¿Queremos que caminar a través de él? 1198 00:57:49,509 --> 00:57:50,300 1199 00:57:50,300 --> 00:57:52,010 >> Sí, OK. 1200 00:57:52,010 --> 00:57:57,385 Así que lo que tenemos que aquí-- como esto mucho más. 1201 00:57:57,385 --> 00:57:59,340 Yo no tengo que [Inaudible] ridículamente. 1202 00:57:59,340 --> 00:58:01,690 >> Así que tenemos nuestra cadena aquí, gato feliz. 1203 00:58:01,690 --> 00:58:02,950 Precioso. 1204 00:58:02,950 --> 00:58:05,080 Tenemos algún contador que estamos no perder de vista. 1205 00:58:05,080 --> 00:58:11,430 Así que tenemos algunos char * puntero que sólo se fija igual a STR. 1206 00:58:11,430 --> 00:58:14,320 Lo que esto hace es que es la asignación de algún puntero 1207 00:58:14,320 --> 00:58:16,380 al inicio de la cadena. 1208 00:58:16,380 --> 00:58:19,840 Porque estoy seguro, ya que se mencionó en la conferencia, 1209 00:58:19,840 --> 00:58:22,290 les hemos dado chicos este tipo de datos llamado cadena. 1210 00:58:22,290 --> 00:58:29,070 >> Pero en realidad son sólo cadenas una matriz de-- como char *. 1211 00:58:29,070 --> 00:58:32,330 Es un puntero a un montón de personajes que son contiguas en la memoria. 1212 00:58:32,330 --> 00:58:33,680 1213 00:58:33,680 --> 00:58:36,280 Así que este sólo establece que igual a cualquier cadena es 1214 00:58:36,280 --> 00:58:38,980 identificado por donde su primer personaje. 1215 00:58:38,980 --> 00:58:42,710 Así que esto se acaba poniendo algún momento igual al principio de la cadena. 1216 00:58:42,710 --> 00:58:44,130 Todo el mundo bien allí? 1217 00:58:44,130 --> 00:58:44,960 Enfriar. 1218 00:58:44,960 --> 00:58:49,840 >> Así que esta es nuestra eliminación de referencias de puntero. 1219 00:58:49,840 --> 00:58:53,760 Así que en realidad va a darnos algún valor aquí, 1220 00:58:53,760 --> 00:58:55,610 en nuestra cadena que estamos hablando. 1221 00:58:55,610 --> 00:58:58,342 Y estamos diciendo todo el tiempo que no es nulo terminador. 1222 00:58:58,342 --> 00:59:00,550 Así que seguir adelante hasta llegar al final de la cadena. 1223 00:59:00,550 --> 00:59:02,180 1224 00:59:02,180 --> 00:59:04,190 Actualice su puntero por uno. 1225 00:59:04,190 --> 00:59:09,250 Así r, se actualizará en realidad por uno cada vez, porque este es un char, 1226 00:59:09,250 --> 00:59:09,820 el char *. 1227 00:59:09,820 --> 00:59:10,930 1228 00:59:10,930 --> 00:59:12,340 >> Así que va a pasar. 1229 00:59:12,340 --> 00:59:13,290 Se va a actualizar. 1230 00:59:13,290 --> 00:59:16,705 Así que la primera vez que esto pasa, que va a estar aquí a las h. 1231 00:59:16,705 --> 00:59:17,590 Se va a actualizar. 1232 00:59:17,590 --> 00:59:18,185 >> Va a ser un a. 1233 00:59:18,185 --> 00:59:21,310 Va a ser una p, y, y así sucesivamente y así sucesivamente. 1234 00:59:21,310 --> 00:59:22,300 Vamos a actualizar mostrador. 1235 00:59:22,300 --> 00:59:26,160 Cuando llega al final, sólo imprime hasta qué punto se ha vuelto. 1236 00:59:26,160 --> 00:59:27,550 1237 00:59:27,550 --> 00:59:28,050 Sí. 1238 00:59:28,050 --> 00:59:31,475 >> AUDIENCIA: Así Cuenta el espacio como uno, ¿verdad? 1239 00:59:31,475 --> 00:59:31,974 Okay. 1240 00:59:31,974 --> 00:59:34,294 1241 00:59:34,294 --> 00:59:35,222 >> ALTAVOZ 1: Piense en ello. 1242 00:59:35,222 --> 00:59:36,830 ¿Es eso una pregunta-- 1243 00:59:36,830 --> 00:59:37,746 >> AUDIENCIA: [inaudible]. 1244 00:59:37,746 --> 00:59:37,968 1245 00:59:37,968 --> 00:59:38,884 >> ALTAVOZ 1: No se preocupe. 1246 00:59:38,884 --> 00:59:39,720 1247 00:59:39,720 --> 00:59:42,736 Esto lo hago. 1248 00:59:42,736 --> 00:59:47,710 Muy bien, así que lo único que entender es que con una matriz, 1249 00:59:47,710 --> 00:59:51,736 también se puede tratar como un puntero porque matrices son sólo 1250 00:59:51,736 --> 00:59:52,860 manchas continuas de memoria. 1251 00:59:52,860 --> 00:59:53,970 1252 00:59:53,970 --> 00:59:56,380 >> Así que usted puede tratar de la misma manera. 1253 00:59:56,380 --> 00:59:59,000 Usted puede manipularlos con punteros, también. 1254 00:59:59,000 --> 01:00:04,770 Así que en vez de hacer, en este caso, la cosa análoga 1255 01:00:04,770 --> 01:00:07,490 sería array 0 es igual a 1. 1256 01:00:07,490 --> 01:00:08,760 1257 01:00:08,760 --> 01:00:15,210 >> Pero de la misma manera que una cadena se determina 1258 01:00:15,210 --> 01:00:18,740 por el inicio de dónde su primer personaje es, 1259 01:00:18,740 --> 01:00:22,270 una matriz está determinado por donde su primer elemento es. 1260 01:00:22,270 --> 01:00:25,120 Porque sabemos, estamos garantizado, que estos 1261 01:00:25,120 --> 01:00:27,985 van a ser continua bloques de memoria. 1262 01:00:27,985 --> 01:00:29,360 Eso es lo que nos permite hacer esto. 1263 01:00:29,360 --> 01:00:31,193 Sabemos que están continua bloques de memoria. 1264 01:00:31,193 --> 01:00:32,230 1265 01:00:32,230 --> 01:00:36,500 >> Así que en este caso, por eliminación de referencias sólo matriz, que nos dice: 1266 01:00:36,500 --> 01:00:40,800 Aceptar, vaya al inicio de su matriz, que está aquí. 1267 01:00:40,800 --> 01:00:42,640 Así que usted puede configurarlo igual a uno. 1268 01:00:42,640 --> 01:00:48,610 Y en este caso, sea cual sea su matriz tipo es, al actualizar por uno, 1269 01:00:48,610 --> 01:00:50,830 eso es igual que la actualización al siguiente índice. 1270 01:00:50,830 --> 01:00:52,760 1271 01:00:52,760 --> 01:00:56,360 Usted puede hacer eso porque usted saber lo que hay en la matriz. 1272 01:00:56,360 --> 01:00:59,770 Por lo tanto, sabe cuánto Actualiza tu puntero, 1273 01:00:59,770 --> 01:01:02,925 lo que la dirección de actualizarlo a tan que usted está en la siguiente ranura. 1274 01:01:02,925 --> 01:01:04,740 1275 01:01:04,740 --> 01:01:09,400 >> Así que esto es sólo una forma diferente de la escritura matriz 0 es igual a 1, 1276 01:01:09,400 --> 01:01:15,114 matriz 1 es igual a 2, serie el soporte 2 es igual a 3. 1277 01:01:15,114 --> 01:01:16,780 Es sólo otra manera de pensar en ello. 1278 01:01:16,780 --> 01:01:19,600 Debido a que son continuas bloques en memoria, 1279 01:01:19,600 --> 01:01:21,830 puede hacer referencia a ellos, ya sea por la matriz notation-- 1280 01:01:21,830 --> 01:01:24,390 que yo personalmente encontrar easier-- pero tal vez 1281 01:01:24,390 --> 01:01:27,347 que necesita para manipularlo estrictamente por las direcciones de memoria. 1282 01:01:27,347 --> 01:01:28,930 Y esta es la forma en que lo harías. 1283 01:01:28,930 --> 01:01:30,630 1284 01:01:30,630 --> 01:01:32,630 Algo así como una más de Lo bueno que podría hacer 1285 01:01:32,630 --> 01:01:35,213 frente a lo mejor no algo que te en realidad va a implementar. 1286 01:01:35,213 --> 01:01:36,960 1287 01:01:36,960 --> 01:01:38,630 >> Yo lo uso en el 61. 1288 01:01:38,630 --> 01:01:41,710 Ustedes probablemente no necesites que preocuparse demasiado. 1289 01:01:41,710 --> 01:01:43,693 Pero si usted está interesado, tener 61 años después. 1290 01:01:43,693 --> 01:01:45,269 1291 01:01:45,269 --> 01:01:46,560 Estamos en los chicos recta final. 1292 01:01:46,560 --> 01:01:47,510 Yo sé, es larga. 1293 01:01:47,510 --> 01:01:50,570 1294 01:01:50,570 --> 01:01:58,880 Memoria Dinámica Allocation-- así que sabemos que uno 1295 01:01:58,880 --> 01:02:01,790 de las cosas cuando hablamos durante nuestra primera sección juntos, 1296 01:02:01,790 --> 01:02:04,560 nos fijamos en un canje función de donde estaba 1297 01:02:04,560 --> 01:02:08,010 fuera del alcance de nuestra función principal. 1298 01:02:08,010 --> 01:02:14,370 Y estábamos pasando en estos valores que eran efectivamente copias. 1299 01:02:14,370 --> 01:02:20,570 >> Y una vez terminado de intercambio ejecución, que acaba de salir de una pila. 1300 01:02:20,570 --> 01:02:22,830 Recuerde que tenemos una apilar marco de intercambio. 1301 01:02:22,830 --> 01:02:26,070 Deja ya los los valores se van con él. 1302 01:02:26,070 --> 01:02:27,050 Y se fueron. 1303 01:02:27,050 --> 01:02:28,615 No podíamos hacer nada con ellos y nos entristeció 1304 01:02:28,615 --> 01:02:29,989 porque no podemos cambiar nuestros valores. 1305 01:02:29,989 --> 01:02:31,070 1306 01:02:31,070 --> 01:02:36,560 >> Pero con C, como ya he mencionado, que tener una gran cantidad de poder sobre la memoria. 1307 01:02:36,560 --> 01:02:43,310 Así que lo que puede hacer usted es puede asignar las cosas en el montón aquí 1308 01:02:43,310 --> 01:02:46,830 que se quedarán allí hasta usted les dice lo contrario. 1309 01:02:46,830 --> 01:02:48,280 >> Son como niños buenos. 1310 01:02:48,280 --> 01:02:49,150 Se quedan allí. 1311 01:02:49,150 --> 01:02:50,270 No dejan. 1312 01:02:50,270 --> 01:02:52,750 Se quedarán allí hasta que esté como, OK, puede irse. 1313 01:02:52,750 --> 01:02:55,920 >> Mientras que las cosas en la pila, que-- son como niños traviesos. 1314 01:02:55,920 --> 01:02:59,160 Ellos sólo huyen cuando desee estar allí y luego se van. 1315 01:02:59,160 --> 01:03:00,160 Usted no puede recuperarlos. 1316 01:03:00,160 --> 01:03:01,350 1317 01:03:01,350 --> 01:03:07,187 >> Así que el montón es-- vamos a hablar de malloc y libre, que 1318 01:03:07,187 --> 01:03:08,895 Estoy seguro de que los chicos oído hablar en la conferencia. 1319 01:03:08,895 --> 01:03:10,270 1320 01:03:10,270 --> 01:03:14,210 Y eso es básicamente una manera para tener datos muy persistentes. 1321 01:03:14,210 --> 01:03:18,920 Así que usted puede mantener los datos alrededor de todo el tiempo que quieras. 1322 01:03:18,920 --> 01:03:19,546 Mhm. 1323 01:03:19,546 --> 01:03:21,475 >> AUDIENCIA: ¿Puedes definir el montón y la pila? 1324 01:03:21,475 --> 01:03:24,030 ¿Son como lugares para poner las cosas? 1325 01:03:24,030 --> 01:03:26,630 >> ALTAVOZ 1: Así que son básicamente solo-- son 1326 01:03:26,630 --> 01:03:29,530 la forma en que nos referimos sólo a la memoria. 1327 01:03:29,530 --> 01:03:37,300 Así montón se coloca justo donde memoria se asigna de forma dinámica, 1328 01:03:37,300 --> 01:03:40,960 mientras que la pila se refiere más para marcos de pila 1329 01:03:40,960 --> 01:03:45,950 que son más central a la funciones que se ejecutan en realidad. 1330 01:03:45,950 --> 01:03:47,200 Usted realmente no tiene control. 1331 01:03:47,200 --> 01:03:50,690 >> La gran diferencia, usted tiene el control sobre el montón si quieres. 1332 01:03:50,690 --> 01:03:52,710 Usted tiene menos control sobre la pila. 1333 01:03:52,710 --> 01:03:55,030 La pila depende de la funciones que se están ejecutando, 1334 01:03:55,030 --> 01:03:58,320 y el orden en el que son funcionan, y cómo se devuelven las cosas. 1335 01:03:58,320 --> 01:04:01,290 Mientras que con el montón, como vamos a ver, se puede decir, 1336 01:04:01,290 --> 01:04:06,639 OK, yo quiero que este valor sea alrededor hasta que te diga lo contrario. 1337 01:04:06,639 --> 01:04:08,180 Usted no está autorizado a deshacerse de él. 1338 01:04:08,180 --> 01:04:09,300 Usted no está autorizado a anularlo. 1339 01:04:09,300 --> 01:04:11,675 Usted va a mantener en torno a durante el tiempo que yo te diga. 1340 01:04:11,675 --> 01:04:15,780 Tienes la oportunidad de ser el jefe en el montón, mientras que el stack-- tal vez si 1341 01:04:15,780 --> 01:04:18,080 como finagle su camino puede ser el jefe. 1342 01:04:18,080 --> 01:04:19,340 Pero no del todo. 1343 01:04:19,340 --> 01:04:20,480 1344 01:04:20,480 --> 01:04:22,070 Y no deja de ser la memoria. 1345 01:04:22,070 --> 01:04:24,260 Es sólo diferentes maneras de referirse a la memoria. 1346 01:04:24,260 --> 01:04:25,800 1347 01:04:25,800 --> 01:04:26,400 >> Enfriar. 1348 01:04:26,400 --> 01:04:28,630 Así que con eso, cómo controlar su memoria. 1349 01:04:28,630 --> 01:04:32,070 Es con malloc, que usted va a llegar a utilizar. 1350 01:04:32,070 --> 01:04:37,100 Así que es sólo a corto para la asignación de memoria. 1351 01:04:37,100 --> 01:04:38,459 Eso es todo lo que es. 1352 01:04:38,459 --> 01:04:41,250 Hay un montón de otras fresco funciones que tienen alloc al final, 1353 01:04:41,250 --> 01:04:42,750 y que representan diferentes cosas. 1354 01:04:42,750 --> 01:04:43,550 1355 01:04:43,550 --> 01:04:49,050 >> Así que cuando usted necesita de almacenamiento que necesita para sobrevivir a su función actual, de modo 1356 01:04:49,050 --> 01:04:51,010 que cuando su actual función huye, 1357 01:04:51,010 --> 01:04:55,774 usted todavía tiene los datos que tiene de él, que desea utilizar malloc. 1358 01:04:55,774 --> 01:04:57,190 Eso va a inicializar en el montón. 1359 01:04:57,190 --> 01:05:00,140 Y como he dicho y sigo diciendo, podrás mantenerlo allí 1360 01:05:00,140 --> 01:05:03,050 hasta que usted le indique lo contrario, que es lo importante aquí. 1361 01:05:03,050 --> 01:05:08,450 >> Así que una cosa a notar, y eso es por lo general muy importante, 1362 01:05:08,450 --> 01:05:13,620 es que este sizeof es super útil usar 1363 01:05:13,620 --> 01:05:16,440 ya que dependiendo del tipo de de la máquina que se está ejecutando, 1364 01:05:16,440 --> 01:05:22,470 puede tener cantidades variables de la memoria que se necesita. 1365 01:05:22,470 --> 01:05:26,870 Así que siempre se desea utilizar el tamaño de lo que que usted no es dependiente de la máquina, 1366 01:05:26,870 --> 01:05:30,300 para que su código será ejecutar en cualquier máquina. 1367 01:05:30,300 --> 01:05:32,360 >> Y eso es sólo parte de escribir buen código. 1368 01:05:32,360 --> 01:05:34,610 Si funciona en una máquina, pero no cualquiera de los otros, 1369 01:05:34,610 --> 01:05:36,440 ¿Qué tan útil fue su programa? 1370 01:05:36,440 --> 01:05:38,420 Así que uno siempre quiere asegúrese de usar y sizeof. 1371 01:05:38,420 --> 01:05:41,306 >> AUDIENCIA: ¿Así es que al igual que la tamaño de 10 pulgadas [inaudible]? 1372 01:05:41,306 --> 01:05:43,698 >> ALTAVOZ 1: Este es el tamaño de 10 enteros. 1373 01:05:43,698 --> 01:05:44,197 sí. 1374 01:05:44,197 --> 01:05:45,360 1375 01:05:45,360 --> 01:05:48,830 Así que el tamaño de enteros volverá cuánto puede uno tomar int. 1376 01:05:48,830 --> 01:05:51,530 O el tamaño de char, cómo Cuánto cuesta una sola toma Char. 1377 01:05:51,530 --> 01:05:54,150 Y a continuación, el número de bloques de que es lo que quieres? 1378 01:05:54,150 --> 01:05:57,590 >> Así que en este caso, queremos algo que podemos almacenar 10 enteros a. 1379 01:05:57,590 --> 01:06:00,240 Y va a trabajar independientemente de la máquina, lo cual es genial. 1380 01:06:00,240 --> 01:06:01,720 1381 01:06:01,720 --> 01:06:04,846 Entonces, ¿cuántos bytes que en realidad le dará? 1382 01:06:04,846 --> 01:06:06,190 Matemáticas rápida. 1383 01:06:06,190 --> 01:06:06,787 >> AUDIENCIA: 40. 1384 01:06:06,787 --> 01:06:07,370 ALTAVOZ 1: 40. 1385 01:06:07,370 --> 01:06:07,869 Exactamente. 1386 01:06:07,869 --> 01:06:09,520 1387 01:06:09,520 --> 01:06:12,030 Así que otra cosa grande. 1388 01:06:12,030 --> 01:06:14,840 Puntero o malloc pueden devolver null. 1389 01:06:14,840 --> 01:06:17,910 >> Así que de nuevo, siempre consulte a ver si se devuelve nulo 1390 01:06:17,910 --> 01:06:19,620 antes de tratar de hacer nada con ella. 1391 01:06:19,620 --> 01:06:23,430 1392 01:06:23,430 --> 01:06:27,350 Si tratas de eliminar la referencia este puntero ahora, 1393 01:06:27,350 --> 01:06:29,720 que sólo va a segfault porque te fuiste y probado 1394 01:06:29,720 --> 01:06:31,730 tocar nula cuando usted no debe tener. 1395 01:06:31,730 --> 01:06:34,000 Así que siempre comprobar nula. 1396 01:06:34,000 --> 01:06:36,075 Una vez más, todo lo que puede hacer. 1397 01:06:36,075 --> 01:06:38,300 1398 01:06:38,300 --> 01:06:39,720 >> Puede devolver null. 1399 01:06:39,720 --> 01:06:42,740 Se volverá nula si estás bien sin espacio, o por cualquier razón 1400 01:06:42,740 --> 01:06:44,350 se topó con algunos errores de memoria. 1401 01:06:44,350 --> 01:06:45,890 1402 01:06:45,890 --> 01:06:47,510 A veces sólo devuelve un valor nulo. 1403 01:06:47,510 --> 01:06:48,990 Así que sólo hay que comprobar para ello. 1404 01:06:48,990 --> 01:06:51,050 Eso es todo esta diapositiva está diciendo. 1405 01:06:51,050 --> 01:06:53,366 1406 01:06:53,366 --> 01:06:55,240 Y entonces lo que tenemos aquí es un llamado a liberar. 1407 01:06:55,240 --> 01:07:00,550 Así que de la misma manera que si abrir un archivo es necesario cerrar un archivo, 1408 01:07:00,550 --> 01:07:04,340 si la memoria malloc, que Debes liberarte de que la memoria. 1409 01:07:04,340 --> 01:07:06,530 Y ustedes van a conseguir para hacer cosas realmente cool. 1410 01:07:06,530 --> 01:07:09,624 >> Y hay un programa que se puede ejecutar a ver si alguna vez la fuga de memoria. 1411 01:07:09,624 --> 01:07:11,040 Pero usted no quiere perder memoria. 1412 01:07:11,040 --> 01:07:11,820 Es realmente malo. 1413 01:07:11,820 --> 01:07:13,191 1414 01:07:13,191 --> 01:07:15,020 A sólo estropear las cosas. 1415 01:07:15,020 --> 01:07:20,939 >> Es malo para hacer lo mismo que la programación sabio para la eficiencia del diseño. 1416 01:07:20,939 --> 01:07:22,980 Pero también es sólo un poco de malo para su equipo. 1417 01:07:22,980 --> 01:07:26,780 Así las cosas simplemente gratuitas cuando malloc ellos. 1418 01:07:26,780 --> 01:07:28,190 1419 01:07:28,190 --> 01:07:30,210 >> Ustedes ven el simetrías aquí. 1420 01:07:30,210 --> 01:07:31,180 Súper simple. 1421 01:07:31,180 --> 01:07:33,010 Apenas libre y luego cualquiera que sea el puntero, 1422 01:07:33,010 --> 01:07:34,843 cualquiera que sea el nombre de el puntero es, y 1423 01:07:34,843 --> 01:07:36,710 se encargará de liberar por usted. 1424 01:07:36,710 --> 01:07:38,200 1425 01:07:38,200 --> 01:07:38,700 Enfriar. 1426 01:07:38,700 --> 01:07:40,410 1427 01:07:40,410 --> 01:07:42,530 >> Luego tenemos esto. 1428 01:07:42,530 --> 01:07:44,770 Así que sólo vamos a caminar a través de este programa. 1429 01:07:44,770 --> 01:07:46,560 Y luego se hacen ustedes. 1430 01:07:46,560 --> 01:07:50,240 >> Así que [inaudible] sólo principal. 1431 01:07:50,240 --> 01:07:51,690 Así que tenemos un poco de puntero int *. 1432 01:07:51,690 --> 01:07:53,648 Así que tenemos un puntero eso va a celebrar enteros. 1433 01:07:53,648 --> 01:07:54,500 1434 01:07:54,500 --> 01:07:56,170 ¿Y cuántos enteros se va a celebrar? 1435 01:07:56,170 --> 01:07:57,400 1436 01:07:57,400 --> 01:07:58,170 Sólo una. 1437 01:07:58,170 --> 01:07:59,400 1438 01:07:59,400 --> 01:08:01,100 Tamaño de un int. 1439 01:08:01,100 --> 01:08:03,900 >> Verificamos si puntero es nulo porque 1440 01:08:03,900 --> 01:08:06,130 Es decir, queremos decir que no hacer nada. 1441 01:08:06,130 --> 01:08:07,065 Es malo. 1442 01:08:07,065 --> 01:08:08,130 1443 01:08:08,130 --> 01:08:12,130 Así es la impresión de un cierto error de memoria, lo más a menudo regresan 1, 1444 01:08:12,130 --> 01:08:14,260 como ustedes están acostumbrados. 1445 01:08:14,260 --> 01:08:17,390 >> Y luego tenemos aquí, eliminar la referencia de nuestro puntero. 1446 01:08:17,390 --> 01:08:22,840 Así que eso significa que vamos a almacenar algo en el lugar que nos ha dado. 1447 01:08:22,840 --> 01:08:24,350 1448 01:08:24,350 --> 01:08:30,830 Int * puntero, o malloc, devuelve el dirección de donde a un lado este 1449 01:08:30,830 --> 01:08:31,750 memoria para usted. 1450 01:08:31,750 --> 01:08:32,830 1451 01:08:32,830 --> 01:08:34,800 Así que es básicamente dándole como-- si 1452 01:08:34,800 --> 01:08:38,149 pensar en un montón de casas en un barrio 1453 01:08:38,149 --> 01:08:40,640 que usted quiere poner sus muebles en, malloc 1454 01:08:40,640 --> 01:08:43,850 es como Aceptar, se obtiene para ir a la casa de tres. 1455 01:08:43,850 --> 01:08:45,800 Y es que la da dirección de la casa de tres. 1456 01:08:45,800 --> 01:08:48,775 >> Así que esto ahora mismo, esta tiendas puntero una dirección, 1457 01:08:48,775 --> 01:08:50,149 almacena la dirección de su casa. 1458 01:08:50,149 --> 01:08:51,470 1459 01:08:51,470 --> 01:08:54,640 * medios PTR, OK, estoy en mi casa. 1460 01:08:54,640 --> 01:08:55,326 Enfriar. 1461 01:08:55,326 --> 01:08:56,580 Necesito conseguir algún entero. 1462 01:08:56,580 --> 01:08:59,229 >> Así que usted está pidiendo a alguien para darle muebles ahora. 1463 01:08:59,229 --> 01:09:00,430 Para que pueda obtener algún int. 1464 01:09:00,430 --> 01:09:05,100 Y lo pone en el puntero donde está señalando. 1465 01:09:05,100 --> 01:09:08,670 >> Y entonces, sólo se imprime a cabo, siempre que sea introducida. 1466 01:09:08,670 --> 01:09:11,060 Y de nuevo, la referencia. 1467 01:09:11,060 --> 01:09:15,649 Así que esto es como usted fue a esta DIRECCIÓN Y usted vio lo que había allí. 1468 01:09:15,649 --> 01:09:17,120 1469 01:09:17,120 --> 01:09:17,630 Fresco? 1470 01:09:17,630 --> 01:09:20,174 >> Y luego, por supuesto, nos liberamos de nuestro puntero. 1471 01:09:20,174 --> 01:09:21,590 No se olvide de liberar el puntero. 1472 01:09:21,590 --> 01:09:22,933 No se olvide de comprobar la nula. 1473 01:09:22,933 --> 01:09:24,349 No se olvide de liberar el puntero. 1474 01:09:24,349 --> 01:09:27,270 Usted tiene dos cosas que usted recuerda de esto, o que usted debe recordar. 1475 01:09:27,270 --> 01:09:27,770 Sí. 1476 01:09:27,770 --> 01:09:31,590 AUDIENCIA: [inaudible] cosas así, el char * s. 1477 01:09:31,590 --> 01:09:33,760 ¿Cómo es que nunca liberamos esos? 1478 01:09:33,760 --> 01:09:34,529 >> ALTAVOZ 1: Hm? 1479 01:09:34,529 --> 01:09:36,450 >> AUDIENCIA: ¿Son aquellos que, como cuerdas? 1480 01:09:36,450 --> 01:09:39,160 Usted dijo que las cadenas son al igual que char * s, ¿no? 1481 01:09:39,160 --> 01:09:41,200 Entonces, ¿por qué no nos liberamos cadenas? 1482 01:09:41,200 --> 01:09:43,204 >> ALTAVOZ 1: Sólo para libre si usted está mallocing. 1483 01:09:43,204 --> 01:09:44,620 AUDIENCIA: ¡Oh, si usted está mallocing. 1484 01:09:44,620 --> 01:09:47,399 ALTAVOZ 1: Así que malloc y libre son dos cosas 1485 01:09:47,399 --> 01:09:49,000 que siempre se debe tener juntos. 1486 01:09:49,000 --> 01:09:51,630 f abierto, cerca de f, dos cosas usted debe tener juntos. 1487 01:09:51,630 --> 01:09:54,471 En ambos casos, para comprobar nula. 1488 01:09:54,471 --> 01:09:54,971 Sí. 1489 01:09:54,971 --> 01:09:57,130 >> AUDIENCIA: Así es libre sólo permitiendo algo más 1490 01:09:57,130 --> 01:09:59,690 para ser almacenados allí después de este programa lo ha utilizado? 1491 01:09:59,690 --> 01:10:01,946 >> ALTAVOZ 1: Se acaba diciendo: Bueno, he terminado con esto. 1492 01:10:01,946 --> 01:10:03,320 No es necesario para mantenerlo alrededor. 1493 01:10:03,320 --> 01:10:05,340 1494 01:10:05,340 --> 01:10:08,190 De lo contrario, el equipo lo hará Al igual que tratar de mantenerlo allí. 1495 01:10:08,190 --> 01:10:10,910 Y entonces usted can't-- se ejecuta en problemas de memoria más adelante. 1496 01:10:10,910 --> 01:10:13,660 Uno siempre quiere liberarlo porque que le dice a su equipo, está bien, estoy 1497 01:10:13,660 --> 01:10:15,190 hecho con este lugar de la memoria. 1498 01:10:15,190 --> 01:10:17,190 Usted puede tener que volver para mí a usar más tarde. 1499 01:10:17,190 --> 01:10:19,250 1500 01:10:19,250 --> 01:10:20,500 Fresco? 1501 01:10:20,500 --> 01:10:21,320 Sí. 1502 01:10:21,320 --> 01:10:26,950 >> AUDIENCIA: Así que usamos el% d sólo porque un doble que va a volver, 1503 01:10:26,950 --> 01:10:28,330 o por qué es-- [inaudible]. 1504 01:10:28,330 --> 01:10:30,170 1505 01:10:30,170 --> 01:10:31,620 >> AUDIENCIA: ¿Se puede utilizar% i? 1506 01:10:31,620 --> 01:10:32,760 >> ALTAVOZ 1: Puede utilizar% i. 1507 01:10:32,760 --> 01:10:35,052 1508 01:10:35,052 --> 01:10:36,135 Para cualquier duda de última hora? 1509 01:10:36,135 --> 01:10:38,310 1510 01:10:38,310 --> 01:10:38,985 Seguir adelante. 1511 01:10:38,985 --> 01:10:40,610 AUDIENCIA: Sólo tengo una pregunta rápida. 1512 01:10:40,610 --> 01:10:50,200 Así que la variable ptr, Eso es-- como, con la int * ptr = malloc, 1513 01:10:50,200 --> 01:10:54,142 eso es sólo diciendo que es apuntando a un lugar en memory-- 1514 01:10:54,142 --> 01:10:55,600 ALTAVOZ 1: ¿Quieres [inaudible]? 1515 01:10:55,600 --> 01:10:58,050 AUDIENCIA: --que es la tamaño de-- no, está bien. 1516 01:10:58,050 --> 01:11:01,292 Pero es sólo apuntando a un lugar en memoria que es como cuatro bytes. 1517 01:11:01,292 --> 01:11:02,000 ALTAVOZ 1: Derecho. 1518 01:11:02,000 --> 01:11:03,030 1519 01:11:03,030 --> 01:11:07,070 Así malloc el tamaño de int dice, OK, yo voy a ir a correr fuera, 1520 01:11:07,070 --> 01:11:08,780 encontrar cuatro bytes de memoria para usted. 1521 01:11:08,780 --> 01:11:10,700 Cuando encuentra que cuatro bytes de la memoria, 1522 01:11:10,700 --> 01:11:14,030 le da una copia de la dirección de donde empieza, 1523 01:11:14,030 --> 01:11:16,160 y eso es lo que almacena en puntero, o PTR. 1524 01:11:16,160 --> 01:11:17,510 1525 01:11:17,510 --> 01:11:18,010 Bueno. 1526 01:11:18,010 --> 01:11:18,742 1527 01:11:18,742 --> 01:11:21,700 Ustedes miran menos confusa que la mayoría la gente cuando hablo de puntero, 1528 01:11:21,700 --> 01:11:23,670 así que me siento muy bien en este momento. 1529 01:11:23,670 --> 01:11:24,520 >> Bien. 1530 01:11:24,520 --> 01:11:27,960 Como siempre, ustedes deben tener todos conseguido sus calificaciones PSet2 por ahora. 1531 01:11:27,960 --> 01:11:32,769 Sé que ha habido una cierta wonky cosas donde dice, fórmula no es válida 1532 01:11:32,769 --> 01:11:33,310 o algo así. 1533 01:11:33,310 --> 01:11:36,166 Si usted está consiguiendo que, todos sus calificaciones son válidas de mi lado. 1534 01:11:36,166 --> 01:11:38,040 Así que te puedo enviar capturas de pantalla de tus calificaciones. 1535 01:11:38,040 --> 01:11:39,011 1536 01:11:39,011 --> 01:11:41,760 Sólo déjame saber así si eres falta ningún grados o algo 1537 01:11:41,760 --> 01:11:43,060 no parece tener sentido. 1538 01:11:43,060 --> 01:11:43,720 Ven a mí. 1539 01:11:43,720 --> 01:11:44,830 1540 01:11:44,830 --> 01:11:48,830 >> He estado muy orgulloso de ti chicos ya, así que sigan así. 1541 01:11:48,830 --> 01:11:50,640 Y tener un buen descanso de la semana. 1542 01:11:50,640 --> 01:11:53,440 Estoy seguro de que voy a ver un poco de de que en horas de oficina. 1543 01:11:53,440 --> 01:11:55,414