1 00:00:00,000 --> 00:00:03,269 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:03,269 --> 00:00:05,391 3 00:00:05,391 --> 00:00:06,640 CAMILLE REKHSON: Hola, todo el mundo. 4 00:00:06,640 --> 00:00:10,120 Bienvenidos al concurso CS50 sesión de revisión cero. 5 00:00:10,120 --> 00:00:10,770 Soy Camille. 6 00:00:10,770 --> 00:00:13,140 Y yo voy a ir sobre algunos temas con usted 7 00:00:13,140 --> 00:00:16,890 chicos hoy para ayudarle prepararse para el examen. 8 00:00:16,890 --> 00:00:20,840 Así que aquí está nuestra no exhaustiva lista de temas que 9 00:00:20,840 --> 00:00:23,210 debe estar familiarizado con el cuestionario. 10 00:00:23,210 --> 00:00:25,740 Estos se toman directamente del plan de estudios. 11 00:00:25,740 --> 00:00:26,990 Sé que parece como un montón. 12 00:00:26,990 --> 00:00:30,870 Pero confía en mí, que has aprendido todos estas cosas en las últimas semanas. 13 00:00:30,870 --> 00:00:33,210 >> Así que sin duda nos vamos sobre una gran cantidad de ellos en la actualidad. 14 00:00:33,210 --> 00:00:35,825 Pero también tomar algún tiempo en su propia para revisar estas cosas. 15 00:00:35,825 --> 00:00:38,450 Y si usted no estaba familiarizado con lo que algunas de estas cosas son, 16 00:00:38,450 --> 00:00:42,400 asegúrate de pedir uno de nosotros. 17 00:00:42,400 --> 00:00:45,985 También, para la palabra oficial en el cuestionario, haga clic aquí. 18 00:00:45,985 --> 00:00:48,860 Esto tendrá toda la información con el que la habitación tiene que ir en, 19 00:00:48,860 --> 00:00:52,960 dividir alfabéticamente, y también algunos consejos sobre qué materiales 20 00:00:52,960 --> 00:00:56,470 usted debe estar estudiando, y qué tipo de preguntas de la prueba que puede esperar. 21 00:00:56,470 --> 00:01:01,090 Así que asegúrese de comprobar que fuera. 22 00:01:01,090 --> 00:01:03,810 >> Además, algunos consejos para cuando usted se están preparando para el examen. 23 00:01:03,810 --> 00:01:05,730 Practique la codificación en el papel. 24 00:01:05,730 --> 00:01:09,280 Sé que has acostumbrado a tener el cheque IDE para sus errores para usted, 25 00:01:09,280 --> 00:01:12,280 y es-- cuando estás escribiendo para arriba, que es un poco diferente de tener 26 00:01:12,280 --> 00:01:13,113 para escribir las cosas. 27 00:01:13,113 --> 00:01:14,560 Así que la práctica de hacer algo de código. 28 00:01:14,560 --> 00:01:17,910 Algunas buenas funciones para practicar haciendo son strlen y atoi, 29 00:01:17,910 --> 00:01:20,450 ver si se puede escribir quienes por su cuenta. 30 00:01:20,450 --> 00:01:21,970 Estar familiarizado con los boletines de problemas. 31 00:01:21,970 --> 00:01:24,200 La mayoría de los años no son preguntas que se relacionan 32 00:01:24,200 --> 00:01:25,700 a algunos de los materiales de problemas. 33 00:01:25,700 --> 00:01:30,480 Así que asegúrese de que usted entiende cómo hacer todos los boletines de problemas. 34 00:01:30,480 --> 00:01:35,240 >> Trate de hacer algunos de los antiguos concursos bajo la restricción de tiempo 75 minutos. 35 00:01:35,240 --> 00:01:37,290 Muchas de las pruebas puede ser un poco largo. 36 00:01:37,290 --> 00:01:39,680 Así que es una buena manera de dar un poco de práctica, 37 00:01:39,680 --> 00:01:41,650 y cuánto tiempo lo hará que tomar, y cómo 38 00:01:41,650 --> 00:01:45,360 debe dividir su tiempo para asegurarse de termine todo para el final. 39 00:01:45,360 --> 00:01:49,690 Y también, se obtiene una sola página, de dos hoja de referencia caras 40 00:01:49,690 --> 00:01:52,962 que usted puede escribir lo que quiero a utilizar durante la prueba. 41 00:01:52,962 --> 00:01:54,670 Así que cuando usted está creando eso, eso es también 42 00:01:54,670 --> 00:01:57,860 muy buena manera de estudiar porque podrás tipo de revisaremos cosas 43 00:01:57,860 --> 00:01:59,610 como usted está escribiendo. 44 00:01:59,610 --> 00:02:05,421 >> Así que cualquier pregunta general acerca de el cuestionario, o cómo funciona? 45 00:02:05,421 --> 00:02:05,921 Sí. 46 00:02:05,921 --> 00:02:09,167 >> AUDIENCIA: ¿Será que la lista de temas que sólo mostró estar disponible para nosotros 47 00:02:09,167 --> 00:02:09,820 ¿en línea? 48 00:02:09,820 --> 00:02:12,736 >> CAMILLE REKHSON: Esta toda la diapositiva espectáculo se ha publicado en el sitio web. 49 00:02:12,736 --> 00:02:16,040 Además, el video de la revisión de hoy sesión será en el sitio web. 50 00:02:16,040 --> 00:02:19,250 Así que no te preocupes demasiado por escribir las cosas en todas partes. 51 00:02:19,250 --> 00:02:20,437 Todo va a estar allí. 52 00:02:20,437 --> 00:02:21,270 ¿Alguna otra pregunta? 53 00:02:21,270 --> 00:02:23,810 54 00:02:23,810 --> 00:02:26,960 OK, así que vamos a empezar. 55 00:02:26,960 --> 00:02:30,860 >> Así que una cosa es estar familiarizado con es los diferentes tipos de datos y el tamaño 56 00:02:30,860 --> 00:02:32,486 que adquieren. 57 00:02:32,486 --> 00:02:35,360 Esto también puede ser una gran cosa escriba en su hoja de referencia, 58 00:02:35,360 --> 00:02:37,240 sólo para asegurarse de que recordar todos estos. 59 00:02:37,240 --> 00:02:39,200 Pero- tan caracteres son 1 byte. 60 00:02:39,200 --> 00:02:40,700 Ints son 4 bytes. 61 00:02:40,700 --> 00:02:44,450 Un largo, largo, que es básicamente más espacio para un número entero, es de 8 bytes. 62 00:02:44,450 --> 00:02:46,560 Un flotador es de 4 bytes. 63 00:02:46,560 --> 00:02:50,620 Un doble, que básicamente le da más espacio para almacenar un flotador, es de 8 bytes. 64 00:02:50,620 --> 00:02:54,210 Y a continuación, un puntero es también 8 bytes. 65 00:02:54,210 --> 00:02:56,270 ¿Una pregunta sobre éstos? 66 00:02:56,270 --> 00:03:00,380 67 00:03:00,380 --> 00:03:05,580 >> Así binario es otro tema que hemos cubierto un poco este semestre. 68 00:03:05,580 --> 00:03:07,910 Así que vamos a hacer algunos practicar con la conversión 69 00:03:07,910 --> 00:03:10,000 entre el binario y decimal. 70 00:03:10,000 --> 00:03:13,950 Así que alguien tiene alguna idea de lo que que primero sería? 71 00:03:13,950 --> 00:03:32,840 72 00:03:32,840 --> 00:03:34,860 ¿Nadie? 73 00:03:34,860 --> 00:03:36,270 Sí, es 42. 74 00:03:36,270 --> 00:03:39,200 Así que si usted recuerda, cada de los lugares en binario 75 00:03:39,200 --> 00:03:41,860 es básicamente como 2 al poder de ese lugar. 76 00:03:41,860 --> 00:03:43,750 >> Así que el primer punto es de 2 a 0 el poder. 77 00:03:43,750 --> 00:03:46,710 Y tenemos 0 allí, así que no hay nada. 78 00:03:46,710 --> 00:03:48,700 El siguiente lugar es 2 a la primera potencia. 79 00:03:48,700 --> 00:03:51,220 Y tenemos un 1 allí, así que eso es básicamente un 2. 80 00:03:51,220 --> 00:03:53,642 El siguiente lugar es de 2 a la segunda, que es 4. 81 00:03:53,642 --> 00:03:54,850 No tenemos nada allí. 82 00:03:54,850 --> 00:03:59,390 El siguiente lugar más es de 2 a el tercero, lo que sería 8. 83 00:03:59,390 --> 00:04:02,230 Y nosotros tenemos una allí. 84 00:04:02,230 --> 00:04:03,470 Y seguimos adelante. 85 00:04:03,470 --> 00:04:07,720 Eso last-- la más a la que queda es donde tenemos 32. 86 00:04:07,720 --> 00:04:13,437 Y así, tenemos básicamente 32 más 8 más 2 para obtener 42. 87 00:04:13,437 --> 00:04:14,020 ¿Alguna pregunta? 88 00:04:14,020 --> 00:04:15,820 >> AUDIENCIA: ¿Cuál es el subíndice para? 89 00:04:15,820 --> 00:04:17,399 >> CAMILLE REKHSON: El subíndice básicamente nos dice que es binario. 90 00:04:17,399 --> 00:04:18,230 Así que hay un 2 allí. 91 00:04:18,230 --> 00:04:20,579 Si hubiera como-- en la siguiente uno, o cuando estamos convirtiendo decimal 92 00:04:20,579 --> 00:04:24,350 a binario, hay un 10 mostrándonos que este número es originalmente en decimal. 93 00:04:24,350 --> 00:04:25,194 >> AUDIENCIA: Gracias. 94 00:04:25,194 --> 00:04:26,110 >> CAMILLE REKHSON: Sí. 95 00:04:26,110 --> 00:04:28,790 ¿Alguna otra pregunta sobre que uno? 96 00:04:28,790 --> 00:04:31,110 OK, así que vamos a tratar el siguiente uno entonces, decimal a binario. 97 00:04:31,110 --> 00:04:35,034 Así que teniendo 50 y poner que en binario. 98 00:04:35,034 --> 00:04:35,950 ¿Cómo lo harías tú? 99 00:04:35,950 --> 00:04:44,331 100 00:04:44,331 --> 00:04:45,317 Sí. 101 00:04:45,317 --> 00:04:49,754 >> AUDIENCIA: 110.010. 102 00:04:49,754 --> 00:04:50,760 >> CAMILLE REKHSON: Sí. 103 00:04:50,760 --> 00:04:54,410 Así uno-- una manera fácil de pensar la conversión de decimal a binario 104 00:04:54,410 --> 00:04:57,950 es a-- a menudo ayuda para escribir lo que las diferentes potencias de 2 son. 105 00:04:57,950 --> 00:05:01,460 Y luego ir a través de él, y ver cualquiera que sea la más alta uno de esos 106 00:05:01,460 --> 00:05:05,320 es que usted puede poner en la número decimal sin pasar por encima. 107 00:05:05,320 --> 00:05:09,040 >> Así que en este caso, uno de las potencias de 2 es 32. 108 00:05:09,040 --> 00:05:10,560 Así que 32 entra en 50. 109 00:05:10,560 --> 00:05:14,100 Pero el siguiente arranque sería 64, que obviamente no encaja en 50. 110 00:05:14,100 --> 00:05:16,343 Así que el más alto que tenemos es el 32. 111 00:05:16,343 --> 00:05:17,343 El siguiente hasta 16. 112 00:05:17,343 --> 00:05:20,140 Y 32 más 16 es sólo el 48. 113 00:05:20,140 --> 00:05:21,350 Así que todavía encaja en 50. 114 00:05:21,350 --> 00:05:22,722 Así que tenemos 1 de tanto de esos. 115 00:05:22,722 --> 00:05:25,180 Y luego si seguimos bajando, lo único que necesitamos dejamos 116 00:05:25,180 --> 00:05:27,510 es 2 más para conseguir 48-50. 117 00:05:27,510 --> 00:05:31,860 Así que tenemos un 1 en esa posición, y un 0 en la última posición. 118 00:05:31,860 --> 00:05:35,371 Porque no hay nada en del 2 al lugar 0-th. 119 00:05:35,371 --> 00:05:37,120 Las preguntas sobre la conversión decimal a binario? 120 00:05:37,120 --> 00:05:40,830 121 00:05:40,830 --> 00:05:44,100 >> Así que ahora vamos a intentar hacer alguna adición binaria. 122 00:05:44,100 --> 00:05:47,235 Cómo cuando se agrega a esos dos para arriba? 123 00:05:47,235 --> 00:05:47,735 Sí. 124 00:05:47,735 --> 00:05:51,130 >> AUDIENCIA: 11.100. 125 00:05:51,130 --> 00:05:52,110 >> CAMILLE REKHSON: Sí. 126 00:05:52,110 --> 00:05:55,540 Así que haciendo además en binario es bastante lo mismo que hacerlo en decimal. 127 00:05:55,540 --> 00:05:59,390 Excepto si tiene dos ser de 1 se suman, 1 más 1 es 2, 128 00:05:59,390 --> 00:06:02,980 pero 2 en binario es 1 0. 129 00:06:02,980 --> 00:06:07,090 Así que hay que llevar a la 1, y tener llevarlo para esas columnas par. 130 00:06:07,090 --> 00:06:10,260 Y aparte de eso, sólo tiene que añadir normalmente. 131 00:06:10,260 --> 00:06:13,125 Para cualquier duda sobre eso? 132 00:06:13,125 --> 00:06:13,625 Sí. 133 00:06:13,625 --> 00:06:16,487 >> AUDIENCIA: Lo siento, lo que es el último lugar? 134 00:06:16,487 --> 00:06:18,475 Hay seis números. 135 00:06:18,475 --> 00:06:23,260 Así que la columna de la izquierda, ¿Qué valor tiene eso? 136 00:06:23,260 --> 00:06:24,760 CAMILLE REKHSON: En este fondo? 137 00:06:24,760 --> 00:06:26,340 AUDIENCIA: En el de arriba, por 50. 138 00:06:26,340 --> 00:06:27,340 CAMILLE REKHSON: Para 50? 139 00:06:27,340 --> 00:06:29,040 Oh, por lo que la izquierda una es 32. 140 00:06:29,040 --> 00:06:29,760 >> AUDIENCIA: 32? 141 00:06:29,760 --> 00:06:36,770 >> CAMILLE REKHSON: Sí, así lo haría ser 32, 16, a continuación, 8, 4, 2, 1 o 0--. 142 00:06:36,770 --> 00:06:39,380 Bueno, es 2 el cero, que es 1. 143 00:06:39,380 --> 00:06:41,110 Sí. 144 00:06:41,110 --> 00:06:43,834 ¿Alguna otra pregunta sobre esto? 145 00:06:43,834 --> 00:06:47,420 OK, así que a continuación vamos a hacer un poco con hexadecimal. 146 00:06:47,420 --> 00:06:49,570 Así que esto podría ser un poco menos familiar, 147 00:06:49,570 --> 00:06:51,680 porque sé que hemos hecho mucho más con binario. 148 00:06:51,680 --> 00:06:54,050 Pero una muy buena manera de pensar en hexadecimal 149 00:06:54,050 --> 00:06:57,540 es para romper un binario número en 4 trozos bits. 150 00:06:57,540 --> 00:07:00,950 Debido a que cada 4 bits de una número binario es básicamente 151 00:07:00,950 --> 00:07:04,560 uno de los números hexadecimales. 152 00:07:04,560 --> 00:07:07,420 >> Así que si tenemos esta primera, tenemos básicamente ocho 1 de. 153 00:07:07,420 --> 00:07:08,620 Así que estos se pueden dividir up-- 154 00:07:08,620 --> 00:07:09,600 >> AUDIENCIA: 255. 155 00:07:09,600 --> 00:07:10,933 >> CAMILLE REKHSON: Diga eso otra vez. 156 00:07:10,933 --> 00:07:13,772 AUDIENCIA: 255 en decimal, o 0xFF en hexadecimal. 157 00:07:13,772 --> 00:07:14,980 CAMILLE REKHSON: Sí, lo es. 158 00:07:14,980 --> 00:07:18,860 Por lo tanto, si usted divide que hasta en dos trozos de 4 bits, 159 00:07:18,860 --> 00:07:20,950 tenemos básicamente cuatro grupos de 1. 160 00:07:20,950 --> 00:07:22,880 ¿Cuál es la maximum-- básicamente el máximo 161 00:07:22,880 --> 00:07:24,329 podemos obtener con 4 bits en binario. 162 00:07:24,329 --> 00:07:27,120 Y lo máximo que podría obtener por que en hexadecimal sería una F. 163 00:07:27,120 --> 00:07:30,290 Así tendríamos dos F. 164 00:07:30,290 --> 00:07:31,800 Para cualquier duda sobre eso? 165 00:07:31,800 --> 00:07:32,490 ¿Sí? 166 00:07:32,490 --> 00:07:35,184 >> AUDIENCIA: ¿Puede repetir eso. 167 00:07:35,184 --> 00:07:36,100 CAMILLE REKHSON: Claro. 168 00:07:36,100 --> 00:07:39,160 Así que cada uno, en el fondo, lugar de hexadecimal es 169 00:07:39,160 --> 00:07:42,570 equivalente a los 4 bits de un binario. 170 00:07:42,570 --> 00:07:46,830 Así que la manera más fácil de hacerlo es romperla en trozos de 4 bits. 171 00:07:46,830 --> 00:07:48,690 Así que en este caso, tenemos ocho 1 de. 172 00:07:48,690 --> 00:07:51,010 Así que si nos separamos los en dos trozos de 4 bits, 173 00:07:51,010 --> 00:07:54,350 tendríamos dos conjuntos de cuatro 1 de. 174 00:07:54,350 --> 00:07:57,181 Y cada uno de esos es equivalente a F. 175 00:07:57,181 --> 00:07:58,930 Si usted piensa sobre-- Sé que nuestros cerebros son 176 00:07:58,930 --> 00:08:00,415 tipo de cableado para pensar más a través de decimal, 177 00:08:00,415 --> 00:08:01,831 porque eso es lo que estamos acostumbrados. 178 00:08:01,831 --> 00:08:06,030 Así que una manera usted podría pensar en él como los cuatro de 1 es igual a 15 en decimal. 179 00:08:06,030 --> 00:08:12,960 Y 15 en hexadecimal es F. Así que eso es Otra manera de pensar a través de él. 180 00:08:12,960 --> 00:08:13,459 Sí. 181 00:08:13,459 --> 00:08:14,790 >> AUDIENCIA: ¿Cuál es la 0x buscas? 182 00:08:14,790 --> 00:08:18,240 >> CAMILLE REKHSON: El 0x denota que es hexadecimal. 183 00:08:18,240 --> 00:08:21,900 Así que sólo hay que poner que prefijo allí, normalmente. 184 00:08:21,900 --> 00:08:24,396 Otras preguntas sobre eso. 185 00:08:24,396 --> 00:08:27,100 OK, así que vamos a tratar de ir la otra manera a continuación. 186 00:08:27,100 --> 00:08:28,712 En este caso nos tener-- lo siento? 187 00:08:28,712 --> 00:08:29,628 AUDIENCIA: [inaudible]. 188 00:08:29,628 --> 00:08:32,095 189 00:08:32,095 --> 00:08:33,720 CAMILLE REKHSON: Vamos a binario. 190 00:08:33,720 --> 00:08:36,039 Por lo tanto, va en sentido contrario. 191 00:08:36,039 --> 00:08:42,090 Pero en este caso, tenemos 5 y A. Así que si pensamos en esto, 192 00:08:42,090 --> 00:08:46,260 si cada uno de those-- el 5 y el A son tanto va a representar un 4 bits trozo, 193 00:08:46,260 --> 00:08:49,003 ¿Cómo dirías 5 en binario? 194 00:08:49,003 --> 00:08:51,120 >> AUDIENCIA: 0101. 195 00:08:51,120 --> 00:08:53,100 >> CAMILLE REKHSON: Sí, así que esa es la parte 0101. 196 00:08:53,100 --> 00:08:55,250 Y entonces, ¿cómo diría usted Un en-- 197 00:08:55,250 --> 00:08:56,910 >> AUDIENCIA: 10. 198 00:08:56,910 --> 00:08:58,243 CAMILLE REKHSON: Diga it-- lo siento? 199 00:08:58,243 --> 00:08:58,990 AUDIENCIA: 10. 200 00:08:58,990 --> 00:09:02,052 CAMILLE REKHSON: Sí, así esa es la segunda parte de ella. 201 00:09:02,052 --> 00:09:04,010 Y luego, si se pone los dos juntos, eso es 202 00:09:04,010 --> 00:09:06,440 cómo obtener la plena binaria para el hexadecimal. 203 00:09:06,440 --> 00:09:06,940 ¿Sí? 204 00:09:06,940 --> 00:09:10,620 >> AUDIENCIA: Para saber que A es 1010, qué tienes que memorizar? 205 00:09:10,620 --> 00:09:12,460 O puedes como-- 206 00:09:12,460 --> 00:09:14,380 >> CAMILLE REKHSON: Así que si usted-- la differe-- lo 207 00:09:14,380 --> 00:09:16,790 cuando usted está pasando binario, básicamente binario 208 00:09:16,790 --> 00:09:20,550 tiene 0 al 9 y luego una a F como sus 16 cosas. 209 00:09:20,550 --> 00:09:25,420 Así que si todo el camino 0 a 9-- si usted-- 9 y luego A, básicamente, 210 00:09:25,420 --> 00:09:29,640 si nos convertimos a decimal, A sería como 10, B sería como 11. 211 00:09:29,640 --> 00:09:35,616 Y si se piensa en la 1.010 binario es de 8 y 2, 212 00:09:35,616 --> 00:09:37,990 porque esos son los dos lugares que se suman a 10, que 213 00:09:37,990 --> 00:09:41,820 es exactamente lo que A es equivalente a. 214 00:09:41,820 --> 00:09:45,114 Así que eso es una especie de fácil forma de pensar en eso. 215 00:09:45,114 --> 00:09:46,405 Otras preguntas en hexadecimal. 216 00:09:46,405 --> 00:09:50,510 217 00:09:50,510 --> 00:09:56,870 >> OK, así que ahora vamos a tomar Una mirada a los operadores bit a bit. 218 00:09:56,870 --> 00:09:58,882 Así que estos pueden definitivamente van a plantear en el cuestionario. 219 00:09:58,882 --> 00:10:00,590 Sé que no tenemos trabajado mucho con ellos. 220 00:10:00,590 --> 00:10:02,756 Pero sólo vamos a hacer un pequeño repaso de estos. 221 00:10:02,756 --> 00:10:05,490 Así que espero que estos serán un poco más familiar para usted. 222 00:10:05,490 --> 00:10:10,220 Así que los seis operadores bit a bit que hemos figuran en esta lista. 223 00:10:10,220 --> 00:10:13,340 Y nos dejaron manipular bits individuales. 224 00:10:13,340 --> 00:10:16,676 Así que el operador AND es un solo signo. 225 00:10:16,676 --> 00:10:18,550 No hay que confundir eso con el doble signo, 226 00:10:18,550 --> 00:10:21,840 que es la lógica y que nos permite comparar dos cosas. 227 00:10:21,840 --> 00:10:25,860 >> La sola Y es como podemos manipular las cosas a nivel de bits. 228 00:10:25,860 --> 00:10:29,910 Así que esto nos da el resultado de 1 si ambos de los argumentos que estamos comparando 229 00:10:29,910 --> 00:10:32,440 son los same-- o son 1. 230 00:10:32,440 --> 00:10:39,370 Y la barra vertical, OR, dará nos 1 si al menos uno de ellos es 1. 231 00:10:39,370 --> 00:10:41,460 Así que, básicamente exactamente lo que implican las palabras. 232 00:10:41,460 --> 00:10:46,640 Y, si los dos bits son 1, 1 y 1 nos da 1. 233 00:10:46,640 --> 00:10:51,769 Pero con la O, si es 0 o 1, o 1 o 1, en cualquier caso, 234 00:10:51,769 --> 00:10:53,060 tenemos 1 como uno de ellos. 235 00:10:53,060 --> 00:10:54,101 Así que nos encontraremos con un 1. 236 00:10:54,101 --> 00:10:56,320 AUDIENCIA: ¿Qué quieres decir que dice que da 1? 237 00:10:56,320 --> 00:10:58,236 >> CAMILLE REKHSON: La resultado. Algo así, como tú 238 00:10:58,236 --> 00:11:05,060 would-- si lo hicieras 0 y 1, el resultado de que sería 1-- o 0 239 00:11:05,060 --> 00:11:08,920 y 1 con el resultado de eso sería 0, lo siento. 240 00:11:08,920 --> 00:11:12,190 Sí, era una especie de la resultado de la expresión. 241 00:11:12,190 --> 00:11:16,520 Y entonces, este símbolo de intercalación es el XOR, o OR exclusiva. 242 00:11:16,520 --> 00:11:21,920 Así que eso significa exclusivamente una o exactamente uno de los dos argumentos es igual a 1. 243 00:11:21,920 --> 00:11:24,210 Y entonces se le dará 1. 244 00:11:24,210 --> 00:11:27,370 >> La pequeña línea ondulada es el operador NOT. 245 00:11:27,370 --> 00:11:31,940 Así que a diferencia del resto de ellos, que operan en un par de bits, 246 00:11:31,940 --> 00:11:34,930 el operador NOT sólo toma un bit, y darle la vuelta. 247 00:11:34,930 --> 00:11:37,640 Así que si usted give-- si lo hace NO 0, sería darle 1. 248 00:11:37,640 --> 00:11:40,248 Y si no lo haces 1, le daría 0. 249 00:11:40,248 --> 00:11:40,748 ¿Sí? 250 00:11:40,748 --> 00:11:41,150 >> AUDIENCIA: ¿Cuál es la diferencia entre la O con una línea 251 00:11:41,150 --> 00:11:41,983 y el OR con dos? 252 00:11:41,983 --> 00:11:44,430 253 00:11:44,430 --> 00:11:46,930 CAMILLE REKHSON: Así que la OR con dos líneas es el OR lógico. 254 00:11:46,930 --> 00:11:52,430 Así que eso es para comparar dos enteros completos, o dos-- 255 00:11:52,430 --> 00:11:53,730 para ver si las cosas son iguales. 256 00:11:53,730 --> 00:11:58,340 O como hacer esto es igual a este, O esto es igual a este tipo cosa. 257 00:11:58,340 --> 00:12:04,090 Mientras que la barra sola O, es para hacer las cosas a nivel de bits. 258 00:12:04,090 --> 00:12:04,590 Sí. 259 00:12:04,590 --> 00:12:06,680 >> AUDIENCIA: ¿Qué entiende usted por bit a bit? 260 00:12:06,680 --> 00:12:10,330 >> CAMILLE REKHSON: Así bit a bit está trabajando directamente con los bits en binario. 261 00:12:10,330 --> 00:12:11,596 >> AUDIENCIA: Oh, ya veo. 262 00:12:11,596 --> 00:12:15,000 >> CAMILLE REKHSON: Sí, así trabajar con 0 y 1 de de. 263 00:12:15,000 --> 00:12:18,310 Vamos a hacer un par de ejemplos de esto después, justo lo que no es demasiado confuso. 264 00:12:18,310 --> 00:12:20,970 Y a continuación, los dos últimos son el desviación a la izquierda y el desplazamiento a la derecha. 265 00:12:20,970 --> 00:12:23,970 ¿Cuáles son, básicamente, dos menos que signos o dos mayor que signos. 266 00:12:23,970 --> 00:12:26,294 Y cambiaron a poco el número dado de lugares 267 00:12:26,294 --> 00:12:27,710 que se le da en la dirección. 268 00:12:27,710 --> 00:12:29,980 Por lo que sería o bien cambiarlo a la izquierda, o hacia la derecha. 269 00:12:29,980 --> 00:12:30,480 ¿Sí? 270 00:12:30,480 --> 00:12:32,470 AUDIENCIA: ¿Cuál es la sintaxis para ejecutar? 271 00:12:32,470 --> 00:12:33,950 >> CAMILLE REKHSON: Vamos a ir a través de un ejemplo en un segundo. 272 00:12:33,950 --> 00:12:35,680 Así que espero, eso ayudará. 273 00:12:35,680 --> 00:12:41,060 ¿Tiene preguntas sobre solo lo que pasa aquí, antes-- Aceptar. 274 00:12:41,060 --> 00:12:43,821 Así que ir a través de algunos ejemplos. 275 00:12:43,821 --> 00:12:45,070 Vamos a empezar con los unos y. 276 00:12:45,070 --> 00:12:47,880 Qué sacaríamos si lo hiciéramos 0 y 1? 277 00:12:47,880 --> 00:12:48,899 >> AUDIENCIA: 0. 278 00:12:48,899 --> 00:12:50,690 CAMILLE REKHSON: OK, y si lo hiciéramos 1 Y 1? 279 00:12:50,690 --> 00:12:51,622 AUDIENCIA: 1. 280 00:12:51,622 --> 00:12:54,490 CAMILLE REKHSON: Sí, ¿y si lo hicimos 0 O uno? 281 00:12:54,490 --> 00:12:55,094 AUDIENCIA: 1. 282 00:12:55,094 --> 00:12:56,510 CAMILLE REKHSON: ¿Qué hay de 1 O 1? 283 00:12:56,510 --> 00:12:57,404 AUDIENCIA: 1. 284 00:12:57,404 --> 00:13:00,410 CAMILLE REKHSON: OK, ¿qué hay de 0 XOR 1? 285 00:13:00,410 --> 00:13:01,380 AUDIENCIA: 1. 286 00:13:01,380 --> 00:13:03,120 CAMILLE REKHSON: Y 1 XOR 1? 287 00:13:03,120 --> 00:13:03,902 AUDIENCIA: 0. 288 00:13:03,902 --> 00:13:05,360 CAMILLE REKHSON: Ustedes son buenos. 289 00:13:05,360 --> 00:13:06,510 ¿Qué tal NO 0? 290 00:13:06,510 --> 00:13:07,265 >> AUDIENCIA: 1. 291 00:13:07,265 --> 00:13:08,390 CAMILLE REKHSON: Y NO 1? 292 00:13:08,390 --> 00:13:09,602 AUDIENCIA: 0. 293 00:13:09,602 --> 00:13:12,810 CAMILLE REKHSON: Aceptar y, a continuación, este último uno es un pequeño con el desplazamiento. 294 00:13:12,810 --> 00:13:18,700 Así que si nos fijamos inicialmente x sea 8, y entonces y es x desplaza hacia la izquierda 3, 295 00:13:18,700 --> 00:13:19,760 lo que habría que darnos? 296 00:13:19,760 --> 00:13:20,676 >> AUDIENCIA: [inaudible]. 297 00:13:20,676 --> 00:13:22,817 298 00:13:22,817 --> 00:13:24,150 CAMILLE REKHSON: Diga eso otra vez. 299 00:13:24,150 --> 00:13:26,740 AUDIENCIA: [inaudible]. 300 00:13:26,740 --> 00:13:28,766 CAMILLE REKHSON: Por lo tanto, esta en realidad nos da 64. 301 00:13:28,766 --> 00:13:29,876 AUDIENCIA: [inaudible]. 302 00:13:29,876 --> 00:13:32,250 CAMILLE REKHSON: Así que estoy va a escribir esto aquí, 303 00:13:32,250 --> 00:13:34,700 así que esto hace un poco de sentido. 304 00:13:34,700 --> 00:13:45,120 Si tenemos 2 al 0, 2 a la 1, 2 a la 2, de 2 a 3 va a ser 8. 305 00:13:45,120 --> 00:13:52,380 Y si queremos cambiarlo 3 bits más a la izquierda, que sería 2 a la 4, 306 00:13:52,380 --> 00:13:57,270 2 a la 5, y 2 a la 6, y 2 a la 6 es 64. 307 00:13:57,270 --> 00:13:59,920 308 00:13:59,920 --> 00:14:01,110 ¿Eso tiene sentido? 309 00:14:01,110 --> 00:14:05,291 310 00:14:05,291 --> 00:14:05,791 Sí. 311 00:14:05,791 --> 00:14:08,725 >> AUDIENCIA: ¿Eso turno todos los años 1 y 0 de del número binario a el-- 312 00:14:08,725 --> 00:14:09,600 >> CAMILLE REKHSON: Sí. 313 00:14:09,600 --> 00:14:12,150 314 00:14:12,150 --> 00:14:15,170 Y usted no tendrá que preocuparse sobre la concurso sobre éstos ser negativo. 315 00:14:15,170 --> 00:14:19,510 No vamos a hacer a lidiar con cambios negativos de ninguna manera. 316 00:14:19,510 --> 00:14:24,070 ¿Alguna otra pregunta acerca de esto? 317 00:14:24,070 --> 00:14:24,570 Sí. 318 00:14:24,570 --> 00:14:30,570 >> AUDIENCIA: Si está desplazando hacia la derecha, es cualquier cosa que wasn't-- cualquier cosa que 319 00:14:30,570 --> 00:14:33,220 no era originalmente parte de la cosa 0? 320 00:14:33,220 --> 00:14:37,110 >> CAMILLE REKHSON: Sí, lo haría sólo tiene que añadir 0 de encendido en el original. 321 00:14:37,110 --> 00:14:38,110 Sí. 322 00:14:38,110 --> 00:14:41,540 >> AUDIENCIA: Entonces, ¿qué es eso 100 desplazado hacia la derecha tres veces? 323 00:14:41,540 --> 00:14:43,290 CAMILLE REKHSON: 100 desplazado hacia la derecha, 324 00:14:43,290 --> 00:14:46,057 lo que llevaría toda la 1 y 0 de ellos y simplemente cambiar 325 00:14:46,057 --> 00:14:48,515 a la derecha tantas veces como que a desplazar a la derecha. 326 00:14:48,515 --> 00:14:50,452 >> AUDIENCIA: [inaudible]? 327 00:14:50,452 --> 00:14:53,160 CAMILLE REKHSON: Bueno, son 100-- que hablando de 100 en binario, 328 00:14:53,160 --> 00:14:53,910 o 100 en decimal? 329 00:14:53,910 --> 00:14:55,750 AUDIENCIA: Lo siento, 100 en binario. 330 00:14:55,750 --> 00:14:58,916 >> CAMILLE REKHSON: 100 en binario, si usted cambia a la derecha- 331 00:14:58,916 --> 00:15:01,040 si usted cambia de puesto a la derecha una vez, se convertiría en 10. 332 00:15:01,040 --> 00:15:04,430 Si usted cambia de puesto a la derecha dos veces, se convertiría en 001. 333 00:15:04,430 --> 00:15:07,590 Y entonces, si usted cambia de nuevo, que tipo de perder el bit. 334 00:15:07,590 --> 00:15:09,610 Sí, eso es sólo 0. 335 00:15:09,610 --> 00:15:12,140 ¿Alguna otra pregunta sobre esto? 336 00:15:12,140 --> 00:15:12,835 Sí. 337 00:15:12,835 --> 00:15:14,695 >> AUDIENCIA: Así que entonces se convierte en 000. 338 00:15:14,695 --> 00:15:17,020 >> CAMILLE REKHSON: Sí. 339 00:15:17,020 --> 00:15:22,150 OK, así que vamos a ir a través de un poco de matemáticas ASCII. 340 00:15:22,150 --> 00:15:25,120 Así que los personajes pueden esencialmente ser tratados como enteros 341 00:15:25,120 --> 00:15:28,290 con base en sus valores ASCII. 342 00:15:28,290 --> 00:15:35,250 Así que si nos sentamos int A es igual a 65, int B es igual a A más 1, int Char C es igual a 343 00:15:35,250 --> 00:15:39,565 D menos 1, y Char D es igual a 68, lo que imprima en la parte inferior? 344 00:15:39,565 --> 00:15:46,150 345 00:15:46,150 --> 00:15:49,720 >> Por lo tanto, estamos imprimiendo these-- bendiga usted-- estamos 346 00:15:49,720 --> 00:15:53,520 imprimir todos éstos como caracteres basado en el porcentaje C. 347 00:15:53,520 --> 00:15:56,320 Así que estamos básicamente imprimir el valor del carácter de los cuatro 348 00:15:56,320 --> 00:15:58,600 de estas variables. 349 00:15:58,600 --> 00:16:04,280 Como sugerencia, 65 es el valor ASCII del capital A. Tal vez eso ayudó. 350 00:16:04,280 --> 00:16:04,780 ¿Qué? 351 00:16:04,780 --> 00:16:05,530 >> AUDIENCIA: ABCD. 352 00:16:05,530 --> 00:16:07,780 >> CAMILLE REKHSON: Sí, así esto sería imprimir exactamente 353 00:16:07,780 --> 00:16:10,290 ABCD porque nos pusimos int A igual al valor ASCII de A. 354 00:16:10,290 --> 00:16:13,085 Así que si imprimimos eso como carácter, que acaba de obtener el capital A, 355 00:16:13,085 --> 00:16:15,540 A más 1 sería una B mayúscula en ASCII. 356 00:16:15,540 --> 00:16:19,260 D menos 1 sería una C mayúscula en ASCII. 357 00:16:19,260 --> 00:16:25,185 Y 68 es el valor ASCII de D. Preguntas sobre ASCII? 358 00:16:25,185 --> 00:16:25,685 Sí. 359 00:16:25,685 --> 00:16:31,370 >> AUDIENCIA: Entonces, la comillas en A, hace que el cambio de A a la ASCII? 360 00:16:31,370 --> 00:16:34,456 >> CAMILLE REKHSON: Se uses-- que comillas simples count-- alrededor de la A 361 00:16:34,456 --> 00:16:35,330 lo convierte en un personaje. 362 00:16:35,330 --> 00:16:37,600 Y si usted está tratando con en el número form-- 363 00:16:37,600 --> 00:16:40,320 así que cuando, como en este caso, es siendo tratado como un int-- 364 00:16:40,320 --> 00:16:44,664 entonces sería tratar con su valor ASCII. 365 00:16:44,664 --> 00:16:45,164 Sí. 366 00:16:45,164 --> 00:16:50,060 >> AUDIENCIA: ¿Me recomienda que tenemos una tabla de referencia ASCII? 367 00:16:50,060 --> 00:16:51,900 >> CAMILLE REKHSON: No think-- 368 00:16:51,900 --> 00:16:54,720 >> AUDIENCIA: ¿O sería sólo tener trato con ellos? 369 00:16:54,720 --> 00:16:56,210 >> CAMILLE REKHSON: Creo que lo haría con las cosas fáciles. 370 00:16:56,210 --> 00:16:58,168 No creo que lo haría dolor de escribir tal vez 371 00:16:58,168 --> 00:17:02,653 lo mayúscula y minúscula A son, simplemente lo que los rangos están comenzando con. 372 00:17:02,653 --> 00:17:05,819 Pero no creo que usted necesita tomar todos el espacio para poner una tabla ASCII conjunto. 373 00:17:05,819 --> 00:17:06,803 Sí. 374 00:17:06,803 --> 00:17:09,755 >> AUDIENCIA: ¿Cuál es la diferencia entre decir int A y C carbón, 375 00:17:09,755 --> 00:17:12,720 como se hace en la parte superior? 376 00:17:12,720 --> 00:17:17,380 >> CAMILLE REKHSON: Así que es sólo lo que está almacenado en la memoria. 377 00:17:17,380 --> 00:17:20,010 Pero se puede tratar de cualquier manera. 378 00:17:20,010 --> 00:17:23,274 Como vemos aquí, lo hacemos de impresión el A como un personaje. 379 00:17:23,274 --> 00:17:24,690 AUDIENCIA: Así que eso es lo mismo que A? 380 00:17:24,690 --> 00:17:25,606 CAMILLE REKHSON: Sí. 381 00:17:25,606 --> 00:17:28,030 382 00:17:28,030 --> 00:17:29,537 ¿Alguna otra pregunta? 383 00:17:29,537 --> 00:17:32,022 >> AUDIENCIA: Entonces, ciento C está diciendo imprimir un char? 384 00:17:32,022 --> 00:17:33,016 >> CAMILLE REKHSON: Sí. 385 00:17:33,016 --> 00:17:35,501 >> AUDIENCIA: Así que incluso si A tiene solamente ha definido como un entero, 386 00:17:35,501 --> 00:17:37,569 si tratamos de imprimir una Char como 65, que would-- 387 00:17:37,569 --> 00:17:40,110 CAMILLE REKHSON: Sería ir a básicamente va a la tabla ASCII 388 00:17:40,110 --> 00:17:42,990 y obtiene cualquier caracteres en la tabla ASCII para que el 65. 389 00:17:42,990 --> 00:17:43,840 >> AUDIENCIA: Gracias. 390 00:17:43,840 --> 00:17:44,756 >> CAMILLE REKHSON: Sí. 391 00:17:44,756 --> 00:17:45,445 ¿Sí? 392 00:17:45,445 --> 00:17:50,620 >> AUDIENCIA: Así que si usted hizo% I,% I, % I,% I, lo haría sólo print-- 393 00:17:50,620 --> 00:17:52,620 CAMILLE REKHSON: Sí, si se hizo todo un 4% de I, 394 00:17:52,620 --> 00:17:57,170 sería imprimir el ASCII los valores de los cuatro de estos. 395 00:17:57,170 --> 00:17:59,483 ¿Alguna otra pregunta? 396 00:17:59,483 --> 00:18:06,310 OK, así que el alcance, básicamente esto nos ayuda a determinar dónde 397 00:18:06,310 --> 00:18:08,450 existe una variable en su programa. 398 00:18:08,450 --> 00:18:11,910 Así que hemos hablado de dos diferentes tipos de alcance, globales y locales. 399 00:18:11,910 --> 00:18:14,560 >> Si una variable tiene el ámbito mundial, significa todo el programa 400 00:18:14,560 --> 00:18:16,292 tiene acceso a esa variable. 401 00:18:16,292 --> 00:18:18,000 Y si a nivel mundial alcance una variable, 402 00:18:18,000 --> 00:18:19,510 declararlo antes de que su función principal. 403 00:18:19,510 --> 00:18:20,830 Así se hace la derecha del palo. 404 00:18:20,830 --> 00:18:22,950 Y entonces su totalidad programa puede acceder a él. 405 00:18:22,950 --> 00:18:26,070 >> Si está con ámbito sólo a nivel local, que variables confinado a una región específica. 406 00:18:26,070 --> 00:18:29,705 Así que si usted declara dentro de un bucle for, sólo eso bucle for puede acceder a él. 407 00:18:29,705 --> 00:18:31,580 O si se declara dentro una función específica, 408 00:18:31,580 --> 00:18:34,940 Sólo esa función puede acceder a él. 409 00:18:34,940 --> 00:18:38,265 Preguntas sobre el alcance. 410 00:18:38,265 --> 00:18:41,570 >> OK, entonces la función de creación de prototipos. 411 00:18:41,570 --> 00:18:45,360 Básicamente porque C, cuando compila, lee de arriba hacia abajo. 412 00:18:45,360 --> 00:18:48,800 Si se declara una función tarde en su código, 413 00:18:48,800 --> 00:18:51,670 el compilador no sabe que existe esa función. 414 00:18:51,670 --> 00:18:55,690 Así que lo que usamos son prototipos, que básicamente dice el compilador, 415 00:18:55,690 --> 00:18:58,710 esta función existe, ir a buscar para más adelante en el código. 416 00:18:58,710 --> 00:19:00,900 Así que la forma en que lo haces un prototipo de función 417 00:19:00,900 --> 00:19:03,020 es exactamente la forma de empezar fuera escribir una función. 418 00:19:03,020 --> 00:19:05,310 Usted da el tipo de retorno, el nombre de la función, 419 00:19:05,310 --> 00:19:08,930 y luego los argumentos que realiza esa función. 420 00:19:08,930 --> 00:19:13,970 >> Por lo tanto, para mirar un ejemplo rápido, en este caso de que nuestra función que estamos usando aquí 421 00:19:13,970 --> 00:19:15,340 es básicamente una función de cubo. 422 00:19:15,340 --> 00:19:19,170 Así que teniendo en un entero y regresar al cubo de ese entero. 423 00:19:19,170 --> 00:19:23,190 Así que ya hemos escrito que función debajo de la función principal, 424 00:19:23,190 --> 00:19:26,300 y queremos utilizar el salida del que-- o nosotros 425 00:19:26,300 --> 00:19:28,630 quiere que la función en nuestra función principal, 426 00:19:28,630 --> 00:19:31,980 ponemos a su forma de prototipo en la parte superior de nuestro programa. 427 00:19:31,980 --> 00:19:34,460 Y luego, cuando llamamos que en nuestra función principal, 428 00:19:34,460 --> 00:19:38,800 el compilador sabe que esa función es escrita más tarde, y saldrá a buscarlo, 429 00:19:38,800 --> 00:19:40,910 y utilizará correctamente. 430 00:19:40,910 --> 00:19:45,190 Preguntas sobre la creación de un prototipo? 431 00:19:45,190 --> 00:19:45,690 Sí. 432 00:19:45,690 --> 00:19:46,940 >> AUDIENCIA: Entonces, ¿cuál es el punto? 433 00:19:46,940 --> 00:19:49,374 434 00:19:49,374 --> 00:19:50,915 No entiendo el punto de prototipos. 435 00:19:50,915 --> 00:19:52,820 ¿Por qué no tenerlo ahí abajo? 436 00:19:52,820 --> 00:19:54,903 >> CAMILLE REKHSON: Bueno, si es aquí, entonces cuando 437 00:19:54,903 --> 00:19:57,020 se llega a la línea de cubo de x en su función principal, 438 00:19:57,020 --> 00:19:59,495 el compilador no tendrá idea de que la función de cubo realmente existe. 439 00:19:59,495 --> 00:20:01,310 >> AUDIENCIA: ¿No podría usted sólo hay que poner en frente? 440 00:20:01,310 --> 00:20:02,350 >> CAMILLE REKHSON: Es mejores prácticas de codificación 441 00:20:02,350 --> 00:20:04,150 para ponerlo bajo su función principal. 442 00:20:04,150 --> 00:20:06,350 Así que por eso lo haríamos hacer el prototipado. 443 00:20:06,350 --> 00:20:07,680 El hecho de que, si tenía una gran cantidad de funciones, 444 00:20:07,680 --> 00:20:10,180 que sería muy complicado para leer a través de todas esas funciones 445 00:20:10,180 --> 00:20:12,030 antes de llegar a la carne de su programa. 446 00:20:12,030 --> 00:20:13,888 Sí, y has tenido una q-- 447 00:20:13,888 --> 00:20:16,796 >> AUDIENCIA: Entonces, está declarando la variable en la parte superior 448 00:20:16,796 --> 00:20:18,795 para que pueda acceder a ella, que sea una variable global? 449 00:20:18,795 --> 00:20:21,119 ¿Eso es similar a este donde se declarándolo 450 00:20:21,119 --> 00:20:23,660 allá arriba, por lo que sabe que que va a acceder a él más tarde 451 00:20:23,660 --> 00:20:24,762 y se puede utilizar? 452 00:20:24,762 --> 00:20:26,146 >> CAMILLE REKHSON: Sí. 453 00:20:26,146 --> 00:20:26,646 Sí. 454 00:20:26,646 --> 00:20:30,414 >> AUDIENCIA: Si el-- cualquier adicional funciones que crean la llave exterior 455 00:20:30,414 --> 00:20:31,840 de esta cosa, o-- 456 00:20:31,840 --> 00:20:33,760 >> CAMILLE REKHSON: Sí, si usted es la creación de otra principal functions-- 457 00:20:33,760 --> 00:20:36,385 en sí mismo es por lo que si el function-- va a crear otras funciones, 458 00:20:36,385 --> 00:20:37,555 deben estar fuera. 459 00:20:37,555 --> 00:20:38,055 ¿Sí? 460 00:20:38,055 --> 00:20:39,734 >> AUDIENCIA: ¿Cuál es ciento D? 461 00:20:39,734 --> 00:20:42,150 CAMILLE REKHSON: Porcentaje D es lo mismo que por ciento I. 462 00:20:42,150 --> 00:20:45,915 Se refiere a un número entero. 463 00:20:45,915 --> 00:20:47,895 Sí. 464 00:20:47,895 --> 00:20:50,370 >> AUDIENCIA: Entonces, ¿cuál ha sido la obra principal int? 465 00:20:50,370 --> 00:20:51,724 ¿Cuál era ese vacío? 466 00:20:51,724 --> 00:20:53,890 CAMILLE REKHSON: Vacío dice que se necesita en ningún argumento. 467 00:20:53,890 --> 00:20:55,320 AUDIENCIA: [inaudible]. 468 00:20:55,320 --> 00:20:57,570 CAMILLE REKHSON: Puede usted hablar un poco más fuerte, lo siento? 469 00:20:57,570 --> 00:21:00,153 AUDIENCIA: Sí, lo siento, ¿por qué pones anular para el primero, 470 00:21:00,153 --> 00:21:02,297 y luego int de entrada para el segundo uno? 471 00:21:02,297 --> 00:21:04,720 472 00:21:04,720 --> 00:21:07,470 CAMILLE REKHSON: Ah, para los dos diferente-- para la función principal 473 00:21:07,470 --> 00:21:09,290 en comparación con la función de cubo? 474 00:21:09,290 --> 00:21:13,360 Así que en la función principal, usamos void porque hay 475 00:21:13,360 --> 00:21:16,870 hay parámetros que se están adoptando en. 476 00:21:16,870 --> 00:21:19,425 Mientras que en el cubo función, tenemos una entrada. 477 00:21:19,425 --> 00:21:22,300 Es por eso que dice int, de entrada, porque hay argumentos que estamos 478 00:21:22,300 --> 00:21:24,571 teniendo en ejecutar nuestra función. 479 00:21:24,571 --> 00:21:25,070 Sí. 480 00:21:25,070 --> 00:21:27,770 481 00:21:27,770 --> 00:21:30,464 ¿Hay preguntas? 482 00:21:30,464 --> 00:21:34,520 >> Aceptar y, a continuación, de forma rápida de punto flotante imprecisión. 483 00:21:34,520 --> 00:21:37,200 Así que tenemos un número infinito de números reales. 484 00:21:37,200 --> 00:21:38,950 Pero sólo hay una número finito de bits 485 00:21:38,950 --> 00:21:42,880 que podemos utilizar para mostrar los números, y les representan. 486 00:21:42,880 --> 00:21:45,020 Entonces nos encontramos con alguna imprecisión. 487 00:21:45,020 --> 00:21:49,190 Y los números no lo hará siempre ser bastante exactamente lo 488 00:21:49,190 --> 00:21:51,810 usted piensa que son cuando estás tratar con coma flotante. 489 00:21:51,810 --> 00:21:53,650 Esto es algo bueno saberlo. 490 00:21:53,650 --> 00:21:56,628 Preguntas sobre esto? 491 00:21:56,628 --> 00:21:59,610 Sí. 492 00:21:59,610 --> 00:22:02,090 >> AUDIENCIA: ¿Este refiriéndose a la idea de bit de desbordamiento 493 00:22:02,090 --> 00:22:03,089 que estuvo en la conferencia? 494 00:22:03,089 --> 00:22:06,080 ¿Era algo separado? 495 00:22:06,080 --> 00:22:09,650 >> CAMILLE REKHSON: Son totalmente independiente, sí. 496 00:22:09,650 --> 00:22:11,160 Vale genial. 497 00:22:11,160 --> 00:22:16,369 498 00:22:16,369 --> 00:22:17,452 Pulak GOYAL: Hola, todo el mundo. 499 00:22:17,452 --> 00:22:19,872 Mi nombre es Pulak, y voy a estar repasando punteros. 500 00:22:19,872 --> 00:22:23,260 501 00:22:23,260 --> 00:22:25,720 OK, así que primero vamos a pensar acerca de lo que la memoria se parece. 502 00:22:25,720 --> 00:22:28,610 Así como se puede ver aquí, tener memoria y lo dividimos por 503 00:22:28,610 --> 00:22:30,090 en un montón de bloques. 504 00:22:30,090 --> 00:22:33,150 Y nos referimos a cada bloquear por una dirección, ¿no? 505 00:22:33,150 --> 00:22:37,196 Y ¿alguien recuerda qué tipo de notación que utilizamos para indicar una dirección? 506 00:22:37,196 --> 00:22:38,510 >> AUDIENCIA: hexadecimal, 0X. 507 00:22:38,510 --> 00:22:39,510 >> Pulak GOYAL: hexadecimal, ¿verdad? 508 00:22:39,510 --> 00:22:41,509 Así que el 0X significa que estamos hablando hexadecimal. 509 00:22:41,509 --> 00:22:45,740 510 00:22:45,740 --> 00:22:48,360 OK, así que ¿cómo creamos punteros? 511 00:22:48,360 --> 00:22:51,960 Así que tomamos el tipo, que poner it-- añadir una estrella a la misma, 512 00:22:51,960 --> 00:22:53,760 y luego le añadimos el nombre de la variable. 513 00:22:53,760 --> 00:22:59,280 Así que los ejemplos que hemos visto son int x estrella, estrella carbón y, y flotar comienzan z. 514 00:22:59,280 --> 00:23:01,380 Así que cuando digo int estrellas x, alguien puede decirme 515 00:23:01,380 --> 00:23:03,965 lo que estoy hablando de la clase de allí? 516 00:23:03,965 --> 00:23:05,710 >> DIRIGIDO: La ubicación del disco. 517 00:23:05,710 --> 00:23:06,890 >> Pulak GOYAL: Lo siento, ¿qué? 518 00:23:06,890 --> 00:23:07,723 ¿Puede repetir eso? 519 00:23:07,723 --> 00:23:09,250 AUDIENCIA: La ubicación del disco. 520 00:23:09,250 --> 00:23:12,390 >> Pulak GOYAL: Así actually-- así que lo que Quise decir, es cuando tenemos int estrellas x, 521 00:23:12,390 --> 00:23:14,400 que estamos diciendo es la creación de un puntero, y 522 00:23:14,400 --> 00:23:17,130 puede almacenar la dirección de un variable que es un int, ¿verdad? 523 00:23:17,130 --> 00:23:21,810 Así que con la estrella de carbón y, estamos creando un puntero 524 00:23:21,810 --> 00:23:24,220 que puede almacenar la dirección de una variable que es un char. 525 00:23:24,220 --> 00:23:26,270 Así que tiene sentido para todo el mundo? 526 00:23:26,270 --> 00:23:29,600 Vale, guay 527 00:23:29,600 --> 00:23:33,450 >> OK, así que con punteros, hay dos operaciones importantes que podemos hacer. 528 00:23:33,450 --> 00:23:36,630 Hay referencias, y Hay eliminación de referencias. 529 00:23:36,630 --> 00:23:37,130 ¿Sí? 530 00:23:37,130 --> 00:23:38,760 >> AUDIENCIA: ¿Podría ir un poco más lento? 531 00:23:38,760 --> 00:23:39,510 >> Pulak GOYAL: Claro. 532 00:23:39,510 --> 00:23:45,350 Sí, así que-- Sí, hacer preguntas a medida que avanzo junto si usted-- si algo no está claro. 533 00:23:45,350 --> 00:23:47,240 Así que hemos referencias y eliminación de referencias. 534 00:23:47,240 --> 00:23:51,680 Así que cuando se quiere obtener la dirección de una variable, luego usar el signo. 535 00:23:51,680 --> 00:23:53,620 Así que digamos que declaré int x en alguna parte. 536 00:23:53,620 --> 00:23:57,450 Y quiero conseguir la dirección de ese y pasarlo en, yo haría signo x. 537 00:23:57,450 --> 00:24:01,260 Y cuando usted desea conseguir el valor asociado con un puntero, 538 00:24:01,260 --> 00:24:04,670 utiliza el dereference operador, que es una estrella. 539 00:24:04,670 --> 00:24:08,570 >> Así que vamos a decir que tenía int estrellas x, y Lo tenía que apunta a algo. 540 00:24:08,570 --> 00:24:13,510 Si quiero obtener el valor de lo que es señalando, me acaba de hacer estrellas x. 541 00:24:13,510 --> 00:24:14,960 ¿Está claro? 542 00:24:14,960 --> 00:24:16,390 Para cualquier duda al respecto? 543 00:24:16,390 --> 00:24:18,129 Sí. 544 00:24:18,129 --> 00:24:25,275 >> AUDIENCIA: Así que en general, que no será capaz de hacer en x y estrella 545 00:24:25,275 --> 00:24:27,135 x x con el mismo. 546 00:24:27,135 --> 00:24:28,740 ¿Es correcto? 547 00:24:28,740 --> 00:24:31,800 Porque si x es una variables, entonces usted tiene 548 00:24:31,800 --> 00:24:35,980 que hacer en x para conseguir que se trata de un puntero. 549 00:24:35,980 --> 00:24:40,810 Pero si x es un puntero, entonces usted necesita hacer estrellas x para obtener la variable. 550 00:24:40,810 --> 00:24:43,240 >> Pulak GOYAL: Sí, por lo que el pregunta era acerca de cuándo 551 00:24:43,240 --> 00:24:45,750 usamos un star-- cuando usarías la estrella, 552 00:24:45,750 --> 00:24:47,470 y cuando se utiliza el signo, y podemos 553 00:24:47,470 --> 00:24:49,160 utilizarlo con el mismo tipo de variable? 554 00:24:49,160 --> 00:24:51,810 Así que por lo general si usted tiene, por ejemplo, un int x, 555 00:24:51,810 --> 00:24:55,170 usted mayormente a utilizar el ampersand para obtener la dirección de ese. 556 00:24:55,170 --> 00:24:58,220 Debido a que no hace sentido de deferencia hacia x. 557 00:24:58,220 --> 00:25:04,220 Considerando que, si tuviéramos int estrellas x, usted estaría utilizando la operación dereference 558 00:25:04,220 --> 00:25:07,910 porque no tendría sentido utilizar en x en ese caso. 559 00:25:07,910 --> 00:25:09,582 ¿Eso tiene sentido? 560 00:25:09,582 --> 00:25:13,192 >> AUDIENCIA: ¿Así que no puede y, a continuación, un puntero? 561 00:25:13,192 --> 00:25:14,900 Pulak GOYAL: ¿Así que técnicamente, en realidad 562 00:25:14,900 --> 00:25:16,870 puede hacer el signo de un puntero. 563 00:25:16,870 --> 00:25:18,984 Pero eso es fuera de la ámbito de aplicación de esta clase. 564 00:25:18,984 --> 00:25:21,900 Para el purpose-- para sus chicos ' efectos, cada vez que tienen punteros, 565 00:25:21,900 --> 00:25:25,191 desea utilizar el operador dereference para obtener el valor asociado con eso. 566 00:25:25,191 --> 00:25:27,380 Y cuando tienes regulares las variables, como un int x, 567 00:25:27,380 --> 00:25:31,410 desea utilizar el signo operador para obtener la dirección de ese. 568 00:25:31,410 --> 00:25:31,910 ¿De acuerdo? 569 00:25:31,910 --> 00:25:35,670 570 00:25:35,670 --> 00:25:38,850 >> OK, así que echemos un vistazo a los punteros y lo que ocurre bajo el capó. 571 00:25:38,850 --> 00:25:42,640 Así que lo primero que hice aquí es la int declarado x es igual a 5. 572 00:25:42,640 --> 00:25:48,460 La dirección de esta variable es 0x04, y el valor es 5. 573 00:25:48,460 --> 00:25:52,940 Así que vamos a ver qué pasa con la siguiente línea. 574 00:25:52,940 --> 00:25:55,130 Así que ahora declaramos un puntero. 575 00:25:55,130 --> 00:26:01,450 Su dirección es 0x08, y su valor es la dirección de x. 576 00:26:01,450 --> 00:26:05,220 ¿Eso tiene sentido para todo el mundo? 577 00:26:05,220 --> 00:26:06,507 Para cualquier duda al respecto? 578 00:26:06,507 --> 00:26:09,130 579 00:26:09,130 --> 00:26:13,080 >> OK, y ahora vamos a ver qué sucede con la siguiente línea. 580 00:26:13,080 --> 00:26:18,140 Así que con esta nueva línea, tenemos la dirección de la copia es 0x10, 581 00:26:18,140 --> 00:26:20,780 y su valor es 5. 582 00:26:20,780 --> 00:26:23,570 Así que la razón por la que tenemos de cinco es dijimos, dereference 583 00:26:23,570 --> 00:26:26,740 puntero, que declaramos un int estrellas. 584 00:26:26,740 --> 00:26:35,797 Y así went-- cuando dereference ella, se dijo, está bien, lo que está en el 0x04 ranura. 585 00:26:35,797 --> 00:26:36,630 Y fue a eso. 586 00:26:36,630 --> 00:26:40,785 Y lo que x es un x0-- 0x04, y el valor es 5. 587 00:26:40,785 --> 00:26:41,660 Tiene sentido? 588 00:26:41,660 --> 00:26:42,334 ¿Sí? 589 00:26:42,334 --> 00:26:50,090 >> AUDIENCIA: ¿Por qué es la dirección de la copia sólo 4 bytes por encima de la x del puntero? 590 00:26:50,090 --> 00:26:52,318 >> Pulak GOYAL: Sí, esto es un error en-- 591 00:26:52,318 --> 00:26:55,304 >> CAMILLE REKHSON: Así que, sí, recuerde esto está escrito en hexadecimal. 592 00:26:55,304 --> 00:26:56,220 Pulak GOYAL: Oh, sí. 593 00:26:56,220 --> 00:26:58,615 CAMILLE REKHSON: Así que esta es en realidad 8 y 16 594 00:26:58,615 --> 00:27:00,960 ya dijimos que, el puntero, recuerde, 595 00:27:00,960 --> 00:27:05,330 en nuestro IDE va ​​a ser de 8 bytes de longitud. 596 00:27:05,330 --> 00:27:06,080 Pulak GOYAL: Sí. 597 00:27:06,080 --> 00:27:09,160 598 00:27:09,160 --> 00:27:12,540 Así que para ser claros, punteros son 8 bytes de longitud. 599 00:27:12,540 --> 00:27:14,160 Un int es de 4 bytes. 600 00:27:14,160 --> 00:27:18,380 Así que la razón por lo que saltado de 0x04 a 0x08 601 00:27:18,380 --> 00:27:20,980 es porque hemos tenido que hacer un salto de 8 bytes. 602 00:27:20,980 --> 00:27:24,396 Y luego ya para-- copia es sólo un int, 603 00:27:24,396 --> 00:27:26,020 es 4 bytes, que es un medio de 8 bytes. 604 00:27:26,020 --> 00:27:29,970 Así que sólo nos saltamos a 0x10, que es dos de distancia de 0x08. 605 00:27:29,970 --> 00:27:33,100 606 00:27:33,100 --> 00:27:34,570 ¿Alguna otra pregunta? 607 00:27:34,570 --> 00:27:36,850 OK, let's-- sí? 608 00:27:36,850 --> 00:27:39,245 >> AUDIENCIA: ¿Por qué no es el valor de int copia 609 00:27:39,245 --> 00:27:45,000 simplemente el-- ¿por qué es 5 en lugar de 0x04? 610 00:27:45,000 --> 00:27:46,270 >> Pulak GOYAL: OK, ¿por qué es 5? 611 00:27:46,270 --> 00:27:51,600 OK, así que cuando el-- Así que vamos primero pensar en esto en términos de tipos. 612 00:27:51,600 --> 00:27:55,600 Así que estoy diciendo int copia es igual a estrellas puntero. 613 00:27:55,600 --> 00:27:57,490 Entonces, ¿cuál es el tipo de puntero? 614 00:27:57,490 --> 00:27:59,310 Es un int estrellas. 615 00:27:59,310 --> 00:28:03,850 Y cuando dereference que, el tipo se convierte en un int. 616 00:28:03,850 --> 00:28:06,570 Así que lo que esperamos para almacenar aquí es en realidad un int. 617 00:28:06,570 --> 00:28:07,965 Tiene sentido? 618 00:28:07,965 --> 00:28:09,090 AUDIENCIA: Claro, poco. 619 00:28:09,090 --> 00:28:11,465 Pulak GOYAL: Así que por lo general cuando usted piensa en términos de tipos, 620 00:28:11,465 --> 00:28:15,607 que ayuda a entender lo que es la tipo del valor que debería ir allí. 621 00:28:15,607 --> 00:28:17,940 Así que por lo general puede descartar muchos de estos errores comunes 622 00:28:17,940 --> 00:28:21,790 por pensar en términos de tipos. 623 00:28:21,790 --> 00:28:23,612 Déjame ir a través de un poco más diapositivas. 624 00:28:23,612 --> 00:28:26,070 Y podemos conseguir preguntas en el final de la sección puntero. 625 00:28:26,070 --> 00:28:28,910 626 00:28:28,910 --> 00:28:32,290 OK, así que tenemos un programa con errores aquí. 627 00:28:32,290 --> 00:28:35,460 Y así lo hace anyone-- puede alguien decirle mí lo que está mal con este programa? 628 00:28:35,460 --> 00:28:39,000 629 00:28:39,000 --> 00:28:40,820 Derecho, por lo que lo que estamos esperando que hacer aquí 630 00:28:40,820 --> 00:28:44,520 es-- lo que queremos hacer es tomar la variable int x 631 00:28:44,520 --> 00:28:48,350 y gire it-- hacen iguales 5 en lugar de 3 y luego imprimir eso. 632 00:28:48,350 --> 00:28:49,640 Pero eso no está sucediendo. 633 00:28:49,640 --> 00:28:50,950 ¿Puede alguien decirme por qué? 634 00:28:50,950 --> 00:28:51,934 ¿Sí? 635 00:28:51,934 --> 00:28:54,840 >> AUDIENCIA: Cuando la función to_five toma x, ya que es el argumento, 636 00:28:54,840 --> 00:28:58,130 no hace falta ser x sí mismo, sino en cambio crea una copia, una, de la misma. 637 00:28:58,130 --> 00:29:00,115 Y forma las operaciones en eso. 638 00:29:00,115 --> 00:29:02,614 Pero debido a eso, no lo hace cambiar el valor real de x. 639 00:29:02,614 --> 00:29:03,970 Puesto que usted es [inaudible]. 640 00:29:03,970 --> 00:29:07,950 >> Pulak GOYAL: Derecho, bien, así que cuando nos llamamos 641 00:29:07,950 --> 00:29:10,100 el to_five función, lo que que estamos haciendo es pensar, 642 00:29:10,100 --> 00:29:12,550 darme una copia de la valor a esa función. 643 00:29:12,550 --> 00:29:16,010 Esa función, entonces, va y haciendo algunas manipulaciones. 644 00:29:16,010 --> 00:29:21,260 Pero una vez que vuelve, es ahora fuera de ámbito de la función principal aquí. 645 00:29:21,260 --> 00:29:24,750 Y así x sigue siendo, de hecho, igual a 3, e imprimimos 3. 646 00:29:24,750 --> 00:29:26,445 OK, así que vamos a ver cómo sucede esto. 647 00:29:26,445 --> 00:29:29,430 648 00:29:29,430 --> 00:29:31,180 >> OK, así que no hay nada declarado. 649 00:29:31,180 --> 00:29:34,490 Entonces, aquí, x es igual a 3. 650 00:29:34,490 --> 00:29:40,820 Y ahora es-- en la posición dos, un todavía no está en el alcance. 651 00:29:40,820 --> 00:29:46,790 Y ahora vamos a colocar tres, donde ahora asume el valor de 3. 652 00:29:46,790 --> 00:29:49,380 A las cuatro, ahora cambiamos una a 5. 653 00:29:49,380 --> 00:29:53,290 Pero ahora, cuando saltar de nuevo a cinco, que es la sentencia print, 654 00:29:53,290 --> 00:29:55,380 una está ahora fuera de alcance. 655 00:29:55,380 --> 00:29:57,450 Y x sigue siendo igual a 3. 656 00:29:57,450 --> 00:29:59,700 ¿Tiene esto sentido para todo el mundo? 657 00:29:59,700 --> 00:30:03,010 OK, así que ahora vamos a hablar de cómo podemos usar punteros para solucionar este problema. 658 00:30:03,010 --> 00:30:06,140 ¿Alguien tiene alguna idea de cómo nos podría solucionar este problema mediante el uso de punteros? 659 00:30:06,140 --> 00:30:08,710 660 00:30:08,710 --> 00:30:11,490 >> AUDIENCIA: Usted toma en un int estrellas en lugar de un int para to_five. 661 00:30:11,490 --> 00:30:12,530 >> Pulak GOYAL: Lo siento, ¿podría hablar? 662 00:30:12,530 --> 00:30:15,266 >> AUDIENCIA: Usted toma en un int estrellas en lugar de un int para to_five. 663 00:30:15,266 --> 00:30:16,140 Pulak GOYAL: OK, sí. 664 00:30:16,140 --> 00:30:20,250 Así que vamos a pass-- vez de pasar simplemente el valor, vamos a pasarlo por referencia. 665 00:30:20,250 --> 00:30:21,690 Esta nueva función, ¿no? 666 00:30:21,690 --> 00:30:25,210 Y así, al pasar la dirección, nos puede hacer manipulaciones en la dirección. 667 00:30:25,210 --> 00:30:27,400 Y así estamos en realidad, De hecho, el cambio de x. 668 00:30:27,400 --> 00:30:30,570 Así que vamos a ver cómo funciona. 669 00:30:30,570 --> 00:30:32,950 >> OK, así que en este ejemplo nos lo arreglaron. 670 00:30:32,950 --> 00:30:38,000 Hemos cambiado nuestra firma de to_five para disfrutar de un int 671 00:30:38,000 --> 00:30:40,540 estrella en lugar de sólo un int aquí. 672 00:30:40,540 --> 00:30:45,470 Luego dereference este y asignar un 5 a la misma. 673 00:30:45,470 --> 00:30:48,090 Y ahora esa voluntad, de hecho, imprima 5. 674 00:30:48,090 --> 00:30:51,960 Así que vamos a ver cómo los pasos funcionan aquí. 675 00:30:51,960 --> 00:30:55,200 >> Así, con la primera etapa, no hay nada aún declarado. 676 00:30:55,200 --> 00:31:00,140 Así que aquí, con el segundo paso, hemos dicho que x es igual a 3, 677 00:31:00,140 --> 00:31:03,970 pero es todavía fuera de alcance. 678 00:31:03,970 --> 00:31:08,100 Ahora por la tercera línea, tenemos x es todavía igual a tres. 679 00:31:08,100 --> 00:31:14,150 Y ahora, hemos pasado en-- lo que es almacenado en una es ahora la dirección de x. 680 00:31:14,150 --> 00:31:16,760 ¿Eso tiene sentido para todos, cómo hemos llegado hasta eso? 681 00:31:16,760 --> 00:31:21,470 Cierto, tenemos la amper-- así es como pasamos un signo x para la función 682 00:31:21,470 --> 00:31:23,040 to_five. 683 00:31:23,040 --> 00:31:30,330 Y luego a la siguiente línea, lo que que hacemos, es que eliminar la referencia a. 684 00:31:30,330 --> 00:31:36,120 >> Y por eliminación de referencias a, podemos para cambiar el valor de x del 3 al 5. 685 00:31:36,120 --> 00:31:38,560 Debido x vive en esa dirección 0x12. 686 00:31:38,560 --> 00:31:42,440 687 00:31:42,440 --> 00:31:45,810 Y luego, finalmente, cuando volvemos de nuevo a principal, 688 00:31:45,810 --> 00:31:50,570 aunque esto a es ahora fuera de ámbito de aplicación, hemos, de hecho, cambiado x. 689 00:31:50,570 --> 00:31:51,570 Y es 5. 690 00:31:51,570 --> 00:31:55,160 ¿Una pregunta sobre esto? 691 00:31:55,160 --> 00:31:56,036 ¿Sí? 692 00:31:56,036 --> 00:31:58,185 >> AUDIENCIA: ¿Puede usted decirme lo que el signo x era? 693 00:31:58,185 --> 00:32:00,004 Pensé signo era como AND. 694 00:32:00,004 --> 00:32:03,480 695 00:32:03,480 --> 00:32:07,210 >> Pulak GOYAL: Sí, así que utilice la misma símbolo de muchas cosas diferentes. 696 00:32:07,210 --> 00:32:11,470 Así que aquí, cuando tener-- en este caso, cuando se tiene, 697 00:32:11,470 --> 00:32:19,380 Yo guess-- por lo que en este caso, cuando usted está tratando con los punteros, 698 00:32:19,380 --> 00:32:23,640 cuando se pone el signo delante de un int, una variable int o un char, 699 00:32:23,640 --> 00:32:28,609 o un flujo, lo que dices es, dame la dirección de este. 700 00:32:28,609 --> 00:32:31,900 Pero lo que estaba pensando, cuando lo demás usted utilizaría signo es, digamos, 701 00:32:31,900 --> 00:32:33,180 en una sentencia if. 702 00:32:33,180 --> 00:32:39,256 Usted tiene una verdad, y algunas variables que evaluar a algunas Boolean, 703 00:32:39,256 --> 00:32:41,380 y algunas otras variables que validan algunas de Boole 704 00:32:41,380 --> 00:32:42,880 y usted desea conseguir el y eso. 705 00:32:42,880 --> 00:32:44,552 De allí tendría que usar el signo. 706 00:32:44,552 --> 00:32:47,510 ALTAVOZ 1: Sí, así que sólo hoy, tenemos hablado unos tres usos diferentes 707 00:32:47,510 --> 00:32:48,250 de signo. 708 00:32:48,250 --> 00:32:51,040 Tenemos dos símbolos de unión, que es lo Pulak acaba de describir. 709 00:32:51,040 --> 00:32:53,420 Tenemos un símbolo de unión, que es lo que describe Camille 710 00:32:53,420 --> 00:32:54,897 antes, que es uno de signo. 711 00:32:54,897 --> 00:32:56,685 Y eso es AND bit a bit. 712 00:32:56,685 --> 00:32:59,640 Y notar que tanto el y- condicional o, lo siento, 713 00:32:59,640 --> 00:33:04,180 la lógica AND y el bit a bit Y, los que tienen dos números, ¿verdad? 714 00:33:04,180 --> 00:33:07,354 Fue algo Ampersand algo signo, 715 00:33:07,354 --> 00:33:09,350 algo algo signo. 716 00:33:09,350 --> 00:33:13,862 Aquí, cuando sólo tenemos ampersand algo, eso eliminación de referencias. 717 00:33:13,862 --> 00:33:15,830 >> Pulak GOYAL: Sí, buena pregunta. 718 00:33:15,830 --> 00:33:16,677 Sí. 719 00:33:16,677 --> 00:33:21,150 >> AUDIENCIA: ¿Por qué en línea 5a y protagonizar un convertido N / A? 720 00:33:21,150 --> 00:33:25,520 ¿Por qué no sólo tipo de retener la mismos valores de la línea anterior? 721 00:33:25,520 --> 00:33:28,000 >> Pulak GOYAL: Porque hemos salimos de la función. 722 00:33:28,000 --> 00:33:30,894 Y así lo happens-- así que-- ahora estamos 723 00:33:30,894 --> 00:33:33,060 fuera del alcance de esa función, lo que sucede en realidad 724 00:33:33,060 --> 00:33:37,770 es decir los que se eliminan de la memoria. 725 00:33:37,770 --> 00:33:38,808 Sí. 726 00:33:38,808 --> 00:33:42,982 >> AUDIENCIA: Entre 3 o 4 estrellas es igual a un 5. 727 00:33:42,982 --> 00:33:43,690 Pulak GOYAL: Sí. 728 00:33:43,690 --> 00:33:45,575 AUDIENCIA: ¿Qué es lo que significan exactamente? 729 00:33:45,575 --> 00:33:46,950 Pulak GOYAL: ¿Qué significa eso? 730 00:33:46,950 --> 00:33:47,380 AUDIENCIA: Sí. 731 00:33:47,380 --> 00:33:49,088 Pulak GOYAL: Así que el pregunta era, ¿cuál es 732 00:33:49,088 --> 00:33:52,300 que-- ¿qué estás haciendo en línea cuando decimos, estrella es igual a 5? 733 00:33:52,300 --> 00:33:55,210 Así que recuerda la estrella del operador de eliminar la referencia. 734 00:33:55,210 --> 00:33:58,640 Así que cuando una, en este caso, es un puntero. 735 00:33:58,640 --> 00:34:00,030 Es un int estrellas. 736 00:34:00,030 --> 00:34:03,710 Así que cuando nos dereference una por usando la estrella, lo que estamos diciendo 737 00:34:03,710 --> 00:34:11,250 está, vaya a lo que está almacenado en el dirección, almacenada en A-- lo take-- por lo que una, 738 00:34:11,250 --> 00:34:13,280 en este momento, tiene algunos dirección almacenada en el mismo. 739 00:34:13,280 --> 00:34:19,920 Ir a donde esa dirección apunta a, y Ahora cambie sea lo que sea a cinco. 740 00:34:19,920 --> 00:34:20,420 Sí. 741 00:34:20,420 --> 00:34:23,390 >> AUDIENCIA: ¿Se puede decir en términos más simples? 742 00:34:23,390 --> 00:34:27,360 Cambie la dirección de una a 5. 743 00:34:27,360 --> 00:34:31,070 >> Pulak GOYAL: No somos cambiar la dirección de una a 5. 744 00:34:31,070 --> 00:34:36,340 A tiene alguna dirección en él, que es el dirección de la variable de interés. 745 00:34:36,340 --> 00:34:39,570 Y así, lo que estamos diciendo cuando es eliminar la referencia, 746 00:34:39,570 --> 00:34:42,630 ahora queremos change-- ahora estamos haciendo referencia 747 00:34:42,630 --> 00:34:45,135 interés directo de la variable. 748 00:34:45,135 --> 00:34:48,499 ¿Eso tiene sentido? 749 00:34:48,499 --> 00:34:52,280 >> ALTAVOZ 1: Otra forma de pensar de la misma se vaya-- por lo que una es una dirección. 750 00:34:52,280 --> 00:34:55,310 La estrella dice que vaya a abordar y buscar a su valor. 751 00:34:55,310 --> 00:34:58,000 Y ahora establecer su valor en 5. 752 00:34:58,000 --> 00:35:00,920 Por lo que dice, vaya a la dirección de x, la cual 753 00:35:00,920 --> 00:35:05,720 va a ser lo que está almacenado en una, y el cambio a 5. 754 00:35:05,720 --> 00:35:06,470 Pulak GOYAL: ¿Sí? 755 00:35:06,470 --> 00:35:10,817 AUDIENCIA: Entonces, la posición es donde el puntero se va, la dirección. 756 00:35:10,817 --> 00:35:14,270 Pero el valor se asigna un valor basado en la dirección. 757 00:35:14,270 --> 00:35:15,020 Pulak GOYAL: Sí. 758 00:35:15,020 --> 00:35:18,076 759 00:35:18,076 --> 00:35:19,367 ¿Alguna otra pregunta acerca de esto? 760 00:35:19,367 --> 00:35:22,774 761 00:35:22,774 --> 00:35:23,940 AUDIENCIA: Tengo una pregunta. 762 00:35:23,940 --> 00:35:25,664 Pulak GOYAL: Sí, lo siento. 763 00:35:25,664 --> 00:35:30,324 AUDIENCIA: Así que cuando usted lo almacén-- si usted está diciendo [inaudible] a. 764 00:35:30,324 --> 00:35:31,032 Pulak GOYAL: Sí. 765 00:35:31,032 --> 00:35:34,448 AUDIENCIA: ¿Tiene usted almacenar la x con una y comercial? 766 00:35:34,448 --> 00:35:37,376 Por qué no puedes simplemente decir x antes de que su int [inaudible]? 767 00:35:37,376 --> 00:35:40,562 768 00:35:40,562 --> 00:35:41,270 Pulak GOYAL: tan-- 769 00:35:41,270 --> 00:35:42,090 AUDIENCIA: [inaudible]. 770 00:35:42,090 --> 00:35:43,673 Pulak GOYAL: Así es su pregunta-- oh. 771 00:35:43,673 --> 00:35:47,160 772 00:35:47,160 --> 00:35:51,300 Así que la pregunta es, ¿por qué no nosotros-- a la to_five función, por qué no podemos nosotros 773 00:35:51,300 --> 00:35:52,590 sólo tiene que pasar una x, ¿verdad? 774 00:35:52,590 --> 00:35:53,570 >> AUDIENCIA: Correcto. 775 00:35:53,570 --> 00:35:59,570 >> Pulak GOYAL: OK, sí, por lo que este nuevo se remonta a nuestra discusión sobre los tipos. 776 00:35:59,570 --> 00:36:06,080 Así que la to_five función es ahora esperando un tipo de int estrellas. 777 00:36:06,080 --> 00:36:07,660 Entonces, ¿cuál es el tipo de x? 778 00:36:07,660 --> 00:36:09,800 X es un int. 779 00:36:09,800 --> 00:36:13,530 Pero lo que esta función espera es un int estrellas. 780 00:36:13,530 --> 00:36:16,910 Por lo tanto, una variable que espera tiene una dirección almacenada en el mismo. 781 00:36:16,910 --> 00:36:20,250 Así que esa es la forma en usted-- puso el signo, y así que es 782 00:36:20,250 --> 00:36:22,560 cómo pasamos en el dirección, que es ahora-- 783 00:36:22,560 --> 00:36:25,120 y que interpreta esa como un int estrellas, sí. 784 00:36:25,120 --> 00:36:26,700 Muy buena pregunta. 785 00:36:26,700 --> 00:36:29,300 ¿Alguna otra pregunta sobre esto? 786 00:36:29,300 --> 00:36:29,800 Vale, guay. 787 00:36:29,800 --> 00:36:32,870 788 00:36:32,870 --> 00:36:37,020 >> OK, así que ahora vamos a hablar sobre la aritmética de punteros. 789 00:36:37,020 --> 00:36:40,050 Así que aquí, sumar y restar i Ajusta el puntero 790 00:36:40,050 --> 00:36:43,950 por i veces el tamaño de el tipo de bytes de puntero. 791 00:36:43,950 --> 00:36:46,170 Así que echemos un vistazo a la forma en que se parece. 792 00:36:46,170 --> 00:36:49,640 Así que aquí, hemos declarado int x es igual a 5. 793 00:36:49,640 --> 00:36:56,120 Y ahora vamos a declarar un puntero y, y pasar en la dirección de x allí. 794 00:36:56,120 --> 00:36:58,910 Así que tenemos que. 795 00:36:58,910 --> 00:37:01,005 Así que x se almacena a 0x04. 796 00:37:01,005 --> 00:37:03,960 Así que ahora y es igual a eso. 797 00:37:03,960 --> 00:37:12,260 Y alguien puede decirme lo que piensan va a pasar cuando lo hacemos y además es igual a 1? 798 00:37:12,260 --> 00:37:19,100 799 00:37:19,100 --> 00:37:19,771 ¿Sí? 800 00:37:19,771 --> 00:37:24,010 >> AUDIENCIA: ¿Va a cambiar a 0 veces 0 8? 801 00:37:24,010 --> 00:37:25,342 >> Pulak GOYAL: Tamaño y type-- 802 00:37:25,342 --> 00:37:27,789 >> AUDIENCIA: Usted está en movimiento la dirección. 803 00:37:27,789 --> 00:37:29,080 Pulak GOYAL: Sí que era-- sí. 804 00:37:29,080 --> 00:37:31,130 Derecho tan--. 805 00:37:31,130 --> 00:37:33,110 Así que va a cambiar a 0x08. 806 00:37:33,110 --> 00:37:38,750 Y porque-- por lo que tendría que utilizar esta fórmula, 1 veces el tamaño del puntero 807 00:37:38,750 --> 00:37:42,354 y los punteros son de size-- 808 00:37:42,354 --> 00:37:44,050 >> [ESTUDIANTES MURMUR] 809 00:37:44,050 --> 00:37:45,190 >> Pulak GOYAL: Correcto. 810 00:37:45,190 --> 00:37:46,150 >> [ESTUDIANTES MURMUR] 811 00:37:46,150 --> 00:37:49,230 >> ALTAVOZ 1: Así que el tipo que el puntero a-- 812 00:37:49,230 --> 00:37:51,862 >> Pulak GOYAL: ¿Es, sí, sí, eso es 4 bytes. 813 00:37:51,862 --> 00:37:53,930 >> ALTAVOZ 1: Así enteros son 4 bytes. 814 00:37:53,930 --> 00:38:01,260 >> Pulak Goyal: Entonces si hubiéramos dejar A-- de decimos que declaramos, supongo, un char. 815 00:38:01,260 --> 00:38:06,830 ¿Cuál sería que-- lo digamos nosotros tener x Char iguales a una o algo así. 816 00:38:06,830 --> 00:38:14,400 Y tuvimos la dirección de que al 0x04, lo que haría y además es igual a 1 lo hacen ahora? 817 00:38:14,400 --> 00:38:14,960 Lo sentimos, qué? 818 00:38:14,960 --> 00:38:16,099 >> AUDIENCIA: 0x05. 819 00:38:16,099 --> 00:38:17,140 Pulak GOYAL: 0x05, derecha. 820 00:38:17,140 --> 00:38:18,520 ¿Todo el mundo ve que? 821 00:38:18,520 --> 00:38:20,212 OK, y ahora vamos a decir que es un flotador. 822 00:38:20,212 --> 00:38:20,962 ¿Qué pasaría? 823 00:38:20,962 --> 00:38:25,210 824 00:38:25,210 --> 00:38:26,130 ¿Nadie? 825 00:38:26,130 --> 00:38:28,066 Así carrozas son cuántos bytes? 826 00:38:28,066 --> 00:38:28,860 >> AUDIENCIA: 4 bytes. 827 00:38:28,860 --> 00:38:29,651 >> Pulak GOYAL: Correcto. 828 00:38:29,651 --> 00:38:32,661 Por lo que sería lo mismo que esto. 829 00:38:32,661 --> 00:38:33,160 Guay. 830 00:38:33,160 --> 00:38:36,230 831 00:38:36,230 --> 00:38:40,180 OK, y ahora vamos a hablar sobre punteros y matrices. 832 00:38:40,180 --> 00:38:44,210 Así que lo vio en el anteriores dos conjuntos p, 833 00:38:44,210 --> 00:38:48,570 donde podemos treat-- matrices así y punteros no son la misma cosa. 834 00:38:48,570 --> 00:38:51,170 Pero podemos tratar matrices como punteros. 835 00:38:51,170 --> 00:38:55,550 Así que aquí tenemos esta matriz aquí, que tiene tres ranuras. 836 00:38:55,550 --> 00:38:57,570 En el primero nos slot-- tener uno, dos, y tres. 837 00:38:57,570 --> 00:39:00,930 >> Así que si nosotros-- para que podamos asignar que al decir, tenemos la matriz, 838 00:39:00,930 --> 00:39:02,080 dereference eso. 839 00:39:02,080 --> 00:39:04,579 Y luego, cuando nos dereference que, lo que estamos haciendo en realidad 840 00:39:04,579 --> 00:39:05,910 es en referencia a la misma ranura. 841 00:39:05,910 --> 00:39:09,230 Así gama estrellas es igual a 1. 842 00:39:09,230 --> 00:39:11,020 Nos could- cómo podría escribimos que-- lo que es 843 00:39:11,020 --> 00:39:13,404 una forma alternativa podríamos escribir eso? 844 00:39:13,404 --> 00:39:14,840 >> AUDIENCIA: Arsenal 0 es igual a 1. 845 00:39:14,840 --> 00:39:17,100 >> Pulak GOYAL: Exactamente, qué todo el mundo ver eso? 846 00:39:17,100 --> 00:39:18,320 Así mismo aquí. 847 00:39:18,320 --> 00:39:24,060 Así que cuando tenemos variedad más 1, que hacer-- lo even-- 848 00:39:24,060 --> 00:39:28,890 recordar con la aritmética que estamos acabamos de hablar, cuando lo hacemos más 1 849 00:39:28,890 --> 00:39:32,120 o moverlo más de 4 bytes, a la derecha. 850 00:39:32,120 --> 00:39:33,170 ¿Todo el mundo ve que? 851 00:39:33,170 --> 00:39:35,753 Y ese lado, cuando nos dereference que, podemos establecer que a 2. 852 00:39:35,753 --> 00:39:37,710 Y así es como nos propusimos el siguiente bloque a 2. 853 00:39:37,710 --> 00:39:41,640 Y así, una forma alternativa de escribir que también habría soporte de matriz 854 00:39:41,640 --> 00:39:44,436 0 soporte es igual a 1. 855 00:39:44,436 --> 00:39:47,070 >> AUDIENCIA: ¿Necesita el paréntesis? 856 00:39:47,070 --> 00:39:50,840 >> Pulak GOYAL: Sí, porque eres eliminación de referencias a toda la cantidad 857 00:39:50,840 --> 00:39:53,460 gama más 1. 858 00:39:53,460 --> 00:39:56,829 OK, y lo mismo para la gama más 2. 859 00:39:56,829 --> 00:39:57,870 ¿Una pregunta sobre esto? 860 00:39:57,870 --> 00:39:58,369 Sí. 861 00:39:58,369 --> 00:40:01,340 AUDIENCIA: Entonces matriz es ajusta automáticamente a 0? 862 00:40:01,340 --> 00:40:03,054 >> Pulak GOYAL: Array es-- lo siento, ¿qué? 863 00:40:03,054 --> 00:40:03,962 >> AUDIENCIA: Array es 0. 864 00:40:03,962 --> 00:40:07,140 La dirección de la matriz es 0. 865 00:40:07,140 --> 00:40:10,200 >> Pulak GOYAL: Así que la pregunta era, es la dirección de la matriz acaba 0? 866 00:40:10,200 --> 00:40:11,950 Así que no, matriz tiene alguna dirección. 867 00:40:11,950 --> 00:40:14,930 Así que cuando nos dereference ella, Eso es-- para que puedas pensar sobre-- 868 00:40:14,930 --> 00:40:18,230 literalmente, como un puntero que apunta al comienzo de una matriz. 869 00:40:18,230 --> 00:40:19,390 Así que tiene alguna dirección. 870 00:40:19,390 --> 00:40:20,580 No sabemos lo que es. 871 00:40:20,580 --> 00:40:24,170 Pero cuando dereference, sabemos ese es el principio de la matriz. 872 00:40:24,170 --> 00:40:25,980 Y así, cuando nos movemos por 1, sólo estamos en movimiento 873 00:40:25,980 --> 00:40:29,090 con respecto a dónde estaba esa dirección. 874 00:40:29,090 --> 00:40:30,480 ¿Alguna otra pregunta? 875 00:40:30,480 --> 00:40:31,419 ¿Sí? 876 00:40:31,419 --> 00:40:35,559 >> AUDIENCIA: Entonces, si lo hace soporte de gama más 1-- 877 00:40:35,559 --> 00:40:37,350 Pulak GOYAL: Lo sentimos, Yo-- ¿podría hablar? 878 00:40:37,350 --> 00:40:41,174 AUDIENCIA: Sí, si lo hace soporte de matriz [inaudible]. 879 00:40:41,174 --> 00:40:45,227 Así que si usted pone el pointer-- 880 00:40:45,227 --> 00:40:46,810 Pulak GOYAL: Lo siento, no te oigo. 881 00:40:46,810 --> 00:40:48,100 ¿Se puede decir que una vez más? 882 00:40:48,100 --> 00:40:49,470 >> AUDIENCIA: tú estás bien. 883 00:40:49,470 --> 00:40:50,870 >> Pulak GOYAL: OK, lo siento. 884 00:40:50,870 --> 00:40:51,420 Vale, guay. 885 00:40:51,420 --> 00:40:52,200 Any-- sí. 886 00:40:52,200 --> 00:40:55,710 Así que cuando usted va en el soporte matriz 3-- 887 00:40:55,710 --> 00:40:56,570 >> Pulak GOYAL: Sí. 888 00:40:56,570 --> 00:40:59,832 >> AUDIENCIA: --isn't allí-- que no sea ​​cuatro lugares como 0, 1, 2, y 3? 889 00:40:59,832 --> 00:41:02,630 ¿Por qué no int array 2? 890 00:41:02,630 --> 00:41:07,850 >> Pulak GOYAL: No, por lo que sólo la convención de C es-- cuando declaramos la matriz, 891 00:41:07,850 --> 00:41:12,010 nosotros-- el número que ponemos allí es el número de ranuras que queremos. 892 00:41:12,010 --> 00:41:16,970 Sin embargo, los índices de la matriz son realidad gama 0, array 1 y serie 2. 893 00:41:16,970 --> 00:41:19,780 Así que es sólo la convención de cómo declarar arrays. 894 00:41:19,780 --> 00:41:20,880 Sí, alguna otra pregunta? 895 00:41:20,880 --> 00:41:21,380 Sí. 896 00:41:21,380 --> 00:41:23,750 AUDIENCIA: Así que estamos todavía hablando de punteros, ¿no? 897 00:41:23,750 --> 00:41:24,500 Pulak GOYAL: Sí. 898 00:41:24,500 --> 00:41:28,600 AUDIENCIA: ¿Podría usted todavía lo hacen estrella de gama 0 es igual a 1? 899 00:41:28,600 --> 00:41:32,870 Pulak GOYAL: No, no, así que-- OK, así que la pregunta era posible 900 00:41:32,870 --> 00:41:37,370 que acaba de hacer el soporte matriz estrellas cero, y luego dicen que igual a 1. 901 00:41:37,370 --> 00:41:40,000 Así que no, lo que estamos diciendo aquí es que podemos think-- 902 00:41:40,000 --> 00:41:42,600 podemos tratar matrices como punteros. 903 00:41:42,600 --> 00:41:44,970 Así que lo que estamos tener-- diciendo es que tenemos dos maneras 904 00:41:44,970 --> 00:41:47,370 ahora hacer referencia a la misma manzana. 905 00:41:47,370 --> 00:41:52,270 Así doing-- si tiene matriz cero, del tipo de que ahora es un int. 906 00:41:52,270 --> 00:41:55,264 Y si se toma la estrella que, se obtiene una cosa válida. 907 00:41:55,264 --> 00:41:57,680 Así que lo que estamos diciendo aquí, es hay dos formas alternativas 908 00:41:57,680 --> 00:41:59,100 para referirse a la misma manzana. 909 00:41:59,100 --> 00:42:01,860 Usted puede hacer array soporte de 0 es igual a 1. 910 00:42:01,860 --> 00:42:06,420 O usted puede hacer dereference matriz, y tienen que igual a 0. 911 00:42:06,420 --> 00:42:08,621 Por lo que sólo dos formas de haciendo lo mismo. 912 00:42:08,621 --> 00:42:09,120 Sí. 913 00:42:09,120 --> 00:42:15,270 >> AUDIENCIA: ¿Por qué no lo es tamaño de int 1 para agregar a-- 914 00:42:15,270 --> 00:42:17,650 >> Pulak GOYAL: Tamaño de int 1. 915 00:42:17,650 --> 00:42:19,900 >> AUDIENCIA: Porque eso es mover uno fuera. 916 00:42:19,900 --> 00:42:23,620 >> Pulak GOYAL: Porque eso es sólo la forma en C funciona. 917 00:42:23,620 --> 00:42:26,460 Es sólo la forma del puntero aritmética se define. 918 00:42:26,460 --> 00:42:27,854 Tomará el puntero. 919 00:42:27,854 --> 00:42:30,020 Y entonces lo que se agrega a él, que va a multiplicar que 920 00:42:30,020 --> 00:42:34,770 por el tamaño de cualquier el almacén apuntador es, sí. 921 00:42:34,770 --> 00:42:35,480 Sí. 922 00:42:35,480 --> 00:42:39,595 >> AUDIENCIA: Entonces usted dice que podemos tratar punteros y matrices de la misma, 923 00:42:39,595 --> 00:42:40,720 pero que son diferentes. 924 00:42:40,720 --> 00:42:41,950 Entonces, ¿qué los hace diferentes? 925 00:42:41,950 --> 00:42:45,070 Lo que no podemos ver con uno pero no el otro? 926 00:42:45,070 --> 00:42:52,390 >> Pulak GOYAL: Para el propósito de esta clase, creo que lo es-- hacer usted-- 927 00:42:52,390 --> 00:42:56,270 >> ALTAVOZ 1: Entonces, nosotros-- OK, así que, por ejemplo, si se asigna memoria 928 00:42:56,270 --> 00:42:59,680 y usted tiene un puntero a un número entero, por ejemplo. 929 00:42:59,680 --> 00:43:01,890 Si se trató de comenzar haciendo aritmética de punteros 930 00:43:01,890 --> 00:43:05,890 e ir más allá de la cantidad de memoria que le asignará, te encuentras con errores. 931 00:43:05,890 --> 00:43:08,250 Sabemos con matrices, hemos digo de antemano, OK, 932 00:43:08,250 --> 00:43:11,400 querer allocate-- esta esencialmente dice, quiero asignar 933 00:43:11,400 --> 00:43:13,490 suficiente espacio para tres enteros. 934 00:43:13,490 --> 00:43:17,820 Y por lo que ahora podemos tratar la memoria como si tenemos esas tres enteros. 935 00:43:17,820 --> 00:43:19,460 ¿Tiene ese tipo de sentido? 936 00:43:19,460 --> 00:43:22,042 >> Pulak GOYAL: Sí. 937 00:43:22,042 --> 00:43:22,542 Sí. 938 00:43:22,542 --> 00:43:24,778 >> AUDIENCIA: Entonces una estrella array, es que la asignación de 1 939 00:43:24,778 --> 00:43:26,657 con el índice 0 de la matriz? 940 00:43:26,657 --> 00:43:27,365 Pulak GOYAL: Sí. 941 00:43:27,365 --> 00:43:31,160 942 00:43:31,160 --> 00:43:34,439 >> AUDIENCIA: Entonces, ¿qué es después de la dos líneas siguientes en términos de el-- I 943 00:43:34,439 --> 00:43:36,980 entiende que usted está tratando utilizar la aritmética de punteros aquí, 944 00:43:36,980 --> 00:43:39,355 pero de nuevo, no lo entiendo lo puntero aritmética es. 945 00:43:39,355 --> 00:43:43,869 Así que la serie más 1, eres diciendo que eres ahora 946 00:43:43,869 --> 00:43:47,540 va a querer hablar el primer índice en la matriz. 947 00:43:47,540 --> 00:43:50,050 >> Pulak GOYAL: Derecho, por lo que el razón por la que funciona es la matriz, 948 00:43:50,050 --> 00:43:52,970 aquí, podemos considerar como un int estrellas. 949 00:43:52,970 --> 00:43:56,110 Y así, cuando nosotros puntero aritmética en él, recordar la fórmula en la que 950 00:43:56,110 --> 00:43:59,020 tomamos el-- Supongo que lo la dirección actual es, 951 00:43:59,020 --> 00:44:02,100 y luego, cuando añadimos 1 a la misma, en realidad 952 00:44:02,100 --> 00:44:06,620 multiplicar 1 por el tamaño de lo que estamos manipulando. 953 00:44:06,620 --> 00:44:09,090 Así pues, en este caso, el tamaño de un int. 954 00:44:09,090 --> 00:44:11,634 Y luego nos movemos remitir por tanto. 955 00:44:11,634 --> 00:44:14,419 >> ALTAVOZ 1: Así que pretender usted tiene b gama estrellas. 956 00:44:14,419 --> 00:44:15,335 Pulak GOYAL: OK, sí. 957 00:44:15,335 --> 00:44:16,005 ALTAVOZ 1: Con la mano. 958 00:44:16,005 --> 00:44:16,505 Ven aqui. 959 00:44:16,505 --> 00:44:18,350 Pulak GOYAL: O puedo solo-- sí. 960 00:44:18,350 --> 00:44:23,660 OK Así aquí--, por lo que en la matriz comenzando, es justo aquí. 961 00:44:23,660 --> 00:44:29,155 Así que cuando nos dereference matriz, estábamos simplemente refiriéndose al primer bloque aquí. 962 00:44:29,155 --> 00:44:36,620 Pero ahora cuando hago gama más 1, que es-- esa flecha que hoy aquí. 963 00:44:36,620 --> 00:44:38,250 ¿Eso tiene sentido? 964 00:44:38,250 --> 00:44:46,690 Claro, porque este bloque es de int tamaño, que es de 4 bytes. 965 00:44:46,690 --> 00:44:53,540 Y así, lo que estamos haciendo es que estamos que se mueve y puntero por 4 bytes más. 966 00:44:53,540 --> 00:44:56,080 Cada vez que hacemos la aritmética en ella, lo hará siempre 967 00:44:56,080 --> 00:44:59,730 moverlo en incrementos de 4 bytes. 968 00:44:59,730 --> 00:45:01,902 Porque esto es como un int estrellas. 969 00:45:01,902 --> 00:45:04,970 Tiene sentido? 970 00:45:04,970 --> 00:45:05,470 OKAY. 971 00:45:05,470 --> 00:45:07,770 >> AUDIENCIA: Así las cosas en la matriz Había 5 bytes, nos movemos 5 bytes-- 972 00:45:07,770 --> 00:45:10,853 >> Pulak GOYAL: Derecho, por lo que si teníamos un estrellas char, nos gustaría movernos por solamente 1 byte. 973 00:45:10,853 --> 00:45:13,670 Así que en el caso de las estrellas del carbón de leña, sólo sería moverlo más de 1. 974 00:45:13,670 --> 00:45:15,420 AUDIENCIA: Para obtener el A continuación, tiene una estrella. 975 00:45:15,420 --> 00:45:18,099 Pulak GOYAL: Sí, sí, hace eso tiene sentido? 976 00:45:18,099 --> 00:45:19,890 ALTAVOZ 1: Podemos chatear sobre ello más tarde. 977 00:45:19,890 --> 00:45:21,530 Pulak GOYAL: Sí, sí, seguro. 978 00:45:21,530 --> 00:45:23,214 Vale, guay. 979 00:45:23,214 --> 00:45:24,630 Vamos a pasar a la siguiente sección. 980 00:45:24,630 --> 00:45:27,182 981 00:45:27,182 --> 00:45:28,140 ALTAVOZ 1: Oh, bien fría. 982 00:45:28,140 --> 00:45:29,205 Si ese soy yo. 983 00:45:29,205 --> 00:45:30,330 Muy bien, impresionante. 984 00:45:30,330 --> 00:45:35,064 OK, fresco, por lo que ahora estamos en un poco más información general acerca de la memoria. 985 00:45:35,064 --> 00:45:37,730 Asimismo, aprecio el hecho de que iban bastante rápido. 986 00:45:37,730 --> 00:45:40,230 Es una gran cantidad de material para obtener a través de una hora y media. 987 00:45:40,230 --> 00:45:42,880 Pero si hay temas que querer ir más en profundidad sobre, 988 00:45:42,880 --> 00:45:44,630 vamos a tener horario de oficina esta semana 989 00:45:44,630 --> 00:45:46,340 donde se puede charlar con nosotros uno a uno. 990 00:45:46,340 --> 00:45:49,240 O usted podría llegar a Terminamos y vamos a charlar sobre las cosas. 991 00:45:49,240 --> 00:45:52,130 Y como siempre, sentir libre de hacer preguntas. 992 00:45:52,130 --> 00:45:52,695 Impresionante. 993 00:45:52,695 --> 00:45:55,820 Así que aquí está nuestra imagen de memoria que que hemos visto en la conferencia de mil millones de veces. 994 00:45:55,820 --> 00:45:58,610 Y sabemos que esta pila crece desde el fondo 995 00:45:58,610 --> 00:46:00,214 y el montón crece hacia abajo. 996 00:46:00,214 --> 00:46:03,380 Y lo que es la diferencia entre las cosas que guardemos en el montón y las cosas 997 00:46:03,380 --> 00:46:05,981 que guardemos en la pila? 998 00:46:05,981 --> 00:46:07,397 Alguien tirar algo por ahí. 999 00:46:07,397 --> 00:46:10,806 1000 00:46:10,806 --> 00:46:11,780 Sí. 1001 00:46:11,780 --> 00:46:14,215 >> AUDIENCIA: ¿Es la pila para las cosas que son sólo 1002 00:46:14,215 --> 00:46:18,095 las variables no permanentes que sólo estamos declarando el uso de ciertas funciones? 1003 00:46:18,095 --> 00:46:19,220 ALTAVOZ 1: Hermoso, sí. 1004 00:46:19,220 --> 00:46:23,007 Así que cada vez que, vamos a decir que estamos en una función, 1005 00:46:23,007 --> 00:46:24,590 y sólo tenemos algunas variables locales. 1006 00:46:24,590 --> 00:46:26,214 Quienes van a terminar en la pila. 1007 00:46:26,214 --> 00:46:30,020 Si, en cambio, que llamamos malloc y en realidad asignar memoria, 1008 00:46:30,020 --> 00:46:32,290 que siempre viene del montón. 1009 00:46:32,290 --> 00:46:35,100 Así que, sí bien? 1010 00:46:35,100 --> 00:46:38,672 >> Y así, recuerde que cualquier memoria que asigne mediante malloc, 1011 00:46:38,672 --> 00:46:40,130 eso va a terminar en el montón. 1012 00:46:40,130 --> 00:46:42,019 Y si usted se olvida de es libre, el equipo de 1013 00:46:42,019 --> 00:46:43,810 no va a saber que que haya terminado con él. 1014 00:46:43,810 --> 00:46:45,560 Así que sólo va a pasar el rato allí en la memoria. 1015 00:46:45,560 --> 00:46:47,412 Y usted es esencialmente fugas de esa memoria. 1016 00:46:47,412 --> 00:46:48,120 Estás perdiendo. 1017 00:46:48,120 --> 00:46:51,840 Porque nunca se dijo a la computadora, bueno he terminado de usarlo, no dude en utilizar, 1018 00:46:51,840 --> 00:46:53,632 poner otras cosas allí. 1019 00:46:53,632 --> 00:46:54,470 Guay. 1020 00:46:54,470 --> 00:46:55,928 Cualquier pregunta allí? 1021 00:46:55,928 --> 00:46:56,428 Sí. 1022 00:46:56,428 --> 00:46:58,808 >> AUDIENCIA: ¿Qué clase de la memoria es la pila? 1023 00:46:58,808 --> 00:46:59,974 Alimentación para no dinámico, delegado? 1024 00:46:59,974 --> 00:47:01,200 ¿Como lo llamarias? 1025 00:47:01,200 --> 00:47:03,870 >> ALTAVOZ 1: Claro, por lo que podría pensar en él como variables locales. 1026 00:47:03,870 --> 00:47:10,137 Llamadas a funciones reales van a apilar. 1027 00:47:10,137 --> 00:47:10,720 ¿Algo más? 1028 00:47:10,720 --> 00:47:11,220 ¿Sí? 1029 00:47:11,220 --> 00:47:14,627 AUDIENCIA: ¿Cómo te libre la memoria que añade a el-- 1030 00:47:14,627 --> 00:47:17,710 ALTAVOZ 1: Claro, por lo que al asignar memoria en el montón, te llama malloc. 1031 00:47:17,710 --> 00:47:20,543 Y es así, que le da la espalda a puntero a alguna dirección en la memoria. 1032 00:47:20,543 --> 00:47:22,630 Así que dices que llamó ese puntero, ¿verdad? 1033 00:47:22,630 --> 00:47:24,970 Entonces, usted acaba de decir puntero gratuita. 1034 00:47:24,970 --> 00:47:27,351 Y eso libera la memoria. 1035 00:47:27,351 --> 00:47:27,850 Guay. 1036 00:47:27,850 --> 00:47:28,660 ¿Otras preguntas? 1037 00:47:28,660 --> 00:47:28,880 Sí. 1038 00:47:28,880 --> 00:47:30,838 >> AUDIENCIA: ¿Qué asignada dinámicamente significa? 1039 00:47:30,838 --> 00:47:32,345 1040 00:47:32,345 --> 00:47:35,381 >> ALTAVOZ 1: dinámicamente asignada significa, en el curso de su programa. 1041 00:47:35,381 --> 00:47:37,630 Así que cuando se llama a malloc en el centro de su programa, 1042 00:47:37,630 --> 00:47:40,510 al comienzo del programa, no hay memoria asignada. 1043 00:47:40,510 --> 00:47:42,600 Y como el equipo paso a través de ese código, 1044 00:47:42,600 --> 00:47:44,280 que va a asignar la memoria. 1045 00:47:44,280 --> 00:47:46,507 Así que eso es lo que entendemos por dinámicamente. 1046 00:47:46,507 --> 00:47:47,090 Buena pregunta. 1047 00:47:47,090 --> 00:47:48,309 ¿Sí? 1048 00:47:48,309 --> 00:47:50,809 AUDIENCIA: Al definir un matriz con los corchetes, 1049 00:47:50,809 --> 00:47:54,154 hace que todavía [inaudible]? 1050 00:47:54,154 --> 00:47:55,570 ALTAVOZ 1: Esa es una buena pregunta. 1051 00:47:55,570 --> 00:48:00,320 Creo que cuando se asigna una matriz, lo que realmente pone en la pila. 1052 00:48:00,320 --> 00:48:03,008 No soy positivo acerca de que, por lo que no me citan. 1053 00:48:03,008 --> 00:48:04,430 >> ALTAVOZ 2: Creo que sí it-- se pone en la pila. 1054 00:48:04,430 --> 00:48:05,763 >> ALTAVOZ 1: pone en la pila. 1055 00:48:05,763 --> 00:48:07,044 OK, fresco, confirmó. 1056 00:48:07,044 --> 00:48:07,710 ¿Otras preguntas? 1057 00:48:07,710 --> 00:48:08,030 ¿Sí? 1058 00:48:08,030 --> 00:48:10,946 >> AUDIENCIA: Al delegar malloc, ¿no el equipo automáticamente 1059 00:48:10,946 --> 00:48:12,910 asignar memoria para las variables? 1060 00:48:12,910 --> 00:48:14,660 ALTAVOZ 1: Sí, por sus variables locales, 1061 00:48:14,660 --> 00:48:16,724 pone automáticamente memoria en la pila. 1062 00:48:16,724 --> 00:48:18,640 AUDIENCIA: ¿Cuál es la punto de usar malloc? 1063 00:48:18,640 --> 00:48:19,840 ALTAVOZ 1: ¿Cuál es la punto de usar malloc? 1064 00:48:19,840 --> 00:48:22,850 Así vimos un montón de ejemplos, como, por ejemplo, utilizando intercambio, 1065 00:48:22,850 --> 00:48:25,690 donde queremos que el alcance de la variable a ser algo 1066 00:48:25,690 --> 00:48:27,940 más allá de su llamada a la función. 1067 00:48:27,940 --> 00:48:29,875 Y queremos algo que podemos pasar alrededor 1068 00:48:29,875 --> 00:48:31,750 y que podemos acceder desde diferentes lugares. 1069 00:48:31,750 --> 00:48:33,791 Ahí es donde nos gustaría poner la memoria en el montón. 1070 00:48:33,791 --> 00:48:37,835 Para que todos estos diferentes funciones pueden acceder a él. 1071 00:48:37,835 --> 00:48:40,510 >> AUDIENCIA: ¿Puede usted acaba de explicar eso? 1072 00:48:40,510 --> 00:48:44,770 >> ALTAVOZ 1: Así que una opción es-- por lo que el pregunta era, ¿podemos allocate-- 1073 00:48:44,770 --> 00:48:47,660 lo siento, podemos declarar un variable global, esencialmente. 1074 00:48:47,660 --> 00:48:48,560 Esa es una opción. 1075 00:48:48,560 --> 00:48:50,893 Pero con una gran cantidad de esos, aquellos tienden a ser realmente complicado. 1076 00:48:50,893 --> 00:48:52,847 Y por lo general pensamos de que a medida que un mal diseño. 1077 00:48:52,847 --> 00:48:53,821 Sí. 1078 00:48:53,821 --> 00:48:56,580 Fresco, alguna otra pregunta? 1079 00:48:56,580 --> 00:48:57,140 Impresionante. 1080 00:48:57,140 --> 00:48:58,789 OK, de seguir adelante. 1081 00:48:58,789 --> 00:49:00,580 Así que esto es en realidad cómo asignar memoria. 1082 00:49:00,580 --> 00:49:02,670 Hemos hablado de esto un poco. 1083 00:49:02,670 --> 00:49:04,240 Utilizamos esta función llamada malloc. 1084 00:49:04,240 --> 00:49:07,850 Y tú dices que el número de bytes en la memoria, por lo que la cantidad de bytes en el montón, 1085 00:49:07,850 --> 00:49:08,610 quieres. 1086 00:49:08,610 --> 00:49:13,120 Y que va a devolver la dirección, por lo que un puntero a, una pieza de memoria 1087 00:49:13,120 --> 00:49:14,500 que está asignado para usted. 1088 00:49:14,500 --> 00:49:17,080 Así que el tipo va a ser nula estrellas. 1089 00:49:17,080 --> 00:49:21,310 Va a ser un puntero a lo que usted decide poner ahí. 1090 00:49:21,310 --> 00:49:23,530 Cada vez que se llama a malloc, ya dijimos 1091 00:49:23,530 --> 00:49:25,640 tienes que liberarlo para que no tienen pérdidas de memoria. 1092 00:49:25,640 --> 00:49:27,170 >> ¿Qué es la otra cosa que a pesar de todo 1093 00:49:27,170 --> 00:49:29,185 tener que hacer todos los vez que llame malloc? 1094 00:49:29,185 --> 00:49:31,210 1095 00:49:31,210 --> 00:49:32,210 OK, usted tiene que liberarlo. 1096 00:49:32,210 --> 00:49:34,010 ¿Cuál es la otra cosa? 1097 00:49:34,010 --> 00:49:35,890 Compruebe nulo, hermoso. 1098 00:49:35,890 --> 00:49:38,850 Así que, sí, es justo allá arriba en el tablero. 1099 00:49:38,850 --> 00:49:42,120 Si desea tratar de asignar la memoria y no tiene memoria disponible, 1100 00:49:42,120 --> 00:49:44,940 el equipo se va a decir, No tengo nada que darte. 1101 00:49:44,940 --> 00:49:47,650 Y le devuelve nulo. 1102 00:49:47,650 --> 00:49:48,400 Preguntas sobre eso? 1103 00:49:48,400 --> 00:49:49,290 Sí. 1104 00:49:49,290 --> 00:49:52,995 >> AUDIENCIA: ¿Por qué cada vez que desee declarar un puntero con un tipo específico 1105 00:49:52,995 --> 00:49:56,329 cuando vacío estrella puede manejar todos los tipos de puntero de todos modos? 1106 00:49:56,329 --> 00:49:57,370 ALTAVOZ 1: Buena pregunta. 1107 00:49:57,370 --> 00:50:00,590 ¿Por qué deberíamos decir int estrellas en lugar de anular la estrella 1108 00:50:00,590 --> 00:50:03,740 cuando vacío estrella puede manejar todo? 1109 00:50:03,740 --> 00:50:06,390 Así que no queremos jamás convertir explícitamente punteros. 1110 00:50:06,390 --> 00:50:07,940 Es sólo una mala práctica. 1111 00:50:07,940 --> 00:50:11,850 Pero vamos a hablar de int estrellas al igual que un entendimiento de, 1112 00:50:11,850 --> 00:50:14,195 este es un puntero a un entero. 1113 00:50:14,195 --> 00:50:14,850 >> AUDIENCIA: OK. 1114 00:50:14,850 --> 00:50:17,558 >> ALTAVOZ 1: Sí, y permite manipular los valores en ella 1115 00:50:17,558 --> 00:50:18,667 como enteros. 1116 00:50:18,667 --> 00:50:20,008 >> AUDIENCIA: ¡Oh, OK. 1117 00:50:20,008 --> 00:50:22,250 Y sin efecto estrella no dejaría que se hace eso? 1118 00:50:22,250 --> 00:50:25,070 >> ALTAVOZ 1: Depende de la contexto Sí, así que no te preocupes 1119 00:50:25,070 --> 00:50:28,460 no te preocupes demasiado sobre el tipo allí. 1120 00:50:28,460 --> 00:50:32,620 Sólo sé que, en general, malloc devuelve un puntero a algo. 1121 00:50:32,620 --> 00:50:33,520 Buena pregunta. 1122 00:50:33,520 --> 00:50:37,260 >> AUDIENCIA: ¿Por qué se multiplica se Tiempos 10? [INAUDIBLE]. 1123 00:50:37,260 --> 00:50:40,150 >> ALTAVOZ 1: Claro, así que era sólo haciendo ejemplo al azar aquí donde 1124 00:50:40,150 --> 00:50:42,840 Yo quería asignar suficiente espacio para almacenar 10 enteros. 1125 00:50:42,840 --> 00:50:44,320 Sólo una elección al azar. 1126 00:50:44,320 --> 00:50:45,250 Sí. 1127 00:50:45,250 --> 00:50:45,440 Sí, ¿qué pasa? 1128 00:50:45,440 --> 00:50:47,440 >> AUDIENCIA: Lo que haces significa comprobando nula? 1129 00:50:47,440 --> 00:50:51,351 ¿Quieres comprobar la puntero de nulo o la malloc? 1130 00:50:51,351 --> 00:50:52,350 ALTAVOZ 1: Sí, exactamente. 1131 00:50:52,350 --> 00:50:54,599 Así que la pregunta era: ¿qué Qué entendemos por cheque por nula? 1132 00:50:54,599 --> 00:50:57,880 Queremos a-- cualquier momento que llamamos malloc y estamos volvimos un puntero, 1133 00:50:57,880 --> 00:51:01,110 queremos decir, es puntero igual a null? 1134 00:51:01,110 --> 00:51:02,610 Así que, literalmente, PTR. 1135 00:51:02,610 --> 00:51:05,620 Es el PTR igual a null. 1136 00:51:05,620 --> 00:51:06,958 Sí. 1137 00:51:06,958 --> 00:51:08,832 AUDIENCIA: Entonces, yo era un poco de preguntarse, si 1138 00:51:08,832 --> 00:51:14,013 inicializar el puntero a malloc, hace que apunte al comienzo de malloc? 1139 00:51:14,013 --> 00:51:15,097 Porque si se trata de un array-- 1140 00:51:15,097 --> 00:51:16,554 ALTAVOZ 1: Eso es una gran pregunta. 1141 00:51:16,554 --> 00:51:19,200 Sí, si se llama a malloc, el puntero que it-- digamos, 1142 00:51:19,200 --> 00:51:21,700 así que aquí estamos destinamos 10 bytes de memoria. 1143 00:51:21,700 --> 00:51:23,830 Así que, lo siento, lo suficiente para 10 números enteros, 1144 00:51:23,830 --> 00:51:28,220 vamos a obtener la dirección de que primero pieza de la memoria. 1145 00:51:28,220 --> 00:51:29,880 Buena pregunta. 1146 00:51:29,880 --> 00:51:30,481 Sí. 1147 00:51:30,481 --> 00:51:34,810 >> AUDIENCIA: Con la asignación 10 enteros generalizadas, 1148 00:51:34,810 --> 00:51:38,177 podría utilizar realmente que puntero como como-- casi 1149 00:51:38,177 --> 00:51:39,372 como una matriz de enteros? 1150 00:51:39,372 --> 00:51:41,830 ALTAVOZ 1: Sí, tú también puedes utilizarlo como una matriz de enteros? 1151 00:51:41,830 --> 00:51:45,970 Sí, exactamente, esto es lo que acaba de Pulak mostró que en-- hace un par de diapositivas, 1152 00:51:45,970 --> 00:51:48,680 donde se dice, está bien, esto es realmente sólo un poco de-- nos 1153 00:51:48,680 --> 00:51:50,805 puede pensar en él como un arreglo de 10 enteros. 1154 00:51:50,805 --> 00:51:52,222 Es sólo pasa a ser en el montón. 1155 00:51:52,222 --> 00:51:54,971 AUDIENCIA: Pero no se podía acceder con la notación de corchete? 1156 00:51:54,971 --> 00:51:58,220 ALTAVOZ 1: Usted podría acceder con la notación de corchete, sí. 1157 00:51:58,220 --> 00:52:00,221 Usted puede tratar de la misma. 1158 00:52:00,221 --> 00:52:00,720 Sí. 1159 00:52:00,720 --> 00:52:02,420 >> AUDIENCIA: ¿Por qué Puntero jamás ser nulo? 1160 00:52:02,420 --> 00:52:04,170 >> ALTAVOZ 1: ¿Por qué Puntero jamás ser nulo? 1161 00:52:04,170 --> 00:52:06,570 Si va a utilizar todo lo de la memoria en el montón. 1162 00:52:06,570 --> 00:52:09,141 Si el programa se está comiendo, comiendo, comiendo la memoria, 1163 00:52:09,141 --> 00:52:11,890 y no hay nada izquierda, a continuación, malloc va a decir-- si usted dice, 1164 00:52:11,890 --> 00:52:14,760 Quiero 100 bytes más, va decir, no tengo 100 bytes. 1165 00:52:14,760 --> 00:52:15,740 Aquí es nulo. 1166 00:52:15,740 --> 00:52:18,780 Eso significa, fallé. 1167 00:52:18,780 --> 00:52:20,516 Sí. 1168 00:52:20,516 --> 00:52:22,830 >> AUDIENCIA: En ese caso, nula es nada, ¿verdad? 1169 00:52:22,830 --> 00:52:24,110 >> ALTAVOZ 1: Sí, en ese caso, nula es nada. 1170 00:52:24,110 --> 00:52:24,943 Usted no tiene ninguna dirección. 1171 00:52:24,943 --> 00:52:28,065 No hay memoria. 1172 00:52:28,065 --> 00:52:31,500 Muy bien, de seguir adelante. 1173 00:52:31,500 --> 00:52:34,976 OK, vamos a hablar muy rápido acerca de desbordamiento de búfer. 1174 00:52:34,976 --> 00:52:38,210 ¿Cuándo podríamos encontrar buffer overflow? 1175 00:52:38,210 --> 00:52:42,980 Vamos a decir que tenemos que A-- destinar una parte de la memoria, 1176 00:52:42,980 --> 00:52:44,720 y vamos a escribir la cadena en. 1177 00:52:44,720 --> 00:52:47,240 Y vamos a decir: OK, voy a asignar 1178 00:52:47,240 --> 00:52:49,320 suficiente espacio para seis caracteres. 1179 00:52:49,320 --> 00:52:51,680 Y yo voy a pedir el usuario alguna información. 1180 00:52:51,680 --> 00:52:54,470 Y las entradas del usuario, por ejemplo, hola. 1181 00:52:54,470 --> 00:52:56,430 Y eso encaja perfectamente bien porque tenemos 1182 00:52:56,430 --> 00:53:00,790 espacio para todos los personajes del hola, y el carácter de terminación nula. 1183 00:53:00,790 --> 00:53:02,840 Un montón de espacio, no hay problema. 1184 00:53:02,840 --> 00:53:08,010 >> Pero lo que si le damos la oportunidad para un usuario mal utilizar nuestro programa, 1185 00:53:08,010 --> 00:53:13,152 y escribir no de seis caracteres, o no cinco personajes, pero un millón. 1186 00:53:13,152 --> 00:53:15,860 Siguen escribiendo, y escribiendo, y escribir, lo que va a pasar? 1187 00:53:15,860 --> 00:53:18,220 Bueno sólo damos la enough-- ordenador o lo siento, 1188 00:53:18,220 --> 00:53:23,350 sólo nos dimos esta cadena espacio suficiente para 5 caracteres. 1189 00:53:23,350 --> 00:53:28,300 Por lo tanto, vamos a obtener algo como este, donde la persona malvada que es 1190 00:53:28,300 --> 00:53:31,750 escribir en entrada puede sobrescribir el tamaño de la memoria intermedia, 1191 00:53:31,750 --> 00:53:35,922 y puede ir realmente más allá de la cantidad que está asignado originalmente. 1192 00:53:35,922 --> 00:53:38,380 Y entonces lo que puede hacer, la Lo realmente malo que puede hacer, 1193 00:53:38,380 --> 00:53:40,260 es sobrescribir la dirección de retorno. 1194 00:53:40,260 --> 00:53:42,010 Lo que básicamente significa usted puede tomar la clase de 1195 00:53:42,010 --> 00:53:45,110 control del comportamiento del programa. 1196 00:53:45,110 --> 00:53:47,880 Así que en un nivel muy alto desbordamiento de búfer es cuando 1197 00:53:47,880 --> 00:53:49,960 asigna cierta cantidad de memoria. 1198 00:53:49,960 --> 00:53:53,060 Y luego usted-- esto porque eres teniendo la entrada del usuario o algo 1199 00:53:53,060 --> 00:53:57,190 como que-- usted se pasa de los límites de lo que ha asignado originalmente 1200 00:53:57,190 --> 00:53:59,955 y empezar a echar a perder su programa. 1201 00:53:59,955 --> 00:54:00,455 ¿Sí? 1202 00:54:00,455 --> 00:54:03,220 >> AUDIENCIA: ¿Por qué no lo haría que acaba devolver un fallo de segmentación? 1203 00:54:03,220 --> 00:54:05,594 >> ALTAVOZ 1: ¿Por qué no lo haría que devolver un fallo de segmentación? 1204 00:54:05,594 --> 00:54:06,570 Podria. 1205 00:54:06,570 --> 00:54:10,030 A veces, el compilador o durante uno de su tiempo de ejecución 1206 00:54:10,030 --> 00:54:11,430 es en realidad va a comprobar que. 1207 00:54:11,430 --> 00:54:13,890 Si suceden ciertas cosas, y esto es una especie de nivel inferior, 1208 00:54:13,890 --> 00:54:15,610 entonces usted necesita saber. 1209 00:54:15,610 --> 00:54:18,820 Pero si usted no diseña estos sistemas correctamente, 1210 00:54:18,820 --> 00:54:21,170 entonces usted tiene la oportunidad de no contagiarse y justo 1211 00:54:21,170 --> 00:54:24,844 permitiendo que el equipo take-- la el mal persona para controlar el equipo. 1212 00:54:24,844 --> 00:54:25,344 Sí. 1213 00:54:25,344 --> 00:54:26,260 >> AUDIENCIA: [inaudible]? 1214 00:54:26,260 --> 00:54:28,934 1215 00:54:28,934 --> 00:54:29,600 ALTAVOZ 1: Claro. 1216 00:54:29,600 --> 00:54:33,800 Oh, cuando digo búfer, me refiero sólo a la cantidad de memoria que se ha asignado. 1217 00:54:33,800 --> 00:54:39,090 Así que aquí he dicho, oh, hemos asignado de seis char-- suficiente espacio para seis caracteres. 1218 00:54:39,090 --> 00:54:42,880 Y yo sólo lo llamo mi búfer donde podría escribir información. 1219 00:54:42,880 --> 00:54:44,390 Sí. 1220 00:54:44,390 --> 00:54:46,791 ¿Alguna otra pregunta sobre esto? 1221 00:54:46,791 --> 00:54:47,290 Sí. 1222 00:54:47,290 --> 00:54:49,150 >> AUDIENCIA: ¿Cómo detenerlo? 1223 00:54:49,150 --> 00:54:50,274 ¿Cómo evitarlo? 1224 00:54:50,274 --> 00:54:51,440 ALTAVOZ 1: Pregunta impresionante. 1225 00:54:51,440 --> 00:54:52,240 ¿Cómo evitarlo? 1226 00:54:52,240 --> 00:54:54,110 ¿Cómo se previene desbordamiento de búfer? 1227 00:54:54,110 --> 00:54:59,160 Bueno, una forma de hacerlo es algo así como GetString, donde constantemente aumentamos 1228 00:54:59,160 --> 00:55:03,200 la cantidad de memoria que destinamos si el usuario introduce una gran cantidad de texto. 1229 00:55:03,200 --> 00:55:07,570 Otra es la cosa, si solo quieren seis personajes, hacer una comprobación rápida. 1230 00:55:07,570 --> 00:55:11,220 Diga única entrada de seis caracteres. 1231 00:55:11,220 --> 00:55:12,444 Sí. 1232 00:55:12,444 --> 00:55:14,360 Así que digamos que usted fuera trabajando en-- vamos 1233 00:55:14,360 --> 00:55:16,985 ir a cosas web un poco más tarde en el supuesto-- pero vamos a 1234 00:55:16,985 --> 00:55:21,422 decir que está trabajando en un formulario, lo haría simplemente limitar la cantidad podría entregado. 1235 00:55:21,422 --> 00:55:22,378 Sí. 1236 00:55:22,378 --> 00:55:24,768 >> AUDIENCIA: GetString tira la memoria de la pila, ¿verdad? 1237 00:55:24,768 --> 00:55:25,444 ¿Solo para aclarar? 1238 00:55:25,444 --> 00:55:26,485 ALTAVOZ 1: Una vez más? 1239 00:55:26,485 --> 00:55:28,400 AUDIENCIA: ¿El GetString tener memoria de la pila? 1240 00:55:28,400 --> 00:55:31,210 ALTAVOZ 1: Creo Getm-- get int toma memoria del montón 1241 00:55:31,210 --> 00:55:32,911 porque llama alloc. 1242 00:55:32,911 --> 00:55:33,452 AUDIENCIA: Oh. 1243 00:55:33,452 --> 00:55:33,951 OKAY. 1244 00:55:33,951 --> 00:55:35,750 ALTAVOZ 1: Sí, malloc y realloc. 1245 00:55:35,750 --> 00:55:37,120 ¿Otras preguntas? 1246 00:55:37,120 --> 00:55:37,803 Sí. 1247 00:55:37,803 --> 00:55:40,650 >> AUDIENCIA: Entonces, mediante la definición de el tamaño de la buffering, 1248 00:55:40,650 --> 00:55:42,733 se impide a alguien de ser capaz de inyectar código 1249 00:55:42,733 --> 00:55:45,700 que puede deslizarse más allá de la [inaudible]. 1250 00:55:45,700 --> 00:55:48,130 >> ALTAVOZ 1: Por lo tanto, mediante la definición de el tamaño de la memoria intermedia, 1251 00:55:48,130 --> 00:55:50,760 usted ha dicho, bien aquí es como la cantidad de memoria que podemos utilizar. 1252 00:55:50,760 --> 00:55:55,550 Si usted permite que el usuario pueda escribir sobre él, entonces usted va a tener problemas. 1253 00:55:55,550 --> 00:55:57,930 Tener sentido. 1254 00:55:57,930 --> 00:55:59,370 Impresionante. 1255 00:55:59,370 --> 00:56:00,640 Vamos a pasar a lo largo. 1256 00:56:00,640 --> 00:56:02,320 Correcto. 1257 00:56:02,320 --> 00:56:06,652 Hablando de errores, aquí están algunos mensajes de error comunes 1258 00:56:06,652 --> 00:56:09,860 que podría haber aparecido mientras estaba codificación, trabajando en sus boletines de problemas. 1259 00:56:09,860 --> 00:56:12,320 Buena probabilidad de que uno de éstos aparece en el cuestionario 1260 00:56:12,320 --> 00:56:15,090 si los últimos años son una indicación. 1261 00:56:15,090 --> 00:56:17,580 Por lo tanto, las respuestas son una especie de aquí en el tablero. 1262 00:56:17,580 --> 00:56:19,510 Pero no dude en gritar un poco más. 1263 00:56:19,510 --> 00:56:21,280 >> ¿Por qué podría ocurrir un fallo de segmentación? 1264 00:56:21,280 --> 00:56:24,279 ¿Por qué puede usted conseguir un fallo de segmentación cuando se está ejecutando su programa? 1265 00:56:24,279 --> 00:56:26,760 1266 00:56:26,760 --> 00:56:28,230 >> AUDIENCIA: [inaudible]. 1267 00:56:28,230 --> 00:56:29,500 >> ALTAVOZ 1: Good. 1268 00:56:29,500 --> 00:56:32,820 Sí, si tratamos de acceso memoria que no ha dado a nosotros. 1269 00:56:32,820 --> 00:56:34,610 Si tenemos referencia a un puntero nulo. 1270 00:56:34,610 --> 00:56:38,610 Por ejemplo, si llamamos a malloc, y se olvide de comprobar si es nulo, 1271 00:56:38,610 --> 00:56:42,250 y simplemente tratamos de usarlo, el equipo de nos va a dar un fallo de segmentación. 1272 00:56:42,250 --> 00:56:42,750 Bueno. 1273 00:56:42,750 --> 00:56:46,680 ¿Qué hay de implícito declaración de la función? 1274 00:56:46,680 --> 00:56:48,589 Qué significa eso? 1275 00:56:48,589 --> 00:56:51,380 AUDIENCIA: Usted está tratando de utilizar un función que no se ha definido. 1276 00:56:51,380 --> 00:56:52,130 ALTAVOZ 1: Good. 1277 00:56:52,130 --> 00:56:54,504 Usted está tratando de utilizar una función que no se ha definido. 1278 00:56:54,504 --> 00:56:56,000 Así que podría ser una de dos cosas. 1279 00:56:56,000 --> 00:56:59,320 Tal vez fue como el ejemplo Camille le mostró antes. 1280 00:56:59,320 --> 00:57:02,330 Y usted tiene una función principal que llama a algo que se llama cubo. 1281 00:57:02,330 --> 00:57:04,371 Y digamos que se le olvidó escribir este prototipo. 1282 00:57:04,371 --> 00:57:07,540 Se le olvidó decir, hey ordenador, Tengo esta función llamada cubo. 1283 00:57:07,540 --> 00:57:09,380 Usted verá más adelante. 1284 00:57:09,380 --> 00:57:12,440 Digamos que usted se olvidó de escribir el prototipo, podría obtener este error. 1285 00:57:12,440 --> 00:57:14,820 Otra cosa es, digamos que ha intentado usar printf, 1286 00:57:14,820 --> 00:57:16,880 y se olvidó de incluir la biblioteca estándar, 1287 00:57:16,880 --> 00:57:20,240 entonces va a decir implícita declaración de función. 1288 00:57:20,240 --> 00:57:22,800 Y por último, pero no menos importante, identificador no declarado. 1289 00:57:22,800 --> 00:57:23,300 Sí. 1290 00:57:23,300 --> 00:57:24,841 >> AUDIENCIA: Tienes un ámbito problema. 1291 00:57:24,841 --> 00:57:28,728 Como tal vez usted está tratando de llamar a una variable local que es 1292 00:57:28,728 --> 00:57:30,884 en otro tipo de zona. 1293 00:57:30,884 --> 00:57:33,550 ALTAVOZ 1: Gran, así que si usted tiene una variable que no está en su alcance, 1294 00:57:33,550 --> 00:57:36,890 y que está tratando de usarlo, te vas a meter en problemas. 1295 00:57:36,890 --> 00:57:40,960 Y de la misma manera más general, digamos intenta utilizar x, con cada vez diciendo int 1296 00:57:40,960 --> 00:57:45,140 X es igual a 5, entonces usted está va a tener problemas. 1297 00:57:45,140 --> 00:57:47,640 Disculpe, preguntas sobre esto? 1298 00:57:47,640 --> 00:57:49,330 Impresionante, resoplando derecha a lo largo. 1299 00:57:49,330 --> 00:57:55,692 >> OK, recursividad, ¿por qué vamos a might-- ver-- perdí mi sch-- oh aquí vamos, 1300 00:57:55,692 --> 00:57:57,400 Sólo asegúrese de que somos más o menos en la fecha prevista. 1301 00:57:57,400 --> 00:57:59,060 Muy bien, fresco. 1302 00:57:59,060 --> 00:58:03,150 OK, la recursividad, la idea general de la recursividad, una función recursiva 1303 00:58:03,150 --> 00:58:05,380 es una función que se llama. 1304 00:58:05,380 --> 00:58:08,170 OK, así que eso es lo que significa por un concepto de programa 1305 00:58:08,170 --> 00:58:11,130 por el que una función se llama a sí mismo. 1306 00:58:11,130 --> 00:58:16,210 ¿Cuál sería some-- ¿qué es un buena razón para usar la recursividad? 1307 00:58:16,210 --> 00:58:17,550 ¿Cuándo sería útil? 1308 00:58:17,550 --> 00:58:20,926 ¿O cuál es un programa que realmente se presta a la recursividad? 1309 00:58:20,926 --> 00:58:22,330 >> AUDIENCIA: La búsqueda binaria. 1310 00:58:22,330 --> 00:58:25,500 >> ALTAVOZ 1: Búsqueda binaria se presta a la recursividad, 1311 00:58:25,500 --> 00:58:29,060 porque usted tiene este problema que puede romper en trozos más pequeños, 1312 00:58:29,060 --> 00:58:32,330 y llevar a cabo de forma continua el mismo algoritmo en él. 1313 00:58:32,330 --> 00:58:37,790 Esto conduce a, en muchos casos, más elegante código que es más preciso. 1314 00:58:37,790 --> 00:58:40,500 Nos encontramos el ejemplo de búsqueda binaria. 1315 00:58:40,500 --> 00:58:43,100 Otro ejemplo es el ordenamiento por mezcla. 1316 00:58:43,100 --> 00:58:45,920 A veces, cuando se piensa en un algoritmo, como factorial, 1317 00:58:45,920 --> 00:58:47,410 sólo se siente recursiva, ¿verdad? 1318 00:58:47,410 --> 00:58:52,440 Porque sabemos que el factorial de 5 es un factorial 4 veces 5. 1319 00:58:52,440 --> 00:58:56,080 Y así, cuando se configura un problema de esa manera, sólo se siente recursiva. 1320 00:58:56,080 --> 00:58:58,530 Así que sería un gran manera de escribirlo. 1321 00:58:58,530 --> 00:58:59,425 ¿Preguntas? 1322 00:58:59,425 --> 00:59:00,395 Sí. 1323 00:59:00,395 --> 00:59:01,850 >> AUDIENCIA: ¿Qué es un caso base? 1324 00:59:01,850 --> 00:59:02,770 >> ALTAVOZ 1: Oh ¿qué es un caso base? 1325 00:59:02,770 --> 00:59:04,680 Yo dije, no se olvide para incluir un caso base. 1326 00:59:04,680 --> 00:59:07,690 Digamos que estábamos escribiendo una función factorial, 1327 00:59:07,690 --> 00:59:09,620 y que estábamos haciendo factorial de 5. 1328 00:59:09,620 --> 00:59:12,352 Y sabemos un factorial de 5 es 5 veces al factorial de 4, 1329 00:59:12,352 --> 00:59:13,310 bla bla bla bla. 1330 00:59:13,310 --> 00:59:14,360 ¿Cómo sabemos cuándo parar? 1331 00:59:14,360 --> 00:59:16,276 ¿Cómo sabemos que en realidad tienen un número? 1332 00:59:16,276 --> 00:59:20,180 Porque si nos mantenían llamando factorial, entonces nunca conseguiríamos una respuesta, ¿verdad? 1333 00:59:20,180 --> 00:59:24,470 Por eso, cuando sabemos cómo parar en el ejemplo factorial. 1334 00:59:24,470 --> 00:59:25,460 Cualquier persona, sí. 1335 00:59:25,460 --> 00:59:27,764 >> AUDIENCIA: Cuando el 1 factorial es 1. 1336 00:59:27,764 --> 00:59:28,430 ALTAVOZ 1: Good. 1337 00:59:28,430 --> 00:59:29,530 Así que sabemos. 1338 00:59:29,530 --> 00:59:33,400 Podemos dar por sentado que 1 factorial es igual a 1. 1339 00:59:33,400 --> 00:59:36,570 Así que si llegamos al punto en el que estamos llamando factorial de 1, 1340 00:59:36,570 --> 00:59:38,050 sólo seguir adelante y volver 1. 1341 00:59:38,050 --> 00:59:39,180 Y ese es tu caso base. 1342 00:59:39,180 --> 00:59:45,040 Porque sabemos una vez llegamos a eso, y siempre vamos a golpear a eso, vamos a never-- 1343 00:59:45,040 --> 00:59:48,800 no vamos sólo seguir adelante siempre. 1344 00:59:48,800 --> 00:59:50,700 ¿Alguna otra pregunta sobre la recursividad? 1345 00:59:50,700 --> 00:59:51,630 Sí. 1346 00:59:51,630 --> 00:59:54,420 >> AUDIENCIA: Entonces cuando regrese 1, sólo de forma automática 1347 00:59:54,420 --> 00:59:56,290 se detendrá el programa, ¿no? 1348 00:59:56,290 --> 00:59:59,390 >> ALTAVOZ 1: Sí así que cuando usted llamar vuelta 1, si: digamos, 1349 00:59:59,390 --> 01:00:04,480 digamos factorial de 2 llamadas factorial de 1, factorial de 1 1350 01:00:04,480 --> 01:00:06,120 sólo va a devolver 1. 1351 01:00:06,120 --> 01:00:12,790 Y ahora factorial de 2 va a decir OK, 2 Tiempos 1 es 2, y regresar esa respuesta. 1352 01:00:12,790 --> 01:00:14,260 Sí. 1353 01:00:14,260 --> 01:00:16,710 >> AUDIENCIA: ¿Tenemos que preocuparnos sobre el alcance de la recursividad 1354 01:00:16,710 --> 01:00:20,150 cuando se entra en un algoritmo? 1355 01:00:20,150 --> 01:00:21,880 >> ALTAVOZ 1: Ah, sí. 1356 01:00:21,880 --> 01:00:25,060 Sí, usted no tiene que preocuparse de ámbito de aplicación en el contexto de recursión. 1357 01:00:25,060 --> 01:00:29,820 Así que sólo las variables definidas en ese plazo de la función 1358 01:00:29,820 --> 01:00:32,170 van a ser útiles. 1359 01:00:32,170 --> 01:00:33,792 Sí buena pregunta. 1360 01:00:33,792 --> 01:00:35,250 Muy bien, vamos a mantener en movimiento a lo largo. 1361 01:00:35,250 --> 01:00:37,320 Debido a que tenemos una gran cantidad de material a pasar. 1362 01:00:37,320 --> 01:00:41,080 Pero como ya he dicho, no dude en golpear hasta las horas de oficina, o nosotros después de los hechos. 1363 01:00:41,080 --> 01:00:42,850 >> Esto es sólo una diapositiva muy rápido. 1364 01:00:42,850 --> 01:00:45,150 Hemos aprendido mucho acerca de búsquedas y ordenaciones. 1365 01:00:45,150 --> 01:00:47,400 Por favor por favor por favor, estas secciones están en línea, 1366 01:00:47,400 --> 01:00:51,240 Creo que en cs50.net/quizzes. 1367 01:00:51,240 --> 01:00:53,762 Así que ir a tomar esta tabla y lo puso en su hoja de examen, 1368 01:00:53,762 --> 01:00:55,470 porque habrá una pregunta sobre este. 1369 01:00:55,470 --> 01:00:56,682 Por favor, no se equivocan. 1370 01:00:56,682 --> 01:00:58,390 Sólo muy rápidamente, lo que significa esta tabla, 1371 01:00:58,390 --> 01:01:04,370 es que habla de Big O, lo que sabemos siendo el límite superior de un algoritmos 1372 01:01:04,370 --> 01:01:05,150 tiempo de ejecución. 1373 01:01:05,150 --> 01:01:08,080 Y tenemos omega, que es va a ser el límite inferior 1374 01:01:08,080 --> 01:01:10,290 de un tiempo de ejecución de algoritmos. 1375 01:01:10,290 --> 01:01:10,840 ¿De acuerdo? 1376 01:01:10,840 --> 01:01:12,480 >> AUDIENCIA: [inaudible]. 1377 01:01:12,480 --> 01:01:12,800 >> ALTAVOZ 1: Sí, ¿qué es lo último? 1378 01:01:12,800 --> 01:01:13,380 ¿Qué hay teta? 1379 01:01:13,380 --> 01:01:16,850 Lo es si nosotros-- nosotros sólo vamos a preocupan en esta clase en el caso 1380 01:01:16,850 --> 01:01:19,381 donde nuestro límite superior y nuestra cota inferior son los mismos. 1381 01:01:19,381 --> 01:01:22,005 Sí, ese es el único momento en que es va a llegar en esta clase. 1382 01:01:22,005 --> 01:01:23,320 OK, voy a seguir adelante. 1383 01:01:23,320 --> 01:01:26,490 Si usted no ha tomado la imagen, Te prometo éstos estarán en línea. 1384 01:01:26,490 --> 01:01:28,220 >> OK, impresionante, estructuras. 1385 01:01:28,220 --> 01:01:29,810 ¿Por qué podríamos queremos estructuras? 1386 01:01:29,810 --> 01:01:34,110 ¿Qué es un motivo de utilidad podríamos querer estructuras. 1387 01:01:34,110 --> 01:01:36,277 Alguien grita algo. 1388 01:01:36,277 --> 01:01:38,110 Bueno, vamos a ver el ejemplo en el tablero. 1389 01:01:38,110 --> 01:01:41,090 Digamos que estamos tratando con todos estos estudiantes. 1390 01:01:41,090 --> 01:01:44,900 Si estamos haciendo un programa para CS50, hay como 800 personas. 1391 01:01:44,900 --> 01:01:47,890 Necesitamos write-- vamos a necesario para manejar una gran cantidad de información 1392 01:01:47,890 --> 01:01:49,020 acerca de los estudiantes. 1393 01:01:49,020 --> 01:01:50,990 Sería bueno si pudimos tipo de grupo 1394 01:01:50,990 --> 01:01:54,460 esto-- toda la información que tiene que ver con un estudiante en particular 1395 01:01:54,460 --> 01:01:56,027 en un tipo de datos. 1396 01:01:56,027 --> 01:01:58,360 Pero sabemos que no hay datos escriba llamado, Estudiante, ¿verdad? 1397 01:01:58,360 --> 01:02:01,890 Tenemos un número entero, tenemos un flotador, tenemos una cadena o una estrella char, 1398 01:02:01,890 --> 01:02:03,920 pero nosotros no tenemos, un estudiante. 1399 01:02:03,920 --> 01:02:08,680 >> Por lo que podemos hacer es en realidad un poco de definir nuestra propia estructura, lo llaman los estudiantes, 1400 01:02:08,680 --> 01:02:12,440 y podemos asociar algunos diferentes campos con que struct. 1401 01:02:12,440 --> 01:02:14,410 Así que en este caso, vamos a decir que tenemos un estudiante. 1402 01:02:14,410 --> 01:02:17,350 Y las cosas que nos importan acerca son el número de identificación del estudiante 1403 01:02:17,350 --> 01:02:19,500 y el nombre del estudiante. 1404 01:02:19,500 --> 01:02:24,175 Y ahora podemos asociar este ID y este nombre con un estudiante determinado. 1405 01:02:24,175 --> 01:02:25,300 Así que vamos a ver algunos ejemplos. 1406 01:02:25,300 --> 01:02:28,860 1407 01:02:28,860 --> 01:02:33,490 >> Aceptar, por lo que aquí digo, OK, vamos a decimos que queremos hacer un estudiante. 1408 01:02:33,490 --> 01:02:35,050 Yo lo llamo estudiante 1. 1409 01:02:35,050 --> 01:02:38,850 Y su número de identificación, en este caso, se puede acceder a 1410 01:02:38,850 --> 01:02:45,200 con sólo hacer el nombre del estudiante salpican el campo que queremos acceder. 1411 01:02:45,200 --> 01:02:49,110 Así que esto va a ser sólo estudiante 1 punto de identificación, y la pusieron igual a 1. 1412 01:02:49,110 --> 01:02:52,300 Porque recuerde, dijimos que Identificación va a ser un entero. 1413 01:02:52,300 --> 01:02:56,540 Y de forma muy similar, podemos decir que esta el nombre del estudiante que va a ser Davin, 1414 01:02:56,540 --> 01:02:57,760 por ejemplo. 1415 01:02:57,760 --> 01:03:01,420 Así que sólo podemos acceder campo de una estructura que utiliza este punto. 1416 01:03:01,420 --> 01:03:03,098 Preguntas sobre eso? 1417 01:03:03,098 --> 01:03:03,598 Sí. 1418 01:03:03,598 --> 01:03:05,582 >> AUDIENCIA: ¿Hay alguna manera para proteger sus variables? 1419 01:03:05,582 --> 01:03:08,560 ¿Hay alguna manera de proteger a las variables desde que se accede externamente? 1420 01:03:08,560 --> 01:03:10,726 >> ALTAVOZ 1: ¿Hay alguna forma para proteger sus variables 1421 01:03:10,726 --> 01:03:12,680 desde que se accede externamente? 1422 01:03:12,680 --> 01:03:13,750 No en el ámbito de aplicación de CS50. 1423 01:03:13,750 --> 01:03:16,680 1424 01:03:16,680 --> 01:03:17,977 ¿Otras preguntas? 1425 01:03:17,977 --> 01:03:18,476 Sí. 1426 01:03:18,476 --> 01:03:18,942 >> AUDIENCIA: ¿Cuál es typedef struct? 1427 01:03:18,942 --> 01:03:20,192 ¿Qué significa cada componente? 1428 01:03:20,192 --> 01:03:22,937 1429 01:03:22,937 --> 01:03:24,520 ALTAVOZ 1: Ah, ¿cuál es typedef struct? 1430 01:03:24,520 --> 01:03:26,240 ¿Qué significa cada componente media de este tipo? 1431 01:03:26,240 --> 01:03:26,850 >> AUDIENCIA: Sí. 1432 01:03:26,850 --> 01:03:27,683 >> ALTAVOZ 1: OK, fresco. 1433 01:03:27,683 --> 01:03:31,200 Así que esto dice, hey computadora, que desee crear una nueva estructura. 1434 01:03:31,200 --> 01:03:34,970 Y yo voy a definir una definición para ello, de modo que yo pudiera usarlo 1435 01:03:34,970 --> 01:03:37,520 como si fuera un tipo lo largo de mi programa. 1436 01:03:37,520 --> 01:03:39,300 OK, así que quiero definir una estructura. 1437 01:03:39,300 --> 01:03:41,650 Y ahora voy a ser capaz de utilizarlo como un tipo. 1438 01:03:41,650 --> 01:03:43,400 Y su nombre es estudiante. 1439 01:03:43,400 --> 01:03:45,730 Y aquí están sus campos. 1440 01:03:45,730 --> 01:03:48,130 >> AUDIENCIA: ¿Así es que typedef struct [inaudible]? 1441 01:03:48,130 --> 01:03:50,592 1442 01:03:50,592 --> 01:03:53,800 ALTAVOZ 1: Si usted quiere ser capaz de utilizar esta estructura a través de su programa, 1443 01:03:53,800 --> 01:03:57,910 y en la mayoría de los casos en que CS50 hacer, tenemos que decir tipo Def. 1444 01:03:57,910 --> 01:04:01,190 Y eso le permite utilizar la misma forma en que usamos como int o float. 1445 01:04:01,190 --> 01:04:04,168 La computadora Siempre sabe lo que es. 1446 01:04:04,168 --> 01:04:04,668 Sí. 1447 01:04:04,668 --> 01:04:06,560 >> AUDIENCIA: ¿Podemos escribir esto en el archivo de cabecera? 1448 01:04:06,560 --> 01:04:07,060 >> ALTAVOZ 1: Oh, lo siento. 1449 01:04:07,060 --> 01:04:08,600 ¿Nos escribimos esto en el archivo de cabecera? 1450 01:04:08,600 --> 01:04:11,410 Se puede escribir esto en la parte superior de su programa, en la parte superior de su programa c. 1451 01:04:11,410 --> 01:04:13,010 Sí, eso sería el más lugar razonable para ello. 1452 01:04:13,010 --> 01:04:13,509 Volver allí. 1453 01:04:13,509 --> 01:04:15,704 AUDIENCIA: La misma pregunta, así que antes de principal? 1454 01:04:15,704 --> 01:04:18,870 ALTAVOZ 1: Derecho, es necesario que esto sea en alguna parte que todos puedan acceder a ella. 1455 01:04:18,870 --> 01:04:20,612 Así que antes de principal en su caso, sí. 1456 01:04:20,612 --> 01:04:23,820 AUDIENCIA: ¿Hay alguna diferencia entre poniendo estudiante en la parte superior y en la parte inferior? 1457 01:04:23,820 --> 01:04:25,810 ALTAVOZ 1: Ah, ¿hay una diferencia entre los estudiantes poner 1458 01:04:25,810 --> 01:04:26,840 en la parte superior o en la parte inferior? 1459 01:04:26,840 --> 01:04:29,650 Let-- salvar a esa pregunta, y cuando lleguemos a las listas enlazadas, 1460 01:04:29,650 --> 01:04:31,020 veremos que, ¿de acuerdo? 1461 01:04:31,020 --> 01:04:32,750 Así que aferrarse a que durante un segundo. 1462 01:04:32,750 --> 01:04:37,080 La última cosa que quiero mencionar aquí, es en lugar de tener una estructura, 1463 01:04:37,080 --> 01:04:41,180 tenemos un puntero a una estructura, podemos cambiar nuestra notación 1464 01:04:41,180 --> 01:04:42,480 a ser un poco más agradable. 1465 01:04:42,480 --> 01:04:45,810 >> Podemos decir, vamos a decir que tenemos una Puntero a un estudiante en lugar de sólo 1466 01:04:45,810 --> 01:04:47,040 un estudiante. 1467 01:04:47,040 --> 01:04:52,460 Si queremos que el acceso a un campo, en lugar de al hacerlo, también ir dereference el puntero, 1468 01:04:52,460 --> 01:04:54,100 y luego acceder al nombre del campo. 1469 01:04:54,100 --> 01:04:57,310 Esta notación se ve un poco desordenado con la estrella en este punto. 1470 01:04:57,310 --> 01:05:00,790 Totalmente correcto, sino una especie de forma más limpia de hacerlo, 1471 01:05:00,790 --> 01:05:03,280 es igual que decir el nombre puntero de flecha. 1472 01:05:03,280 --> 01:05:11,460 Y que en realidad combina desreferencia y acceder en un hermoso símbolo. 1473 01:05:11,460 --> 01:05:12,470 Preguntas sobre eso? 1474 01:05:12,470 --> 01:05:13,760 >> AUDIENCIA: Sólo decir que una vez más. 1475 01:05:13,760 --> 01:05:14,480 >> ALTAVOZ 1: Digamos que una vez más. 1476 01:05:14,480 --> 01:05:16,021 >> AUDIENCIA: Exactamente lo que acabas de decir. 1477 01:05:16,021 --> 01:05:17,870 ALTAVOZ 1: Claro, exactamente lo que acabo de decir. 1478 01:05:17,870 --> 01:05:21,580 Si tenemos un puntero a un estudiante en lugar de que el estudiante sí mismo, 1479 01:05:21,580 --> 01:05:25,410 nos can-- una forma en que podemos acceder a la campo sirve para eliminar la referencia y, a continuación 1480 01:05:25,410 --> 01:05:27,110 Nombre de acceso. 1481 01:05:27,110 --> 01:05:29,040 Otra forma, más agradable que puede hacerlo, que es justo 1482 01:05:29,040 --> 01:05:33,550 un poco de azúcar sintáctica, se acaba de hacer puntero del nombre de la flecha. 1483 01:05:33,550 --> 01:05:38,190 Y eso va a combinar el eliminación de referencias y de la que accede. 1484 01:05:38,190 --> 01:05:40,400 Sí, muy bien. 1485 01:05:40,400 --> 01:05:41,260 Correcto. 1486 01:05:41,260 --> 01:05:44,390 >> Así que vamos a hablar de la otra pregunta. 1487 01:05:44,390 --> 01:05:46,520 Saltemos a los nodos, que vamos a utilizar 1488 01:05:46,520 --> 01:05:49,120 en ligada listas en tan sólo un segundo. 1489 01:05:49,120 --> 01:05:53,580 Así que aquí, te darás cuenta de que hay es el nodo de palabra tanto en la parte inferior, 1490 01:05:53,580 --> 01:05:55,160 y en la parte superior. 1491 01:05:55,160 --> 01:05:59,040 Antes, cuando estábamos definiendo estudiante, acabamos de tener los estudiantes en la parte inferior. 1492 01:05:59,040 --> 01:06:00,470 No teníamos los estudiantes en la parte superior. 1493 01:06:00,470 --> 01:06:01,902 Alguien sabe por qué puede ser? 1494 01:06:01,902 --> 01:06:02,860 ¿Cuál es la diferencia? 1495 01:06:02,860 --> 01:06:03,360 Sí. 1496 01:06:03,360 --> 01:06:06,212 AUDIENCIA: Entonces usted utiliza nodo es la definición de nodo, 1497 01:06:06,212 --> 01:06:08,254 por lo que es una cosa recursiva? 1498 01:06:08,254 --> 01:06:08,920 ALTAVOZ 1: Good. 1499 01:06:08,920 --> 01:06:13,230 Sí, necesitamos que nuestros nodos tener puntero a otros nodos. 1500 01:06:13,230 --> 01:06:17,640 Así que ya que utilizamos este tipo antes de que en realidad define, 1501 01:06:17,640 --> 01:06:20,613 tenemos que ponerlo en la parte superior Sólo por lo que sabe lo que es. 1502 01:06:20,613 --> 01:06:22,446 AUDIENCIA: Así que todavía lo necesitan en la parte inferior? 1503 01:06:22,446 --> 01:06:23,338 ALTAVOZ 1: Sí. 1504 01:06:23,338 --> 01:06:24,754 AUDIENCIA: Así que siempre en la parte inferior. 1505 01:06:24,754 --> 01:06:26,090 ALTAVOZ 1: Siempre en la parte inferior. 1506 01:06:26,090 --> 01:06:29,410 Así que todo lo tuyo va tenerlo en la parte inferior. 1507 01:06:29,410 --> 01:06:30,720 ¿Alguna otra pregunta? 1508 01:06:30,720 --> 01:06:33,511 Muy bien, por lo que permite realmente hablar acerca vinculada listas muy rápido. 1509 01:06:33,511 --> 01:06:36,510 Así listas enlazadas son-- los usamos en lugar de las matrices en algunos casos, 1510 01:06:36,510 --> 01:06:40,030 porque sabemos que las matrices son un longitud fija, mientras que las listas enlazadas 1511 01:06:40,030 --> 01:06:42,670 podemos crecer y encogerse como queremos. 1512 01:06:42,670 --> 01:06:45,790 Así que este es un ejemplo de lo una lista enlazada podría ser similar. 1513 01:06:45,790 --> 01:06:48,590 Lo que tenemos que ver es la cabeza de la lista. 1514 01:06:48,590 --> 01:06:50,330 Entonces, ¿dónde comienza la lista. 1515 01:06:50,330 --> 01:06:53,010 Y luego nodo, cada nodo subsiguiente, es 1516 01:06:53,010 --> 01:06:55,880 responsable de conocer donde el próximo nodo es. 1517 01:06:55,880 --> 01:07:00,950 Así pues, en este caso, el nodo que almacena 1 es responsable de conocer donde 3 es. 1518 01:07:00,950 --> 01:07:04,540 La persona que almacena 3 es responsable de saber donde 9 es. 1519 01:07:04,540 --> 01:07:06,230 Y 9 tiene a nadie más a señalar. 1520 01:07:06,230 --> 01:07:08,750 Es el final de la lista, por lo que se limita a decir nula. 1521 01:07:08,750 --> 01:07:09,250 ¿De acuerdo? 1522 01:07:09,250 --> 01:07:10,530 >> AUDIENCIA: ¿Cuál es el punto de esto? 1523 01:07:10,530 --> 01:07:11,480 >> ALTAVOZ 1: ¿Cuál es el punto de esto? 1524 01:07:11,480 --> 01:07:12,105 >> AUDIENCIA: Sí. 1525 01:07:12,105 --> 01:07:15,390 ALTAVOZ 1: Porque, vamos a decir que tenemos algunos datos. 1526 01:07:15,390 --> 01:07:18,480 Y no sabemos exactamente cómo muchos datos que quieren antes de tiempo. 1527 01:07:18,480 --> 01:07:22,479 Así que con una matriz, digamos en el que quieren contar a las personas en la primera fila. 1528 01:07:22,479 --> 01:07:24,020 Lo más probable es que no va a cambiar. 1529 01:07:24,020 --> 01:07:28,120 Sólo podemos decir, OK, quieren una matriz de tamaño seis. 1530 01:07:28,120 --> 01:07:30,120 Pero si queremos algo eso va a cambiar. 1531 01:07:30,120 --> 01:07:32,900 >> Por ejemplo, digamos que yo estaba tratando hacer un seguimiento de los estudiantes 1532 01:07:32,900 --> 01:07:35,330 ya que vienen en la habitación para la sesión de revisión. 1533 01:07:35,330 --> 01:07:38,420 No tengo ni idea de cómo muchos de ustedes la gente va a aparecer. 1534 01:07:38,420 --> 01:07:43,094 Así que puede ser que desee una estructura de datos que pueda expandirse y contraerse. 1535 01:07:43,094 --> 01:07:45,510 Porque tal vez alguien lo hará dejar, tal vez alguien va a venir. 1536 01:07:45,510 --> 01:07:48,386 Y así, en cualquier momento, nos puede añadir o eliminar nodos. 1537 01:07:48,386 --> 01:07:49,771 Fresco, buena pregunta. 1538 01:07:49,771 --> 01:07:50,270 Sí. 1539 01:07:50,270 --> 01:07:52,311 >> AUDIENCIA: Si usted puede utilizar algo así como GetString 1540 01:07:52,311 --> 01:07:55,750 que mantiene que le permite obtener más datos como usted lo necesita, ¿por qué necesita esto también? 1541 01:07:55,750 --> 01:07:57,625 >> ALTAVOZ 1: ¿Por qué Utilizas lista cuando enlazó 1542 01:07:57,625 --> 01:07:59,440 usted puede usar algo como GetString? 1543 01:07:59,440 --> 01:08:01,640 Buena pregunta. 1544 01:08:01,640 --> 01:08:04,240 Recuerde que Get-- uno de las caídas de GetString 1545 01:08:04,240 --> 01:08:06,750 es que no hicimos un muy buen trabajo de liberar esa memoria, 1546 01:08:06,750 --> 01:08:09,320 y se introdujo un montón de pérdidas de memoria en su programa? 1547 01:08:09,320 --> 01:08:15,037 Usted podría tomar un estáticamente variedad de tamaño y mantener su cultivo. 1548 01:08:15,037 --> 01:08:16,870 Pero tendrías que encontrar nuevos lugares en la memoria. 1549 01:08:16,870 --> 01:08:18,359 Sólo sería un montón de gastos generales. 1550 01:08:18,359 --> 01:08:21,050 >> Una de las cosas buenas de ligado listas en oposición a las matrices, es arrays 1551 01:08:21,050 --> 01:08:22,830 están todos en la misma ubicación en la memoria. 1552 01:08:22,830 --> 01:08:25,540 Tiene que ser continuo trozos de memoria. 1553 01:08:25,540 --> 01:08:29,920 Mientras que las listas enlazadas, 2 y 3 de mayo ser totalmente en diferentes lugares. 1554 01:08:29,920 --> 01:08:31,880 Al igual que 2 es aquí, y 3 es por aquí. 1555 01:08:31,880 --> 01:08:34,421 Y mientras que tienen una puntero entre sí, está bien. 1556 01:08:34,421 --> 01:08:35,830 Sabemos que podemos encontrarlos. 1557 01:08:35,830 --> 01:08:37,084 Pregunta por ahí? 1558 01:08:37,084 --> 01:08:40,563 >> AUDIENCIA: GetString es una función en la biblioteca CS50, ¿verdad? 1559 01:08:40,563 --> 01:08:42,060 No existe en programas reales. 1560 01:08:42,060 --> 01:08:42,851 >> ALTAVOZ 1: Correcto. 1561 01:08:42,851 --> 01:08:44,130 Correcto, eso es otra cosa. 1562 01:08:44,130 --> 01:08:47,210 GetString no existe fuera del contexto de CS50. 1563 01:08:47,210 --> 01:08:47,710 Sí. 1564 01:08:47,710 --> 01:08:54,556 >> AUDIENCIA: Entonces, ¿el hecho de que dos podrían ser realmente muy separados, 1565 01:08:54,556 --> 01:08:59,859 hace que el impacto de la eficiencia de acceder a los elementos de la lista? 1566 01:08:59,859 --> 01:09:01,359 ALTAVOZ 1: Esa es una gran pregunta. 1567 01:09:01,359 --> 01:09:04,278 La pregunta era, ¿verdad impacto la eficiencia de acceder 1568 01:09:04,278 --> 01:09:05,819 estos diferentes elementos en la lista. 1569 01:09:05,819 --> 01:09:06,930 Actualmente, si. 1570 01:09:06,930 --> 01:09:09,569 Porque sabemos si: vamos a decimos que queremos acceder a la 1571 01:09:09,569 --> 01:09:14,520 el segundo elemento de la matriz, sabemos sólo podemos hacerlo matriz soporte 1, a la derecha. 1572 01:09:14,520 --> 01:09:16,630 Está siempre va a ser la misma ubicación. 1573 01:09:16,630 --> 01:09:20,720 Pero si queremos llegar a ese 3, no podemos decir simplemente, ir a conseguir ese 3. 1574 01:09:20,720 --> 01:09:24,009 Tenemos que decir, OK, comenzará a las el principio de la lista, 1575 01:09:24,009 --> 01:09:26,050 y ahora tenemos realmente caminar a través hasta que 1576 01:09:26,050 --> 01:09:28,149 encontrar el número que nos interesa. 1577 01:09:28,149 --> 01:09:30,790 >> Así que en este caso se dice, OK este es el primer número. 1578 01:09:30,790 --> 01:09:32,207 Así que, esencialmente, es el índice 0. 1579 01:09:32,207 --> 01:09:33,790 Ahora tenemos que encontrar el segundo número. 1580 01:09:33,790 --> 01:09:34,740 Eso es el índice 1. 1581 01:09:34,740 --> 01:09:39,180 Así que en realidad va a-- solo el acceso, se va a tomar tiempo N. 1582 01:09:39,180 --> 01:09:42,027 Enfriar viejo grande N., Sí. 1583 01:09:42,027 --> 01:09:43,903 >> AUDIENCIA: ¿Cuáles son cada una de las listas? 1584 01:09:43,903 --> 01:09:45,401 Son cada matrices, o qué? 1585 01:09:45,401 --> 01:09:46,859 ALTAVOZ 1: Eso es una gran pregunta. 1586 01:09:46,859 --> 01:09:48,950 ¿Cuáles son cada uno de los estructuras que he dibujado? 1587 01:09:48,950 --> 01:09:51,649 Son nodos. 1588 01:09:51,649 --> 01:09:53,720 Así que cada uno de estos pequeños estructura consta de dos partes. 1589 01:09:53,720 --> 01:09:55,264 Tiene un entero que tiene. 1590 01:09:55,264 --> 01:09:57,180 Eso es los datos reales que está sosteniendo. 1591 01:09:57,180 --> 01:09:58,770 Ese es el tipo de parte útil. 1592 01:09:58,770 --> 01:10:00,820 Y, esto es lo que hace una lista enlazada, 1593 01:10:00,820 --> 01:10:03,690 tiene un puntero al siguiente nodo. 1594 01:10:03,690 --> 01:10:05,260 Pregunta impresionante. 1595 01:10:05,260 --> 01:10:11,320 Muy bien, así que vamos a ver muy buscar rápidamente algunos ejemplos de lo que 1596 01:10:11,320 --> 01:10:12,820 podríamos ver con listas enlazadas. 1597 01:10:12,820 --> 01:10:16,920 >> Así que un ejemplo es muy rápido, supongamos que queremos hacer una búsqueda. 1598 01:10:16,920 --> 01:10:20,240 ¿Qué tipo de búsqueda no puede que hacemos en las listas enlazadas? 1599 01:10:20,240 --> 01:10:21,150 >> AUDIENCIA: Binario. 1600 01:10:21,150 --> 01:10:21,900 >> ALTAVOZ 1: Binario. 1601 01:10:21,900 --> 01:10:23,408 Por qué no podemos utilizar la búsqueda binaria? 1602 01:10:23,408 --> 01:10:25,181 >> AUDIENCIA: [inaudible]. 1603 01:10:25,181 --> 01:10:28,180 ALTAVOZ 1: Claro, porque con el binario búsqueda, tuvimos que confiar en el hecho 1604 01:10:28,180 --> 01:10:31,300 que pudiéramos saltar en la matriz en cualquier punto. 1605 01:10:31,300 --> 01:10:33,420 Podríamos simplemente decir, ir al elemento intermedio. 1606 01:10:33,420 --> 01:10:35,550 Con aquí, como dijimos un poco antes, 1607 01:10:35,550 --> 01:10:37,270 no podemos saltar a el elemento medio. 1608 01:10:37,270 --> 01:10:38,978 Con el fin de encontrar ninguna elemento, que en realidad 1609 01:10:38,978 --> 01:10:40,780 tienes que caminar a través de toda nuestra lista. 1610 01:10:40,780 --> 01:10:43,910 >> Así que si lo que queríamos hacer una búsqueda, el mejor que podemos hacer es una búsqueda lineal. 1611 01:10:43,910 --> 01:10:45,910 Partimos a la cabeza, se check-- digamos que estamos 1612 01:10:45,910 --> 01:10:47,790 buscando 9-- empezamos a la cabeza. 1613 01:10:47,790 --> 01:10:49,200 Nosotros decimos, es este 9? 1614 01:10:49,200 --> 01:10:49,710 No. 1615 01:10:49,710 --> 01:10:50,430 ¿Este 9? 1616 01:10:50,430 --> 01:10:50,930 No. 1617 01:10:50,930 --> 01:10:51,620 ¿Este 9? 1618 01:10:51,620 --> 01:10:53,730 Sí, lo encontramos. 1619 01:10:53,730 --> 01:10:56,350 OK, eso es todo eso. 1620 01:10:56,350 --> 01:10:57,940 Aquí hay un poco de pseudo-código. 1621 01:10:57,940 --> 01:11:01,420 Voy a dejar esto para usted chicos para batir más por su cuenta, 1622 01:11:01,420 --> 01:11:04,370 sólo porque nos estamos quedando un poco corto de tiempo. 1623 01:11:04,370 --> 01:11:05,610 >> Vamos a hablar de la inserción. 1624 01:11:05,610 --> 01:11:08,644 Vimos una demostración realmente fresco de esto en la conferencia donde dijimos, 1625 01:11:08,644 --> 01:11:11,560 OK, tenemos esta lista enlazada donde todo el mundo está apuntando el uno al otro, 1626 01:11:11,560 --> 01:11:13,400 y alguien se le ocurre en el escenario. 1627 01:11:13,400 --> 01:11:17,050 ¿Cómo nos insertamos que persona en nuestra lista enlazada? 1628 01:11:17,050 --> 01:11:20,150 Bueno, una manera incorrecta de hacer, lo que es que creo que lo que vimos en primer lugar, 1629 01:11:20,150 --> 01:11:22,740 es cuando la persona delante de forma automática 1630 01:11:22,740 --> 01:11:25,270 apuntado a la nueva persona. 1631 01:11:25,270 --> 01:11:29,057 Y entonces nos abandonamos el tipo de segunda mitad de la lista, ¿no? 1632 01:11:29,057 --> 01:11:31,390 Debido a que no sabemos dónde es en la memoria más. 1633 01:11:31,390 --> 01:11:34,750 Así que ser muy cuidadoso acerca de la orden en el que insertar las cosas. 1634 01:11:34,750 --> 01:11:37,860 >> Así que aquí, digamos que queremos puesto 1 en el frente de nuestra lista. 1635 01:11:37,860 --> 01:11:42,190 En primer lugar, tenemos 1 punto en la segundo element-- o el elemento 1636 01:11:42,190 --> 01:11:44,170 que contiene 1. 1637 01:11:44,170 --> 01:11:47,210 Por lo tanto, hacemos eso, sólo para que no somos va a perder la segunda mitad. 1638 01:11:47,210 --> 01:11:51,020 Y ahora, podemos tener la cabeza a punto 1. 1639 01:11:51,020 --> 01:11:52,930 Así que de nuevo, esto es sólo como super alto nivel. 1640 01:11:52,930 --> 01:11:55,290 Así es como nos gustaría insertar un nodo. 1641 01:11:55,290 --> 01:11:57,337 Tenemos una gran cantidad de pseudo-código aquí-- siento, 1642 01:11:57,337 --> 01:11:59,170 No sé por qué estoy llamándolo pseudo-código. 1643 01:11:59,170 --> 01:12:00,350 Es código real. 1644 01:12:00,350 --> 01:12:02,570 Usted puede ir a verlo más tarde. 1645 01:12:02,570 --> 01:12:04,870 >> Muy bien, vamos muy quickly-- más preguntas 1646 01:12:04,870 --> 01:12:07,120 en listas enlazadas antes de la Primera pasar a un par de otros datos 1647 01:12:07,120 --> 01:12:08,450 estructuras en nuestros últimos 10 minutos. 1648 01:12:08,450 --> 01:12:10,340 >> AUDIENCIA: ¿Necesitamos ahora cómo escribirlo en un examen? 1649 01:12:10,340 --> 01:12:11,040 >> ALTAVOZ 1: ¿Necesitamos saber cómo a-- 1650 01:12:11,040 --> 01:12:12,030 >> AUDIENCIA: Escríbelo en un examen. 1651 01:12:12,030 --> 01:12:14,071 >> ALTAVOZ 1: Necesitamos a-- usted debe estar preparado 1652 01:12:14,071 --> 01:12:18,870 escribir, insertar, eliminar y buscar listas enlazadas en la prueba. 1653 01:12:18,870 --> 01:12:21,480 Eso es algo que nos podría esperar que hagas. 1654 01:12:21,480 --> 01:12:22,750 Sólo tienes que ir sobre ella. 1655 01:12:22,750 --> 01:12:26,460 Si tiene cualquier pregunta sobre el código, disparar su TF un correo electrónico, 1656 01:12:26,460 --> 01:12:27,750 llegado a las horas de oficina. 1657 01:12:27,750 --> 01:12:30,041 Todavía hay un montón de tiempo para estudiar, que no se preocupara. 1658 01:12:30,041 --> 01:12:32,290 Muy bien, cualquier otro preguntas sobre listas enlazadas? 1659 01:12:32,290 --> 01:12:32,986 Sí. 1660 01:12:32,986 --> 01:12:37,360 >> AUDIENCIA: Así que si usted no utiliza el puntero para ir a la de la derecha 1661 01:12:37,360 --> 01:12:41,308 antes de utilizar el puntero para el de la izquierda, que es 1662 01:12:41,308 --> 01:12:43,211 el equivalente de borrar ¿todo bien? 1663 01:12:43,211 --> 01:12:43,877 ALTAVOZ 1: Sí. 1664 01:12:43,877 --> 01:12:44,820 AUDIENCIA: [inaudible]. 1665 01:12:44,820 --> 01:12:47,570 ALTAVOZ 1: Derecho, ya que no puede conseguir que, en realidad es aún peor. 1666 01:12:47,570 --> 01:12:50,690 Porque no sólo no sabemos donde está, ya no podemos utilizamos, 1667 01:12:50,690 --> 01:12:53,580 pero we've-- no estamos liberando que la memoria más. 1668 01:12:53,580 --> 01:12:58,570 Así que es simplemente dando vueltas y no ser útil, porque no podemos encontrarlo. 1669 01:12:58,570 --> 01:12:59,580 Sí, pregunta fresco. 1670 01:12:59,580 --> 01:13:01,280 >> Muy bien, vamos a hablar de las pilas. 1671 01:13:01,280 --> 01:13:03,230 Vimos pilas muy rápidamente. 1672 01:13:03,230 --> 01:13:06,280 Ellos son los primeros en la última estructuras de datos fuera. 1673 01:13:06,280 --> 01:13:10,664 Así que pensamos en las pilas en Annenberg de bandejas donde apilar cosas en la parte superior. 1674 01:13:10,664 --> 01:13:12,580 Y si vas a venga conseguir una bandeja, eres 1675 01:13:12,580 --> 01:13:15,870 Siempre va a tomar el de la la parte superior, que es la más recently-- 1676 01:13:15,870 --> 01:13:18,840 que es lo que la mayoría recientemente puso en la parte superior de la pila. 1677 01:13:18,840 --> 01:13:22,680 Así que usted puede clase de pensar en este tipo de visual cuando usted está pensando en pilas. 1678 01:13:22,680 --> 01:13:26,010 Y entonces, hemos metimos algo de la parte superior de la pila. 1679 01:13:26,010 --> 01:13:29,850 >> Si nos trate: ah, y las palabras que utilizar cuando estamos hablando de estos datos 1680 01:13:29,850 --> 01:13:32,680 estructuras es por lo general, si poner algo en la pila, 1681 01:13:32,680 --> 01:13:34,550 decimos que estamos empujando en la pila. 1682 01:13:34,550 --> 01:13:38,450 Y si tomamos algo de la pila, decimos que estamos haciendo estallar fuera de la pila. 1683 01:13:38,450 --> 01:13:41,470 Si usted va a aplicar un stack-- que definitivamente 1684 01:13:41,470 --> 01:13:44,840 Recomienda intenta fuera-- eres va a querer perder de vista, 1685 01:13:44,840 --> 01:13:46,669 digamos que usted está utilizando una matriz. 1686 01:13:46,669 --> 01:13:48,960 Sé que en la conferencia que hablamos sobre el uso de ambos los arrays 1687 01:13:48,960 --> 01:13:51,120 o vinculados listas para implementar una pila. 1688 01:13:51,120 --> 01:13:53,490 Si usted está usando un matriz, es necesario keep-- 1689 01:13:53,490 --> 01:13:56,750 excusa mí-- tenemos que seguir la pista del tamaño y la capacidad. 1690 01:13:56,750 --> 01:14:00,820 Por lo tanto el número máximo que nuestra pila puede contener. 1691 01:14:00,820 --> 01:14:03,240 Las preguntas sobre las pilas? 1692 01:14:03,240 --> 01:14:05,657 >> AUDIENCIA: ¿Cuál es la diferencia entre el tamaño y la capacidad? 1693 01:14:05,657 --> 01:14:08,573 ALTAVOZ 1: La diferencia entre tamaño y capacidad, impresionante cuestión. 1694 01:14:08,573 --> 01:14:10,330 Así que digamos que estamos utilizando una matriz, y 1695 01:14:10,330 --> 01:14:13,340 asignar suficiente espacio para 10 enteros. 1696 01:14:13,340 --> 01:14:15,050 Y empezamos a llenar eso. 1697 01:14:15,050 --> 01:14:17,330 Y empujamos cosas en, y nos pop cosas. 1698 01:14:17,330 --> 01:14:21,060 Queremos hacer un seguimiento de la máxima número que podemos tener, que es la capacidad. 1699 01:14:21,060 --> 01:14:24,790 Y queremos hacer un seguimiento de la número actual que tenemos, que es el tamaño. 1700 01:14:24,790 --> 01:14:26,530 Buena pregunta. 1701 01:14:26,530 --> 01:14:28,720 Cualquier otra cosa en las pilas? 1702 01:14:28,720 --> 01:14:31,260 Muy bien, vamos a hablar acerca de la sorpresa, las colas. 1703 01:14:31,260 --> 01:14:37,034 >> A diferencia de las pilas, que son por primera vez en el pasado cabo, se trata de primero en entrar, primero en salir. 1704 01:14:37,034 --> 01:14:38,450 Así que esto es como-- pensar en una línea. 1705 01:14:38,450 --> 01:14:41,530 Piense en cola en la Manzana Tienda de conseguir cualquier producto. 1706 01:14:41,530 --> 01:14:44,540 Y la primera persona de la fila debe ser la primera persona que ha ayudado. 1707 01:14:44,540 --> 01:14:48,270 Así que lo primero que se envían es esto lo primero que se hizo estallar. 1708 01:14:48,270 --> 01:14:49,460 ¿Guay? 1709 01:14:49,460 --> 01:14:52,890 Muy similarly-- oh, las palabras que utilizamos en lugar de empujar y pop-- 1710 01:14:52,890 --> 01:14:55,060 que acabo acostumbrado, Estoy sorry-- es que decimos, 1711 01:14:55,060 --> 01:14:58,170 si estamos poner algo en la cola, que decimos en cola ella. 1712 01:14:58,170 --> 01:15:00,795 Si estamos tomando algo fuera de la cola, decimos que desencolan. 1713 01:15:00,795 --> 01:15:01,950 Ello. 1714 01:15:01,950 --> 01:15:05,454 Se me puede pronunciando los mal, pero se entiende la idea. 1715 01:15:05,454 --> 01:15:08,370 Y, de nuevo, al igual que las pilas, si estamos implementando esto como matriz, 1716 01:15:08,370 --> 01:15:12,350 tenemos que hacer un seguimiento de la tamaño, la capacidad, y la cabeza. 1717 01:15:12,350 --> 01:15:13,570 ¿Qué quiero decir por la cabeza? 1718 01:15:13,570 --> 01:15:15,278 ¿Por qué necesitamos para mantener pista de la cabeza? 1719 01:15:15,278 --> 01:15:18,549 1720 01:15:18,549 --> 01:15:21,685 >> AUDIENCIA: Porque ahí es donde al principio de su lista es. 1721 01:15:21,685 --> 01:15:24,810 ALTAVOZ 1: Sí, básicamente, la cabeza es donde el principio de nuestra cola está. 1722 01:15:24,810 --> 01:15:29,460 Porque sabemos, a diferencia de las pilas, which-- Voy a tratar de hacer frente a esta manera-- 1723 01:15:29,460 --> 01:15:33,570 sabemos que siempre va a reducir de esta manera y crecer de esta manera. 1724 01:15:33,570 --> 01:15:37,840 Colas, la gente viene en el extremo y dejar desde el principio, 1725 01:15:37,840 --> 01:15:40,620 así que tenemos que seguir la pista de donde el comienzo es. 1726 01:15:40,620 --> 01:15:43,540 Eso es lo que quiero decir con que necesitamos no perder de vista donde la cabeza es. 1727 01:15:43,540 --> 01:15:45,190 ¿Guay? 1728 01:15:45,190 --> 01:15:46,440 Correcto. 1729 01:15:46,440 --> 01:15:49,250 Ocho minutos, pareja más temas, podemos hacerlo. 1730 01:15:49,250 --> 01:15:51,240 >> Muy bien, tabla hash. 1731 01:15:51,240 --> 01:15:53,095 Hablamos brevemente sobre tablas hash. 1732 01:15:53,095 --> 01:15:55,720 Para el concurso, sólo tiene que entenderlos en un nivel alto. 1733 01:15:55,720 --> 01:15:58,330 La idea básica es que tienes estos datos. 1734 01:15:58,330 --> 01:16:02,570 Y queremos acceder a él en el tiempo que es más rápido que algo como un ligada 1735 01:16:02,570 --> 01:16:03,070 lista. 1736 01:16:03,070 --> 01:16:05,290 Porque hemos dicho, si fuéramos buscando a través de una lista enlazada, 1737 01:16:05,290 --> 01:16:06,248 que podría tomar tiempo N. 1738 01:16:06,248 --> 01:16:08,810 Incluso el acceso puede tomar Tiempo de N en una lista enlazada. 1739 01:16:08,810 --> 01:16:12,930 Las tablas hash darnos una manera que podemos acceder más rápidamente las cosas, y más 1740 01:16:12,930 --> 01:16:16,970 buscar rápidamente las cosas, sin con las restricciones de un array 1741 01:16:16,970 --> 01:16:19,030 donde hemos fijado tamaño. 1742 01:16:19,030 --> 01:16:23,950 >> Así que pensamos en una estructura de datos en el que, donde nos ponemos en la estructura de datos 1743 01:16:23,950 --> 01:16:26,620 es dependiente de esta función hash mágico. 1744 01:16:26,620 --> 01:16:30,630 Así que en este caso, el hash mágica función se acaba tomando una palabra, 1745 01:16:30,630 --> 01:16:34,027 comprobar lo que la primera letra es, y a continuación, sólo ordenar alfabéticamente. 1746 01:16:34,027 --> 01:16:36,110 Así que básicamente los ponemos en diferentes cubetas. 1747 01:16:36,110 --> 01:16:39,510 Cuando vemos plátano, decimos, OK, vamos a poner en el cubo B. 1748 01:16:39,510 --> 01:16:41,820 Cuando vemos Apple, vamos a ponerlo en el Un cubo. 1749 01:16:41,820 --> 01:16:44,744 Si viéramos albaricoque, vamos a poner en el Un cubo. 1750 01:16:44,744 --> 01:16:45,600 ¿De acuerdo? 1751 01:16:45,600 --> 01:16:51,090 >> Así que supongo que estábamos buscando para-- I no lo sé, lo que es otra fruta? 1752 01:16:51,090 --> 01:16:52,920 Supongamos que yo estaba buscando naranja. 1753 01:16:52,920 --> 01:16:55,340 ¿Dónde debo buscar? 1754 01:16:55,340 --> 01:16:56,420 En el cubo O. 1755 01:16:56,420 --> 01:17:01,450 Sí, hay un solo lugar que el naranja sea, ¿de acuerdo? 1756 01:17:01,450 --> 01:17:05,370 Así que he dicho antes lo que ocurre si-- bien he dicho antes, 1757 01:17:05,370 --> 01:17:10,030 digamos que ponemos en-- albaricoque pero realmente abordar el hecho de que, oh no, 1758 01:17:10,030 --> 01:17:14,990 si tuviera que poner la baya en, es va a entrar en conflicto con el plátano. 1759 01:17:14,990 --> 01:17:20,160 ¿Dónde lo ponemos si hay ya algo en nuestra mesa? 1760 01:17:20,160 --> 01:17:22,760 Bueno, tenemos un par de opciones. 1761 01:17:22,760 --> 01:17:26,160 >> Opción número uno es lineal sondeo, lo que significa, básicamente, 1762 01:17:26,160 --> 01:17:28,690 digamos que quiero tratar de poner baya, y veo, oh no, 1763 01:17:28,690 --> 01:17:31,170 bananas que ya están allí, Acabo de decir OK, vamos 1764 01:17:31,170 --> 01:17:33,810 Me miro para el próximo lugar disponible. 1765 01:17:33,810 --> 01:17:36,744 Así que camino abajo, digo, oh, no hay nada en el cubo D. 1766 01:17:36,744 --> 01:17:39,410 Realmente no puedo pensar en ninguna frutos que empiezan con la letra D, 1767 01:17:39,410 --> 01:17:41,620 así que sólo voy a poner la baya en allí. 1768 01:17:41,620 --> 01:17:42,650 Durian. 1769 01:17:42,650 --> 01:17:44,590 OK, así que ya que no hay nada allí todavía, 1770 01:17:44,590 --> 01:17:47,020 Puede ser que también acaba de utilizar ese lugar. 1771 01:17:47,020 --> 01:17:48,805 ¿Cuál es la desventaja de que? 1772 01:17:48,805 --> 01:17:49,300 >> AUDIENCIA: Está fuera de orden. 1773 01:17:49,300 --> 01:17:50,008 >> ALTAVOZ 1: Lo siento? 1774 01:17:50,008 --> 01:17:51,280 AUDIENCIA: Está fuera de orden. 1775 01:17:51,280 --> 01:17:53,113 >> ALTAVOZ 1: Es fuera-- derecha, podríamos terminar 1776 01:17:53,113 --> 01:17:56,380 con cosas que no se en-- almacenada en cubos en el camino 1777 01:17:56,380 --> 01:17:57,790 que esperamos que sean. 1778 01:17:57,790 --> 01:18:00,670 Así que si buscábamos para la baya, antes hemos dicho, 1779 01:18:00,670 --> 01:18:02,000 oh podemos mirar en un cubo. 1780 01:18:02,000 --> 01:18:03,650 Sólo podía ser en un cubo. 1781 01:18:03,650 --> 01:18:07,380 Pero ahora, en realidad, podría ser en todos los cubos, ¿verdad? 1782 01:18:07,380 --> 01:18:10,400 >> OK, aquí hay otra opción, chaining-- separada 1783 01:18:10,400 --> 01:18:16,630 que es la idea de que vamos utilizar un poco más tarde en P fijó 5. 1784 01:18:16,630 --> 01:18:19,340 En lugar de simplemente tener un espacio en cada cubo, 1785 01:18:19,340 --> 01:18:23,610 ¿por qué no tenemos cada cubo ser un puntero a una lista enlazada? 1786 01:18:23,610 --> 01:18:28,570 Cuando decimos, OK, hay un cubo por todo lo que empieza con A. 1787 01:18:28,570 --> 01:18:31,990 Y no sólo va a ser un ligado lista de frutas que comienzan con A. 1788 01:18:31,990 --> 01:18:36,240 Así que si tenemos una nueva fruta, digamos nos get-- nos aguacate, tenemos manzana, 1789 01:18:36,240 --> 01:18:39,530 digamos que tenemos albaricoque, ¿cómo podríamos poner en la lista? 1790 01:18:39,530 --> 01:18:43,330 Bien nos gustaría ir a la cuchara 0, y nos gustaría basta con insertar en nuestra lista gustado, 1791 01:18:43,330 --> 01:18:45,320 simple como eso. 1792 01:18:45,320 --> 01:18:47,160 >> Ahora sigo diciendo cubo. 1793 01:18:47,160 --> 01:18:49,470 Podríamos aplicar este de muchas maneras. 1794 01:18:49,470 --> 01:18:52,040 Una forma típica que esta tipo de foto indica, 1795 01:18:52,040 --> 01:18:55,580 tal vez se tiene una disposición de punteros a listas enlazadas. 1796 01:18:55,580 --> 01:18:58,174 Esa es una de las formas posibles implementar una tabla hash. 1797 01:18:58,174 --> 01:19:01,090 AUDIENCIA: ¿Necesitaría otra lista porque el plátano y bayas están fuera 1798 01:19:01,090 --> 01:19:01,591 ¿de orden? 1799 01:19:01,591 --> 01:19:03,298 ALTAVOZ 1: ¿Quieres que need-- ah, ¿verdad 1800 01:19:03,298 --> 01:19:06,310 necesitará otra lista porque plátano y bayas están fuera de orden? 1801 01:19:06,310 --> 01:19:09,880 En este caso, nuestra función hash, que nos dice dónde poner las cosas 1802 01:19:09,880 --> 01:19:11,647 no se preocupa por la segunda letra. 1803 01:19:11,647 --> 01:19:14,730 No se preocupan por alfabetizar, que sólo se preocupa por la primera letra. 1804 01:19:14,730 --> 01:19:15,672 ¿Pregunta? 1805 01:19:15,672 --> 01:19:18,947 >> AUDIENCIA: ¿Cuál es la definición de ese función, y qué aspecto tiene? 1806 01:19:18,947 --> 01:19:19,780 ALTAVOZ 1: Ah, bueno. 1807 01:19:19,780 --> 01:19:22,450 OK, así que no necesitamos preocuparse demasiado por este concurso. 1808 01:19:22,450 --> 01:19:23,700 Así que no me pongo en las diapositivas. 1809 01:19:23,700 --> 01:19:26,320 Vamos a introducir a ella para P puesto 5. 1810 01:19:26,320 --> 01:19:31,520 Pero, básicamente, dice, le da un nuevo elemento, dónde debo decirlo? 1811 01:19:31,520 --> 01:19:35,450 O, digamos que estoy buscando un elemento, donde podría ser? 1812 01:19:35,450 --> 01:19:37,860 Sí, buena pregunta. 1813 01:19:37,860 --> 01:19:40,870 >> OK, muy rápidamente, los árboles y los intentos. 1814 01:19:40,870 --> 01:19:44,779 Así que un árbol es cualquier tipo de estructura de datos organizada. 1815 01:19:44,779 --> 01:19:47,820 Y vamos a ver un montón de fotos que hará que esta claro estupendo. 1816 01:19:47,820 --> 01:19:51,180 Y un trie, que vimos en clase, es un tipo muy especial de árbol 1817 01:19:51,180 --> 01:19:53,440 que esencialmente funciona como una tabla hash de varios niveles. 1818 01:19:53,440 --> 01:19:54,390 Es super cool. 1819 01:19:54,390 --> 01:19:56,030 Vamos a ver que en tan sólo un segundo. 1820 01:19:56,030 --> 01:19:57,821 Muy bien, así que vamos a hablar de árboles en primer lugar. 1821 01:19:57,821 --> 01:20:01,040 Así que este es un ejemplo muy típico de un árbol, en el que tenemos alguna jerarquía. 1822 01:20:01,040 --> 01:20:03,220 Usted ve que uno está en la parte superior, a la derecha? 1823 01:20:03,220 --> 01:20:06,190 Y puedo decir superior porque hay claramente un ordenamiento porque 1824 01:20:06,190 --> 01:20:08,260 tienen estas flechas a la baja. 1825 01:20:08,260 --> 01:20:11,740 Así que, la cosa en la parte superior, Yo llamo a esto el nodo raíz. 1826 01:20:11,740 --> 01:20:13,080 Así que uno es el nodo raíz. 1827 01:20:13,080 --> 01:20:17,330 Y las cosas en la parte inferior, que no tienen nada que viene de ellos, 1828 01:20:17,330 --> 01:20:18,783 Yo digo que estos son los nodos hoja. 1829 01:20:18,783 --> 01:20:22,730 Así 8,9 5, 6, 7, OK. 1830 01:20:22,730 --> 01:20:27,740 Y por lo general el que la terminología puede decir es, 1 es la matriz de 3. 1831 01:20:27,740 --> 01:20:30,740 Así que es lo que viene a nivel por encima de ella, y los puntos a la misma. 1832 01:20:30,740 --> 01:20:32,710 Y 3 es un hijo de 1. 1833 01:20:32,710 --> 01:20:34,505 Es lo que 1 puntos a. 1834 01:20:34,505 --> 01:20:35,005 ¿Pregunta? 1835 01:20:35,005 --> 01:20:36,414 >> AUDIENCIA: ¿Puede volver a la diapositiva anterior, por favor? 1836 01:20:36,414 --> 01:20:37,388 >> ALTAVOZ 1: ¿Puedo volver a la diapositiva anterior? 1837 01:20:37,388 --> 01:20:37,888 Por supuesto. 1838 01:20:37,888 --> 01:20:40,640 1839 01:20:40,640 --> 01:20:41,390 Preguntas sobre esto? 1840 01:20:41,390 --> 01:20:42,764 O simplemente quería mirarlo? 1841 01:20:42,764 --> 01:20:44,650 AUDIENCIA: yo no tuve a través de él. 1842 01:20:44,650 --> 01:20:47,100 >> ALTAVOZ 1: OK, fresco, sí. 1843 01:20:47,100 --> 01:20:49,846 Estos serán todos en línea por lo que no hacerlo preocuparse por obtener cada palabra. 1844 01:20:49,846 --> 01:20:51,720 Y en aras de la tiempo, me voy a ir. 1845 01:20:51,720 --> 01:20:53,270 ¿Está todo bien? 1846 01:20:53,270 --> 01:20:53,790 Impresionante. 1847 01:20:53,790 --> 01:20:55,720 Vale, guay. 1848 01:20:55,720 --> 01:20:57,790 Así que vamos a hablar de un kind-- muy específicas 1849 01:20:57,790 --> 01:20:59,710 así que tenemos estos generales la estructura de los árboles, 1850 01:20:59,710 --> 01:21:02,876 que es sólo algo que nos permite al tipo de cosas rango jerárquicamente. 1851 01:21:02,876 --> 01:21:06,000 1852 01:21:06,000 --> 01:21:11,110 >> Árboles binarios son cosas donde cada nodo tiene como máximo dos hijos. 1853 01:21:11,110 --> 01:21:11,690 ¿De acuerdo? 1854 01:21:11,690 --> 01:21:14,560 Y yo le dije, OK, por lo que parece para adaptarse a esta descripción. 1855 01:21:14,560 --> 01:21:16,830 Dije nodo, no un árbol de búsqueda binaria. 1856 01:21:16,830 --> 01:21:19,720 ¿Qué es un árbol binario de búsqueda? 1857 01:21:19,720 --> 01:21:20,440 Se solucionó. 1858 01:21:20,440 --> 01:21:22,890 Así que ya sabes que en un árbol de búsqueda binaria, 1859 01:21:22,890 --> 01:21:26,580 todo al todo tree-- a los nodos de izquierda es más pequeña, 1860 01:21:26,580 --> 01:21:28,830 y todo a la nodos de la derecha es más grande. 1861 01:21:28,830 --> 01:21:30,620 Así que esto no es un árbol de búsqueda binario. 1862 01:21:30,620 --> 01:21:32,770 Esto es sólo un árbol binario. 1863 01:21:32,770 --> 01:21:35,910 Así que tenemos gran categoría de árboles, categoría ligeramente más pequeño 1864 01:21:35,910 --> 01:21:40,106 de árboles binarios, búsqueda A-- árboles binarios de búsqueda. 1865 01:21:40,106 --> 01:21:41,540 ¿Guay? 1866 01:21:41,540 --> 01:21:44,410 Correcto. 1867 01:21:44,410 --> 01:21:47,380 >> Y ahora, la mayor parte de la diversión de todo, tenemos nuestros intentos. 1868 01:21:47,380 --> 01:21:49,500 Ustedes vieron esta imagen en la conferencia? 1869 01:21:49,500 --> 01:21:51,790 Sí, debe ser muy familiar. 1870 01:21:51,790 --> 01:21:54,252 Echemos un vistazo a cómo podríamos en realidad implementar esto. 1871 01:21:54,252 --> 01:21:56,210 O en realidad, vamos a ver, ¿eso incluso vienen para arriba? 1872 01:21:56,210 --> 01:21:56,731 Nope. 1873 01:21:56,731 --> 01:21:59,480 Muy bien, ni siquiera tiene que preocuparse por esas cosas de bajo nivel. 1874 01:21:59,480 --> 01:22:02,320 Tendremos tiempo de sobra para hacer frente a continuación, P puesto 5. 1875 01:22:02,320 --> 01:22:05,780 Pero por ahora, sólo muy alto nivel, sé que esto es lo que parece. 1876 01:22:05,780 --> 01:22:08,530 Hemos descrito como tipo de una tabla hash de varios niveles 1877 01:22:08,530 --> 01:22:12,264 where-- lo que hace esta tienda? 1878 01:22:12,264 --> 01:22:14,430 Esto almacena nombres de científicos que podemos realidad 1879 01:22:14,430 --> 01:22:20,690 buscar por sólo un poco después de la diferentes tablas hash abajo, ¿de acuerdo? 1880 01:22:20,690 --> 01:22:24,730 >> Y el propósito de esto es, en teoría, que proporcionan constante de tiempo mirar hacia arriba. 1881 01:22:24,730 --> 01:22:29,630 Así que si quiero comprobar que, por ejemplo, quién es alguien-- 1882 01:22:29,630 --> 01:22:33,410 Mandel que es en este trie, podría muy rápidamente 1883 01:22:33,410 --> 01:22:36,260 en linear-- Lo siento, en constante de tiempo, averiguar 1884 01:22:36,260 --> 01:22:39,010 si es o no está en el trie. 1885 01:22:39,010 --> 01:22:41,500 Pero una estafa, se mira lo grande que es esto. 1886 01:22:41,500 --> 01:22:44,120 Ni siquiera estamos almacenando que muchos datos, y es enorme. 1887 01:22:44,120 --> 01:22:47,950 Así que una gran desventaja es que utiliza una gran cantidad de memoria. 1888 01:22:47,950 --> 01:22:48,746 Sí. 1889 01:22:48,746 --> 01:22:50,610 >> AUDIENCIA: ¿Por qué ofrecer constante de tiempo, exactamente? 1890 01:22:50,610 --> 01:22:51,376 >> ALTAVOZ 1: Una vez más? 1891 01:22:51,376 --> 01:22:53,360 >> AUDIENCIA: ¿Cuál es la intuición por eso que ofrece constante de tiempo? 1892 01:22:53,360 --> 01:22:54,610 >> ALTAVOZ 1: Excelente pregunta. 1893 01:22:54,610 --> 01:22:56,030 ¿Por qué ofrecer constante de tiempo? 1894 01:22:56,030 --> 01:22:59,280 Entonces, ¿qué podemos hacer es, vamos a decimos que estamos buscando Mandel. 1895 01:22:59,280 --> 01:23:02,830 Sabemos que queremos empezar en el primer nivel en el M. 1896 01:23:02,830 --> 01:23:06,890 Sabemos que queremos seguir a E. Entonces eso es dar un paso, dos pasos, ¿verdad? 1897 01:23:06,890 --> 01:23:10,710 Seguimos a N. Seguimos a D. Seguimos a E. Seguimos a L. 1898 01:23:10,710 --> 01:23:15,100 Y luego la siguiente cosa, comprobamos says-- este delta dice Sí, eso es 1899 01:23:15,100 --> 01:23:15,990 en nuestra mesa. 1900 01:23:15,990 --> 01:23:16,880 Es decir una palabra. 1901 01:23:16,880 --> 01:23:19,900 Esa es una entrada válida en nuestra trie. 1902 01:23:19,900 --> 01:23:22,450 Así que estás diciendo, OK, que tuvo siete pasos. 1903 01:23:22,450 --> 01:23:27,200 Pero si hemos añadido como un trillón más científicos a esta estructura de datos, 1904 01:23:27,200 --> 01:23:29,470 no tendríamos para comprobar un trillón más cosas. 1905 01:23:29,470 --> 01:23:33,580 Sólo estamos cada vez va a tener que tomar siete pasos, la longitud de la persona de 1906 01:23:33,580 --> 01:23:35,260 nombre. 1907 01:23:35,260 --> 01:23:39,350 >> Por lo tanto, nos gusta pensar de tiempo de ejecución como, supongamos 1908 01:23:39,350 --> 01:23:42,340 aumentamos el tamaño de nuestra estructura de datos, cuánto tiempo más 1909 01:23:42,340 --> 01:23:44,580 se va a tomar? 1910 01:23:44,580 --> 01:23:47,372 En este caso, si añadimos un montón más científicos, no importa. 1911 01:23:47,372 --> 01:23:49,413 Todavía va a tomar la misma cantidad de tiempo. 1912 01:23:49,413 --> 01:23:50,350 Es tiempo constante. 1913 01:23:50,350 --> 01:23:50,850 Sí. 1914 01:23:50,850 --> 01:23:53,557 >> AUDIENCIA: ¿Cómo lo sabes para escanear a través de los otros números? 1915 01:23:53,557 --> 01:23:54,932 ALTAVOZ 1: ¿Cómo sé cómo a-- 1916 01:23:54,932 --> 01:23:58,236 AUDIENCIA: Al igual que ¿cómo sabes que vaya directamente desde M hasta E y no a M a A? 1917 01:23:58,236 --> 01:23:59,069 ALTAVOZ 1: Oh, claro. 1918 01:23:59,069 --> 01:24:01,620 Porque yo sabía que estaba en busca de la palabra Mandel, 1919 01:24:01,620 --> 01:24:04,195 y yo sólo sé que es M-E. Así que-- sí, adelante. 1920 01:24:04,195 --> 01:24:06,528 AUDIENCIA: ¿No tienes para mirar las otras letras 1921 01:24:06,528 --> 01:24:07,870 en el resto de la [inaudible]? 1922 01:24:07,870 --> 01:24:10,020 >> ALTAVOZ 1: Ah, no iba a tener mirar el-- OK, genial. 1923 01:24:10,020 --> 01:24:10,790 Esta es una gran pregunta. 1924 01:24:10,790 --> 01:24:12,170 Depende de cómo lo implementamos. 1925 01:24:12,170 --> 01:24:15,350 Si ponemos en práctica sólo como como una serie de matrices 1926 01:24:15,350 --> 01:24:18,100 donde sabemos que E es siempre en la posición 0, 1927 01:24:18,100 --> 01:24:21,270 No sé, lo que sea índice de serie se encuentra en. 1928 01:24:21,270 --> 01:24:24,901 Sí, acabamos de hacer constante tiempo, hacer, hacer, hacer, hacer. 1929 01:24:24,901 --> 01:24:25,400 Guay. 1930 01:24:25,400 --> 01:24:27,556 Pregunta por ahí? 1931 01:24:27,556 --> 01:24:30,927 >> AUDIENCIA: ¿Es constante de tiempo lo mismo que en tiempo real? 1932 01:24:30,927 --> 01:24:33,260 ALTAVOZ 1: ¿Es constante de tiempo lo mismo es en tiempo real? 1933 01:24:33,260 --> 01:24:34,799 No estoy realmente seguro en tiempo real es. 1934 01:24:34,799 --> 01:24:36,965 AUDIENCIA: tiempo igual que literalmente progresa segundos 1935 01:24:36,965 --> 01:24:40,150 por segundo en lugar de ser una variable independiente. 1936 01:24:40,150 --> 01:24:42,960 >> ALTAVOZ 1: Oh, sí, puede pensar de esa manera. 1937 01:24:42,960 --> 01:24:46,240 En otras palabras, no es dependiente en el tamaño de la estructura de datos. 1938 01:24:46,240 --> 01:24:48,310 Esa es una manera de pensar en él. 1939 01:24:48,310 --> 01:24:50,510 ¿Alguna otra pregunta? 1940 01:24:50,510 --> 01:24:53,120 Tal vez en la primera vez en historia, terminamos a tiempo. 1941 01:24:53,120 --> 01:24:57,080 Si usted tiene alguna pregunta, libre de venir pedirnos, vaya a la sección, 1942 01:24:57,080 --> 01:25:00,190 hable con su TFS, oficina hora es de 8:00 y 8:30 1943 01:25:00,190 --> 01:25:03,985 a 11:00 los lunes y martes, así es un momento poco diferente, 1944 01:25:03,985 --> 01:25:05,110 así que asegúrate de tener en cuenta que. 1945 01:25:05,110 --> 01:25:06,048 Sí. 1946 01:25:06,048 --> 01:25:08,673 >> AUDIENCIA: ¿Necesitamos saber cosas como argumentos de la línea de comandos, 1947 01:25:08,673 --> 01:25:10,360 ls dash, dash lo que sea? 1948 01:25:10,360 --> 01:25:11,840 >> ALTAVOZ 1: Línea de comandos argumentos y comandos de Linux, 1949 01:25:11,840 --> 01:25:13,010 sí, usted necesita saber eso. 1950 01:25:13,010 --> 01:25:18,234 Very-- es como el tipo de nivel cosas que cubrimos en la sección 0, 1951 01:25:18,234 --> 01:25:19,400 en cuanto a los comandos de Linux marcha. 1952 01:25:19,400 --> 01:25:20,942 >> AUDIENCIA: ¿Son las horas en Annenberg? 1953 01:25:20,942 --> 01:25:23,525 ALTAVOZ 1: Las horas de oficina, no estoy todo seguro de dónde se encuentren. 1954 01:25:23,525 --> 01:25:25,980 Pero usted puede comprobar el sitio web, y le dirá. 1955 01:25:25,980 --> 01:25:27,499