1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON HIRSCHHORN: Bienvenido a A5, todo el mundo. 3 00:00:07,820 --> 00:00:11,270 Tenemos una semana emocionante por delante de nosotros, sobre todo porque hay muchos nuevos 4 00:00:11,270 --> 00:00:12,350 se enfrenta en esta habitación. 5 00:00:12,350 --> 00:00:12,920 Es maravilloso. 6 00:00:12,920 --> 00:00:15,740 Muchos de ustedes están aquí por accidente, que es aún mejor. 7 00:00:15,740 --> 00:00:18,220 Así que espero que usted guardará acompañarnos. 8 00:00:18,220 --> 00:00:20,220 >> Esta semana vamos a gastar el grueso de la sección 9 00:00:20,220 --> 00:00:21,870 la preparación para el examen. 10 00:00:21,870 --> 00:00:26,580 Así que por nuestro programa, vamos a hablar un poco acerca de los recursos para la clase, 11 00:00:26,580 --> 00:00:30,350 pero también para la prueba y, a continuación, de nuevo, pasar la mayor parte de la clase de conversación 12 00:00:30,350 --> 00:00:31,390 sobre las preguntas. 13 00:00:31,390 --> 00:00:33,900 Una vez que hemos terminado de contestar su preguntas, o si sus preguntas 14 00:00:33,900 --> 00:00:39,010 naturalmente nos llevan a algo de código, yo tener problemas de muestra de exámenes parciales 15 00:00:39,010 --> 00:00:43,180 pasado que vamos a codificar en directo en la sección juntos que también aparezca algún otro 16 00:00:43,180 --> 00:00:45,420 buenos temas a cubrir. 17 00:00:45,420 --> 00:00:48,280 >> Así que en primer lugar, como hemos pasado por el último par de semanas para recordarle 18 00:00:48,280 --> 00:00:51,700 chicos, hay un montón de recursos disponible para este curso. 19 00:00:51,700 --> 00:00:55,020 Muchos de ellos serán muy útiles a usted como usted continúa 20 00:00:55,020 --> 00:00:57,280 estudiar para prueba 0, porque Es martes por la tarde. 21 00:00:57,280 --> 00:00:59,630 Así que todos ustedes han sido estudiar un poco. 22 00:00:59,630 --> 00:01:02,640 >> Hay notas de clase y de la fuente código que debe 23 00:01:02,640 --> 00:01:04,050 sin duda la salida. 24 00:01:04,050 --> 00:01:05,019 Mira los pantalones cortos. 25 00:01:05,019 --> 00:01:07,470 Echa un vistazo a study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Y entonces, se enumeran a continuación, un número de otros recursos. 27 00:01:11,770 --> 00:01:14,020 >> Una vez más, el concurso es mañana 0 en uno. 28 00:01:14,020 --> 00:01:18,230 Si no lo ha hecho, compruebe Acerca de la Prueba 0 documento sobre la 29 00:01:18,230 --> 00:01:21,370 página de inicio del curso para averiguar donde usted está tomando el examen. 30 00:01:21,370 --> 00:01:25,770 El concurso comienza a las 1:10 y termina 70 minutos después. 31 00:01:25,770 --> 00:01:29,610 Así que si usted se presenta después de la 01:10, eres va a conseguir que muchos menos minutos 32 00:01:29,610 --> 00:01:30,940 del 70 para tomar la prueba. 33 00:01:30,940 --> 00:01:33,570 Así que asegúrate de que estás a tiempo. 34 00:01:33,570 --> 00:01:38,690 Si usted es un estudiante de extensión o tener algunas otras consideraciones de prueba, se 35 00:01:38,690 --> 00:01:40,400 podría no estar en una mañana. 36 00:01:40,400 --> 00:01:43,540 Pero, de nuevo, compruebe el Quiz 0 documento para asegurarse de que usted sabe cuándo 37 00:01:43,540 --> 00:01:44,760 usted está tomando el examen. 38 00:01:44,760 --> 00:01:46,440 Escribí 75 minutos aquí. 39 00:01:46,440 --> 00:01:48,580 Creo que eso es correcto, no 70. 40 00:01:48,580 --> 00:01:53,420 >> Cubre todo el material de una semana 0 a la conferencia de la semana pasada, el miércoles. 41 00:01:53,420 --> 00:01:59,350 Y de nuevo, para este concurso, por que documento, se obtiene una doble cara y 8 42 00:01:59,350 --> 00:02:03,770 1/2 por 11 hoja de papel que se obtiene para utilizar como notas durante el examen. 43 00:02:03,770 --> 00:02:08,570 Mucha gente, si no la mayoría de las personas, tienen encontrado que la manera más útil solo 44 00:02:08,570 --> 00:02:11,970 para estudiar para el examen es hacer una hoja de estudio, un 45 00:02:11,970 --> 00:02:13,730 uno-sider, de los suyos. 46 00:02:13,730 --> 00:02:17,710 Así que busque en los últimos si usted ha visto los pasados. 47 00:02:17,710 --> 00:02:19,960 Llegar a los amigos para ver lo que que están poniendo en el suyo. 48 00:02:19,960 --> 00:02:23,610 >> Pero, de lejos, la mejor manera posible estudio es ir a través de todo y 49 00:02:23,610 --> 00:02:26,530 reducir gradualmente hacia abajo a lo que deben o no pertenece a esa hoja de 50 00:02:26,530 --> 00:02:30,570 papel, porque eso es sólo una realidad forma útil para que usted pueda asegurarse 51 00:02:30,570 --> 00:02:33,620 usted va a través de todo y tener cierta familiaridad con él. 52 00:02:33,620 --> 00:02:36,690 La mayoría de la gente, nos encontramos, a pesar de que tienen la hoja de papel sentado justo 53 00:02:36,690 --> 00:02:39,840 junto a ellos en el cuestionario, no encienda a ella, porque, de nuevo, que muy 54 00:02:39,840 --> 00:02:43,290 proceso de ir a través de la información ha ayudado a que se lo aprendan. 55 00:02:43,290 --> 00:02:45,370 >> ¿Alguien tiene alguna pregunta sobre concurso de 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Tiene a todo el mundo - 58 00:02:51,450 --> 00:02:53,230 Yo no voy a hacer a mano alzada. 59 00:02:53,230 --> 00:02:53,550 No importa. 60 00:02:53,550 --> 00:02:54,790 Yo iba a preguntar quién comenzó a estudiar. 61 00:02:54,790 --> 00:02:58,360 Pero yo no quiero hacerte todo no levanten la mano. 62 00:02:58,360 --> 00:03:01,290 Así que como he dicho - sí, Avi, adelante. 63 00:03:01,290 --> 00:03:04,205 >> AVI: ¿Cuál sería una cosa útil para poner en el de un localizador? 64 00:03:04,205 --> 00:03:05,875 >> ESTUDIANTE: Eso depende de usted. 65 00:03:05,875 --> 00:03:08,210 >> JASON HIRSCHHORN: Usted recibe utilizar su juicio. 66 00:03:08,210 --> 00:03:13,220 Cosas útiles para poner en el de un localizador, si usted está confundido acerca de la gran O 67 00:03:13,220 --> 00:03:17,510 tiempo de ejecución de diferentes tipos de búsquedas y tipo, que ponen en allí en un 68 00:03:17,510 --> 00:03:18,760 gráfica excelente práctico. 69 00:03:18,760 --> 00:03:22,250 De esa manera, si se le pide que en el concurso, que no es necesario para tratar de la figura 70 00:03:22,250 --> 00:03:23,560 hacia fuera o la razón a través del tiempo de ejecución. 71 00:03:23,560 --> 00:03:24,730 Usted puede simplemente copiar hacia abajo. 72 00:03:24,730 --> 00:03:28,320 Si nos fijamos en los concursos pasado, una gran cantidad de veces, no está corriendo cuestiones de tiempo. 73 00:03:28,320 --> 00:03:34,150 Así que sería un ejemplo de una buena cosa que poner en su uno-pager. 74 00:03:34,150 --> 00:03:37,450 >> Otras cosas buenas de poner, si eres confundidos acerca de cómo declarar una 75 00:03:37,450 --> 00:03:40,570 función o lo que las diferentes partes de la declaración de la función son, escribir 76 00:03:40,570 --> 00:03:43,400 que allí, una versión genérica y luego tal vez un ejemplo. 77 00:03:43,400 --> 00:03:47,290 Si usted está confundido acerca de los punteros, un diagrama de cómo punteros trabajo es 78 00:03:47,290 --> 00:03:48,660 probablemente de gran ayuda. 79 00:03:48,660 --> 00:03:52,440 Si usted está confundido acerca de la recursividad, un degustar función recursiva allí 80 00:03:52,440 --> 00:03:54,980 También podría llegar a ser realmente útil. 81 00:03:54,980 --> 00:03:57,290 ¿Eso le da algunas ideas? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Es necesario comprender la proceso de compilación de todo, al igual que 83 00:04:01,820 --> 00:04:03,220 cómo funciona todo? 84 00:04:03,220 --> 00:04:06,620 >> JASON HIRSCHHORN: Todo que ha sido cubierto podría 85 00:04:06,620 --> 00:04:08,060 aparecer en el cuestionario. 86 00:04:08,060 --> 00:04:08,930 Preguntas - 87 00:04:08,930 --> 00:04:11,300 pero de nuevo, algunas cosas serán ponderada fuertemente que otros. 88 00:04:11,300 --> 00:04:14,330 Algunas cosas han llegado de nuevo y otra vez en clase, en 89 00:04:14,330 --> 00:04:15,590 conferencia, y la sección. 90 00:04:15,590 --> 00:04:17,220 Otras cosas que no tienen llegar a esa frecuencia. 91 00:04:17,220 --> 00:04:22,900 >> Hemos hablado mucho acerca de # include y -L algo y lo que significa en los 92 00:04:22,900 --> 00:04:24,390 el proceso de compilación. 93 00:04:24,390 --> 00:04:29,120 Hemos hablado mucho sobre GDB, se aferran, los diferentes indicadores que utilizamos cuando 94 00:04:29,120 --> 00:04:33,100 compilamos algo, y lo que make15, por ejemplo, de verdad 95 00:04:33,100 --> 00:04:34,510 significa y realmente lo hace. 96 00:04:34,510 --> 00:04:38,110 No hemos hablar tanto sobre cada paso individual en 97 00:04:38,110 --> 00:04:39,240 el proceso de compilación. 98 00:04:39,240 --> 00:04:40,410 Todavía hemos hablado de ello. 99 00:04:40,410 --> 00:04:42,550 Así que es algo que todavía le debe estar familiarizado. 100 00:04:42,550 --> 00:04:44,610 Pero de nuevo, no vamos a ser - 101 00:04:44,610 --> 00:04:49,140 las cosas que se presentan con más frecuencia en la clase tienen más probabilidades de llegar a más 102 00:04:49,140 --> 00:04:52,495 a menudo y ser más fuertemente ponderada en el cuestionario. 103 00:04:52,495 --> 00:04:53,280 >> Genial. 104 00:04:53,280 --> 00:04:54,580 ¿Alguna otra pregunta sobre concurso 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> Aceptar, por lo que poner una lista de temas en la pizarra. 107 00:05:00,050 --> 00:05:01,550 Fui a través del plan de estudios. 108 00:05:01,550 --> 00:05:07,340 Fui a través de la sección de revisión de ayer por la noche y los toboganes para llegar 109 00:05:07,340 --> 00:05:13,710 con una lista no exhaustiva de temas que hemos cubierto hasta ahora en CS50 110 00:05:13,710 --> 00:05:16,800 y las cosas que podrían aparecer en el cuestionario. 111 00:05:16,800 --> 00:05:19,900 Así que no voy a ir a través de todos y cada uno de ellos. 112 00:05:19,900 --> 00:05:22,370 Eso tomaría mucho más tiempo de lo que tenemos ahora. 113 00:05:22,370 --> 00:05:26,880 Pero pongo esto aquí con la esperanza de jog su memoria en cuanto a las cosas que pueden 114 00:05:26,880 --> 00:05:28,420 o no ser tan familiar con usted. 115 00:05:28,420 --> 00:05:32,850 >> Y me encantaría que pasar la mayor parte de sección de responder sus preguntas sobre 116 00:05:32,850 --> 00:05:35,130 estos temas, temas que no están cubiertos aquí. 117 00:05:35,130 --> 00:05:36,130 Podemos escribir pseudocódigo. 118 00:05:36,130 --> 00:05:40,010 Podemos escribir código real para asegurarse de que - 119 00:05:40,010 --> 00:05:44,280 Yo puedo responder a su pregunta y ayudar Cualquier persona puede entender fundamentalmente un 120 00:05:44,280 --> 00:05:48,330 Muchos de estos temas para que te sientas preparado y cómodo ir en 121 00:05:48,330 --> 00:05:50,150 la mañana cuestionario. 122 00:05:50,150 --> 00:05:52,300 Así que lea la lista. 123 00:05:52,300 --> 00:05:54,780 Usted ojalá haya llegado a la sección de con algunas preguntas. 124 00:05:54,780 --> 00:05:58,480 Cuando esté listo, levante la mano y vamos a empezar. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Tenga en cuenta, las preguntas que tienen, no hay preguntas estúpidas. 127 00:06:05,200 --> 00:06:06,250 Hemos oído hablar mucho de eso. 128 00:06:06,250 --> 00:06:09,490 Y las preguntas que tenga, estoy dispuesto apostar, muchas otras personas, tanto 129 00:06:09,490 --> 00:06:11,740 aquí sentado y viendo línea tienen también. 130 00:06:11,740 --> 00:06:13,770 Por lo que sólo puede ayudar a la gente haciendo preguntas. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Entre la pila y el montón, ¿hay un pre-asignado 133 00:06:18,040 --> 00:06:22,880 porcentaje de memoria que se define como esto es para la pila o en el montón? 134 00:06:22,880 --> 00:06:25,010 O ¿cómo funciona eso, exactamente? 135 00:06:25,010 --> 00:06:26,230 >> JASON HIRSCHHORN: Muy buena pregunta. 136 00:06:26,230 --> 00:06:28,640 Voy a respaldar rastrear un poco. 137 00:06:28,640 --> 00:06:30,910 ¿Tiene todo el mundo - 138 00:06:30,910 --> 00:06:31,660 por favor sea honesto aquí. 139 00:06:31,660 --> 00:06:34,130 Sé que te estoy pidiendo que levanten la mano delante de sus compañeros. 140 00:06:34,130 --> 00:06:38,510 Pero hay personas que se sienten incómodo con la pila y el montón 141 00:06:38,510 --> 00:06:42,980 y le gustaría ir otra vez que y lo que los quiere decir? 142 00:06:42,980 --> 00:06:43,880 Levanten la mano si - 143 00:06:43,880 --> 00:06:44,420 Aceptar. 144 00:06:44,420 --> 00:06:45,120 Gracias. 145 00:06:45,120 --> 00:06:48,420 Así que vamos a ir a la pila y el montón muy rápidamente y luego 146 00:06:48,420 --> 00:06:50,370 pasar a responder a su pregunta. 147 00:06:50,370 --> 00:06:58,250 >> Así que si dibujamos una caja para representar memoria en el equipo, ¿cuáles son algunas 148 00:06:58,250 --> 00:07:02,160 cosas que van en este cuadro? 149 00:07:02,160 --> 00:07:03,630 Principal. 150 00:07:03,630 --> 00:07:04,020 Una función principal. 151 00:07:04,020 --> 00:07:05,890 ¿A dónde va principal? 152 00:07:05,890 --> 00:07:08,090 >> ESTUDIANTE: [inaudible]. 153 00:07:08,090 --> 00:07:09,390 >> JASON HIRSCHHORN: Así que vamos a puesto principal aquí. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 ¿Qué otra cosa va en esta caja? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> ESTUDIANTE: Las funciones a las que llama. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Las funciones que llamamos. 159 00:07:19,020 --> 00:07:20,440 Y ¿a dónde van? 160 00:07:20,440 --> 00:07:21,300 >> ESTUDIANTE: En la pila. 161 00:07:21,300 --> 00:07:22,380 >> JASON HIRSCHHORN: Ellos ir en la pila. 162 00:07:22,380 --> 00:07:27,350 Así que vamos a llamar a este cosa aquí abajo la pila. 163 00:07:27,350 --> 00:07:31,880 Y encima de la tapa, tenemos el montón. 164 00:07:31,880 --> 00:07:35,450 Así, la memoria no es un cuadro como este. 165 00:07:35,450 --> 00:07:37,330 Pero en realidad es bastante similar. 166 00:07:37,330 --> 00:07:40,840 Va a haber un montón de cajas de más de y otra, dependiendo de cuán grande es su 167 00:07:40,840 --> 00:07:43,730 computadora es o qué tan grande es su memoria. 168 00:07:43,730 --> 00:07:46,950 >> En el entre comillas "de abajo" es la pila. 169 00:07:46,950 --> 00:07:50,880 Y hay varias cosas que van a la pila. 170 00:07:50,880 --> 00:07:53,840 Y aquellos dependen de las funciones que tiene en su código. 171 00:07:53,840 --> 00:07:57,780 Usted siempre tiene una función en su código llama principal, así que siempre hay una 172 00:07:57,780 --> 00:08:00,480 sección aquí en el apilar dedicado a la principal. 173 00:08:00,480 --> 00:08:03,980 >> Estas secciones de la pila se llaman marcos de pila. 174 00:08:03,980 --> 00:08:09,580 Cuando se llama a otra función, digamos principal llama a una función de búsqueda binaria, 175 00:08:09,580 --> 00:08:11,075 ponemos otro marco en la pila. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Más concretamente, vamos a donar un trozo de memoria en nuestra 178 00:08:17,320 --> 00:08:22,960 equipo para almacenar de búsqueda binaria locales variables y para ejecutar el binario 179 00:08:22,960 --> 00:08:24,150 código de búsqueda. 180 00:08:24,150 --> 00:08:26,810 >> Así que llamamos a la búsqueda binaria. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 En este trozo de memoria, vamos para almacenar sus variables locales. 183 00:08:33,340 --> 00:08:35,270 Vamos a almacenar sus llamadas printf. 184 00:08:35,270 --> 00:08:38,159 Pase lo que pase, que la función es va a ser almacenado allí. 185 00:08:38,159 --> 00:08:40,350 La búsqueda binaria va a ejecutar. 186 00:08:40,350 --> 00:08:42,210 Se va a completar la ejecución. 187 00:08:42,210 --> 00:08:47,450 ¿Cuál es la palabra en C que significa que una función debe 188 00:08:47,450 --> 00:08:49,306 completar su ejecución? 189 00:08:49,306 --> 00:08:50,040 >> ESTUDIANTE: Retorno. 190 00:08:50,040 --> 00:08:50,870 >> JASON HIRSCHHORN: Return. 191 00:08:50,870 --> 00:08:53,230 Así que cada vez que vea una sentencia return, los extremos de función 192 00:08:53,230 --> 00:08:54,350 cuando llegue a eso. 193 00:08:54,350 --> 00:08:56,740 Así que la búsqueda binaria llegará a su devolución. 194 00:08:56,740 --> 00:09:01,360 Esta parte de la memoria será esencialmente ser liberado. 195 00:09:01,360 --> 00:09:03,510 Y principal volverá a su ejecución. 196 00:09:03,510 --> 00:09:07,240 Así principal hará una pausa donde estaba, llame al búsqueda binaria, conseguir algo de valor de retorno, 197 00:09:07,240 --> 00:09:08,700 y continuar la ejecución. 198 00:09:08,700 --> 00:09:10,840 Este marco de pila se irá. 199 00:09:10,840 --> 00:09:14,810 >> Si llamamos a una función recursiva, que es una función que llama a sí mismo sobre 200 00:09:14,810 --> 00:09:18,480 y otra vez, puede ser que consigamos - decimos que hicieron de búsqueda binaria recursiva. 201 00:09:18,480 --> 00:09:21,520 Podríamos llegar búsqueda binaria versión uno, búsqueda binaria dos, búsqueda binaria 202 00:09:21,520 --> 00:09:24,090 tres, búsqueda binaria cuatro, búsqueda binaria cinco. 203 00:09:24,090 --> 00:09:27,950 Y a continuación, esta final de búsqueda binaria de cinco llegará el caso base, y la pila 204 00:09:27,950 --> 00:09:31,010 marcos volverán y mantener el cierre hasta que volvamos a principal. 205 00:09:31,010 --> 00:09:32,530 Podemos repasar la recursividad en un rato. 206 00:09:32,530 --> 00:09:35,530 Pero todo esto es decir, si usted es llamar a múltiples funciones a la vez, 207 00:09:35,530 --> 00:09:39,250 habrá múltiples pila marcos de la pila. 208 00:09:39,250 --> 00:09:42,900 >> El montón, por otro lado, hasta aquí, no es para funciones, 209 00:09:42,900 --> 00:09:44,380 no para las variables locales. 210 00:09:44,380 --> 00:09:48,920 Es para asignar dinámicamente variables. 211 00:09:48,920 --> 00:09:57,210 Así que estas son variables que pueden ser inicializado en ya sea principal o una 212 00:09:57,210 --> 00:09:58,640 función que principales llamadas. 213 00:09:58,640 --> 00:10:00,790 En cualquier parte de su código, que puede ser inicializado. 214 00:10:00,790 --> 00:10:04,360 Y para inicializar una forma dinámica la variable asignada. 215 00:10:04,360 --> 00:10:06,970 ¿Qué función en C usamos? 216 00:10:06,970 --> 00:10:07,600 >> ESTUDIANTE: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON HIRSCHHORN: Malloc. 218 00:10:09,240 --> 00:10:10,800 Usted llama a malloc. 219 00:10:10,800 --> 00:10:12,260 Usted obtiene un espacio de memoria. 220 00:10:12,260 --> 00:10:15,020 Y que el espacio de memoria está en el montón. 221 00:10:15,020 --> 00:10:18,840 Y ese espacio de memoria se queda allí hasta que llame de forma gratuita. 222 00:10:18,840 --> 00:10:22,670 >> Así las variables asignadas dinámicamente en heap existirá durante todo el tiempo que 223 00:10:22,670 --> 00:10:25,250 queremos que existan, y no lo harán desaparecerá hasta que explícitamente 224 00:10:25,250 --> 00:10:26,760 decirles que se vayan. 225 00:10:26,760 --> 00:10:29,670 Puede crearlos en una función. 226 00:10:29,670 --> 00:10:31,930 Pila de esa función marco se irá. 227 00:10:31,930 --> 00:10:35,490 Pero esa variable seguirá existiendo en el montón hasta que se libera, 228 00:10:35,490 --> 00:10:39,650 potencialmente por la función que llamó búsqueda binaria o lo que sea. 229 00:10:39,650 --> 00:10:42,580 >> Así que esas variables montón quedan allí durante el tiempo que usted desea 230 00:10:42,580 --> 00:10:43,490 que se queden allí. 231 00:10:43,490 --> 00:10:46,090 Y ellos consiguen puestos aquí. 232 00:10:46,090 --> 00:10:47,450 Y luego el siguiente se puso en su lugar. 233 00:10:47,450 --> 00:10:50,210 Siguen siendo rellenado, y permanecer allí hasta que llame de forma gratuita. 234 00:10:50,210 --> 00:10:52,870 >> Y, esencialmente, la pila y la pila, llegar a la pregunta de Marcus, 235 00:10:52,870 --> 00:10:54,500 crecer uno hacia el otro. 236 00:10:54,500 --> 00:10:57,730 Y si se encuentran uno al otro, que haya utiliza toda la memoria en su 237 00:10:57,730 --> 00:11:01,330 computador, y su programa se cerrará porque usted no tiene más memoria 238 00:11:01,330 --> 00:11:02,420 izquierda a utilizar. 239 00:11:02,420 --> 00:11:07,290 Entre ellos, hay potencialmente otras cosas. 240 00:11:07,290 --> 00:11:10,980 Sin embargo, para el alcance de este curso, no es necesario que te preocupes por eso. 241 00:11:10,980 --> 00:11:12,020 >> Así que esa fue la respuesta a su pregunta. 242 00:11:12,020 --> 00:11:13,520 No se preocupe. 243 00:11:13,520 --> 00:11:15,550 Pero esa era la respuesta larga. 244 00:11:15,550 --> 00:11:17,800 Todo lo que necesitas saber es el heap y la pila va - 245 00:11:17,800 --> 00:11:18,900 uno comienza en la parte inferior. 246 00:11:18,900 --> 00:11:19,570 La pila de papel no. 247 00:11:19,570 --> 00:11:20,790 El montón está ahí arriba. 248 00:11:20,790 --> 00:11:21,990 Ellos crecerán más cerca el uno al otro. 249 00:11:21,990 --> 00:11:23,110 >> Y si lo que tocan, eso es un problema. 250 00:11:23,110 --> 00:11:24,500 Te has quedado sin memoria. 251 00:11:24,500 --> 00:11:28,760 Pero también, además de saber dónde que están, lo que se almacena tanto en el 252 00:11:28,760 --> 00:11:30,512 pila y el montón. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Cuando chocan, es que un desbordamiento de pila? 255 00:11:33,570 --> 00:11:35,670 >> JASON HIRSCHHORN: Cuando chocan, eso no es un desbordamiento de pila. 256 00:11:35,670 --> 00:11:38,340 Un desbordamiento de pila es un área diferente que podemos ir si quieres. 257 00:11:38,340 --> 00:11:40,020 Bien, vamos a volver a eso en un momento. 258 00:11:40,020 --> 00:11:42,730 >> ESTUDIANTE: ¿Cuál es la palabra llamada cuando chocan entre sí, el 259 00:11:42,730 --> 00:11:44,450 pila y el montón? 260 00:11:44,450 --> 00:11:46,640 >> JASON HIRSCHHORN: Por ahora, no te preocupes. 261 00:11:46,640 --> 00:11:47,750 Sólo tienes que saber - 262 00:11:47,750 --> 00:11:50,530 Voy a responder a esa pregunta después de la clase. 263 00:11:50,530 --> 00:11:52,680 Si se encuentran con los demás, que se quedó sin de la memoria, porque no hay más 264 00:11:52,680 --> 00:11:53,330 espacio allí. 265 00:11:53,330 --> 00:11:55,450 >> ESTUDIANTE: Lo siento, lo que es un fallo seg? 266 00:11:55,450 --> 00:11:58,710 >> JASON HIRSCHHORN: Un segmento falla puede ser llamado para - 267 00:11:58,710 --> 00:12:02,240 depende por qué se llama de la falla seg. 268 00:12:02,240 --> 00:12:06,260 A veces, el desbordamiento de pila, que va a decir seg fallo como el error. 269 00:12:06,260 --> 00:12:08,180 >> ESTUDIANTE: ¿Qué hay de eliminación de referencias una variable nula? 270 00:12:08,180 --> 00:12:10,040 ¿Es que una falla seg? 271 00:12:10,040 --> 00:12:11,480 >> JASON HIRSCHHORN: Desreferenciar un puntero nulo - 272 00:12:11,480 --> 00:12:17,850 OK, así que si usted tiene un puntero que fija igual a null, punteros, el recuerdo, 273 00:12:17,850 --> 00:12:20,270 direcciones de memoria store como sus valores. 274 00:12:20,270 --> 00:12:23,660 Y un puntero nulo es esencialmente almacenar 0, el 0-th 275 00:12:23,660 --> 00:12:26,670 abordar en esa variable. 276 00:12:26,670 --> 00:12:30,010 Así 0x, 0, 0, 0, 0, etcétera. 277 00:12:30,010 --> 00:12:35,030 Esa dirección 0-th en la memoria que no es en nuestra imagen, eso es allá arriba 278 00:12:35,030 --> 00:12:38,800 en algún lugar, que está reservado para el equipo. 279 00:12:38,800 --> 00:12:40,130 No se nos permite tocarlo. 280 00:12:40,130 --> 00:12:44,680 >> Así que cuando el programa está ejecutando, si algo está tratando de ir a la memoria 281 00:12:44,680 --> 00:12:48,990 dirección 0, sabe que que es un valor vacío. 282 00:12:48,990 --> 00:12:50,820 No sabe nada debería estar allí. 283 00:12:50,820 --> 00:12:53,420 Así que si usted trata de usar algo allí y tratar algo como allí o 284 00:12:53,420 --> 00:12:58,355 tratando de ir a ese lugar, usted es va a obtener un fallo de segmento o un error. 285 00:12:58,355 --> 00:13:00,520 ¿Responde esto a su pregunta? 286 00:13:00,520 --> 00:13:03,170 >> Y ahora vamos a volver a desbordamiento de pila. 287 00:13:03,170 --> 00:13:09,560 Las cosas en la pila, ya que ustedes tienen visto antes, en - vamos a dibujar una estrecha 288 00:13:09,560 --> 00:13:11,966 de un marco de pila. 289 00:13:11,966 --> 00:13:15,050 ¿Todos pueden ver eso? 290 00:13:15,050 --> 00:13:16,650 Así que tenemos nuestro marco de pila. 291 00:13:16,650 --> 00:13:23,260 Estamos ahorrando un array en un local de variable en esta función. 292 00:13:23,260 --> 00:13:29,510 Así que decir que nuestra matriz tiene cinco puntos. 293 00:13:29,510 --> 00:13:33,230 Los cinco de los que se almacenará en ese marco de pila. 294 00:13:33,230 --> 00:13:37,540 >> Si empezamos a escribir más allá del límites de este conjunto - 295 00:13:37,540 --> 00:13:43,990 así que si empezamos a escribir en, digamos que es 0. 296 00:13:43,990 --> 00:13:46,800 Esos son los cinco índices de nuestra matriz. 297 00:13:46,800 --> 00:13:50,980 Si empezamos a escribir en el índice 5, que no tenemos cuando tengamos la 298 00:13:50,980 --> 00:13:55,900 matriz de tamaño 5, empezamos a escribir en índice 6, 7, 8, 9, podemos obtener una pila 299 00:13:55,900 --> 00:13:57,960 Error de desbordamiento. 300 00:13:57,960 --> 00:14:00,510 >> Generalmente no es - 301 00:14:00,510 --> 00:14:04,910 es probable que se meterá en problemas si usted se pasa por uno. 302 00:14:04,910 --> 00:14:08,640 Pero, en general, se llega a la más problemas si usted se pasa por una gran cantidad 303 00:14:08,640 --> 00:14:12,770 y te vas hasta la fecha más que escriba sobre la dirección de retorno de esa 304 00:14:12,770 --> 00:14:16,080 función, que se encuentra en la parte inferior del marco de pila. 305 00:14:16,080 --> 00:14:16,520 >> Porque, ¿no? 306 00:14:16,520 --> 00:14:17,670 Usted - en el - lo siento. 307 00:14:17,670 --> 00:14:18,550 No ", porque la derecha." 308 00:14:18,550 --> 00:14:20,470 >> En el marco de pila, que tiene sus variables locales. 309 00:14:20,470 --> 00:14:27,090 En la parte inferior de la pila marco es la dirección de retorno. 310 00:14:27,090 --> 00:14:28,790 Ahí es donde la función pasa cuando se acaba. 311 00:14:28,790 --> 00:14:33,750 Y si sobrescribe ese retorno dirección, y luego cuando este marco de pila, 312 00:14:33,750 --> 00:14:36,680 cuando usted va a través de la pila encuadrar y ejecución de cada línea, eres 313 00:14:36,680 --> 00:14:40,350 va a ir a su nueva dirección de retorno que está escrito allí en vez de la 314 00:14:40,350 --> 00:14:40,910 uno real. 315 00:14:40,910 --> 00:14:45,050 Y así es como hemos visto algunos fallos de seguridad 316 00:14:45,050 --> 00:14:46,780 puede suceder con los ordenadores. 317 00:14:46,780 --> 00:14:52,760 >> Así desbordamiento de pila, en una palabra, es cuando sobrescribe la parte de la pila 318 00:14:52,760 --> 00:14:55,440 se supone que debes usar, lo local variable que se supone que debes usar, y 319 00:14:55,440 --> 00:14:58,070 en particular, cuando se inicia la sobrescritura cosas importantes como el 320 00:14:58,070 --> 00:14:59,100 remite. 321 00:14:59,100 --> 00:15:00,090 Y ahí es donde usted obtendrá un error. 322 00:15:00,090 --> 00:15:03,980 O tal vez incluso podría empezar incluso escribir en - 323 00:15:03,980 --> 00:15:05,370 dicen búsqueda binaria fue justo encima de principal. 324 00:15:05,370 --> 00:15:07,790 Si ha sobrescrito mucho, pudo escribir en el principal. 325 00:15:07,790 --> 00:15:10,230 Pero, en general, se produce un error antes de entonces, debido a que el ordenador sabe 326 00:15:10,230 --> 00:15:12,270 usted está haciendo algo que te no se debe hacer. 327 00:15:12,270 --> 00:15:12,560 Sí. 328 00:15:12,560 --> 00:15:13,910 >> ESTUDIANTE: ¿Cuál es la diferencia entre un desbordamiento de pila 329 00:15:13,910 --> 00:15:16,940 y un buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON HIRSCHHORN: Desbordamiento de búfer es un tipo más genérico de 331 00:15:19,420 --> 00:15:20,395 lo que acabo de describir. 332 00:15:20,395 --> 00:15:22,610 >> ESTUDIANTE: Entonces un desbordamiento de pila es un ejemplo de un desbordamiento de búfer. 333 00:15:22,610 --> 00:15:23,420 >> JASON HIRSCHHORN: Exactamente. 334 00:15:23,420 --> 00:15:28,700 Este es un arreglo que podemos pensar como un tampón, un espacio para que las cosas salgan pulg 335 00:15:28,700 --> 00:15:30,600 Se trata de un desbordamiento del búfer de pila. 336 00:15:30,600 --> 00:15:33,210 Podríamos tener un desbordamiento del búfer de pila. 337 00:15:33,210 --> 00:15:36,870 Si había un tampón, que hay a menudo es una matriz del montón, y nosotros 338 00:15:36,870 --> 00:15:40,600 sobrescribía esos límites, entonces lo haríamos tener un desbordamiento del búfer de pila. 339 00:15:40,600 --> 00:15:44,870 >> Y más allá del alcance de este curso, que están detectaron un poco diferente. 340 00:15:44,870 --> 00:15:48,040 El compilador tiene especial formas de detectar cada uno. 341 00:15:48,040 --> 00:15:50,660 Pero un desbordamiento de buffer es una más genérica tipo de lo que he descrito, 342 00:15:50,660 --> 00:15:54,090 que era un desbordamiento del búfer de pila. 343 00:15:54,090 --> 00:15:56,240 ¿Eso responde a su pregunta? 344 00:15:56,240 --> 00:15:57,910 Sweet. 345 00:15:57,910 --> 00:16:01,850 >> ¿Hubo alguna otra pregunta relacionada a la pila o el montón? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Sí. 348 00:16:05,510 --> 00:16:08,220 >> ESTUDIANTE: Sé que tienes en cadenas gratuitas porque están en el montón 349 00:16:08,220 --> 00:16:09,305 y usted no quiere perder memoria. 350 00:16:09,305 --> 00:16:12,240 ¿Pero usted tiene que liberar a las variables globales y cosas por el estilo? 351 00:16:12,240 --> 00:16:14,335 ¿O son liberados de forma automática? 352 00:16:14,335 --> 00:16:15,700 >> JASON HIRSCHHORN: Buena pregunta. 353 00:16:15,700 --> 00:16:22,340 Así que en CS50.H, creamos esta cosa para que usted llamó una cadena. 354 00:16:22,340 --> 00:16:23,800 Una cadena es realmente lo que? 355 00:16:23,800 --> 00:16:24,810 >> ESTUDIANTE: Carácter estrellas. 356 00:16:24,810 --> 00:16:29,180 >> JASON HIRSCHHORN: Una estrella de char, un puntero a un carácter, un puntero a 357 00:16:29,180 --> 00:16:30,650 una matriz de caracteres. 358 00:16:30,650 --> 00:16:32,210 Eso es lo que la cadena es. 359 00:16:32,210 --> 00:16:36,050 Así que tenemos que liberarlo, porque getString, que utilizamos mucho - 360 00:16:36,050 --> 00:16:38,370 nombre de la cadena es igual a getString - 361 00:16:38,370 --> 00:16:43,560 que mallocs para nosotros algo de memoria en la amontonarán y luego devuelve un puntero a la 362 00:16:43,560 --> 00:16:47,230 primer carácter de ese cadena, una estrella caracteres. 363 00:16:47,230 --> 00:16:52,760 >> Así que aparentemente, si no ha sido escrito libre en cualquiera de sus cadenas 364 00:16:52,760 --> 00:16:55,600 que usted ha llamado hasta ahora, usted tiene estado filtrando algo de memoria. 365 00:16:55,600 --> 00:16:57,430 Por supuesto que no hemos hablado de que, por lo que nadie ha metido en 366 00:16:57,430 --> 00:16:58,520 problemas para hacerlo. 367 00:16:58,520 --> 00:16:59,980 Pero en el futuro, sí. 368 00:16:59,980 --> 00:17:03,990 Cuando se llama a getString, eres mallocing algo de espacio en el montón. 369 00:17:03,990 --> 00:17:07,640 Y si usted no llama libre después de que cadena, tiene una pérdida de memoria. 370 00:17:07,640 --> 00:17:09,440 Eso responde a su pregunta? 371 00:17:09,440 --> 00:17:10,606 >> Sí 372 00:17:10,606 --> 00:17:15,020 >> ESTUDIANTE: Así que para hacer eso, usamos derecho libre antes del regreso? 373 00:17:15,020 --> 00:17:18,510 Al igual que, en el marco de, supongo que si decimos, como, int principal, dentro de la 374 00:17:18,510 --> 00:17:24,410 alcance del código que está dentro de los llaves, justo antes - 375 00:17:24,410 --> 00:17:26,140 usted sabe el lugar donde quiere suele poner de retorno. 376 00:17:26,140 --> 00:17:27,950 ¿Pones libre antes de eso? 377 00:17:27,950 --> 00:17:31,000 >> JASON HIRSCHHORN: Así que usted puede poner libre dondequiera que usted quiere poner libre. 378 00:17:31,000 --> 00:17:33,810 Debido a que estos se asignan de forma dinámica las variables, ya que pueden 379 00:17:33,810 --> 00:17:39,170 vivir más allá del alcance de un particular, función, si se llama a malloc en un 380 00:17:39,170 --> 00:17:44,140 función separada, por ejemplo, getString, puede llamar gratis en main. 381 00:17:44,140 --> 00:17:46,050 No es necesario llamarlo en la función específica 382 00:17:46,050 --> 00:17:47,570 donde se llama malloc. 383 00:17:47,570 --> 00:17:50,340 Pero sí es necesario llamar antes de principales retornos. 384 00:17:50,340 --> 00:17:51,120 >> Y lo que realmente depende. 385 00:17:51,120 --> 00:17:54,960 Depende de por qué malloced que espacio en el primer lugar. 386 00:17:54,960 --> 00:17:57,320 Algunas personas le llame liberar muy rápidamente. 387 00:17:57,320 --> 00:17:59,220 Algunas personas no llamar gratis hasta el final de su programa. 388 00:17:59,220 --> 00:18:00,660 Y van a ir a través de y todo de forma gratuita. 389 00:18:00,660 --> 00:18:03,597 Depende de qué llamaste malloc. 390 00:18:03,597 --> 00:18:11,270 >> ESTUDIANTE: ¿Y qué le dirías si se llama uso getString? 391 00:18:11,270 --> 00:18:13,320 Dirías libre, ¿qué? 392 00:18:13,320 --> 00:18:20,040 >> JASON HIRSCHHORN: Así que la sintaxis de forma gratuita es simplemente libre, paren abiertas, cerca 393 00:18:20,040 --> 00:18:22,130 Paren, y el nombre del puntero. 394 00:18:22,130 --> 00:18:26,410 Así que si usted escribe name cadena es igual a getString, pones el nombre aquí. 395 00:18:26,410 --> 00:18:27,760 Ese es el nombre del puntero. 396 00:18:27,760 --> 00:18:30,570 Y sabe que para liberar memoria. 397 00:18:30,570 --> 00:18:33,920 >> ESTUDIANTE: Así que cuando se libera esa memoria, el puntero sigue apuntando a ese lugar 398 00:18:33,920 --> 00:18:34,970 en la memoria? 399 00:18:34,970 --> 00:18:39,020 ¿O es el puntero también vaciada de la dirección que apunta. 400 00:18:39,020 --> 00:18:40,290 >> JASON HIRSCHHORN: Debemos tratar de que. 401 00:18:40,290 --> 00:18:41,430 Debemos codificar eso. 402 00:18:41,430 --> 00:18:43,880 Volvamos al llegar a codificación, y vamos a código que. 403 00:18:43,880 --> 00:18:46,000 Y si quieres descubrir la respuesta a esto, también se puede código que 404 00:18:46,000 --> 00:18:46,690 en el ínterin. 405 00:18:46,690 --> 00:18:49,100 Pero esa es una gran pregunta. 406 00:18:49,100 --> 00:18:53,480 >> ESTUDIANTE: ¿Es posible algo libre demasiado pronto? 407 00:18:53,480 --> 00:18:58,530 Así que todavía lo necesita para su programa, y te liberarás de ese espacio de memoria? 408 00:18:58,530 --> 00:18:59,200 >> JASON HIRSCHHORN: Si. 409 00:18:59,200 --> 00:19:03,020 Es posible, si algo gratis y después de usarlo de nuevo, lo harás 410 00:19:03,020 --> 00:19:06,890 encontrarse con un error. 411 00:19:06,890 --> 00:19:10,810 Pero eso es en ti, porque tú liberaste algo y luego lo llamó más tarde. 412 00:19:10,810 --> 00:19:13,940 Así que ese fue el error de un programador. 413 00:19:13,940 --> 00:19:14,780 Pero sí. 414 00:19:14,780 --> 00:19:17,760 Se puede escribir eso. 415 00:19:17,760 --> 00:19:19,240 >> ¿Alguna pregunta más sobre - 416 00:19:19,240 --> 00:19:19,760 Sí. 417 00:19:19,760 --> 00:19:22,820 >> ESTUDIANTE: Entonces, si se supone que sólo liberarlo en general antes de la 418 00:19:22,820 --> 00:19:25,490 programa termina, ¿significa que si el programa termina y no liberarlo, 419 00:19:25,490 --> 00:19:27,580 que la memoria todavía está asignado? 420 00:19:27,580 --> 00:19:31,330 >> JASON HIRSCHHORN: Si el programa termina y se olvida de liberar algo, entonces 421 00:19:31,330 --> 00:19:34,390 que la memoria se asignó a lo largo la vida útil de su programa. 422 00:19:34,390 --> 00:19:37,670 Cuando el programa se cierra completamente, que la memoria no se va 423 00:19:37,670 --> 00:19:39,490 quedarse allí para siempre. 424 00:19:39,490 --> 00:19:42,080 El equipo es lo suficientemente inteligente como para saber que cuando el programa se cierra, se 425 00:19:42,080 --> 00:19:46,440 debe deshacerse de toda la memoria que se asoció con ese programa. 426 00:19:46,440 --> 00:19:51,240 >> Sin embargo, hay herramientas que se pueden ejecutar en un programa para detectar si, cuando el 427 00:19:51,240 --> 00:19:54,720 programa terminado, se le olvidó para liberar algo de memoria. 428 00:19:54,720 --> 00:19:57,960 Y para su próximo conjunto de problemas donde que va a utilizar y el uso de malloc 429 00:19:57,960 --> 00:20:02,610 punteros, usted va a correr este programar en el programa para ver si, 430 00:20:02,610 --> 00:20:06,530 cuando los principales retornos, tenías cierta cosas que quedaron unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Así que no van a permanecer malloced siempre en el equipo. 432 00:20:09,130 --> 00:20:11,720 Eso sería un desperdicio, porque muy rápidamente, los ordenadores 433 00:20:11,720 --> 00:20:12,960 se quede sin memoria. 434 00:20:12,960 --> 00:20:16,450 Pero si se quedan hasta el final de su programar y no están liberados y su 435 00:20:16,450 --> 00:20:20,260 programa sale, eso sigue siendo un problema que esta herramienta le ayudará a tratar. 436 00:20:20,260 --> 00:20:21,520 >> ESTUDIANTE: ¿Eso es Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON HIRSCHHORN: Es llamado Valgrind. 438 00:20:22,910 --> 00:20:23,520 Y estarás - 439 00:20:23,520 --> 00:20:25,780 >> ESTUDIANTE: Pero no tenemos que saber que durante la prueba, sin embargo? 440 00:20:25,780 --> 00:20:27,600 Quiero decir, se habló de un poco en la conferencia. 441 00:20:27,600 --> 00:20:33,600 >> JASON HIRSCHHORN: Así Valgrind es el nombre de esa herramienta. 442 00:20:33,600 --> 00:20:37,180 Saber lo que hace es suficiente para resolver el cuestionario. 443 00:20:37,180 --> 00:20:40,200 Pero usted no ha utilizado todavía en su conjunto de problemas porque no hemos tenido una 444 00:20:40,200 --> 00:20:43,520 conjunto de problemas que ha tratado de forma explícita con malloc o usando malloc. 445 00:20:43,520 --> 00:20:45,330 Así que usted no ha utilizado Valgrind aún. 446 00:20:45,330 --> 00:20:47,760 Pero lo va a usar antes que tarde. 447 00:20:47,760 --> 00:20:48,710 >> ESTUDIANTE: ¿Puede repetir lo Valgrind es? 448 00:20:48,710 --> 00:20:49,190 >> JASON HIRSCHHORN: ¿Lo sientes? 449 00:20:49,190 --> 00:20:51,240 >> ESTUDIANTE: ¿Puede repetir lo que el propósito de Valgring es? 450 00:20:51,240 --> 00:20:53,100 >> JASON HIRSCHHORN: Valgrind es el nombre - 451 00:20:53,100 --> 00:20:59,890 como GDB ayuda a depurar el programa, Valgrind ayuda a determinar si 452 00:20:59,890 --> 00:21:03,210 las cosas no han sido liberados cuando el programa se cierra. 453 00:21:03,210 --> 00:21:05,110 Por lo que usted ejecuta en su programa. 454 00:21:05,110 --> 00:21:09,230 Y su programa sale, y que va a decir su programa llamado malloc esto muchos 455 00:21:09,230 --> 00:21:13,670 veces para esta cantidad de bytes, y que sólo llaman libre muchas veces. 456 00:21:13,670 --> 00:21:16,520 Y así lo dejó estos muchos bytes si no son liberados. 457 00:21:16,520 --> 00:21:18,050 O va a decir que has liberado todo. 458 00:21:18,050 --> 00:21:19,070 Buen trabajo. 459 00:21:19,070 --> 00:21:19,480 >> ESTUDIANTE: OK. 460 00:21:19,480 --> 00:21:21,060 Y se llama Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON HIRSCHHORN: V-A-L-G-R-Me-N-D. 462 00:21:24,940 --> 00:21:25,970 >> ESTUDIANTE: Una pregunta acerca de los punteros. 463 00:21:25,970 --> 00:21:30,080 Así que digamos que n han star x es igual a algo. 464 00:21:30,080 --> 00:21:33,330 Eso equivale, lo que usted está poniendo allí, es que lo que está siendo puesta en el interior 465 00:21:33,330 --> 00:21:36,120 lo que x hace referencia, o el puntero de x? 466 00:21:36,120 --> 00:21:37,690 >> JASON HIRSCHHORN: ¿Puede usted repetir la pregunta? 467 00:21:37,690 --> 00:21:39,340 ¿Podemos extraer mientras se dice? 468 00:21:39,340 --> 00:21:42,710 >> ESTUDIANTE: En el cuestionario, en realidad, la uno que nos envió, fue como, carbón de leña 469 00:21:42,710 --> 00:21:46,520 verdad estrellas es igual a rocas CS50, ¿verdad? 470 00:21:46,520 --> 00:21:52,190 ¿Significa eso que que mece CS50 es lo que la verdad está señalando? 471 00:21:52,190 --> 00:21:55,810 >> JASON HIRSCHHORN: Así que usted está hablando sobre una estrella del caracter en una cadena, ¿cómo 472 00:21:55,810 --> 00:21:56,460 eso funciona? 473 00:21:56,460 --> 00:21:56,890 Sí. 474 00:21:56,890 --> 00:21:57,700 Aceptar. 475 00:21:57,700 --> 00:21:59,140 Dibujemos esto aquí. 476 00:21:59,140 --> 00:22:07,100 >> [CONVERSACIÓN SIDE] 477 00:22:07,100 --> 00:22:11,130 >> JASON HIRSCHHORN: Así que esta variable va a ser de tipo char estrellas. 478 00:22:11,130 --> 00:22:14,580 ¿Qué tan grande es una variable de la estrella de tipo char? 479 00:22:14,580 --> 00:22:15,510 ¿Cuántos bytes? 480 00:22:15,510 --> 00:22:16,450 >> ESTUDIANTES: Cuatro. 481 00:22:16,450 --> 00:22:18,210 >> JASON HIRSCHHORN: Son cuatro bytes. 482 00:22:18,210 --> 00:22:21,420 ¿Cuántos derechos es una variable de tipo int estrella? 483 00:22:21,420 --> 00:22:22,210 >> ESTUDIANTES: Cuatro. 484 00:22:22,210 --> 00:22:24,910 >> JASON HIRSCHHORN: Cuatro bytes. 485 00:22:24,910 --> 00:22:28,280 Si se trata de un puntero, entonces siempre es cuatro bytes, ya que los punteros, su 486 00:22:28,280 --> 00:22:30,070 valor es una dirección de memoria. 487 00:22:30,070 --> 00:22:35,160 Y las direcciones de memoria en el CS50 aparato son cuatro bytes de longitud. 488 00:22:35,160 --> 00:22:42,900 Así que cuando llamamos a getString, o cuando digamos, stringname es igual, y luego en 489 00:22:42,900 --> 00:22:46,140 comillas dobles pusieron una cadena, estamos poniendo - 490 00:22:46,140 --> 00:22:46,920 bueno, eso es un poco diferente. 491 00:22:46,920 --> 00:22:48,630 Qué vamos a getString como el ejemplo. 492 00:22:48,630 --> 00:22:52,150 O estrellas Char algo es igual a la cadena. 493 00:22:52,150 --> 00:22:54,360 Lo sentimos, dame el ejemplo que lea? 494 00:22:54,360 --> 00:22:57,590 >> ESTUDIANTE: la verdad estrellas caracteres es igual "rocas CS50" en comillas dobles. 495 00:22:57,590 --> 00:23:02,260 >> JASON HIRSCHHORN: Así que esta estrella, esta llamaremos a esta variable x para nuestra 496 00:23:02,260 --> 00:23:04,060 fines genéricos. 497 00:23:04,060 --> 00:23:05,970 Hemos creado una variable llamada x. 498 00:23:05,970 --> 00:23:07,610 Es tipo char estrellas. 499 00:23:07,610 --> 00:23:10,950 Es un puntero a una serie de caracteres. 500 00:23:10,950 --> 00:23:12,200 Así que aquí abajo - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Así que así es como esta haría trabajar en la memoria. 503 00:23:25,890 --> 00:23:27,410 Esto almacenar una dirección de memoria. 504 00:23:27,410 --> 00:23:31,770 Sería almacenar la dirección de memoria de el primer carácter de la matriz. 505 00:23:31,770 --> 00:23:33,830 Y luego, cuando seguiste el puntero, lo haría 506 00:23:33,830 --> 00:23:35,200 obtener el primer carácter. 507 00:23:35,200 --> 00:23:38,780 >> Y si estás leyendo esto como una cadena, el equipo es inteligente 508 00:23:38,780 --> 00:23:42,930 basta con saber, leer todo esto hasta que llega a una reacción 0. 509 00:23:42,930 --> 00:23:45,530 Pero si estás leyendo un carácter en un tiempo, así que estás iteración a través de 510 00:23:45,530 --> 00:23:49,910 esta cadena, a continuación, sólo leerá un carácter a la vez hasta que llegue a 511 00:23:49,910 --> 00:23:50,850 barra invertida 0. 512 00:23:50,850 --> 00:23:52,335 Eso no pudo responder a su pregunta, sin embargo. 513 00:23:52,335 --> 00:23:55,610 >> ESTUDIANTE: Sí, pero no lo ha hecho malloced que el espacio 514 00:23:55,610 --> 00:23:58,400 sin embargo, para ese puntero. 515 00:23:58,400 --> 00:24:02,510 >> JASON HIRSCHHORN: Así que no estoy muy seguro de exactamente lo que estás viendo, 516 00:24:02,510 --> 00:24:03,640 porque yo no hice ese examen. 517 00:24:03,640 --> 00:24:06,370 Se suponía que iba a ser un útil recursos de otro TF. 518 00:24:06,370 --> 00:24:11,380 Si va a crear una cadena en la apilar o como una variable local, que va a 519 00:24:11,380 --> 00:24:16,920 acaba de ser gama de cargas en lugar de en general, una estrella carbón señalando 520 00:24:16,920 --> 00:24:18,600 otra cadena. 521 00:24:18,600 --> 00:24:20,550 Pero yo no lo sé. 522 00:24:20,550 --> 00:24:25,065 Eso podría ser un puntero a otra cadena en la pila también. 523 00:24:25,065 --> 00:24:27,240 Sí. 524 00:24:27,240 --> 00:24:31,116 >> ESTUDIANTE: Sé que usted necesita asignar memoria si el puntero está 525 00:24:31,116 --> 00:24:33,360 siendo declarada dentro de otra función. 526 00:24:33,360 --> 00:24:36,740 ¿Es necesario hacer lo mismo si se trata de está declarada dentro del principal, 527 00:24:36,740 --> 00:24:39,570 usted lo está utilizando en el interior del principal? 528 00:24:39,570 --> 00:24:43,590 >> JASON HIRSCHHORN: Así que sí. 529 00:24:43,590 --> 00:24:46,670 Puede declarar un puntero a cualquier dirección de memoria en la memoria. 530 00:24:46,670 --> 00:24:51,440 Puede ser la dirección de memoria de un local de variables, aunque muchas veces, 531 00:24:51,440 --> 00:24:55,760 personas no declaran las direcciones de memoria a las variables locales, ya que van 532 00:24:55,760 --> 00:24:59,890 desaparecer una vez que la función devuelve, que es por ello que generalmente malloc cosas. 533 00:24:59,890 --> 00:25:04,630 Pero sí, se podía declarar un puntero a otra variable local. 534 00:25:04,630 --> 00:25:06,360 Es que por lo general no se hace. 535 00:25:06,360 --> 00:25:09,480 Pero puedo echar un vistazo a que cosa específica después de la clase. 536 00:25:09,480 --> 00:25:10,650 Sí. 537 00:25:10,650 --> 00:25:12,350 >> ESTUDIANTE: Creo que esto es una especie de lo que se le pide. 538 00:25:12,350 --> 00:25:16,930 Parece extraño estar inicializar un puntero no como un 539 00:25:16,930 --> 00:25:20,760 dirección, sino como lo parece como un valor. 540 00:25:20,760 --> 00:25:25,970 Parece que el CS50 es lo que hay dentro lo que se apunta y 541 00:25:25,970 --> 00:25:28,820 no la dirección real, ¿verdad? 542 00:25:28,820 --> 00:25:30,520 >> JASON HIRSCHHORN: Así que eso es no es el caso, sin embargo. 543 00:25:30,520 --> 00:25:32,470 Eso no es lo que está pasando. 544 00:25:32,470 --> 00:25:35,910 Cuando se declara una estrella char, es una dirección de memoria. 545 00:25:35,910 --> 00:25:38,860 Los punteros son todas las direcciones de memoria apuntando a otra cosa. 546 00:25:38,860 --> 00:25:41,480 Ese algo más podría estar en el pila, pero casi siempre se encuentra en la 547 00:25:41,480 --> 00:25:43,440 amontonarán en el camino veremos lo que solía. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Pero stringname es igual de comillas dobles "GetString", podemos ver que y nos 550 00:25:53,500 --> 00:25:55,010 puede mirar a través de eso y codificar eso. 551 00:25:55,010 --> 00:26:01,190 cadena getString no se está guardando en esa variable, o lo que sea la cadena 552 00:26:01,190 --> 00:26:04,580 nombre no se está guardando en ese variables, no porque así es como 553 00:26:04,580 --> 00:26:06,070 punteros funcionan. 554 00:26:06,070 --> 00:26:06,770 ¿Eso tiene sentido? 555 00:26:06,770 --> 00:26:07,170 >> ESTUDIANTE: Sí. 556 00:26:07,170 --> 00:26:08,570 >> JASON HIRSCHHORN: OK. 557 00:26:08,570 --> 00:26:11,690 Con suerte, eso no era confuso para cualquier persona. 558 00:26:11,690 --> 00:26:15,732 Pero si lo fuera, podemos mirar de nuevo en un poco, porque en realidad estamos pasando 559 00:26:15,732 --> 00:26:19,240 para codificar algo que se espera que trabajar con cadenas y ayudarle a sentirse 560 00:26:19,240 --> 00:26:22,170 más cómodo con ellos. 561 00:26:22,170 --> 00:26:24,869 >> Cualquier otra pregunta relacionada con estos temas u otros temas que 562 00:26:24,869 --> 00:26:26,119 Voy a poner una copia de seguridad? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Y - 565 00:26:34,840 --> 00:26:36,310 en estos momentos. 566 00:26:36,310 --> 00:26:37,630 Sí, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Así que esto es totalmente sin relación, pero ¿podemos ir más 568 00:26:39,860 --> 00:26:42,760 muy rápidamente lo que necesitamos saber sobre la diferencia entre un 32 y 569 00:26:42,760 --> 00:26:46,345 Equipo de 64 bits? 570 00:26:46,345 --> 00:26:47,740 >> JASON HIRSCHHORN: Si. 571 00:26:47,740 --> 00:26:52,111 Así que 32 bits es la cantidad de bytes? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Son cuatro bytes. 573 00:26:53,060 --> 00:26:54,360 >> JASON HIRSCHHORN: Son cuatro bytes. 574 00:26:54,360 --> 00:26:58,420 Y 64 bits es la cantidad de bytes? 575 00:26:58,420 --> 00:26:59,112 >> ESTUDIANTE: Ocho. 576 00:26:59,112 --> 00:27:00,610 >> JASON HIRSCHHORN: Ocho bytes. 577 00:27:00,610 --> 00:27:03,980 Así que de nuevo, ocho bits es un byte. 578 00:27:03,980 --> 00:27:08,340 Su aparato CS50 es una máquina de 32 bits. 579 00:27:08,340 --> 00:27:13,650 Así que las direcciones de memoria son cuatro bytes de longitud. 580 00:27:13,650 --> 00:27:17,460 Hay 2 al 32 direcciones de memoria. 581 00:27:17,460 --> 00:27:21,310 0 a 2 a la 32 menos 1. 582 00:27:21,310 --> 00:27:27,630 Y yo no soy positivo, pero eso es probablemente el alcance de lo que usted necesita 583 00:27:27,630 --> 00:27:35,230 sé que es un equipo de 32 bits, que la memoria direcciones son, de nuevo, cuatro bytes de longitud, 584 00:27:35,230 --> 00:27:39,620 y esa es la cantidad máxima de direcciones de memoria. 585 00:27:39,620 --> 00:27:41,680 >> Además, los tipos de datos - 586 00:27:41,680 --> 00:27:45,020 esto podría ser algo tan bueno eso es digno de mención. 587 00:27:45,020 --> 00:27:49,610 El tamaño de un tipo de datos depende la máquina que usted está trabajando. 588 00:27:49,610 --> 00:27:56,760 Así que un char, un solo carácter, es como muchos bytes en nuestro dispositivo CS50? 589 00:27:56,760 --> 00:27:57,980 Un byte. 590 00:27:57,980 --> 00:28:02,310 Y en realidad es un byte como bien en una máquina de 64 bits. 591 00:28:02,310 --> 00:28:05,920 >> Y la mayoría de los tipos de datos son el mismo número de bytes en ambas máquinas. 592 00:28:05,920 --> 00:28:11,620 Sin embargo, algunos tipos de datos serán diferentes en ambas máquinas. 593 00:28:11,620 --> 00:28:14,590 Así que sería potencialmente la Lo único que usted necesita saber. 594 00:28:14,590 --> 00:28:16,710 >> Pero incluso eso, creo, está más allá de los límites - 595 00:28:16,710 --> 00:28:20,990 Estoy casi seguro, si uno mira hacia atrás en concursos de edad, dice, para asumir 596 00:28:20,990 --> 00:28:24,090 problemas que está usando la codificación de una máquina de 32 bits. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Pero hay, para ir junto con el de Por si te interesa, hay 599 00:28:30,620 --> 00:28:35,920 tipos de datos que son los mismos tamaño en todas las máquinas. 600 00:28:35,920 --> 00:28:42,670 >> Si has visto algo así uint32_t, que puede o no ser 601 00:28:42,670 --> 00:28:43,260 no he visto eso. 602 00:28:43,260 --> 00:28:44,290 Eso es un tipo de datos. 603 00:28:44,290 --> 00:28:47,570 Eso dice, será de 32 bits sin importar qué máquina es el. 604 00:28:47,570 --> 00:28:50,350 Así que cuando la gente está escribiendo portátil código, probablemente no utilizarán ints. 605 00:28:50,350 --> 00:28:53,260 Lugar Usarán estos otros datos tipos que saben que serán los mismos 606 00:28:53,260 --> 00:28:54,780 El tamaño de cada máquina. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> MADHU: Yo tenía una pregunta sobre el proceso de compilación. 610 00:29:00,150 --> 00:29:04,110 Así que si usted está escribiendo un programa que utiliza una biblioteca como CS50 o algo 611 00:29:04,110 --> 00:29:06,840 así, yo sé que esa biblioteca tiene que, en algún momento, ser 612 00:29:06,840 --> 00:29:08,590 compilado y vinculado pulg 613 00:29:08,590 --> 00:29:13,380 Pero, ¿cuánto de eso ocurre durante la elaboración de su programa? 614 00:29:13,380 --> 00:29:15,880 ¿Qué parte de ese proceso biblioteca ocurre cuando estás 615 00:29:15,880 --> 00:29:18,560 compilar su propio programa? 616 00:29:18,560 --> 00:29:24,020 >> JASON HIRSCHHORN: Así que vamos a repasar en general los pasos de este proceso. 617 00:29:24,020 --> 00:29:26,280 Usted escribe su columna c.. 618 00:29:26,280 --> 00:29:33,530 En el archivo de c., Que incluye su # bibliotecas de encabezado, por ejemplo, cs50.h. 619 00:29:33,530 --> 00:29:39,480 ¿Qué tiene eso aguda incluyen line hagas a tu programa? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Añade los prototipos de las funciones de la cabecera 622 00:29:43,350 --> 00:29:45,120 los archivos de las bibliotecas. 623 00:29:45,120 --> 00:29:45,600 >> JASON HIRSCHHORN: Exactamente. 624 00:29:45,600 --> 00:29:49,870 Añade los prototipos de funciones a su código. 625 00:29:49,870 --> 00:29:55,230 Así que cuando se está compilando el código en las primeras etapas, el compilador sabe 626 00:29:55,230 --> 00:29:59,250 que realmente existen estas funciones, y que en alguna parte que se han definido. 627 00:29:59,250 --> 00:30:02,460 Los archivos. H no incluyen el definiciones para estas funciones o cómo 628 00:30:02,460 --> 00:30:03,950 trabajan realmente. 629 00:30:03,950 --> 00:30:07,960 Cs50.h sólo incluye algo que dice getString es una cosa real que 630 00:30:07,960 --> 00:30:09,270 puede suceder. 631 00:30:09,270 --> 00:30:14,240 Y standardio.h dice printf es una cosa real que le puede pasar. 632 00:30:14,240 --> 00:30:23,190 >> Por lo que su lenguaje c con esto. Cabecera archivo se convirtió en algo de 633 00:30:23,190 --> 00:30:27,750 código legible por la máquina, lo que finalmente consigue convertido en binario 634 00:30:27,750 --> 00:30:30,030 código, de 0 y 1. 635 00:30:30,030 --> 00:30:33,590 Y ese es el código que en última instancia se ejecuta. 636 00:30:33,590 --> 00:30:38,550 El CS50-l línea - por ejemplo, cuando estás escribiendo Clang - 637 00:30:38,550 --> 00:30:41,830 y luego de incluir-l CS50, escribe que pulg 638 00:30:41,830 --> 00:30:42,180 Y ves eso. 639 00:30:42,180 --> 00:30:43,890 Cuando escribes hacer, usted ver que la línea aquí. 640 00:30:43,890 --> 00:30:47,740 Y veremos que en un segundo cuando codificamos o más adelante, cuando el código. 641 00:30:47,740 --> 00:30:50,390 >> Pero eso-l línea CS50 hace algo un poco diferente a 642 00:30:50,390 --> 00:30:52,440 los # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 ¿Qué hace la línea que-l CS50? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Quiero decir que se vincula la biblioteca a la función 646 00:31:00,310 --> 00:31:02,710 llamar, al igual que los archivos. o. 647 00:31:02,710 --> 00:31:08,200 >> JASON HIRSCHHORN: Así que es muy cerca, si no es el lugar. 648 00:31:08,200 --> 00:31:16,220 El CS50-l toma el archivo binario y se fusiona con el archivo binario. 649 00:31:16,220 --> 00:31:21,410 Así cs50.h, no tiene sentido en la transformación de cs50.h del lenguaje C a binario cada 650 00:31:21,410 --> 00:31:23,130 una sola vez se está utilizando. 651 00:31:23,130 --> 00:31:26,650 Eso sería una tontería, porque eso se pierde mucho tiempo. 652 00:31:26,650 --> 00:31:30,420 Por lo tanto, ya se ha compilado y se convirtió en un ejecutable. 653 00:31:30,420 --> 00:31:35,430 Y ahora que va a combinar con su archivo al final. 654 00:31:35,430 --> 00:31:38,370 Así que los de 1 y 0 de van fusionarse con sus seres 655 00:31:38,370 --> 00:31:39,150 y 0 en el extremo. 656 00:31:39,150 --> 00:31:43,670 Así que ahora que usted realmente tiene el real 1 y 0 del que definen cómo getString, 657 00:31:43,670 --> 00:31:47,890 por ejemplo, las obras, o como printf, por ejemplo, las obras. 658 00:31:47,890 --> 00:31:52,750 >> Y para más información, hay una compiladores cortos que Nate da que 659 00:31:52,750 --> 00:31:55,410 usted debe comprobar que va a través de estos pasos. 660 00:31:55,410 --> 00:31:56,050 Pero - 661 00:31:56,050 --> 00:31:56,560 Sí. 662 00:31:56,560 --> 00:32:01,700 >> ESTUDIANTE: ¿Son siempre los archivos o. cuando están en forma de biblioteca, 663 00:32:01,700 --> 00:32:06,764 listo para combinarse, vinculado - como que están en el código binario? 664 00:32:06,764 --> 00:32:07,600 >> JASON HIRSCHHORN: OK. 665 00:32:07,600 --> 00:32:08,420 Lo que - 666 00:32:08,420 --> 00:32:11,780 >> ESTUDIANTE: ¿Eso es siempre el caso para las bibliotecas cuando se vinculan? 667 00:32:11,780 --> 00:32:12,500 >> JASON HIRSCHHORN: Si. 668 00:32:12,500 --> 00:32:17,300 Así que hay. S archivos, que serán código de máquina, que también será 669 00:32:17,300 --> 00:32:17,975 críptica a usted. 670 00:32:17,975 --> 00:32:19,410 Usted no tiene que preocuparse por eso. 671 00:32:19,410 --> 00:32:24,930 Pero en general, sí, van a estar en formato. o archivos listos para ir. 672 00:32:24,930 --> 00:32:27,170 >> ESTUDIANTE: Entonces, cuando usted envía a una biblioteca, no sólo se envía 673 00:32:27,170 --> 00:32:28,880 la. h y. o? 674 00:32:28,880 --> 00:32:32,210 No envíe el. Co el. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON HIRSCHHORN: So - 676 00:32:33,070 --> 00:32:36,260 y esto es en este corto y, si esta información parece estar llegando a 677 00:32:36,260 --> 00:32:36,700 poco rápido. 678 00:32:36,700 --> 00:32:39,870 Sin embargo, el corto de compiladores habla de esto también. 679 00:32:39,870 --> 00:32:43,290 Cuando usted envía una biblioteca, si usted envía la. h, el archivo de cabecera, los 680 00:32:43,290 --> 00:32:46,290 prototipos de funciones, y el 1 de y De 0, eso es todo lo que tiene para dar. 681 00:32:46,290 --> 00:32:50,640 No es necesario para dar forma en que el La opción funciona, el archivo c.. 682 00:32:50,640 --> 00:32:56,360 Debido a que el punto de extracción, o la señalar las API, el punto en el SPL, 683 00:32:56,360 --> 00:32:59,650 la biblioteca portátil de Stanford, es para que usted no se preocupe por cómo las nuevas 684 00:32:59,650 --> 00:33:04,220 GRect funciona, o cómo se mueven las obras, o cómo añadir obras. 685 00:33:04,220 --> 00:33:06,520 Todo lo que necesitas saber es que añadir es una función que pueda 686 00:33:06,520 --> 00:33:08,880 utilizar, y lo hace. 687 00:33:08,880 --> 00:33:12,760 Así que realmente no necesita saber cómo está escrito en C. Sólo necesitas 688 00:33:12,760 --> 00:33:15,460 saber, aquí están las funciones, lo que hacen, y aquí están las de 1 y 0 689 00:33:15,460 --> 00:33:18,870 cuando usted realmente desea utilizarlos. 690 00:33:18,870 --> 00:33:19,530 >> Genial. 691 00:33:19,530 --> 00:33:26,980 ¿Alguna pregunta más sobre los compiladores u otros temas del foro? 692 00:33:26,980 --> 00:33:30,300 >> ESTUDIANTE: Tengo una pregunta de la implementación de las funciones recursivas. 693 00:33:30,300 --> 00:33:31,170 Una pregunta acerca de la recursividad. 694 00:33:31,170 --> 00:33:33,030 Tuve la sensación de que se van a plantear. 695 00:33:33,030 --> 00:33:38,310 Así que vamos a ir rápidamente a través de recursividad con una específica 696 00:33:38,310 --> 00:33:40,690 ejemplo, una función factorial. 697 00:33:40,690 --> 00:33:44,920 Debido a que este es un ejemplo que surge con frecuencia o que se utilicen 698 00:33:44,920 --> 00:33:46,170 para ilustrar la recursión. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Así "4!" se lee como 4 factorial. 701 00:33:56,410 --> 00:33:59,120 ¿Y qué significa 4 factorial? 702 00:33:59,120 --> 00:34:00,696 ¿Qué quiere hacer? 703 00:34:00,696 --> 00:34:02,235 ¿Cómo se calcula 4 factorial? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 veces 3 veces 2 veces 1. 706 00:34:07,960 --> 00:34:11,889 >> Así que otra manera de escribir 4 factorial es escribir esto. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 Tiempos 3 factorial. 709 00:34:19,022 --> 00:34:22,080 Debido 3 factorial es 3 veces 2 veces 1. 710 00:34:22,080 --> 00:34:27,580 Así que 4 veces 3 factorial es 4 veces 3 veces 2 veces 1. 711 00:34:27,580 --> 00:34:32,679 Esta es la razón factorial es una gran candidato a la recursividad, porque es 712 00:34:32,679 --> 00:34:36,630 claro que hay algo que sucede una y otra y otra vez en un 713 00:34:36,630 --> 00:34:39,820 menor número de cosas hasta llegar a la final. 714 00:34:39,820 --> 00:34:42,570 Al llegar a 1, 1 factorial es 1. 715 00:34:42,570 --> 00:34:43,719 Usted no puede ir mucho más allá. 716 00:34:43,719 --> 00:34:47,219 0 factorial también se define como 1. 717 00:34:47,219 --> 00:34:50,679 Así que cuando se llega a 1 o 0, eres al final, y que pueda 718 00:34:50,679 --> 00:34:53,219 empezar a ir hacia arriba. 719 00:34:53,219 --> 00:34:59,540 Así que si queríamos escribir una recursiva función para calcular un factorial, 720 00:34:59,540 --> 00:35:02,170 vamos a escribir algunas pseudocódigo para eso ahora. 721 00:35:02,170 --> 00:35:03,300 Antes de que escribimos que pseudocódigo - 722 00:35:03,300 --> 00:35:05,660 Voy a dar ustedes un par de minutos para escribir el código de pseudo o simplemente pensar 723 00:35:05,660 --> 00:35:09,600 en ello - hay dos cosas cada función recursiva necesita. 724 00:35:09,600 --> 00:35:12,530 ¿Cuáles son esas dos cosas? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Tiene que llamarse a sí misma. 726 00:35:13,220 --> 00:35:13,680 >> JASON HIRSCHHORN: Noé? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Adelante. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Tiene que llamarse a sí misma. 730 00:35:16,640 --> 00:35:19,220 >> JASON HIRSCHHORN: Así que un recursivo función necesita una llamada recursiva, una 731 00:35:19,220 --> 00:35:20,220 llamar a sí mismo. 732 00:35:20,220 --> 00:35:20,770 Esa es una. 733 00:35:20,770 --> 00:35:21,510 ¿Y cuál es la otra cosa? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Un caso base. 735 00:35:22,250 --> 00:35:23,780 >> JASON HIRSCHHORN: un caso base. 736 00:35:23,780 --> 00:35:26,940 Un caso base es, aquí es cuando nos detenemos. 737 00:35:26,940 --> 00:35:29,510 Por lo que su función se llama. 738 00:35:29,510 --> 00:35:31,410 El caso base es lo primero. 739 00:35:31,410 --> 00:35:33,710 ¿Quieres saber si eres al final. 740 00:35:33,710 --> 00:35:37,110 Y si no estás en la final, hacer su llamada recursiva. 741 00:35:37,110 --> 00:35:39,880 Y usted va a través de esta función de nuevo, comprobar su hipótesis de base de nuevo. 742 00:35:39,880 --> 00:35:42,575 Si usted no es el final, se hace otra llamada recursiva, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> Es por eso que las funciones recursivas siempre necesitar esos casos base y los 745 00:35:47,110 --> 00:35:48,210 llamadas recursivas. 746 00:35:48,210 --> 00:35:51,280 Si usted no tiene una llamada recursiva, se no sería una función recursiva. 747 00:35:51,280 --> 00:35:53,210 Si usted no tiene un caso base, usted iría para siempre y 748 00:35:53,210 --> 00:35:54,780 no habría final. 749 00:35:54,780 --> 00:35:57,870 Y el caso base es siempre lo primero, porque siempre se quiere comprobar 750 00:35:57,870 --> 00:36:00,420 si estás al final primera. 751 00:36:00,420 --> 00:36:04,770 Así que antes de hacer un poco de pseudocódigo, ¿por qué Por qué no te tomas un minuto para pensar en 752 00:36:04,770 --> 00:36:09,360 cómo una función factorial recursiva se escribiría? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Además, todas las que están haciendo, por escrito hacia fuera en una hoja de papel es 755 00:36:26,010 --> 00:36:27,960 lo que vas a tener que hacer en el examen de mañana. 756 00:36:27,960 --> 00:36:32,160 Así que probablemente una buena práctica hacer Asegúrese de que el código que está escribiendo 757 00:36:32,160 --> 00:36:34,420 hacia abajo en la hoja de papel - 758 00:36:34,420 --> 00:36:35,160 o se puede hacer eso. 759 00:36:35,160 --> 00:36:36,710 ¿Sabes dónde están los puntos y comas. 760 00:36:36,710 --> 00:36:37,660 ¿Te acuerdas de la sintaxis. 761 00:36:37,660 --> 00:36:40,400 Porque usted no está capaz de tener una compilador dice que usted hizo un error. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> También, a lo largo de esas líneas, mañana, cuando que haya problemas de codificación, si 764 00:37:07,240 --> 00:37:11,490 se precipitó por el tiempo, o si usted es muy confundido en cuanto a cómo se supone que debes 765 00:37:11,490 --> 00:37:16,030 escribir la cosa particular en C, le tocaría escribir pseudo-código 766 00:37:16,030 --> 00:37:18,160 y escribir comentarios en también. 767 00:37:18,160 --> 00:37:21,940 Porque no hay crédito parcial para un Muchas de las preguntas en el cuestionario. 768 00:37:21,940 --> 00:37:24,840 Así que usted puede estar apurado, o usted sólo podría ser confundido. 769 00:37:24,840 --> 00:37:28,030 Escribiendo en los comentarios o pseudo-código a menudo son maneras que usted 770 00:37:28,030 --> 00:37:29,360 puede obtener crédito parcial. 771 00:37:29,360 --> 00:37:31,440 >> Así que no deje algo en blanco en el cuestionario. 772 00:37:31,440 --> 00:37:33,490 No hay sanciones por poner las cosas pulg 773 00:37:33,490 --> 00:37:37,650 De hecho, poniendo en pseudo-código o comentarios va a ayudar a la motoniveladora 774 00:37:37,650 --> 00:37:40,410 averiguar si realmente sabe lo que que está hablando, y quizás premio 775 00:37:40,410 --> 00:37:42,030 que algo de crédito parcial para eso. 776 00:37:42,030 --> 00:37:44,510 >> También a lo largo de esas líneas, escribir con claridad. 777 00:37:44,510 --> 00:37:47,650 Si no podemos realmente lo que estamos escribiendo, no vamos a llamar 778 00:37:47,650 --> 00:37:49,900 a la medianoche de mañana con la figura lo que escribiste. 779 00:37:49,900 --> 00:37:51,520 Sólo vamos a despegar puntos. 780 00:37:51,520 --> 00:37:56,570 Escribir con claridad para que podamos escuchar, o mejor dicho, podemos leer lo que escribiste. 781 00:37:56,570 --> 00:38:00,230 >> Y si dice dos frases, no escriba un párrafo. 782 00:38:00,230 --> 00:38:02,280 Siga las instrucciones. 783 00:38:02,280 --> 00:38:03,500 Escribir con claridad. 784 00:38:03,500 --> 00:38:07,720 Y escribir en estos comentarios o pseudocódigo para las preguntas que podrían 785 00:38:07,720 --> 00:38:10,270 concesión de crédito parcial. 786 00:38:10,270 --> 00:38:12,520 >> OK, vamos a ir a factorial. 787 00:38:12,520 --> 00:38:15,000 Así que tenemos una función factorial. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Si tuviera que escribir realmente esto en C, ¿qué tengo que poner delante del nombre 790 00:38:21,550 --> 00:38:22,800 de la función? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 El tipo de retorno, que, en este caso, vamos a darle int. 793 00:38:30,060 --> 00:38:35,450 Y luego, dentro de las llaves, es lo que pasa dentro de las llaves para 794 00:38:35,450 --> 00:38:36,850 una función? 795 00:38:36,850 --> 00:38:37,950 >> ESTUDIANTES: Tipo de argumento. 796 00:38:37,950 --> 00:38:39,150 >> JASON HIRSCHHORN: sus argumentos. 797 00:38:39,150 --> 00:38:42,680 Así factorial probablemente tener una discusión. 798 00:38:42,680 --> 00:38:44,500 Va probablemente sólo tienen un argumento. 799 00:38:44,500 --> 00:38:49,450 Y vamos a decir que va a tomar un número entero llamado x. 800 00:38:49,450 --> 00:38:52,770 Y de nuevo, al escribir el prototipo de una función o escribir la función 801 00:38:52,770 --> 00:38:57,110 en el código antes de definirla, se escribir el tipo de datos y el nombre de 802 00:38:57,110 --> 00:39:01,370 esa variable sólo para esa función. 803 00:39:01,370 --> 00:39:06,350 Así que usted puede pasar algún número en esta función, que va a ser referido como x 804 00:39:06,350 --> 00:39:07,340 internamente. 805 00:39:07,340 --> 00:39:08,755 >> Tenemos nuestra función factorial. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Necesitamos dos cosas, un caso base y una llamada recursiva. 808 00:39:15,850 --> 00:39:20,900 ¿Cuál es el caso base para el factorial? 809 00:39:20,900 --> 00:39:24,850 Alguien que lo escribió y que no tiene todavía se habla, ¿cuál es la base 810 00:39:24,850 --> 00:39:26,100 caso de factorial? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> ESTUDIANTE: Si n es menor de 2, devuelve 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON HIRSCHHORN: Si n es menos de 2, devuelve 1. 814 00:39:33,520 --> 00:39:37,216 Me gusta eso, porque eso se encarga de 0 y 1. 815 00:39:37,216 --> 00:39:45,290 Así que vamos a hacer x <2, devuelve 1. 816 00:39:45,290 --> 00:39:47,870 Si nos cruzamos 0, si conseguimos pasado 1, esta función se 817 00:39:47,870 --> 00:39:49,790 volver inmediatamente 1. 818 00:39:49,790 --> 00:39:54,020 Si nos pasamos un número mayor que o igual a 2, vamos a 819 00:39:54,020 --> 00:39:55,370 tener nuestra llamada recursiva. 820 00:39:55,370 --> 00:39:57,855 >> Y entonces, ¿cómo es que va a funcionar? 821 00:39:57,855 --> 00:40:01,070 ¿Puede alguien que trabajó en este que no ha hablado todavía me dan la 822 00:40:01,070 --> 00:40:07,380 llamada recursiva para esta función en pseudocódigo? 823 00:40:07,380 --> 00:40:10,770 Si nos pasamos de un número x y es mayor que 2, lo 824 00:40:10,770 --> 00:40:13,370 Qué queremos hacer? 825 00:40:13,370 --> 00:40:17,930 También hemos de ejemplo escrito en la secundario que le podría dar una pista. 826 00:40:17,930 --> 00:40:20,770 >> ESTUDIANTE: Llame x veces el factorial de x menos 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON HIRSCHHORN: Exactamente. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Vamos a volver x veces el factorial de x menos 1. 830 00:40:37,750 --> 00:40:41,810 Y eso, a pesar de que he escrito arriba, básicamente, lo que dijo en Inglés, 831 00:40:41,810 --> 00:40:44,580 esta función factorial se llamará de nuevo. 832 00:40:44,580 --> 00:40:46,320 Se va a ejecutar en x menos 1. 833 00:40:46,320 --> 00:40:49,320 Va a volver con algún entero, y entonces va a multiplicar estos dos 834 00:40:49,320 --> 00:40:52,050 juntos, y ese valor será vuelto a lo que sea llamado a este 835 00:40:52,050 --> 00:40:55,010 función factorial, lo que podría ser otro ejemplo de 836 00:40:55,010 --> 00:40:58,420 esta función factorial. 837 00:40:58,420 --> 00:41:01,360 >> Así que es un ejemplo de un recursiva función, una muy 838 00:41:01,360 --> 00:41:02,530 función recursiva simple. 839 00:41:02,530 --> 00:41:04,530 Pero la mayoría de ellos será así. 840 00:41:04,530 --> 00:41:11,170 Si quieres un buen recursiva luchar por la prueba, trate de codificación 841 00:41:11,170 --> 00:41:13,230 búsqueda binaria recursiva. 842 00:41:13,230 --> 00:41:18,950 Porque si lo hicieras de búsqueda binaria para problema fijó tres, probablemente lo hizo 843 00:41:18,950 --> 00:41:21,730 iterativa en un bucle while. 844 00:41:21,730 --> 00:41:23,700 >> Pero también puede ser escrito de forma recursiva. 845 00:41:23,700 --> 00:41:26,310 Vas a tener que escribir su propia función separada que lleva algún 846 00:41:26,310 --> 00:41:29,020 diferentes argumentos de línea de comandos - o no los argumentos de línea de comandos, algunos 847 00:41:29,020 --> 00:41:30,910 diferentes argumentos sólo regular. 848 00:41:30,910 --> 00:41:33,870 Pero se podría escribir de búsqueda binaria de forma recursiva así. 849 00:41:33,870 --> 00:41:36,190 >> ESTUDIANTE: ¿Así que también podría haber escrito, en vez de x menos 1, que 850 00:41:36,190 --> 00:41:39,502 también podría haber escrito x menos menos, ya que podría tener 851 00:41:39,502 --> 00:41:40,830 escrito minus minus x. 852 00:41:40,830 --> 00:41:44,740 ¿Puedes explicar muy rápidamente por qué esas serían las cosas diferentes, 853 00:41:44,740 --> 00:41:49,510 como cuál es la diferencia entre x menos menos y menos menos x? 854 00:41:49,510 --> 00:41:51,320 >> JASON HIRSCHHORN: No, no estoy va a entrar en eso. 855 00:41:51,320 --> 00:41:55,500 Pero voy a hablar con usted acerca de él después de clase. x menos menos, menos, menos x 856 00:41:55,500 --> 00:41:57,780 disminuir x en 1. 857 00:41:57,780 --> 00:41:59,090 Pero lo hacen un poco diferente. 858 00:41:59,090 --> 00:42:00,340 Pero yo no quiero entrar en eso. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Otras preguntas sobre la recursividad o esta función? 861 00:42:09,090 --> 00:42:10,140 Eso no es realmente incluso pseudocódigo. 862 00:42:10,140 --> 00:42:15,060 Eso es básicamente el código en C usted escribiría para esto. 863 00:42:15,060 --> 00:42:19,393 >> OK, cualquier otra pregunta acerca de los temas hasta aquí? 864 00:42:19,393 --> 00:42:19,864 Sí. 865 00:42:19,864 --> 00:42:23,130 >> ESTUDIANTE: Tengo un pequeño repaso a la punto y flotante de precisión. 866 00:42:23,130 --> 00:42:24,260 >> JASON HIRSCHHORN: Flotante punto y precisión. 867 00:42:24,260 --> 00:42:26,920 ¿Puede alguien realmente rápido me da un resumen de 868 00:42:26,920 --> 00:42:28,210 punto flotante y precisión? 869 00:42:28,210 --> 00:42:30,420 Todos ustedes que tenías que hacer esto para su problema establecido, por lo que estamos todos 870 00:42:30,420 --> 00:42:31,700 familiarizado con él. 871 00:42:31,700 --> 00:42:35,090 O tal vez no todos ustedes. 872 00:42:35,090 --> 00:42:36,602 ¿Alguien? 873 00:42:36,602 --> 00:42:39,530 Dadme un punto de empezar. 874 00:42:39,530 --> 00:42:40,750 Punto flotante y precisión. 875 00:42:40,750 --> 00:42:42,380 ¿Cuál es el problema? 876 00:42:42,380 --> 00:42:42,960 Sí. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON HIRSCHHORN: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Lo siento. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Sólo hay un número finito de números que pueden ser representados 882 00:42:51,550 --> 00:42:57,930 porque estás en una, en nuestra caso, un sistema de 32 bits. 883 00:42:57,930 --> 00:43:03,080 Así que tipo de tener que compensar algunos números. 884 00:43:03,080 --> 00:43:03,910 >> JASON HIRSCHHORN: Así que eso es exactamente correcto. 885 00:43:03,910 --> 00:43:08,110 Hay sólo una cierta cantidad de números que pueden ser representados. 886 00:43:08,110 --> 00:43:11,770 Si se multiplican dos números muy grandes, podría desbordarse la cantidad 887 00:43:11,770 --> 00:43:13,950 de los espacios que tiene que representar un número entero. 888 00:43:13,950 --> 00:43:17,930 Es por eso que a veces se utiliza un long long en lugar de un int. 889 00:43:17,930 --> 00:43:19,210 Eso tiene más espacios. 890 00:43:19,210 --> 00:43:21,210 Que puede contener un número mayor. 891 00:43:21,210 --> 00:43:24,310 >> Punto flotante de precisión tiene que ver con eso, sino que también tiene que ver con la 892 00:43:24,310 --> 00:43:29,300 hecho de que los números decimales son no siempre representado. 893 00:43:29,300 --> 00:43:29,540 Lo siento. 894 00:43:29,540 --> 00:43:31,280 Permítanme decirlo de esta copia de seguridad. 895 00:43:31,280 --> 00:43:36,610 El número decimal 1.0 no es siempre representado como es de esperar, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 A veces se representa como 1,000000001 0,999999999 o. 898 00:43:50,360 --> 00:43:52,780 Se podría incluso 89 lanzado en alguna parte. 899 00:43:52,780 --> 00:43:56,560 Así que los números decimales no son representado exactamente igual que lo haría 900 00:43:56,560 --> 00:43:58,430 esperamos que sean representados. 901 00:43:58,430 --> 00:44:00,010 >> Así que en conjunto de problemas - 902 00:44:00,010 --> 00:44:00,860 fue dos? - 903 00:44:00,860 --> 00:44:05,290 problema fijó dos, donde nos topamos con Los números de punto flotante, cuando queríamos 904 00:44:05,290 --> 00:44:08,690 que representan exactamente lo que queríamos que representan, el número 905 00:44:08,690 --> 00:44:12,860 de monedas de un centavo, o el número de centavos, multiplicamos por 100 de ellos. 906 00:44:12,860 --> 00:44:14,750 Les rodeamos. 907 00:44:14,750 --> 00:44:18,660 Y luego le cortamos todo detrás del punto decimal. 908 00:44:18,660 --> 00:44:22,020 Eso era para asegurarse de que lo harían realidad es igual exactamente lo que queríamos 909 00:44:22,020 --> 00:44:22,410 que igualan. 910 00:44:22,410 --> 00:44:26,870 >> Porque cuando se toma algo que es Un flotador y convertirlo en un int, que 911 00:44:26,870 --> 00:44:29,860 cortar todo a la derecha de la coma decimal. 912 00:44:29,860 --> 00:44:33,900 Debido a que hay un poco de punto flotante imprecisión, 100.000 podrían ser 913 00:44:33,900 --> 00:44:37,440 representados como 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Y si lo que cortó todo para la derecha de inmediato, vamos a 915 00:44:40,350 --> 00:44:41,600 obtener el número equivocado. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Sí. 918 00:44:44,180 --> 00:44:45,290 >> ESTUDIANTE: Yo tenía una pregunta sobre el casting. 919 00:44:45,290 --> 00:44:47,500 ¿En qué orden se le ocurre entrar? 920 00:44:47,500 --> 00:44:54,480 Si lo hace flotar, soportes, 1 divididos por 10, es lo que hace 1 dividido por 10, 921 00:44:54,480 --> 00:44:58,910 a continuación, obtener 0,1, luego gire en un flotador? 922 00:44:58,910 --> 00:45:01,470 >> JASON HIRSCHHORN: Si lo hace flotar 1 dividido por 10 - 923 00:45:01,470 --> 00:45:02,550 >> ESTUDIANTE: Sí, y entonces es igual a - 924 00:45:02,550 --> 00:45:04,240 así, lo haría normalmente tenerlo igual - 925 00:45:04,240 --> 00:45:04,690 Sí. 926 00:45:04,690 --> 00:45:06,760 ¿Quieres hacer un flotador, ¿verdad? 927 00:45:06,760 --> 00:45:12,790 >> JASON HIRSCHHORN: OK, así que vamos a utilizar eso para ramificarse en averiguar 928 00:45:12,790 --> 00:45:15,390 las respuestas a estas preguntas a través de la codificación. 929 00:45:15,390 --> 00:45:18,180 Debido a que es probable que tenga una gran cantidad de estas preguntas minutos, y una buena manera 930 00:45:18,180 --> 00:45:19,100 para resolverlos es a través de la codificación. 931 00:45:19,100 --> 00:45:21,320 Así que vamos a codificar esto en este momento, y luego vamos a volver atrás y 932 00:45:21,320 --> 00:45:24,020 codificar la pregunta que tenía. 933 00:45:24,020 --> 00:45:24,950 >> Así que la primera línea - 934 00:45:24,950 --> 00:45:29,390 No debí haber escrito - lo que es lo primero que queremos hacer cuando 935 00:45:29,390 --> 00:45:32,250 abrir un nuevo archivo en gedit? 936 00:45:32,250 --> 00:45:34,190 >> ESTUDIANTE: Include. 937 00:45:34,190 --> 00:45:35,920 >> JASON HIRSCHHORN: Incluya qué? 938 00:45:35,920 --> 00:45:37,952 >> ESTUDIANTE: biblioteca CS50. 939 00:45:37,952 --> 00:45:39,920 >> JASON HIRSCHHORN: OK. 940 00:45:39,920 --> 00:45:42,590 ¿Qué más debemos incluir? 941 00:45:42,590 --> 00:45:46,820 Sólo vamos a comprobar lo que sucede cuando lanzas algo a un flotador. 942 00:45:46,820 --> 00:45:48,605 Pero, ¿qué necesitamos para incluir si estamos va a escribir un programa en C? 943 00:45:48,605 --> 00:45:49,300 >> ESTUDIANTE: E / S estándar 944 00:45:49,300 --> 00:45:50,625 >> JASON HIRSCHHORN: stdio.h. 945 00:45:50,625 --> 00:45:54,880 En realidad no necesitamos, para este programa, cs50.h, aunque es 946 00:45:54,880 --> 00:45:55,920 Siempre es útil incluirlo. 947 00:45:55,920 --> 00:45:58,260 Pero nosotros siempre necesitamos stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> ESTUDIANTE: Cuando se codifican en C? 949 00:45:59,660 --> 00:46:15,770 >> JASON HIRSCHHORN: Al programar en C. 950 00:46:15,770 --> 00:46:17,090 >> Así que me lo guardo como el archivo c.. 951 00:46:17,090 --> 00:46:18,590 Tengo algunas buenas resaltado de sintaxis. 952 00:46:18,590 --> 00:46:22,890 Escribí vacío interior principal. 953 00:46:22,890 --> 00:46:24,792 ¿Qué significa el vacío? 954 00:46:24,792 --> 00:46:26,740 >> ESTUDIANTE: No tomar ninguna argumentos de la línea de comandos. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: medio vacío, en este caso, el principal no se hace 956 00:46:28,900 --> 00:46:29,700 argumentos de la línea de comandos. 957 00:46:29,700 --> 00:46:32,720 En otros casos, significa que la función no toma argumentos de la línea de comandos. 958 00:46:32,720 --> 00:46:36,560 O la función, si yo tuviera que escribir void main (void), que dirían principales 959 00:46:36,560 --> 00:46:38,460 no devolver nada. 960 00:46:38,460 --> 00:46:39,960 Así vacío sólo significa nada. 961 00:46:39,960 --> 00:46:42,510 ¿Qué haría yo escribo si tuviera que tomar argumentos de línea de comandos? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> ESTUDIANTE: int c arco arco cadena de v 964 00:46:47,150 --> 00:46:49,055 >> JASON HIRSCHHORN: int argc argv cadena. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 ¿Es eso cierto? 967 00:46:55,572 --> 00:46:58,720 >> ESTUDIANTE: Es corchetes argv estrella carac. 968 00:46:58,720 --> 00:47:01,730 >> JASON HIRSCHHORN: Así que usted podría escribir soportes argv cadena o argv estrellas caracteres 969 00:47:01,730 --> 00:47:03,710 corchetes, pero que necesita los corchetes. 970 00:47:03,710 --> 00:47:06,290 Debido argv es un array de cadenas, recuerda. 971 00:47:06,290 --> 00:47:07,360 No es sólo una cadena. 972 00:47:07,360 --> 00:47:10,350 Así argv cadena es, aquí está una cadena llama argv. 973 00:47:10,350 --> 00:47:13,630 Soportes argv cadena es, aquí está una matriz de cadenas. 974 00:47:13,630 --> 00:47:17,865 Soportes argv cadena argc Así int sería algo que me 975 00:47:17,865 --> 00:47:18,810 probablemente escribir. 976 00:47:18,810 --> 00:47:23,050 >> Así que quería guardar en un entero? 977 00:47:23,050 --> 00:47:24,285 >> ESTUDIANTE: Sí, entero. 978 00:47:24,285 --> 00:47:25,840 O en un flotador. 979 00:47:25,840 --> 00:47:26,710 >> JASON HIRSCHHORN: En un flotador? 980 00:47:26,710 --> 00:47:30,790 Al igual que, float x es igual a 1 dividido por 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON HIRSCHHORN: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 ¿Cómo puedo imprimir un flotador en printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 ¿Qué? 986 00:47:46,714 --> 00:47:47,560 >> ESTUDIANTE:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON HIRSCHHORN:% f. 988 00:47:48,300 --> 00:47:50,810 ¿Qué es un número entero? 989 00:47:50,810 --> 00:47:52,110 d o i. 990 00:47:52,110 --> 00:47:53,000 ¿Qué es una cadena? 991 00:47:53,000 --> 00:47:54,240 >> ESTUDIANTE: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON HIRSCHHORN: s. 993 00:47:56,140 --> 00:47:57,550 ¿Cómo puedo obtener una nueva línea? 994 00:47:57,550 --> 00:47:58,800 >> ESTUDIANTE: Backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON HIRSCHHORN: ¿Qué debo hacer para devolver si se ejecuta correctamente principales? 997 00:48:07,100 --> 00:48:08,360 >> ESTUDIANTE: 0. 998 00:48:08,360 --> 00:48:09,430 ¿Tengo que escribir esa línea, sin embargo? 999 00:48:09,430 --> 00:48:10,170 >> ESTUDIANTE: No. 1000 00:48:10,170 --> 00:48:11,513 Bueno, no vamos a escribir, entonces. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 ¿Todos pueden leer eso? 1003 00:48:17,190 --> 00:48:18,485 Se parece un poco pequeña. 1004 00:48:18,485 --> 00:48:20,160 ¿Todos pueden ver, o debería Lo hago más grande? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Creo que para la cámara, vamos a hacer es un poco más grande, sin embargo. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON HIRSCHHORN: Si quiero convertir este . C presentar en un archivo ejecutable, lo que 1009 00:48:38,410 --> 00:48:39,260 Por qué escribo? 1010 00:48:39,260 --> 00:48:41,610 >> ESTUDIANTE: Haga la prueba. 1011 00:48:41,610 --> 00:48:42,080 >> JASON HIRSCHHORN: ¿Lo sientes? 1012 00:48:42,080 --> 00:48:42,790 >> ESTUDIANTE: Haga la prueba. 1013 00:48:42,790 --> 00:48:44,040 >> JASON HIRSCHHORN: Haga la prueba. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Estábamos hablando de esta línea antes. 1016 00:48:48,410 --> 00:48:49,140 Clang. 1017 00:48:49,140 --> 00:48:51,270 ¿Qué hay sonido metálico? 1018 00:48:51,270 --> 00:48:52,200 El nombre del compilador. 1019 00:48:52,200 --> 00:48:53,920 ¿Cuál es esta línea? 1020 00:48:53,920 --> 00:48:55,580 >> ESTUDIANTE: Establece que para la utilización de GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Conjuntos para arriba para uso de GDB. 1022 00:48:59,230 --> 00:49:02,338 Esta línea, ¿qué es eso? 1023 00:49:02,338 --> 00:49:03,290 >> ESTUDIANTE: El código fuente. 1024 00:49:03,290 --> 00:49:06,010 >> JASON HIRSCHHORN: Ese es el archivo de origen, el archivo c.. 1025 00:49:06,010 --> 00:49:08,150 ¿Qué hacen estas dos líneas? 1026 00:49:08,150 --> 00:49:10,245 O estos dos no líneas. 1027 00:49:10,245 --> 00:49:12,300 >> ESTUDIANTE: Nombra lo prueba. 1028 00:49:12,300 --> 00:49:15,410 >> JASON HIRSCHHORN: Así que el guión o dice, nombrarlo algo diferente. 1029 00:49:15,410 --> 00:49:16,790 Y aquí estás llamándolo prueba. 1030 00:49:16,790 --> 00:49:18,900 Si yo no tengo que, ¿cuál sería el nombre de esta? 1031 00:49:18,900 --> 00:49:20,260 >> ESTUDIANTE: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON HIRSCHHORN: a.out. 1033 00:49:22,340 --> 00:49:25,366 ¿Qué hace esto? 1034 00:49:25,366 --> 00:49:27,670 >> ESTUDIANTE: Vincula la biblioteca matemática. 1035 00:49:27,670 --> 00:49:29,550 >> JASON HIRSCHHORN: Vincula en la biblioteca de matemáticas. 1036 00:49:29,550 --> 00:49:32,880 No incluimos la biblioteca matemática, pero ya que es tan común, que han 1037 00:49:32,880 --> 00:49:35,780 make escrito para incluir siempre la biblioteca matemática. 1038 00:49:35,780 --> 00:49:39,050 Y del mismo modo, lo que incluye la biblioteca CS50. 1039 00:49:39,050 --> 00:49:43,010 >> Aceptar, por lo que si enumeramos, ahora tenemos un ejecutable llamado prueba. 1040 00:49:43,010 --> 00:49:45,150 Para ejecutarlo, escribo prueba. 1041 00:49:45,150 --> 00:49:48,330 Veo que mi punto flotante, como era de esperar, es igual a 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 ¿Eso - 1044 00:49:51,590 --> 00:49:52,060 por lo que - 1045 00:49:52,060 --> 00:49:55,210 >> ESTUDIANTE: Entonces, si usted pone flotar ahora, como lo lanzas como float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON HIRSCHHORN: Cast la 1 a un flotador? 1047 00:49:56,870 --> 00:49:59,180 >> ESTUDIANTE: No, tire la cosa completa - 1048 00:49:59,180 --> 00:49:59,500 sí. 1049 00:49:59,500 --> 00:50:02,460 Si usted acaba de hacer eso, ¿ Eso lo hace un 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON HIRSCHHORN: OK, así que muy rápido, 1 dividido por 10, esos son 1051 00:50:07,170 --> 00:50:08,690 enteros se dividen. 1052 00:50:08,690 --> 00:50:13,580 Así que cuando se divide números enteros, son 0, y que está ahorrando que 0 en un 1053 00:50:13,580 --> 00:50:17,170 flotar, porque la barra es sólo la división entera. 1054 00:50:17,170 --> 00:50:19,180 Así que ahora estamos convirtiendo algo en un flotador. 1055 00:50:19,180 --> 00:50:21,650 >> Vamos a ver qué pasa. 1056 00:50:21,650 --> 00:50:22,900 Vamos a hacer la prueba. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Así que ahora vemos que esa barra no era división entera, que estaba flotando 1059 00:50:31,090 --> 00:50:32,640 división de coma. 1060 00:50:32,640 --> 00:50:35,700 Debido a que uno de sus argumentos había sido echado a un flotador. 1061 00:50:35,700 --> 00:50:38,380 Así que ahora que estaba diciendo, el tratamiento de esta división como que estamos tratando con 1062 00:50:38,380 --> 00:50:40,140 puntos flotantes, no con números enteros. 1063 00:50:40,140 --> 00:50:42,760 Y así obtenemos la respuesta que esperamos. 1064 00:50:42,760 --> 00:50:44,620 >> Vamos a ver lo que pasa - 1065 00:50:44,620 --> 00:50:47,103 ¡Uy. 1066 00:50:47,103 --> 00:50:51,646 Si quisiera imprimir más decimales lugares, ¿cómo podría hacerlo? 1067 00:50:51,646 --> 00:50:55,550 >> Punto f Point, o como muchos: ESTUDIANTE decimales que desee. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON HIRSCHHORN: Así que imprimo 10 lugares decimales. 1070 00:51:04,440 --> 00:51:06,610 Y ahora vemos que estamos recibiendo algunas cosas raras. 1071 00:51:06,610 --> 00:51:09,650 Y eso va volviendo a tu pregunta acerca de coma flotante imprecisión. 1072 00:51:09,650 --> 00:51:10,950 Hay cosas raras almacenado aquí. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> Bien, ¿eso responde a tu pregunta? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 ¿Qué más quieres para codificar rápidamente? 1077 00:51:20,200 --> 00:51:25,470 >> ESTUDIANTE: Yo sólo quería ver si No, si te liberas un poco de puntero, 1078 00:51:25,470 --> 00:51:30,410 si ese puntero todavía había almacenado en que la dirección de lo que había sido 1079 00:51:30,410 --> 00:51:32,170 señalando previamente. 1080 00:51:32,170 --> 00:51:34,100 >> JASON HIRSCHHORN: OK, por lo que vamos a hacer eso. 1081 00:51:34,100 --> 00:51:38,030 Carácter ptr estrella, esto crea una variable llamado ptr de tipo char estrellas. 1082 00:51:38,030 --> 00:51:39,280 ¿Cómo escribo malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Just malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Pero entonces tiene que ser el tamaño de, y en este caso, supongo que se había 1087 00:51:51,040 --> 00:51:52,465 estar apuntando a char. 1088 00:51:52,465 --> 00:51:54,450 Así que sería caracteres. 1089 00:51:54,450 --> 00:51:57,520 >> JASON HIRSCHHORN: OK, así que más genéricamente, Inside - 1090 00:51:57,520 --> 00:51:58,770 vamos a editar. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Malloc Dentro, desea que el número de bytes en el montón. 1093 00:52:09,260 --> 00:52:12,320 En general, lo que hemos visto que somos haciendo es que vamos a malloc 1094 00:52:12,320 --> 00:52:14,940 cadenas, por ejemplo, o matrices de enteros. 1095 00:52:14,940 --> 00:52:21,600 Así que si queremos 10 enteros, o el 10 caracteres, 10 nos dará 10. 1096 00:52:21,600 --> 00:52:24,370 Y a continuación, el tamaño de los caracteres daría nos que el tamaño de caracteres, que en 1097 00:52:24,370 --> 00:52:25,120 este caso es de 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Tenemos 10 bytes. 1099 00:52:26,250 --> 00:52:28,540 Si tuviéramos que escribir el tamaño de int, eso nos daría 40 bytes. 1100 00:52:28,540 --> 00:52:31,520 >> Así que más genéricamente, en el interior de malloc es el número de bytes que desea. 1101 00:52:31,520 --> 00:52:34,620 En este caso, estamos recibiendo 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Lo que parece como un uso extraño de malloc, pero para nuestro 1103 00:52:36,900 --> 00:52:38,470 propósitos tiene sentido. 1104 00:52:38,470 --> 00:52:40,420 Así que hay que. 1105 00:52:40,420 --> 00:52:43,420 >> Vamos a llamar gratis. 1106 00:52:43,420 --> 00:52:47,040 Nos deshacemos de ella y usamos ptr nuevo. 1107 00:52:47,040 --> 00:52:48,750 ¿Y qué desea comprobar? 1108 00:52:48,750 --> 00:52:50,550 >> ESTUDIANTE: Yo sólo quería comprobar si o no había nada 1109 00:52:50,550 --> 00:52:51,900 dentro de ella. 1110 00:52:51,900 --> 00:52:53,050 >> JASON HIRSCHHORN: Así que si apuntaba a algo? 1111 00:52:53,050 --> 00:52:57,740 >> ESTUDIANTE: Sí, exactamente, si todavía tenía una dirección de memoria. 1112 00:52:57,740 --> 00:53:02,220 >> JASON HIRSCHHORN: ¿Así que quieres para comprobar el valor de ptr? 1113 00:53:02,220 --> 00:53:03,470 >> ESTUDIANTE: Sí, exactamente. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON HIRSCHHORN: ¿Qué es lo que escribo aquí si quiero comprobar el valor de la 1116 00:53:10,160 --> 00:53:11,880 punto - lo que es, Jordania dijo, el valor? 1117 00:53:11,880 --> 00:53:13,720 O lo que se almacena dentro de ptr? 1118 00:53:13,720 --> 00:53:14,620 >> ESTUDIANTE: Dirección de la memoria. 1119 00:53:14,620 --> 00:53:16,330 >> JASON HIRSCHHORN: Dirección de la memoria. 1120 00:53:16,330 --> 00:53:20,520 Así que si yo escribo sólo esto, que va a dame el valor de PTR. 1121 00:53:20,520 --> 00:53:22,800 ¿Y cómo puedo imprimir a cabo una dirección de memoria? 1122 00:53:22,800 --> 00:53:26,470 ¿Cuál es la cadena de formato para una dirección de la memoria? 1123 00:53:26,470 --> 00:53:27,430 >> ESTUDIANTE:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON HIRSCHHORN:% p. 1125 00:53:28,050 --> 00:53:29,500 % S es una cadena. 1126 00:53:29,500 --> 00:53:30,750 % P para el puntero. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 ¿Es eso cierto? 1129 00:53:43,540 --> 00:53:44,790 Eso es correcto. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Así ptr es igual a - 1132 00:53:51,040 --> 00:53:53,350 que todavía tiene algo en ella. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Esta es probablemente una más pregunta interesante. 1135 00:53:57,645 --> 00:53:59,198 ¿Qué hace esa línea? 1136 00:53:59,198 --> 00:54:00,830 >> ESTUDIANTE: fallas Seg. 1137 00:54:00,830 --> 00:54:01,310 >> JASON HIRSCHHORN: ¿Qué? 1138 00:54:01,310 --> 00:54:02,678 >> ESTUDIANTE: Creo que SEG faltas. 1139 00:54:02,678 --> 00:54:03,574 >> JASON HIRSCHHORN: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> ESTUDIANTE: Creo que va a SEG culpa. 1141 00:54:04,920 --> 00:54:08,265 >> JASON HIRSCHHORN: Así que esta línea de ptr código, estrella, lo que 1142 00:54:08,265 --> 00:54:10,152 Qué significa la estrella? 1143 00:54:10,152 --> 00:54:11,240 >> ESTUDIANTE: El contenido de. 1144 00:54:11,240 --> 00:54:11,560 >> JASON HIRSCHHORN: Si. 1145 00:54:11,560 --> 00:54:13,910 Ir a sacar el contenido de. 1146 00:54:13,910 --> 00:54:16,830 Así que esto va a ir a la memoria abordar allí y darme eso. 1147 00:54:16,830 --> 00:54:21,030 Solía% c aquí porque hay son caracteres almacenados allí. 1148 00:54:21,030 --> 00:54:23,390 Así que vamos a ir a esa dirección nos Acabo de ver - o probablemente va a ser un 1149 00:54:23,390 --> 00:54:25,190 poco diferente este vez que ejecutamos el programa. 1150 00:54:25,190 --> 00:54:28,010 Pero vamos a ir a esa dirección que sabemos que todavía existe 1151 00:54:28,010 --> 00:54:29,260 y ver lo que hay allí. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Así que no SEG culpa. 1154 00:54:37,110 --> 00:54:38,970 Simplemente no nos ha dado nada. 1155 00:54:38,970 --> 00:54:43,350 Puede ser que haya en realidad nos ha dado algo, simplemente no lo puede ver. 1156 00:54:43,350 --> 00:54:45,110 Y eso va de nuevo a esta idea - 1157 00:54:45,110 --> 00:54:47,270 y nosotros no vamos a tener demasiado en esto, porque eso es más allá de la 1158 00:54:47,270 --> 00:54:48,460 alcance de este curso. 1159 00:54:48,460 --> 00:54:51,260 Pero hemos hablado aquí, si nos fue más allá de los límites de la matriz por 1160 00:54:51,260 --> 00:54:54,890 1, podríamos no tener problemas. 1161 00:54:54,890 --> 00:54:58,550 >> A veces, cuando te vas fuera por 1, que estás haciendo algo mal, y usted 1162 00:54:58,550 --> 00:54:59,220 podría meter en problemas. 1163 00:54:59,220 --> 00:55:00,820 Pero no siempre se meten en problemas. 1164 00:55:00,820 --> 00:55:05,170 Depende de cuánto de algo malo que Qué, te vas a meter en problemas. 1165 00:55:05,170 --> 00:55:07,790 Lo cual no quiere decir, ser descuidado con su código. 1166 00:55:07,790 --> 00:55:12,080 Pero es decir, el programa no se siempre dejar de fumar, incluso si vas en algún lugar 1167 00:55:12,080 --> 00:55:14,130 que no debes ir. 1168 00:55:14,130 --> 00:55:18,170 >> Un buen ejemplo de esto es, una gran cantidad de personas en su problema conjunto 3, que 1169 00:55:18,170 --> 00:55:22,350 tenía 15 años, no comprobó la límites de la junta. 1170 00:55:22,350 --> 00:55:25,860 Así que miró a la izquierda, miró a la derecha, miró a lo alto, se veía 1171 00:55:25,860 --> 00:55:27,000 a la parte inferior. 1172 00:55:27,000 --> 00:55:31,540 Pero usted no comprobó para ver si la parte superior fue en realidad va a estar en el consejo. 1173 00:55:31,540 --> 00:55:35,220 Y un montón de gente que hizo eso y resultó que en, su programa funcionó 1174 00:55:35,220 --> 00:55:38,960 perfectamente, porque donde estaba ese tablero almacenada en la memoria, si usted fue uno 1175 00:55:38,960 --> 00:55:42,300 por encima de ella o comprobado que la memoria dirección, no había nada 1176 00:55:42,300 --> 00:55:44,870 particularmente horrible de que, por lo que su programa no era 1177 00:55:44,870 --> 00:55:45,970 va a gritar a usted. 1178 00:55:45,970 --> 00:55:48,870 >> Pero seguiríamos despegar puntos si que no compruebe que, debido a que 1179 00:55:48,870 --> 00:55:50,850 estaban haciendo algo que no estabas supone que debe hacer, y usted podría tener 1180 00:55:50,850 --> 00:55:51,860 metido en problemas. 1181 00:55:51,860 --> 00:55:54,040 Las probabilidades son, sin embargo, es probable que no lo hiciste. 1182 00:55:54,040 --> 00:55:57,790 Así que esto es para demostrar que, sí, todavía podemos ir a ella. 1183 00:55:57,790 --> 00:55:59,010 Y no vamos a entrar en problema en este caso. 1184 00:55:59,010 --> 00:56:04,000 Si tratamos de hacer leer el próximos 100 caracteres, habíamos 1185 00:56:04,000 --> 00:56:06,000 probablemente meterse en problemas. 1186 00:56:06,000 --> 00:56:09,400 Y usted puede codificar la lectura de la siguiente 100 caracteres si quiere haciendo algunas 1187 00:56:09,400 --> 00:56:10,110 especie de bucle. 1188 00:56:10,110 --> 00:56:10,850 Sí. 1189 00:56:10,850 --> 00:56:16,250 >> ESTUDIANTE: Desde que nos asignaron que espacio de un valor real, no lo haríamos 1190 00:56:16,250 --> 00:56:17,050 realmente será capaz de ver nada. 1191 00:56:17,050 --> 00:56:21,740 ¿Hay que probarlo con el ajuste que igual a como C o algo? 1192 00:56:21,740 --> 00:56:22,640 >> JASON HIRSCHHORN: Muy buena pregunta. 1193 00:56:22,640 --> 00:56:25,340 ¿Cómo se configura el valor - 1194 00:56:25,340 --> 00:56:28,980 qué línea de código Cómo puedo escribir en la línea siete para hacer lo que dijiste? 1195 00:56:28,980 --> 00:56:34,040 >> ESTUDIANTE: Star ptr es igual a un solo cita c Extremo comilla simple. 1196 00:56:34,040 --> 00:56:36,970 >> JASON HIRSCHHORN: Así que eso es poner un carácter, c, en ese lugar, 1197 00:56:36,970 --> 00:56:40,200 porque una vez más, esa estrella significa ir a allí. 1198 00:56:40,200 --> 00:56:43,320 Y cuando se usa en el lado de la mano izquierda de un operador de asignación, que es igual a 1199 00:56:43,320 --> 00:56:47,270 firmar, que no vamos a conseguir que la valor tanto como establece ese valor. 1200 00:56:47,270 --> 00:56:48,520 Ahora vamos a ver qué pasa. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Ponemos algo allí y fue allí. 1203 00:56:56,770 --> 00:56:58,000 Llamamos libre. 1204 00:56:58,000 --> 00:57:00,100 Algunas cosas que probablemente sucedió en el montón. 1205 00:57:00,100 --> 00:57:01,890 Por lo tanto, ya no está allí. 1206 00:57:01,890 --> 00:57:07,440 Pero de nuevo, no estamos obteniendo en problemas por ir allí. 1207 00:57:07,440 --> 00:57:10,260 >> Estoy haciendo esto en el código para ilustrar que muchos de estos 1208 00:57:10,260 --> 00:57:12,410 preguntas que usted tiene, que son muy interesante 1209 00:57:12,410 --> 00:57:13,650 responde a una gran cantidad de tiempo. 1210 00:57:13,650 --> 00:57:15,260 Y ellos son realmente buenas preguntas. 1211 00:57:15,260 --> 00:57:19,010 Y usted puede calcular hacia fuera en su cuenta si, por ejemplo, 1212 00:57:19,010 --> 00:57:19,990 ya no estamos en la sección. 1213 00:57:19,990 --> 00:57:20,940 Sí. 1214 00:57:20,940 --> 00:57:24,430 >> ESTUDIANTE: Debido a que usted no va a enviar el puntero en cualquier lugar, es lo que necesita 1215 00:57:24,430 --> 00:57:26,530 utilizar malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON HIRSCHHORN: Así que esto se remonta a su pregunta inicial. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 ¿Es sólo una variable local? 1219 00:57:29,980 --> 00:57:32,280 Malloc aquí no es que convincente. 1220 00:57:32,280 --> 00:57:35,260 El uso de malloc aquí no es que convincente porque es 1221 00:57:35,260 --> 00:57:36,500 sólo una variable local. 1222 00:57:36,500 --> 00:57:40,970 >> ESTUDIANTE: Entonces podrías hacer carbón ptr estrellas es igual a saludar? 1223 00:57:40,970 --> 00:57:41,400 >> JASON HIRSCHHORN: Oh. 1224 00:57:41,400 --> 00:57:43,300 Así que vamos a volver ahora a su pregunta inicial. 1225 00:57:43,300 --> 00:57:46,885 Creo que usted no está satisfecho con mi respuesta. 1226 00:57:46,885 --> 00:57:48,220 ¿De acuerdo? 1227 00:57:48,220 --> 00:57:49,226 Al igual que? 1228 00:57:49,226 --> 00:57:49,682 >> ESTUDIANTE: Sí. 1229 00:57:49,682 --> 00:57:50,932 Espere. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON HIRSCHHORN: ¿Y dónde Qué quieres imprimir? 1232 00:57:57,850 --> 00:58:00,026 Así que vamos a imprimir una cadena de esa manera? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> ESTUDIANTE: Interesante. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON HIRSCHHORN: Esto dice esto argumento tiene el tipo de un carácter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Así que esto debe ser un carácter. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> ESTUDIANTE: Apenas toma la primera. 1241 00:58:26,280 --> 00:58:28,610 >> JASON HIRSCHHORN: Así que esta es lo que dije antes. 1242 00:58:28,610 --> 00:58:34,240 Como he dicho, no es el almacenamiento de la cadena dentro de puntero variable. 1243 00:58:34,240 --> 00:58:35,120 Es el almacenamiento - 1244 00:58:35,120 --> 00:58:36,350 >> ESTUDIANTE: El primer valor de la cadena. 1245 00:58:36,350 --> 00:58:40,810 >> JASON HIRSCHHORN: La dirección de el primer valor de la cadena. 1246 00:58:40,810 --> 00:58:46,940 Si nos vamos a imprimir esto, estamos obtener el valor dentro de puntero. 1247 00:58:46,940 --> 00:58:51,005 Y veremos que es, de hecho, una dirección de memoria. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> ¿Eso tiene sentido? 1250 00:58:56,440 --> 00:58:56,940 Lo siento. 1251 00:58:56,940 --> 00:58:58,996 Espera, ¿eso responde a tu pregunta, sin embargo? 1252 00:58:58,996 --> 00:58:59,790 >> ESTUDIANTE: Sí. 1253 00:58:59,790 --> 00:59:05,830 >> JASON HIRSCHHORN: Esta línea de código es la creación de una cadena y luego otro 1254 00:59:05,830 --> 00:59:09,115 puntero variable que se apunta de esa cadena, de la matriz. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Sí. 1257 00:59:14,980 --> 00:59:19,200 >> ESTUDIANTE: Entonces, si nos fuimos un recuerdo seguir haciendo frente, sacaríamos el h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Se ha almacenado como una cadena? 1260 00:59:23,150 --> 00:59:24,400 >> JASON HIRSCHHORN: Al igual que, lo hicimos - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 así que esto es valioso hacer. 1263 00:59:30,790 --> 00:59:33,780 Esta es la aritmética de punto, que ustedes han visto antes y debe ser 1264 00:59:33,780 --> 00:59:35,550 relativamente cómodo. 1265 00:59:35,550 --> 00:59:36,905 Esto es similar a la escritura - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 si tuviéramos que escribir esta línea de código, hemos visto la notación de matriz antes. 1268 00:59:46,350 --> 00:59:55,900 Esto nos debe dar la segunda valor en este array, h. 1269 00:59:55,900 --> 01:00:05,010 >> Si hiciéramos esto, esto también debe dar nosotros el segundo valor en ese array. 1270 01:00:05,010 --> 01:00:08,320 Debido a que no va a la memoria dirección de la primera hora, pero el 1271 01:00:08,320 --> 01:00:10,530 dirección de memoria de la cosa de una vez. 1272 01:00:10,530 --> 01:00:14,360 Y entonces los desreferencias operador estrellas ese puntero. 1273 01:00:14,360 --> 01:00:16,940 Y de nuevo, vamos a ver. 1274 01:00:16,940 --> 01:00:18,664 Recibimos h de nuevo. 1275 01:00:18,664 --> 01:00:20,980 >> ESTUDIANTE: ¿Qué significa exactamente dereference significa eso? 1276 01:00:20,980 --> 01:00:23,650 >> JASON HIRSCHHORN: Dereference es una palabra elegante para ir a. 1277 01:00:23,650 --> 01:00:26,390 Ir a eso y lo que hay es eliminar la referencia de un puntero. 1278 01:00:26,390 --> 01:00:28,240 Es sólo una palabra elegante para eso. 1279 01:00:28,240 --> 01:00:29,986 >> ESTUDIANTE: Si quisiéramos imprimir toda la cadena, podríamos 1280 01:00:29,986 --> 01:00:31,930 hacer puntero signo? 1281 01:00:31,930 --> 01:00:33,490 >> JASON HIRSCHHORN: OK, estamos va a hacer una pausa aquí. 1282 01:00:33,490 --> 01:00:35,480 Vamos a terminar aquí. 1283 01:00:35,480 --> 01:00:41,760 Ampersand le da la dirección de un ubicación, así que cuando usted hace signo de 1284 01:00:41,760 --> 01:00:44,080 una variable, que te da la dirección donde se almacena esa variable. 1285 01:00:44,080 --> 01:00:48,580 Puntero Ampersand le dará la Dirección de ptr ptr donde está en la memoria. 1286 01:00:48,580 --> 01:00:50,140 >> No vamos a ir en con este ejemplo. 1287 01:00:50,140 --> 01:00:52,640 Usted puede averiguar estos cosas por su cuenta. 1288 01:00:52,640 --> 01:00:55,740 Pero de nuevo, esto podría incluso ser un Rayando poco más allá de lo que necesita saber para 1289 01:00:55,740 --> 01:00:58,000 el alcance de esta mitad de período - 1290 01:00:58,000 --> 01:00:59,070 o este cuestionario, más bien. 1291 01:00:59,070 --> 01:01:00,270 Lo siento. 1292 01:01:00,270 --> 01:01:03,770 >> Vamos a seguir adelante, porque lo haría gustaría hacer un problema de codificación 1293 01:01:03,770 --> 01:01:05,100 antes de tiempo se ha acabado. 1294 01:01:05,100 --> 01:01:09,340 Y vamos a codificar lo que pienso es la más convincente de estas 1295 01:01:09,340 --> 01:01:11,020 ejemplos, atoi. 1296 01:01:11,020 --> 01:01:14,520 Así que esto era una cuestión sobre un concurso hace dos años. 1297 01:01:14,520 --> 01:01:17,810 Y yo tengo en el tablero aquí. 1298 01:01:17,810 --> 01:01:20,680 >> La gente se les preguntó en el cuestionario - 1299 01:01:20,680 --> 01:01:23,640 se les dio un poco más tesxt en la pregunta, pero he eliminado la 1300 01:01:23,640 --> 01:01:26,640 texto, porque no era necesario para nuestro propósito ahora. 1301 01:01:26,640 --> 01:01:29,180 Era sólo algunos antecedentes en lo atoi hizo. 1302 01:01:29,180 --> 01:01:31,425 Pero todos ustedes saben y son muy familiarizados con atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Le sugiero que codifica esta en una hoja de papel. 1304 01:01:35,620 --> 01:01:39,310 También le sugiero que utilice la estrategia que hemos repasado 1305 01:01:39,310 --> 01:01:41,040 mucho en nuestra sección. 1306 01:01:41,040 --> 01:01:44,130 En primer lugar, asegúrese de que entiende lo atoi está haciendo. 1307 01:01:44,130 --> 01:01:47,580 Haz un dibujo o llegar a algún imagen mental de él en su cabeza. 1308 01:01:47,580 --> 01:01:51,120 A continuación, escriba el pseudocódigo para esto. 1309 01:01:51,120 --> 01:01:53,120 En el cuestionario, si lo único que consigue es pseudocódigo, por lo menos 1310 01:01:53,120 --> 01:01:54,550 poner algo abajo. 1311 01:01:54,550 --> 01:02:00,070 Y luego asignar ese pseudocódigo en C. Si usted tiene un cheque en su 1312 01:02:00,070 --> 01:02:03,760 pseudocódigo, como comprobar si algo es 1, que asigna a un caso 1313 01:02:03,760 --> 01:02:05,750 condiciones y así sucesivamente. 1314 01:02:05,750 --> 01:02:07,850 Y, por último, el código del programa en C. 1315 01:02:07,850 --> 01:02:15,000 >> Así que volver a atoi y tardar cinco minutos codificar esto en una hoja de 1316 01:02:15,000 --> 01:02:19,480 papel, que es probablemente el cantidad de tiempo que le llevará en un 1317 01:02:19,480 --> 01:02:21,260 cuestionario para atoi código. 1318 01:02:21,260 --> 01:02:27,060 De cinco a 15 minutos, de cinco a 12, de cinco a 10 minutos, se trata de la cantidad de 1319 01:02:27,060 --> 01:02:30,150 tiempo que le dedica a esa pregunta de la prueba. 1320 01:02:30,150 --> 01:02:31,670 Así tardar cinco minutos, por favor. 1321 01:02:31,670 --> 01:02:35,957 Y si usted tiene alguna pregunta, levante la mano y voy a entrar en razón. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [conversaciones paralelas] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON HIRSCHHORN: OK, así que que era de cinco minutos. 1326 01:08:37,580 --> 01:08:39,880 Ese fue probablemente por la cantidad de tiempo que pasaría en ese en un concurso, 1327 01:08:39,880 --> 01:08:42,120 tal vez la parte baja de la época. 1328 01:08:42,120 --> 01:08:44,010 Vamos a recapitular un poco. 1329 01:08:44,010 --> 01:08:45,740 Comencemos codificar esta. 1330 01:08:45,740 --> 01:08:49,479 Y si no llegamos hasta el final, las respuestas a esta y esta 1331 01:08:49,479 --> 01:08:54,189 pregunta de examen están disponibles, una vez más, El otoño de 2011 es cuando esta pregunta 1332 01:08:54,189 --> 01:08:54,913 aparecido en el cuestionario. 1333 01:08:54,913 --> 01:08:57,830 >> Y valió la pena ocho puntos en el cuestionario a continuación. 1334 01:08:57,830 --> 01:09:01,140 Ocho puntos está en el extremo superior de la cantidad de puntos algo vale la pena. 1335 01:09:01,140 --> 01:09:04,790 La mayoría de preguntas están en el rango de uno a seis puntos. 1336 01:09:04,790 --> 01:09:08,500 Así que esta es una más desafiante pregunta, seguro. 1337 01:09:08,500 --> 01:09:09,750 ¿Puede alguien ayudarme a empezar? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> En general, ¿qué vamos a querer hacer con esta 1340 01:09:15,380 --> 01:09:17,550 funcionar atoi, lógicamente? 1341 01:09:17,550 --> 01:09:19,569 ¿Qué queremos hacer? 1342 01:09:19,569 --> 01:09:22,279 Así que vamos a escribir algunos pseudocódigo. 1343 01:09:22,279 --> 01:09:24,090 >> ESTUDIANTE: Convertir caracteres en enteros. 1344 01:09:24,090 --> 01:09:26,700 >> JASON HIRSCHHORN: Convertir caracteres en enteros. 1345 01:09:26,700 --> 01:09:27,479 Aceptar. 1346 01:09:27,479 --> 01:09:30,870 Entonces, ¿cuántos caracteres estamos va a tener que ir a través de? 1347 01:09:30,870 --> 01:09:32,295 >> ESTUDIANTE: Todos ellos. 1348 01:09:32,295 --> 01:09:34,100 >> ESTUDIANTE: Todos los personajes en la cadena. 1349 01:09:34,100 --> 01:09:35,540 >> JASON HIRSCHHORN: Todos los de la caracteres de la cadena. 1350 01:09:35,540 --> 01:09:42,180 Así que si queríamos ir a través de cada carácter de una cadena, lo que es una cosa 1351 01:09:42,180 --> 01:09:44,560 en C que hemos visto que ha permitido nosotros ir a través de cada 1352 01:09:44,560 --> 01:09:45,939 carácter de una cadena? 1353 01:09:45,939 --> 01:09:46,819 >> ESTUDIANTES: Un bucle for. 1354 01:09:46,819 --> 01:09:48,069 >> JASON HIRSCHHORN: Un bucle for. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Así que vamos a recorrer todos los personajes en s. 1357 01:09:55,330 --> 01:10:00,940 >> Entonces, ¿qué vamos a querer hacer cuando lleguemos a un personaje en concreto? 1358 01:10:00,940 --> 01:10:02,480 Digamos que estamos consiguiendo pasamos por un 90. 1359 01:10:02,480 --> 01:10:03,460 Obtenemos el 9. 1360 01:10:03,460 --> 01:10:04,240 Es un personaje. 1361 01:10:04,240 --> 01:10:07,440 ¿Qué queremos hacer con que el carácter 9? 1362 01:10:07,440 --> 01:10:10,082 >> ESTUDIANTE: restarlo de carácter 0? 1363 01:10:10,082 --> 01:10:11,860 >> ESTUDIANTE: Agrega 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON HIRSCHHORN: Reste desde 0 personaje? 1365 01:10:13,350 --> 01:10:13,800 >> ESTUDIANTE: Sí. 1366 01:10:13,800 --> 01:10:15,573 >> JASON HIRSCHHORN: ¿Por qué que quieres hacer eso? 1367 01:10:15,573 --> 01:10:16,560 >> ESTUDIANTE: [inaudible] 1368 01:10:16,560 --> 01:10:17,010 valor. 1369 01:10:17,010 --> 01:10:18,380 Su valor int. 1370 01:10:18,380 --> 01:10:21,580 >> JASON HIRSCHHORN: OK, así que nos tomamos el carácter 9, restarlo de 1371 01:10:21,580 --> 01:10:25,820 carácter 0 para obtener una número entero real 9. 1372 01:10:25,820 --> 01:10:27,070 Sweet. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Y, ¿cómo saber que el carácter 9 menos 0 caracteres es 9? 1375 01:10:37,000 --> 01:10:39,222 ¿Qué gráfica qué nos fijamos en? 1376 01:10:39,222 --> 01:10:43,130 >> ESTUDIANTE: Hay lógicamente nueve lugares entre 9 y 0. 1377 01:10:43,130 --> 01:10:44,620 O usted podría mirar a la tabla ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON HIRSCHHORN: tabla ASCII. 1379 01:10:45,120 --> 01:10:46,490 Pero sí, tiene usted razón también. 1380 01:10:46,490 --> 01:10:47,780 Entonces restamos 0. 1381 01:10:47,780 --> 01:10:49,010 Así que ahora tenemos el entero 9. 1382 01:10:49,010 --> 01:10:49,970 ¿Y qué es lo que queremos hacer con eso? 1383 01:10:49,970 --> 01:10:54,970 Si tenemos 90, es el primer entero tenemos, lo que queremos hacer? 1384 01:10:54,970 --> 01:10:58,180 >> ESTUDIANTE: Me pongo en un número entero temporal matriz, y luego hacer las matemáticas para que 1385 01:10:58,180 --> 01:11:02,088 después de convertirlo en un fin. 1386 01:11:02,088 --> 01:11:03,020 >> JASON HIRSCHHORN: OK. 1387 01:11:03,020 --> 01:11:06,990 >> ESTUDIANTE: Usted puede comenzar a finales de la matriz y luego avanzar de manera 1388 01:11:06,990 --> 01:11:10,350 que cada vez que se mueve hacia adelante, lo multiplicas por 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON HIRSCHHORN: OK. 1390 01:11:10,830 --> 01:11:12,250 Eso suena como una muy idea convincente. 1391 01:11:12,250 --> 01:11:16,040 Podemos empezar por el final de nuestra serie, y podemos usar strleng. 1392 01:11:16,040 --> 01:11:17,030 Podemos utilizar strleng aquí. 1393 01:11:17,030 --> 01:11:18,870 Conseguiremos la duración de nuestra cadena. 1394 01:11:18,870 --> 01:11:20,100 Partimos al final. 1395 01:11:20,100 --> 01:11:29,170 Y + la primera, sólo tomamos que entero, y tal vez creamos como un 1396 01:11:29,170 --> 01:11:32,270 nueva variable entera hasta la parte superior donde estamos almacenando todo. 1397 01:11:32,270 --> 01:11:37,340 Así el ciclo que recorre todos los caracteres en s de atrás hacia adelante, restamos 0, y 1398 01:11:37,340 --> 01:11:42,790 entonces lo tomamos, y en función de donde está, lo multiplicamos 1399 01:11:42,790 --> 01:11:45,860 por una potencia de 10. 1400 01:11:45,860 --> 01:11:50,644 Debido a que la primera de ellas, ¿qué hacemos multiplicar el carácter más a la derecha por el camino? 1401 01:11:50,644 --> 01:11:51,440 >> ESTUDIANTE: 10 al 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON HIRSCHHORN: 10 a 0. 1403 01:11:53,170 --> 01:11:56,010 ¿Qué es lo multiplicamos el segundo carácter más a la derecha por el camino? 1404 01:11:56,010 --> 01:11:57,450 >> ESTUDIANTE: [inaudible]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON HIRSCHHORN: ¿Qué? 1406 01:11:57,960 --> 01:11:59,150 >> ESTUDIANTE: 10 a la 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON HIRSCHHORN: 10 a la 1. 1408 01:12:00,420 --> 01:12:03,754 El carácter tercio más a la derecha-? 1409 01:12:03,754 --> 01:12:04,580 >> ESTUDIANTE: 10 a la 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON HIRSCHHORN: 10 a la 2. 1411 01:12:05,350 --> 01:12:07,200 >> ESTUDIANTE: Lo siento, no lo entiendo lo que estamos haciendo aquí. 1412 01:12:07,200 --> 01:12:08,640 >> JASON HIRSCHHORN: OK, Volvamos, entonces. 1413 01:12:08,640 --> 01:12:12,500 Así que vamos a obtener aprobada en una cadena. 1414 01:12:12,500 --> 01:12:14,470 Debido a que estamos escribiendo atoi. 1415 01:12:14,470 --> 01:12:15,260 Así que van pasando de una cadena. 1416 01:12:15,260 --> 01:12:17,640 Digamos que estamos consiguiendo pasamos en la cadena 90. 1417 01:12:17,640 --> 01:12:19,930 >> Lo primero que vamos a hacer es establecer una nueva variable de tipo entero que somos 1418 01:12:19,930 --> 01:12:22,150 sólo va a crear como nuestro nuevo entero. 1419 01:12:22,150 --> 01:12:24,630 Eso es lo que vamos para volver al final. 1420 01:12:24,630 --> 01:12:30,110 Tenemos que ir a través de todos los personajes en la cadena porque hemos determinado 1421 01:12:30,110 --> 01:12:34,430 que tenemos que tocar cada uno y a continuación, agregarlo a nuestro nuevo entero. 1422 01:12:34,430 --> 01:12:36,330 >> Pero no podemos agregarlo como un número. 1423 01:12:36,330 --> 01:12:38,270 No podemos tomar 9 y añadir 9 a nuestro número entero. 1424 01:12:38,270 --> 01:12:40,560 Depende de qué lugar es en la cadena. 1425 01:12:40,560 --> 01:12:42,960 Vamos a tener que multiplicar que por una potencia de 10. 1426 01:12:42,960 --> 01:12:45,580 Porque así es como base de 10 obras. 1427 01:12:45,580 --> 01:12:49,050 >> Así que vamos a obtener el real carácter, o el número entero real 1428 01:12:49,050 --> 01:12:53,860 número, restando carácter 0 de carácter 9 como hicimos con 1429 01:12:53,860 --> 01:12:57,560 restando calidad capital A partir de cualquiera que sea el carácter que hemos tenido en una de 1430 01:12:57,560 --> 01:12:58,120 esos problemas. 1431 01:12:58,120 --> 01:13:04,190 Así que vamos realmente obtenemos un número de 0 a 9 guardan como un número real, y vamos a 1432 01:13:04,190 --> 01:13:07,590 se multiplica por una potencia de 10, dependiendo en donde estamos en la cadena. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Y luego vamos a agregarlo de nuevo en nuestra nueva variable entera. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Así que lo que esto se vería como lo haría BE - dibujaremos aquí. 1437 01:13:37,890 --> 01:13:40,086 Si nos pasamos en la cadena de 90 - 1438 01:13:40,086 --> 01:13:41,336 >> ESTUDIANTE: [inaudible]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON HIRSCHHORN: Pero atoi toma una cadena. 1441 01:13:45,540 --> 01:13:46,350 Así que vamos a ir a través de la explotación. 1442 01:13:46,350 --> 01:13:49,900 Le daremos pasamos en el 90. 1443 01:13:49,900 --> 01:13:51,540 Vamos de nuevo a la parte delantera. 1444 01:13:51,540 --> 01:13:53,920 Tomamos el 0. 1445 01:13:53,920 --> 01:13:55,080 >> ESTUDIANTE: Lo siento. 1446 01:13:55,080 --> 01:13:55,880 Tal vez esto es una estupidez. 1447 01:13:55,880 --> 01:13:59,440 Si nos vamos a aprobamos en una cadena, por qué es 90 lo que estamos 1448 01:13:59,440 --> 01:14:00,260 conseguir pasar en? 1449 01:14:00,260 --> 01:14:03,160 Debido a que 90 es un número entero. 1450 01:14:03,160 --> 01:14:06,820 >> JASON HIRSCHHORN: Porque atoi toma cadena y la convierte en el número entero 1451 01:14:06,820 --> 01:14:08,320 representación de esa cadena. 1452 01:14:08,320 --> 01:14:13,650 Pero la cadena 90 no es el número entero 90 o el número 90. 1453 01:14:13,650 --> 01:14:17,920 La cadena 90 es un conjunto de dos, o tres personajes, más bien, el 9 1454 01:14:17,920 --> 01:14:22,740 carácter, el carácter 0, y la barra invertida 0 caracteres. 1455 01:14:22,740 --> 01:14:26,260 >> Y estamos escribiendo atoi porque, por ejemplo, cuando se toma el comando 1456 01:14:26,260 --> 01:14:30,230 argumento de la línea, y se guarda en argv, se guarda como una cadena. 1457 01:14:30,230 --> 01:14:32,940 Pero si usted quiere tratar como un número, que necesita para convertirlo en un 1458 01:14:32,940 --> 01:14:34,700 número entero real. 1459 01:14:34,700 --> 01:14:37,210 Lo cual hicimos uno de nuestros boletines de problemas. 1460 01:14:37,210 --> 01:14:38,800 Lo que hicimos en una serie de nuestros boletines de problemas. 1461 01:14:38,800 --> 01:14:41,690 Todo el mundo que tuvo un entero como un argumento de línea de comandos. 1462 01:14:41,690 --> 01:14:46,490 Así que por eso nuestra función atoi toma una cadena. 1463 01:14:46,490 --> 01:14:51,910 >> Así que de nuevo, en nuestro ejemplo, estamos Va a tomar la última. 1464 01:14:51,910 --> 01:14:55,050 Vamos a restar el carácter 0 de él, porque los personajes 0 1465 01:14:55,050 --> 01:14:58,810 restado por el carácter 0 le da el número real 0, según 1466 01:14:58,810 --> 01:15:00,950 las matemáticas ASCII que hacemos. 1467 01:15:00,950 --> 01:15:04,870 >> Dado que los caracteres se representan como diferente de su real - la 1468 01:15:04,870 --> 01:15:08,830 un carácter, por ejemplo, minúscula es 97. 1469 01:15:08,830 --> 01:15:10,260 No es - ¡Uy! 1470 01:15:10,260 --> 01:15:13,290 No es todo lo que se puede esperar que sea, 0, por ejemplo. 1471 01:15:13,290 --> 01:15:16,200 Así que hay que restar el carácter para conseguir un 0. 1472 01:15:16,200 --> 01:15:18,950 >> Así que vamos a hacer eso aquí para obtener el número real. 1473 01:15:18,950 --> 01:15:22,560 Y luego vamos a multiplicarlo por una potencia de 10 dependiendo de donde se 1474 01:15:22,560 --> 01:15:27,030 se encuentra en la cadena, y luego tomar ese y agregarlo a nuestro marcador de posición 1475 01:15:27,030 --> 01:15:32,520 variable, de manera que podemos llegar a nuestro nuevo entero final. 1476 01:15:32,520 --> 01:15:35,080 ¿Eso tiene sentido para todo el mundo? 1477 01:15:35,080 --> 01:15:37,730 >> Así que no vamos a codificar esta en este momento, porque estamos 1478 01:15:37,730 --> 01:15:38,830 consiguiendo corto de tiempo. 1479 01:15:38,830 --> 01:15:40,860 Pido disculpas por el tiempo de eso. 1480 01:15:40,860 --> 01:15:44,620 Pero esto es lo que, con suerte, lo haría ser capaz de hacer en el concurso - en el 1481 01:15:44,620 --> 01:15:47,710 lo menos, conseguir este pseudocódigo en escrito. 1482 01:15:47,710 --> 01:15:50,840 >> Y luego, si tuviéramos que escribir la pseudocódigo, en realidad, podríamos hacer esto 1483 01:15:50,840 --> 01:15:51,490 con bastante rapidez. 1484 01:15:51,490 --> 01:15:55,230 Cada línea de comentarios que escribimos aquí se traduce en alrededor 1485 01:15:55,230 --> 01:15:56,970 una línea de código C. 1486 01:15:56,970 --> 01:16:01,780 Declarar una nueva variable, la escritura un bucle, algunos resta, algunos 1487 01:16:01,780 --> 01:16:07,070 multiplicación y alguna asignación. 1488 01:16:07,070 --> 01:16:09,020 Nos gustaría probablemente también queremos escribir una línea de retorno. 1489 01:16:09,020 --> 01:16:12,040 También puede ser que desee poner algunas comprobaciones en aquí. 1490 01:16:12,040 --> 01:16:12,655 Sí. 1491 01:16:12,655 --> 01:16:15,720 >> ESTUDIANTE: Entonces, ¿podemos tratar s como la cadena real? 1492 01:16:15,720 --> 01:16:18,730 Porque yo sé que es sólo una dirección. 1493 01:16:18,730 --> 01:16:22,090 Al igual que, ¿cómo obtener la longitud de la cadena que se pasa a través de? 1494 01:16:22,090 --> 01:16:25,310 >> JASON HIRSCHHORN: Entonces, ¿cómo la longitud de una cadena? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> ESTUDIANTE: strlen, sí. 1497 01:16:26,660 --> 01:16:30,550 Pero se puede poner s como el argumento para eso? 1498 01:16:30,550 --> 01:16:34,620 >> JASON HIRSCHHORN: Así strlen lleva una estrella de carbón. 1499 01:16:34,620 --> 01:16:38,090 Y resulta que la estrella char, y sigue contando hasta que llega a un 1500 01:16:38,090 --> 01:16:41,865 barra invertida 0. strlen era en realidad uno de los otros programas que 1501 01:16:41,865 --> 01:16:42,850 iban a código. 1502 01:16:42,850 --> 01:16:44,560 Esa es otra buena para el código. 1503 01:16:44,560 --> 01:16:47,270 Que uno es un poco más fácil, ya que si usted va a pensar en eso 1504 01:16:47,270 --> 01:16:47,830 conceptualmente - 1505 01:16:47,830 --> 01:16:51,620 Que acabo de decir en voz alta - strlen sigue un puntero y mantiene en marcha y 1506 01:16:51,620 --> 01:16:54,210 contar y hacer el seguimiento hasta llegar a una barra invertida 0. 1507 01:16:54,210 --> 01:16:56,530 >> ESTUDIANTE: OK, lo tengo. 1508 01:16:56,530 --> 01:17:00,200 >> JASON HIRSCHHORN: Así que lo mejor de suerte en concurso 0 de mañana. 1509 01:17:00,200 --> 01:17:03,170 Si usted tiene alguna pregunta, voy a estar fuera después de esto. 1510 01:17:03,170 --> 01:17:05,610 No dude en enviarme un correo electrónico. 1511 01:17:05,610 --> 01:17:08,480 Llegar a su propio TF si eres no en mi sección, o que mi 1512 01:17:08,480 --> 01:17:10,005 por correo electrónico si usted lo desea. 1513 01:17:10,005 --> 01:17:13,140 >> Si quieres flipar y acaba de enviar me un correo electrónico, un correo electrónico freakout, voy a 1514 01:17:13,140 --> 01:17:16,710 le enviará de vuelta, como, una cara sonriente, o, como, una broma o algo así. 1515 01:17:16,710 --> 01:17:18,190 Así que no dude en hacer eso también. 1516 01:17:18,190 --> 01:17:20,750 Buena suerte otra vez, y lo voy a hacer nos vemos la semana que viene. 1517 01:17:20,750 --> 01:17:23,435