1 00:00:00,000 --> 00:00:00,960 2 00:00:00,960 --> 00:00:03,360 >> [REPRODUCCIÓN DE MÚSICA] 3 00:00:03,360 --> 00:00:11,050 4 00:00:11,050 --> 00:00:12,065 >> DAVIN: Muy bien, chicos. 5 00:00:12,065 --> 00:00:13,642 6 00:00:13,642 --> 00:00:15,350 Así que esta es la opinión para la primera prueba. 7 00:00:15,350 --> 00:00:17,751 Es todo el mundo listo para la prueba del miércoles? 8 00:00:17,751 --> 00:00:18,292 ALLISON: Woo! 9 00:00:18,292 --> 00:00:18,743 ESTUDIANTE: Woo! 10 00:00:18,743 --> 00:00:19,242 DAVIN: Sí. 11 00:00:19,242 --> 00:00:19,920 ALLISON: ¡Sí! 12 00:00:19,920 --> 00:00:20,920 DAVIN: está listo Ese chico. 13 00:00:20,920 --> 00:00:22,200 Ese tipo, dos manos, agradable. 14 00:00:22,200 --> 00:00:23,234 15 00:00:23,234 --> 00:00:25,900 Así opinión concurso hoy, va en alrededor de una hora y media. 16 00:00:25,900 --> 00:00:27,940 Vamos a repasar todos los grandes conceptos que usted debe saber para el examen. 17 00:00:27,940 --> 00:00:31,434 Vamos a repasar algunos de codificación por ejemplos de la mano, que están en cada concurso. 18 00:00:31,434 --> 00:00:34,350 Y si usted tiene preguntas, no dude en a levantar la mano y todo 19 00:00:34,350 --> 00:00:34,945 de esa manera. 20 00:00:34,945 --> 00:00:36,695 Bueno, la logística sobre la prueba está en línea. 21 00:00:36,695 --> 00:00:38,450 Así que vamos a dividir la gente hasta en diferentes habitaciones. 22 00:00:38,450 --> 00:00:39,491 Se basa en su nombre. 23 00:00:39,491 --> 00:00:43,630 Así que si usted tiene alguna pregunta acerca de dónde ir o acerca de qué material es, como, 24 00:00:43,630 --> 00:00:46,810 la palabra oficial sobre lo que está pasando para estar en el concurso, comprobar en línea. 25 00:00:46,810 --> 00:00:48,420 Y eso es todo hasta la fecha. 26 00:00:48,420 --> 00:00:51,280 Así que si no hay más preguntas a empezar, vamos a empezar. 27 00:00:51,280 --> 00:00:52,790 28 00:00:52,790 --> 00:00:53,710 Y aquí está Allison. 29 00:00:53,710 --> 00:00:56,060 30 00:00:56,060 --> 00:00:57,000 >> [CLAPS] 31 00:00:57,000 --> 00:00:59,300 >> ALLISON: OK, gracias, Rob. 32 00:00:59,300 --> 00:01:00,280 Apreciarlo. 33 00:01:00,280 --> 00:01:01,350 34 00:01:01,350 --> 00:01:03,050 Davin debería haber volteado a esto. 35 00:01:03,050 --> 00:01:07,240 Esta es la lista no exhaustiva de temas, como siempre, como acaba de decir Davin. 36 00:01:07,240 --> 00:01:10,860 Consulte la documentación en línea sobre concurso cero. 37 00:01:10,860 --> 00:01:13,680 Pero esto es bastante mucho-- que está en el plan de estudios 38 00:01:13,680 --> 00:01:15,550 es todo lo que hemos repasado hasta el momento. 39 00:01:15,550 --> 00:01:18,290 Aquí todo es juego limpio, así como cualquier otra cosa 40 00:01:18,290 --> 00:01:21,380 que pueden haber sido mencionado en la conferencia. 41 00:01:21,380 --> 00:01:25,070 >> Mi sección, aquí, es sólo un montón de revisión. 42 00:01:25,070 --> 00:01:27,775 Hay un par de ejercicios que ustedes podrían trabajar. 43 00:01:27,775 --> 00:01:30,650 Pero en su mayor parte, de verdad quieren llegar a Davin con los código 44 00:01:30,650 --> 00:01:31,710 por ejercicios de manos. 45 00:01:31,710 --> 00:01:33,940 >> Así que me voy a volar a través de este. 46 00:01:33,940 --> 00:01:36,330 Si usted tiene alguna pregunta, por detenerme. 47 00:01:36,330 --> 00:01:37,270 Levante su mano. 48 00:01:37,270 --> 00:01:39,250 Te prometo probablemente veré. 49 00:01:39,250 --> 00:01:41,042 Si no, sólo agitarlo alrededor. 50 00:01:41,042 --> 00:01:42,250 Voy a estar hablando rápido. 51 00:01:42,250 --> 00:01:43,950 Espero que todo el mundo está de acuerdo con eso. 52 00:01:43,950 --> 00:01:48,020 >> Aceptar, palabra especial, Davin, obviamente, se olvidó de dar la vuelta a través de estas diapositivas. 53 00:01:48,020 --> 00:01:51,880 [Risas] Usted está en problemas, el hombre. 54 00:01:51,880 --> 00:01:55,770 Así consejos para concurso cero, practicar la codificación en el papel. 55 00:01:55,770 --> 00:01:58,950 Ustedes van a conseguir un poco de practicar con que ahora con Davin, 56 00:01:58,950 --> 00:02:00,655 por lo que no estará completamente por sí mismo. 57 00:02:00,655 --> 00:02:03,030 Creo que estamos en realidad va a través de estas dos funciones. 58 00:02:03,030 --> 00:02:04,500 Así que usted estará bien preparado allí. 59 00:02:04,500 --> 00:02:05,958 >> Estar familiarizado con los conjuntos de problemas. 60 00:02:05,958 --> 00:02:08,150 Ha habido preguntas en concursos anteriores 61 00:02:08,150 --> 00:02:12,680 que le pedirá que, por ejemplo, para codificar algo muy similar a Mario. 62 00:02:12,680 --> 00:02:15,060 Así que estar muy familiarizado con su problema se pone, así 63 00:02:15,060 --> 00:02:17,827 como las preguntas le pedimos en un principio en el formulario 64 00:02:17,827 --> 00:02:19,660 que llene, voluntad servirle muy bien. 65 00:02:19,660 --> 00:02:20,940 66 00:02:20,940 --> 00:02:23,380 >> Haga una prueba previa bajo las limitaciones de tiempo. 67 00:02:23,380 --> 00:02:25,430 Estas pruebas son largas. 68 00:02:25,430 --> 00:02:26,850 El tiempo pasa muy rápido. 69 00:02:26,850 --> 00:02:30,480 Y, a menudo, no se dan cuenta de cómo rápido se va hasta que realmente 70 00:02:30,480 --> 00:02:32,180 ponerse bajo esas restricciones. 71 00:02:32,180 --> 00:02:36,500 Así que si usted puede tallar, ya sabes, De 75 minutos, ya sea esta noche o mañana 72 00:02:36,500 --> 00:02:41,020 a tomar uno de estos exámenes bajo que, usted estará en mucha mejor forma. 73 00:02:41,020 --> 00:02:43,060 >> Y también, la creación de su hoja de referencia. 74 00:02:43,060 --> 00:02:45,290 Recuerde, usted consigue uno página delantera y trasera 75 00:02:45,290 --> 00:02:47,040 como referencia para su examen el miércoles. 76 00:02:47,040 --> 00:02:49,074 Creación que es una gran manera de estudiar. 77 00:02:49,074 --> 00:02:51,990 Cualquier cosa que usted está teniendo problemas para con que desea incluir en allí. 78 00:02:51,990 --> 00:02:55,627 Cualquier cosa que sus TFS han sido, como, esto es realmente importante. 79 00:02:55,627 --> 00:02:57,960 Usted debe saber esto, son tal vez las cosas que tienen allí 80 00:02:57,960 --> 00:02:59,931 si no los tiene memorizado. 81 00:02:59,931 --> 00:03:02,680 Incluso si usted sabe que realmente así, a veces teniendo que allí 82 00:03:02,680 --> 00:03:07,030 es sólo un poco de comodidad para usted, que sé que pruebas son estresantes. 83 00:03:07,030 --> 00:03:09,260 Así que cualquier comodidad se obtiene puede ayudar. 84 00:03:09,260 --> 00:03:13,072 Muy bien, también, conseguir el sueño y comer y gustar las cosas normales 85 00:03:13,072 --> 00:03:14,280 que les decimos a los cuestionarios. 86 00:03:14,280 --> 00:03:16,320 87 00:03:16,320 --> 00:03:18,890 >> Así que a partir de fácil, tipos y tamaños de datos. 88 00:03:18,890 --> 00:03:22,720 Como ya he dicho, esto es sólo va ser yo tirando un montón de cosas 89 00:03:22,720 --> 00:03:24,320 hasta aquí que usted debe saber. 90 00:03:24,320 --> 00:03:27,600 Así que tenemos nuestros caracteres que son un byte, enteros 91 00:03:27,600 --> 00:03:30,390 que son cuatro bytes, a largo de largo, que son ocho bytes. 92 00:03:30,390 --> 00:03:33,280 Básicamente, es sólo usted que desee mantener enteros grandes. 93 00:03:33,280 --> 00:03:35,490 Carrozas, que son cuatro, dobles, que son ocho. 94 00:03:35,490 --> 00:03:38,150 Una vez más, sólo le da más espacio para sus carrozas. 95 00:03:38,150 --> 00:03:41,290 Y a continuación, escriba la estrella, por lo que cualquier puntero en una máquina de 32 bits, 96 00:03:41,290 --> 00:03:44,650 que es todo lo que ustedes necesitan a saber, es de cuatro bytes. 97 00:03:44,650 --> 00:03:46,542 >> Así que todas las cosas que usted debe sé, tal vez las cosas 98 00:03:46,542 --> 00:03:48,250 usted quiere tener en su hoja de referencia. 99 00:03:48,250 --> 00:03:50,350 100 00:03:50,350 --> 00:03:53,520 Aceptar, la conversión binario a binario, la conversión 101 00:03:53,520 --> 00:03:56,860 a hexadecimal, de ida y vuelta, todas las cosas que usted debe saber. 102 00:03:56,860 --> 00:03:59,480 Así de binario a decimal. 103 00:03:59,480 --> 00:04:03,309 ¿Quieren tomar un minuto rápida y tratar de averiguar cada uno de estos 104 00:04:03,309 --> 00:04:04,600 y luego me dicen lo que son? 105 00:04:04,600 --> 00:04:06,500 106 00:04:06,500 --> 00:04:10,240 >> También tengo caramelos en el bolso, por lo que cualquiera quien responde consigue dulces, por cierto. 107 00:04:10,240 --> 00:04:13,560 108 00:04:13,560 --> 00:04:14,480 Y tengo mucha. 109 00:04:14,480 --> 00:04:15,760 110 00:04:15,760 --> 00:04:16,870 Permítanme aprovechar esta. 111 00:04:16,870 --> 00:04:18,480 Yo voy a dar esto a Gabe. 112 00:04:18,480 --> 00:04:21,829 Así que usted puede repartir caramelos a el que es agradable y cooperativo. 113 00:04:21,829 --> 00:04:23,490 >> OK, yo vi una mano que hay en la parte posterior. 114 00:04:23,490 --> 00:04:26,418 115 00:04:26,418 --> 00:04:28,370 >> ESTUDIANTE: Sí, el primero es 42. 116 00:04:28,370 --> 00:04:30,280 >> ALLISON: Sí, primero es 42, correcto. 117 00:04:30,280 --> 00:04:31,163 118 00:04:31,163 --> 00:04:32,038 ESTUDIANTE: [inaudible]. 119 00:04:32,038 --> 00:04:34,810 [Risas] 120 00:04:34,810 --> 00:04:37,030 ALLISON: Segunda uno, allí en amarillo? 121 00:04:37,030 --> 00:04:38,910 ESTUDIANTE: 110010. 122 00:04:38,910 --> 00:04:43,410 ALLISON: Así es, y esto último, aquí en la parte inferior? 123 00:04:43,410 --> 00:04:44,570 También, sí, usted sabe que quiere? 124 00:04:44,570 --> 00:04:45,550 Simplemente tirar caramelos. 125 00:04:45,550 --> 00:04:46,483 ¿Qué hay de caramelos para todos? 126 00:04:46,483 --> 00:04:47,510 >> ESTUDIANTE: [inaudible] cuando hayamos terminado. 127 00:04:47,510 --> 00:04:48,051 >> ALLISON: Shh. 128 00:04:48,051 --> 00:04:49,380 129 00:04:49,380 --> 00:04:50,910 Y luego la última. 130 00:04:50,910 --> 00:04:52,000 ¿Quién quiere contestar? 131 00:04:52,000 --> 00:04:52,744 Justo ahí. 132 00:04:52,744 --> 00:04:54,480 >> ESTUDIANTE: 11100. 133 00:04:54,480 --> 00:04:56,820 >> ALLISON: 11100, mira eso. 134 00:04:56,820 --> 00:04:58,790 Felicitaciones, gran trabajo, todo el mundo. 135 00:04:58,790 --> 00:05:03,370 Aceptar, todos tipo de comprender el proceso para hacer esto? 136 00:05:03,370 --> 00:05:08,700 Has, al pasar de binario a decimal la manera en que yo tiendo a hacerlo, está escribiendo a 137 00:05:08,700 --> 00:05:09,920 las potencias de 2. 138 00:05:09,920 --> 00:05:18,350 Por eso digo, OK, 0 veces 2 a 0, por lo que que es 0, 1 2 veces a la primera, 139 00:05:18,350 --> 00:05:21,400 2 es ir adelante de esa manera. 140 00:05:21,400 --> 00:05:25,790 ¿Alguien me quiere explícitamente ir a través de un ejemplo de binario? 141 00:05:25,790 --> 00:05:26,840 142 00:05:26,840 --> 00:05:28,140 Aceptar, fresco. 143 00:05:28,140 --> 00:05:30,390 >> Decimal a binario es muy similar. 144 00:05:30,390 --> 00:05:31,550 145 00:05:31,550 --> 00:05:33,630 Tiendo a escribir las potencias de 2. 146 00:05:33,630 --> 00:05:38,660 Comience con el que es el más grande, pero no va más allá de la decimal 147 00:05:38,660 --> 00:05:39,710 que usted está buscando. 148 00:05:39,710 --> 00:05:42,870 Y a continuación, tipo de su forma de trabajo añadiendo al revés las cosas como sea necesario. 149 00:05:42,870 --> 00:05:45,200 >> Y a continuación, con la adición, es Además como normal. 150 00:05:45,200 --> 00:05:51,110 Si alguna vez tienes el caso de que usted es añadiendo dos 1s, es obvio que se convierte en 2. 151 00:05:51,110 --> 00:05:56,875 2 en binario es ahora 1 0 por lo que necesita para llevar su 1 en la siguiente columna. 152 00:05:56,875 --> 00:05:57,375 Enfriar. 153 00:05:57,375 --> 00:05:59,220 154 00:05:59,220 --> 00:06:03,240 >> Hexadecimal, esto podría ser algo que es ligeramente menos familiarizados. 155 00:06:03,240 --> 00:06:06,600 Así como Rob simplemente me estaba diciendo de antemano, su truco para este 156 00:06:06,600 --> 00:06:10,210 es simplemente dividirlo en cuatro trozos de bytes, ¿de acuerdo? 157 00:06:10,210 --> 00:06:11,050 Bits, lo siento. 158 00:06:11,050 --> 00:06:11,720 ¿Ven? 159 00:06:11,720 --> 00:06:12,220 Gracias Rob. 160 00:06:12,220 --> 00:06:15,874 Esto es por qué estás aquí. [RUIDO] Aceptar, por lo que acaba de romper para arriba 161 00:06:15,874 --> 00:06:16,790 en cuatro trozos bits. 162 00:06:16,790 --> 00:06:21,570 Así que con los binarios a hexadecimal, nos fijamos en los primeros 4, 163 00:06:21,570 --> 00:06:25,573 que es si tenemos cuatro 1s en un fila, ¿qué número ¿eso simbolizan? 164 00:06:25,573 --> 00:06:26,540 >> ESTUDIANTE: F. 165 00:06:26,540 --> 00:06:32,751 >> ALLISON: Así que en este caso, lo que es 11111111 o-- sí? 166 00:06:32,751 --> 00:06:33,250 ESTUDIANTE: FF. 167 00:06:33,250 --> 00:06:34,600 ALLISON: Perfecto, FF. 168 00:06:34,600 --> 00:06:36,900 Tan grande, caramelo para usted. 169 00:06:36,900 --> 00:06:41,100 Ahora, por la forma en hexadecimal a binario, que sólo pensar en que tipo de a la inversa. 170 00:06:41,100 --> 00:06:46,420 Para cada número o letra que que tenemos en nuestra hexadecimal, 171 00:06:46,420 --> 00:06:53,930 simplemente convertirlo a sus cuatro bits [Risas] para su conversión de cuatro bits. 172 00:06:53,930 --> 00:06:58,696 Así que 5, en este caso, lo que es 5 si estamos representando con cuatro bits? 173 00:06:58,696 --> 00:06:59,608 >> ESTUDIANTE: 010? 174 00:06:59,608 --> 00:07:00,520 Mm-hm. 175 00:07:00,520 --> 00:07:03,605 Y entonces A, que es en realidad 10, que sería? 176 00:07:03,605 --> 00:07:06,230 177 00:07:06,230 --> 00:07:08,040 1010. 178 00:07:08,040 --> 00:07:09,670 Así tenemos que, aquí. 179 00:07:09,670 --> 00:07:13,990 Así que la conversión entre hexadecimal y binarios en realidad no es tan malo. 180 00:07:13,990 --> 00:07:16,565 Si nos fijamos en que en cuatro bits trozos, van a ser de oro. 181 00:07:16,565 --> 00:07:18,330 182 00:07:18,330 --> 00:07:19,300 Everyone-- sí? 183 00:07:19,300 --> 00:07:21,903 >> ROB: Esto es una tontería, pero yo siempre recuerdo 184 00:07:21,903 --> 00:07:23,500 A, ya que A supone que es 10. 185 00:07:23,500 --> 00:07:26,230 Y binario sólo 10 10, así que-- 186 00:07:26,230 --> 00:07:27,310 >> ALLISON: Ah, ahí vamos. 187 00:07:27,310 --> 00:07:28,615 >> ROB: Hey. 188 00:07:28,615 --> 00:07:30,020 >> ALLISON: Hey, dulces para Rob. 189 00:07:30,020 --> 00:07:31,707 190 00:07:31,707 --> 00:07:33,290 Hay cosas que no es chocolate en allí. 191 00:07:33,290 --> 00:07:34,180 Así que usted puede tener alguna. 192 00:07:34,180 --> 00:07:35,790 193 00:07:35,790 --> 00:07:36,760 Así matemáticas ASCII. 194 00:07:36,760 --> 00:07:38,206 195 00:07:38,206 --> 00:07:38,705 Comportarse. 196 00:07:38,705 --> 00:07:40,630 197 00:07:40,630 --> 00:07:44,720 Así matemáticas ASCII, como ustedes probablemente bien recordar 198 00:07:44,720 --> 00:07:48,480 P puesto 2 con Visioneer y César, que hizo mucho de esto. 199 00:07:48,480 --> 00:07:49,610 200 00:07:49,610 --> 00:07:51,980 Recuerde, los personajes son fundamentalmente sólo números. 201 00:07:51,980 --> 00:07:54,780 Así que podemos hacer operaciones matemáticas con ellos, al igual que hacemos matemáticas con enteros. 202 00:07:54,780 --> 00:07:58,090 >> Así que tenemos un poco cosa simple aquí. 203 00:07:58,090 --> 00:08:00,940 Tenemos algunos en A eso es inicializado a 65. 204 00:08:00,940 --> 00:08:07,440 Y B igual al valor ASCII de A más 1, char C igual a D menos 1, 205 00:08:07,440 --> 00:08:09,060 y Char D igual a 68. 206 00:08:09,060 --> 00:08:13,130 Así que vamos a imprimir todos ellos, como vemos aquí. 207 00:08:13,130 --> 00:08:15,650 Y puede alguien decirme lo que esto va a imprimir? 208 00:08:15,650 --> 00:08:17,335 209 00:08:17,335 --> 00:08:18,210 ESTUDIANTE: [inaudible]. 210 00:08:18,210 --> 00:08:20,540 ALLISON: Exactamente, así que Una cosa a notar es 211 00:08:20,540 --> 00:08:22,900 que estamos imprimiendo a cabo caracteres cada vez, aquí. 212 00:08:22,900 --> 00:08:28,290 Nosotros designamos a pesar de que A y B son enteros cuando les declaramos anteriormente. 213 00:08:28,290 --> 00:08:32,870 Les estamos imprimiendo como caracteres por el porcentaje de C y nuestra declaración de printf, 214 00:08:32,870 --> 00:08:34,610 por lo que todos se imprimirán como personajes. 215 00:08:34,610 --> 00:08:40,730 Y, por supuesto, la voluntad valor ASCII 65 imprimir como A. El valor ASCII de A más 1 216 00:08:40,730 --> 00:08:43,669 sería 66, lo que haría orgullosos de B. Así que, de hecho, nos 217 00:08:43,669 --> 00:08:49,107 llegar A B C D Todo el mundo bien allí? 218 00:08:49,107 --> 00:08:49,690 ¿Alguna pregunta? 219 00:08:49,690 --> 00:08:50,721 220 00:08:50,721 --> 00:08:51,220 Impresionante. 221 00:08:51,220 --> 00:08:52,500 222 00:08:52,500 --> 00:08:53,455 >> Aceptar, ámbito de aplicación. 223 00:08:53,455 --> 00:08:55,090 224 00:08:55,090 --> 00:08:59,950 Así es obviamente un alcance muy Lo importante de entender, aquí. 225 00:08:59,950 --> 00:09:03,250 Muchos de ustedes, si tiene errores de compilación, 226 00:09:03,250 --> 00:09:06,085 y dice que no tiene el acceso a alguna variable, 227 00:09:06,085 --> 00:09:08,540 es probable que sea porque usted definido dentro de un bucle 228 00:09:08,540 --> 00:09:12,210 y luego trató de acceder a ella fuera de él, o viceversa. 229 00:09:12,210 --> 00:09:16,410 >> Así que alcance en su núcleo, sólo determina dónde 230 00:09:16,410 --> 00:09:20,800 decimos que existe una variable, en el que puede cambiarlo, en el que podemos acceder a ella. 231 00:09:20,800 --> 00:09:24,550 Es sólo un poco de decir estos son los únicos lugares donde se tiene acceso 232 00:09:24,550 --> 00:09:26,060 a esta variable. 233 00:09:26,060 --> 00:09:30,080 >> Así que los dos ámbitos que hablamos durante la clase son globales y locales. 234 00:09:30,080 --> 00:09:35,080 Así que las variables globales que hablamos cuando usted los está definiendo por encima de principal. 235 00:09:35,080 --> 00:09:38,390 Esto significa que toda su programa tiene acceso a ella, 236 00:09:38,390 --> 00:09:42,090 y existe durante el tiempo como se ejecuta el programa, ¿de acuerdo? 237 00:09:42,090 --> 00:09:45,100 Local significa que es más confinado a una región. 238 00:09:45,100 --> 00:09:50,520 Así que cada vez que tenga funciones específicas como swap, que siempre hablamos. 239 00:09:50,520 --> 00:09:54,380 Siempre hablamos de swap con A y B. A y B existen dentro de esa función. 240 00:09:54,380 --> 00:09:55,690 No existen en ningún otro lugar. 241 00:09:55,690 --> 00:09:56,860 242 00:09:56,860 --> 00:10:00,610 >> Además, cuando se tiene si declaraciones o para bucles. 243 00:10:00,610 --> 00:10:04,670 Siempre que tenemos, por ejemplo, en un bucle for tenemos int I es igual a 0. 244 00:10:04,670 --> 00:10:06,630 Tenemos un poco de condición y lo actualizamos. 245 00:10:06,630 --> 00:10:10,270 Yo sólo existe dentro de la llaves de ese bucle. 246 00:10:10,270 --> 00:10:13,270 Si intenta acceder a él en otro lugar, su compilador sería gritar a usted. 247 00:10:13,270 --> 00:10:14,560 Sería como, ¿qué estás tratando de hacer? 248 00:10:14,560 --> 00:10:15,400 Esto no existe. 249 00:10:15,400 --> 00:10:16,644 250 00:10:16,644 --> 00:10:18,435 Así que ese es el dos diferentes tipos de alcance. 251 00:10:18,435 --> 00:10:19,486 252 00:10:19,486 --> 00:10:20,860 ¿Eso tiene sentido para todo el mundo? 253 00:10:20,860 --> 00:10:23,870 254 00:10:23,870 --> 00:10:27,890 >> Así, por ejemplo, aquí, esta es sólo un programa simple. 255 00:10:27,890 --> 00:10:29,120 256 00:10:29,120 --> 00:10:32,890 ¿Qué piensan ustedes es va a pasar en cada punto 257 00:10:32,890 --> 00:10:34,210 que tratamos de imprimir? 258 00:10:34,210 --> 00:10:40,150 Así que este de aquí, lo que va a pasar? 259 00:10:40,150 --> 00:10:43,047 260 00:10:43,047 --> 00:10:44,255 ESTUDIANTE: Se imprimirá tres. 261 00:10:44,255 --> 00:10:44,880 ALLISON: Derecho. 262 00:10:44,880 --> 00:10:45,930 Se va a imprimir tres. 263 00:10:45,930 --> 00:10:47,272 ¿Qué pasa aquí? 264 00:10:47,272 --> 00:10:48,230 ESTUDIANTE: No funcionará. 265 00:10:48,230 --> 00:10:48,910 ALLISON: No funcionará. 266 00:10:48,910 --> 00:10:50,290 Usted está fuera de alcance, ¿no? 267 00:10:50,290 --> 00:10:55,160 No existe la variable local fuera de estos apoyos, ¿de acuerdo? 268 00:10:55,160 --> 00:10:56,462 Y entonces ¿qué pasa aquí? 269 00:10:56,462 --> 00:10:57,850 >> ESTUDIANTE: [inaudible]. 270 00:10:57,850 --> 00:10:59,210 >> ALLISON: ¿Qué? 271 00:10:59,210 --> 00:10:59,900 Rob, vaya. 272 00:10:59,900 --> 00:11:00,854 >> ROB: Me acaba de decir. 273 00:11:00,854 --> 00:11:04,200 Las variables globales deben ser variables subrayado mundial. 274 00:11:04,200 --> 00:11:05,660 >> ALLISON: Ah, sí, lo siento. 275 00:11:05,660 --> 00:11:06,200 Gracias, Rob. 276 00:11:06,200 --> 00:11:07,480 277 00:11:07,480 --> 00:11:10,170 Rob es como nuestro compilador residente. 278 00:11:10,170 --> 00:11:12,684 Él sólo va a gritar a nosotros cuando nos necesitarlo. [Risas] Sí, que 279 00:11:12,684 --> 00:11:14,225 debe ser variable de subrayado global. 280 00:11:14,225 --> 00:11:15,760 281 00:11:15,760 --> 00:11:18,430 Así que asumiendo que fue subrayado mundial 282 00:11:18,430 --> 00:11:20,260 variables, lo que va a pasar aquí? 283 00:11:20,260 --> 00:11:21,260 ESTUDIANTE: Eso va a trabajar. 284 00:11:21,260 --> 00:11:22,093 ALLISON: Se va a trabajar. 285 00:11:22,093 --> 00:11:24,655 Así que va a imprimir, por lo que sólo un ejemplo muy simple. 286 00:11:24,655 --> 00:11:27,650 287 00:11:27,650 --> 00:11:29,870 Aceptar, prototipos. 288 00:11:29,870 --> 00:11:33,680 Así que, obviamente, realmente resaltar para ustedes 289 00:11:33,680 --> 00:11:36,460 para hacer funciones si tener sentido en sus programas. 290 00:11:36,460 --> 00:11:38,460 Pero, por supuesto, cuando usted hacer sus propias funciones, 291 00:11:38,460 --> 00:11:40,930 normalmente se le define después de principal. 292 00:11:40,930 --> 00:11:42,430 Y usted intenta llamar a ellos en principal. 293 00:11:42,430 --> 00:11:46,030 Y si usted no utiliza un prototipo, su compilador gritarte. 294 00:11:46,030 --> 00:11:49,590 >> Prototype es básicamente simplemente decirle a su compilador 295 00:11:49,590 --> 00:11:52,400 que tengo esta función por debajo principal. 296 00:11:52,400 --> 00:11:54,970 Voy a llamarlo antes de que yo lo defino. 297 00:11:54,970 --> 00:11:56,360 Sólo espera. 298 00:11:56,360 --> 00:12:00,660 Te prometo que está definido, y que tendrá todo lo que necesita. 299 00:12:00,660 --> 00:12:05,900 >> Así que la forma en que hacemos es sólo su declaración tipo, el nombre de la función, su entrada 300 00:12:05,900 --> 00:12:06,400 lista. 301 00:12:06,400 --> 00:12:09,760 Se trata básicamente de la primera línea de su declaración de la función. 302 00:12:09,760 --> 00:12:11,510 Es realmente todo lo que es. 303 00:12:11,510 --> 00:12:14,440 Pero esto es sólo una tipo general de formato. 304 00:12:14,440 --> 00:12:17,220 >> Así que en nuestro ejemplo aquí, que ustedes deben 305 00:12:17,220 --> 00:12:19,700 han visto en la sección en algún momento, tenemos 306 00:12:19,700 --> 00:12:23,220 int cubo que algunos toma algún int de entrada. 307 00:12:23,220 --> 00:12:25,870 Y tenemos nuestra principal función, que llama cubo. 308 00:12:25,870 --> 00:12:28,670 Y cubo se define después de los hechos. 309 00:12:28,670 --> 00:12:34,450 >> Así que si no teníamos entrada int cubo en la parte superior, cuando llamamos cubo 310 00:12:34,450 --> 00:12:36,620 dentro de principal, nuestro compilador se enoje con nosotros. 311 00:12:36,620 --> 00:12:38,890 Sería como, lo que De que estas hablando? 312 00:12:38,890 --> 00:12:40,360 Cube no existe. 313 00:12:40,360 --> 00:12:41,910 No sé lo que estás pidiendo. 314 00:12:41,910 --> 00:12:43,490 Y yo sólo voy parada. 315 00:12:43,490 --> 00:12:47,330 >> Pero debido a que hicimos nuestro prototipo en la parte superior, lo hemos dicho, 316 00:12:47,330 --> 00:12:49,800 ya sabes, cuando ves cubo, no se preocupe por ello. 317 00:12:49,800 --> 00:12:51,990 Te prometo que está definido más adelante. 318 00:12:51,990 --> 00:12:53,750 Y te dejaré hacer lo que quiera. 319 00:12:53,750 --> 00:12:57,750 Así que si alguna vez tiene una función que se declara después de que usted le llama 320 00:12:57,750 --> 00:13:00,570 por primera vez, es necesario lo tiene un prototipo en la parte superior. 321 00:13:00,570 --> 00:13:01,640 322 00:13:01,640 --> 00:13:02,720 >> ¿Sí? 323 00:13:02,720 --> 00:13:04,412 >> ROB: Se cuadró, no cubicación. 324 00:13:04,412 --> 00:13:05,855 >> ALLISON: Oh mi Dios. 325 00:13:05,855 --> 00:13:09,435 Yo no tener-- Gabe, pensé usted era nuestro corrector de pruebas. 326 00:13:09,435 --> 00:13:10,740 327 00:13:10,740 --> 00:13:12,760 OK chicos, tengan paciencia conmigo, aquí. 328 00:13:12,760 --> 00:13:14,440 Espero que todo el mundo está haciendo a la idea. 329 00:13:14,440 --> 00:13:15,560 330 00:13:15,560 --> 00:13:20,380 Aceptar, por lo que este debe tener sido ajustado, no en cubos. 331 00:13:20,380 --> 00:13:22,700 Pero la idea sigue siendo la misma. 332 00:13:22,700 --> 00:13:23,702 333 00:13:23,702 --> 00:13:26,660 Cualquier función que estamos llamando después el hecho debe tener un prototipo. 334 00:13:26,660 --> 00:13:27,730 335 00:13:27,730 --> 00:13:28,970 Todo el mundo bien con eso? 336 00:13:28,970 --> 00:13:30,730 337 00:13:30,730 --> 00:13:32,310 Cualesquiera otros errores tipográficos? 338 00:13:32,310 --> 00:13:32,810 Okay. 339 00:13:32,810 --> 00:13:34,730 340 00:13:34,730 --> 00:13:36,230 Cualquier errores tipográficos aquí antes de empezar, Rob? 341 00:13:36,230 --> 00:13:37,356 342 00:13:37,356 --> 00:13:42,380 [Risas] OK, así estructuras. 343 00:13:42,380 --> 00:13:45,040 Básicamente, estructuras que permiten para crear su propio tipo de datos. 344 00:13:45,040 --> 00:13:49,264 Tanto como un int o un char o un flotador, es sólo otro tipo. 345 00:13:49,264 --> 00:13:51,680 Me gusta pensar en ello como, como, crear su propio tipo de datos. 346 00:13:51,680 --> 00:13:53,740 Por lo tanto, le permite hacer eso. 347 00:13:53,740 --> 00:13:56,160 Y tiene diferentes tipos de datos. 348 00:13:56,160 --> 00:14:01,030 >> Así que si usted recuerda, en una matriz, que sólo puede contener las cosas de tipo similar. 349 00:14:01,030 --> 00:14:04,660 Las estructuras nos permiten contener múltiples cosas de diferentes tipos. 350 00:14:04,660 --> 00:14:08,944 Así que en este caso aquí, tener una estructura denominada Estudiante, 351 00:14:08,944 --> 00:14:10,650 llamado aquí en la parte inferior. 352 00:14:10,650 --> 00:14:13,540 Y tenemos algunas Identificación del int y algún nombre de la cadena. 353 00:14:13,540 --> 00:14:14,620 354 00:14:14,620 --> 00:14:17,300 Así que este es sólo otro tipo de datos. 355 00:14:17,300 --> 00:14:18,950 Ahora tenemos un tipo de datos llamado Student. 356 00:14:18,950 --> 00:14:20,330 357 00:14:20,330 --> 00:14:24,750 >> Así que ya podemos pensar en como otro tipo de datos, 358 00:14:24,750 --> 00:14:27,760 podemos declarar variables como lo haría con cualquier otro. 359 00:14:27,760 --> 00:14:32,680 Así que en lugar de sólo tener, al igual que, una int estudiante, sólo tenemos un estudiante, 360 00:14:32,680 --> 00:14:33,390 1 estudiante. 361 00:14:33,390 --> 00:14:33,560 Oh, mira. 362 00:14:33,560 --> 00:14:34,059 Es Rob. 363 00:14:34,059 --> 00:14:35,750 364 00:14:35,750 --> 00:14:38,880 Así que aquí estamos declarando una estructura, o una variable 365 00:14:38,880 --> 00:14:40,940 llamado estudiante 1 de tipo estudiantil. 366 00:14:40,940 --> 00:14:45,370 Así que va a tener identificación y el nombre asociado con él. 367 00:14:45,370 --> 00:14:48,430 >> Y la forma en que el acceso de estas elementos dentro de nuestra struct 368 00:14:48,430 --> 00:14:50,100 es con el operador punto, aquí. 369 00:14:50,100 --> 00:14:51,910 370 00:14:51,910 --> 00:14:54,660 Así que en este caso, declarado algún estudiante 1. 371 00:14:54,660 --> 00:14:57,080 Asignamos el ID que es 1. 372 00:14:57,080 --> 00:14:58,840 Y hemos asignado el nombre a ser Rob. 373 00:14:58,840 --> 00:15:03,010 374 00:15:03,010 --> 00:15:04,960 Bueno, todo el mundo bueno con eso? 375 00:15:04,960 --> 00:15:06,787 Utilice sólo como-- sí? 376 00:15:06,787 --> 00:15:09,530 >> ESTUDIANTE: Sí, cuando typedef-- Por qué tenemos que usar typedef? 377 00:15:09,530 --> 00:15:13,190 >> ALLISON: Así typedef sólo dice que-- Rob, 378 00:15:13,190 --> 00:15:16,990 me puede corregir en este caso estoy wrong-- pero en realidad es sólo typedef declarar 379 00:15:16,990 --> 00:15:19,330 como un tipo que se puede utilizar, ¿verdad? 380 00:15:19,330 --> 00:15:22,550 >> ROB: Sí, es básicamente, por lo que acaba de crear 381 00:15:22,550 --> 00:15:24,215 un alias o un apodo para un tipo. 382 00:15:24,215 --> 00:15:25,590 Así que usted puede escribir que [inaudible]. 383 00:15:25,590 --> 00:15:27,140 384 00:15:27,140 --> 00:15:30,350 Así que [inaudible] existe, y ahora sólo tenemos 385 00:15:30,350 --> 00:15:32,090 [Inaudible] medios exactamente la misma cosa. 386 00:15:32,090 --> 00:15:37,210 Así que aquí estamos con tipo, creo yo, alguna estructura de tipo 2 [inaudible]. 387 00:15:37,210 --> 00:15:40,680 Así que es sólo un apodo para un tipo dado. 388 00:15:40,680 --> 00:15:44,344 >> ESTUDIANTE: String biblioteca [inaudible] fue escrito para arriba como estrella Char. 389 00:15:44,344 --> 00:15:51,380 390 00:15:51,380 --> 00:15:54,390 >> ALLISON: Para nuestros propósitos aquí, si usted está declarando una estructura, 391 00:15:54,390 --> 00:15:55,600 sólo hacer typedef struct. 392 00:15:55,600 --> 00:15:57,680 393 00:15:57,680 --> 00:16:04,490 Aceptar, por lo que de antemano, esto es sólo una variable normal aquí. 394 00:16:04,490 --> 00:16:06,390 Accedemos a ella con un punto. 395 00:16:06,390 --> 00:16:08,580 si tenemos un puntero a una estructura, podemos realmente 396 00:16:08,580 --> 00:16:10,700 utilizar una flecha, que está muy bien. 397 00:16:10,700 --> 00:16:17,130 >> Así que en este caso, tenemos un puntero a un estudiante que es un tipo de estudiante. 398 00:16:17,130 --> 00:16:19,020 Recuerde que con su construcción puntero, 399 00:16:19,020 --> 00:16:23,710 quieres lo escriba su puntero está apuntando a ser al principio. 400 00:16:23,710 --> 00:16:25,960 Así que tenemos algún estudiante 1, aquí. 401 00:16:25,960 --> 00:16:27,370 402 00:16:27,370 --> 00:16:31,050 Y puesto que este estudiante 1 es ahora una punta, 403 00:16:31,050 --> 00:16:36,520 en realidad podemos ir estudiante nombre 1 flecha en lugar de puntos, porque es un puntero, 404 00:16:36,520 --> 00:16:37,640 y asignar Rob. 405 00:16:37,640 --> 00:16:40,720 Y ahora si queremos Rob cambiar a Davin, 406 00:16:40,720 --> 00:16:43,570 esto se acaba demostrando que una manera diferente de hacerlo. 407 00:16:43,570 --> 00:16:48,850 >> Así que en vez de usar la flecha, que puede También-- voy a terminar esto y después 408 00:16:48,850 --> 00:16:52,860 tomar esa pregunta-- pudieras También hacer referencia 1 estudiante. 409 00:16:52,860 --> 00:16:56,170 Eso es mucho decir, como ir a lo que esté a estudiante 1, que 410 00:16:56,170 --> 00:16:58,840 sería nuestra estructura estudiante. 411 00:16:58,840 --> 00:17:03,910 Acceder a ella con un punto y el elemento que desea, y luego se reasigna. 412 00:17:03,910 --> 00:17:05,326 No era una pregunta. 413 00:17:05,326 --> 00:17:08,034 ESTUDIANTE: Sí, así que ¿cómo es que usted tiene utilizar [inaudible] cuando estás 414 00:17:08,034 --> 00:17:10,367 haciendo estrella estudiante sin [Inaudible] de los estudiantes? 415 00:17:10,367 --> 00:17:12,200 ALLISON: Debido a que este es la creación de un puntero. 416 00:17:12,200 --> 00:17:13,616 ROB: Vamos a hablar de ello. 417 00:17:13,616 --> 00:17:16,119 ALLISON: Vamos a hablar sobre esto más adelante en la revisión. 418 00:17:16,119 --> 00:17:17,660 Así que aferrarse a ese pensamiento. 419 00:17:17,660 --> 00:17:20,560 Si todavía te molesta en la fin, venir a hablar con uno de nosotros. 420 00:17:20,560 --> 00:17:23,380 >> Así que estos hacen exactamente lo mismo. 421 00:17:23,380 --> 00:17:25,579 Estamos mostrando que dos diferentes maneras de hacerlo. 422 00:17:25,579 --> 00:17:29,470 Estudiante 1 es ahora un puntero, por lo que se puede acceder al elemento de Nombre 423 00:17:29,470 --> 00:17:30,960 dentro de la estructura con una flecha. 424 00:17:30,960 --> 00:17:36,440 O usted puede eliminar la referencia el puntero, y luego acceder a ella como lo haría normalmente. 425 00:17:36,440 --> 00:17:38,430 ¿Eso tiene sentido para cada uno? 426 00:17:38,430 --> 00:17:39,480 427 00:17:39,480 --> 00:17:43,890 Si el conjunto de las cosas son un poco puntero confuso, Gabe será hablar de eso, 428 00:17:43,890 --> 00:17:45,740 y entonces tal vez este tendrá más sentido. 429 00:17:45,740 --> 00:17:46,240 ¿Sí? 430 00:17:46,240 --> 00:17:48,387 >> ESTUDIANTE: Sí, así que ¿cómo es esto diferente de la? 431 00:17:48,387 --> 00:17:49,470 ALLISON: La anterior? 432 00:17:49,470 --> 00:17:52,330 Así que el estudiante 1 en este caso no es un puntero. 433 00:17:52,330 --> 00:17:54,380 Es sólo su estructura real. 434 00:17:54,380 --> 00:17:55,400 >> ESTUDIANTE: OK. 435 00:17:55,400 --> 00:17:57,645 >> ALLISON: Considerando que el presente uno es un puntero a una estructura. 436 00:17:57,645 --> 00:17:58,910 437 00:17:58,910 --> 00:18:02,060 >> ESTUDIANTE: OK, pero lo hace tipo de terminar trabajando de la misma [inaudible]. 438 00:18:02,060 --> 00:18:03,310 >> ALLISON: Funciona de manera efectiva la misma. 439 00:18:03,310 --> 00:18:04,560 Su sintaxis es simplemente diferente. 440 00:18:04,560 --> 00:18:05,185 ESTUDIANTE: OK. 441 00:18:05,185 --> 00:18:07,600 >> ALLISON: Sí, ellos son efectivamente el mismo. 442 00:18:07,600 --> 00:18:11,321 Es sólo en función del contexto, es posible que desee una sobre la otra. 443 00:18:11,321 --> 00:18:11,820 ¿Sí? 444 00:18:11,820 --> 00:18:13,956 >> ESTUDIANTE: Cuando usted hace las referencias a la 1-- 445 00:18:13,956 --> 00:18:14,580 ALLISON: Mm-hm? 446 00:18:14,580 --> 00:18:16,880 ESTUDIANTE: ¿Por qué usted tener los paréntesis? 447 00:18:16,880 --> 00:18:19,575 ALLISON: Debido a estudiante 1 es el puntero. 448 00:18:19,575 --> 00:18:22,200 Así que hay que asegurarse de que está sólo dereferencing el puntero. 449 00:18:22,200 --> 00:18:23,380 >> ESTUDIANTE: OK. 450 00:18:23,380 --> 00:18:26,700 >> ALLISON: Así que en este caso aquí, los paréntesis alrededor de él 451 00:18:26,700 --> 00:18:29,875 significa que estés dereferencing estudiante 1. 452 00:18:29,875 --> 00:18:35,390 Así que vas a donde el estudiante 1 puntos, que es su estructura. 453 00:18:35,390 --> 00:18:38,010 Así que ahora usted puede pensar en ello como que struct, 454 00:18:38,010 --> 00:18:39,785 así que podemos usar nuestro funcionamiento normal de puntos. 455 00:18:39,785 --> 00:18:42,752 456 00:18:42,752 --> 00:18:43,585 ¿Alguna otra pregunta? 457 00:18:43,585 --> 00:18:45,840 458 00:18:45,840 --> 00:18:48,120 Fresco, impresionante. 459 00:18:48,120 --> 00:18:51,359 >> Así que lo último, creo que es mi última diapositiva, woo! 460 00:18:51,359 --> 00:18:52,775 Aceptar, por lo que flota punto imprecisión. 461 00:18:52,775 --> 00:18:54,090 462 00:18:54,090 --> 00:18:56,820 Hablamos brevemente sobre esto durante la conferencia. 463 00:18:56,820 --> 00:19:00,030 Básicamente, tenemos un número infinito de números reales. 464 00:19:00,030 --> 00:19:02,237 Y si alguno de ustedes amar las matemáticas, hay 465 00:19:02,237 --> 00:19:03,570 todo tipo de cosas interesantes con nosotros. 466 00:19:03,570 --> 00:19:05,010 467 00:19:05,010 --> 00:19:07,190 >> Pero hay infinitamente muchos números reales. 468 00:19:07,190 --> 00:19:09,850 Pero son sólo finito muchos bits que tenemos. 469 00:19:09,850 --> 00:19:13,240 Así que siempre vas a tiene imprecisión, es todo. 470 00:19:13,240 --> 00:19:16,269 Y es que es sólo un poco de como algo que usted debe saber. 471 00:19:16,269 --> 00:19:19,060 Eso como que se puede preguntar por qué lo hace imprecisión existe punto flotante? 472 00:19:19,060 --> 00:19:20,004 473 00:19:20,004 --> 00:19:21,420 Así que algo que deberías saber. 474 00:19:21,420 --> 00:19:23,770 Y con eso, me estoy convirtiendo la vuelta a los punteros. 475 00:19:23,770 --> 00:19:27,720 476 00:19:27,720 --> 00:19:28,520 >> BINKY: Hola, chicos. 477 00:19:28,520 --> 00:19:29,616 Binky de mi nombre. 478 00:19:29,616 --> 00:19:30,990 Voy a hablar de los punteros. 479 00:19:30,990 --> 00:19:33,247 480 00:19:33,247 --> 00:19:35,830 Sí, por lo que es en realidad punteros mi parte favorita en este curso. 481 00:19:35,830 --> 00:19:39,740 Así que para aclarar lo que Allison estaba hablando aquí, por lo que la razón 482 00:19:39,740 --> 00:19:43,810 qué-- la única diferencia aquí, la gran diferencia era la manera 483 00:19:43,810 --> 00:19:44,760 declaramos cosas. 484 00:19:44,760 --> 00:19:47,560 Así que esto significa estrella estudiante es un puntero a un estudiante. 485 00:19:47,560 --> 00:19:52,960 Mientras que la diapositiva anterior, es un estudiante estructura real, como un estudiante real, 486 00:19:52,960 --> 00:19:54,400 contiene ninguna de esas cosas. 487 00:19:54,400 --> 00:19:57,050 >> Y la razón por la que querer a-- sí, Davin? 488 00:19:57,050 --> 00:19:58,630 >> DAVIN: ¿Qué significa la flecha? 489 00:19:58,630 --> 00:20:04,240 >> BINKY: Los medios de flecha exactamente la misma que esto. 490 00:20:04,240 --> 00:20:06,150 Así que usted realmente no necesita la flecha. 491 00:20:06,150 --> 00:20:11,060 Al igual que, si usted es único programa en C, sólo puede utilizar este. 492 00:20:11,060 --> 00:20:12,850 Lo sentimos, no hago lo que quiero decir. 493 00:20:12,850 --> 00:20:14,920 Usted sólo puede utilizar esta sintaxis. 494 00:20:14,920 --> 00:20:17,430 >> Pero algunas personas, cuando estaban diseñando C, 495 00:20:17,430 --> 00:20:19,870 se dieron cuenta de que la gente utilizado esa sintaxis tanto, 496 00:20:19,870 --> 00:20:23,970 que le va a gustar simplemente llegar con una estructura de sintaxis para ello. 497 00:20:23,970 --> 00:20:26,820 Y esto se llevó a cabo en la forma de esta flecha. 498 00:20:26,820 --> 00:20:29,210 Y es muy agradable, porque simboliza algo 499 00:20:29,210 --> 00:20:33,670 como en realidad estamos siguiendo esta flecha, este puntero, 500 00:20:33,670 --> 00:20:35,300 hacia un poco de espacio en la memoria. 501 00:20:35,300 --> 00:20:40,410 Y cuando lleguemos allí, queremos mirar hacia el nombre de ese estudiante, 502 00:20:40,410 --> 00:20:42,150 si eso tiene sentido. 503 00:20:42,150 --> 00:20:43,000 ¿De acuerdo? 504 00:20:43,000 --> 00:20:44,290 >> Así que esto es exactamente lo mismo. 505 00:20:44,290 --> 00:20:46,310 Esto es exactamente lo mismo que este. 506 00:20:46,310 --> 00:20:48,130 Ellos se compilan exactamente lo mismo, ¿de acuerdo? 507 00:20:48,130 --> 00:20:50,100 508 00:20:50,100 --> 00:20:55,580 Y la razón por la que aquí malloc algo, es porque en este caso, 509 00:20:55,580 --> 00:20:59,120 nuestra variable es en realidad sólo una variable puntero. 510 00:20:59,120 --> 00:21:02,900 Así que sólo nos queda un poco de espacio en memoria que está sosteniendo un puntero. 511 00:21:02,900 --> 00:21:06,570 Nosotros realmente no tenemos ningún espacio que contiene la struct real. 512 00:21:06,570 --> 00:21:08,660 >> Así que esto tiene que hacerse en dos etapas. 513 00:21:08,660 --> 00:21:11,545 Tenemos que crear la memoria para poner el struct en. 514 00:21:11,545 --> 00:21:14,445 Y tenemos que crear el memoria para poner el puntero en. 515 00:21:14,445 --> 00:21:16,570 Por lo que son, básicamente, dos diferentes variables, aquí. 516 00:21:16,570 --> 00:21:19,730 Uno de ellos es de tipo estudiantil, excepto que en realidad no tienen un nombre. 517 00:21:19,730 --> 00:21:21,900 Y el otro es de tipo estrella de los estudiantes. 518 00:21:21,900 --> 00:21:24,900 Y luego estudiantiles 1 puntos allí, si eso tiene sentido. 519 00:21:24,900 --> 00:21:25,871 520 00:21:25,871 --> 00:21:26,370 ¿De acuerdo? 521 00:21:26,370 --> 00:21:28,160 522 00:21:28,160 --> 00:21:31,860 >> Así que la razón por la que utilizamos punteros es porque todo 523 00:21:31,860 --> 00:21:35,510 en un ordenador, todas las variables en un equipo que tiene dos cosas. 524 00:21:35,510 --> 00:21:36,580 Tiene su valor. 525 00:21:36,580 --> 00:21:38,420 Y tiene su dirección. 526 00:21:38,420 --> 00:21:41,390 Y una buena manera de conceptualizar esto es que hay 527 00:21:41,390 --> 00:21:44,230 muchos problemas cuando tratar de utilizar las funciones. 528 00:21:44,230 --> 00:21:47,200 Y vamos a tratar de mirar en uno de esos. 529 00:21:47,200 --> 00:21:50,370 A saber, que va a pensar en la memoria como cajas. 530 00:21:50,370 --> 00:21:52,810 >> Siempre se pensó de variables cuando dices na iguales 5. 531 00:21:52,810 --> 00:21:54,430 Se piensa en poner 5 en una caja. 532 00:21:54,430 --> 00:21:55,520 533 00:21:55,520 --> 00:22:00,030 ¿Y qué si usted desea pasar que int en una función? 534 00:22:00,030 --> 00:22:03,230 Sólo pass-- no lo hago sabes-- x en una función. 535 00:22:03,230 --> 00:22:06,090 Pero lo que pasa es normalmente como seres humanos, que 536 00:22:06,090 --> 00:22:09,050 pensaría algo así como que soy pasando la caja a una persona. 537 00:22:09,050 --> 00:22:12,070 Y en realidad no suceder en los ordenadores. 538 00:22:12,070 --> 00:22:17,770 Lo que pasa es que copia el valor de la caja de caja de la persona. 539 00:22:17,770 --> 00:22:22,440 >> Así que lo que estoy tratando de decir es que si usted tiene una function-- sorry-- aquí, 540 00:22:22,440 --> 00:22:27,700 si tenemos una función como de cinco hasta allí, si intenta pasar una variable, 541 00:22:27,700 --> 00:22:29,450 que sólo va a copiar. 542 00:22:29,450 --> 00:22:35,771 Si un nx initialize es igual a 3, que va para copiar este valor a la variable de un 543 00:22:35,771 --> 00:22:36,270 hasta allí. 544 00:22:36,270 --> 00:22:37,005 545 00:22:37,005 --> 00:22:39,630 Aceptar, y esto es una especie de la razón Por eso queremos utilizar punteros. 546 00:22:39,630 --> 00:22:42,550 Porque en lugar de dando sólo el valor, 547 00:22:42,550 --> 00:22:44,850 en lugar de sólo pasar sólo el valor a una función, 548 00:22:44,850 --> 00:22:46,530 queremos pasar por referencia. 549 00:22:46,530 --> 00:22:50,630 Lo que llamamos pase por referencia es una especie de dar a la casilla de la función, 550 00:22:50,630 --> 00:22:53,890 por lo que la función también puede cambiar los valores dentro de esa caja. 551 00:22:53,890 --> 00:22:57,280 >> Aceptar, por lo que sólo algunas puntero básica cosas es crear punteros, 552 00:22:57,280 --> 00:23:00,300 que acaba de declarar que un tipo, y poner una estrella justo después de ella. 553 00:23:00,300 --> 00:23:02,307 Y el tipo es sólo lo que usted está apuntando a. 554 00:23:02,307 --> 00:23:04,390 Así que si es un int estrella, usted está apuntando a un int. 555 00:23:04,390 --> 00:23:05,940 Si se trata de una estrella char, usted está apuntando a un gráfico. 556 00:23:05,940 --> 00:23:07,790 Y si se trata de una estrella de los estudiantes, usted está apuntando a un estudiante. 557 00:23:07,790 --> 00:23:08,770 ¿De acuerdo? 558 00:23:08,770 --> 00:23:10,510 >> Y son los 4 bytes de longitud. 559 00:23:10,510 --> 00:23:13,010 Dado que esta variable En realidad, no 560 00:23:13,010 --> 00:23:15,380 necesitará tener un char, un int, o un estudiante. 561 00:23:15,380 --> 00:23:16,890 Sólo se necesita para mantener una dirección. 562 00:23:16,890 --> 00:23:21,390 Es por eso que son los 4 bytes de largo en una máquina normal de 32-bit. 563 00:23:21,390 --> 00:23:21,890 ¿De acuerdo? 564 00:23:21,890 --> 00:23:25,600 Así que aquí, x es una variable que apunta a un int. Y apunta a un char. puntos z 565 00:23:25,600 --> 00:23:26,580 a un flotador. 566 00:23:26,580 --> 00:23:27,480 Cualquier pregunta aquí? 567 00:23:27,480 --> 00:23:29,841 568 00:23:29,841 --> 00:23:30,340 Enfriar. 569 00:23:30,340 --> 00:23:32,550 Y hay dos diferentes símbolos que tienen 570 00:23:32,550 --> 00:23:34,341 a tener en cuenta a la hora viniendo al puntero. 571 00:23:34,341 --> 00:23:36,540 Así referencia y eliminación de referencias son los grandes. 572 00:23:36,540 --> 00:23:38,100 573 00:23:38,100 --> 00:23:41,602 Así que el signo de la nombre de la variable que la da? 574 00:23:41,602 --> 00:23:42,310 ESTUDIANTE: Dirección. 575 00:23:42,310 --> 00:23:43,380 BINKY: Dirección. 576 00:23:43,380 --> 00:23:47,330 Así que si se declara un int es igual a 5, entonces ampersand 577 00:23:47,330 --> 00:23:49,214 de una va a darle la dirección. 578 00:23:49,214 --> 00:23:51,130 Y en realidad se puede tratar imprimir y ver que 579 00:23:51,130 --> 00:23:54,640 lo que la dirección en la memoria su variable tiene. 580 00:23:54,640 --> 00:23:57,380 Y luego dereferencing-- por lo que se refería a, 581 00:23:57,380 --> 00:24:00,380 conseguir la desreferencia address-- es exactamente lo contrario. 582 00:24:00,380 --> 00:24:04,120 Bien, al igual que los tiempos es el opuesto de una división, 583 00:24:04,120 --> 00:24:06,060 estrella es lo contrario de signo. 584 00:24:06,060 --> 00:24:09,710 Así que los medios de eliminación de referencias van allí. 585 00:24:09,710 --> 00:24:14,280 Así que si le das me star-- no sabes-- 50, que es 586 00:24:14,280 --> 00:24:20,320 va a tratar de ir a la dirección de número 50 en el interior de su equipo. 587 00:24:20,320 --> 00:24:22,840 Aceptar y, ¿por qué nos vemos que son los opuestos? 588 00:24:22,840 --> 00:24:27,320 Porque lo que pasa si lo hace algo así como una estrella Ampersand? 589 00:24:27,320 --> 00:24:28,470 590 00:24:28,470 --> 00:24:33,460 Bueno, un signo que da la dirección de una variable, la dirección de una. 591 00:24:33,460 --> 00:24:35,830 Pero la estrella significa ir allí. 592 00:24:35,830 --> 00:24:38,930 >> Entonces, ¿qué pasa si usted ir a la dirección de una? 593 00:24:38,930 --> 00:24:40,400 Usted acaba de llegar a una, ¿verdad? 594 00:24:40,400 --> 00:24:41,410 595 00:24:41,410 --> 00:24:43,600 Así que ir a la dirección de una es la misma cosa que una. 596 00:24:43,600 --> 00:24:47,580 Es por eso que son por lo general a que se refiere el presente same-- 597 00:24:47,580 --> 00:24:50,480 y esto se hace referencia a operadores como opuestos. 598 00:24:50,480 --> 00:24:50,980 ¿De acuerdo? 599 00:24:50,980 --> 00:24:52,780 600 00:24:52,780 --> 00:24:53,790 So cool. 601 00:24:53,790 --> 00:24:57,240 >> Bajo el capó, por ejemplo, si declaramos int x es igual a 5, 602 00:24:57,240 --> 00:24:58,040 tenemos una variable. 603 00:24:58,040 --> 00:25:00,790 Y recuerdo que dije cada variable-- y esto es una buena cosa 604 00:25:00,790 --> 00:25:03,820 para mantener en mente-- tiene dos diferentes cosas asociado con. 605 00:25:03,820 --> 00:25:06,460 Tiene una abordado y un valor. 606 00:25:06,460 --> 00:25:07,140 ¿De acuerdo? 607 00:25:07,140 --> 00:25:09,180 >> Así que el valor en este caso es 5. 608 00:25:09,180 --> 00:25:12,140 Y la dirección de es-- digamos, estoy hacer algo up-- es 0x04. 609 00:25:12,140 --> 00:25:13,180 610 00:25:13,180 --> 00:25:17,200 Y la única razón por la que por lo general representar direcciones en hexadecimal 611 00:25:17,200 --> 00:25:19,770 es uno, porque es como bueno. 612 00:25:19,770 --> 00:25:21,600 Va bien con el binario. 613 00:25:21,600 --> 00:25:23,500 Es fácil para convertir desde y hacia binario. 614 00:25:23,500 --> 00:25:26,890 Y no se ponga demasiado grande si usted tiene un número muy grande. 615 00:25:26,890 --> 00:25:29,990 Así que nos gusta usar hexadecimal en las direcciones de impresión. 616 00:25:29,990 --> 00:25:31,890 Pero podría representar esto como un entero. 617 00:25:31,890 --> 00:25:32,750 Está bien. 618 00:25:32,750 --> 00:25:35,450 >> Y por lo que tiene una dirección 4 y un valor de 5. 619 00:25:35,450 --> 00:25:38,080 Y entonces me dije puntero int estrellas. 620 00:25:38,080 --> 00:25:40,070 Así que este es un tipo diferente, previo aviso. 621 00:25:40,070 --> 00:25:43,220 Puntero estrella Int es igual la dirección de x. 622 00:25:43,220 --> 00:25:46,425 Entonces, ¿qué va a ser el valor de ptr? 623 00:25:46,425 --> 00:25:47,710 624 00:25:47,710 --> 00:25:51,600 Va a ser el dirección de x, aquí abajo. 625 00:25:51,600 --> 00:25:54,190 Aceptar, por lo que el valor se va a ser la misma que la dirección. 626 00:25:54,190 --> 00:25:56,130 Esa es la asignación de operar que estoy haciendo. 627 00:25:56,130 --> 00:25:59,380 Y entonces PTR se va a tener su propia dirección, que resulta, 628 00:25:59,380 --> 00:26:02,050 en este caso, el 8, ¿de acuerdo? 629 00:26:02,050 --> 00:26:03,850 630 00:26:03,850 --> 00:26:05,900 >> Y entonces puedo crear una nueva copia entero. 631 00:26:05,900 --> 00:26:08,790 Y digo int copia es igual a ir allí. 632 00:26:08,790 --> 00:26:11,140 Así que ir a lo que ptr apunta a. 633 00:26:11,140 --> 00:26:13,940 Bueno, ¿qué tiene este ptr? 634 00:26:13,940 --> 00:26:14,740 Ptr tiene 0x04. 635 00:26:14,740 --> 00:26:16,060 636 00:26:16,060 --> 00:26:18,400 ¿Qué sucede si trato de ir allí? 637 00:26:18,400 --> 00:26:23,650 Voy a encontrar el tipo que tiene dirección x y que tiene la dirección 4. 638 00:26:23,650 --> 00:26:25,970 ¿Y quién tiene la dirección cuatro es x. 639 00:26:25,970 --> 00:26:26,950 ¿Eso tiene sentido? 640 00:26:26,950 --> 00:26:28,295 641 00:26:28,295 --> 00:26:28,795 ¿Sí? 642 00:26:28,795 --> 00:26:32,060 >> ESTUDIANTE: En este caso, es el puntero en una pila? 643 00:26:32,060 --> 00:26:36,024 >> BINKY: En este caso, es-- buena pregunta. 644 00:26:36,024 --> 00:26:38,690 Yo realmente no pienso en esto al hacer estas direcciones. 645 00:26:38,690 --> 00:26:42,570 Pero si esto es, como, todo estos son variables locales, 646 00:26:42,570 --> 00:26:46,372 entonces x se va a vivir en-- todo va a vivir en la pila. 647 00:26:46,372 --> 00:26:48,330 Así que todo va estar apuntando a la pila. 648 00:26:48,330 --> 00:26:49,360 649 00:26:49,360 --> 00:26:52,700 Sólo se llega a la pila cuando usted comienza a usar malloc, ¿verdad? 650 00:26:52,700 --> 00:26:59,430 >> Así que si usted recuerda pila es cada vez se llama a una función en su programa, 651 00:26:59,430 --> 00:27:02,800 como, por ejemplo principal, o cualquier otra función, al igual que printf. 652 00:27:02,800 --> 00:27:06,334 Todas las variables locales son va a conseguir poner en un marco de pila. 653 00:27:06,334 --> 00:27:08,500 Y ellos van a conseguir como apilados en la pila. 654 00:27:08,500 --> 00:27:09,930 Eso es lo que se llama una pila. 655 00:27:09,930 --> 00:27:12,200 Y todas esas variables locales van a estar allí. 656 00:27:12,200 --> 00:27:14,940 Y el heap-- y vamos a hablar más sobre este tarde-- 657 00:27:14,940 --> 00:27:19,050 el montón es donde todos asignada dinámicamente vidas de memoria. 658 00:27:19,050 --> 00:27:20,270 Fresco? 659 00:27:20,270 --> 00:27:21,680 >> Vamos a esta diapositiva. 660 00:27:21,680 --> 00:27:22,800 ¿Sí? 661 00:27:22,800 --> 00:27:25,490 >> ESTUDIANTE: ¿Por qué no se int copia de regresar 0x04? 662 00:27:25,490 --> 00:27:27,870 663 00:27:27,870 --> 00:27:30,066 >> BINKY: ¿Por qué no se int copia de regresar 0x04? 664 00:27:30,066 --> 00:27:32,450 >> ESTUDIANTE: ¿Por qué no es que [inaudible]? 665 00:27:32,450 --> 00:27:35,530 >> BINKY: Porque lo que es un valor de ptr? 666 00:27:35,530 --> 00:27:37,394 667 00:27:37,394 --> 00:27:38,370 >> ESTUDIANTE: 0x04. 668 00:27:38,370 --> 00:27:38,960 >> BINKY: 0x04. 669 00:27:38,960 --> 00:27:40,910 ¿Qué pasa si usted va a 0x04? 670 00:27:40,910 --> 00:27:41,620 ¿Qué se obtiene? 671 00:27:41,620 --> 00:27:42,371 >> ESTUDIANTE: Oh, OK. 672 00:27:42,371 --> 00:27:42,995 BINKY: ¿Lo ves? 673 00:27:42,995 --> 00:27:43,536 ESTUDIANTE: Sí. 674 00:27:43,536 --> 00:27:44,890 BINKY: Así que usted obtenga un 5. 675 00:27:44,890 --> 00:27:49,170 Entonces copia va a tener 5, si eso tiene sentido. 676 00:27:49,170 --> 00:27:49,809 ¿Sí? 677 00:27:49,809 --> 00:27:52,803 >> ESTUDIANTE: ¿Podríamos haber conseguido 5 en el cuadro de valores [inaudible] 678 00:27:52,803 --> 00:27:55,300 si ponemos int copia [inaudible]. 679 00:27:55,300 --> 00:27:56,710 >> BINKY: Int-- lo haríamos, si. 680 00:27:56,710 --> 00:27:59,080 Eso habría hecho más o menos la misma cosa. 681 00:27:59,080 --> 00:28:02,080 Pero de esta manera, nos puede pasar abordar a las funciones. 682 00:28:02,080 --> 00:28:05,050 Y eso es lo bueno que vamos a hacer en este momento. 683 00:28:05,050 --> 00:28:06,770 684 00:28:06,770 --> 00:28:13,090 >> Así que este tipo de ejercicio siempre viene en-- muy habitualmente aparece en los concursos. 685 00:28:13,090 --> 00:28:15,870 Así que es muy bueno para tratar de hacer ese tipo de cosas a ti mismo. 686 00:28:15,870 --> 00:28:21,210 Así que trate de no perder de vista lo que la dirección de que es y quiere que los valores de las variables 687 00:28:21,210 --> 00:28:22,620 son en cada punto. 688 00:28:22,620 --> 00:28:24,370 Así que esto es exactamente lo que vamos a hacer. 689 00:28:24,370 --> 00:28:26,988 Aquí, tenemos pasos, uno, dos, tres, cuatro, cinco. 690 00:28:26,988 --> 00:28:30,530 Uno, dos, tres, cuatro, cinco. 691 00:28:30,530 --> 00:28:33,330 Y vamos a seguir la pista de los valores de x y a. 692 00:28:33,330 --> 00:28:34,650 693 00:28:34,650 --> 00:28:40,530 >> Entonces, ¿qué está haciendo esto, si se trata de un código con errores, que estamos tratando de hacer a cinco. 694 00:28:40,530 --> 00:28:43,610 Así que estamos tratando de conseguir en un variable y cambie su valor a 5. 695 00:28:43,610 --> 00:28:44,630 696 00:28:44,630 --> 00:28:49,900 Y recuerde mi analogía de tener un caja y la entrega de la caja a alguien? 697 00:28:49,900 --> 00:28:51,515 Así principal tiene esta caja llamada x. 698 00:28:51,515 --> 00:28:52,570 699 00:28:52,570 --> 00:28:54,170 Y contiene el valor 3. 700 00:28:54,170 --> 00:28:55,230 701 00:28:55,230 --> 00:28:57,455 Y yo estoy tratando de entregar este cuadro de a cinco. 702 00:28:57,455 --> 00:28:58,560 703 00:28:58,560 --> 00:29:01,510 >> Y quiero cinco a cambiar el valor de este cuadro a 5. 704 00:29:01,510 --> 00:29:03,080 705 00:29:03,080 --> 00:29:05,120 Y entonces me acaba de imprimir el valor de x. 706 00:29:05,120 --> 00:29:06,475 707 00:29:06,475 --> 00:29:08,850 Esto es lo que mi function-- esto es lo que estoy tratando de hacer. 708 00:29:08,850 --> 00:29:12,450 Sólo estoy tratando de actualizar el valor de x a 5. 709 00:29:12,450 --> 00:29:13,512 710 00:29:13,512 --> 00:29:14,970 ¿Está claro lo que hace la función? 711 00:29:14,970 --> 00:29:16,210 712 00:29:16,210 --> 00:29:21,440 >> OK, así que lo que va a ser el los valores de x y un derecho aquí, 713 00:29:21,440 --> 00:29:27,734 la primera línea, justo antes de la primera line-- me decir-- del programa? 714 00:29:27,734 --> 00:29:28,940 >> ESTUDIANTE: Probablemente basura. 715 00:29:28,940 --> 00:29:30,023 >> BINKY: Sólo cosas basura. 716 00:29:30,023 --> 00:29:32,590 Así que sólo hay que poner N / A. Así que no se sabe muy bien. 717 00:29:32,590 --> 00:29:37,400 Al igual que, una ni siquiera existe todavía, porque no hemos llamado a cinco. 718 00:29:37,400 --> 00:29:38,980 Int un no se declara. 719 00:29:38,980 --> 00:29:40,030 720 00:29:40,030 --> 00:29:42,920 Y x va a existir aquí, pero no lo hemos hecho realmente 721 00:29:42,920 --> 00:29:45,370 asignado ningún valor a la misma, por lo que está bien? 722 00:29:45,370 --> 00:29:46,570 723 00:29:46,570 --> 00:29:52,340 >> Y entonces, ¿qué va a ser el los valores de x y una en el número dos? 724 00:29:52,340 --> 00:29:54,530 725 00:29:54,530 --> 00:29:55,410 >> ESTUDIANTE: [inaudible]. 726 00:29:55,410 --> 00:29:57,540 >> BINKY: Así que x va a ser 3. 727 00:29:57,540 --> 00:29:59,650 Eso es fácil, porque estamos asignando 3 a la misma. 728 00:29:59,650 --> 00:30:03,500 Y una aún no existe porque un sólo vive en a cinco. 729 00:30:03,500 --> 00:30:05,800 Así que voy a tener 3 y nada. 730 00:30:05,800 --> 00:30:08,590 o como basura, lo que sea, realmente no definido. 731 00:30:08,590 --> 00:30:11,640 732 00:30:11,640 --> 00:30:13,140 Y ahora, esta es la línea importante. 733 00:30:13,140 --> 00:30:14,931 Aquí, vamos a en realidad llamar a cinco. 734 00:30:14,931 --> 00:30:17,140 735 00:30:17,140 --> 00:30:18,680 Y recuerdo lo que dije. 736 00:30:18,680 --> 00:30:20,240 Nunca pase en el cuadro. 737 00:30:20,240 --> 00:30:23,110 Simplemente copiamos el valor de la caja a otra caja. 738 00:30:23,110 --> 00:30:27,000 Eso es todos los ordenadores, fotocopiadoras cosas de un lugar a otro. 739 00:30:27,000 --> 00:30:33,550 >> Así que a cinco, lo que realmente hace es copia el valor de x para una. 740 00:30:33,550 --> 00:30:35,130 Entonces, ¿qué va a estar aquí? 741 00:30:35,130 --> 00:30:36,210 Los valores de x y a. 742 00:30:36,210 --> 00:30:38,670 743 00:30:38,670 --> 00:30:43,360 3 y 3, sólo tendremos que copiamos por encima de x a a. 744 00:30:43,360 --> 00:30:44,710 745 00:30:44,710 --> 00:30:45,320 Enfriar. 746 00:30:45,320 --> 00:30:46,140 >> Ahora que estamos aquí. 747 00:30:46,140 --> 00:30:47,610 748 00:30:47,610 --> 00:30:49,430 Y ahora vamos para actualizar a es igual a 5. 749 00:30:49,430 --> 00:30:50,900 750 00:30:50,900 --> 00:30:53,070 ¿Qué va a pasar en la línea de cuatro? 751 00:30:53,070 --> 00:30:55,120 752 00:30:55,120 --> 00:30:56,010 >> ESTUDIANTE: [inaudible]. 753 00:30:56,010 --> 00:30:59,685 >> BINKY: una se actualiza, pero x no se actualizan. 754 00:30:59,685 --> 00:31:02,050 755 00:31:02,050 --> 00:31:05,250 Debido x sigue viviendo en principal, que es un completamente diferente bloque de memoria. 756 00:31:05,250 --> 00:31:06,970 Es una variable diferente. 757 00:31:06,970 --> 00:31:07,900 una es otra variable. 758 00:31:07,900 --> 00:31:10,000 Ellos sucede que tiene la mismo valor porque 759 00:31:10,000 --> 00:31:13,980 copiado sobre el valor de x a a. 760 00:31:13,980 --> 00:31:20,070 Pero ahora, cuando hago una es igual a 5, que en realidad no efecto X de ninguna manera. 761 00:31:20,070 --> 00:31:21,450 Esta es la parte más difícil. 762 00:31:21,450 --> 00:31:23,380 ¿Tiene sentido para todo el mundo? 763 00:31:23,380 --> 00:31:24,093 ¿Sí? 764 00:31:24,093 --> 00:31:25,717 ESTUDIANTE: Una pregunta más, usted tiene 3. 765 00:31:25,717 --> 00:31:27,741 ¿Por qué es un ya-- oh, no, es 3. 766 00:31:27,741 --> 00:31:28,490 Lo sentimos, pero no importa. 767 00:31:28,490 --> 00:31:29,310 Leí 5. 768 00:31:29,310 --> 00:31:30,415 >> BINKY: Sí, 3, 3. 769 00:31:30,415 --> 00:31:31,540 >> ESTUDIANTE: [inaudible], sí. 770 00:31:31,540 --> 00:31:35,290 BINKY: Y luego asignar a 5 una, pero en realidad no cambia x. 771 00:31:35,290 --> 00:31:36,369 Buena? 772 00:31:36,369 --> 00:31:36,910 ESTUDIANTE: Sí. 773 00:31:36,910 --> 00:31:37,410 BINKY: Sí? 774 00:31:37,410 --> 00:31:42,330 ¿Puede explicar más cómo se copia un [inaudible]? 775 00:31:42,330 --> 00:31:48,480 >> BINKY: OK, así que cuando usted llama a cinco de x, por lo que esta línea de código aquí. 776 00:31:48,480 --> 00:31:50,100 777 00:31:50,100 --> 00:31:52,340 a cinco de x, lo que es x? 778 00:31:52,340 --> 00:31:55,160 779 00:31:55,160 --> 00:31:58,340 x está a sólo 3 en este punto, ¿no? 780 00:31:58,340 --> 00:32:03,320 Así que usted podría pensar en poner un 3 por aquí y olvidarse de x. 781 00:32:03,320 --> 00:32:04,410 Sólo hay que poner un 3 aquí. 782 00:32:04,410 --> 00:32:10,880 Al igual, vamos a copiar el valor de x para el int a que está allá arriba. 783 00:32:10,880 --> 00:32:12,310 784 00:32:12,310 --> 00:32:13,630 ¿De acuerdo? 785 00:32:13,630 --> 00:32:14,780 >> Así que el valor de x es 3. 786 00:32:14,780 --> 00:32:17,680 Vamos a copiar 3 a una. 787 00:32:17,680 --> 00:32:20,040 Y todo esto otro bloque de memoria, esta otra variable 788 00:32:20,040 --> 00:32:22,640 llamado tendrá 3, también. 789 00:32:22,640 --> 00:32:23,580 ¿Eso tiene sentido? 790 00:32:23,580 --> 00:32:24,780 791 00:32:24,780 --> 00:32:25,794 ¿Sí? 792 00:32:25,794 --> 00:32:31,008 >> ESTUDIANTE: Si le das a cinco como tiene como número entero x en lugar de una, 793 00:32:31,008 --> 00:32:32,910 habría que arreglar todo? 794 00:32:32,910 --> 00:32:36,290 >> BINKY: Si se trata de un integer-- no, eso no sería arreglar todo. 795 00:32:36,290 --> 00:32:37,590 Así que eso es una muy buena pregunta. 796 00:32:37,590 --> 00:32:40,480 Realmente no importa lo que se llama a esas variables. 797 00:32:40,480 --> 00:32:44,510 Una vez más, será una cuestión de alcance, porque no son el mismo x. 798 00:32:44,510 --> 00:32:46,526 Son completamente diferentes espacios en la memoria. 799 00:32:46,526 --> 00:32:47,400 ESTUDIANTE: [inaudible]. 800 00:32:47,400 --> 00:32:49,020 BINKY: Así que en realidad no importa cómo los llamemos. 801 00:32:49,020 --> 00:32:50,480 Eso no soluciona las cosas, ¿de acuerdo? 802 00:32:50,480 --> 00:32:53,390 803 00:32:53,390 --> 00:32:54,430 Más preguntas? 804 00:32:54,430 --> 00:32:55,762 ¿Sí? 805 00:32:55,762 --> 00:32:58,498 >> ESTUDIANTE: ¿Cómo es volver a número cinco [inaudible]? 806 00:32:58,498 --> 00:32:59,661 807 00:32:59,661 --> 00:33:01,160 BINKY: OK, no hemos hecho todavía. 808 00:33:01,160 --> 00:33:03,432 Vamos a ir hasta el número cinco, entonces. 809 00:33:03,432 --> 00:33:04,650 >> ESTUDIANTE: [inaudible]? 810 00:33:04,650 --> 00:33:05,565 >> BINKY: ¿Qué? 811 00:33:05,565 --> 00:33:08,179 >> ESTUDIANTE: ¿Tiene un retorno en absoluto? 812 00:33:08,179 --> 00:33:09,970 BINKY: No tenemos un retorno, no de principal. 813 00:33:09,970 --> 00:33:12,940 Pero principales devuelve 0 automáticamente si usted no devuelve nada. 814 00:33:12,940 --> 00:33:14,400 815 00:33:14,400 --> 00:33:15,188 ¿Sí? 816 00:33:15,188 --> 00:33:22,658 >> ESTUDIANTE: ¿Podría usted hacer main-- o podría usted hacer para cinco regreso una? 817 00:33:22,658 --> 00:33:24,170 818 00:33:24,170 --> 00:33:27,990 >> BINKY: Podríamos tener a cinco devolver una, sí. 819 00:33:27,990 --> 00:33:32,527 Pero entonces tendríamos que asignar x es igual al valor de retorno de a cinco, 820 00:33:32,527 --> 00:33:34,360 que sería un poco diferente del programa. 821 00:33:34,360 --> 00:33:35,440 Se iba a funcionar. 822 00:33:35,440 --> 00:33:38,730 Pero lo que queremos hacer es lo que es llamado cambio algo en su lugar. 823 00:33:38,730 --> 00:33:41,690 Así que queremos en realidad cambiar ese cuadro y no te preocupes 824 00:33:41,690 --> 00:33:44,390 por tener que regresar valores o cualquier cosa. 825 00:33:44,390 --> 00:33:44,890 ¿De acuerdo? 826 00:33:44,890 --> 00:33:46,490 827 00:33:46,490 --> 00:33:50,150 >> Esto es igual que la función de intercambio David mostró en la conferencia, salvo que soy 828 00:33:50,150 --> 00:33:51,740 sólo se trata de una variable. 829 00:33:51,740 --> 00:33:55,960 Y él utilizó dos, así int a y b y entonces la variable temporal y otras cosas. 830 00:33:55,960 --> 00:33:57,020 ¿De acuerdo? 831 00:33:57,020 --> 00:33:58,070 ¿Cuál es la última línea? 832 00:33:58,070 --> 00:34:04,400 Después de cinco vueltas, es simplemente la una va a desaparecer. 833 00:34:04,400 --> 00:34:06,120 834 00:34:06,120 --> 00:34:10,179 No vamos a tener una más, y solo x todavía vivirá. 835 00:34:10,179 --> 00:34:12,130 >> Y ¿adivinen qué? x no cambió su valor, 836 00:34:12,130 --> 00:34:15,520 después de todo, porque somos sólo cambiando el valor de a. 837 00:34:15,520 --> 00:34:17,370 Es por eso que fue x 3 partes. 838 00:34:17,370 --> 00:34:17,870 ¿De acuerdo? 839 00:34:17,870 --> 00:34:20,195 840 00:34:20,195 --> 00:34:21,130 Bueno. 841 00:34:21,130 --> 00:34:23,560 Así que este programa no conseguimos lo que queríamos. 842 00:34:23,560 --> 00:34:24,760 Ahora vamos a arreglarlo. 843 00:34:24,760 --> 00:34:27,440 >> Y el programa de solución es el uso de punteros. 844 00:34:27,440 --> 00:34:32,300 Lo que hacemos es que tenemos tres líneas que son diferentes. 845 00:34:32,300 --> 00:34:34,020 Los primeros es que no estamos pasando x. 846 00:34:34,020 --> 00:34:35,535 Estamos pasando la dirección de x. 847 00:34:35,535 --> 00:34:37,330 848 00:34:37,330 --> 00:34:40,876 Así que en lugar de copiar lo largo el valor de la caja, 849 00:34:40,876 --> 00:34:42,500 Todavía voy a copiar algo. 850 00:34:42,500 --> 00:34:45,380 Pero estoy copiando la dirección de la caja. 851 00:34:45,380 --> 00:34:48,780 >> Así que si paso la dirección de la caja de a cinco, luego a cinco 852 00:34:48,780 --> 00:34:51,560 será capaz de encontrar que en la memoria y cambiar su valor. 853 00:34:51,560 --> 00:34:53,980 854 00:34:53,980 --> 00:34:59,580 >> Así y luego allí, tengo que no es un int más. 855 00:34:59,580 --> 00:35:00,882 a es un entero de estrellas. 856 00:35:00,882 --> 00:35:02,090 Es un puntero a un entero. 857 00:35:02,090 --> 00:35:03,790 858 00:35:03,790 --> 00:35:07,310 Y luego, porque estoy pasando el dirijo aquí, y entonces lo que hago 859 00:35:07,310 --> 00:35:10,530 no es igual a un 5, porque una es la celebración de una dirección. 860 00:35:10,530 --> 00:35:16,710 Así que lo que quiero hacer es ir allí y actualizar los contenidos de esta dirección 861 00:35:16,710 --> 00:35:18,305 con 5. 862 00:35:18,305 --> 00:35:21,130 >> OK, así que vamos a ir a través de todas las líneas de uno por uno. 863 00:35:21,130 --> 00:35:22,410 864 00:35:22,410 --> 00:35:26,024 Así que cuando me pongo aquí, todavía tienen N / D, N / D, N / A 865 00:35:26,024 --> 00:35:28,440 para todo en la primera línea, porque yo no tengo realmente 866 00:35:28,440 --> 00:35:29,390 declarado cosas todavía. 867 00:35:29,390 --> 00:35:30,980 868 00:35:30,980 --> 00:35:35,110 Y a continuación, la línea dos, tengo x es igual a 3. 869 00:35:35,110 --> 00:35:38,020 Un int estrella un no existen, lo mismo que antes. 870 00:35:38,020 --> 00:35:39,160 871 00:35:39,160 --> 00:35:40,640 >> Ahora se pone interesante. 872 00:35:40,640 --> 00:35:42,300 Así que voy a pasar. 873 00:35:42,300 --> 00:35:45,720 Y vamos a suponer que la dirección de x es 12 en hexadecimal. 874 00:35:45,720 --> 00:35:46,880 875 00:35:46,880 --> 00:35:48,420 Vamos a suponer esto. 876 00:35:48,420 --> 00:35:49,221 Yo lo inventé. 877 00:35:49,221 --> 00:35:51,680 878 00:35:51,680 --> 00:35:53,500 Así que lo que estoy pasando aquí es una a cinco. 879 00:35:53,500 --> 00:35:54,460 Estoy pasando 12. 880 00:35:54,460 --> 00:35:56,390 881 00:35:56,390 --> 00:35:58,610 >> Entonces, ¿qué valor tiene una tienen? 882 00:35:58,610 --> 00:36:04,785 883 00:36:04,785 --> 00:36:06,210 >> ESTUDIANTE: [inaudible]. 884 00:36:06,210 --> 00:36:06,950 >> BINKY: Lo siento? 885 00:36:06,950 --> 00:36:08,145 >> ESTUDIANTE: [inaudible]. 886 00:36:08,145 --> 00:36:10,520 BINKY: Sí, como, a dejar de Suponemos que estamos aquí, ahora. 887 00:36:10,520 --> 00:36:11,540 888 00:36:11,540 --> 00:36:12,040 Me estoy preguntando. 889 00:36:12,040 --> 00:36:12,915 >> ESTUDIANTE: [inaudible]. 890 00:36:12,915 --> 00:36:13,590 891 00:36:13,590 --> 00:36:14,890 >> BINKY: Se ha iniciado. 892 00:36:14,890 --> 00:36:15,860 >> ESTUDIANTE: [inaudible]. 893 00:36:15,860 --> 00:36:17,985 BINKY: Debido a que pasamos algo a la función. 894 00:36:17,985 --> 00:36:19,431 895 00:36:19,431 --> 00:36:19,930 ¿Sí? 896 00:36:19,930 --> 00:36:20,899 >> ESTUDIANTE: Dirección de x. 897 00:36:20,899 --> 00:36:22,690 BINKY: Se va a tener la dirección de x. 898 00:36:22,690 --> 00:36:25,800 Y la dirección de x es 12, bueno. 899 00:36:25,800 --> 00:36:30,990 Así que x va a ser 3, porque en realidad no hemos cambiado x todavía. 900 00:36:30,990 --> 00:36:36,700 Y luego una va a ser 0x12, por lo la dirección de x, porque eso es 901 00:36:36,700 --> 00:36:38,840 lo pasamos de a cinco. 902 00:36:38,840 --> 00:36:40,940 >> Y entonces lo que ocurre si tratamos de ir allí? 903 00:36:40,940 --> 00:36:42,145 ¿Qué vamos a encontrar? 904 00:36:42,145 --> 00:36:47,120 Así que si usted intenta imprimir una estrella, vamos a seguir esta dirección 905 00:36:47,120 --> 00:36:48,620 y obtener el valor en el interior. 906 00:36:48,620 --> 00:36:50,470 Y el valor es sólo el mismo valor que x 907 00:36:50,470 --> 00:36:53,980 tiene porque esa es la dirección de x, que será 3. 908 00:36:53,980 --> 00:36:55,440 909 00:36:55,440 --> 00:36:56,930 ¿Estamos bien? 910 00:36:56,930 --> 00:36:59,990 >> Aceptar y, a continuación, ahora, en realidad nos vamos allí. 911 00:36:59,990 --> 00:37:05,510 Y lo actualizamos es en esta dirección 12. 912 00:37:05,510 --> 00:37:07,390 Ahora es 5. 913 00:37:07,390 --> 00:37:10,560 Así que ahora tanto x como una estrella son 5. 914 00:37:10,560 --> 00:37:13,170 915 00:37:13,170 --> 00:37:13,680 >> Porqué es eso? 916 00:37:13,680 --> 00:37:17,070 Debido a que la dirección de x es 12. 917 00:37:17,070 --> 00:37:20,920 Y también tiene un 12 como su valor. 918 00:37:20,920 --> 00:37:23,780 Así que si seguimos a 12, estamos sólo va a encontrar x. 919 00:37:23,780 --> 00:37:27,400 Así que cualquier cosa que hagamos con una estrella que va a pasar 920 00:37:27,400 --> 00:37:30,790 a x, porque contiene una la dirección de x. 921 00:37:30,790 --> 00:37:31,918 922 00:37:31,918 --> 00:37:32,418 ¿De acuerdo? 923 00:37:32,418 --> 00:37:34,090 924 00:37:34,090 --> 00:37:37,750 >> Y esto es como el punto crucial de la solución. 925 00:37:37,750 --> 00:37:41,500 Así que ahora estamos en condiciones, de a cinco, en realidad 926 00:37:41,500 --> 00:37:43,840 acceso a la memoria que vivió en principal. 927 00:37:43,840 --> 00:37:47,980 Así que esta memoria no vive en a cinco, al igual que antes, esta dirección 12. 928 00:37:47,980 --> 00:37:50,980 Y hemos sido capaces de ir allí y cambiar su valor a 5. 929 00:37:50,980 --> 00:37:53,990 >> Y luego, cuando volvamos, nos olvidamos de una. 930 00:37:53,990 --> 00:37:55,720 Nos olvidamos de una estrella. 931 00:37:55,720 --> 00:37:57,020 Y X es todavía cinco. 932 00:37:57,020 --> 00:37:58,327 933 00:37:58,327 --> 00:38:00,160 Así que si usted quiere implementar una función de intercambio, 934 00:38:00,160 --> 00:38:05,010 usted acaba de hacer exactamente lo mismo, excepto que usted necesita a int estrellas aquí, 935 00:38:05,010 --> 00:38:06,140 y así sucesivamente y así sucesivamente. 936 00:38:06,140 --> 00:38:06,976 ¿De acuerdo? 937 00:38:06,976 --> 00:38:07,475 ¿Estamos bien? 938 00:38:07,475 --> 00:38:09,860 939 00:38:09,860 --> 00:38:10,610 Enfriar. 940 00:38:10,610 --> 00:38:12,410 >> Así puntero aritmética. 941 00:38:12,410 --> 00:38:13,960 Este es un tema un poco complicado. 942 00:38:13,960 --> 00:38:16,554 Así que resulta que punteros son sólo números enteros. 943 00:38:16,554 --> 00:38:17,970 Usted puede pensar en ellos como números enteros. 944 00:38:17,970 --> 00:38:21,080 Debido a que en la memoria, que tiene como dirección cero, uno, dos, tres memoria, 945 00:38:21,080 --> 00:38:21,900 cuatro, cinco. 946 00:38:21,900 --> 00:38:23,900 Así que podemos resumir las direcciones de memoria. 947 00:38:23,900 --> 00:38:27,230 >> Y eso es por lo general lo que haces cuando estás en y matriz, por ejemplo. 948 00:38:27,230 --> 00:38:30,540 Una matriz es como un contiguo bloque de memoria, de los lotes de caracteres, 949 00:38:30,540 --> 00:38:31,840 por ejemplo, un montón de enteros. 950 00:38:31,840 --> 00:38:34,420 Así que si quieres ir a la segundo int o al tercer int, 951 00:38:34,420 --> 00:38:37,830 que sólo puede sumar algo a la primera dirección, y usted va a llegar allí. 952 00:38:37,830 --> 00:38:39,620 Así que esto es realmente útil para eso. 953 00:38:39,620 --> 00:38:41,850 >> Y la cosa a tener en cuenta, sin embargo, es 954 00:38:41,850 --> 00:38:45,140 que no es justo como aritmética normal en el sentido 955 00:38:45,140 --> 00:38:50,304 que si usted está tratando con, digamos, un int estrella, y se agrega 1 a la misma, 956 00:38:50,304 --> 00:38:52,220 entonces no vas añadir 1 a la dirección, 957 00:38:52,220 --> 00:38:53,950 usted va a añadir 4 a la dirección. 958 00:38:53,950 --> 00:38:55,030 959 00:38:55,030 --> 00:38:56,670 Debido a un int es de 4 bytes. 960 00:38:56,670 --> 00:38:57,720 961 00:38:57,720 --> 00:38:59,540 >> Así que esto es como caminando en una matriz. 962 00:38:59,540 --> 00:39:05,260 Si tenemos un conjunto de gran cantidad de enteros y entonces tratamos de ir a la segunda, 963 00:39:05,260 --> 00:39:08,790 que es básicamente sólo sumando los dirección de la primera uno más 1. 964 00:39:08,790 --> 00:39:10,040 965 00:39:10,040 --> 00:39:13,425 Pero eso no va a ser: simplemente digamos que la dirección de la primera es 4. 966 00:39:13,425 --> 00:39:14,560 967 00:39:14,560 --> 00:39:16,250 Aquí, en este caso. 968 00:39:16,250 --> 00:39:19,780 969 00:39:19,780 --> 00:39:22,850 Y si sumamos, por lo que este es lo que está pasando. 970 00:39:22,850 --> 00:39:23,530 Tenemos un int. 971 00:39:23,530 --> 00:39:25,640 Int x es igual a 5. 972 00:39:25,640 --> 00:39:26,950 X tiene un valor 5. 973 00:39:26,950 --> 00:39:31,240 Y inicializamos este puntero, int y int estrella y es igual a la dirección de x. 974 00:39:31,240 --> 00:39:33,660 >> Vamos a asumir la dirección de x es 4. 975 00:39:33,660 --> 00:39:36,960 ¿Qué va a suceder ahora si me suma añadir 1 a Y? 976 00:39:36,960 --> 00:39:39,110 977 00:39:39,110 --> 00:39:44,790 Se va a realidad suma 4 en lugar de sólo 1. 978 00:39:44,790 --> 00:39:50,920 Así que añado un 1, pero en realidad añadido 4, porque es inteligente ordenador. 979 00:39:50,920 --> 00:39:55,275 Así que va a añadir en realidad por i veces el tamaño del tipo de puntero. 980 00:39:55,275 --> 00:39:56,340 981 00:39:56,340 --> 00:39:56,840 ¿De acuerdo? 982 00:39:56,840 --> 00:39:58,030 983 00:39:58,030 --> 00:40:02,440 >> Así que si se tratara de un char, por ejemplo, si esto fuera una estrella carbón y, 984 00:40:02,440 --> 00:40:07,141 y si añadimos 1 entonces esto ser 5, porque char es un byte de longitud. 985 00:40:07,141 --> 00:40:07,640 Buena? 986 00:40:07,640 --> 00:40:10,560 987 00:40:10,560 --> 00:40:13,190 >> Y, por último, llegamos a punteros y matrices. 988 00:40:13,190 --> 00:40:16,451 Resulta que cada vez usted está tratando con una matriz, 989 00:40:16,451 --> 00:40:18,075 en realidad estás tratando con un puntero. 990 00:40:18,075 --> 00:40:19,720 991 00:40:19,720 --> 00:40:24,777 El muy buen razón conceptual para esto es que las matrices son muy grandes. 992 00:40:24,777 --> 00:40:27,360 Así que recuerdo que le dije que cada vez que pasa cosas de un lado, 993 00:40:27,360 --> 00:40:29,097 copiar todo. 994 00:40:29,097 --> 00:40:31,180 Así que si usted tiene una matriz eso es muy, muy grande, 995 00:40:31,180 --> 00:40:32,990 usted realmente no quiere copiar todo cada vez que 996 00:40:32,990 --> 00:40:35,710 se pasa a su alrededor a otro función, porque eso es sólo 997 00:40:35,710 --> 00:40:37,190 cantidades masivas de trabajo. 998 00:40:37,190 --> 00:40:39,710 Así que lo que haces es un poco más allá la dirección del primer byte. 999 00:40:39,710 --> 00:40:40,969 1000 00:40:40,969 --> 00:40:44,010 Y a continuación, la función tendrá acceso a todos los elementos en la matriz. 1001 00:40:44,010 --> 00:40:48,670 Así que usted pasó la matriz por su dirección, por lo que la dirección del primer byte. 1002 00:40:48,670 --> 00:40:53,010 >> Así que si declaramos int matriz de 3, aquí, sabemos 1003 00:40:53,010 --> 00:40:57,470 cómo acceder al primer elemento utilizando la notación soporte. 1004 00:40:57,470 --> 00:41:02,410 Si usted recuerda el soporte notación, matriz soporte 0 es igual a 1. 1005 00:41:02,410 --> 00:41:06,330 Bueno, esto sería exactamente el mismo que sólo tiene que ir allí y poner 1. 1006 00:41:06,330 --> 00:41:07,370 1007 00:41:07,370 --> 00:41:09,110 Bueno, es exactamente lo mismo. 1008 00:41:09,110 --> 00:41:13,010 Así que la notación de corchetes en aquí será el mismo que esta línea. 1009 00:41:13,010 --> 00:41:18,600 >> Y supongo que lo que la notación de corchetes para soporte de matriz 1 será? 1010 00:41:18,600 --> 00:41:20,440 Sólo será lo mismo que este. 1011 00:41:20,440 --> 00:41:22,500 Así que añadir una a la matriz. 1012 00:41:22,500 --> 00:41:24,370 Mueva uno a lo largo de la memoria. 1013 00:41:24,370 --> 00:41:26,310 Ve allí, y poner un 2. 1014 00:41:26,310 --> 00:41:28,050 1015 00:41:28,050 --> 00:41:28,579 ¿De acuerdo? 1016 00:41:28,579 --> 00:41:29,870 Y esta línea es la misma cosa. 1017 00:41:29,870 --> 00:41:34,860 Queremos ir a la tercera caja, de modo conjunto más 2. 1018 00:41:34,860 --> 00:41:37,465 Ve allí, y poner un 3. 1019 00:41:37,465 --> 00:41:39,340 Así que en la memoria, lo que es que va a pasar es que estamos 1020 00:41:39,340 --> 00:41:44,400 va a tener 1, 2, y 3 como la tres elementos de esta matriz. 1021 00:41:44,400 --> 00:41:46,970 >> Podríamos haber hecho esto utilizando nuestra notación soporte familiar. 1022 00:41:46,970 --> 00:41:49,410 Sólo quiero que ustedes saben que son la misma cosa. 1023 00:41:49,410 --> 00:41:50,530 1024 00:41:50,530 --> 00:41:53,010 Aceptar, preguntas acerca de esto? 1025 00:41:53,010 --> 00:41:56,115 1026 00:41:56,115 --> 00:41:56,615 Niza. 1027 00:41:56,615 --> 00:41:57,990 1028 00:41:57,990 --> 00:41:59,880 Ahora, voy a entregar que a Hannah, 1029 00:41:59,880 --> 00:42:00,330 >> HANNAH: Yay, yee-haw. 1030 00:42:00,330 --> 00:42:02,246 >> BINKY: Hablando de la memoria y el artículo cosas. 1031 00:42:02,246 --> 00:42:06,554 [Aplausos] 1032 00:42:06,554 --> 00:42:10,150 >> HANNAH: Hola, fresco, por lo que estamos va a hablar un poco más 1033 00:42:10,150 --> 00:42:13,090 acerca de la memoria, que acabamos de abordado el uso de punteros. 1034 00:42:13,090 --> 00:42:16,060 Así que hay dos partes principales de memoria que estamos preocupados con. 1035 00:42:16,060 --> 00:42:18,830 Tenemos la pila, que crece en la parte inferior, y el montón, que 1036 00:42:18,830 --> 00:42:20,600 va hacia abajo desde la parte superior. 1037 00:42:20,600 --> 00:42:24,690 Y la pila se va a celebrar todas nuestras variables de instancia. 1038 00:42:24,690 --> 00:42:28,860 Así que cada uno llama a una función se pone su propio pequeño marco en la pila. 1039 00:42:28,860 --> 00:42:32,160 Así como Gabe se mencionó anteriormente, si llamar a la función una y otra vez, 1040 00:42:32,160 --> 00:42:34,180 vamos a apilar cosas para arriba en la pila. 1041 00:42:34,180 --> 00:42:35,220 1042 00:42:35,220 --> 00:42:38,570 >> Y de manera similar, el montón, que comienza en la parte superior 1043 00:42:38,570 --> 00:42:42,660 se va a celebrar toda la memoria que asignamos dinámicamente. 1044 00:42:42,660 --> 00:42:45,110 Y así como nosotros de forma dinámica asignar memoria, 1045 00:42:45,110 --> 00:42:47,580 esto vendrá abajo hacia la parte inferior. 1046 00:42:47,580 --> 00:42:51,340 Un par de cosas a tener en cuenta cuando estamos usando la pila y el montón, 1047 00:42:51,340 --> 00:42:55,200 con la pila, si tenemos demasiado many-- vamos a decir-- llamadas recursivas, 1048 00:42:55,200 --> 00:42:58,392 y estamos llamando a una función de nuevo, y otra vez, y otra vez, y otra vez, 1049 00:42:58,392 --> 00:43:00,350 y se está acumulando, acumulando, acumulando. 1050 00:43:00,350 --> 00:43:01,570 Y va a chocar contra el montón. 1051 00:43:01,570 --> 00:43:03,040 Vamos a quedarse sin memoria. 1052 00:43:03,040 --> 00:43:05,100 Eso va a causar un problema para el equipo. 1053 00:43:05,100 --> 00:43:06,770 Y eso se llama el desbordamiento de pila. 1054 00:43:06,770 --> 00:43:09,728 Así que eso es definitivamente algo que usted debe tener en cuenta y tratar de evitar. 1055 00:43:09,728 --> 00:43:10,228 1056 00:43:10,228 --> 00:43:14,050 Y el montón, tiene que recordar para no escaparse accidentalmente de memoria. 1057 00:43:14,050 --> 00:43:17,950 Cada vez que usted utiliza malloc, no lo hacen se olvide de liberar esa memoria. 1058 00:43:17,950 --> 00:43:20,040 De lo contrario, sólo tendremos que estar en el montón desperdiciado, 1059 00:43:20,040 --> 00:43:23,230 y el equipo no sabrá que es libre de utilizar esa memoria. 1060 00:43:23,230 --> 00:43:25,810 Así que estos son un par de cosas que tener mucho cuidado con cuando 1061 00:43:25,810 --> 00:43:28,580 usted está tratando con la pila y el montón. 1062 00:43:28,580 --> 00:43:30,412 Cualquier pregunta con esto? 1063 00:43:30,412 --> 00:43:31,304 Impresionante. 1064 00:43:31,304 --> 00:43:31,900 >> Aceptar, fresco. 1065 00:43:31,900 --> 00:43:32,940 1066 00:43:32,940 --> 00:43:36,810 Así que este tipo de cuenta con el mismo idea como desbordamiento de pila, donde 1067 00:43:36,810 --> 00:43:39,850 vamos más allá de la límites de lo que la memoria 1068 00:43:39,850 --> 00:43:41,960 está se supone que debemos ser capaces de utilizar. 1069 00:43:41,960 --> 00:43:45,077 Así que toma, por ejemplo, un tampón, o sólo podía pensar en ella como una matriz. 1070 00:43:45,077 --> 00:43:47,660 Y nosotros dijimos, OK, vamos a crear este pequeño arsenal agradable. 1071 00:43:47,660 --> 00:43:49,140 Va a ser una cadena. 1072 00:43:49,140 --> 00:43:50,630 O se va a almacenar caracteres. 1073 00:43:50,630 --> 00:43:51,720 Y sólo va a decir hola. 1074 00:43:51,720 --> 00:43:52,678 Y es indeterminado. 1075 00:43:52,678 --> 00:43:53,990 Eso es todo. 1076 00:43:53,990 --> 00:43:58,240 >> Pero si yo fuera alguien mal y quería hacer algo malo con esta matriz, lo que 1077 00:43:58,240 --> 00:44:02,310 Yo podría hacer es tratar de escribir más allá del final de la cadena. 1078 00:44:02,310 --> 00:44:04,490 Y como verás, si Escribo lo suficientemente lejos, 1079 00:44:04,490 --> 00:44:06,980 Puedo afectar en realidad la dirección de retorno. 1080 00:44:06,980 --> 00:44:09,530 Y si me pongo a afectar la dirección de retorno, 1081 00:44:09,530 --> 00:44:11,730 Me afectan al modo en el programa se ejecuta en realidad. 1082 00:44:11,730 --> 00:44:15,900 Y en lugar de regresar, que saber, una cadena feliz como hola, yo 1083 00:44:15,900 --> 00:44:19,460 podría hacer algo malo, como ir a en otro lugar en el equipo, todavía 1084 00:44:19,460 --> 00:44:22,146 memoria, cambiarla, todo lo que yo quiero hacer. 1085 00:44:22,146 --> 00:44:25,020 Así que eso es lo que esto se vería como es si yo sólo tipo de llené hasta 1086 00:44:25,020 --> 00:44:27,400 con valor de basura al azar, en este caso, sólo una. 1087 00:44:27,400 --> 00:44:30,490 Y luego, cuando en realidad llegó a la dirección de memoria, 1088 00:44:30,490 --> 00:44:33,740 Empecé a llenarlo con algo que hice lo que quería que hiciera. 1089 00:44:33,740 --> 00:44:34,952 1090 00:44:34,952 --> 00:44:36,410 Cualquier pregunta con desbordamiento de búfer? 1091 00:44:36,410 --> 00:44:38,450 1092 00:44:38,450 --> 00:44:40,730 Impresionante, volando a la derecha a través de estas cosas. 1093 00:44:40,730 --> 00:44:43,530 >> OK, así que hablamos mucho de acerca de puntero con Gabe. 1094 00:44:43,530 --> 00:44:45,790 ¿Cómo podemos realmente obtenemos un puntero? 1095 00:44:45,790 --> 00:44:48,070 ¿Cómo obtener una dirección en la memoria? 1096 00:44:48,070 --> 00:44:51,040 Bueno, podemos utilizar este agradable función malloc convocatoria, que 1097 00:44:51,040 --> 00:44:53,370 se va a conseguir un pequeño pedazo de la memoria, 1098 00:44:53,370 --> 00:44:55,480 específicamente en el montón, como hemos comentado, 1099 00:44:55,480 --> 00:44:59,780 y que va a darle la espalda un puntero a esa dirección en la memoria. 1100 00:44:59,780 --> 00:45:01,950 Y el argumento de que tiene que dar a malloc 1101 00:45:01,950 --> 00:45:04,280 es la cantidad de espacio en la memoria que queremos. 1102 00:45:04,280 --> 00:45:06,100 >> Así que usted puede ver el tamaño en bytes. 1103 00:45:06,100 --> 00:45:08,670 Digamos, por ejemplo, o en realidad, en este ejemplo, 1104 00:45:08,670 --> 00:45:12,040 destinamos suficiente espacio para 10 números enteros. 1105 00:45:12,040 --> 00:45:15,640 Así que probablemente lo que vamos a querer poner aquí es una matriz de 10 enteros. 1106 00:45:15,640 --> 00:45:19,641 Así que le damos el tamaño de enteros, lo que que aprendimos fue cómo muchos bytes? 1107 00:45:19,641 --> 00:45:20,140 ESTUDIANTE: 4. 1108 00:45:20,140 --> 00:45:22,920 HANNAH: 4, hermoso, y nos quiera de los 10 en una fila, 1109 00:45:22,920 --> 00:45:28,050 por lo que tenemos el espacio suficiente para almacenar todos los 10 números enteros, en este caso. 1110 00:45:28,050 --> 00:45:31,290 Algo muy importante, cualquier momento usted llama malloc, 1111 00:45:31,290 --> 00:45:32,880 usted tiene que comprobar por nulo. 1112 00:45:32,880 --> 00:45:37,310 Si usted no marca por nula, así, malloc si se queda sin espacio 1113 00:45:37,310 --> 00:45:40,400 y ya no puede darle ninguna más memoria, devolverá nulo. 1114 00:45:40,400 --> 00:45:42,060 1115 00:45:42,060 --> 00:45:45,630 Así que si usted no marca, malloc puede devolver null. 1116 00:45:45,630 --> 00:45:51,265 Y entonces si tratamos de referencia a un puntero nulo, 1117 00:45:51,265 --> 00:45:54,960 vamos a obtener un fallo de segmentación, que vamos a hablar en este momento. 1118 00:45:54,960 --> 00:45:56,150 1119 00:45:56,150 --> 00:45:56,650 Impresionante. 1120 00:45:56,650 --> 00:45:58,300 >> Aceptar, preguntas con malloc? 1121 00:45:58,300 --> 00:46:00,044 1122 00:46:00,044 --> 00:46:00,544 ¿Sí? 1123 00:46:00,544 --> 00:46:05,460 >> ESTUDIANTE: ¿El control de nula [Inaudible] no lo haga en el cuestionario? 1124 00:46:05,460 --> 00:46:08,100 >> HANNAH: Claro, la pregunta era Qué matter-- en el concurso, 1125 00:46:08,100 --> 00:46:10,420 va a conseguir puntos fuera de si usted no marca para nula? 1126 00:46:10,420 --> 00:46:12,794 Sí, obtendrá puntos fuera si usted no marca por nulo. 1127 00:46:12,794 --> 00:46:16,030 Cada vez que se llama a malloc, tanto en el concurso y sus conjuntos de procesadores y en la vida real, 1128 00:46:16,030 --> 00:46:17,155 usted tiene que comprobar por nulo. 1129 00:46:17,155 --> 00:46:18,330 Buena pregunta. 1130 00:46:18,330 --> 00:46:19,689 >> GABE: ¿Qué pasa si no es libre? 1131 00:46:19,689 --> 00:46:21,730 HANNAH: Gabe quiere saber ¿qué pasa si no lo hacemos gratis. 1132 00:46:21,730 --> 00:46:25,030 Entonces tendremos una pérdida de memoria en nuestro acervo. 1133 00:46:25,030 --> 00:46:26,140 ¿Alguna otra pregunta? 1134 00:46:26,140 --> 00:46:27,550 ¿Sí? 1135 00:46:27,550 --> 00:46:30,120 >> ESTUDIANTE: ¿Puede usted-- repasar desbordamiento de búfer de nuevo muy rápido? 1136 00:46:30,120 --> 00:46:30,530 >> HANNAH: Claro. 1137 00:46:30,530 --> 00:46:33,071 La pregunta era ¿podemos repasar desbordamiento de búfer realmente rápido. 1138 00:46:33,071 --> 00:46:35,050 Volvamos a esos toboganes. 1139 00:46:35,050 --> 00:46:37,430 Así que un tampón, sólo puede pensar en ella como una matriz, ¿no? 1140 00:46:37,430 --> 00:46:39,360 Usted tiene un poco de espacio en la memoria. 1141 00:46:39,360 --> 00:46:43,580 Y cuando nos creamos nuestra matriz, sabemos matrices han fijado tamaño, 1142 00:46:43,580 --> 00:46:45,470 o nuestro buffer tiene un tamaño fijo. 1143 00:46:45,470 --> 00:46:51,360 >> Así que digamos que en este caso, tenemos sólo espacio suficiente para escribir la cadena hola. 1144 00:46:51,360 --> 00:46:57,340 Si vamos más allá de que atado, si vamos más allá lo que nuestra gama nos dijo que podría tener, 1145 00:46:57,340 --> 00:46:59,780 podríamos realmente empezar escribir en la memoria 1146 00:46:59,780 --> 00:47:01,780 que el equipo no quiere que escribir en. 1147 00:47:01,780 --> 00:47:02,810 1148 00:47:02,810 --> 00:47:05,580 Y específicamente, si nos golpeó algo así como el retorno 1149 00:47:05,580 --> 00:47:08,700 dirección de la función, la cual, al igual que cualquier otra pieza de la memoria, 1150 00:47:08,700 --> 00:47:11,420 es simplemente un lugar en su ordenador, en realidad se puede 1151 00:47:11,420 --> 00:47:14,080 cambiar eso y empezar a hacer cosas malas. 1152 00:47:14,080 --> 00:47:15,272 Respuesta a su pregunta? 1153 00:47:15,272 --> 00:47:16,230 Impresionante, todo lo demás? 1154 00:47:16,230 --> 00:47:17,466 ¿Sí? 1155 00:47:17,466 --> 00:47:21,948 >> ESTUDIANTE: Así apilar [inaudible], que dicha ir desde el fondo subiendo. 1156 00:47:21,948 --> 00:47:25,434 Dentro del rango de pila, lo hace la memoria van de, como, 1157 00:47:25,434 --> 00:47:27,230 de arriba hacia abajo correspondiente a cada descanso? 1158 00:47:27,230 --> 00:47:28,646 1159 00:47:28,646 --> 00:47:32,100 >> HANNAH: ¿Cómo hacer usted-- aplazar a Rob en este caso. 1160 00:47:32,100 --> 00:47:35,370 1161 00:47:35,370 --> 00:47:38,213 >> ROB: Crecerá en la misma dirección que la pila crece. 1162 00:47:38,213 --> 00:47:38,712 HANNAH: OK. 1163 00:47:38,712 --> 00:47:40,967 ROB: Así me confundo. 1164 00:47:40,967 --> 00:47:42,331 Esta va a ser la abstracción. 1165 00:47:42,331 --> 00:47:42,831 HANNAH: OK. 1166 00:47:42,831 --> 00:47:44,000 ROB: Esto es correcto. 1167 00:47:44,000 --> 00:47:49,420 Así que si la pila está creciendo arriba, a continuación, se generally-- 1168 00:47:49,420 --> 00:47:52,380 no tiene por qué ser así. pero se puede declarar int x. 1169 00:47:52,380 --> 00:47:54,120 A continuación, usted declara int y. 1170 00:47:54,120 --> 00:47:57,300 Entonces int x serán generalmente inferior en la pila de int y. 1171 00:47:57,300 --> 00:47:59,300 Pero eso es sólo un hecho. 1172 00:47:59,300 --> 00:48:02,410 Eso no es propio de una cosa importante semilla. 1173 00:48:02,410 --> 00:48:06,800 >> ROB: Así que la pregunta de nuevo era sólo lo que sucede cada fotograma se acumula. 1174 00:48:06,800 --> 00:48:08,960 Así que cada función para crear una pequeño pedazo de la pila. 1175 00:48:08,960 --> 00:48:13,030 Y a medida que avanza hacia arriba, dentro de ese pedacito, dentro de ese marco, 1176 00:48:13,030 --> 00:48:16,710 diremos que las variables dentro de ese marco también se mueven hacia arriba. 1177 00:48:16,710 --> 00:48:17,473 Pregunta? 1178 00:48:17,473 --> 00:48:18,688 >> ROB: Sólo para estar en el mic. 1179 00:48:18,688 --> 00:48:19,396 HANNAH: Oh, sí. 1180 00:48:19,396 --> 00:48:20,440 ROB: Voy a hablar en usted. 1181 00:48:20,440 --> 00:48:21,410 HANNAH: Oh, sí, en Aceptar. 1182 00:48:21,410 --> 00:48:24,150 ROB: La excepción es para arrays y estructuras, 1183 00:48:24,150 --> 00:48:27,470 donde arrays, un menor índice de la matriz, 1184 00:48:27,470 --> 00:48:29,930 y en estructuras de mayor campo en las estructuras 1185 00:48:29,930 --> 00:48:35,040 se garantiza que sea en las direcciones inferiores que un valor más tarde en la matriz. 1186 00:48:35,040 --> 00:48:36,720 Así que estos están garantizados. 1187 00:48:36,720 --> 00:48:40,310 Pero las variables particulares dentro, como int x e int y dentro de una función, 1188 00:48:40,310 --> 00:48:43,030 no hay relación necesaria entre sus direcciones. 1189 00:48:43,030 --> 00:48:44,882 1190 00:48:44,882 --> 00:48:46,340 HANNAH: Otra pregunta aquí? 1191 00:48:46,340 --> 00:48:51,620 ESTUDIANTE: ¿Entonces en tampón flujo, sólo desbordamiento del búfer 1192 00:48:51,620 --> 00:48:54,980 sólo pasó cuando haber, como, asignado 1193 00:48:54,980 --> 00:49:01,056 una cantidad de un array que a continuación es mayor? 1194 00:49:01,056 --> 00:49:03,230 Al igual, ¿verdad? 1195 00:49:03,230 --> 00:49:05,435 Así que si usted está pidiendo algo de la user-- 1196 00:49:05,435 --> 00:49:06,018 >> HANNAH: Mm-hm. 1197 00:49:06,018 --> 00:49:08,600 ESTUDIANTE: ¿Puede que la fuerza que dar algo a cambio 1198 00:49:08,600 --> 00:49:11,777 eso es más grande que cualquier cosa que ha asignado para ellos? 1199 00:49:11,777 --> 00:49:13,610 HANNAH: Claro, por lo que el pregunta era, básicamente, 1200 00:49:13,610 --> 00:49:16,217 el usuario puede darle más de lo que pides? 1201 00:49:16,217 --> 00:49:16,800 ESTUDIANTE: Sí. 1202 00:49:16,800 --> 00:49:18,480 HANNAH: Bueno, usted podría evitar el usuario de hacer eso. 1203 00:49:18,480 --> 00:49:21,350 Usted podría decir específicamente no hacer me daría más de x número de bytes 1204 00:49:21,350 --> 00:49:24,330 Yo sólo le he dado lugar a un número x de bytes, x número de caracteres. 1205 00:49:24,330 --> 00:49:25,700 Así que eso es algo que quieres evitar. 1206 00:49:25,700 --> 00:49:26,199 ¿Sí? 1207 00:49:26,199 --> 00:49:30,270 ¿Cuál es la diferencia entre desbordamiento de pila y buffer overflow? 1208 00:49:30,270 --> 00:49:32,140 >> HANNAH: OK, por lo que la pila overflow-- oh, qué 1209 00:49:32,140 --> 00:49:34,790 es la diferencia entre la pila desbordamiento y desbordamiento de búfer? 1210 00:49:34,790 --> 00:49:37,581 Por eso queremos pensar en desbordamiento de pila sucede cuando estamos en realidad 1211 00:49:37,581 --> 00:49:39,530 acumulando estas llamadas a función. 1212 00:49:39,530 --> 00:49:42,991 Digamos que usted tiene una función recursiva, porque sabemos que cada vez que 1213 00:49:42,991 --> 00:49:45,240 llamar a una función, que es consigue su propio marco en la pila. 1214 00:49:45,240 --> 00:49:47,950 >> Así que apilar hasta demasiado alto, y entonces empezamos a desbordarse. 1215 00:49:47,950 --> 00:49:50,530 Y utilizamos demasiada memoria, Y no nos hemos dejado en cualquier lugar. 1216 00:49:50,530 --> 00:49:51,590 Recibimos ese error. 1217 00:49:51,590 --> 00:49:53,930 >> Desbordamiento de búfer está dentro de un programa. 1218 00:49:53,930 --> 00:49:57,180 Queremos que no podría necesariamente ejecutar fuera de la memoria de la misma manera 1219 00:49:57,180 --> 00:50:00,080 que podríamos si estamos apilando tantas llamadas a funciones, 1220 00:50:00,080 --> 00:50:04,540 pero escribimos más allá de la memoria que sabemos que podemos usar. 1221 00:50:04,540 --> 00:50:06,170 Y eso nos permite hacer cosas malas. 1222 00:50:06,170 --> 00:50:08,060 1223 00:50:08,060 --> 00:50:08,560 ¿Sí? 1224 00:50:08,560 --> 00:50:10,950 >> ROB: Sí, es posible que desee que sólo tiene que repetir este, 1225 00:50:10,950 --> 00:50:12,699 pero también se puede pensar de un desbordamiento de pila 1226 00:50:12,699 --> 00:50:15,374 como como un tipo específico de desbordamiento de búfer. 1227 00:50:15,374 --> 00:50:17,665 O simplemente piensa en su apilar como un tampón muy grande. 1228 00:50:17,665 --> 00:50:20,724 Luego, cuando se desborde apilar, que es algo así como un desbordamiento de búfer. 1229 00:50:20,724 --> 00:50:23,390 Pero un desbordamiento de pila es sólo un término específico utilizado cuando la pila 1230 00:50:23,390 --> 00:50:24,310 sí desborda. 1231 00:50:24,310 --> 00:50:27,500 >> HANNAH: Derecho, por lo que repetir para el vídeo, 1232 00:50:27,500 --> 00:50:31,756 que usted puede pensar en desbordamiento de pila como un tipo específico de desbordamiento de búfer. 1233 00:50:31,756 --> 00:50:33,040 Fresco? 1234 00:50:33,040 --> 00:50:34,562 ¿Alguna pregunta más antes de que salgan a la? 1235 00:50:34,562 --> 00:50:35,380 1236 00:50:35,380 --> 00:50:35,880 Impresionante. 1237 00:50:35,880 --> 00:50:37,130 1238 00:50:37,130 --> 00:50:39,727 >> Aceptar, fresco, por lo que vamos a hablar de algunos mensajes de error comunes. 1239 00:50:39,727 --> 00:50:42,060 Esto es algo que tiene aparecido en varios concursos, 1240 00:50:42,060 --> 00:50:44,740 así que algo que vale la pena tomar un segundo vistazo. 1241 00:50:44,740 --> 00:50:46,860 Estoy seguro de que ha encontrado al menos algunos de estos 1242 00:50:46,860 --> 00:50:48,690 como usted está haciendo su problema establece. 1243 00:50:48,690 --> 00:50:50,980 Así que asegúrese de que puede hablar sobre ellos en el cuestionario. 1244 00:50:50,980 --> 00:50:52,990 >> Así que la primera es un fallo de segmentación. 1245 00:50:52,990 --> 00:50:55,250 Y eso es cada vez que tratar de acceder a la memoria 1246 00:50:55,250 --> 00:50:57,130 que no se nos permite el acceso. 1247 00:50:57,130 --> 00:51:00,280 Así que usted ha visto este migh, por ejemplo, en ruptura. 1248 00:51:00,280 --> 00:51:03,390 Si la detección de colisiones devolver nulo, y entonces usted 1249 00:51:03,390 --> 00:51:05,500 tratado de hacer algo con ese valor nulo, 1250 00:51:05,500 --> 00:51:08,147 el equipo daría que un fallo de segmentación. 1251 00:51:08,147 --> 00:51:10,730 Así que uno, una cosa importante a hacer con el fin de tratar de evitar este 1252 00:51:10,730 --> 00:51:12,000 es comprobar siempre por nulo. 1253 00:51:12,000 --> 00:51:13,300 1254 00:51:13,300 --> 00:51:16,180 >> Es posible que haya visto también declaración implícita de la función. 1255 00:51:16,180 --> 00:51:18,370 Así que esto es lo que sucede cuando Allison le mostró 1256 00:51:18,370 --> 00:51:20,150 cómo hacemos un prototipo, ¿verdad? 1257 00:51:20,150 --> 00:51:23,440 Así que vamos a decir que tenemos algunos función que definimos. 1258 00:51:23,440 --> 00:51:24,440 Digamos cubo. 1259 00:51:24,440 --> 00:51:27,120 Y eso va en la parte inferior de nuestra función, en virtud principal. 1260 00:51:27,120 --> 00:51:35,205 >> Si nos olvidamos de decirle a la computadora acerca de cubo, cuando principal intenta llamar cubo, 1261 00:51:35,205 --> 00:51:36,830 el equipo será, como, oh, Dios mío. 1262 00:51:36,830 --> 00:51:38,300 No tengo idea de lo que eso significa. 1263 00:51:38,300 --> 00:51:39,760 No sé qué hacer, aquí. 1264 00:51:39,760 --> 00:51:41,594 Así que el prototipo dice que no se preocupe. 1265 00:51:41,594 --> 00:51:42,510 Voy a decirte. 1266 00:51:42,510 --> 00:51:43,132 >> Va a venir. 1267 00:51:43,132 --> 00:51:43,840 No me grites. 1268 00:51:43,840 --> 00:51:46,697 No me vengas con un implícito declaración de función. 1269 00:51:46,697 --> 00:51:49,280 Así que si usted consigue este error, uno Lo vas a querer hacer 1270 00:51:49,280 --> 00:51:50,821 es asegurarse de que usted tiene su prototipo. 1271 00:51:50,821 --> 00:51:52,320 1272 00:51:52,320 --> 00:51:53,230 ¿De acuerdo? 1273 00:51:53,230 --> 00:51:55,680 >> Y por último pero no menos importante, identificador no declarado 1274 00:51:55,680 --> 00:52:00,570 es esencialmente cuando intenta utilizar un variable que no se ha declarado. 1275 00:52:00,570 --> 00:52:03,449 Así que, de repente, empiezas diciendo como n plus plus. 1276 00:52:03,449 --> 00:52:04,740 Y el equipo dice lo que es n? 1277 00:52:04,740 --> 00:52:06,660 Nunca me dijiste n era una cosa. 1278 00:52:06,660 --> 00:52:10,930 >> Así que una cosa que usted tiene que asegurarse de que usted hizo es decirle a la computadora qué es n. 1279 00:52:10,930 --> 00:52:13,320 Así, por ejemplo, n puede ser un número entero. 1280 00:52:13,320 --> 00:52:14,999 Y entonces usted evitará este error. 1281 00:52:14,999 --> 00:52:16,290 Cualquier pregunta sobre los errores comunes? 1282 00:52:16,290 --> 00:52:17,260 ¿Sí? 1283 00:52:17,260 --> 00:52:19,344 >> ESTUDIANTE: Por lo implícito declaración de función, 1284 00:52:19,344 --> 00:52:22,343 podría ser también que usted omite uno de las bibliotecas que se suponía 1285 00:52:22,343 --> 00:52:24,400 para incluir, en lugar de el prototipo? 1286 00:52:24,400 --> 00:52:26,359 >> HANNAH: Derecho, por lo que el pregunta era, ¿verdad 1287 00:52:26,359 --> 00:52:28,650 también obtener este error si se olvidó de incluir una biblioteca. 1288 00:52:28,650 --> 00:52:29,085 >> ESTUDIANTE: Sí. 1289 00:52:29,085 --> 00:52:30,876 >> HANNAH: Absolutamente, porque de la misma manera 1290 00:52:30,876 --> 00:52:33,540 que queremos poner nuestros prototipos antes de la función principal, 1291 00:52:33,540 --> 00:52:37,717 si tenemos una biblioteca, los que se van para incluir esencialmente los prototipos, 1292 00:52:37,717 --> 00:52:39,425 incluir las definiciones de las funciones. 1293 00:52:39,425 --> 00:52:40,585 Muy buena pregunta. 1294 00:52:40,585 --> 00:52:43,230 >> ESTUDIANTE: Para una segmentación criticar, sería que también 1295 00:52:43,230 --> 00:52:47,350 sucedería si, al igual que, intentamos acceder a una variable, 1296 00:52:47,350 --> 00:52:51,947 como, en una diferente [inaudible] de lo que fue declarado en? 1297 00:52:51,947 --> 00:52:54,030 HANNAH: Claro, lo que haría que conseguir un fallo de segmentación 1298 00:52:54,030 --> 00:52:56,270 si intentamos acceder a una variable de fuera de alcance? 1299 00:52:56,270 --> 00:52:57,104 ¿Era eso una pregunta? 1300 00:52:57,104 --> 00:52:57,645 ESTUDIANTE: Sí. 1301 00:52:57,645 --> 00:52:58,430 HANNAH: Beautiful. 1302 00:52:58,430 --> 00:53:01,840 Así que probablemente, usted va a obtener una error no declarado identificador lugar. 1303 00:53:01,840 --> 00:53:04,006 Así que sólo va a decir No sé lo que es eso. 1304 00:53:04,006 --> 00:53:04,920 1305 00:53:04,920 --> 00:53:05,920 Enfriar, cualquier otra cosa? 1306 00:53:05,920 --> 00:53:07,744 1307 00:53:07,744 --> 00:53:08,980 Sí, bien, hermosa. 1308 00:53:08,980 --> 00:53:10,330 1309 00:53:10,330 --> 00:53:12,400 >> Todo diestro, por lo que la recursividad. 1310 00:53:12,400 --> 00:53:15,160 Así que he mencionado un par de veces que podríamos conseguir un desbordamiento de pila 1311 00:53:15,160 --> 00:53:17,919 porque estamos llamando a nuestro función recursiva tantas veces. 1312 00:53:17,919 --> 00:53:20,210 Estamos recibiendo todos estos pila marcos, bla, bla, bla. 1313 00:53:20,210 --> 00:53:22,420 Lo que aún es una función recursiva? 1314 00:53:22,420 --> 00:53:25,680 Bueno, una función recursiva es cualquier función que llama a sí mismo. 1315 00:53:25,680 --> 00:53:26,820 1316 00:53:26,820 --> 00:53:30,160 >> Algunas cosas a tener en cuenta cuando se están implementando función recursiva, 1317 00:53:30,160 --> 00:53:31,940 no se olvide de incluir un caso base. 1318 00:53:31,940 --> 00:53:34,010 Un caso base es el punto en el que terminamos. 1319 00:53:34,010 --> 00:53:38,740 Así, por ejemplo, si estamos de codificación, , Decir, de Fibonacci de forma recursiva, 1320 00:53:38,740 --> 00:53:43,210 queremos asegurarnos de que cuando lleguemos a la o el primer número 0 de Fibonacci, 1321 00:53:43,210 --> 00:53:46,220 esos dos números tienen estos casos, porque los que no son dependientes 1322 00:53:46,220 --> 00:53:47,700 en las cosas que vinieron antes. 1323 00:53:47,700 --> 00:53:48,990 Los que tienen sus propios valores. 1324 00:53:48,990 --> 00:53:51,270 1325 00:53:51,270 --> 00:53:55,320 >> Algunos profesionales de la recursividad, que es un cuestión que hemos visto en las pruebas anteriores. 1326 00:53:55,320 --> 00:53:57,930 Pueden dar lugar a más concisa, código elegante. 1327 00:53:57,930 --> 00:54:00,510 Y una gran cantidad de funciones, una montón de diferentes algoritmos, 1328 00:54:00,510 --> 00:54:02,350 en realidad se prestan a la recursividad. 1329 00:54:02,350 --> 00:54:05,510 Su definición podría ser recursivas en sí mismo. 1330 00:54:05,510 --> 00:54:06,980 Así Fibonacci es uno. 1331 00:54:06,980 --> 00:54:07,860 Factorial es uno. 1332 00:54:07,860 --> 00:54:10,480 Ordenamiento por mezcla es uno-- todo cosas que usted puede ver. 1333 00:54:10,480 --> 00:54:12,650 1334 00:54:12,650 --> 00:54:13,460 Aceptar, alguna pregunta? 1335 00:54:13,460 --> 00:54:13,960 ¿Sí? 1336 00:54:13,960 --> 00:54:15,644 1337 00:54:15,644 --> 00:54:19,612 >> ESTUDIANTE: ¿Es un caso de esquina similar a un caso base? 1338 00:54:19,612 --> 00:54:22,590 ¿O es que por alguna otra tipo de [inaudible]? 1339 00:54:22,590 --> 00:54:25,170 >> HANNAH: Claro, por lo que un caso esquina es tan any-- 1340 00:54:25,170 --> 00:54:27,580 es el caso de la misma esquina como caso base? 1341 00:54:27,580 --> 00:54:32,825 Un caso esquina es algo que su código podría comportarse de manera un poco diferente. 1342 00:54:32,825 --> 00:54:34,450 1343 00:54:34,450 --> 00:54:38,610 Caso base es una especie de relación, en que son como casos particulares 1344 00:54:38,610 --> 00:54:40,240 que desea mirar. 1345 00:54:40,240 --> 00:54:43,240 Pero la idea de un caso base es que usted quiere que su función recursiva 1346 00:54:43,240 --> 00:54:44,870 para detener en algún momento. 1347 00:54:44,870 --> 00:54:46,490 No puede seguir llamando a sí mismo para siempre. 1348 00:54:46,490 --> 00:54:47,781 Tiene que parar en algún momento. 1349 00:54:47,781 --> 00:54:49,340 1350 00:54:49,340 --> 00:54:53,460 >> ROB: Sí, con frecuencia, sus casos base podría ser ejemplos de bases de esquina. 1351 00:54:53,460 --> 00:54:55,876 >> HANNAH: Derecho, fresco, cualquier cosa? 1352 00:54:55,876 --> 00:54:58,732 >> ESTUDIANTE: ¿Podría explicar basa un poco más? 1353 00:54:58,732 --> 00:55:01,600 Yo no entiendo muy bien [Inaudible] casos base. 1354 00:55:01,600 --> 00:55:02,676 >> HANNAH: De los casos de base? 1355 00:55:02,676 --> 00:55:03,140 >> ESTUDIANTE: Base casos, sí. 1356 00:55:03,140 --> 00:55:03,770 >> HANNAH: Ah, sí, seguro. 1357 00:55:03,770 --> 00:55:04,270 Vamos a ver. 1358 00:55:04,270 --> 00:55:05,480 ¿Tenemos la tiza por aquí? 1359 00:55:05,480 --> 00:55:06,690 1360 00:55:06,690 --> 00:55:07,320 Sí, lo hacemos. 1361 00:55:07,320 --> 00:55:09,530 OK, así que muy rápido, voy a tratar de escribir lo suficientemente grande 1362 00:55:09,530 --> 00:55:11,320 para que pueda ver en la pantalla. 1363 00:55:11,320 --> 00:55:13,490 Vamos a hablar de, realmente rápidamente, de Fibonacci. 1364 00:55:13,490 --> 00:55:15,550 Así que te voy a dar la secuencia de Fibonacci. 1365 00:55:15,550 --> 00:55:17,090 Usted puede buscar la definición. 1366 00:55:17,090 --> 00:55:26,050 >> Esencialmente, cada número en la secuencia es la suma de los dos números anteriores. 1367 00:55:26,050 --> 00:55:29,720 Aceptar, por lo que la forma en que yo se acaba de describir Fibonacci, 1368 00:55:29,720 --> 00:55:31,530 se podía oír la recursividad, ¿verdad? 1369 00:55:31,530 --> 00:55:35,280 Cuando le dije que cada número es la suma de los dos números anteriores, 1370 00:55:35,280 --> 00:55:36,420 podríamos decir en Aceptar. 1371 00:55:36,420 --> 00:55:38,570 Bueno, la enésima Fibonacci number-- así que vamos a 1372 00:55:38,570 --> 00:55:42,260 decir que tenemos esta función llamada fib fib-- de n 1373 00:55:42,260 --> 00:55:48,260 va a ser igual a fib de n menos 1 plus-- lo siento, 1374 00:55:48,260 --> 00:55:51,240 vamos a pasar a la siguiente línea sobre fib aquí-- de n menos 2. 1375 00:55:51,240 --> 00:55:52,790 1376 00:55:52,790 --> 00:55:56,790 >> OK, así que esto funciona muy bien si estás mirando, por ejemplo, el cero, uno, 1377 00:55:56,790 --> 00:55:59,410 dos, tres, cuatro, quinto número de Fibonacci, 1378 00:55:59,410 --> 00:56:03,561 donde se puede decir que 5 es igual a 2, más 3. 1379 00:56:03,561 --> 00:56:05,060 Pero lo que si usted está en el principio? 1380 00:56:05,060 --> 00:56:07,184 ¿Qué pasa si usted está golpeando estos dos primeros valores? 1381 00:56:07,184 --> 00:56:08,470 1382 00:56:08,470 --> 00:56:11,330 >> Para obtener este 1, no se puede decir añadir los dos anteriores, 1383 00:56:11,330 --> 00:56:13,930 porque ese cero y- yo no lo sé. 1384 00:56:13,930 --> 00:56:15,390 Así que en algún momento, tenemos que dejar. 1385 00:56:15,390 --> 00:56:21,250 En algún momento, tenemos que decir que estos dos sólo tienen sus propias definiciones. 1386 00:56:21,250 --> 00:56:23,890 El número 0 de Fibonacci es 0. 1387 00:56:23,890 --> 00:56:26,115 Y el primer número de Fibonacci es 1. 1388 00:56:26,115 --> 00:56:34,120 >> Así que la manera en que yo podría codificar esto, diría que si n es menor que dos, 1389 00:56:34,120 --> 00:56:35,130 a continuación, sólo volver n. 1390 00:56:35,130 --> 00:56:36,494 Y eso sería mi caso base. 1391 00:56:36,494 --> 00:56:38,660 Así es como yo sé que parar con una función recursiva. 1392 00:56:38,660 --> 00:56:40,640 1393 00:56:40,640 --> 00:56:41,410 ¿Está claro? 1394 00:56:41,410 --> 00:56:41,940 Impresionante. 1395 00:56:41,940 --> 00:56:43,260 Cualquier otra cosa en la recursividad? 1396 00:56:43,260 --> 00:56:44,890 1397 00:56:44,890 --> 00:56:45,930 Hermosa. 1398 00:56:45,930 --> 00:56:48,750 >> Vamos a hablar de forma rápida búsqueda y tiempos tipo de ejecución. 1399 00:56:48,750 --> 00:56:52,660 Y luego voy a dar un poco de Davin tiempo para hablar de ejemplos de codificación. 1400 00:56:52,660 --> 00:56:56,490 Así que aquí están la búsqueda principal y tipo que usted debe saber acerca de. 1401 00:56:56,490 --> 00:56:59,500 Guarantee-- no puedo garantizar, porque no he visto la quiz-- 1402 00:56:59,500 --> 00:57:01,940 pero esto viene a concurso después cuestionario después de dejar de fumar. 1403 00:57:01,940 --> 00:57:04,050 Así que sin duda utilizar esta tabla. 1404 00:57:04,050 --> 00:57:05,682 Al igual, tomar esta tabla. 1405 00:57:05,682 --> 00:57:06,890 Póngalo en su hoja de trucos. 1406 00:57:06,890 --> 00:57:07,931 Serás una persona feliz. 1407 00:57:07,931 --> 00:57:09,010 1408 00:57:09,010 --> 00:57:12,590 >> Esto nos dice que los tiempos de ejecución de cada uno de estos algoritmos de ordenación y búsqueda. 1409 00:57:12,590 --> 00:57:14,020 1410 00:57:14,020 --> 00:57:18,850 Así que la búsqueda lineal, se puede ver de ejecución tiempo, y lo mismo con la búsqueda binaria. 1411 00:57:18,850 --> 00:57:21,490 Repase lo que estos algoritmos hacer, la idea general. 1412 00:57:21,490 --> 00:57:24,220 Mira algunos pseudocódigo, si no propio código. 1413 00:57:24,220 --> 00:57:25,610 1414 00:57:25,610 --> 00:57:30,380 >> Vas a ver que tipo de burbuja tiene un superior atado en el peor de los casos de n al cuadrado. 1415 00:57:30,380 --> 00:57:31,490 1416 00:57:31,490 --> 00:57:34,680 Así que si nuestra matriz estaba completamente hacia atrás antes de que queríamos arreglarlo, 1417 00:57:34,680 --> 00:57:37,090 diríamos que eso es Va a tomar pasos n al cuadrado. 1418 00:57:37,090 --> 00:57:38,160 1419 00:57:38,160 --> 00:57:41,730 Pero en el mejor de los casos, por lo que la límite inferior para el mejor de los casos 1420 00:57:41,730 --> 00:57:44,300 va a ser si es ya perfectamente ordenados. 1421 00:57:44,300 --> 00:57:46,671 Entonces todo lo que tenemos que hacer es compruebe que está ordenada. 1422 00:57:46,671 --> 00:57:47,921 ¿Hay una pregunta aquí? 1423 00:57:47,921 --> 00:57:49,805 >> ESTUDIANTE: ¿Cuándo que desea utilizar especie? 1424 00:57:49,805 --> 00:57:50,747 La especie. 1425 00:57:50,747 --> 00:57:52,160 Tengo curiosidad. 1426 00:57:52,160 --> 00:57:53,510 >> HANNAH: ¿Cuándo que desee utilizar la selección especie? 1427 00:57:53,510 --> 00:57:54,010 Este uno? 1428 00:57:54,010 --> 00:57:55,705 El que está n cuadrado en ambos casos? 1429 00:57:55,705 --> 00:57:56,860 >> ESTUDIANTE: [inaudible]. 1430 00:57:56,860 --> 00:57:58,151 >> HANNAH: Así que es muy diferente. 1431 00:57:58,151 --> 00:58:00,760 Si usted hace que el específico requisitos para el programa, 1432 00:58:00,760 --> 00:58:04,887 como cosas como si sólo nos dijimos implementar un sorry-- search-- 1433 00:58:04,887 --> 00:58:06,720 implementar una especie, podrás probablemente quiera ir 1434 00:58:06,720 --> 00:58:09,950 para uno de los que tiene un mejor caso de n, 1435 00:58:09,950 --> 00:58:12,410 o un límite inferior en el mejor de los casos de n. 1436 00:58:12,410 --> 00:58:14,790 Pero puede haber ciertas cosas como, por ejemplo, 1437 00:58:14,790 --> 00:58:16,767 swaps son realmente caro por alguna razón. 1438 00:58:16,767 --> 00:58:18,850 Entonces usted querría hacer ordenamiento de burbuja, porque 1439 00:58:18,850 --> 00:58:20,641 tener que hacer tantos swaps, cosas por el estilo. 1440 00:58:20,641 --> 00:58:21,710 1441 00:58:21,710 --> 00:58:23,098 Cualquier sí otro--? 1442 00:58:23,098 --> 00:58:25,488 >> ESTUDIANTE: ¿Sería [inaudible] decir que [inaudible]? 1443 00:58:25,488 --> 00:58:30,077 1444 00:58:30,077 --> 00:58:31,910 HANNAH: Eso es una cosa que te contarían 1445 00:58:31,910 --> 00:58:33,670 si lo que buscas en la implementación. 1446 00:58:33,670 --> 00:58:35,850 La forma en que lo haría en realidad pensar en qué es n 1447 00:58:35,850 --> 00:58:40,840 cuadrado es que tenemos que correr a través de nuestra gama de longitud n, 1448 00:58:40,840 --> 00:58:42,765 cada vez que hacer en la mayoría de los swaps, n. 1449 00:58:42,765 --> 00:58:43,980 1450 00:58:43,980 --> 00:58:46,220 Y que tenemos que hacer este proceso n veces. 1451 00:58:46,220 --> 00:58:51,130 >> Así que cuando usted tiene que hacer a lo sumo, n swaps y para n corre a través de la matriz, 1452 00:58:51,130 --> 00:58:52,380 No va a ser n al cuadrado. 1453 00:58:52,380 --> 00:58:55,480 Pero sí, esto será revelado a través de este doble bucle for, 1454 00:58:55,480 --> 00:58:59,428 como la cuestión asked-- o anidado de bucle, debo decir. 1455 00:58:59,428 --> 00:59:00,890 ¿De acuerdo? 1456 00:59:00,890 --> 00:59:03,375 >> Y luego fusionar especie, que es el tipo más rápido que ahora, 1457 00:59:03,375 --> 00:59:07,560 o que hemos cubierto en CS50, sabe que el algoritmo principal es 1458 00:59:07,560 --> 00:59:10,150 esta idea de irrumpir en piezas ordenadas y luego 1459 00:59:10,150 --> 00:59:11,980 fusionando juntos estos bits ordenados. 1460 00:59:11,980 --> 00:59:14,170 Y nos llevará log n log n. 1461 00:59:14,170 --> 00:59:17,110 Cualquier pregunta sobre búsquedas y tipo antes de que yo lo transmiten? 1462 00:59:17,110 --> 00:59:19,840 1463 00:59:19,840 --> 00:59:21,040 Vamos a ver. 1464 00:59:21,040 --> 00:59:21,800 >> ¡Oh, las listas enlazadas. 1465 00:59:21,800 --> 00:59:23,210 Lo sentimos, no tengo un tema más. 1466 00:59:23,210 --> 00:59:25,000 Aceptar, impresionante, vinculado listas. 1467 00:59:25,000 --> 00:59:27,900 Problema con las matrices, que tienen un tamaño fijo. 1468 00:59:27,900 --> 00:59:30,634 Así que si usted no sabe lo grande su entrada va a ser, 1469 00:59:30,634 --> 00:59:32,050 usted no desea crear una matriz. 1470 00:59:32,050 --> 00:59:34,080 Porque si creamos un matriz que es demasiado pequeño, 1471 00:59:34,080 --> 00:59:35,930 podríamos correr en desbordamiento de búfer. 1472 00:59:35,930 --> 00:59:38,890 >> Así que en vez, podríamos hacer algo con listas enlazadas, que 1473 00:59:38,890 --> 00:59:44,280 permite que tengamos una forma dinámica estructura de datos de tamaño 1474 00:59:44,280 --> 00:59:48,970 que nos permitirá almacenar una cantidad más flexible de los datos. 1475 00:59:48,970 --> 00:59:54,030 Así que dentro de cada nodo en nuestra lista enlazada, tenemos dos piezas. 1476 00:59:54,030 --> 00:59:56,820 Tenemos el valor real que se almacena. 1477 00:59:56,820 --> 00:59:59,530 Así que eso es justo lo que haría ver en la matriz, por ejemplo. 1478 00:59:59,530 --> 01:00:04,600 Y entonces también un seguimiento de un puntero a la siguiente cosa en la memoria. 1479 01:00:04,600 --> 01:00:06,430 >> A diferencia de las matrices, las cuales sabemos que todos vamos 1480 01:00:06,430 --> 01:00:10,890 a ser: elementos de la matriz son todos uno después de otras en memory-- vinculado 1481 01:00:10,890 --> 01:00:13,300 listas podrían estar en cualquier lugar en la memoria. 1482 01:00:13,300 --> 01:00:14,590 Son lugares arbitrarios. 1483 01:00:14,590 --> 01:00:16,410 Así que si tuviéramos que en realidad ir a buscar a ellos, 1484 01:00:16,410 --> 01:00:19,770 que hacer un seguimiento de la siguiente cosa en nuestra lista. 1485 01:00:19,770 --> 01:00:22,840 >> Y a continuación, con el fin de saber donde esa lista en su conjunto es, 1486 01:00:22,840 --> 01:00:26,276 todo lo que tenemos para no perder de vista es el primer elemento en nuestra lista enlazada. 1487 01:00:26,276 --> 01:00:27,900 Y eso va a permitir que sigamos a través. 1488 01:00:27,900 --> 01:00:31,020 1489 01:00:31,020 --> 01:00:33,070 >> Así que así es como se puede definir un modo. 1490 01:00:33,070 --> 01:00:36,160 Esta es una gran oportunidad para aprovechar las estructuras. 1491 01:00:36,160 --> 01:00:39,660 Debido a que usted tiene esta idea, así, para un nodo dado, tengo dos piezas. 1492 01:00:39,660 --> 01:00:41,770 Tengo el valor real en sí. 1493 01:00:41,770 --> 01:00:45,610 Y luego tengo un puntero a la siguiente elemento en la lista enlazada. 1494 01:00:45,610 --> 01:00:49,150 Así que ya ves, tenemos un entero n, que va a ser el valor real, 1495 01:00:49,150 --> 01:00:53,150 y luego un puntero a un nodo, llamado siguiente. 1496 01:00:53,150 --> 01:00:56,431 Así que va a ser el próximo elemento en nuestra lista enlazada. 1497 01:00:56,431 --> 01:00:56,972 ESTUDIANTE: Sí? 1498 01:00:56,972 --> 01:01:01,920 ¿Tiene que especificar que la estrella es como una estructura? 1499 01:01:01,920 --> 01:01:05,620 >> HANNAH: Sí, por lo que desde este es casi como una especie de, 1500 01:01:05,620 --> 01:01:07,980 parece un recursivo definición en la que 1501 01:01:07,980 --> 01:01:12,080 necesita saber lo que es un nodo en el interior para encontrar un nodo. 1502 01:01:12,080 --> 01:01:14,450 Dado que no hace en realidad Sabe lo que es un nodo es completamente 1503 01:01:14,450 --> 01:01:17,283 hasta que lleguemos al final de esto-- y después de esto sólo podemos llamarlo 1504 01:01:17,283 --> 01:01:21,935 un node-- dentro de esta definición, tenemos que llamar a un nodo de estructura. 1505 01:01:21,935 --> 01:01:22,560 Muy buena pregunta. 1506 01:01:22,560 --> 01:01:23,580 1507 01:01:23,580 --> 01:01:25,214 Algo más? 1508 01:01:25,214 --> 01:01:26,198 ¿Sí? 1509 01:01:26,198 --> 01:01:29,150 >> ESTUDIANTE: ¿Por qué nosotros tengo que decir nodo dos veces? 1510 01:01:29,150 --> 01:01:33,578 Porque cuando estábamos en [inaudible] sólo teníamos que hacerlo en punto y coma, 1511 01:01:33,578 --> 01:01:37,352 pero ahora tenemos que encontrar que struct nodo? [Inaudible]. 1512 01:01:37,352 --> 01:01:39,060 HANNAH: Así que creo en el último ejemplo, 1513 01:01:39,060 --> 01:01:42,110 estábamos creando en cualquier momento que querido utilizar un estudiante después de eso, usted 1514 01:01:42,110 --> 01:01:46,430 tuvo que utilizar struct node-- Estoy sorry-- struct estudiante. 1515 01:01:46,430 --> 01:01:51,575 Esto nos ha permitido, después de los hechos, sólo nodo uso agregar un nuevo tipo, esencialmente. 1516 01:01:51,575 --> 01:01:53,324 1517 01:01:53,324 --> 01:01:53,990 Eso tiene sentido? 1518 01:01:53,990 --> 01:01:54,984 1519 01:01:54,984 --> 01:01:57,150 Así que tendríamos que volver atrás y mirar el código antes. 1520 01:01:57,150 --> 01:01:59,025 Pero me imagino que no usamos typedef. 1521 01:01:59,025 --> 01:02:02,050 Y le pedimos a la pregunta, ¿por qué tenemos que usar typedef? 1522 01:02:02,050 --> 01:02:05,540 Typedef nos permite evitar la palabra estructura en el principio. 1523 01:02:05,540 --> 01:02:06,221 ¿Sí? 1524 01:02:06,221 --> 01:02:08,095 ESTUDIANTE: ¿Qué tipo de preguntas vendrían hasta 1525 01:02:08,095 --> 01:02:10,400 en cuanto en términos de nodos y listas enlazadas? 1526 01:02:10,400 --> 01:02:15,110 >> HANNAH: Así que una cosa es que podríamos decir cómo podrías buscar a través de una lista enlazada? 1527 01:02:15,110 --> 01:02:16,930 Bien, porque es un poco más complicado 1528 01:02:16,930 --> 01:02:18,520 que si estamos buscando a través de una matriz. 1529 01:02:18,520 --> 01:02:21,472 Sólo podemos mirar elemento cero, elemento uno, elemento dos, bla, bla, 1530 01:02:21,472 --> 01:02:21,972 bla. 1531 01:02:21,972 --> 01:02:22,629 1532 01:02:22,629 --> 01:02:24,420 Si queremos buscar a través de una lista enlazada, 1533 01:02:24,420 --> 01:02:27,229 que en realidad tendríamos que seguir este pequeño laberinto de punteros. 1534 01:02:27,229 --> 01:02:29,270 Así que vamos a ir en realidad a través de este muy rápido. 1535 01:02:29,270 --> 01:02:30,460 1536 01:02:30,460 --> 01:02:32,860 Lo que podríamos hacer en ordenar a-- digamos nosotros 1537 01:02:32,860 --> 01:02:35,430 querer simplemente recorrer nuestra lista totalmente vinculado. 1538 01:02:35,430 --> 01:02:37,450 Nos gustaría empezar por la cabeza. 1539 01:02:37,450 --> 01:02:39,890 Y a continuación, con el fin de pasar al siguiente elemento, 1540 01:02:39,890 --> 01:02:43,680 en lugar de simplemente incrementar por uno como podríamos en ir a través de una matriz, 1541 01:02:43,680 --> 01:02:45,720 en realidad estamos yendo a seguir el siguiente puntero, 1542 01:02:45,720 --> 01:02:48,360 por lo que podemos encontrar en qué parte memoria el siguiente elemento es. 1543 01:02:48,360 --> 01:02:49,357 1544 01:02:49,357 --> 01:02:51,690 Así que sé que no es suficiente para tomar todo esto en este momento, 1545 01:02:51,690 --> 01:02:52,650 pero tendrás que estas diapositivas. 1546 01:02:52,650 --> 01:02:54,730 Así que usted puede ir a través de esto un poco más lentamente. 1547 01:02:54,730 --> 01:02:56,890 Pero, en esencia, lo que queremos que hacer es seguir estos consejos 1548 01:02:56,890 --> 01:02:58,550 a través de la totalidad de la lista enlazada. 1549 01:02:58,550 --> 01:03:00,258 Así que esta es una pregunta se le puede pedir. 1550 01:03:00,258 --> 01:03:01,920 1551 01:03:01,920 --> 01:03:03,980 >> Algo a notar con inserción, digamos 1552 01:03:03,980 --> 01:03:07,925 hemos querido poner un nuevo elemento en la parte delantera de nuestra lista enlazada. 1553 01:03:07,925 --> 01:03:10,800 Tenemos que ser muy cuidadosos sobre el orden en el que se 1554 01:03:10,800 --> 01:03:12,760 reasignado los punteros. 1555 01:03:12,760 --> 01:03:15,230 Porque digamos que acabo de decir en Aceptar. 1556 01:03:15,230 --> 01:03:18,930 Hacer punto la cabeza a este nuevo elemento. 1557 01:03:18,930 --> 01:03:23,550 Sólo asegúrese de que apunte a continuación, 1, tenemos esencialmente perdido el resto de nuestra lista, 1558 01:03:23,550 --> 01:03:25,860 porque no me acuerdo donde 2 vidas. 1559 01:03:25,860 --> 01:03:27,730 >> Así que tenemos que hacer en un orden muy específico. 1560 01:03:27,730 --> 01:03:31,500 En primer lugar, hacemos la nueva elemento de punto a la cabeza. 1561 01:03:31,500 --> 01:03:33,970 Y luego hacemos la cabeza que apunte al nuevo elemento. 1562 01:03:33,970 --> 01:03:38,455 Así que vamos a ver lo que parece con arrows-- así como así. 1563 01:03:38,455 --> 01:03:42,080 Así que al principio tiene el nuevo elemento de punto a la vieja cabeza. 1564 01:03:42,080 --> 01:03:45,990 Y ahora, tenemos la cabeza que apunte al nuevo primer elemento. 1565 01:03:45,990 --> 01:03:47,187 Cualquier pregunta con esto? 1566 01:03:47,187 --> 01:03:49,870 1567 01:03:49,870 --> 01:03:54,350 >> Aceptar aquí hay un código nuevo, algo a mirar un poco más tarde. 1568 01:03:54,350 --> 01:03:58,630 Y ahora voy a darle la vuelta a Davin para GDB y un poco de práctica 1569 01:03:58,630 --> 01:03:59,480 codificación en el papel. 1570 01:03:59,480 --> 01:04:00,597 1571 01:04:00,597 --> 01:04:01,096 Hermosa. 1572 01:04:01,096 --> 01:04:01,810 >> ROB: Y Rob. 1573 01:04:01,810 --> 01:04:02,360 >> HANNAH: Oh, Davin y Rob. 1574 01:04:02,360 --> 01:04:03,055 Lo siento. 1575 01:04:03,055 --> 01:04:03,596 >> ESTUDIANTE: Woo! 1576 01:04:03,596 --> 01:04:08,140 1577 01:04:08,140 --> 01:04:09,110 >> ROB: Gracias. 1578 01:04:09,110 --> 01:04:11,209 >> DAVIN: ¿Usted quiere decir todo muy rápido? 1579 01:04:11,209 --> 01:04:11,875 ROB: Sí, sí. 1580 01:04:11,875 --> 01:04:12,845 DAVIN: Una vez que estoy arriba. 1581 01:04:12,845 --> 01:04:16,240 1582 01:04:16,240 --> 01:04:19,520 Aceptar, mientras que Rob pone el micrófono, así que cuál es GDB? 1583 01:04:19,520 --> 01:04:23,945 Todo el mundo debería haber visto en GDB clase y también en horario de oficina. 1584 01:04:23,945 --> 01:04:25,070 Y usted debe ser el uso de la misma. 1585 01:04:25,070 --> 01:04:25,750 Entonces, ¿qué es GDB? 1586 01:04:25,750 --> 01:04:28,030 1587 01:04:28,030 --> 01:04:28,850 ¿Alguien? 1588 01:04:28,850 --> 01:04:29,540 >> ESTUDIANTE: Es un depurador. 1589 01:04:29,540 --> 01:04:30,250 >> DAVIN: Es un depurador. 1590 01:04:30,250 --> 01:04:31,624 Y ¿qué se le permite hacer? 1591 01:04:31,624 --> 01:04:33,064 Al igual que, ¿por qué nos gusta el BGF? 1592 01:04:33,064 --> 01:04:34,480 ESTUDIANTE: Para retrasar el programa. 1593 01:04:34,480 --> 01:04:36,740 DAVIN: Derecho, para que pueda caminar a través de ella como un ritmo humano. 1594 01:04:36,740 --> 01:04:38,490 Y así, ¿cuáles son algunas comandos que puede hacer? 1595 01:04:38,490 --> 01:04:40,407 Bueno, es probable ruptura su comando favorito. 1596 01:04:40,407 --> 01:04:43,240 Debido a que le permite romper el programa y, de hecho caminar a través de él 1597 01:04:43,240 --> 01:04:44,280 línea por línea. 1598 01:04:44,280 --> 01:04:46,500 >> Ejecutar le permite ejecutar la misma. 1599 01:04:46,500 --> 01:04:48,210 A continuación, como caminar a través. 1600 01:04:48,210 --> 01:04:49,820 ¿Cuál es la próxima y entre paso? 1601 01:04:49,820 --> 01:04:52,190 1602 01:04:52,190 --> 01:04:53,190 Espere, decir eso en voz alta. 1603 01:04:53,190 --> 01:04:54,060 Fue correcta. 1604 01:04:54,060 --> 01:04:55,280 >> ESTUDIANTE: [inaudible]. 1605 01:04:55,280 --> 01:04:56,190 >> DAVIN: Sí, impresionante. 1606 01:04:56,190 --> 01:04:59,210 Así como, el próximo paso y, si you're-- digamos que usted tiene una función que 1607 01:04:59,210 --> 01:04:59,950 definir. 1608 01:04:59,950 --> 01:05:03,350 Digamos que algunos en su función principal, y estás golpeando siguiente, siguiente, 1609 01:05:03,350 --> 01:05:03,850 siguiente. 1610 01:05:03,850 --> 01:05:05,910 Usted está en realidad va a ejecutar esa función, 1611 01:05:05,910 --> 01:05:07,285 pero usted va a saltar por encima de ella. 1612 01:05:07,285 --> 01:05:09,711 Si golpeas a paso, o s o lo que sea, usted es 1613 01:05:09,711 --> 01:05:11,460 va a saltar en realidad en esa función, 1614 01:05:11,460 --> 01:05:14,110 y entonces usted puede golpear próximo para ver las distintas llamadas 1615 01:05:14,110 --> 01:05:16,170 dentro de esa función en particular. 1616 01:05:16,170 --> 01:05:16,670 ¿Sí? 1617 01:05:16,670 --> 01:05:18,670 >> ESTUDIANTE: ¿Hay una manera saltar, como, echarse atrás? 1618 01:05:18,670 --> 01:05:20,750 DAVIN: Finalizar, sí, terminar con usted saltar. 1619 01:05:20,750 --> 01:05:22,570 Así que va a terminar ese función, y entonces estás 1620 01:05:22,570 --> 01:05:24,153 va a estar de vuelta en principal, por ejemplo. 1621 01:05:24,153 --> 01:05:25,250 1622 01:05:25,250 --> 01:05:27,370 Imprimir imprimirá a cabo una vez. 1623 01:05:27,370 --> 01:05:29,381 Algo que siempre uso es pantalla. 1624 01:05:29,381 --> 01:05:31,880 La pantalla imprimirlo constantemente a lo largo de la totalidad 1625 01:05:31,880 --> 01:05:32,470 de su programa. 1626 01:05:32,470 --> 01:05:33,810 >> Por ejemplo, si usted es en un bucle for, y usted 1627 01:05:33,810 --> 01:05:37,018 quiero ver cómo está cambiando algo, y usted no quiere, como, constantemente 1628 01:05:37,018 --> 01:05:38,940 estar haciendo como impresión, impresión, impresión, visualización 1629 01:05:38,940 --> 01:05:43,230 mostrará esa variable continuamente, cada vez que se golpeó en Siguiente. 1630 01:05:43,230 --> 01:05:44,310 Y continuar. 1631 01:05:44,310 --> 01:05:45,905 Así GBD, eso es GDB. 1632 01:05:45,905 --> 01:05:47,160 1633 01:05:47,160 --> 01:05:49,180 >> ESTUDIANTE: ¿Cuál es el uno donde [inaudible]? 1634 01:05:49,180 --> 01:05:50,150 1635 01:05:50,150 --> 01:05:50,900 DAVIN: ¿Qué es? 1636 01:05:50,900 --> 01:05:52,310 1637 01:05:52,310 --> 01:05:54,390 >> ESTUDIANTE: ¿Cuál es el-- las variables locales. 1638 01:05:54,390 --> 01:05:55,364 1639 01:05:55,364 --> 01:05:57,780 ROB: No es algo que en realidad como la gente o algo así. 1640 01:05:57,780 --> 01:05:58,140 Yo can't-- 1641 01:05:58,140 --> 01:05:59,930 >> DAVIN: Podría ser algo así, sí. 1642 01:05:59,930 --> 01:06:00,830 >> HANNAH: En los locales? 1643 01:06:00,830 --> 01:06:01,510 >> DAVIN: Eso es todo. 1644 01:06:01,510 --> 01:06:02,134 Ese es el uno. 1645 01:06:02,134 --> 01:06:03,040 ROB: Beautiful. 1646 01:06:03,040 --> 01:06:04,030 >> DAVIN: Sí. 1647 01:06:04,030 --> 01:06:06,010 >> ESTUDIANTE: ¿Qué significa seguir hacer? 1648 01:06:06,010 --> 01:06:08,010 >> DAVIN: Se continues-- por lo que es justo va a continuar con sus programas. 1649 01:06:08,010 --> 01:06:09,843 Así que si se rompe y golpeas continuar, va 1650 01:06:09,843 --> 01:06:13,119 a tan sólo ejecute ese programa hasta que llegue ese descanso de nuevo. 1651 01:06:13,119 --> 01:06:14,910 Así, por ejemplo, si usted se rompió en una función, 1652 01:06:14,910 --> 01:06:16,720 y que vas a hacer, como para bucle o algo por el estilo, 1653 01:06:16,720 --> 01:06:19,869 y de llegar a continuar, que va a continuar y volver a ese descanso. 1654 01:06:19,869 --> 01:06:22,660 O no hay ruptura, que va a continuar y terminar el programa. 1655 01:06:22,660 --> 01:06:25,000 >> ROB: Así que al igual que las paradas ejecutar en el primer punto de interrupción 1656 01:06:25,000 --> 01:06:27,010 golpeas, si luego hit continuar, va a mantener 1657 01:06:27,010 --> 01:06:28,070 ir hasta que sea el siguiente punto de interrupción. 1658 01:06:28,070 --> 01:06:30,111 Y luego continuar irá al siguiente punto de interrupción. 1659 01:06:30,111 --> 01:06:31,264 1660 01:06:31,264 --> 01:06:32,680 DAVIN: ¿Alguna otra pregunta sobre GDB? 1661 01:06:32,680 --> 01:06:33,577 1662 01:06:33,577 --> 01:06:35,410 Así que creo que en el pasado, nosotros le hemos pedido lo 1663 01:06:35,410 --> 01:06:37,690 BGF es y dar una ejemplo de algunas cosas que usted 1664 01:06:37,690 --> 01:06:40,770 puede hacer con el BGF, por lo realmente simple, pero sí. 1665 01:06:40,770 --> 01:06:42,280 Hay que ir. 1666 01:06:42,280 --> 01:06:43,250 Y nodos? 1667 01:06:43,250 --> 01:06:49,571 >> ROB: Sí, por lo que la dirección era? 1668 01:06:49,571 --> 01:06:50,851 1669 01:06:50,851 --> 01:06:51,726 ESTUDIANTE: Eso fue todo. 1670 01:06:51,726 --> 01:06:52,160 DAVIN: Espera. 1671 01:06:52,160 --> 01:06:52,270 ROB: Este chico? 1672 01:06:52,270 --> 01:06:52,936 DAVIN: Que uno. 1673 01:06:52,936 --> 01:06:54,660 ROB: Este chico, oh, no me di cuenta. 1674 01:06:54,660 --> 01:06:56,940 Así que no estábamos claros en lo que el-- no lo hago 1675 01:06:56,940 --> 01:06:58,680 sabía quién era-- pero la pregunta. 1676 01:06:58,680 --> 01:07:01,180 No sabemos exactamente lo que estaban preguntando por él, por lo que sólo 1677 01:07:01,180 --> 01:07:04,800 para aclarar algo. 1678 01:07:04,800 --> 01:07:07,750 Así que en primer lugar, como he dicho antes, typedef siempre estás usando sólo 1679 01:07:07,750 --> 01:07:09,305 crear un apodo para un tipo. 1680 01:07:09,305 --> 01:07:13,420 Así que aquí, el apodo que estamos crear es para este nodo struct tipo. 1681 01:07:13,420 --> 01:07:18,070 >> Así que primero, haciendo caso omiso de este nodo en la typedef, por lo que esta estructura rizado nodo 1682 01:07:18,070 --> 01:07:21,060 prepararse hasta el próximo rizado corsé es el tipo de nodo estructura. 1683 01:07:21,060 --> 01:07:23,470 Y necesitamos a ese nodo allá arriba, porque nosotros 1684 01:07:23,470 --> 01:07:25,190 que tenga que hacer referencia a los nodos de aquí. 1685 01:07:25,190 --> 01:07:29,380 Así que con este tipo de estructura recursiva, que necesita para dar este struct un nombre, 1686 01:07:29,380 --> 01:07:31,340 o de lo contrario no podría decir nodo struct aquí. 1687 01:07:31,340 --> 01:07:33,340 Mientras que antes con el estudiante cuando nos escribimos, creo, 1688 01:07:33,340 --> 01:07:35,423 nosotros no tenemos que decir estudiante allí, porque nosotros 1689 01:07:35,423 --> 01:07:40,370 no tenía que decir struct estudiante dentro de la propia estructura. 1690 01:07:40,370 --> 01:07:43,730 Así que es el recursivo que nos obliga a decir nodo allí. 1691 01:07:43,730 --> 01:07:46,610 >> Este nodo es simplemente el nombre que estamos dando nodo para el typedef. 1692 01:07:46,610 --> 01:07:48,520 Así que el nodo no es el mismo que el nodo. 1693 01:07:48,520 --> 01:07:51,567 Pero este nodo es el struct mismo que el nodo struct. 1694 01:07:51,567 --> 01:07:54,150 DAVIN: Así que cuando usted llama, como, el nodo en su función principal, 1695 01:07:54,150 --> 01:07:55,350 usted no va a tengo que decir nodo estructura. 1696 01:07:55,350 --> 01:07:58,360 Usted sólo puede decir nodo, porque nodo es un diferente-- es básicamente 1697 01:07:58,360 --> 01:07:59,440 que dices, OK. 1698 01:07:59,440 --> 01:08:01,490 En lugar de tener que llamar struct nodo en mi código, 1699 01:08:01,490 --> 01:08:04,050 Sólo quiero cambiarle el nombre como nodo para que sea más fácil. 1700 01:08:04,050 --> 01:08:06,800 >> ROB: Si siempre utilizar typedef, entonces esto 1701 01:08:06,800 --> 01:08:11,240 es el único lugar que vas a tener para declarar una variable con el nodo de estructura 1702 01:08:11,240 --> 01:08:11,740 estrella, sí. 1703 01:08:11,740 --> 01:08:14,650 1704 01:08:14,650 --> 01:08:20,801 >> DAVIN: OK, por lo que la última parte es difícil de enseñar porque-- 1705 01:08:20,801 --> 01:08:22,185 1706 01:08:22,185 --> 01:08:22,685 ROB: ¿Qué? 1707 01:08:22,685 --> 01:08:24,098 1708 01:08:24,098 --> 01:08:25,649 >> DAVIN: Debido a que está en el papel de codificación. 1709 01:08:25,649 --> 01:08:28,689 Así que cada año tenemos código de preguntas de papel. 1710 01:08:28,689 --> 01:08:32,510 Así que creo que el año pasado, 12 de los 80 puntos fueron código en el papel. 1711 01:08:32,510 --> 01:08:36,720 Año antes de eso, 10 de 80, años antes de que, el 20 de cada 100, 1712 01:08:36,720 --> 01:08:37,939 por lo que un buen número de ellos. 1713 01:08:37,939 --> 01:08:40,970 Así que vas a tener que ser capaz de para codificar estas funciones con la mano. 1714 01:08:40,970 --> 01:08:45,340 >> Así que pensé que podríamos ir a través de un par de ellos y ver cómo la gente hace, 1715 01:08:45,340 --> 01:08:47,340 tipo de caminar a través de poco a poco con la gente. 1716 01:08:47,340 --> 01:08:48,790 1717 01:08:48,790 --> 01:08:52,420 Así que en general, y strlen atoi haber sido muy popular. 1718 01:08:52,420 --> 01:08:55,670 El año pasado, creo que tuvimos GetPositiveInt y randomInt. 1719 01:08:55,670 --> 01:08:58,591 Pero prisionero de guerra, por lo que el poder, también una positiva también. 1720 01:08:58,591 --> 01:09:00,965 Vamos a ir a través de lo mejor uno o dos de ellos juntos. 1721 01:09:00,965 --> 01:09:02,510 1722 01:09:02,510 --> 01:09:03,729 ¿Qué es lo que la gente quiere ver? 1723 01:09:03,729 --> 01:09:05,037 1724 01:09:05,037 --> 01:09:05,767 >> ESTUDIANTE: Atoi. 1725 01:09:05,767 --> 01:09:06,350 ESTUDIANTE: Sí. 1726 01:09:06,350 --> 01:09:06,859 DAVIN: Atoi? 1727 01:09:06,859 --> 01:09:07,800 ESTUDIANTE: [inaudible]. 1728 01:09:07,800 --> 01:09:09,682 DAVIN: OK, voy hacerlo en el tablero. 1729 01:09:09,682 --> 01:09:11,765 ¿Usted tiene una preferencia si lo hago aquí o allá? 1730 01:09:11,765 --> 01:09:13,580 1731 01:09:13,580 --> 01:09:14,550 Allí, Gabe dice allí. 1732 01:09:14,550 --> 01:09:16,729 1733 01:09:16,729 --> 01:09:19,580 >> ROB: Y esto es pensamientos generales sobre estas cuestiones de codificación. 1734 01:09:19,580 --> 01:09:21,705 Trate de escribir algo. 1735 01:09:21,705 --> 01:09:22,580 No lo deje en blanco. 1736 01:09:22,580 --> 01:09:23,080 >> DAVIN: Sí. 1737 01:09:23,080 --> 01:09:25,520 ROB: Si usted puede conseguir el volver tipo correcto, 1738 01:09:25,520 --> 01:09:27,090 o tal vez podríamos darle a usted, pero si se puede, al igual que, 1739 01:09:27,090 --> 01:09:30,256 escribir la función general de la firma, Si usted puede conseguir los casos base correcta, 1740 01:09:30,256 --> 01:09:32,244 o casos de esquina, o recordando cheque por nula, 1741 01:09:32,244 --> 01:09:34,160 siempre y cuando usted tiene un poco de cosas, entonces tal vez 1742 01:09:34,160 --> 01:09:35,880 le puede dar un par puntos para el problema. 1743 01:09:35,880 --> 01:09:36,810 No se limite a dejar en blanco. 1744 01:09:36,810 --> 01:09:38,560 >> DAVIN: Sí, y si son sólo completamente 1745 01:09:38,560 --> 01:09:40,580 perplejo en cómo en realidad convertirse en código. 1746 01:09:40,580 --> 01:09:43,140 Si usted escribe pseudocódigo, eso es bastante bueno también. 1747 01:09:43,140 --> 01:09:46,390 Así es como, es una cuestión de seis puntos, y escribir el pseudocódigo correcta, 1748 01:09:46,390 --> 01:09:47,858 que obtendrá al menos dos puntos. 1749 01:09:47,858 --> 01:09:49,149 Así que no sólo dejarlos en blanco. 1750 01:09:49,149 --> 01:09:50,279 Trate de poner algo. 1751 01:09:50,279 --> 01:09:51,770 >> ROB: Tiene que ser el pseudocódigo correcta, sin embargo. 1752 01:09:51,770 --> 01:09:52,270 >> DAVIN: Sí. 1753 01:09:52,270 --> 01:09:55,381 ROB: Así que son por lo general son menos indulgente con los errores en pseudocódigo. 1754 01:09:55,381 --> 01:09:57,130 DAVIN: OK, así que ustedes querido ver atoi. 1755 01:09:57,130 --> 01:09:58,480 1756 01:09:58,480 --> 01:10:02,820 Aceptar, por lo que sólo realmente-- así que lo que quiere hacer 1757 01:10:02,820 --> 01:10:04,969 es que usted va a estar dado algún tipo de número. 1758 01:10:04,969 --> 01:10:07,010 Pero este número no es va a ser un int, ¿verdad? 1759 01:10:07,010 --> 01:10:08,574 ¿Qué va a ser? 1760 01:10:08,574 --> 01:10:09,480 >> ESTUDIANTE: [inaudible]. 1761 01:10:09,480 --> 01:10:11,146 >> DAVIN: Va a ser una cadena, ¿no? 1762 01:10:11,146 --> 01:10:13,160 Así que si le dieron un string-- vamos a decir-- 1763 01:10:13,160 --> 01:10:15,228 >> ROB: ¿Debo levantar un editor? 1764 01:10:15,228 --> 01:10:16,200 Puedo tirar up-- 1765 01:10:16,200 --> 01:10:16,800 >> DAVIN: Oh, usted quiere hacerlo en-- 1766 01:10:16,800 --> 01:10:17,420 >> ROB: ¿Prefiere la junta? 1767 01:10:17,420 --> 01:10:18,800 >> DAVIN: ¿Qué quieres hacer? 1768 01:10:18,800 --> 01:10:19,900 Quiero decir, ¿quieres hacerlo a mano? 1769 01:10:19,900 --> 01:10:21,460 ¿O es que quiere hacerlo por computadora? 1770 01:10:21,460 --> 01:10:22,180 >> ROB: hacerlo a mano. 1771 01:10:22,180 --> 01:10:22,805 >> DAVIN: [Risas] 1772 01:10:22,805 --> 01:10:23,950 ROB: hacerlo a mano. 1773 01:10:23,950 --> 01:10:25,469 >> DAVIN: OK, así que va a ser atoi. 1774 01:10:25,469 --> 01:10:27,760 Entonces, ¿qué es it-- Quiero decir, vamos a probablemente te diera esto. 1775 01:10:27,760 --> 01:10:29,106 Pero lo que te va a volver? 1776 01:10:29,106 --> 01:10:29,452 >> ESTUDIANTE: Int. 1777 01:10:29,452 --> 01:10:31,076 >> DAVIN: Se va a volver int, ¿verdad? 1778 01:10:31,076 --> 01:10:33,772 Así que-- Yo no quiero hacerlo allí. 1779 01:10:33,772 --> 01:10:34,510 Voy a hacer aquí. 1780 01:10:34,510 --> 01:10:36,596 >> ROB: Usted puede tirar de él hacia abajo y luego empuje hacia arriba en él. 1781 01:10:36,596 --> 01:10:38,500 1782 01:10:38,500 --> 01:10:40,385 >> DAVIN: sí. 1783 01:10:40,385 --> 01:10:43,880 [Risas] El cambio de juego. 1784 01:10:43,880 --> 01:10:50,950 OK, así que va a ser int atoi, y ¿cómo se va a tomar? 1785 01:10:50,950 --> 01:10:52,180 1786 01:10:52,180 --> 01:10:57,780 Una estrella de carbón, por lo que sólo una cadena, estrella s, al igual que. 1787 01:10:57,780 --> 01:10:59,240 >> ROB: Estrella agradable, agradable. 1788 01:10:59,240 --> 01:11:02,582 1789 01:11:02,582 --> 01:11:04,040 DAVIN: Esto podría no estar allí, en Aceptar. 1790 01:11:04,040 --> 01:11:04,540 ROB: Sí. 1791 01:11:04,540 --> 01:11:06,670 DAVIN: OK, así que la primera cosa que quiere hacer-- I 1792 01:11:06,670 --> 01:11:08,490 no sé si alguien miró en la práctica solutions-- 1793 01:11:08,490 --> 01:11:10,150 pero lo que vas a querer hacer es que eres 1794 01:11:10,150 --> 01:11:11,570 va a querer tener un bucle, porque eres 1795 01:11:11,570 --> 01:11:14,100 va a querer en realidad paso a través de esta cadena. 1796 01:11:14,100 --> 01:11:18,880 Así helpful-- así que digamos vamos a un bucle for, 1797 01:11:18,880 --> 01:11:22,270 y vamos al paso a través de cada elemento de la cadena. 1798 01:11:22,270 --> 01:11:23,470 ¿Por cuánto tiempo es eso? 1799 01:11:23,470 --> 01:11:26,464 ¿Cuántas veces vamos para recorrer en ese bucle for? 1800 01:11:26,464 --> 01:11:27,130 ESTUDIANTE: Sterln? 1801 01:11:27,130 --> 01:11:27,963 DAVIN: Sterln, sí. 1802 01:11:27,963 --> 01:11:29,350 1803 01:11:29,350 --> 01:11:41,294 Así que digamos que es igual a la longitud int sterln s. 1804 01:11:41,294 --> 01:11:44,240 1805 01:11:44,240 --> 01:11:48,740 Y sólo curiosidad, ¿por qué es siempre amable de mejor hacer esto fuera de los bucles? 1806 01:11:48,740 --> 01:11:52,277 Al igual que, ¿por qué es mejor llamar esta función fuera de un bucle? 1807 01:11:52,277 --> 01:11:53,360 Sólo comprobar una cordura rápida? 1808 01:11:53,360 --> 01:11:55,810 1809 01:11:55,810 --> 01:11:56,311 ¿Sí? 1810 01:11:56,311 --> 01:11:58,268 ESTUDIANTE: ¿Así que usted no lo hace tiene que mantener el control de la misma. 1811 01:11:58,268 --> 01:11:59,400 Usted puede simplemente [inaudible]. 1812 01:11:59,400 --> 01:12:01,560 >> DAVIN: Exactamente, así que sí, exactamente lo que dijo. 1813 01:12:01,560 --> 01:12:03,101 Así que no tenemos que mantener el control de la misma. 1814 01:12:03,101 --> 01:12:05,690 Así, por ejemplo, si yo estoy llamando esta función dentro de un bucle, 1815 01:12:05,690 --> 01:12:08,050 entonces voy a seguir llamando esta función varias veces. 1816 01:12:08,050 --> 01:12:10,080 Y eso va a disminuir la eficacia de su programa. 1817 01:12:10,080 --> 01:12:12,370 Así que es siempre útil para declarar fuera. 1818 01:12:12,370 --> 01:12:14,370 >> ROB: Eso se dijo, en alguno de estos problemas, 1819 01:12:14,370 --> 01:12:17,940 más o menos el tiempo que se obtiene una solución de trabajo, se obtiene el crédito completo. 1820 01:12:17,940 --> 01:12:20,820 Así que no se preocupe si su diseño es absolutamente terrible. 1821 01:12:20,820 --> 01:12:22,120 1822 01:12:22,120 --> 01:12:25,230 Podría hacernos malestar la lectura de su código. 1823 01:12:25,230 --> 01:12:28,160 Pero siempre y cuando funciona, obtendrá los puntos. 1824 01:12:28,160 --> 01:12:29,302 >> DAVIN: Sí. 1825 01:12:29,302 --> 01:12:31,260 Aceptar, por lo que a continuación voy a declarar alguna variable. 1826 01:12:31,260 --> 01:12:33,900 Es sólo va a llamar a int suma. 1827 01:12:33,900 --> 01:12:37,031 Y yo voy a establecer este igual a cero, al igual que. 1828 01:12:37,031 --> 01:12:38,780 Y eso es sólo ir ser un marcador de posición. 1829 01:12:38,780 --> 01:12:40,960 Así que va a ser lo que voy a volver. 1830 01:12:40,960 --> 01:12:43,730 Así que me voy a la larga devolver la suma de este programa. 1831 01:12:43,730 --> 01:12:44,980 Así que tengo estas dos variables. 1832 01:12:44,980 --> 01:12:45,563 Tengo longitud. 1833 01:12:45,563 --> 01:12:46,500 Tengo suma. 1834 01:12:46,500 --> 01:12:48,290 Y ahora vamos a saltar en nuestra cadena. 1835 01:12:48,290 --> 01:12:49,510 >> Así que vamos a tener nuestro bucle for. 1836 01:12:49,510 --> 01:13:06,520 Así cuatro int I es igual a 0 w, mientras I es menor que la longitud I más ventaja. 1837 01:13:06,520 --> 01:13:07,150 Y ahora-- 1838 01:13:07,150 --> 01:13:10,920 1839 01:13:10,920 --> 01:13:11,420 ROB: Niza. 1840 01:13:11,420 --> 01:13:14,030 DAVIN: OK, y ahora aquí viene la carne de nuestro código. 1841 01:13:14,030 --> 01:13:17,380 Así que en realidad se puede hacer Esto, básicamente, en una sola línea. 1842 01:13:17,380 --> 01:13:20,702 Así que ¿Alguien tiene una idea de lo que vamos a hacer a continuación? 1843 01:13:20,702 --> 01:13:23,680 1844 01:13:23,680 --> 01:13:25,380 OK, así que eso está bien. 1845 01:13:25,380 --> 01:13:35,860 Así que estamos haciendo para decir suma equals-- déjame Scoot esta suma over-- 1846 01:13:35,860 --> 01:13:50,010 es igual a la suma de 10 plus-- que estamos Va a tomar s yo menos uno 1847 01:13:50,010 --> 01:13:54,787 cita una cita 0 hace, así. 1848 01:13:54,787 --> 01:13:55,620 ROB: Muy intuitivo. 1849 01:13:55,620 --> 01:13:56,980 1850 01:13:56,980 --> 01:13:57,880 >> DAVIN: lo aplastó. 1851 01:13:57,880 --> 01:14:01,438 OK, así que alguien-- lo tengo, lo tengo. 1852 01:14:01,438 --> 01:14:03,680 1853 01:14:03,680 --> 01:14:06,960 OK, así que esto va claramente hacia arriba. 1854 01:14:06,960 --> 01:14:08,320 1855 01:14:08,320 --> 01:14:09,450 ¿Qué quiere decir esto? 1856 01:14:09,450 --> 01:14:12,120 Así que ¿alguien sabe lo que esto significa? 1857 01:14:12,120 --> 01:14:13,826 ¿Todos pueden ver esto? 1858 01:14:13,826 --> 01:14:16,088 No, nadie puede ver esto, en Aceptar. 1859 01:14:16,088 --> 01:14:17,390 1860 01:14:17,390 --> 01:14:18,340 Voy a-- 1861 01:14:18,340 --> 01:14:20,506 >> ROB: Voy a escribir la fórmula justo aquí. 1862 01:14:20,506 --> 01:14:23,140 DAVIN: OK, Rob va a hacerlo en el equipo, lo cual es divertido. 1863 01:14:23,140 --> 01:14:26,889 1864 01:14:26,889 --> 01:14:27,514 ROB: Oh mi Dios. 1865 01:14:27,514 --> 01:14:34,340 1866 01:14:34,340 --> 01:14:35,010 ¿O no lo haré. 1867 01:14:35,010 --> 01:14:36,288 1868 01:14:36,288 --> 01:14:36,954 DAVIN: En espera. 1869 01:14:36,954 --> 01:14:42,300 1870 01:14:42,300 --> 01:14:44,260 ESTUDIANTE: Tengo una pregunta. 1871 01:14:44,260 --> 01:14:45,348 DAVIN: Sí, claro. 1872 01:14:45,348 --> 01:14:46,223 ESTUDIANTE: [inaudible]? 1873 01:14:46,223 --> 01:14:52,529 1874 01:14:52,529 --> 01:14:54,570 DAVIN: OK, por lo que en realidad, como, simplemente, en general, 1875 01:14:54,570 --> 01:14:56,710 si usted fuera a poner, como, en esta declaración int 1876 01:14:56,710 --> 01:14:59,770 I es igual a la longitud 0 comas iguales sterln, que-- 1877 01:14:59,770 --> 01:15:01,200 >> ESTUDIANTE: [inaudible]. 1878 01:15:01,200 --> 01:15:03,585 >> DAVIN: Eso está bien, porque que- 1879 01:15:03,585 --> 01:15:05,543 ESTUDIANTE: ¿Por qué usted incluso que tenga que utilizar la longitud? 1880 01:15:05,543 --> 01:15:08,620 ¿Por qué no podía simplemente [inaudible] sterln s, al igual que todo el tiempo [inaudible]? 1881 01:15:08,620 --> 01:15:09,460 >> DAVIN: ¿Quieres decir aquí? 1882 01:15:09,460 --> 01:15:10,001 >> ESTUDIANTE: Sí. 1883 01:15:10,001 --> 01:15:12,630 DAVIN: Porque cada este tiempo para tiradas de bucle, 1884 01:15:12,630 --> 01:15:14,295 que va a evaluar esta afección. 1885 01:15:14,295 --> 01:15:14,920 ESTUDIANTE: Derecho. 1886 01:15:14,920 --> 01:15:16,836 DAVIN: Y si usted tiene sterln allí, entonces es 1887 01:15:16,836 --> 01:15:19,510 va a tener que llamar a realidad esa función cada vez. 1888 01:15:19,510 --> 01:15:21,090 Así que en lugar de simplemente comparándolo con un int, 1889 01:15:21,090 --> 01:15:23,548 usted va a estar llamando a un función y luego comparándolo 1890 01:15:23,548 --> 01:15:24,510 para el valor de retorno. 1891 01:15:24,510 --> 01:15:25,860 Sí, por lo que es justo, sí. 1892 01:15:25,860 --> 01:15:28,860 1893 01:15:28,860 --> 01:15:30,770 >> Niza, OK, por lo que ahora todo el mundo puede verlo. 1894 01:15:30,770 --> 01:15:33,400 ¿Qué does-- esto es como, eso es todo. 1895 01:15:33,400 --> 01:15:34,580 Este es el atasco, aquí mismo. 1896 01:15:34,580 --> 01:15:37,030 1897 01:15:37,030 --> 01:15:37,930 Qué significa eso? 1898 01:15:37,930 --> 01:15:39,250 1899 01:15:39,250 --> 01:15:39,970 ¿Qué estoy haciendo? 1900 01:15:39,970 --> 01:15:41,890 1901 01:15:41,890 --> 01:15:42,880 Sí, una idea? 1902 01:15:42,880 --> 01:15:43,482 ¿Sí? 1903 01:15:43,482 --> 01:15:45,692 >> Estudiante: Bueno, por lo que cuando usted está entrando en una matriz, 1904 01:15:45,692 --> 01:15:47,525 te vas a ir de izquierda a derecha, 1905 01:15:47,525 --> 01:15:51,786 por lo que vamos a ir en decimal de abajo de la [inaudible]. 1906 01:15:51,786 --> 01:15:52,410 DAVIN: Exactamente. 1907 01:15:52,410 --> 01:15:55,063 ESTUDIANTE: Así que cada uno hay que multiplicar 1908 01:15:55,063 --> 01:15:59,490 lo que vio como el valor de la int por el tiempo se llega a mover que más de una. 1909 01:15:59,490 --> 01:16:01,590 >> DAVIN: Perfecto, perfecto, así por ejemplo, vamos a 1910 01:16:01,590 --> 01:16:05,376 digo yo di usted-- estoy va a escribir por aquí. 1911 01:16:05,376 --> 01:16:06,480 No, no lo soy. 1912 01:16:06,480 --> 01:16:08,640 Voy a escribir aquí. 1913 01:16:08,640 --> 01:16:12,080 Digamos que te di 76, ¿no? 1914 01:16:12,080 --> 01:16:13,380 Digamos que yo te doy 76. 1915 01:16:13,380 --> 01:16:15,360 Eso es una cadena, para empezar, ¿de acuerdo? 1916 01:16:15,360 --> 01:16:16,840 >> Así que la longitud es qué? 1917 01:16:16,840 --> 01:16:18,060 1918 01:16:18,060 --> 01:16:19,060 2, ¿verdad? 1919 01:16:19,060 --> 01:16:20,290 Suma es 0. 1920 01:16:20,290 --> 01:16:21,600 Entonces nos lanzamos en nuestro bucle for. 1921 01:16:21,600 --> 01:16:24,187 Bien, la primera iteración de esto, ¿qué va a ser? 1922 01:16:24,187 --> 01:16:25,270 Va a ser la suma es 0. 1923 01:16:25,270 --> 01:16:27,180 Así que resumir veces 10 0. 1924 01:16:27,180 --> 01:16:28,500 Eso es de sentido. 1925 01:16:28,500 --> 01:16:29,880 Entonces, ¿qué hace esto? 1926 01:16:29,880 --> 01:16:30,845 1927 01:16:30,845 --> 01:16:31,720 ESTUDIANTE: [inaudible]. 1928 01:16:31,720 --> 01:16:33,110 1929 01:16:33,110 --> 01:16:37,430 >> DAVIN: Se va a convertir ese carácter en un entero, ¿no? 1930 01:16:37,430 --> 01:16:42,160 Es un poco como con su problema definido-- este luz-- 1931 01:16:42,160 --> 01:16:44,170 que es algo así como con problema ajustado a Visioneer. 1932 01:16:44,170 --> 01:16:45,980 Usted está tratando con valores ASCII. 1933 01:16:45,980 --> 01:16:48,520 Así que si te doy, como, un siete, pero es un personaje, 1934 01:16:48,520 --> 01:16:50,965 y usted quiere saber, Aceptar, lo dígitos es eso? 1935 01:16:50,965 --> 01:16:53,540 1936 01:16:53,540 --> 01:16:54,910 Sí, usted podría, sí. 1937 01:16:54,910 --> 01:16:55,900 Entonces, ¿qué dígito es eso? 1938 01:16:55,900 --> 01:16:59,550 Usted podría restar 0 de él, pero que restar 0, el carácter. 1939 01:16:59,550 --> 01:17:01,425 >> Y donde algunas personas conseguir disparado hacia arriba, son 1940 01:17:01,425 --> 01:17:04,260 como, OK, bueno, tengo que saber los valores ASCII de este concurso? 1941 01:17:04,260 --> 01:17:06,218 No, definitivamente no lo hace Necesitamos saber el ASCII 1942 01:17:06,218 --> 01:17:09,520 valores de, al igual que, en minúsculas una, mayúsculas A, cero. 1943 01:17:09,520 --> 01:17:12,060 >> ROB: No hay ninguna razón para nunca poner esto en la hoja de trucos. 1944 01:17:12,060 --> 01:17:14,226 >> DAVIN: Definitivamente no hacer pierda su espacio con este. 1945 01:17:14,226 --> 01:17:18,090 Puede literally-- solo lugar de decir 48, como hasta 1946 01:17:18,090 --> 01:17:24,630 allí, que es equivalente a diciendo uno, un apóstrofe, 1947 01:17:24,630 --> 01:17:27,680 así, exactamente lo mismo. 1948 01:17:27,680 --> 01:17:34,106 >> ROB: Usted podría casi pensar en ella como si: Dios, necesito mi, 1949 01:17:34,106 --> 01:17:37,490 oops-- casi se podía pensar en ello como si tuviéramos algo así de hash 1950 01:17:37,490 --> 01:17:39,755 definir 0 como 48. 1951 01:17:39,755 --> 01:17:41,320 1952 01:17:41,320 --> 01:17:42,030 Eso no funcionará. 1953 01:17:42,030 --> 01:17:45,502 Pero pensar en ello como única cita 0 comilla simple, y para todos los personajes. 1954 01:17:45,502 --> 01:17:47,960 Piense en ello como una constante que representa que el valor ASCII. 1955 01:17:47,960 --> 01:17:49,080 >> DAVIN: Sí. 1956 01:17:49,080 --> 01:17:52,820 Aceptar, por lo que la primera vez a través de, por lo 76-- con lo que la primera vez a través de, 1957 01:17:52,820 --> 01:17:57,260 esto es sólo el carácter 7 menos el carácter 0, 1958 01:17:57,260 --> 01:18:00,420 y esos son siete integers-- bien, los 1959 01:18:00,420 --> 01:18:04,030 son siete espacios de distancia de cada otra en la tabla ASCII o lo que sea. 1960 01:18:04,030 --> 01:18:06,770 Así que va a devolver un int de 7. 1961 01:18:06,770 --> 01:18:08,720 Así que ahora, suma igual a 7. 1962 01:18:08,720 --> 01:18:10,830 >> OK, bueno, vamos a saltar en este bucle de nuevo. 1963 01:18:10,830 --> 01:18:13,010 Bien, ahora que es suma 10 veces. 1964 01:18:13,010 --> 01:18:15,800 Así que usted es efectivamente mover el 7 a la izquierda. 1965 01:18:15,800 --> 01:18:17,542 ¿Eso tiene sentido? 1966 01:18:17,542 --> 01:18:19,250 Usted es efectiva mover hacia la izquierda. 1967 01:18:19,250 --> 01:18:21,790 >> Y entonces usted add-- este va a ser menos 6 0. 1968 01:18:21,790 --> 01:18:22,650 Eso es 6. 1969 01:18:22,650 --> 01:18:24,752 Así que va a ser el 70 más 6. 1970 01:18:24,752 --> 01:18:25,996 76, que es su número. 1971 01:18:25,996 --> 01:18:28,370 Así que, independientemente de lo que el número Yo te di, es lentamente justo 1972 01:18:28,370 --> 01:18:31,610 va a cambiar los valores más grandes a la izquierda, 1 factor de 10 1973 01:18:31,610 --> 01:18:35,525 cada vez en el bucle for, y luego añadir según sea necesario. 1974 01:18:35,525 --> 01:18:37,350 1975 01:18:37,350 --> 01:18:37,865 >> En la parte de atrás? 1976 01:18:37,865 --> 01:18:40,240 ESTUDIANTE: No tenemos que hacer ninguna comprobación en el programa? 1977 01:18:40,240 --> 01:18:41,580 1978 01:18:41,580 --> 01:18:44,302 >> ROB: Así que en cuanto a la comprobación va para el programa, 1979 01:18:44,302 --> 01:18:46,510 nos dirá bastante mucho lo que hay que comprobar. 1980 01:18:46,510 --> 01:18:48,670 Si no le decimos a usted nada, entonces generalmente 1981 01:18:48,670 --> 01:18:50,320 asumir que usted tiene que comprobar la mayoría de las cosas. 1982 01:18:50,320 --> 01:18:54,772 Al igual que usted puede ser que, sólo para estar seguro, probablemente debería comprobar bueno, es s nula? 1983 01:18:54,772 --> 01:18:56,230 Entonces tengo ni idea de lo que volver. 1984 01:18:56,230 --> 01:18:58,814 Pero nos dirá este tipo de cosas. 1985 01:18:58,814 --> 01:18:59,480 0, no lo sé. 1986 01:18:59,480 --> 01:19:02,786 >> DAVIN: Y ¿por qué querrías para volver a comprobar si s es igual a nula? 1987 01:19:02,786 --> 01:19:03,660 ESTUDIANTE: [inaudible]. 1988 01:19:03,660 --> 01:19:04,880 DAVIN: Debido estrellas Char. 1989 01:19:04,880 --> 01:19:05,510 Es un puntero. 1990 01:19:05,510 --> 01:19:09,240 Así que un perfectamente aceptable declaración, yo podría decir, OK, 1991 01:19:09,240 --> 01:19:11,917 s es igual a un valor nulo, porque podría ser un puntero a null. 1992 01:19:11,917 --> 01:19:14,250 Así que cuando usted tiene punteros en su camino en como este, 1993 01:19:14,250 --> 01:19:15,420 probablemente debería comprobar. 1994 01:19:15,420 --> 01:19:18,461 Porque si usted no marca que, y a continuación, a continuación, entra en tu bucle for, 1995 01:19:18,461 --> 01:19:20,100 y que estés doing-- scoot abajo. 1996 01:19:20,100 --> 01:19:21,980 1997 01:19:21,980 --> 01:19:22,920 Scoot hacia abajo. 1998 01:19:22,920 --> 01:19:23,860 >> ROB: Lo siento, eso es todo. 1999 01:19:23,860 --> 01:19:25,860 >> DAVIN: Y así, al igual que, si es nulo, y entonces usted 2000 01:19:25,860 --> 01:19:28,267 hacer esto, ¿qué error vas a conseguir? 2001 01:19:28,267 --> 01:19:29,850 ESTUDIANTE: ¿Vas obtener un fallo conjunto. 2002 01:19:29,850 --> 01:19:31,250 DAVIN: Vas a establecer criticar, derecho, porque eres 2003 01:19:31,250 --> 01:19:32,616 tratando de índice en nulo. 2004 01:19:32,616 --> 01:19:35,240 Así que vamos a tratar de índice en la memoria que usted no posee. 2005 01:19:35,240 --> 01:19:39,550 Así que este, si esto es nulo, y usted hace esto, usted ciclo. 2006 01:19:39,550 --> 01:19:43,656 >> ROB: Yo también creo en el examen en el que pedimos a esta pregunta, te contamos 2007 01:19:43,656 --> 01:19:45,655 que sólo puede asumir que es un número positivo. 2008 01:19:45,655 --> 01:19:48,270 Debido a que también se espera atoi para manejar números negativos, 2009 01:19:48,270 --> 01:19:49,686 por lo que tendría que caso especial. 2010 01:19:49,686 --> 01:19:53,080 Hey, es el primer personaje un guión, en cuyo caso, OK, 2011 01:19:53,080 --> 01:19:54,839 ahora es un entero negativo. 2012 01:19:54,839 --> 01:19:56,380 Le diremos que este tipo de cosas. 2013 01:19:56,380 --> 01:19:58,005 Le diremos lo que usted necesita para manejar. 2014 01:19:58,005 --> 01:19:59,310 DAVIN: Sí. 2015 01:19:59,310 --> 01:20:02,530 Así que estoy seguro de que algunas personas podrían tener-- si usted comenzó a mirar a los exámenes viejos, 2016 01:20:02,530 --> 01:20:03,900 Usted ha visto sterln. 2017 01:20:03,900 --> 01:20:05,120 Eso es muy popular. 2018 01:20:05,120 --> 01:20:09,790 Y creo que en sterln, había que hacer este cheque por nulo, el retorno 2019 01:20:09,790 --> 01:20:10,950 0 o algo por el estilo. 2020 01:20:10,950 --> 01:20:11,940 Al igual, había que comprobar si hay nula. 2021 01:20:11,940 --> 01:20:14,230 Y si no lo hizo, que fue el punto de descuento en el cuestionario. 2022 01:20:14,230 --> 01:20:16,750 2023 01:20:16,750 --> 01:20:19,500 Así que de todos modos, lo hace todo el mundo sentirse bien con atoi? 2024 01:20:19,500 --> 01:20:21,112 2025 01:20:21,112 --> 01:20:22,820 ¿Alguien quiere repasar las piezas de nuevo? 2026 01:20:22,820 --> 01:20:23,815 2027 01:20:23,815 --> 01:20:25,565 ROB: Ah, sí, creo que nosotros también decimos que 2028 01:20:25,565 --> 01:20:28,565 puede asumir que todo lo que es-- en realidad están introduciendo un número, 2029 01:20:28,565 --> 01:20:32,821 que usted no tiene que preocuparse, como, cartas estar en la cadena, de modo. 2030 01:20:32,821 --> 01:20:33,320 DAVIN: Sí. 2031 01:20:33,320 --> 01:20:33,922 ¿Sí? 2032 01:20:33,922 --> 01:20:35,713 ESTUDIANTE: ¿Puedes ir más de una vez más cuando 2033 01:20:35,713 --> 01:20:37,860 utiliza comillas dobles y comillas simples? 2034 01:20:37,860 --> 01:20:41,290 >> DAVIN: Claro, por lo que entre comillas dobles, muy simplemente, es entre comillas dobles son cadenas. 2035 01:20:41,290 --> 01:20:43,370 Así que si usted dobla cotización nada, eso es una cadena. 2036 01:20:43,370 --> 01:20:48,270 Así, al igual que, si tuviera este 0 por aquí, y me hizo esto, esto es una cadena. 2037 01:20:48,270 --> 01:20:50,060 Eso ya no es un personaje. 2038 01:20:50,060 --> 01:20:54,816 Así que no puedo encontrar este valor en mi ASCII carta, porque es una cadena, sí. 2039 01:20:54,816 --> 01:20:57,770 2040 01:20:57,770 --> 01:20:59,480 >> Aceptar, alguna otra pregunta? 2041 01:20:59,480 --> 01:21:00,405 ¿Sí? 2042 01:21:00,405 --> 01:21:02,345 >> ESTUDIANTE: ¿Así que tienes ya respondido a esta, 2043 01:21:02,345 --> 01:21:05,255 pero al igual que, cuando estamos en realidad escribiendo esto en el cuestionario, 2044 01:21:05,255 --> 01:21:08,165 Qué quieres que escribamos con barras inclinadas ceros [inaudible]? 2045 01:21:08,165 --> 01:21:11,041 2046 01:21:11,041 --> 01:21:11,540 DAVIN: No. 2047 01:21:11,540 --> 01:21:13,800 La cuestión era que debería poner una raya vertical a través de los ceros 2048 01:21:13,800 --> 01:21:14,890 para indicar si son ceros? 2049 01:21:14,890 --> 01:21:15,890 No, nosotros lo averiguaremos. 2050 01:21:15,890 --> 01:21:16,940 2051 01:21:16,940 --> 01:21:19,530 Sí, gracias, que son buenos. 2052 01:21:19,530 --> 01:21:20,860 Bien, todo lo demás? 2053 01:21:20,860 --> 01:21:25,060 ¿Quiere alguien a-- así que creo nos hemos quedado un poco en el tiempo. 2054 01:21:25,060 --> 01:21:27,305 ¿Quieres ver otra, o? 2055 01:21:27,305 --> 01:21:28,096 ESTUDIANTE: randomInt. 2056 01:21:28,096 --> 01:21:29,230 2057 01:21:29,230 --> 01:21:30,750 >> DAVIN: randomInt, OK, exactamente. 2058 01:21:30,750 --> 01:21:32,975 Así que vamos a hacer randomInt. 2059 01:21:32,975 --> 01:21:34,395 2060 01:21:34,395 --> 01:21:35,270 Lo voy a hacer por aquí. 2061 01:21:35,270 --> 01:21:36,770 2062 01:21:36,770 --> 01:21:39,210 Así randomInt es en realidad mucho más simple. 2063 01:21:39,210 --> 01:21:43,578 Creo atoi es probablemente el más difícil que hemos pedido en los años anteriores. 2064 01:21:43,578 --> 01:21:44,453 ESTUDIANTE: [inaudible]. 2065 01:21:44,453 --> 01:21:46,660 2066 01:21:46,660 --> 01:21:47,161 >> DAVIN: ¿Qué? 2067 01:21:47,161 --> 01:21:49,493 ROB: Estoy viendo si es una especie de ver desde aquí. 2068 01:21:49,493 --> 01:21:50,040 DAVIN: ¿Lo es? 2069 01:21:50,040 --> 01:21:52,500 ROB: No creo que sea going-- Creo que va a correr a la derecha. 2070 01:21:52,500 --> 01:21:53,791 DAVIN: OK, así que voy a hacer esto. 2071 01:21:53,791 --> 01:21:56,250 Y entonces usted acaba de poner en la pantalla. 2072 01:21:56,250 --> 01:21:57,150 >> ROB: Muy bien. 2073 01:21:57,150 --> 01:21:58,190 >> DAVIN: ¿Quieres ser mi escribano? 2074 01:21:58,190 --> 01:21:58,600 >> ROB: Sí. 2075 01:21:58,600 --> 01:21:59,100 >> DAVIN: Niza. 2076 01:21:59,100 --> 01:22:01,210 2077 01:22:01,210 --> 01:22:02,727 Bien, puedo borrar esto? 2078 01:22:02,727 --> 01:22:04,188 >> ESTUDIANTE: Sí. 2079 01:22:04,188 --> 01:22:05,162 >> DAVIN: Eso es muy duro. 2080 01:22:05,162 --> 01:22:10,032 2081 01:22:10,032 --> 01:22:12,062 (CANTO) Lo estás haciendo lo que estás haciendo. 2082 01:22:12,062 --> 01:22:14,454 Y hacer lo que no lo hace. 2083 01:22:14,454 --> 01:22:14,954 Bien. 2084 01:22:14,954 --> 01:22:19,790 2085 01:22:19,790 --> 01:22:22,930 >> Bien, si no recuerdo mal, en el concurso de la randomInt era como, 2086 01:22:22,930 --> 01:22:26,190 OK, yo te voy a dar dos números, como un un y un b. 2087 01:22:26,190 --> 01:22:30,380 Y quiero que me des un RandomInt entre esos números. 2088 01:22:30,380 --> 01:22:33,440 Así randomInt va tomar dos numbers-- 2089 01:22:33,440 --> 01:22:41,690 así RandomInt-- y es va a devolver un int. 2090 01:22:41,690 --> 01:22:42,930 >> Así que ¿cuál es el valor de retorno? 2091 01:22:42,930 --> 01:22:44,151 Me acabo de decir. 2092 01:22:44,151 --> 01:22:44,650 Int, ¿verdad? 2093 01:22:44,650 --> 01:22:46,400 2094 01:22:46,400 --> 01:22:49,260 Al igual que este, y entonces es va a tomar dos enteros. 2095 01:22:49,260 --> 01:22:56,301 Así que va a tomar int y un int b, así. 2096 01:22:56,301 --> 01:22:58,217 Entonces, ¿qué es randomInt vamos a hacer es que va 2097 01:22:58,217 --> 01:23:02,440 volver algún valor aleatorio entre estos dos valores. 2098 01:23:02,440 --> 01:23:05,140 Así que va a ser mayor que a, menor que b. 2099 01:23:05,140 --> 01:23:09,020 Así que creo que, probablemente, se puede asumir que a es el menor de los dos valores. 2100 01:23:09,020 --> 01:23:12,210 Así que si estamos tratando con aleatoriedad, lo que la función 2101 01:23:12,210 --> 01:23:14,825 hemos visto que nos da las cosas al azar? 2102 01:23:14,825 --> 01:23:15,450 ESTUDIANTE: Drand. 2103 01:23:15,450 --> 01:23:16,506 DAVIN: Drand, exactamente. 2104 01:23:16,506 --> 01:23:18,630 Así que vas a probablemente desee utilizar su Drand. 2105 01:23:18,630 --> 01:23:19,940 2106 01:23:19,940 --> 01:23:29,160 Así que usted puede decir int azar, y vamos a sólo decir que es igual a 0 en este momento. 2107 01:23:29,160 --> 01:23:30,170 2108 01:23:30,170 --> 01:23:38,690 Y están que van a decir, Aceptar, iguales al azar Drand 48. 2109 01:23:38,690 --> 01:23:39,747 2110 01:23:39,747 --> 01:23:40,830 ¿Y qué hace volver esto? 2111 01:23:40,830 --> 01:23:43,742 ¿Qué hace esta función le dará? 2112 01:23:43,742 --> 01:23:45,610 >> ESTUDIANTE: Entre 0 y 1. 2113 01:23:45,610 --> 01:23:47,870 >> DAVIN: Sí, entre 0 y 1. 2114 01:23:47,870 --> 01:23:48,890 Así que va a ser: 2115 01:23:48,890 --> 01:23:51,070 >> ROB: Y esto es-- Creo nos gustaría decirte esto. 2116 01:23:51,070 --> 01:23:52,670 Al igual, puede utilizar Drand 48. 2117 01:23:52,670 --> 01:23:54,350 Usted puede verificar esto en el examen pasado. 2118 01:23:54,350 --> 01:23:56,720 Pero es probable que dirías puede utilizar Drand 48, que 2119 01:23:56,720 --> 01:23:58,790 devuelve un flotador entre 0 y 1. 2120 01:23:58,790 --> 01:24:00,830 >> DAVIN: Sí, sí, estoy bastante seguro de que en el examen 2121 01:24:00,830 --> 01:24:03,860 que usted dice, probablemente desee utilizar Drand, sí. 2122 01:24:03,860 --> 01:24:07,041 Así que va a volver algún valor entre 0 y 1. 2123 01:24:07,041 --> 01:24:08,790 Y entonces, ¿qué es usted va a querer hacerlo? 2124 01:24:08,790 --> 01:24:16,360 Bueno, usted quiere multiplicar por-- espero, creo que es así, lo siento. 2125 01:24:16,360 --> 01:24:18,018 Voy a hacer esto. 2126 01:24:18,018 --> 01:24:19,410 No lo sé. 2127 01:24:19,410 --> 01:24:22,240 >> Así que B menos una. 2128 01:24:22,240 --> 01:24:23,310 2129 01:24:23,310 --> 01:24:24,490 Entonces, ¿por b menos una? 2130 01:24:24,490 --> 01:24:26,110 2131 01:24:26,110 --> 01:24:30,490 Así que digamos que Drand le da la espalda Aceptar un int--, sólo voy a hacer el resto, 2132 01:24:30,490 --> 01:24:33,380 de modo más una. 2133 01:24:33,380 --> 01:24:36,130 Entonces, ¿qué does-- y es B menos una. 2134 01:24:36,130 --> 01:24:40,670 Así que digamos que Drand le da la espalda el valor máximo que podía, posiblemente, 2135 01:24:40,670 --> 01:24:41,410 darle. 2136 01:24:41,410 --> 01:24:42,409 ¿Qué es eso va a ser? 2137 01:24:42,409 --> 01:24:43,010 ESTUDIANTE: 1. 2138 01:24:43,010 --> 01:24:44,430 >> DAVIN: 1, ¿no? 2139 01:24:44,430 --> 01:24:47,880 Así que si esto es 1, y ya está multiplicándolo por b menos una, 2140 01:24:47,880 --> 01:24:50,110 Bueno, eso es sólo el diferencia entre menos A. 2141 01:24:50,110 --> 01:24:52,870 Y si a continuación, agrega que de nuevo en una, eso es lo que? 2142 01:24:52,870 --> 01:24:54,290 2143 01:24:54,290 --> 01:24:55,180 Se trata básicamente de b. 2144 01:24:55,180 --> 01:24:56,435 2145 01:24:56,435 --> 01:24:57,310 ¿Eso tiene sentido? 2146 01:24:57,310 --> 01:24:57,851 >> ESTUDIANTE: Sí. 2147 01:24:57,851 --> 01:24:59,480 2148 01:24:59,480 --> 01:25:02,170 >> DAVIN: Así que si este es el máximo valoran que podría ser, 2149 01:25:02,170 --> 01:25:03,175 que va a ser 1. 2150 01:25:03,175 --> 01:25:04,122 2151 01:25:04,122 --> 01:25:06,330 Y entonces esto es sólo el diferencia entre los dos. 2152 01:25:06,330 --> 01:25:11,410 Añadir a una, por lo que este es va a regresar al azar. 2153 01:25:11,410 --> 01:25:15,000 2154 01:25:15,000 --> 01:25:18,620 Y en el caso de que la esquina Drand te devuelve 1, 2155 01:25:18,620 --> 01:25:20,970 al azar sólo será efectivamente ser b. 2156 01:25:20,970 --> 01:25:22,700 Pero ese es el máximo que puede ser. 2157 01:25:22,700 --> 01:25:27,420 Así que si va a ser inferior a que, por lo que vamos a decir que es como 0.9, 2158 01:25:27,420 --> 01:25:31,080 por lo que a continuación, 0,9 veces menos b una va a ser menos 2159 01:25:31,080 --> 01:25:33,230 que la diferencia entre b, menos una. 2160 01:25:33,230 --> 01:25:35,830 >> Y a continuación, si se agrega que a una, entonces ese valor es 2161 01:25:35,830 --> 01:25:38,986 va a ser mayor que una, porque va a añadir algo sobre ella, 2162 01:25:38,986 --> 01:25:40,360 pero va a ser menor que b. 2163 01:25:40,360 --> 01:25:41,430 2164 01:25:41,430 --> 01:25:44,420 Así que vas a conseguir un azar número, porque estás llamando Drand. 2165 01:25:44,420 --> 01:25:48,000 Y eso rand, ese número es aleatorio va a ser en algún lugar entre un 2166 01:25:48,000 --> 01:25:49,342 y b. 2167 01:25:49,342 --> 01:25:50,780 ¿Eso tiene sentido? 2168 01:25:50,780 --> 01:25:52,990 >> ROB: Sólo para poner en números concretos, por lo 2169 01:25:52,990 --> 01:25:55,450 digamos que queremos recoger una número aleatorio entre 7 y 10. 2170 01:25:55,450 --> 01:25:56,960 Así que B menos una es nuestra gama. 2171 01:25:56,960 --> 01:26:00,150 Así que hay una gama de tres números que quieren elegir. 2172 01:26:00,150 --> 01:26:03,290 Y luego multiplicando que entre 0 y 1 1, 2173 01:26:03,290 --> 01:26:07,430 si eso entonces nos da some-- digamos que nos da 1.5. 2174 01:26:07,430 --> 01:26:10,670 >> Luego 1.5, queremos pasar de 7 a 10. 2175 01:26:10,670 --> 01:26:14,470 Así que 1.5 más 7 nos lleva de nuevo en nuestra gama de 7 a 10. 2176 01:26:14,470 --> 01:26:17,580 Y entonces estamos almacenarlo dentro de un número entero, por lo que trunca a 8. 2177 01:26:17,580 --> 01:26:18,790 Y entonces nos volvemos eso. 2178 01:26:18,790 --> 01:26:21,310 Así que B menos una es nuestra gama. 2179 01:26:21,310 --> 01:26:25,770 una se desplaza hacia arriba en los números que queremos que dentro de ese rango. 2180 01:26:25,770 --> 01:26:30,540 Así que entre el 7 y el 10, y luego nos puede devolver lo que terminamos con. 2181 01:26:30,540 --> 01:26:32,684 >> DAVIN: Sí, muy bien. 2182 01:26:32,684 --> 01:26:34,470 >> ROB: Gracias. 2183 01:26:34,470 --> 01:26:35,628 >> DAVIN: Sí, ¿qué pasa? 2184 01:26:35,628 --> 01:26:39,746 >> ESTUDIANTE: ¿Corremos a cualquier tipo de Errores ASCII cuando we're-- si es Drand 2185 01:26:39,746 --> 01:26:40,996 devolver un flotador [inaudible]. 2186 01:26:40,996 --> 01:26:42,470 2187 01:26:42,470 --> 01:26:45,360 >> ROB: Así como dijo Rob, debido al azar no es un int, 2188 01:26:45,360 --> 01:26:47,080 así Drand será un flotador. 2189 01:26:47,080 --> 01:26:48,470 Así que a continuación, se multiplica a cabo. 2190 01:26:48,470 --> 01:26:50,507 Y usted puede ser que consiga un poco de tipo de números de coma flotante. 2191 01:26:50,507 --> 01:26:51,840 Y luego se va a truncar. 2192 01:26:51,840 --> 01:26:52,339 >> ESTUDIANTE: OK. 2193 01:26:52,339 --> 01:26:53,019 DAVIN: Sí. 2194 01:26:53,019 --> 01:26:56,060 ROB: ¿Y si el compilador fueron para advertir usted acerca de, como, pérdida de precisión, 2195 01:26:56,060 --> 01:26:58,986 simplemente tirado en un int allí, y entonces es bueno. 2196 01:26:58,986 --> 01:27:00,398 2197 01:27:00,398 --> 01:27:00,898 DAVIN: Sí? 2198 01:27:00,898 --> 01:27:02,332 2199 01:27:02,332 --> 01:27:04,722 >> ESTUDIANTE: ¿Tendría la misma probabilidad de obtener, 2200 01:27:04,722 --> 01:27:06,156 como, b o un [inaudible]? 2201 01:27:06,156 --> 01:27:08,080 2202 01:27:08,080 --> 01:27:10,980 >> ROB: Así que estoy realmente es-- wondering-- es randomInt supone 2203 01:27:10,980 --> 01:27:14,362 ser un número de una a menos de b? 2204 01:27:14,362 --> 01:27:16,820 Al igual que, si es entre 7 y 10, ¿cuáles son las posibilidades? 2205 01:27:16,820 --> 01:27:18,454 7, 8, y 9, o 7, 8, 9, 10? 2206 01:27:18,454 --> 01:27:19,120 DAVIN: me olvide. 2207 01:27:19,120 --> 01:27:19,880 En la definido-- problema 2208 01:27:19,880 --> 01:27:20,570 >> ROB: Yo creo que es 7, 8, 9. 2209 01:27:20,570 --> 01:27:22,785 >> DAVIN: Dice específicamente de uno inclusiva y uno de exclusiva. 2210 01:27:22,785 --> 01:27:23,110 >> ROB: Sí. 2211 01:27:23,110 --> 01:27:23,670 >> DAVIN: Pero yo no-- Estoy no-- 2212 01:27:23,670 --> 01:27:25,878 >> ROB: Así que creo que estos es no está incluido, en cuyo caso, 2213 01:27:25,878 --> 01:27:28,152 hay un igual probabilidad de 7, 8, y 9. 2214 01:27:28,152 --> 01:27:29,360 No hay probabilidad de 10. 2215 01:27:29,360 --> 01:27:31,770 2216 01:27:31,770 --> 01:27:32,270 DAVIN: Sí? 2217 01:27:32,270 --> 01:27:33,395 ESTUDIANTE: Tengo una pregunta. 2218 01:27:33,395 --> 01:27:38,090 Queremos definir una función devuelve no un valor, sino una matriz. 2219 01:27:38,090 --> 01:27:41,020 Entonces ¿cuál sería el sintaxis después de regresar? 2220 01:27:41,020 --> 01:27:44,604 >> DAVIN: OK, por lo que entonces usted would-- después del regreso? 2221 01:27:44,604 --> 01:27:47,020 Así que digamos que usted había declarado una matriz en algún lugar allá arriba. 2222 01:27:47,020 --> 01:27:49,708 Entonces usted acaba de regresar el nombre de la matriz. 2223 01:27:49,708 --> 01:27:50,676 >> ESTUDIANTE: OK, gracias. 2224 01:27:50,676 --> 01:27:51,718 A continuación, sólo volver con A-- 2225 01:27:51,718 --> 01:27:52,759 DAVIN: Oh, espera, lo siento. 2226 01:27:52,759 --> 01:27:54,620 La cuestión era cómo Cómo se devuelve un array. 2227 01:27:54,620 --> 01:27:56,170 >> ROB: A pesar de que no podía ser un array declarado 2228 01:27:56,170 --> 01:27:57,260 en la pila ni nada de eso. 2229 01:27:57,260 --> 01:27:59,510 Tendría que ser algo malloced, porque malloc 2230 01:27:59,510 --> 01:28:01,610 es la forma de moverse asignación de memoria automática. 2231 01:28:01,610 --> 01:28:02,109 >> DAVIN: Sí. 2232 01:28:02,109 --> 01:28:03,433 2233 01:28:03,433 --> 01:28:04,933 ROB: ¿Cómo se obtiene alrededor de ámbito local. 2234 01:28:04,933 --> 01:28:09,670 2235 01:28:09,670 --> 01:28:11,550 >> DAVIN: Pero lo haría simplemente devolver su nombre-- 2236 01:28:11,550 --> 01:28:17,890 >> ESTUDIANTE: [inaudible] no es uno valor, por ejemplo, dos números, por lo 2237 01:28:17,890 --> 01:28:18,390 [Inaudible]. 2238 01:28:18,390 --> 01:28:19,590 >> DAVIN: Usted no puede regresar número múltiple. 2239 01:28:19,590 --> 01:28:20,850 No se puede, como, return-- 2240 01:28:20,850 --> 01:28:23,630 >> ESTUDIANTE: Hablé de regresar una matriz o algo por el estilo. 2241 01:28:23,630 --> 01:28:26,050 >> DAVIN: Sí, así que la pregunta es puedo devolver múltiples valores. 2242 01:28:26,050 --> 01:28:27,460 No puedes devolver múltiples valores. 2243 01:28:27,460 --> 01:28:30,270 No se puede, como, a continuación, devolver un b volver o algo por el estilo. 2244 01:28:30,270 --> 01:28:32,710 Porque después de que regrese, que volverán de la función. 2245 01:28:32,710 --> 01:28:35,790 Y entonces la función se lleva a cabo, y como Rob dijo, está en la pila. 2246 01:28:35,790 --> 01:28:38,260 >> Así que todo lo que la memoria sólo se pone devuelto a la computadora. 2247 01:28:38,260 --> 01:28:40,025 Todo se olvida, básicamente. 2248 01:28:40,025 --> 01:28:41,480 2249 01:28:41,480 --> 01:28:44,430 Así que si desea volver múltiple valores, que tienen que devolver una matriz, 2250 01:28:44,430 --> 01:28:45,971 Y la forma de hacer que es mallocing. 2251 01:28:45,971 --> 01:28:48,780 Y entonces te volverías x el estilo. 2252 01:28:48,780 --> 01:28:50,280 Básicamente, sólo devuelve el nombre. 2253 01:28:50,280 --> 01:28:51,620 Y cuando regrese algo como esto, usted es 2254 01:28:51,620 --> 01:28:53,200 en realidad no devolver el valor. 2255 01:28:53,200 --> 01:28:55,430 >> Así que digamos que usted almacenó los valores en una matriz. 2256 01:28:55,430 --> 01:28:57,910 Usted no es en realidad devolver esos valores. 2257 01:28:57,910 --> 01:29:01,515 Al igual que, si volviese un int, estoy realmente devolver las copias de los valores. 2258 01:29:01,515 --> 01:29:02,017 2259 01:29:02,017 --> 01:29:03,850 Pero si tuviera que volver algo como esto, 2260 01:29:03,850 --> 01:29:06,450 Me estoy volviendo una referencia a esos valores. 2261 01:29:06,450 --> 01:29:09,090 Así que me estoy volviendo, básicamente, un dirección de memoria a los valores. 2262 01:29:09,090 --> 01:29:10,079 ¿Eso tiene sentido? 2263 01:29:10,079 --> 01:29:10,620 ESTUDIANTE: Sí. 2264 01:29:10,620 --> 01:29:11,120 DAVIN: Niza. 2265 01:29:11,120 --> 01:29:12,760 2266 01:29:12,760 --> 01:29:13,410 ¿Sí? 2267 01:29:13,410 --> 01:29:15,430 >> ESTUDIANTE: Cuando estás utilizando Drand por aquí, 2268 01:29:15,430 --> 01:29:17,660 Qué tienes que poner srand antes de eso? 2269 01:29:17,660 --> 01:29:20,320 >> DAVIN: No, no, yo no lo creo. 2270 01:29:20,320 --> 01:29:23,040 >> ROB: Sí, así que tienes a decir nada sobre srand? 2271 01:29:23,040 --> 01:29:26,900 El valor por defecto de ustedes nunca diciendo srand en absoluto es sólo hacer srand de null. 2272 01:29:26,900 --> 01:29:29,350 Así Drand sobre su propio trabajo voluntad. 2273 01:29:29,350 --> 01:29:33,759 Y será automáticamente con semillas la hora actual, es lo que se utiliza. 2274 01:29:33,759 --> 01:29:35,175 2275 01:29:35,175 --> 01:29:35,675 DAVIN: Sí? 2276 01:29:35,675 --> 01:29:40,950 ESTUDIANTE: ¿Te [inaudible] con los números? 2277 01:29:40,950 --> 01:29:42,570 DAVIN: Sí, se puede. 2278 01:29:42,570 --> 01:29:46,770 ESTUDIANTE: ¿Así que podría decir, como, 4 veces 2. 2279 01:29:46,770 --> 01:29:50,280 La cosa es que usted no puede asumir a continuación, un int es de cuatro bytes. 2280 01:29:50,280 --> 01:29:51,020 El only-- 2281 01:29:51,020 --> 01:29:53,830 >> DAVIN: Quiero decir, para la prueba que pueda. 2282 01:29:53,830 --> 01:29:54,830 [Risas] 2283 01:29:54,830 --> 01:29:55,780 >> ROB: Mm, no. 2284 01:29:55,780 --> 01:29:56,780 DAVIN: Sí, sí se puede. 2285 01:29:56,780 --> 01:30:00,197 Si te preguntan qué tan grande es un int, no puede ser, como, cuatro u ocho. 2286 01:30:00,197 --> 01:30:02,030 ROB: Oh, así que si la pregunta es específicamente, 2287 01:30:02,030 --> 01:30:04,857 como, si es un problema de codificación, usted debe decir el tamaño de int. 2288 01:30:04,857 --> 01:30:06,690 Si se trata de una tabla, o que dice cuántos bytes, 2289 01:30:06,690 --> 01:30:08,808 usted no debe rellenar el tamaño de enteros. 2290 01:30:08,808 --> 01:30:11,278 >> ESTUDIANTES: [Risas] 2291 01:30:11,278 --> 01:30:18,210 2292 01:30:18,210 --> 01:30:20,580 >> DAVIN: Correcto, entonces ¿por qué es tamaño de int importante aquí? 2293 01:30:20,580 --> 01:30:23,085 Así como, si vamos a 32 bits procesador o algo por el estilo, 2294 01:30:23,085 --> 01:30:24,300 entonces va a ser de cuatro bytes. 2295 01:30:24,300 --> 01:30:26,342 Pero en algunos de los más nuevos cosas, podría ser qué? 2296 01:30:26,342 --> 01:30:27,383 Podría ser de ocho, ¿no? 2297 01:30:27,383 --> 01:30:30,550 Así esto-- si sólo dura código de cuatro, a continuación, en algunas máquinas, funcionará. 2298 01:30:30,550 --> 01:30:32,180 Algunas máquinas, no va a funcionar. 2299 01:30:32,180 --> 01:30:35,270 Pero si en el cuestionario que estamos como qué tan grande es un int? 2300 01:30:35,270 --> 01:30:35,770 Ponga cuatro. 2301 01:30:35,770 --> 01:30:38,710 2302 01:30:38,710 --> 01:30:39,210 ROB: Derecho. 2303 01:30:39,210 --> 01:30:39,790 DAVIN: ¿Sí? 2304 01:30:39,790 --> 01:30:43,192 ESTUDIANTE: ¿Entonces porque estamos declarando [Inaudible] dentro de una función, 2305 01:30:43,192 --> 01:30:45,622 debemos poner 3 dentro de esa función? 2306 01:30:45,622 --> 01:30:46,907 ¿O podemos usar fuera? 2307 01:30:46,907 --> 01:30:48,740 DAVIN: Usted puede usarlo fuera de esa función. 2308 01:30:48,740 --> 01:30:49,890 Así que él está pidiendo de forma gratuita. 2309 01:30:49,890 --> 01:30:51,700 >> ESTUDIANTE: perder la pista de donde [inaudible]. 2310 01:30:51,700 --> 01:30:54,720 >> ROB: Oh, la libre no happen-- eso es parte de la magia de malloc 2311 01:30:54,720 --> 01:30:57,220 es que usted no está restringido a ámbito local. 2312 01:30:57,220 --> 01:31:00,700 Usted tiene el control total sobre tiempo durante el que las variables viven. 2313 01:31:00,700 --> 01:31:05,380 Así que llamamos malloc aquí, podría ser una función completamente separados. 2314 01:31:05,380 --> 01:31:08,670 Podría ser de 10 horas más tarde que finalmente llamamos gratis. 2315 01:31:08,670 --> 01:31:11,764 >> DAVIN: Así, por ejemplo, al igual que, un par semanas a partir de ahora cuando finalmente 2316 01:31:11,764 --> 01:31:13,680 hacer su corrector ortográfico diccionario conjuntos de procesadores, vas 2317 01:31:13,680 --> 01:31:16,410 tener alguna función que crea toneladas de nodos. 2318 01:31:16,410 --> 01:31:18,630 Así que usted está mallocing toneladas de nodos en esta función. 2319 01:31:18,630 --> 01:31:20,670 Y más tarde en una función separada, eres 2320 01:31:20,670 --> 01:31:22,440 va a querer liberar a todos los nodos. 2321 01:31:22,440 --> 01:31:25,740 Así que usted puede, literalmente, sólo tiene que pasar a liberar un puntero, por lo que una dirección de memoria 2322 01:31:25,740 --> 01:31:26,684 a lo que malloced. 2323 01:31:26,684 --> 01:31:27,600 Y eso va a estar bien. 2324 01:31:27,600 --> 01:31:29,725 Usted no tiene que liberar, como, en la misma función. 2325 01:31:29,725 --> 01:31:30,449 ¿Sí? 2326 01:31:30,449 --> 01:31:36,197 >> ESTUDIANTE: Así que un malloc variable [inaudible] afuera? 2327 01:31:36,197 --> 01:31:37,384 ¿Es eso lo que estás diciendo? 2328 01:31:37,384 --> 01:31:38,300 DAVIN: Espere, decir eso? 2329 01:31:38,300 --> 01:31:38,800 Lo siento. 2330 01:31:38,800 --> 01:31:42,300 >> ESTUDIANTE: Si una variable malloc puede ser libre en cualquier parte del código, 2331 01:31:42,300 --> 01:31:44,800 entonces pueden ser accedidos en cualquier lugar en el código? 2332 01:31:44,800 --> 01:31:45,800 ¿Puedes mantener local? 2333 01:31:45,800 --> 01:31:47,880 >> DAVIN: Oh, ella le preguntó: como, la variable, como-- 2334 01:31:47,880 --> 01:31:51,300 2335 01:31:51,300 --> 01:31:55,510 >> ROB: Así que usted todavía necesita tener algún tipo de referencia 2336 01:31:55,510 --> 01:31:57,220 al bloque de la malloc de la memoria. 2337 01:31:57,220 --> 01:31:58,540 Así que aquí, estamos volviendo x. 2338 01:31:58,540 --> 01:31:59,040 ESTUDIANTE: Oh. 2339 01:31:59,040 --> 01:32:01,920 ROB: Si no nos volvemos x aquí, y esto fuera sólo vacío, 2340 01:32:01,920 --> 01:32:04,550 entonces no tendríamos acceso a el puntero que se malloced, 2341 01:32:04,550 --> 01:32:05,920 y se filtró la memoria. 2342 01:32:05,920 --> 01:32:06,690 >> ESTUDIANTE: OK. 2343 01:32:06,690 --> 01:32:10,010 >> DAVIN: Así como, digamos que usted tener presente, al igual que, aquí mismo. 2344 01:32:10,010 --> 01:32:10,510 ROB: No. 2345 01:32:10,510 --> 01:32:13,430 DAVIN: En mi función principal, no puedo simplemente llame a este X y ser, como, OK, 2346 01:32:13,430 --> 01:32:14,645 en esta función, lo hice. 2347 01:32:14,645 --> 01:32:14,960 >> ROB: Derecho. 2348 01:32:14,960 --> 01:32:17,790 >> DAVIN: Así que voy a llamar en x, como, principal o algo por el estilo. 2349 01:32:17,790 --> 01:32:18,540 Usted no puede hacer eso. 2350 01:32:18,540 --> 01:32:19,600 Usted va a devolver algo. 2351 01:32:19,600 --> 01:32:21,000 Pero, ¿qué vas a volver? 2352 01:32:21,000 --> 01:32:22,130 Usted va a devolver una dirección de memoria. 2353 01:32:22,130 --> 01:32:25,130 Y debido a que regrese una memoria dirección, que se puede acceder en otra parte. 2354 01:32:25,130 --> 01:32:27,262 2355 01:32:27,262 --> 01:32:28,255 ¿Alguna pregunta más? 2356 01:32:28,255 --> 01:32:28,755 ¿Sí? 2357 01:32:28,755 --> 01:32:31,213 >> ESTUDIANTE: ¿Es la función anterior siendo de verificación de [inaudible]? 2358 01:32:31,213 --> 01:32:33,270 2359 01:32:33,270 --> 01:32:35,005 >> DAVIN: ¿Por qué yo no necesito hacer eso? 2360 01:32:35,005 --> 01:32:35,880 ESTUDIANTE: [inaudible]. 2361 01:32:35,880 --> 01:32:37,755 DAVIN: Porque eres no mallocing nada. 2362 01:32:37,755 --> 01:32:39,640 Así que ha no-- sí, es no como una cadena s. 2363 01:32:39,640 --> 01:32:41,160 Es un puntero a alguna parte. 2364 01:32:41,160 --> 01:32:42,951 Estos son sólo valores. 2365 01:32:42,951 --> 01:32:43,450 ESTUDIANTE: OK. 2366 01:32:43,450 --> 01:32:43,949 DAVIN: Sí. 2367 01:32:43,949 --> 01:32:47,600 2368 01:32:47,600 --> 01:32:48,470 Algo más? 2369 01:32:48,470 --> 01:32:48,970 ROB: Sí? 2370 01:32:48,970 --> 01:32:50,386 ESTUDIANTE: Pero cuando usted [inaudible]? 2371 01:32:50,386 --> 01:32:55,050 2372 01:32:55,050 --> 01:32:58,690 >> ROB: Así que con el fin de liberar a la memoria, diríamos aquí. 2373 01:32:58,690 --> 01:33:01,350 Así que x es nuestro puntero a el bloque de memoria. 2374 01:33:01,350 --> 01:33:02,845 Nos liberamos ese puntero. 2375 01:33:02,845 --> 01:33:04,470 Y nosotros no necesariamente hacerlo aquí. 2376 01:33:04,470 --> 01:33:05,390 Podemos hacerlo en cualquier lugar. 2377 01:33:05,390 --> 01:33:10,400 Pero sólo llamar gratis en algo que malloc regresa. 2378 01:33:10,400 --> 01:33:12,940 Así malloc, aquí, devuelto lo que se está almacenando en x. 2379 01:33:12,940 --> 01:33:14,802 Por lo que podemos llamar gratis en x. 2380 01:33:14,802 --> 01:33:18,730 2381 01:33:18,730 --> 01:33:20,556 Alguna última pregunta? 2382 01:33:20,556 --> 01:33:21,701 >> DAVIN: Alguna última pregunta? 2383 01:33:21,701 --> 01:33:22,200 ¿Sí? 2384 01:33:22,200 --> 01:33:25,152 >> ESTUDIANTE: Lo sentimos, se puede volver a explicar por las que se liberará en allí? 2385 01:33:25,152 --> 01:33:26,630 ¿Por qué [inaudible]? 2386 01:33:26,630 --> 01:33:27,774 >> DAVIN: Por aquí? 2387 01:33:27,774 --> 01:33:29,109 >> ESTUDIANTE: Sí, como justo después. 2388 01:33:29,109 --> 01:33:30,900 DAVIN: Probablemente No quiero una gratis aquí. 2389 01:33:30,900 --> 01:33:31,630 ROB: Es probable que no lo haría. 2390 01:33:31,630 --> 01:33:33,060 DAVIN: Sí, que este no haría nada. 2391 01:33:33,060 --> 01:33:35,220 Esto, como, crear memoria, hacer cosas a ella, 2392 01:33:35,220 --> 01:33:37,390 y luego inmediatamente olvidarse de él, sí. 2393 01:33:37,390 --> 01:33:39,850 >> ROB: Pero podríamos hacer, como, aquí por alguna razón. 2394 01:33:39,850 --> 01:33:43,902 Podríamos decir int estrella y es igual a return array. 2395 01:33:43,902 --> 01:33:47,900 Hacer algunas cosas con y, tal vez imprimir el contenido. 2396 01:33:47,900 --> 01:33:49,350 Y entonces, por fin, hemos terminado. 2397 01:33:49,350 --> 01:33:50,626 Podemos liberar y. 2398 01:33:50,626 --> 01:33:51,501 ESTUDIANTE: [inaudible]. 2399 01:33:51,501 --> 01:33:57,839 2400 01:33:57,839 --> 01:33:59,005 DAVIN: ¿Debo desplácese hacia abajo? 2401 01:33:59,005 --> 01:34:00,445 Gracias. 2402 01:34:00,445 --> 01:34:00,945 ROB: Niza. 2403 01:34:00,945 --> 01:34:02,400 2404 01:34:02,400 --> 01:34:03,646 >> DAVIN: OK, eso es todo. 2405 01:34:03,646 --> 01:34:04,520 ROB: Muy bien, bueno. 2406 01:34:04,520 --> 01:34:05,070 Buena suerte. 2407 01:34:05,070 --> 01:34:06,800 >> DAVIN: Si tiene alguna pregunta, envíenos un correo electrónico. 2408 01:34:06,800 --> 01:34:08,670 Buena suerte. 2409 01:34:08,670 --> 01:34:10,283