1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> Jason Hirschhorn: Welcome a A5, todos. 3 00:00:07,820 --> 00:00:11,270 Temos unha semana emocionante por diante de nós, sobre todo porque hai tantos novos 4 00:00:11,270 --> 00:00:12,350 afronta nesta sala. 5 00:00:12,350 --> 00:00:12,920 É marabilloso. 6 00:00:12,920 --> 00:00:15,740 Moitos de vostedes están aquí por casualidade, o que é aínda mellor. 7 00:00:15,740 --> 00:00:18,220 Polo tanto, esperamos que continuará unirse a nós. 8 00:00:18,220 --> 00:00:20,220 >> Esta semana estamos indo a gastar a maior parte da sección 9 00:00:20,220 --> 00:00:21,870 preparado para o quiz. 10 00:00:21,870 --> 00:00:26,580 Entón por nosa axenda, imos falar un pouco sobre os recursos para a clase, 11 00:00:26,580 --> 00:00:30,350 , Senón tamén para a proba e, a continuación, de novo, pasar a maior parte da clase falar 12 00:00:30,350 --> 00:00:31,390 sobre as preguntas. 13 00:00:31,390 --> 00:00:33,900 Xa que estamos a facer responder a súa preguntas, ou se as súas preguntas 14 00:00:33,900 --> 00:00:39,010 naturalmente levar a algunha codificación, eu Ten problemas de mostra midterms 15 00:00:39,010 --> 00:00:43,180 pasado que vai codificar en directo na sección xuntos que tamén traer algún outro 16 00:00:43,180 --> 00:00:45,420 bos temas para cubrir. 17 00:00:45,420 --> 00:00:48,280 >> Entón, primeiro, coma nós pasamos ao dúas últimas semanas para lembra-lo 18 00:00:48,280 --> 00:00:51,700 caras, hai unha tonelada de recursos dispoñibles para este curso. 19 00:00:51,700 --> 00:00:55,020 Moitos deles van ser moi útil para ti como continuar a 20 00:00:55,020 --> 00:00:57,280 estudar para concurso 0, porque é martes pola tarde. 21 00:00:57,280 --> 00:00:59,630 Entón, todos vostedes foron estudar un pouco. 22 00:00:59,630 --> 00:01:02,640 >> Hai notas de clase e fonte código que debe 23 00:01:02,640 --> 00:01:04,050 definitivamente check-out. 24 00:01:04,050 --> 00:01:05,019 Assist os calzóns. 25 00:01:05,019 --> 00:01:07,470 Consulte study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 E, a continuación, enumerados a continuación, un número doutros recursos. 27 00:01:11,770 --> 00:01:14,020 >> Unha vez máis, quiz 0 é mañá á 1 hora. 28 00:01:14,020 --> 00:01:18,230 Se non ten feito isto, comproba Sobre o documento quiz 0 no 29 00:01:18,230 --> 00:01:21,370 páxina de inicio do curso para descubrir onde está tomando o quiz. 30 00:01:21,370 --> 00:01:25,770 O concurso comeza ás 1:10 e remata 70 minutos máis tarde. 31 00:01:25,770 --> 00:01:29,610 Entón, se mostrar-se despois 1:10, está terá que moitos menos minutos 32 00:01:29,610 --> 00:01:30,940 de 70 para facer a proba. 33 00:01:30,940 --> 00:01:33,570 Polo tanto, asegúrese de que está alí na hora. 34 00:01:33,570 --> 00:01:38,690 Se vostede é un estudante de extensión ou ter algunhas outras consideracións de proba, é dicir 35 00:01:38,690 --> 00:01:40,400 pode non ser a 1:00 de mañá. 36 00:01:40,400 --> 00:01:43,540 Pero, de novo, comproba a 0 sobre Quiz documentar para asegurarse de que vostede sabe cando 37 00:01:43,540 --> 00:01:44,760 está tomando o quiz. 38 00:01:44,760 --> 00:01:46,440 Escribín 75 minutos aquí. 39 00:01:46,440 --> 00:01:48,580 Eu creo que é iso mesmo, non 70. 40 00:01:48,580 --> 00:01:53,420 >> Ela abrangue todo o material a partir dunha semana 0 a charla da semana pasada o mércores. 41 00:01:53,420 --> 00:01:59,350 E, de novo, para esta proba, por que documento, que obtén un de dous lados e 8 42 00:01:59,350 --> 00:02:03,770 1/2 por 11 folla de papel que obteña para usar como notas durante o quiz. 43 00:02:03,770 --> 00:02:08,570 Moita xente, se non a maioría da xente, ten descubriu que o único xeito máis útil 44 00:02:08,570 --> 00:02:11,970 para estudar para o exame é facer unha folla de estudo, unha 45 00:02:11,970 --> 00:02:13,730 one-Sider, da súa propia. 46 00:02:13,730 --> 00:02:17,710 Entón mire para os últimos xa viu os últimos. 47 00:02:17,710 --> 00:02:19,960 Chegar aos amigos a ver que están poñendo nos seus. 48 00:02:19,960 --> 00:02:23,610 >> Pero as mans para abaixo, o mellor xeito que poida estudo é que pasar por todo e 49 00:02:23,610 --> 00:02:26,530 tallar-lo para o que deben ou non pertence a esa folla de 50 00:02:26,530 --> 00:02:30,570 papel, porque iso é só un realmente xeito útil para que teña seguro 51 00:02:30,570 --> 00:02:33,620 está pasando por todo e ter algunha familiaridade con el. 52 00:02:33,620 --> 00:02:36,690 A maioría da xente, atopamos, aínda que ter a folla de papel sentado 53 00:02:36,690 --> 00:02:39,840 á beira deles no cuestionario, non chame para iso, xa que, de novo, que moi 54 00:02:39,840 --> 00:02:43,290 proceso de ir a través da información axudou a aprender. 55 00:02:43,290 --> 00:02:45,370 >> Alguén ten algunha dúbida sobre cuestionario 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Ten todos - 58 00:02:51,450 --> 00:02:53,230 Eu non vou facer un concerto de mans. 59 00:02:53,230 --> 00:02:53,550 Nunca mente. 60 00:02:53,550 --> 00:02:54,790 Eu ía preguntar quen comezou a estudar. 61 00:02:54,790 --> 00:02:58,360 Pero eu non quero facer todo non levanten as mans. 62 00:02:58,360 --> 00:03:01,290 Entón, como eu dixo - si, Avi, vai adiante. 63 00:03:01,290 --> 00:03:04,205 >> AVI: O que sería unha cousa útil para poñer no one-pager? 64 00:03:04,205 --> 00:03:05,875 >> ALUMNO: Isto é contigo. 65 00:03:05,875 --> 00:03:08,210 >> Jason Hirschhorn: Comeza para utilizar o seu xuízo. 66 00:03:08,210 --> 00:03:13,220 Cousas útiles para poñer no one-pager, Se está confuso sobre o gran O 67 00:03:13,220 --> 00:03:17,510 tempo de execución de distintos tipos de investigacións e tipo, poñer isto alí nun 68 00:03:17,510 --> 00:03:18,760 gráfico dandy accesible. 69 00:03:18,760 --> 00:03:22,250 Desta forma, se é proposta que en cuestionario, non tentar e figura 70 00:03:22,250 --> 00:03:23,560 lo ou razón pola execución. 71 00:03:23,560 --> 00:03:24,730 Pode simplemente copia-lo para abaixo. 72 00:03:24,730 --> 00:03:28,320 Se ollar para quizzes pasado, unha serie de veces, non está executando cuestións de tempo. 73 00:03:28,320 --> 00:03:34,150 Así que sería un exemplo dun bo cousa para poñer no seu one-pager. 74 00:03:34,150 --> 00:03:37,450 >> Outras cousas boas de poñer, se está confuso sobre como declarar un 75 00:03:37,450 --> 00:03:40,570 función ou que as diferentes partes a declaración da función é, escribir 76 00:03:40,570 --> 00:03:43,400 que alí, unha versión xenérica e logo, se cadra un exemplo. 77 00:03:43,400 --> 00:03:47,290 Se está confuso sobre punteiros, un diagrama de como punteiros traballo é 78 00:03:47,290 --> 00:03:48,660 probablemente realmente útil. 79 00:03:48,660 --> 00:03:52,440 Se está confuso sobre recursión, un probar función recursiva alí 80 00:03:52,440 --> 00:03:54,980 Tamén pode chegar a ser moi útil. 81 00:03:54,980 --> 00:03:57,290 Será que isto lle dar algunhas ideas? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Debe entender a todo o proceso de compilación, como 83 00:04:01,820 --> 00:04:03,220 como iso todo funciona? 84 00:04:03,220 --> 00:04:06,620 >> Jason Hirschhorn: Todo que foi cuberto podía 85 00:04:06,620 --> 00:04:08,060 aparecer no quiz. 86 00:04:08,060 --> 00:04:08,930 Preguntas - 87 00:04:08,930 --> 00:04:11,300 pero, de novo, algunhas cousas van ser ponderados fortemente que outros. 88 00:04:11,300 --> 00:04:14,330 Algunhas cousas veñen-se de novo e de novo en clase, en 89 00:04:14,330 --> 00:04:15,590 charla e sección. 90 00:04:15,590 --> 00:04:17,220 Outras cousas que non ten xorden a miúdo. 91 00:04:17,220 --> 00:04:22,900 >> Nós falamos moito sobre # include e -L algo e que aqueles significan en 92 00:04:22,900 --> 00:04:24,390 o proceso de compilación. 93 00:04:24,390 --> 00:04:29,120 Nós falamos moito sobre o GDB, se agarran, esas bandeiras diferentes que usan cando 94 00:04:29,120 --> 00:04:33,100 compilar algo, e que make15, por exemplo, realmente 95 00:04:33,100 --> 00:04:34,510 significa e realmente fai. 96 00:04:34,510 --> 00:04:38,110 Non falar tanto sobre cada paso na 97 00:04:38,110 --> 00:04:39,240 o proceso de compilación. 98 00:04:39,240 --> 00:04:40,410 Nós aínda falamos sobre iso. 99 00:04:40,410 --> 00:04:42,550 Por iso, aínda é algo que debe estar familiarizado. 100 00:04:42,550 --> 00:04:44,610 Pero, de novo, non imos ser - 101 00:04:44,610 --> 00:04:49,140 cousas que xorden con máis frecuencia en clase son máis propensos a chegar a máis 102 00:04:49,140 --> 00:04:52,495 e adoitan ser máis fortemente ponderados no quiz. 103 00:04:52,495 --> 00:04:53,280 >> Legal. 104 00:04:53,280 --> 00:04:54,580 Calquera outras preguntas sobre proba 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, entón eu coloque unha lista de temas sobre a placa. 107 00:05:00,050 --> 00:05:01,550 Eu atravesei o programa. 108 00:05:01,550 --> 00:05:07,340 Eu atravesei a sección de revisión de onte á noite e os diapositivas para chegar 109 00:05:07,340 --> 00:05:13,710 cunha lista non exhaustiva de temas que nós Cubrimos ata agora en CS50 110 00:05:13,710 --> 00:05:16,800 e cousas que poden aparecen no quiz. 111 00:05:16,800 --> 00:05:19,900 Entón eu non vou pasar por cada un único destes. 112 00:05:19,900 --> 00:05:22,370 Isto levaría moito máis tempo do que o que temos agora. 113 00:05:22,370 --> 00:05:26,880 Pero eu coloque iso aquí esperando jog súa memoria como a cousas que poden 114 00:05:26,880 --> 00:05:28,420 ou pode non ser tan familiar con vostede. 115 00:05:28,420 --> 00:05:32,850 >> E eu adoro pasar a maior parte do sección respondendo as súas preguntas sobre 116 00:05:32,850 --> 00:05:35,130 estes temas, temas que non son aquí tratados. 117 00:05:35,130 --> 00:05:36,130 Podemos escribir un código pseudo. 118 00:05:36,130 --> 00:05:40,010 Podemos escribir o código real, para garantir que - 119 00:05:40,010 --> 00:05:44,280 Podo responder a súa pregunta e axudar todo fundamentalmente entender un 120 00:05:44,280 --> 00:05:48,330 Moitos destes temas de xeito que sente preparado e cómodo indo a 121 00:05:48,330 --> 00:05:50,150 o mañá quiz. 122 00:05:50,150 --> 00:05:52,300 Entón lea sobre a lista. 123 00:05:52,300 --> 00:05:54,780 Vostede espera chegar a sección con algunhas preguntas tamén. 124 00:05:54,780 --> 00:05:58,480 Cando estea listo, levante a man e imos comezar. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Teña presente, as preguntas que ten, non hai preguntas estúpidas. 127 00:06:05,200 --> 00:06:06,250 Escoitamos moito iso. 128 00:06:06,250 --> 00:06:09,490 E as preguntas que ten, estou disposto apostar, moitas outras persoas, tanto 129 00:06:09,490 --> 00:06:11,740 aquí sentado e asistir en liña teñen tamén. 130 00:06:11,740 --> 00:06:13,770 Así, só pode axudar a xente facendo preguntas. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: entre a pila e o pila, hai unha condición asignado 133 00:06:18,040 --> 00:06:22,880 porcentaxe de memoria que é definido como é dicir, para a pila ou ao monte? 134 00:06:22,880 --> 00:06:25,010 Ou como é que funciona isto exactamente? 135 00:06:25,010 --> 00:06:26,230 >> Jason Hirschhorn: Gran pregunta. 136 00:06:26,230 --> 00:06:28,640 Eu estou indo para tras trazar un pouco. 137 00:06:28,640 --> 00:06:30,910 Será que todo o mundo - 138 00:06:30,910 --> 00:06:31,660 por favor, sexa honesto aquí. 139 00:06:31,660 --> 00:06:34,130 Sei que estou pedindo para aumentar a súa man por diante dos seus compañeiros. 140 00:06:34,130 --> 00:06:38,510 Pero hai persoas que se senten incómodo coa pila e pila 141 00:06:38,510 --> 00:06:42,980 e quere pasar por riba dese eo que os significa? 142 00:06:42,980 --> 00:06:43,880 Levante a man se - 143 00:06:43,880 --> 00:06:44,420 Aceptar. 144 00:06:44,420 --> 00:06:45,120 Grazas. 145 00:06:45,120 --> 00:06:48,420 Entón, imos pasar por riba da pila e a pila moi rapidamente e, a continuación, 146 00:06:48,420 --> 00:06:50,370 moverse en responder a súa pregunta. 147 00:06:50,370 --> 00:06:58,250 >> Entón, se nós sacar unha caixa para representar memoria no seu ordenador, o que son algúns 148 00:06:58,250 --> 00:07:02,160 cousas que van nesa caixa? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 A función principal. 151 00:07:04,020 --> 00:07:05,890 Onde a principal ir? 152 00:07:05,890 --> 00:07:08,090 >> Estudante: [inaudível]. 153 00:07:08,090 --> 00:07:09,390 >> Jason Hirschhorn: Entón nós imos poñer principal aquí. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 O que máis vai nesa caixa? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> ALUMNO: As funcións que chama. 158 00:07:18,140 --> 00:07:19,020 >> Jason Hirschhorn: As funcións que chamamos. 159 00:07:19,020 --> 00:07:20,440 E onde van? 160 00:07:20,440 --> 00:07:21,300 >> ALUMNO: Na pila. 161 00:07:21,300 --> 00:07:22,380 >> Jason Hirschhorn: Eles ir na pila. 162 00:07:22,380 --> 00:07:27,350 Entón, imos chamar iso de cousa aquí abaixo do conxunto. 163 00:07:27,350 --> 00:07:31,880 E alí enriba, temos a heap. 164 00:07:31,880 --> 00:07:35,450 Así, a memoria non é unha caixa así. 165 00:07:35,450 --> 00:07:37,330 Pero é realmente moi semellante. 166 00:07:37,330 --> 00:07:40,840 Vai ser unha morea de caixas ao longo do e máis, dependendo de como é grande o seu 167 00:07:40,840 --> 00:07:43,730 ordenador é ou o quão grande é a súa memoria. 168 00:07:43,730 --> 00:07:46,950 >> Ao entre comiñas "bottom" é a pila. 169 00:07:46,950 --> 00:07:50,880 E hai moitas cousas que van para a pila. 170 00:07:50,880 --> 00:07:53,840 E aqueles dependen das funcións ten no seu código. 171 00:07:53,840 --> 00:07:57,780 Sempre ten unha función no seu código chamado de inicio, polo que sempre hai un 172 00:07:57,780 --> 00:08:00,480 sección aquí no apilar dedicado á principal. 173 00:08:00,480 --> 00:08:03,980 >> Estas seccións da pila son chamados cadros de pila. 174 00:08:03,980 --> 00:08:09,580 Cando chamar outra función, dicir principal chama unha función de procura binaria, 175 00:08:09,580 --> 00:08:11,075 imos poñer outro cadro na pila. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 En concreto, nós imos doar un anaco de memoria na nosa 178 00:08:17,320 --> 00:08:22,960 ordenador para almacenar binario busca de lugares variables e para realizar o binario 179 00:08:22,960 --> 00:08:24,150 código de busca. 180 00:08:24,150 --> 00:08:26,810 >> Entón chamamos busca binaria. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 Neste anaco de memoria, nós imos para almacenar as súas variables locais. 183 00:08:33,340 --> 00:08:35,270 Estamos indo para almacenar as súas chamadas printf. 184 00:08:35,270 --> 00:08:38,159 Pase o que pase, esta función é será almacenado alí. 185 00:08:38,159 --> 00:08:40,350 Busca binaria vai realizar. 186 00:08:40,350 --> 00:08:42,210 El vai para completar a execución. 187 00:08:42,210 --> 00:08:47,450 Cal é a palabra en C que significa unha función que debe 188 00:08:47,450 --> 00:08:49,306 completar a súa execución? 189 00:08:49,306 --> 00:08:50,040 >> ALUMNO: Return. 190 00:08:50,040 --> 00:08:50,870 >> Jason Hirschhorn: Return. 191 00:08:50,870 --> 00:08:53,230 Así, sempre que ve unha instrución de retorno, os extremos de función 192 00:08:53,230 --> 00:08:54,350 cando bate aquel. 193 00:08:54,350 --> 00:08:56,740 Entón busca binaria vai acertar o seu regreso. 194 00:08:56,740 --> 00:09:01,360 Esta parte da memoria será, esencialmente, ser liberada. 195 00:09:01,360 --> 00:09:03,510 E principal vai voltar a execución. 196 00:09:03,510 --> 00:09:07,240 Así principal fará unha pausa cando era, chamada busca binaria, obter un valor de retorno, 197 00:09:07,240 --> 00:09:08,700 e continuar a execución. 198 00:09:08,700 --> 00:09:10,840 Este cadro de pila vai. 199 00:09:10,840 --> 00:09:14,810 >> Se chamarmos unha función recursiva, que é unha función que chama a si mesmo ao longo do 200 00:09:14,810 --> 00:09:18,480 e máis, podemos chegar - dicir que fixo busca binaria recursiva. 201 00:09:18,480 --> 00:09:21,520 Podemos obter unha versión binaria de investigación, busca binaria dous, busca binaria 202 00:09:21,520 --> 00:09:24,090 tres, busca binaria catro, busca binaria cinco. 203 00:09:24,090 --> 00:09:27,950 E entón esta investigación binario final cinco vai bater o caso base, ea pila 204 00:09:27,950 --> 00:09:31,010 cadros volver e manter peche ata chegar de volta á principal. 205 00:09:31,010 --> 00:09:32,530 Podemos pasar por riba de recursão en algo. 206 00:09:32,530 --> 00:09:35,530 Pero todo isto é para dicir que, se está a chamar varias funcións á vez, 207 00:09:35,530 --> 00:09:39,250 haberá pila múltiple cadros na pila. 208 00:09:39,250 --> 00:09:42,900 >> A pila, por outra banda, se aquí, non é para as funcións, 209 00:09:42,900 --> 00:09:44,380 non para variables locais. 210 00:09:44,380 --> 00:09:48,920 É para alocada dinamicamente variables. 211 00:09:48,920 --> 00:09:57,210 Entón, estas son as variables que se poden iniciar o principal ou unha 212 00:09:57,210 --> 00:09:58,640 Función que principais chamadas. 213 00:09:58,640 --> 00:10:00,790 En calquera lugar no seu código, eles se pode inicializar. 214 00:10:00,790 --> 00:10:04,360 E para arrincar un dinámicamente variable alocada. 215 00:10:04,360 --> 00:10:06,970 Cara a unha función en C que usan? 216 00:10:06,970 --> 00:10:07,600 >> ALUMNO: malloc. 217 00:10:07,600 --> 00:10:09,240 >> Jason Hirschhorn: malloc. 218 00:10:09,240 --> 00:10:10,800 Vostede chama malloc. 219 00:10:10,800 --> 00:10:12,260 Vostede gañou un espazo de memoria. 220 00:10:12,260 --> 00:10:15,020 E que o espazo de memoria está no heap. 221 00:10:15,020 --> 00:10:18,840 E ese espazo de memoria permanece alí ata que chame gratis. 222 00:10:18,840 --> 00:10:22,670 >> Entón variables alocadas dinámica en pila vai existir por tanto tempo como vostede 223 00:10:22,670 --> 00:10:25,250 quere que existen, e eles non van ir ata que explicitamente 224 00:10:25,250 --> 00:10:26,760 dicir-lles para ir aínda. 225 00:10:26,760 --> 00:10:29,670 Podes crealos nunha función. 226 00:10:29,670 --> 00:10:31,930 Aquela pila de función cadro vai. 227 00:10:31,930 --> 00:10:35,490 Pero esa variable aínda haberá na pila ata que sexa liberado, 228 00:10:35,490 --> 00:10:39,650 potencialmente pola función que chamou busca binaria ou o que sexa. 229 00:10:39,650 --> 00:10:42,580 >> Entón, estas variables heap estar alí durante o tempo que sexa 230 00:10:42,580 --> 00:10:43,490 eles para estar alí. 231 00:10:43,490 --> 00:10:46,090 E se poñer aquí. 232 00:10:46,090 --> 00:10:47,450 E, a continuación, o seguinte é colocado alí. 233 00:10:47,450 --> 00:10:50,210 Manteñen-se cuberto, e eles estar alí ata que chame gratis. 234 00:10:50,210 --> 00:10:52,870 >> E, esencialmente, a pila ea pila, quedando á pregunta de Marcus, 235 00:10:52,870 --> 00:10:54,500 crecen en dirección un ao outro. 236 00:10:54,500 --> 00:10:57,730 E se executar para o outro, ten usou toda a memoria do seu 237 00:10:57,730 --> 00:11:01,330 ordenador, eo seu programa vai saír porque non ten máis memoria 238 00:11:01,330 --> 00:11:02,420 deixaron de usar. 239 00:11:02,420 --> 00:11:07,290 Entre eles, hai potencialmente outras cousas. 240 00:11:07,290 --> 00:11:10,980 Pero, para o ámbito deste curso, Non se preocupe con iso. 241 00:11:10,980 --> 00:11:12,020 >> Entón esa foi a resposta á súa pregunta. 242 00:11:12,020 --> 00:11:13,520 Non hai problema con iso. 243 00:11:13,520 --> 00:11:15,550 Pero esa era a resposta longa. 244 00:11:15,550 --> 00:11:17,800 Todo o que precisa saber é o pila ea pila vai - 245 00:11:17,800 --> 00:11:18,900 un comeza na parte inferior. 246 00:11:18,900 --> 00:11:19,570 A pila fai. 247 00:11:19,570 --> 00:11:20,790 A pila está alí enriba. 248 00:11:20,790 --> 00:11:21,990 Vai ser crecer máis preto un do outro. 249 00:11:21,990 --> 00:11:23,110 >> E se tocar, iso é un problema. 250 00:11:23,110 --> 00:11:24,500 Vostede quedou sen memoria. 251 00:11:24,500 --> 00:11:28,760 Pero tamén, ademais de saber onde están, o que está almacenado en ambos os 252 00:11:28,760 --> 00:11:30,512 pila e heap. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Cando chocan, é que un estourido de pila? 255 00:11:33,570 --> 00:11:35,670 >> Jason Hirschhorn: Cando chocan, iso non é un estourido de pila. 256 00:11:35,670 --> 00:11:38,340 Un estourido de pila é unha área diferente que podemos pasar por riba se quere. 257 00:11:38,340 --> 00:11:40,020 OK, imos voltar a iso de aquí a pouco. 258 00:11:40,020 --> 00:11:42,730 >> Estudante: Cal é a palabra chamada cando baten un no outro, o 259 00:11:42,730 --> 00:11:44,450 pila e da pila? 260 00:11:44,450 --> 00:11:46,640 >> Jason Hirschhorn: De momento, non se preocupe. 261 00:11:46,640 --> 00:11:47,750 Só sei - 262 00:11:47,750 --> 00:11:50,530 Vou responder a esta pregunta despois da aula. 263 00:11:50,530 --> 00:11:52,680 No caso de que corren para o outro, foi para fóra de memoria, por que non hai máis 264 00:11:52,680 --> 00:11:53,330 espazo alí. 265 00:11:53,330 --> 00:11:55,450 >> ESTUDANTE: Sentímolo, pero o que é un fallo de seguridade? 266 00:11:55,450 --> 00:11:58,710 >> Jason Hirschhorn: Un segmento fallo pode ser chamado para - 267 00:11:58,710 --> 00:12:02,240 depende por que chamou o culpa seg. 268 00:12:02,240 --> 00:12:06,260 Ás veces, o estourido de pila, vai dicir seg fallos como o erro. 269 00:12:06,260 --> 00:12:08,180 >> ALUMNO: E sobre dereferencing unha variable null? 270 00:12:08,180 --> 00:12:10,040 Isto é un fallo de seguridade? 271 00:12:10,040 --> 00:12:11,480 >> Jason Hirschhorn: Dereferencing un punteiro nulo - 272 00:12:11,480 --> 00:12:17,850 OK, entón se ten un punteiro que definir igual a nulo, punteiros, recall, 273 00:12:17,850 --> 00:12:20,270 enderezos de memoria tenda como os seus valores. 274 00:12:20,270 --> 00:12:23,660 E un punteiro nulo é esencialmente almacenamento de 0, o 0-th 275 00:12:23,660 --> 00:12:26,670 abordar nesa variable. 276 00:12:26,670 --> 00:12:30,010 Así 0x, 0, 0, 0, 0, etcétera. 277 00:12:30,010 --> 00:12:35,030 Isto 0-th enderezo na memoria que non é na nosa imaxe, que está alí enriba 278 00:12:35,030 --> 00:12:38,800 nalgún lugar, que está reservado para o ordenador. 279 00:12:38,800 --> 00:12:40,130 Non temos permiso para tocalo. 280 00:12:40,130 --> 00:12:44,680 >> Así, cando o programa está en execución, se algo está intentando ir á memoria 281 00:12:44,680 --> 00:12:48,990 enderezo 0, el sabe que que é un valor baleiro. 282 00:12:48,990 --> 00:12:50,820 El non sabe nada debería estar alí. 283 00:12:50,820 --> 00:12:53,420 Entón, se tentar empregar algo alí e tratar algo como alí ou 284 00:12:53,420 --> 00:12:58,355 tentando ir a ese lugar, está terá un fallo ou un erro seg. 285 00:12:58,355 --> 00:13:00,520 Isto responde a súa pregunta? 286 00:13:00,520 --> 00:13:03,170 >> E agora imos voltar de estourido de pila. 287 00:13:03,170 --> 00:13:09,560 As cousas na pila, como vostedes teñen visto antes, en - imos deseñar un close 288 00:13:09,560 --> 00:13:11,966 -Se dun cadro de pila. 289 00:13:11,966 --> 00:13:15,050 Todos poden ver iso? 290 00:13:15,050 --> 00:13:16,650 Entón, nós temos o noso cadro de pila. 291 00:13:16,650 --> 00:13:23,260 Estamos a gardar unha matriz como un lugar de variable nesta función. 292 00:13:23,260 --> 00:13:29,510 Entón, dicir que a nosa matriz ten cinco puntos. 293 00:13:29,510 --> 00:13:33,230 Todos os cinco destes será almacenado nese cadro de pila. 294 00:13:33,230 --> 00:13:37,540 >> Se comezar a escribir para alén do límites deste conxunto - 295 00:13:37,540 --> 00:13:43,990 por iso, se comezar a escribir en, imos dicir que é 0. 296 00:13:43,990 --> 00:13:46,800 Estes son os cinco índices da nosa matriz. 297 00:13:46,800 --> 00:13:50,980 Se comezar a escribir en índice 5, que non temos cando temos unha 298 00:13:50,980 --> 00:13:55,900 matriz de tamaño 5, comezan a escribir en índice de 6, 7, 8, 9, podemos obter unha Stack 299 00:13:55,900 --> 00:13:57,960 Erro de estourido. 300 00:13:57,960 --> 00:14:00,510 >> Xeralmente non é - 301 00:14:00,510 --> 00:14:04,910 probablemente vai ter problemas se pasar por riba por un. 302 00:14:04,910 --> 00:14:08,640 Pero, xeralmente, vai entrar no máis problemas, se pasar por riba dun monte 303 00:14:08,640 --> 00:14:12,770 e ir tan lonxe máis que se escribe sobre o enderezo de retorno que 304 00:14:12,770 --> 00:14:16,080 función, que está situado no parte inferior do cadro de pila. 305 00:14:16,080 --> 00:14:16,520 >> Porque, non? 306 00:14:16,520 --> 00:14:17,670 Entra - no - desculpe. 307 00:14:17,670 --> 00:14:18,550 Non ", porque a dereita." 308 00:14:18,550 --> 00:14:20,470 >> No cadro de pila, ten súas variables locais. 309 00:14:20,470 --> 00:14:27,090 Na parte inferior da pila cadro é o enderezo de retorno. 310 00:14:27,090 --> 00:14:28,790 É aí que a función vai cando acabar. 311 00:14:28,790 --> 00:14:33,750 E se substituír ese retorno enderezo, a continuación, cando este cadro de pila, 312 00:14:33,750 --> 00:14:36,680 cando está indo a través da pila enmarcar e execución de cada liña, está 313 00:14:36,680 --> 00:14:40,350 indo a ir ao seu novo enderezo de retorno que está escrito alí en vez de o 314 00:14:40,350 --> 00:14:40,910 un real. 315 00:14:40,910 --> 00:14:45,050 E é así que nós vimos algúns fallos de seguridade 316 00:14:45,050 --> 00:14:46,780 pode ocorrer cos ordenadores. 317 00:14:46,780 --> 00:14:52,760 >> Entón estourido de pila, en suma, é cando substituír o papel na pila 318 00:14:52,760 --> 00:14:55,440 debería usar, o lugar de variable que pode usar, e 319 00:14:55,440 --> 00:14:58,070 en especial, cando comeza a eliminar cousas importantes, como o 320 00:14:58,070 --> 00:14:59,100 enderezo de retorno. 321 00:14:59,100 --> 00:15:00,090 E é aí onde vai ter un erro. 322 00:15:00,090 --> 00:15:03,980 Ou quizais mesmo pode comezar mesmo escribindo en - 323 00:15:03,980 --> 00:15:05,370 dicir de busca binaria foi logo enriba inicio. 324 00:15:05,370 --> 00:15:07,790 Se substituíu moito, podería escribir en principal. 325 00:15:07,790 --> 00:15:10,230 Pero, xeralmente, que obtén un erro antes entón, xa que o ordenador sabe 326 00:15:10,230 --> 00:15:12,270 está facendo algo que Non debería estar facendo. 327 00:15:12,270 --> 00:15:12,560 É. 328 00:15:12,560 --> 00:15:13,910 >> Estudante: Cal é a diferenza entre un estourido de pila 329 00:15:13,910 --> 00:15:16,940 e un buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> Jason Hirschhorn: Buffer overflow é un tipo máis xenérico de 331 00:15:19,420 --> 00:15:20,395 o que eu acabo de describir. 332 00:15:20,395 --> 00:15:22,610 >> ALUMNO: Entón un estourido de pila é un exemplo dun buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> Jason Hirschhorn: Exactamente. 334 00:15:23,420 --> 00:15:28,700 Esta é unha matriz que podemos pensar como buffer, un espazo para que as cousas van dentro 335 00:15:28,700 --> 00:15:30,600 Este é un estourido de buffer de pila. 336 00:15:30,600 --> 00:15:33,210 Poderiamos ter un estourido de buffer de pila. 337 00:15:33,210 --> 00:15:36,870 Se houbo un tapón, o cal moitas veces existe é unha matriz do conxunto, e nós 338 00:15:36,870 --> 00:15:40,600 overwrote destes límites, entón nós ter un estourido de buffer de pila. 339 00:15:40,600 --> 00:15:44,870 >> E alén do alcance deste curso, son detectados un pouco diferente. 340 00:15:44,870 --> 00:15:48,040 O compilador ten especial medios de detección de cada unha. 341 00:15:48,040 --> 00:15:50,660 Pero un buffer overflow é un máis xenérico tipo do que eu describe, 342 00:15:50,660 --> 00:15:54,090 que foi un estourido de buffer de pila. 343 00:15:54,090 --> 00:15:56,240 Será que isto responde a súa pregunta? 344 00:15:56,240 --> 00:15:57,910 Doce. 345 00:15:57,910 --> 00:16:01,850 >> Había outras cuestións relacionadas para a pila ou a pila? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 É. 348 00:16:05,510 --> 00:16:08,220 >> ALUMNO: Sei que ten que cordas libres porque están no heap 349 00:16:08,220 --> 00:16:09,305 e non quere baleirar memoria. 350 00:16:09,305 --> 00:16:12,240 Pero ten que liberar as variables globais e cousas así? 351 00:16:12,240 --> 00:16:14,335 Ou son liberados automaticamente? 352 00:16:14,335 --> 00:16:15,700 >> Jason Hirschhorn: Boa pregunta. 353 00:16:15,700 --> 00:16:22,340 Así, en CS50.H, creamos esta cousa para vostede chamou unha cadea. 354 00:16:22,340 --> 00:16:23,800 Unha corda é realmente o que? 355 00:16:23,800 --> 00:16:24,810 >> ALUMNO: Char estrela. 356 00:16:24,810 --> 00:16:29,180 >> Jason Hirschhorn: Unha estrela char, un punteiro a un personaxe, un punteiro para 357 00:16:29,180 --> 00:16:30,650 un conxunto de caracteres. 358 00:16:30,650 --> 00:16:32,210 Iso é o que a corda é. 359 00:16:32,210 --> 00:16:36,050 Entón, necesitamos liberala, porque getstring, que usan moito - 360 00:16:36,050 --> 00:16:38,370 nome da secuencia coincide getstring - 361 00:16:38,370 --> 00:16:43,560 que mallocs para nós un pouco de memoria no heap e retorna un punteiro para a 362 00:16:43,560 --> 00:16:47,230 primeiro carácter que corda, unha estrela de char. 363 00:16:47,230 --> 00:16:52,760 >> Entón, ao parecer, se non ten sido escribindo libre en calquera das súas cordas 364 00:16:52,760 --> 00:16:55,600 que xa chamou ata agora, ten foi vazando un pouco de memoria. 365 00:16:55,600 --> 00:16:57,430 Claro que nós non falamos de lo, de xeito que ninguén chegou en 366 00:16:57,430 --> 00:16:58,520 problemas para facelo. 367 00:16:58,520 --> 00:16:59,980 Pero de aquí para diante, si. 368 00:16:59,980 --> 00:17:03,990 Cando chamar getstring, está mallocing algún espazo no heap. 369 00:17:03,990 --> 00:17:07,640 E se non chamar libre, máis tarde, que corda, ten un escape de memoria. 370 00:17:07,640 --> 00:17:09,440 Isto responde a súa pregunta? 371 00:17:09,440 --> 00:17:10,606 >> Si 372 00:17:10,606 --> 00:17:15,020 >> Estudante: Entón, para facelo, usan dereito libre antes do retorno? 373 00:17:15,020 --> 00:17:18,510 Como, no ámbito de, eu creo que se dicimos, como, int main, dentro do 374 00:17:18,510 --> 00:17:24,410 ámbito do código que está dentro dos chaves, ben antes - 375 00:17:24,410 --> 00:17:26,140 sabe onde desexa costume poñer retorno. 376 00:17:26,140 --> 00:17:27,950 Vostede pon libre antes diso? 377 00:17:27,950 --> 00:17:31,000 >> Jason Hirschhorn: Entón pode pór libre onde queira que poñer-libre. 378 00:17:31,000 --> 00:17:33,810 Porque estes son alocados dinamicamente variables, porque poden 379 00:17:33,810 --> 00:17:39,170 vivir máis aló do ámbito dunha determinada función, se chamar malloc nun 380 00:17:39,170 --> 00:17:44,140 función separada, por exemplo, getstring, pode conectar de balde no inicio. 381 00:17:44,140 --> 00:17:46,050 Non precisa de chamalo en función 382 00:17:46,050 --> 00:17:47,570 onde malloc se chama. 383 00:17:47,570 --> 00:17:50,340 Pero ten que facer para chamalo antes da volta principais. 384 00:17:50,340 --> 00:17:51,120 >> E iso realmente depende. 385 00:17:51,120 --> 00:17:54,960 Depende de cal malloced que espazo, en primeiro lugar. 386 00:17:54,960 --> 00:17:57,320 Algunhas persoas van chamar liberar moi rapidamente. 387 00:17:57,320 --> 00:17:59,220 Algunhas persoas non van chamar de balde ata Ao final do seu programa. 388 00:17:59,220 --> 00:18:00,660 E eles van pasar por e libre de todo. 389 00:18:00,660 --> 00:18:03,597 Depende de por que chamou malloc. 390 00:18:03,597 --> 00:18:11,270 >> ALUMNO: E o que diría se chamou uso getstring? 391 00:18:11,270 --> 00:18:13,320 Vostede diría que libre o que? 392 00:18:13,320 --> 00:18:20,040 >> Jason Hirschhorn: Entón a sintaxe de balde é simplemente libre, paréntese aberta, preto 393 00:18:20,040 --> 00:18:22,130 paren, e o nome do punteiro. 394 00:18:22,130 --> 00:18:26,410 Entón, se escribir iguais cadea nome getstring, pór o nome aquí. 395 00:18:26,410 --> 00:18:27,760 Ese é o nome do punteiro. 396 00:18:27,760 --> 00:18:30,570 E el sabe que para liberar memoria. 397 00:18:30,570 --> 00:18:33,920 >> Estudante: Entón, cando libera a memoria, o punteiro aínda apunta a aquel lugar 398 00:18:33,920 --> 00:18:34,970 na memoria? 399 00:18:34,970 --> 00:18:39,020 Ou é o punteiro tamén estaba baleira de a dirección que apunta. 400 00:18:39,020 --> 00:18:40,290 >> Jason Hirschhorn: Debemos intentar iso. 401 00:18:40,290 --> 00:18:41,430 Debemos codificar iso. 402 00:18:41,430 --> 00:18:43,880 Imos volver cando chegamos codificación, e imos codificar iso. 403 00:18:43,880 --> 00:18:46,000 E se queres descubrir a resposta para iso, tamén se pode código que 404 00:18:46,000 --> 00:18:46,690 no mesmo período. 405 00:18:46,690 --> 00:18:49,100 Pero iso é unha grande importancia. 406 00:18:49,100 --> 00:18:53,480 >> ALUMNO: É posible algo libre cedo de máis? 407 00:18:53,480 --> 00:18:58,530 Entón, aínda que para o seu programa, e liberou ese espazo de memoria? 408 00:18:58,530 --> 00:18:59,200 >> Jason Hirschhorn: si. 409 00:18:59,200 --> 00:19:03,020 É posible, se algo libre e despois de usalo de novo, vai 410 00:19:03,020 --> 00:19:06,890 atopou con un erro. 411 00:19:06,890 --> 00:19:10,810 Pero isto é para ti, porque liberou algo e, a continuación, chamou-lle máis tarde. 412 00:19:10,810 --> 00:19:13,940 Entón iso foi un erro do programador. 413 00:19:13,940 --> 00:19:14,780 Pero si. 414 00:19:14,780 --> 00:19:17,760 Podes escribir isto. 415 00:19:17,760 --> 00:19:19,240 >> Máis algunha pregunta sobre - 416 00:19:19,240 --> 00:19:19,760 Si 417 00:19:19,760 --> 00:19:22,820 >> Estudante: Entón, se se quere que a só liberar-lo, en xeral antes da 418 00:19:22,820 --> 00:19:25,490 programa remata, isto significa que se o programa remata e non libera-lo, 419 00:19:25,490 --> 00:19:27,580 que a memoria aínda é asignado? 420 00:19:27,580 --> 00:19:31,330 >> Jason Hirschhorn: O programa remata e esqueza liberar algo, entón 421 00:19:31,330 --> 00:19:34,390 que a memoria foi alocada ao longo a vida útil do seu programa. 422 00:19:34,390 --> 00:19:37,670 Cando o programa se pecha completamente, que a memoria non está a suceder 423 00:19:37,670 --> 00:19:39,490 para estar alí para sempre. 424 00:19:39,490 --> 00:19:42,080 O ordenador é intelixente dabondo para saber que cando o programa é pechado, el 425 00:19:42,080 --> 00:19:46,440 que se librar de toda a memoria que asociouse co referido programa. 426 00:19:46,440 --> 00:19:51,240 >> Sen embargo, existen ferramentas que poden ser executados nun programa para detectar se, cando o 427 00:19:51,240 --> 00:19:54,720 programa rematar, esqueciches para liberar memoria. 428 00:19:54,720 --> 00:19:57,960 E para o seu próximo conxunto de problemas onde estará usando malloc e usando 429 00:19:57,960 --> 00:20:02,610 punteiros, estará correndo este programa no seu programa para ver se, 430 00:20:02,610 --> 00:20:06,530 cando volve principais, tivo algún cousas que foron deixadas non liberado. 431 00:20:06,530 --> 00:20:09,130 >> Entón, eles non van estar malloced para sempre no seu computador. 432 00:20:09,130 --> 00:20:11,720 Iso sería un desperdicio porque moi rápido, ordenadores 433 00:20:11,720 --> 00:20:12,960 ía quedar sen memoria. 434 00:20:12,960 --> 00:20:16,450 Pero, se eles corren ata o final do seu programar e eles non están liberados e seu 435 00:20:16,450 --> 00:20:20,260 programa sae, isto aínda é un problema que esta ferramenta pode axudar a resolver. 436 00:20:20,260 --> 00:20:21,520 >> ALUMNO: É iso Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: É chamado Valgrind. 438 00:20:22,910 --> 00:20:23,520 E vai ser - 439 00:20:23,520 --> 00:20:25,780 >> ALUMNO: Pero non temos que saber que, para o exame, aínda que? 440 00:20:25,780 --> 00:20:27,600 Quero dicir, foi falado un pouco na charla. 441 00:20:27,600 --> 00:20:33,600 >> Jason Hirschhorn: Entón Valgrind é o nome desta ferramenta. 442 00:20:33,600 --> 00:20:37,180 Saber o que fai é suficiente para o quiz. 443 00:20:37,180 --> 00:20:40,200 Pero non telo usado aínda no seu conxunto de problemas, porque non tivemos unha 444 00:20:40,200 --> 00:20:43,520 conxunto de problemas que ten explicitamente tratado con malloc ou está a usar malloc. 445 00:20:43,520 --> 00:20:45,330 Entón, vostede non usou Valgrind aínda. 446 00:20:45,330 --> 00:20:47,760 Pero vai usalo, máis cedo en vez de máis tarde. 447 00:20:47,760 --> 00:20:48,710 >> ALUMNO: Pode repetir Valgrind que é? 448 00:20:48,710 --> 00:20:49,190 >> Jason Hirschhorn: Sentímolo? 449 00:20:49,190 --> 00:20:51,240 >> ALUMNO: Pode repetir o que finalidade de Valgring é? 450 00:20:51,240 --> 00:20:53,100 >> Jason Hirschhorn: Valgrind é o nome - 451 00:20:53,100 --> 00:20:59,890 como GDB axuda a depurar o seu programa, Valgrind axuda a descubrir se 452 00:20:59,890 --> 00:21:03,210 as cousas non foron liberados cando o programa é pechado. 453 00:21:03,210 --> 00:21:05,110 Entón vai executa-lo no seu programa. 454 00:21:05,110 --> 00:21:09,230 E o seu programa sae, e só pode dicir seu programa chamado malloc iso moitos 455 00:21:09,230 --> 00:21:13,670 veces por iso moitos bytes, e só chama libre iso moitas veces. 456 00:21:13,670 --> 00:21:16,520 E así deixou eses moitos bytes sen ser liberados. 457 00:21:16,520 --> 00:21:18,050 Ou que vai dicir que liberou todo. 458 00:21:18,050 --> 00:21:19,070 Bo traballo. 459 00:21:19,070 --> 00:21:19,480 >> ALUMNO: Aceptar. 460 00:21:19,480 --> 00:21:21,060 E el chámase Valgring? 461 00:21:21,060 --> 00:21:24,940 >> Jason Hirschhorn: V-A-G-G-N-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> ALUMNO: Unha pregunta sobre punteiros. 463 00:21:25,970 --> 00:21:30,080 Entón, digamos que teña n protagonizar x é igual a algo. 464 00:21:30,080 --> 00:21:33,330 Isto equivale a, o que está poñendo alí, é que o que está a ser colocado dentro 465 00:21:33,330 --> 00:21:36,120 o que x está a apuntar cara, ou o punteiro de x? 466 00:21:36,120 --> 00:21:37,690 >> Jason Hirschhorn: Pode repetir a pregunta? 467 00:21:37,690 --> 00:21:39,340 Podemos chamar a isto mentres di iso? 468 00:21:39,340 --> 00:21:42,710 >> ALUMNO: O cuestionario, en realidade, a aquel que nos enviou, era como, char 469 00:21:42,710 --> 00:21:46,520 estrela certo é igual a CS50 rochas, non? 470 00:21:46,520 --> 00:21:52,190 Entón, isto significa que este CS50 rochas é o que a realidade está a apuntar cara? 471 00:21:52,190 --> 00:21:55,810 >> Jason Hirschhorn: Entón está falando sobre unha estrela de carácter nunha cadea, como 472 00:21:55,810 --> 00:21:56,460 que funciona? 473 00:21:56,460 --> 00:21:56,890 É. 474 00:21:56,890 --> 00:21:57,700 Aceptar. 475 00:21:57,700 --> 00:21:59,140 Imos chamar iso aquí. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE conversa] 477 00:22:07,100 --> 00:22:11,130 >> Jason Hirschhorn: Entón esta variable será do tipo char estrela. 478 00:22:11,130 --> 00:22:14,580 Que grande é unha variable do tipo char estrela? 479 00:22:14,580 --> 00:22:15,510 Cantos bytes? 480 00:22:15,510 --> 00:22:16,450 >> ESTUDANTES: catro. 481 00:22:16,450 --> 00:22:18,210 >> Jason Hirschhorn: É catro bytes. 482 00:22:18,210 --> 00:22:21,420 Cantos dereitos é unha variable do tipo int estrela? 483 00:22:21,420 --> 00:22:22,210 >> ESTUDANTES: catro. 484 00:22:22,210 --> 00:22:24,910 >> Jason Hirschhorn: Catro bytes. 485 00:22:24,910 --> 00:22:28,280 De ser un punteiro, entón é sempre catro bytes, pois os punteiros, a súa 486 00:22:28,280 --> 00:22:30,070 valor é unha dirección de memoria. 487 00:22:30,070 --> 00:22:35,160 E os enderezos de memoria sobre o CS50 aparello son catro bytes. 488 00:22:35,160 --> 00:22:42,900 Entón, cando chamamos getstring, ou cando digamos, Nomedestring iguais, e, a continuación, en 489 00:22:42,900 --> 00:22:46,140 comiñas colocar unha corda, estamos poñendo - 490 00:22:46,140 --> 00:22:46,920 ben, iso é un pouco diferente. 491 00:22:46,920 --> 00:22:48,630 Nós imos facer getString como o exemplo. 492 00:22:48,630 --> 00:22:52,150 Ou char estrela algo é igual á cadea. 493 00:22:52,150 --> 00:22:54,360 Sentímolo, me dea o exemplo que leu? 494 00:22:54,360 --> 00:22:57,590 >> ESTUDANTE: char estrela certo é igual a "CS50 pedras" entre comiñas dobres. 495 00:22:57,590 --> 00:23:02,260 >> Jason Hirschhorn: Entón esta estrela, este imos chamar esta variable x para o noso 496 00:23:02,260 --> 00:23:04,060 propósitos xenéricos. 497 00:23:04,060 --> 00:23:05,970 Creamos unha variable chamada x. 498 00:23:05,970 --> 00:23:07,610 É tipo char estrela. 499 00:23:07,610 --> 00:23:10,950 É un punteiro para unha serie de caracteres. 500 00:23:10,950 --> 00:23:12,200 Entón, aquí abaixo - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Polo tanto, esta é a forma como iso sería traballo na memoria. 503 00:23:25,890 --> 00:23:27,410 Isto ía almacenar un enderezo de memoria. 504 00:23:27,410 --> 00:23:31,770 Sería almacenar o enderezo de memoria o primeiro carácter na matriz. 505 00:23:31,770 --> 00:23:33,830 E entón, cando seguiu punteiro, faría 506 00:23:33,830 --> 00:23:35,200 obter o primeiro carácter. 507 00:23:35,200 --> 00:23:38,780 >> E se está lendo esta cousa como unha corda, o ordenador é intelixente 508 00:23:38,780 --> 00:23:42,930 o suficiente para saber, le todo isto ata chegar a unha reacción 0. 509 00:23:42,930 --> 00:23:45,530 Pero se está lendo isto nun personaxe un tempo, así que está interactuando a través 510 00:23:45,530 --> 00:23:49,910 esta cadea, entón só vai ler un carácter de cada vez ata chegar ao 511 00:23:49,910 --> 00:23:50,850 barra invertida 0. 512 00:23:50,850 --> 00:23:52,335 Isto pode non responder á súa pregunta. 513 00:23:52,335 --> 00:23:55,610 >> ALUMNO: Si, pero non ten malloced que o espazo 514 00:23:55,610 --> 00:23:58,400 Aínda para este punteiro. 515 00:23:58,400 --> 00:24:02,510 >> Jason Hirschhorn: Entón, eu non estou seguro exactamente o que está mirando, 516 00:24:02,510 --> 00:24:03,640 porque eu non fixen que quiz. 517 00:24:03,640 --> 00:24:06,370 Isto era para ser un útil recurso de outro TF. 518 00:24:06,370 --> 00:24:11,380 Se está creando unha corda no pila ou como unha variable local, que vai 519 00:24:11,380 --> 00:24:16,920 ser só matriz de carga, no canto de xeralmente unha estrela de char apuntando para 520 00:24:16,920 --> 00:24:18,600 outra cadea. 521 00:24:18,600 --> 00:24:20,550 Pero eu non sei. 522 00:24:20,550 --> 00:24:25,065 Isto podería ser un punteiro a outro cadea na pila tamén. 523 00:24:25,065 --> 00:24:27,240 É. 524 00:24:27,240 --> 00:24:31,116 >> ALUMNO: Sei que precisa asignar memoria o punteiro está 525 00:24:31,116 --> 00:24:33,360 sendo declarada dentro doutra función. 526 00:24:33,360 --> 00:24:36,740 Debe facer o mesmo, se é ser declarada dentro principal, 527 00:24:36,740 --> 00:24:39,570 está a usar-o dentro do principal? 528 00:24:39,570 --> 00:24:43,590 >> Jason Hirschhorn: Entón, si. 529 00:24:43,590 --> 00:24:46,670 Pode declarar un punteiro para calquera enderezo de memoria na memoria. 530 00:24:46,670 --> 00:24:51,440 Pode ser o enderezo de memoria dun lugar de variable, aínda que, moitas veces, 531 00:24:51,440 --> 00:24:55,760 a xente non declarar os enderezos de memoria a variables locais, porque eles van 532 00:24:55,760 --> 00:24:59,890 lonxe, xa que a función devolve, o que É por iso que xeralmente malloc cousas. 533 00:24:59,890 --> 00:25:04,630 Senón, podería declarar un punteiro a outra variable local. 534 00:25:04,630 --> 00:25:06,360 É non só xeralmente feito. 535 00:25:06,360 --> 00:25:09,480 Pero podo dar un ollo ao que cousa específica despois da aula. 536 00:25:09,480 --> 00:25:10,650 É. 537 00:25:10,650 --> 00:25:12,350 >> ALUMNO: Eu creo que iso é unha especie do que está a ser solicitado. 538 00:25:12,350 --> 00:25:16,930 Parece estraño para ser inicializado un punteiro non como un 539 00:25:16,930 --> 00:25:20,760 enderezo, pero como o parece ser un valor. 540 00:25:20,760 --> 00:25:25,970 Parece que o CS50 é o que está dentro a cousa que está a ser apuntado e 541 00:25:25,970 --> 00:25:28,820 non o enderezo real, non? 542 00:25:28,820 --> 00:25:30,520 >> Jason Hirschhorn: Entón é iso non é o caso, porén. 543 00:25:30,520 --> 00:25:32,470 Non é iso que está a suceder. 544 00:25:32,470 --> 00:25:35,910 Cando declara unha estrela char, é un enderezo de memoria. 545 00:25:35,910 --> 00:25:38,860 Os punteiros son todos os enderezos de memoria apuntando a algo máis. 546 00:25:38,860 --> 00:25:41,480 Que outra cousa podería estar no pila, pero é case sempre sobre o 547 00:25:41,480 --> 00:25:43,440 amontoar en como vai velo usado. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Pero Nomedestring igual de comiñas dobres "GetString", podemos ver iso e nós 550 00:25:53,500 --> 00:25:55,010 pode ollar por iso e codificar iso. 551 00:25:55,010 --> 00:26:01,190 getString cadea non está a ser gardado en esta variable, ou o que a cadea 552 00:26:01,190 --> 00:26:04,580 nome non está a ser gardado na medida en que variable, non porque é así que 553 00:26:04,580 --> 00:26:06,070 punteiros funcionan. 554 00:26:06,070 --> 00:26:06,770 Será que isto ten sentido? 555 00:26:06,770 --> 00:26:07,170 >> ESTUDANTE: Yeah. 556 00:26:07,170 --> 00:26:08,570 >> Jason Hirschhorn: Aceptar. 557 00:26:08,570 --> 00:26:11,690 Afortunadamente, iso non era confuso para calquera. 558 00:26:11,690 --> 00:26:15,732 Pero se fose, podemos ollar para el de novo de aquí a pouco, porque en realidade estamos indo 559 00:26:15,732 --> 00:26:19,240 codificar algo que veña a traballar con cordas e axudar a sentir-se 560 00:26:19,240 --> 00:26:22,170 máis cómodo con eles. 561 00:26:22,170 --> 00:26:24,869 >> Calquera outras cuestións relacionadas con estes temas ou outros temas que 562 00:26:24,869 --> 00:26:26,119 Vou poñer de volta? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 E - 565 00:26:34,840 --> 00:26:36,310 agora. 566 00:26:36,310 --> 00:26:37,630 Si, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Entón iso é completamente alleos, pero podemos simplemente pasar por riba 568 00:26:39,860 --> 00:26:42,760 moi rapidamente o que precisa saber sobre a diferenza entre un 32 e 569 00:26:42,760 --> 00:26:46,345 Máquina de 64 bits? 570 00:26:46,345 --> 00:26:47,740 >> Jason Hirschhorn: si. 571 00:26:47,740 --> 00:26:52,111 Así, 32 bits é cantos bytes? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: É catro bytes. 573 00:26:53,060 --> 00:26:54,360 >> Jason Hirschhorn: É catro bytes. 574 00:26:54,360 --> 00:26:58,420 E 64 bits é cantos bytes? 575 00:26:58,420 --> 00:26:59,112 >> ALUMNO: Oito. 576 00:26:59,112 --> 00:27:00,610 >> Jason Hirschhorn: Oito bytes. 577 00:27:00,610 --> 00:27:03,980 Entón, de novo, oito bits é un byte. 578 00:27:03,980 --> 00:27:08,340 O aparello é CS50 unha máquina de 32 bits. 579 00:27:08,340 --> 00:27:13,650 Así, os enderezos de memoria son catro bytes de lonxitude. 580 00:27:13,650 --> 00:27:17,460 Hai 2 ao 32 enderezos de memoria. 581 00:27:17,460 --> 00:27:21,310 De 0 a 2 ao 32 menos 1. 582 00:27:21,310 --> 00:27:27,630 E eu non son positivo, pero iso é probablemente o alcance do que precisa 583 00:27:27,630 --> 00:27:35,230 saber para unha máquina de 32 bits, que a memoria enderezos son, unha vez máis, catro bytes de lonxitude, 584 00:27:35,230 --> 00:27:39,620 e esa é a cantidade máxima de enderezos de memoria. 585 00:27:39,620 --> 00:27:41,680 >> Ademais, os tipos de datos - 586 00:27:41,680 --> 00:27:45,020 isto pode ser algo tan ben, iso é digno de nota. 587 00:27:45,020 --> 00:27:49,610 O tamaño dun tipo de datos depende a máquina que está a traballar. 588 00:27:49,610 --> 00:27:56,760 Así, un char, un único personaxe, é como moitos bytes na nosa aparello CS50? 589 00:27:56,760 --> 00:27:57,980 Un byte. 590 00:27:57,980 --> 00:28:02,310 E é realmente un byte como ben nunha máquina de 64 bits. 591 00:28:02,310 --> 00:28:05,920 >> E a maioría dos tipos de datos son o mesmo número de bytes en ambas as máquinas. 592 00:28:05,920 --> 00:28:11,620 Pero algúns tipos de datos será diferente en ambas as máquinas. 593 00:28:11,620 --> 00:28:14,590 Así que sería potencialmente único que ten que saber. 594 00:28:14,590 --> 00:28:16,710 >> Pero aínda que, eu creo, está alén dos límites - 595 00:28:16,710 --> 00:28:20,990 Estou case seguro, se ollar cara atrás en quizzes vellos, di que, para asumir 596 00:28:20,990 --> 00:28:24,090 codificación problemas que está a usar unha máquina de 32 bits. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Pero hai, para ir xunto con iso en Pode que o interesado, hai 599 00:28:30,620 --> 00:28:35,920 tipos de datos que son os mesmos tamaño en todas as máquinas. 600 00:28:35,920 --> 00:28:42,670 >> Se xa viu algo parecido uint32_t, pode ou 601 00:28:42,670 --> 00:28:43,260 non vin iso. 602 00:28:43,260 --> 00:28:44,290 Isto é un tipo de datos. 603 00:28:44,290 --> 00:28:47,570 Isto está dicindo, sexa de 32 bits non importa o que esta máquina está activada. 604 00:28:47,570 --> 00:28:50,350 Entón, cando a xente está escribindo portátil código, eles probablemente non vai utilizar Ints. 605 00:28:50,350 --> 00:28:53,260 Eles en vez vou usar estes outros datos tipo que sabe que vai ser o mesmo 606 00:28:53,260 --> 00:28:54,780 tamaño en cada máquina individual. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Eu tiña unha pregunta sobre o proceso de compilación. 610 00:29:00,150 --> 00:29:04,110 Entón, se está escribindo un programa que usa unha biblioteca como CS50 ou algo 611 00:29:04,110 --> 00:29:06,840 así, sei que esta biblioteca Ten que, nalgún momento, ser 612 00:29:06,840 --> 00:29:08,590 compilado e conectado dentro 613 00:29:08,590 --> 00:29:13,380 Pero canto do que acontece durante a compilación do seu programa? 614 00:29:13,380 --> 00:29:15,880 Que parte dese proceso biblioteca ocorre cando está 615 00:29:15,880 --> 00:29:18,560 compilar o seu propio programa? 616 00:29:18,560 --> 00:29:24,020 >> Jason Hirschhorn: Entón imos pasar por riba en xeral, os pasos do presente proceso. 617 00:29:24,020 --> 00:29:26,280 Vostede escribe o seu arquivo c .. 618 00:29:26,280 --> 00:29:33,530 No seu arquivo c., Vostede # include seu bibliotecas de cabeceira, por exemplo, cs50.h. 619 00:29:33,530 --> 00:29:39,480 O que isto pechada inclúen liña de facer para o seu programa? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Engade os prototipos de as funcións a partir do cabeceira 622 00:29:43,350 --> 00:29:45,120 arquivos das bibliotecas. 623 00:29:45,120 --> 00:29:45,600 >> Jason Hirschhorn: Exactamente. 624 00:29:45,600 --> 00:29:49,870 Engade eses prototipos de función ao seu código. 625 00:29:49,870 --> 00:29:55,230 Entón, cando o seu código está compilado en etapas iniciais, o compilador sabe 626 00:29:55,230 --> 00:29:59,250 que estas funcións realmente existen, e que nalgún lugar eles foron definidos. 627 00:29:59,250 --> 00:30:02,460 Os ficheiros. H non inclúen o definicións para estas funcións ou como 628 00:30:02,460 --> 00:30:03,950 eles realmente funcionan. 629 00:30:03,950 --> 00:30:07,960 Cs50.h só inclúe algo que di getstring é unha cousa real que 630 00:30:07,960 --> 00:30:09,270 pode ocorrer. 631 00:30:09,270 --> 00:30:14,240 E standardio.h di printf é unha cousa real que pode ocorrer. 632 00:30:14,240 --> 00:30:23,190 >> Polo tanto, a súa linguaxe c con iso. Cabeceira ficheiro é transformado en algúns 633 00:30:23,190 --> 00:30:27,750 código de lectura óptica, que eventualmente transformouse en binario 634 00:30:27,750 --> 00:30:30,030 código, 0 e 1 do. 635 00:30:30,030 --> 00:30:33,590 E ese é o código que, en última instancia é executado. 636 00:30:33,590 --> 00:30:38,550 A l liña CS50 - por exemplo, cando está escribindo Clang - 637 00:30:38,550 --> 00:30:41,830 e entón incluírse l CS50, que escribe dentro 638 00:30:41,830 --> 00:30:42,180 E ve iso. 639 00:30:42,180 --> 00:30:43,890 Cando escribe fai, vai ver que formación aquí. 640 00:30:43,890 --> 00:30:47,740 E imos ver que nun segundo cando codificamos ou máis tarde, cando código. 641 00:30:47,740 --> 00:30:50,390 >> Pero a liña que CS50-l fai algo un pouco diferente do que 642 00:30:50,390 --> 00:30:52,440 o # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 O que fai liña que-l CS50 facer? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Eu quero dicir que se vincula a biblioteca para a función 646 00:31:00,310 --> 00:31:02,710 chamar, como os ficheiros. Ó. 647 00:31:02,710 --> 00:31:08,200 >> Jason Hirschhorn: Entón moi preto, se non spot-on. 648 00:31:08,200 --> 00:31:16,220 A l-CS50 leva o ficheiro binario e fúndese co seu ficheiro binario. 649 00:31:16,220 --> 00:31:21,410 Entón cs50.h, non hai punto de inflexión cs50.h da linguaxe C para binario cada 650 00:31:21,410 --> 00:31:23,130 única hora que está a ser usado. 651 00:31:23,130 --> 00:31:26,650 Iso sería tontería, porque iso sería un desperdicio de tempo. 652 00:31:26,650 --> 00:31:30,420 Por iso, xa foi feita e se converteu nun executable. 653 00:31:30,420 --> 00:31:35,430 E agora que vai ser fundidas co seu arquivo ao final. 654 00:31:35,430 --> 00:31:38,370 Polo tanto, aqueles 1 e 0 van fundir-se cos seus seres 655 00:31:38,370 --> 00:31:39,150 e 0 na final. 656 00:31:39,150 --> 00:31:43,670 Entón, agora vai realmente ter o real 1 e 0 que definen como getstring, 657 00:31:43,670 --> 00:31:47,890 por exemplo, traballa, ou como printf, por exemplo, funciona. 658 00:31:47,890 --> 00:31:52,750 >> E para máis información, hai unha compiladores curtas que Nate dá que 659 00:31:52,750 --> 00:31:55,410 ten que comprobar que por estes pasos. 660 00:31:55,410 --> 00:31:56,050 Pero - 661 00:31:56,050 --> 00:31:56,560 Si 662 00:31:56,560 --> 00:32:01,700 >> ALUMNO: están sempre en arquivos S. cando están en forma de biblioteca, 663 00:32:01,700 --> 00:32:06,764 pronto a ser incorporado, conexionado - como están no código binario? 664 00:32:06,764 --> 00:32:07,600 >> Jason Hirschhorn: Aceptar. 665 00:32:07,600 --> 00:32:08,420 Que - 666 00:32:08,420 --> 00:32:11,780 >> ALUMNO: É sempre o caso para as bibliotecas cando liga-los? 667 00:32:11,780 --> 00:32:12,500 >> Jason Hirschhorn: si. 668 00:32:12,500 --> 00:32:17,300 Polo tanto, hai ficheiros, o que será o é. S o código de máquina, que tamén será 669 00:32:17,300 --> 00:32:17,975 enigmática para ti. 670 00:32:17,975 --> 00:32:19,410 Non se preocupe eses. 671 00:32:19,410 --> 00:32:24,930 Pero, xeralmente, si, eles van estar no formato. o arquivos preparados para ir. 672 00:32:24,930 --> 00:32:27,170 >> Estudante: Entón, cando enviar a unha biblioteca, non só enviamos 673 00:32:27,170 --> 00:32:28,880 o h. eo. o? 674 00:32:28,880 --> 00:32:32,210 Non enviar a. C ou o. S. 675 00:32:32,210 --> 00:32:33,070 >> Jason Hirschhorn: So - 676 00:32:33,070 --> 00:32:36,260 e este é neste curto, así como, se esta información parece chegar a 677 00:32:36,260 --> 00:32:36,700 pouco rápido. 678 00:32:36,700 --> 00:32:39,870 Pero o curto en compiladores fala sobre iso tamén. 679 00:32:39,870 --> 00:32:43,290 Cando envía unha biblioteca, se publique o h., o ficheiro de cabeceira, os 680 00:32:43,290 --> 00:32:46,290 prototipos de función, ea 1 de e 0 de, iso é todo o que precisa para dar. 681 00:32:46,290 --> 00:32:50,640 Non precisa dar a forma na que o función funciona, o arquivo c .. 682 00:32:50,640 --> 00:32:56,360 Porque o punto de abstracción, ou o apuntar APIs, o punto neste SPL, 683 00:32:56,360 --> 00:32:59,650 a biblioteca portátil de Stanford, é para non se preocupar de como novo 684 00:32:59,650 --> 00:33:04,220 GRect funciona, ou como mover obras, ou como engadir obras. 685 00:33:04,220 --> 00:33:06,520 Todo o que precisa saber é que add é unha función que se pode 686 00:33:06,520 --> 00:33:08,880 usar, e fai iso. 687 00:33:08,880 --> 00:33:12,760 Entón, o que realmente non precisa saber como está escrito en C. Só ten 688 00:33:12,760 --> 00:33:15,460 sabe, aquí son as funcións, o que facer, e aquí están as de 1 e 0 689 00:33:15,460 --> 00:33:18,870 cando realmente quere usalos. 690 00:33:18,870 --> 00:33:19,530 >> Legal. 691 00:33:19,530 --> 00:33:26,980 Máis algunha pregunta sobre compiladores ou doutros temas sobre a tarxeta? 692 00:33:26,980 --> 00:33:30,300 >> ALUMNO: Eu teño unha pregunta de implantación de funcións recursivas. 693 00:33:30,300 --> 00:33:31,170 Unha pregunta sobre a recursividade. 694 00:33:31,170 --> 00:33:33,030 Eu tiña a sensación de que ía vir cara arriba. 695 00:33:33,030 --> 00:33:38,310 Entón, imos rapidamente pasar por recursão cun específico 696 00:33:38,310 --> 00:33:40,690 exemplo, unha función factorial. 697 00:33:40,690 --> 00:33:44,920 Porque este é un exemplo que moitas veces xorde ou se usa 698 00:33:44,920 --> 00:33:46,170 para ilustrar a recursividade. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Así, "4" é lido como 4 factorial. 701 00:33:56,410 --> 00:33:59,120 E o que 4 factorial significa? 702 00:33:59,120 --> 00:34:00,696 O que isto fai? 703 00:34:00,696 --> 00:34:02,235 Como calcular 4 factorial? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 veces 3 veces, 2 veces 1. 706 00:34:07,960 --> 00:34:11,889 >> Así, outra forma de escribir 4 factorial é escribir isto. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 veces 3 factorial. 709 00:34:19,022 --> 00:34:22,080 Por 3 factorial é 3 veces, 2 veces 1. 710 00:34:22,080 --> 00:34:27,580 SO 4 veces 3 factorial é 4 veces 3 veces, 2 veces 1. 711 00:34:27,580 --> 00:34:32,679 É por iso que factorial é un gran demandante a recursão, porque é 712 00:34:32,679 --> 00:34:36,630 claro que non é algo que pasa máis e máis e máis nun 713 00:34:36,630 --> 00:34:39,820 menor número de cousas ata chegar ao final. 714 00:34:39,820 --> 00:34:42,570 Cando chegar a 1, 1 factorial é 1. 715 00:34:42,570 --> 00:34:43,719 Non pode ir moito máis lonxe. 716 00:34:43,719 --> 00:34:47,219 0 factorial tamén é definida como 1. 717 00:34:47,219 --> 00:34:50,679 Entón, cando comeza a 1 ou 0, está ao final, e pode 718 00:34:50,679 --> 00:34:53,219 comezar a ir para arriba. 719 00:34:53,219 --> 00:34:59,540 Entón, se nós quería escribir unha recursiva función para calcular a factorial, 720 00:34:59,540 --> 00:35:02,170 imos escribir algún pseudocódigo para iso agora. 721 00:35:02,170 --> 00:35:03,300 Antes de escribir que pseudocódigo - 722 00:35:03,300 --> 00:35:05,660 Vou dar a vostedes un par de minutos para escribir o código pseudo ou só pensar 723 00:35:05,660 --> 00:35:09,600 sobre iso - hai dúas cousas a cada función recursiva precisa. 724 00:35:09,600 --> 00:35:12,530 Que son esas dúas cousas? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Ten que identificarse. 726 00:35:13,220 --> 00:35:13,680 >> Jason Hirschhorn: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Dalle. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Ten que identificarse. 730 00:35:16,640 --> 00:35:19,220 >> Jason Hirschhorn: Entón unha recursiva función precisa dunha chamada recursiva, unha 731 00:35:19,220 --> 00:35:20,220 chamar a si mesmo. 732 00:35:20,220 --> 00:35:20,770 Esta é unha. 733 00:35:20,770 --> 00:35:21,510 E cal é a outra cousa? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Un caso base. 735 00:35:22,250 --> 00:35:23,780 >> Jason Hirschhorn: Un caso base. 736 00:35:23,780 --> 00:35:26,940 Un caso base é, aquí é cando paramos. 737 00:35:26,940 --> 00:35:29,510 Polo tanto, a súa función é chamada. 738 00:35:29,510 --> 00:35:31,410 O caso base ven en primeiro lugar. 739 00:35:31,410 --> 00:35:33,710 Quere saber se está ao final. 740 00:35:33,710 --> 00:35:37,110 E se non está no fin, se facer a súa chamada recursiva. 741 00:35:37,110 --> 00:35:39,880 E pasar por esta función de novo, comprobar o seu caso base de novo. 742 00:35:39,880 --> 00:35:42,575 Se non é o final, fai outra chamada recursiva, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> É por iso que funcións recursivas sempre precisa destes casos base e aqueles 745 00:35:47,110 --> 00:35:48,210 chamadas recursivas. 746 00:35:48,210 --> 00:35:51,280 Se non ten unha chamada recursiva, el non sería unha función recursiva. 747 00:35:51,280 --> 00:35:53,210 Se non ten un caso base, ía para sempre e 748 00:35:53,210 --> 00:35:54,780 non habería final. 749 00:35:54,780 --> 00:35:57,870 E o caso base sempre ven en primeiro lugar, porque vai sempre querer comprobar 750 00:35:57,870 --> 00:36:00,420 se está ao final primeira. 751 00:36:00,420 --> 00:36:04,770 Entón, antes de facer un pseudocódigo, por que non dea un minuto para pensar sobre 752 00:36:04,770 --> 00:36:09,360 como unha función factorial recursiva sería escrito? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Ademais, como moitos como está facendo, escrita Lo nunha folla de papel é 755 00:36:26,010 --> 00:36:27,960 o que vai ter que facer sobre a proba de mañá. 756 00:36:27,960 --> 00:36:32,160 Entón, probablemente, unha boa práctica para facer Asegúrese o código que está escribindo 757 00:36:32,160 --> 00:36:34,420 abaixo na folla de papel - 758 00:36:34,420 --> 00:36:35,160 ou pode facelo. 759 00:36:35,160 --> 00:36:36,710 Vostede sabe onde as comas son. 760 00:36:36,710 --> 00:36:37,660 Vostede recorda da sintaxe. 761 00:36:37,660 --> 00:36:40,400 Porque non está poder ter unha compilador dicir que fixo un erro. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Ademais, ao longo destas liñas, mañá, cando ten problemas de codificación, se 764 00:37:07,240 --> 00:37:11,490 está apresurado para o tempo, ou se está moi confuso acerca de como debería 765 00:37:11,490 --> 00:37:16,030 escribir a cousa particular en c, é cabería a escribir pseudo-código 766 00:37:16,030 --> 00:37:18,160 ou escribir comentarios no ben. 767 00:37:18,160 --> 00:37:21,940 ¿Por que non hai crédito parcial a un Moitas das preguntas sobre o quiz. 768 00:37:21,940 --> 00:37:24,840 Entón pode ser apresurado, ou só podería ser confundido. 769 00:37:24,840 --> 00:37:28,030 Escribindo en comentarios ou pseudo-código son frecuentemente formas que 770 00:37:28,030 --> 00:37:29,360 pode obter crédito parcial. 771 00:37:29,360 --> 00:37:31,440 >> Polo tanto, non deixe algo en branco ao cuestionario. 772 00:37:31,440 --> 00:37:33,490 Non hai penalidades para poñer as cousas dentro 773 00:37:33,490 --> 00:37:37,650 En realidade, poñendo en pseudo-código ou Comentarios axudará o alumno 774 00:37:37,650 --> 00:37:40,410 descubrir se realmente sabe o que está falando, e quizais premio 775 00:37:40,410 --> 00:37:42,030 lle un crédito parcial para iso. 776 00:37:42,030 --> 00:37:44,510 >> Tamén nese sentido, escribir con claridade. 777 00:37:44,510 --> 00:37:47,650 Se non podemos realmente o que está escribindo, Non imos chamalo 778 00:37:47,650 --> 00:37:49,900 á medianoite de mañá a figura o que escribiu. 779 00:37:49,900 --> 00:37:51,520 Nós só estamos indo para sacar puntos. 780 00:37:51,520 --> 00:37:56,570 Escribe de forma clara para que poidamos escoitar, ou mellor, podemos ler o que escribiu. 781 00:37:56,570 --> 00:38:00,230 >> E se el di dúas frases, Non escriba un parágrafo. 782 00:38:00,230 --> 00:38:02,280 Siga as instrucións. 783 00:38:02,280 --> 00:38:03,500 Escribir de forma clara. 784 00:38:03,500 --> 00:38:07,720 E escribir nestes comentarios ou pseudocódigo para cuestións que poderían 785 00:38:07,720 --> 00:38:10,270 crédito parcial premio. 786 00:38:10,270 --> 00:38:12,520 >> OK, imos ao factorial. 787 00:38:12,520 --> 00:38:15,000 Polo tanto, temos unha función factorial. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Se eu fose realmente escribir isto en C, o que eu teño para poñer antes do nome 790 00:38:21,550 --> 00:38:22,800 da función? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 O tipo de retorno, o cal, neste caso, imos darlle int. 793 00:38:30,060 --> 00:38:35,450 E, a continuación, dentro das claves, é o que pasa dentro das claves para 794 00:38:35,450 --> 00:38:36,850 unha función? 795 00:38:36,850 --> 00:38:37,950 >> ESTUDANTES: tipo de argumento. 796 00:38:37,950 --> 00:38:39,150 >> Jason Hirschhorn: Os seus argumentos. 797 00:38:39,150 --> 00:38:42,680 Entón, probablemente, factorial tomar un argumento. 798 00:38:42,680 --> 00:38:44,500 El probablemente vai ter só un argumento. 799 00:38:44,500 --> 00:38:49,450 E imos dicir que vai levar un enteiro chamado x. 800 00:38:49,450 --> 00:38:52,770 E unha vez máis, ao escribir o prototipo unha función ou escribir a función 801 00:38:52,770 --> 00:38:57,110 no seu código antes de define-la, escribir o tipo de datos e nome 802 00:38:57,110 --> 00:39:01,370 esta variable a só esa función. 803 00:39:01,370 --> 00:39:06,350 Así, pode pasar un número a este función, que vai ser referido como x 804 00:39:06,350 --> 00:39:07,340 internamente. 805 00:39:07,340 --> 00:39:08,755 >> Temos a nosa función factorial. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Necesitamos dúas cousas, un caso base e unha chamada recursiva. 808 00:39:15,850 --> 00:39:20,900 Que é o caso base para factorial? 809 00:39:20,900 --> 00:39:24,850 Alguén que escribiu-lo e que non ten falado aínda, o que é a base 810 00:39:24,850 --> 00:39:26,100 caso para factorial? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> ALUMNO: Se n é menor de 2, voltar 1. 813 00:39:30,930 --> 00:39:33,520 >> Jason Hirschhorn: Se n é inferior a 2, volver 1. 814 00:39:33,520 --> 00:39:37,216 Me gusta diso, porque iso coida de 0 e 1. 815 00:39:37,216 --> 00:39:45,290 Entón, imos facer x <2, o retorno 1. 816 00:39:45,290 --> 00:39:47,870 Se conseguir pasar 0, se temos pasou 1, esta función 817 00:39:47,870 --> 00:39:49,790 voltar inmediatamente 1. 818 00:39:49,790 --> 00:39:54,020 Se conseguir pasar algún número maior ou igual a 2, imos 819 00:39:54,020 --> 00:39:55,370 temos a nosa chamada recursiva. 820 00:39:55,370 --> 00:39:57,855 >> E entón, como é que vai funcionar? 821 00:39:57,855 --> 00:40:01,070 Pode alguén que traballou neste que aínda non teña falado me dar a 822 00:40:01,070 --> 00:40:07,380 chamada recursiva para esta función en pseudocódigo? 823 00:40:07,380 --> 00:40:10,770 Se conseguir pasar nun número x e é superior a 2, o que 824 00:40:10,770 --> 00:40:13,370 que queremos facer? 825 00:40:13,370 --> 00:40:17,930 Temos tamén un exemplo escrito no banda que se lle dar unha información. 826 00:40:17,930 --> 00:40:20,770 >> ESTUDANTE: Call x veces o factorial de x menos 1? 827 00:40:20,770 --> 00:40:22,020 >> Jason Hirschhorn: Exactamente. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Nós imos voltar x veces o factorial de x menos 1. 830 00:40:37,750 --> 00:40:41,810 E iso, aínda que eu escribín, basicamente, o que dixo en inglés, 831 00:40:41,810 --> 00:40:44,580 esta función factorial chamarase novo. 832 00:40:44,580 --> 00:40:46,320 El vai executar en x menos 1. 833 00:40:46,320 --> 00:40:49,320 Vai volver con algún enteiro, e el vai multiplicar estes dous 834 00:40:49,320 --> 00:40:52,050 en conxunto, e ese valor será volveu para o que chamou este 835 00:40:52,050 --> 00:40:55,010 función factorial, o que pode ser outra instancia do 836 00:40:55,010 --> 00:40:58,420 esta función factorial. 837 00:40:58,420 --> 00:41:01,360 >> Así que é un exemplo dun recursiva función, unha moi 838 00:41:01,360 --> 00:41:02,530 función recursiva simple. 839 00:41:02,530 --> 00:41:04,530 Pero a maioría deles vai ser así. 840 00:41:04,530 --> 00:41:11,170 Se desexa un bo recursiva desafío para a proba, proba codificación 841 00:41:11,170 --> 00:41:13,230 busca binaria recursiva. 842 00:41:13,230 --> 00:41:18,950 Porque se fixo a busca binaria para conxunto de problemas de tres, probablemente o fixo 843 00:41:18,950 --> 00:41:21,730 iterativa en un loop while. 844 00:41:21,730 --> 00:41:23,700 >> Pero tamén pode ser escrito de forma recursiva. 845 00:41:23,700 --> 00:41:26,310 Vas a necesidade de escribir o seu propio función separada que leva moito 846 00:41:26,310 --> 00:41:29,020 diferentes argumentos de liña de comandos - ou nin argumentos de liña de comandos, algúns 847 00:41:29,020 --> 00:41:30,910 diferentes argumentos só regulares. 848 00:41:30,910 --> 00:41:33,870 Pero pode escribir de busca binaria recursivamente ben. 849 00:41:33,870 --> 00:41:36,190 >> ALUMNO: Entón vostede podería ter escrito tamén, en vez de x menos 1, 850 00:41:36,190 --> 00:41:39,502 tamén podería escribir x menos menos, ou podería ter 851 00:41:39,502 --> 00:41:40,830 escrito menos menos x. 852 00:41:40,830 --> 00:41:44,740 Pode só explicar moi rapidamente porque estes serían cousas distintas, 853 00:41:44,740 --> 00:41:49,510 como o que é a diferenza entre x menos menos e menos menos x? 854 00:41:49,510 --> 00:41:51,320 >> Jason Hirschhorn: Non, eu non son vai entrar nesa. 855 00:41:51,320 --> 00:41:55,500 Pero vou falar con vostede sobre iso despois clase. x menos menos, menos negativo x 856 00:41:55,500 --> 00:41:57,780 diminuír x por 1. 857 00:41:57,780 --> 00:41:59,090 Pero eles fan isto un pouco diferente. 858 00:41:59,090 --> 00:42:00,340 Pero eu non quero entrar en detalles. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Outras preguntas sobre recursão ou esta función? 861 00:42:09,090 --> 00:42:10,140 Isto non é realmente mesmo pseudocódigo. 862 00:42:10,140 --> 00:42:15,060 Iso é basicamente o código C lle escribiría para iso. 863 00:42:15,060 --> 00:42:19,393 >> OK, calquera outras preguntas sobre temas aquí enriba? 864 00:42:19,393 --> 00:42:19,864 É. 865 00:42:19,864 --> 00:42:23,130 >> ALUMNO: Eu teño un rápido resumo punto flotante de precisión e. 866 00:42:23,130 --> 00:42:24,260 >> Jason Hirschhorn: Flotante punto e precisión. 867 00:42:24,260 --> 00:42:26,920 Pode alguén realmente rápido déame un resumo de 868 00:42:26,920 --> 00:42:28,210 punto flotante e precisión? 869 00:42:28,210 --> 00:42:30,420 Todos vostedes tiveron que facelo para o seu conxunto de problemas, de xeito que é todo 870 00:42:30,420 --> 00:42:31,700 familiarizado con el. 871 00:42:31,700 --> 00:42:35,090 Ou quizais non todos vostedes. 872 00:42:35,090 --> 00:42:36,602 Calquera? 873 00:42:36,602 --> 00:42:39,530 Dáme un punto de comezar. 874 00:42:39,530 --> 00:42:40,750 Punto flotante e precisión. 875 00:42:40,750 --> 00:42:42,380 Cal é o problema? 876 00:42:42,380 --> 00:42:42,960 Si 877 00:42:42,960 --> 00:42:43,680 Vitoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> Jason Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Sentímolo. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Hai só un número finito de números que poden ser representados 882 00:42:51,550 --> 00:42:57,930 porque está nun na nosa caso, un sistema de 32 bits. 883 00:42:57,930 --> 00:43:03,080 Entón medio que ten que facer-se algúns números. 884 00:43:03,080 --> 00:43:03,910 >> Jason Hirschhorn: Entón é iso exactamente correcto. 885 00:43:03,910 --> 00:43:08,110 Hai só unha certa cantidade de números que poden ser representados. 886 00:43:08,110 --> 00:43:11,770 Se multiplicar dous números moi grandes, pode rebosar a cantidade 887 00:43:11,770 --> 00:43:13,950 de espazos que ten de representar un enteiro. 888 00:43:13,950 --> 00:43:17,930 É por iso que ás veces usamos un long long en vez de un int. 889 00:43:17,930 --> 00:43:19,210 Isto ten máis espazos. 890 00:43:19,210 --> 00:43:21,210 Que pode conter un número maior. 891 00:43:21,210 --> 00:43:24,310 >> Punto flotante de precisión ten a ver coa que, aínda que tamén ten que ver co 892 00:43:24,310 --> 00:43:29,300 feito de que os números decimais son Non sempre representados. 893 00:43:29,300 --> 00:43:29,540 Sentímolo. 894 00:43:29,540 --> 00:43:31,280 Deixe-me poñer iso de volta. 895 00:43:31,280 --> 00:43:36,610 O número decimal 1.0 non sempre é representado como sería de esperar, 896 00:43:36,610 --> 00:43:40,770 1,000 millóns. 897 00:43:40,770 --> 00:43:50,360 Ás veces é representado como 1,000000001 ou 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Pode-se incluso 89 xogados en algún lugar. 899 00:43:52,780 --> 00:43:56,560 Así, os números decimais non son representado exactamente como faría 900 00:43:56,560 --> 00:43:58,430 esperar que sexan representados. 901 00:43:58,430 --> 00:44:00,010 >> Así, no conxunto de problemas - 902 00:44:00,010 --> 00:44:00,860 era dous? - 903 00:44:00,860 --> 00:44:05,290 conxunto de problemas dous, onde lidamos con números de punto flotante, cando queriamos 904 00:44:05,290 --> 00:44:08,690 los para representar exactamente o que queriamos los para representar o número 905 00:44:08,690 --> 00:44:12,860 de moedas de un centavo, ou o número de centavos, nós multiplicala los por 100. 906 00:44:12,860 --> 00:44:14,750 Nós facemos eles. 907 00:44:14,750 --> 00:44:18,660 E, entón, cortar todo detrás do punto decimal. 908 00:44:18,660 --> 00:44:22,020 Iso era para garantir que eles ían realmente igual exactamente o que queriamos 909 00:44:22,020 --> 00:44:22,410 los para igualar. 910 00:44:22,410 --> 00:44:26,870 >> Porque cando toma algo que é a flotar e transformalo en un int, vostede 911 00:44:26,870 --> 00:44:29,860 cortar todo á dereita do punto decimal. 912 00:44:29,860 --> 00:44:33,900 Porque hai algún punto flotante imprecisión, 100.000 poderían ser 913 00:44:33,900 --> 00:44:37,440 representada como 99,999999999. 914 00:44:37,440 --> 00:44:40,350 E se acaba de cortar todo para o dereito de inmediato, vai 915 00:44:40,350 --> 00:44:41,600 obter o número incorrecto. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 É. 918 00:44:44,180 --> 00:44:45,290 >> ALUMNO: Eu tiña unha pregunta sobre o reparto. 919 00:44:45,290 --> 00:44:47,500 Que orde ocorre en? 920 00:44:47,500 --> 00:44:54,480 Se faría flotar, soportes, 1 dividido por 10, fai 1 dividido por 10, 921 00:44:54,480 --> 00:44:58,910 a continuación, obter 0,1, a continuación, chame Lo nun coche alegórico? 922 00:44:58,910 --> 00:45:01,470 >> Jason Hirschhorn: Se fai flotar 1 dividido por 10 - 923 00:45:01,470 --> 00:45:02,550 >> ALUMNO: Si, e, a continuación, é igual a - 924 00:45:02,550 --> 00:45:04,240 Ben, sería normalmente telo en igual - 925 00:45:04,240 --> 00:45:04,690 É. 926 00:45:04,690 --> 00:45:06,760 Quere facelo un coche alegórico, non? 927 00:45:06,760 --> 00:45:12,790 >> Jason Hirschhorn: OK, entón imos usar isto para segue en descubrir 928 00:45:12,790 --> 00:45:15,390 as respostas a estas preguntas a través de codificación. 929 00:45:15,390 --> 00:45:18,180 Porque probablemente vai ter unha chea de estas preguntas minutos, e unha boa forma 930 00:45:18,180 --> 00:45:19,100 para resolvelos los é a través da codificación. 931 00:45:19,100 --> 00:45:21,320 Entón, nós estamos indo a codificar iso agora, e entón imos volver e 932 00:45:21,320 --> 00:45:24,020 codificar a pregunta que tiña. 933 00:45:24,020 --> 00:45:24,950 >> Así, a primeira liña - 934 00:45:24,950 --> 00:45:29,390 Eu non debería ter escrito - o que é o primeiro que queremos facer cando 935 00:45:29,390 --> 00:45:32,250 abrir un novo arquivo no gedit? 936 00:45:32,250 --> 00:45:34,190 >> ALUMNO: Engadir. 937 00:45:34,190 --> 00:45:35,920 >> Jason Hirschhorn: Incluír o que? 938 00:45:35,920 --> 00:45:37,952 >> ALUMNO: biblioteca CS50. 939 00:45:37,952 --> 00:45:39,920 >> Jason Hirschhorn: Aceptar. 940 00:45:39,920 --> 00:45:42,590 O que máis hai que incluír? 941 00:45:42,590 --> 00:45:46,820 Nós só estamos indo para comprobar o que pasa cando publicar algo a unha boia. 942 00:45:46,820 --> 00:45:48,605 Pero o que necesitamos incluír, se estamos vai escribir un programa en C? 943 00:45:48,605 --> 00:45:49,300 >> ALUMNO: Estándar I / O. 944 00:45:49,300 --> 00:45:50,625 >> Jason Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Nós realmente non necesita, para este programa, cs50.h, aínda que sexa 946 00:45:54,880 --> 00:45:55,920 sempre útil para inclui-lo. 947 00:45:55,920 --> 00:45:58,260 Pero sempre necesitamos stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> ALUMNO: Cando a codificación en C? 949 00:45:59,660 --> 00:46:15,770 >> Jason Hirschhorn: Cando a codificación en C. 950 00:46:15,770 --> 00:46:17,090 >> Así que garda-lo como este ficheiro c .. 951 00:46:17,090 --> 00:46:18,590 Eu recibín un bo destaque de sintaxe. 952 00:46:18,590 --> 00:46:22,890 Escribín baleiro dentro principal. 953 00:46:22,890 --> 00:46:24,792 Que o baleiro significa? 954 00:46:24,792 --> 00:46:26,740 >> ALUMNO: Non tomar calquera argumentos de liña de comandos. 955 00:46:26,740 --> 00:46:28,900 >> Jason Hirschhorn: medio baleiro, neste caso, o principal non se 956 00:46:28,900 --> 00:46:29,700 argumentos de liña de comandos. 957 00:46:29,700 --> 00:46:32,720 Noutros casos, isto significa que a función non leva argumentos de liña de comandos. 958 00:46:32,720 --> 00:46:36,560 Ou a función, se eu fose escribir baleiro main (void), que diría principais do 959 00:46:36,560 --> 00:46:38,460 non devolver nada. 960 00:46:38,460 --> 00:46:39,960 Entón baleiro só non significa nada. 961 00:46:39,960 --> 00:46:42,510 O que eu ía escribir, se eu fose ter argumentos de liña de comandos? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> ALUMNO: int arco c corda do arco v 964 00:46:47,150 --> 00:46:49,055 >> Jason Hirschhorn: int argc argv cadea. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 É iso mesmo? 967 00:46:55,572 --> 00:46:58,720 >> ALUMNO: É carac soportes estrela argv. 968 00:46:58,720 --> 00:47:01,730 >> Jason Hirschhorn: Entón vostede podería escribir soportes de corda argv ou char estrela argv 969 00:47:01,730 --> 00:47:03,710 corchetes, pero ten que dos corchetes. 970 00:47:03,710 --> 00:47:06,290 Porque argv é un array de cordas, lembre-se. 971 00:47:06,290 --> 00:47:07,360 Non é só unha cadea. 972 00:47:07,360 --> 00:47:10,350 Entón corda argv é, aquí está unha corda chamado argv. 973 00:47:10,350 --> 00:47:13,630 Soportes de Cordas argv é, aquí está unha matriz de cadeas. 974 00:47:13,630 --> 00:47:17,865 Entón int argc argv soportes cadea sería algo que me 975 00:47:17,865 --> 00:47:18,810 probablemente escribir. 976 00:47:18,810 --> 00:47:23,050 >> Entón quería gardar nun enteiro? 977 00:47:23,050 --> 00:47:24,285 >> ALUMNO: Si, enteiro. 978 00:47:24,285 --> 00:47:25,840 Ou, nun coche alegórico. 979 00:47:25,840 --> 00:47:26,710 >> Jason Hirschhorn: Nunha boia? 980 00:47:26,710 --> 00:47:30,790 Como, float x é igual a 1 dividido por 10. 981 00:47:30,790 --> 00:47:32,040 >> Jason Hirschhorn: Aceptar. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 ¿Como imprimir un float en printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 O que? 986 00:47:46,714 --> 00:47:47,560 >> ALUMNO:% f. 987 00:47:47,560 --> 00:47:48,300 >> Jason Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 ¿Que é un número enteiro? 989 00:47:50,810 --> 00:47:52,110 d ou i. 990 00:47:52,110 --> 00:47:53,000 ¿Que é unha cadea? 991 00:47:53,000 --> 00:47:54,240 >> ALUMNO: s. 992 00:47:54,240 --> 00:47:56,140 >> Jason Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 ¿Como obter unha nova liña? 994 00:47:57,550 --> 00:47:58,800 >> ALUMNO: barra invertida n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> Jason Hirschhorn: Que eu retorno se principal é executado correctamente? 997 00:48:07,100 --> 00:48:08,360 >> ESTUDANTE: 0. 998 00:48:08,360 --> 00:48:09,430 Necesito escribir esta liña, aínda que? 999 00:48:09,430 --> 00:48:10,170 >> ALUMNO: Non 1000 00:48:10,170 --> 00:48:11,513 OK, non imos escribilo lo, entón. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Calquera pode ler isto? 1003 00:48:17,190 --> 00:48:18,485 Parece un pouco pequeno. 1004 00:48:18,485 --> 00:48:20,160 Todos poden ver, ou debería Eu facelo máis grande? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Creo que para a cámara, imos facer un pouco máis grande, con todo. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> Jason Hirschhorn: Se eu quero converter este . C arquivo nun arquivo executable, o que 1009 00:48:38,410 --> 00:48:39,260 que eu escriba? 1010 00:48:39,260 --> 00:48:41,610 >> ESTUDANTE: Fai proba. 1011 00:48:41,610 --> 00:48:42,080 >> Jason Hirschhorn: Sentímolo? 1012 00:48:42,080 --> 00:48:42,790 >> ESTUDANTE: Fai proba. 1013 00:48:42,790 --> 00:48:44,040 >> Jason Hirschhorn: Fai proba. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Estabamos falando sobre esta liña anterior. 1016 00:48:48,410 --> 00:48:49,140 Clang. 1017 00:48:49,140 --> 00:48:51,270 ¿Que hai de bumbum? 1018 00:48:51,270 --> 00:48:52,200 O nome do compilador. 1019 00:48:52,200 --> 00:48:53,920 Que é esa liña? 1020 00:48:53,920 --> 00:48:55,580 >> ALUMNO: Establece-lo para o seu uso de GDB. 1021 00:48:55,580 --> 00:48:59,230 >> Jason Hirschhorn: Establece Lo para o seu uso de GDB. 1022 00:48:59,230 --> 00:49:02,338 Esta liña, que é isto? 1023 00:49:02,338 --> 00:49:03,290 >> ALUMNO: O código fonte. 1024 00:49:03,290 --> 00:49:06,010 >> Jason Hirschhorn: Ese é o ficheiro de orixe, o arquivo c .. 1025 00:49:06,010 --> 00:49:08,150 Que estas dúas liñas de facer? 1026 00:49:08,150 --> 00:49:10,245 Ou estes dous non liñas. 1027 00:49:10,245 --> 00:49:12,300 >> ALUMNO: It nomes que probar. 1028 00:49:12,300 --> 00:49:15,410 >> Jason Hirschhorn: Entón o guión o di, nomealo algo diferente. 1029 00:49:15,410 --> 00:49:16,790 E aquí está chamando-o de proba. 1030 00:49:16,790 --> 00:49:18,900 Se eu non teño iso en, o que sería o nome diso? 1031 00:49:18,900 --> 00:49:20,260 >> ALUMNO: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> Jason Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 O que isto fai? 1034 00:49:25,366 --> 00:49:27,670 >> ALUMNO: Ligazóns da biblioteca matemática. 1035 00:49:27,670 --> 00:49:29,550 >> Jason Hirschhorn: Liga a biblioteca matemática. 1036 00:49:29,550 --> 00:49:32,880 Non incluír a biblioteca de matemáticas, pero xa que é tan común, teñen 1037 00:49:32,880 --> 00:49:35,780 make escrito para incluír sempre a biblioteca de matemáticas. 1038 00:49:35,780 --> 00:49:39,050 E do mesmo xeito, iso inclúe a biblioteca de CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, entón se alistar, agora temos un executábel chamado proba. 1040 00:49:43,010 --> 00:49:45,150 Para executalo, eu escriba proba. 1041 00:49:45,150 --> 00:49:48,330 Vexo que o meu punto flotante, como se esperaba, é igual a 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Será que iso - 1044 00:49:51,590 --> 00:49:52,060 so - 1045 00:49:52,060 --> 00:49:55,210 >> Estudante: Entón, se pór flotar o momento, como lanzalo como float - 1046 00:49:55,210 --> 00:49:56,870 >> Jason Hirschhorn: Intérpretes o 1 a unha boia? 1047 00:49:56,870 --> 00:49:59,180 >> ALUMNO: Non, tire a cousa completa - 1048 00:49:59,180 --> 00:49:59,500 si. 1049 00:49:59,500 --> 00:50:02,460 Se acaba de facelo, non que facelo de 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> Jason Hirschhorn: OK, entón moi rapidamente, 1 dividido por 10, son 1051 00:50:07,170 --> 00:50:08,690 enteiros sendo dividido. 1052 00:50:08,690 --> 00:50:13,580 Entón, cando dividir enteiros, son 0, e se está salvando que 0 nun 1053 00:50:13,580 --> 00:50:17,170 flotar, xa que a barra está só división enteira. 1054 00:50:17,170 --> 00:50:19,180 Entón agora estamos transformando algo nun coche alegórico. 1055 00:50:19,180 --> 00:50:21,650 >> Imos ver o que acontece. 1056 00:50:21,650 --> 00:50:22,900 Nós imos facer exame. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Entón, agora podemos ver que este corte non era división enteira, estaba flotando 1059 00:50:31,090 --> 00:50:32,640 división punto. 1060 00:50:32,640 --> 00:50:35,700 Porque un dos seus argumentos fora convertido nun float. 1061 00:50:35,700 --> 00:50:38,380 Entón, agora estaba dicindo, tratar esta división como estamos lidando con 1062 00:50:38,380 --> 00:50:40,140 Os puntos de flotación, non con números enteiros. 1063 00:50:40,140 --> 00:50:42,760 E, así, obter a resposta que esperamos. 1064 00:50:42,760 --> 00:50:44,620 >> Imos ver o que pasa - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Se eu quixese imprimir máis decimal manchas, como eu podería facelo? 1067 00:50:51,646 --> 00:50:55,550 >> ALUMNO: Punto punto f, ou como moitos cifras decimais que quere. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> Jason Hirschhorn: Entón eu imprimir 10 puntos decimais. 1070 00:51:04,440 --> 00:51:06,610 E agora vemos que estamos recibindo algunhas cousas estrañas. 1071 00:51:06,610 --> 00:51:09,650 E iso vai voltar á súa pregunta preto de punto flotante imprecisión. 1072 00:51:09,650 --> 00:51:10,950 Hai cousas estrañas gardados aquí. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, iso responde a súa pregunta? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Que máis queres para codificar rapidamente? 1077 00:51:20,200 --> 00:51:25,470 >> ALUMNO: Eu só quería ver se ou non, se liberou algúns punteiro, 1078 00:51:25,470 --> 00:51:30,410 se ese punteiro aínda tiña almacenado no que o enderezo que fora 1079 00:51:30,410 --> 00:51:32,170 apuntando anteriormente. 1080 00:51:32,170 --> 00:51:34,100 >> Jason Hirschhorn: OK, entón imos facelo. 1081 00:51:34,100 --> 00:51:38,030 Char PTR estrela, iso crea unha variable chamado PTR do tipo char estrela. 1082 00:51:38,030 --> 00:51:39,280 ¿Como escribir malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Só malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Pero, entón, ten que ser o tamaño, e neste caso, eu creo que 1087 00:51:51,040 --> 00:51:52,465 estar apuntando para char. 1088 00:51:52,465 --> 00:51:54,450 Así, sería de char. 1089 00:51:54,450 --> 00:51:57,520 >> Jason Hirschhorn: OK, entón máis xenericamente, Dentro - 1090 00:51:57,520 --> 00:51:58,770 imos editar. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Dentro malloc, quere que o número de bytes na pila. 1093 00:52:09,260 --> 00:52:12,320 Xeralmente, o que vimos que estamos facendo é que estamos indo a malloc 1094 00:52:12,320 --> 00:52:14,940 cadeas, por exemplo, ou matrices de enteiros. 1095 00:52:14,940 --> 00:52:21,600 Polo tanto, se queremos 10 enteiros, ou 10 caracteres, 10 daranos 10. 1096 00:52:21,600 --> 00:52:24,370 E, a continuación, tamaño de caracteres daría nos de que o tamaño de caracteres, que na 1097 00:52:24,370 --> 00:52:25,120 Neste caso, é de 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Estivemos con 10 bytes. 1099 00:52:26,250 --> 00:52:28,540 Se fósemos escribir tamaño int, que nos daría 40 bytes. 1100 00:52:28,540 --> 00:52:31,520 >> Entón, máis xenericamente, dentro malloc é o número de bytes que quere. 1101 00:52:31,520 --> 00:52:34,620 Neste caso, estamos a recibir un byte. 1102 00:52:34,620 --> 00:52:36,900 Que parece ser un uso estraño de malloc, pero para o noso 1103 00:52:36,900 --> 00:52:38,470 propósitos ten sentido. 1104 00:52:38,470 --> 00:52:40,420 Polo tanto, non é iso. 1105 00:52:40,420 --> 00:52:43,420 >> Imos chamar libre. 1106 00:52:43,420 --> 00:52:47,040 Nós se librar del e usamos PTR novo. 1107 00:52:47,040 --> 00:52:48,750 E o que quere comprobar? 1108 00:52:48,750 --> 00:52:50,550 >> ALUMNO: Eu só quería comprobar se houbo ou non calquera cousa 1109 00:52:50,550 --> 00:52:51,900 no interior do mesmo. 1110 00:52:51,900 --> 00:52:53,050 >> Jason Hirschhorn: Entón, se sinalou algo? 1111 00:52:53,050 --> 00:52:57,740 >> ALUMNO: Si, exactamente, se el aínda tiña un enderezo de memoria. 1112 00:52:57,740 --> 00:53:02,220 >> Jason Hirschhorn: Entón quere para comprobar o valor do PTR? 1113 00:53:02,220 --> 00:53:03,470 >> ALUMNO: Si, exactamente. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> Jason Hirschhorn: O que eu escribo aquí se eu queira comprobar o valor do 1116 00:53:10,160 --> 00:53:11,880 punto - o que é, en Xordania Dito isto, o valor? 1117 00:53:11,880 --> 00:53:13,720 Ou o que é almacenado dentro do PTR? 1118 00:53:13,720 --> 00:53:14,620 >> ESTUDANTE: Este enderezo de memoria. 1119 00:53:14,620 --> 00:53:16,330 >> Jason Hirschhorn: Este enderezo de memoria. 1120 00:53:16,330 --> 00:53:20,520 Entón, se eu escriba só iso, que vai dáme o valor de PTR. 1121 00:53:20,520 --> 00:53:22,800 E como fago para imprimir unha dirección de memoria? 1122 00:53:22,800 --> 00:53:26,470 Cal é a cadea de formato a un enderezo de memoria? 1123 00:53:26,470 --> 00:53:27,430 >> ALUMNO:% p. 1124 00:53:27,430 --> 00:53:28,050 >> Jason Hirschhorn:% p. 1125 00:53:28,050 --> 00:53:29,500 % S é unha cadea. 1126 00:53:29,500 --> 00:53:30,750 % N para punteiro. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 É iso mesmo? 1129 00:53:43,540 --> 00:53:44,790 Iso é certo. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Entón PTR coincide - 1132 00:53:51,040 --> 00:53:53,350 aínda ten algo no mesmo. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Este é probablemente un maior pregunta interesante. 1135 00:53:57,645 --> 00:53:59,198 Que esta liña fai? 1136 00:53:59,198 --> 00:54:00,830 >> ALUMNO: Lun fallos. 1137 00:54:00,830 --> 00:54:01,310 >> Jason Hirschhorn: O que? 1138 00:54:01,310 --> 00:54:02,678 >> ALUMNO: Coido que SEG fallos. 1139 00:54:02,678 --> 00:54:03,574 >> Jason Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> ALUMNO: Eu creo que vai SEG culpa. 1141 00:54:04,920 --> 00:54:08,265 >> Jason Hirschhorn: Entón esta liña de código, estrela PTR, o que 1142 00:54:08,265 --> 00:54:10,152 que a estrela significa? 1143 00:54:10,152 --> 00:54:11,240 >> ESTUDANTE: Contido. 1144 00:54:11,240 --> 00:54:11,560 >> Jason Hirschhorn: Yeah. 1145 00:54:11,560 --> 00:54:13,910 Ir para o contido de. 1146 00:54:13,910 --> 00:54:16,830 Polo tanto, este está indo a ir á memoria dirixir alí e me dar iso. 1147 00:54:16,830 --> 00:54:21,030 Adoitaba% c certo aquí, porque hai son personaxes almacenados alí. 1148 00:54:21,030 --> 00:54:23,390 Entón, nós estamos indo a ir a que enderezo acabo de ver - ou probablemente vai ser un 1149 00:54:23,390 --> 00:54:25,190 pouco agasallo diferente xa que executar o programa. 1150 00:54:25,190 --> 00:54:28,010 Pero imos a este enderezo que sabemos que aínda existe 1151 00:54:28,010 --> 00:54:29,260 e ver o que está aí. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Entón non SEG culpa. 1154 00:54:37,110 --> 00:54:38,970 El só non nos deu nada. 1155 00:54:38,970 --> 00:54:43,350 El podería realmente nos deu algo, nós só non podemos velo. 1156 00:54:43,350 --> 00:54:45,110 E iso vai volver a esta idea - 1157 00:54:45,110 --> 00:54:47,270 e nós non imos conseguir moito en iso, porque iso é ademais da 1158 00:54:47,270 --> 00:54:48,460 alcance deste curso. 1159 00:54:48,460 --> 00:54:51,260 Pero falamos aquí, se nós foi alén dos límites da matriz por 1160 00:54:51,260 --> 00:54:54,890 1, podemos non estar en apuros. 1161 00:54:54,890 --> 00:54:58,550 >> Ás veces, cando acaba de saír por 1, está facendo algo mal, e 1162 00:54:58,550 --> 00:54:59,220 podería estar en apuros. 1163 00:54:59,220 --> 00:55:00,820 Pero non sempre terá problemas. 1164 00:55:00,820 --> 00:55:05,170 Depende de canto de algo malo lle non, vai estar en apuros. 1165 00:55:05,170 --> 00:55:07,790 O que non quere dicir, ser desleixado co seu código. 1166 00:55:07,790 --> 00:55:12,080 Pero é para dicir que o programa non sempre desistir, mesmo se ir a algún lugar 1167 00:55:12,080 --> 00:55:14,130 non debería ir. 1168 00:55:14,130 --> 00:55:18,170 >> Un bo exemplo do que é, unha morea de persoas no seu conxunto de problemas 3, que 1169 00:55:18,170 --> 00:55:22,350 tiña 15 anos, non se comproba a límites da tarxeta. 1170 00:55:22,350 --> 00:55:25,860 Entón mirou á esquerda, mirou para o dereita, mirou cara arriba, mirou 1171 00:55:25,860 --> 00:55:27,000 cara á parte inferior. 1172 00:55:27,000 --> 00:55:31,540 Pero non comprobar a ver se o cumio foi realmente será na tarxeta. 1173 00:55:31,540 --> 00:55:35,220 E unha morea de persoas que fixeron iso e virou-se que en, o seu programa funcionou 1174 00:55:35,220 --> 00:55:38,960 perfectamente, porque sempre que este era almacenados na memoria, se fose un 1175 00:55:38,960 --> 00:55:42,300 anterior, ou Comprobarase que a memoria enderezo, non había nada 1176 00:55:42,300 --> 00:55:44,870 particularmente horrible sobre iso, para que o seu programa non era 1177 00:55:44,870 --> 00:55:45,970 vai berrar con vostede. 1178 00:55:45,970 --> 00:55:48,870 >> Pero aínda ía despegar puntos se non comprobar iso, porque 1179 00:55:48,870 --> 00:55:50,850 estaban facendo algo que non estaba debería facer, e que podería ter 1180 00:55:50,850 --> 00:55:51,860 ficar en apuros. 1181 00:55:51,860 --> 00:55:54,040 As probabilidades son, con todo, probablemente non o fixo. 1182 00:55:54,040 --> 00:55:57,790 Entón, iso é para demostrar que, si, aínda podemos ir a el. 1183 00:55:57,790 --> 00:55:59,010 E nós non imos a problema neste caso. 1184 00:55:59,010 --> 00:56:04,000 Se tentásemos facer ler a próximos 100 caracteres, teriamos 1185 00:56:04,000 --> 00:56:06,000 probablemente terá problemas. 1186 00:56:06,000 --> 00:56:09,400 E pode codificar a ler o seguinte 100 caracteres, se o desexa, facendo algunhas 1187 00:56:09,400 --> 00:56:10,110 especie de loop for. 1188 00:56:10,110 --> 00:56:10,850 É. 1189 00:56:10,850 --> 00:56:16,250 >> ALUMNO: Dende que foron asignados que espazo un valor real, non teriamos 1190 00:56:16,250 --> 00:56:17,050 realmente ser capaz de ver nada. 1191 00:56:17,050 --> 00:56:21,740 Debemos tratar coa creación que igual a gustar c ou algo así? 1192 00:56:21,740 --> 00:56:22,640 >> Jason Hirschhorn: Gran pregunta. 1193 00:56:22,640 --> 00:56:25,340 ¿Como configurar este valor - 1194 00:56:25,340 --> 00:56:28,980 que liña de código que eu escriba na liña sete para facer o que dixo? 1195 00:56:28,980 --> 00:56:34,040 >> ALUMNO: Estrela PTR iguala único Cita c acabar aspas. 1196 00:56:34,040 --> 00:56:36,970 >> Jason Hirschhorn: Para que está poñendo un personaxe, c, naquel lugar, 1197 00:56:36,970 --> 00:56:40,200 porque unha vez máis, que a estrela significa ir máis alá. 1198 00:56:40,200 --> 00:56:43,320 E cando se usa á esquerda do un operador de asignación, que é igual a 1199 00:56:43,320 --> 00:56:47,270 asinar, nós non imos conseguir que valor tanto como se indica ese valor. 1200 00:56:47,270 --> 00:56:48,520 Agora imos ver o que acontece. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Poñemos algo alí e foi alí. 1203 00:56:56,770 --> 00:56:58,000 Chamamos libre. 1204 00:56:58,000 --> 00:57:00,100 Algunhas cousas probablemente aconteceu na pila. 1205 00:57:00,100 --> 00:57:01,890 Polo tanto, non é máis alá. 1206 00:57:01,890 --> 00:57:07,440 Pero, de novo, non estamos a recibir en apuros para ir alí. 1207 00:57:07,440 --> 00:57:10,260 >> Estou facendo isto en código para ilustrar que moitos destes 1208 00:57:10,260 --> 00:57:12,410 preguntas que ten, son realmente interesante 1209 00:57:12,410 --> 00:57:13,650 responde a unha chea de tempo. 1210 00:57:13,650 --> 00:57:15,260 E eles están realmente boas preguntas. 1211 00:57:15,260 --> 00:57:19,010 E pode entendelo-los en seu propio, se, por exemplo, 1212 00:57:19,010 --> 00:57:19,990 Non estamos na sección. 1213 00:57:19,990 --> 00:57:20,940 É. 1214 00:57:20,940 --> 00:57:24,430 >> ALUMNO: Por que non está enviando o punteiro en calquera lugar, ten que de 1215 00:57:24,430 --> 00:57:26,530 usar malloc? 1216 00:57:26,530 --> 00:57:28,400 >> Jason Hirschhorn: Entón, que vai volver á súa pregunta inicial. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 É só unha variable local? 1219 00:57:29,980 --> 00:57:32,280 Malloc aquí non é que convincente. 1220 00:57:32,280 --> 00:57:35,260 O uso de malloc aquí non é que convincente por que é 1221 00:57:35,260 --> 00:57:36,500 só unha variable local. 1222 00:57:36,500 --> 00:57:40,970 >> ALUMNO: Entón vostede podería facer de char estrela PTR coincide Ola? 1223 00:57:40,970 --> 00:57:41,400 >> Jason Hirschhorn: Ah. 1224 00:57:41,400 --> 00:57:43,300 Entón, imos agora volver á súa pregunta inicial. 1225 00:57:43,300 --> 00:57:46,885 Eu creo que non estaban satisfeitos coa miña resposta. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Así? 1228 00:57:49,226 --> 00:57:49,682 >> ESTUDANTE: Yeah. 1229 00:57:49,682 --> 00:57:50,932 Espera. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> Jason Hirschhorn: E onde que quere imprimir? 1232 00:57:57,850 --> 00:58:00,026 Entón, imos imprimir unha cadea así? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> ESTUDANTE: Interesante. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> Jason Hirschhorn: Entón, iso di que esta argumento ten o tipo de carácter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Polo tanto, este debe ser un personaxe. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> ALUMNO: só ten o primeiro. 1241 00:58:26,280 --> 00:58:28,610 >> Jason Hirschhorn: Entón iso é o que eu dixen antes. 1242 00:58:28,610 --> 00:58:34,240 Como dixen, non está almacenando o corda dentro punteiro variable. 1243 00:58:34,240 --> 00:58:35,120 É o almacenamento - 1244 00:58:35,120 --> 00:58:36,350 >> ALUMNO: O primeiro valor da cadea. 1245 00:58:36,350 --> 00:58:40,810 >> Jason Hirschhorn: O enderezo de o primeiro valor da secuencia. 1246 00:58:40,810 --> 00:58:46,940 Se tivésemos que imprimir iso, estamos quedando o valor dentro do punteiro. 1247 00:58:46,940 --> 00:58:51,005 E imos ver que é, de feito, unha dirección de memoria. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Será que isto ten sentido? 1250 00:58:56,440 --> 00:58:56,940 Sentímolo. 1251 00:58:56,940 --> 00:58:58,996 Espera, iso responde á súa cuestión, aínda que? 1252 00:58:58,996 --> 00:58:59,790 >> ESTUDANTE: Yeah. 1253 00:58:59,790 --> 00:59:05,830 >> Jason Hirschhorn: Esta liña de código é creando unha cadea e logo outro 1254 00:59:05,830 --> 00:59:09,115 punteiro variable que está a apuntar para esa secuencia, esta matriz. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 É. 1257 00:59:14,980 --> 00:59:19,200 >> Estudante: Entón, se nós fomos unha memoria afondar, se chegamos a horas? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Foi almacenado como unha cadea? 1260 00:59:23,150 --> 00:59:24,400 >> Jason Hirschhorn: Como, nós fixemos - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 polo que este é valioso para facer. 1263 00:59:30,790 --> 00:59:33,780 Este é o punto de aritmética, que vostedes teña visto antes e debe ser 1264 00:59:33,780 --> 00:59:35,550 relativamente cómodo. 1265 00:59:35,550 --> 00:59:36,905 Isto é semellante a escribir - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 se fósemos escribir esta liña de código, vimos a notación de matriz antes. 1268 00:59:46,350 --> 00:59:55,900 Isto debería dar a segunda valor neste array, h. 1269 00:59:55,900 --> 01:00:05,010 >> Se fixésemos iso, iso tamén debe dar nós o segundo valor do array. 1270 01:00:05,010 --> 01:00:08,320 Porque non vai á memoria enderezo do primeiro, pero o 1271 01:00:08,320 --> 01:00:10,530 enderezo de memoria da que se acabou. 1272 01:00:10,530 --> 01:00:14,360 E entón os dereferences operador estrela ese punteiro. 1273 01:00:14,360 --> 01:00:16,940 E unha vez máis, imos ver. 1274 01:00:16,940 --> 01:00:18,664 Recibimos h novo. 1275 01:00:18,664 --> 01:00:20,980 >> ALUMNO: Que fai dereference significa? 1276 01:00:20,980 --> 01:00:23,650 >> Jason Hirschhorn: Dereference é unha palabra chique para ir. 1277 01:00:23,650 --> 01:00:26,390 Ir a iso e conseguir o que está aí é para eliminar a referencia dun punteiro. 1278 01:00:26,390 --> 01:00:28,240 É só unha palabra chique para iso. 1279 01:00:28,240 --> 01:00:29,986 >> ALUMNO: Si quixésemos imprimir a corda toda, poderiamos 1280 01:00:29,986 --> 01:00:31,930 facer punteiro e comercial? 1281 01:00:31,930 --> 01:00:33,490 >> Jason Hirschhorn: OK, estamos vai facer unha pausa aquí. 1282 01:00:33,490 --> 01:00:35,480 Imos rematar aquí. 1283 01:00:35,480 --> 01:00:41,760 Ampersand dálle a dirección dun situación, por iso, cando fai comercial de 1284 01:00:41,760 --> 01:00:44,080 unha variable, que lle dá o enderezo onde a variable está almacenada. 1285 01:00:44,080 --> 01:00:48,580 Punteiro ampersand lle dará a enderezo de onde PTR PTR está na memoria. 1286 01:00:48,580 --> 01:00:50,140 >> Non estamos indo para ir en con este exemplo. 1287 01:00:50,140 --> 01:00:52,640 Pode descubrir estes as cousas por conta propia. 1288 01:00:52,640 --> 01:00:55,740 Pero, de novo, isto pode ata ser unha beirando pouco máis do que precisa saber para 1289 01:00:55,740 --> 01:00:58,000 o ámbito do presente intercalar - 1290 01:00:58,000 --> 01:00:59,070 ou esta proba, mellor dito. 1291 01:00:59,070 --> 01:01:00,270 Sentímolo. 1292 01:01:00,270 --> 01:01:03,770 >> Imos seguir adiante, porque eu faría quere facer un problema de codificación 1293 01:01:03,770 --> 01:01:05,100 antes de tempo é superior. 1294 01:01:05,100 --> 01:01:09,340 E nós estamos indo a codificar o que eu penso é a máis convincente delas 1295 01:01:09,340 --> 01:01:11,020 exemplos, atoi. 1296 01:01:11,020 --> 01:01:14,520 Polo tanto, esta foi unha pregunta sobre un quiz, hai dous anos. 1297 01:01:14,520 --> 01:01:17,810 E eu teño iso no consello aquí. 1298 01:01:17,810 --> 01:01:20,680 >> Persoas foron convidados para o exame - 1299 01:01:20,680 --> 01:01:23,640 recibiron un pouco máis en tesxt a pregunta, pero eu eliminou o 1300 01:01:23,640 --> 01:01:26,640 texto, porque non era necesario para os nosos propósitos agora. 1301 01:01:26,640 --> 01:01:29,180 Foi só algunhas fondo en que atoi fixo. 1302 01:01:29,180 --> 01:01:31,425 Pero todos saben e son moi familiarizado con atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Suxiro que este código sobre unha folla de papel. 1304 01:01:35,620 --> 01:01:39,310 Suxiro tamén que usar a estratexia que xa sabemos 1305 01:01:39,310 --> 01:01:41,040 moito na nosa sección. 1306 01:01:41,040 --> 01:01:44,130 En primeiro lugar, asegúrese de comprender atoi que está facendo. 1307 01:01:44,130 --> 01:01:47,580 Fai un debuxo ou chegar a algún imaxe mental do que na súa cabeza. 1308 01:01:47,580 --> 01:01:51,120 A continuación, escriba o pseudocódigo para iso. 1309 01:01:51,120 --> 01:01:53,120 O cuestionario, se todo o que recibe é pseudocódigo, polo menos 1310 01:01:53,120 --> 01:01:54,550 poñer algo para abaixo. 1311 01:01:54,550 --> 01:02:00,070 E, a continuación, mapear este pseudocódigo para C. Se tes un cheque no seu 1312 01:02:00,070 --> 01:02:03,760 pseudocódigo, como comprobar se algo é 1, que mapea a un caso 1313 01:02:03,760 --> 01:02:05,750 estado e así por diante. 1314 01:02:05,750 --> 01:02:07,850 E, finalmente, o código do programa en C. 1315 01:02:07,850 --> 01:02:15,000 >> Entón volva para atoi e levar cinco minutos a este código nunha folla de 1316 01:02:15,000 --> 01:02:19,480 papel, que é, probablemente, sobre a cantidade de tempo que levaría a unha 1317 01:02:19,480 --> 01:02:21,260 quiz para atoi código. 1318 01:02:21,260 --> 01:02:27,060 Cinco a 15 minutos, de cinco a 12, a cinco 10 minutos, é a cantidade de 1319 01:02:27,060 --> 01:02:30,150 tempo que gastaría neste pregunta no cuestionario. 1320 01:02:30,150 --> 01:02:31,670 Entón, levar cinco minutos, por favor. 1321 01:02:31,670 --> 01:02:35,957 E se tes algunha dúbida, plantexa súa man e eu vou chegar preto. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [Conversas paralelas] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> Jason Hirschhorn: OK, entón que foi de cinco minutos. 1326 01:08:37,580 --> 01:08:39,880 Esta foi, probablemente, sobre a cantidade de tempo que gasta en que, nunha proba, 1327 01:08:39,880 --> 01:08:42,120 quizais a baixa final da época. 1328 01:08:42,120 --> 01:08:44,010 Imos recapitular un pouco. 1329 01:08:44,010 --> 01:08:45,740 Imos comezar a programar iso. 1330 01:08:45,740 --> 01:08:49,479 E se nós non temos todo o tempo, as respostas a este e este 1331 01:08:49,479 --> 01:08:54,189 cuestionario cuestión están dispoñibles, unha vez máis, Outono de 2011 é cando esta pregunta 1332 01:08:54,189 --> 01:08:54,913 apareceu no quiz. 1333 01:08:54,913 --> 01:08:57,830 >> E valeu a pena de oito puntos a continuación, o cuestionario. 1334 01:08:57,830 --> 01:09:01,140 Oito puntos é na parte alta da cantidade de puntos de algo paga a pena. 1335 01:09:01,140 --> 01:09:04,790 A maioría das preguntas están na franxa de un a seis puntos. 1336 01:09:04,790 --> 01:09:08,500 Polo tanto, esta é unha máis reto pregunta, con certeza. 1337 01:09:08,500 --> 01:09:09,750 Alguén me pode falar? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Xeralmente, o que imos querer facer con esta 1340 01:09:15,380 --> 01:09:17,550 funcionar atoi, loxicamente? 1341 01:09:17,550 --> 01:09:19,569 O que queremos facer? 1342 01:09:19,569 --> 01:09:22,279 Entón imos escribir algúns pseudocódigo. 1343 01:09:22,279 --> 01:09:24,090 >> ESTUDANTE: Converter caracteres en números enteiros. 1344 01:09:24,090 --> 01:09:26,700 >> Jason Hirschhorn: Converter caracteres en números enteiros. 1345 01:09:26,700 --> 01:09:27,479 Aceptar. 1346 01:09:27,479 --> 01:09:30,870 Entón, cantos personaxes somos nós vai ter para pasar? 1347 01:09:30,870 --> 01:09:32,295 >> ALUMNO: Todos eles. 1348 01:09:32,295 --> 01:09:34,100 >> ALUMNO: Todos os personaxes na secuencia. 1349 01:09:34,100 --> 01:09:35,540 >> Jason Hirschhorn: Todo caracteres na cadea. 1350 01:09:35,540 --> 01:09:42,180 Entón, se nós quería pasar por todos os carácter nunha cadea, o que é unha cousa 1351 01:09:42,180 --> 01:09:44,560 en C vimos que permitiu nós que pasar por todos os 1352 01:09:44,560 --> 01:09:45,939 carácter nunha cadea? 1353 01:09:45,939 --> 01:09:46,819 >> ALUMNOS: Un loop for. 1354 01:09:46,819 --> 01:09:48,069 >> Jason Hirschhorn: Un loop for. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Entón, nós estamos indo a percorrer cada personaxe en s. 1357 01:09:55,330 --> 01:10:00,940 >> Entón, o que imos querer facer cando temos un personaxe específico? 1358 01:10:00,940 --> 01:10:02,480 Digamos que se está pasou a 90. 1359 01:10:02,480 --> 01:10:03,460 Estivemos coa 9. 1360 01:10:03,460 --> 01:10:04,240 É un personaxe. 1361 01:10:04,240 --> 01:10:07,440 O que queremos facer con que o personaxe 9? 1362 01:10:07,440 --> 01:10:10,082 >> ALUMNO: restar carácter 0? 1363 01:10:10,082 --> 01:10:11,860 >> ALUMNO: Engadir 0? 1364 01:10:11,860 --> 01:10:13,350 >> Jason Hirschhorn: Restar lo do carácter 0? 1365 01:10:13,350 --> 01:10:13,800 >> ESTUDANTE: Yeah. 1366 01:10:13,800 --> 01:10:15,573 >> Jason Hirschhorn: Por que quere facer isto? 1367 01:10:15,573 --> 01:10:16,560 >> Estudante: [inaudível] 1368 01:10:16,560 --> 01:10:17,010 valor. 1369 01:10:17,010 --> 01:10:18,380 O seu valor int. 1370 01:10:18,380 --> 01:10:21,580 >> Jason Hirschhorn: OK, entón tomamos o carácter 9, subtrai-lo a partir de 1371 01:10:21,580 --> 01:10:25,820 carácter 0 para obter unha enteiro real 9. 1372 01:10:25,820 --> 01:10:27,070 Doce. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 E como vostede sabe que o personaxe 9 menos 0 personaxe é 9? 1375 01:10:37,000 --> 01:10:39,222 O gráfico que mirar? 1376 01:10:39,222 --> 01:10:43,130 >> ALUMNO: Hai nove loxicamente lugares entre 9 e 0. 1377 01:10:43,130 --> 01:10:44,620 Ou pode ollar para a táboa ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> Jason Hirschhorn: táboa ASCII. 1379 01:10:45,120 --> 01:10:46,490 Pero si, está correcto tamén. 1380 01:10:46,490 --> 01:10:47,780 Entón subtraímos 0. 1381 01:10:47,780 --> 01:10:49,010 Polo tanto, agora temos o enteiro 9. 1382 01:10:49,010 --> 01:10:49,970 E o que queremos facer con iso? 1383 01:10:49,970 --> 01:10:54,970 Se temos 90, é o primeiro número enteiro temos, o que queremos facer? 1384 01:10:54,970 --> 01:10:58,180 >> ALUMNO: Eu colocaría nun enteiro temporal matriz, a continuación, facer a matemática para el 1385 01:10:58,180 --> 01:11:02,088 máis tarde para facelo en un fin. 1386 01:11:02,088 --> 01:11:03,020 >> Jason Hirschhorn: Aceptar. 1387 01:11:03,020 --> 01:11:06,990 >> ALUMNO: Pode comezar a finais de a matriz e, a continuación, seguir adiante así 1388 01:11:06,990 --> 01:11:10,350 que cada vez que se move cara adiante, vostede multiplicala lo por 10. 1389 01:11:10,350 --> 01:11:10,830 >> Jason Hirschhorn: Aceptar. 1390 01:11:10,830 --> 01:11:12,250 Isto soa como unha fermosa idea atractivo. 1391 01:11:12,250 --> 01:11:16,040 Podemos comezar a finais da nosa matriz, e podemos utilizar strleng. 1392 01:11:16,040 --> 01:11:17,030 Podemos usar strleng aquí. 1393 01:11:17,030 --> 01:11:18,870 Imos obter a lonxitude da nosa cadea. 1394 01:11:18,870 --> 01:11:20,100 Comezamos ao final. 1395 01:11:20,100 --> 01:11:29,170 E o primeiro, só levamos iso enteiro, e quizais creamos como unha 1396 01:11:29,170 --> 01:11:32,270 nova variable enteira enriba onde estamos almacenando todo. 1397 01:11:32,270 --> 01:11:37,340 Entón, nós loop través de cada carácter en s de tras para a fronte, subtraímos 0, e 1398 01:11:37,340 --> 01:11:42,790 entón imos leva-lo, e en función da onde está, nós multiplicala lo 1399 01:11:42,790 --> 01:11:45,860 por unha potencia de 10. 1400 01:11:45,860 --> 01:11:50,644 Como o primeiro, que é o que imos multiplicar o carácter máis á dereita por? 1401 01:11:50,644 --> 01:11:51,440 >> ALUMNO: 10 ao 0. 1402 01:11:51,440 --> 01:11:53,170 >> Jason Hirschhorn: 10 a 0. 1403 01:11:53,170 --> 01:11:56,010 O que queremos multiplicar a segunda máis á dereita de carácteres por? 1404 01:11:56,010 --> 01:11:57,450 >> Estudante: [inaudível]. 1405 01:11:57,450 --> 01:11:57,960 >> Jason Hirschhorn: O que? 1406 01:11:57,960 --> 01:11:59,150 >> ALUMNO: 10 a 1. 1407 01:11:59,150 --> 01:12:00,420 >> Jason Hirschhorn: 10 para o 1. 1408 01:12:00,420 --> 01:12:03,754 O personaxe terzo máis á dereita? 1409 01:12:03,754 --> 01:12:04,580 >> ALUMNO: 10 a 2. 1410 01:12:04,580 --> 01:12:05,350 >> Jason Hirschhorn: 10 para o 2. 1411 01:12:05,350 --> 01:12:07,200 >> ESTUDANTE: Sentímolo, eu non entendo o que estamos facendo aquí. 1412 01:12:07,200 --> 01:12:08,640 >> Jason Hirschhorn: OK, Imos volver, entón. 1413 01:12:08,640 --> 01:12:12,500 Entón, nós estamos indo a obter aprobada nunha cadea. 1414 01:12:12,500 --> 01:12:14,470 Porque estamos escribindo atoi. 1415 01:12:14,470 --> 01:12:15,260 Por iso, son pasadas nunha cadea. 1416 01:12:15,260 --> 01:12:17,640 Digamos que se está pasou na secuencia de 90. 1417 01:12:17,640 --> 01:12:19,930 >> O primeiro que imos facer é definir unha nova variable enteiro que somos 1418 01:12:19,930 --> 01:12:22,150 só vai crear como o noso novo enteiro. 1419 01:12:22,150 --> 01:12:24,630 Iso é o que imos para volver ao final. 1420 01:12:24,630 --> 01:12:30,110 Necesitamos pasar por todos os personaxes a corda porque temos determinado 1421 01:12:30,110 --> 01:12:34,430 que necesitamos para tocar cada un e logo engadir lo ao noso novo enteiro. 1422 01:12:34,430 --> 01:12:36,330 >> Pero non podemos simplemente engadir lo como un número. 1423 01:12:36,330 --> 01:12:38,270 Non podemos coller e 9 engadir 9 ao noso enteiro. 1424 01:12:38,270 --> 01:12:40,560 Depende de que lugar é na cadea. 1425 01:12:40,560 --> 01:12:42,960 Nós imos ter que multiplicar el por unha potencia de 10. 1426 01:12:42,960 --> 01:12:45,580 Porque é así que 10 obras de base. 1427 01:12:45,580 --> 01:12:49,050 >> Entón, nós estamos indo a obter o real personaxe, ou o número enteiro real 1428 01:12:49,050 --> 01:12:53,860 número, por carácter 0 subtraindo de carácter 9 como fixemos con 1429 01:12:53,860 --> 01:12:57,560 subtraindo capital carácter Desde todo o que personaxe que tiña nun dos 1430 01:12:57,560 --> 01:12:58,120 estes problemas. 1431 01:12:58,120 --> 01:13:04,190 Entón, imos realmente ter un número de 0 a 9 gardados como un número real, e nós imos 1432 01:13:04,190 --> 01:13:07,590 multiplicala lo por unha potencia de 10, dependendo de onde estamos na corda. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 E entón nós imos engadir lo de volta na nosa nova variable enteira. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Entón, o que sería algo así como faría ser - imos chamar aquí. 1437 01:13:37,890 --> 01:13:40,086 Se conseguir pasar na secuencia de 90 - 1438 01:13:40,086 --> 01:13:41,336 >> Estudante: [inaudível]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> Jason Hirschhorn: Pero atoi recibe unha cadea. 1441 01:13:45,540 --> 01:13:46,350 Entón imos pasar por da explotación. 1442 01:13:46,350 --> 01:13:49,900 Imos ter pasado en 90. 1443 01:13:49,900 --> 01:13:51,540 Nós imos na parte de atrás para adiante. 1444 01:13:51,540 --> 01:13:53,920 Tomamos a 0. 1445 01:13:53,920 --> 01:13:55,080 >> ALUMNO: Eu sinto moito. 1446 01:13:55,080 --> 01:13:55,880 Quizais iso é estúpido. 1447 01:13:55,880 --> 01:13:59,440 Se estamos a ser aprobada nunha corda, por que é de 90 o que estamos 1448 01:13:59,440 --> 01:14:00,260 pasou en? 1449 01:14:00,260 --> 01:14:03,160 Porque 90 é un enteiro. 1450 01:14:03,160 --> 01:14:06,820 >> Jason Hirschhorn: Por atoi leva un cadea e transforma-lo en o enteiro 1451 01:14:06,820 --> 01:14:08,320 representación desta cadea. 1452 01:14:08,320 --> 01:14:13,650 Pero a corda 90 non é o número enteiro 90 ou o número 90. 1453 01:14:13,650 --> 01:14:17,920 A secuencia de 90 é un conxunto de dous ou tres personaxes, ao contrario, a 9 1454 01:14:17,920 --> 01:14:22,740 carácter, o personaxe 0, e a barra invertida 0 personaxe. 1455 01:14:22,740 --> 01:14:26,260 >> E nós estamos escribindo atoi porque, por exemplo, cando toma o mando 1456 01:14:26,260 --> 01:14:30,230 argumento de liña, e grávase en argv, gárdase como unha cadea. 1457 01:14:30,230 --> 01:14:32,940 Pero se quere trata-lo como un número, ten que convertelo en un 1458 01:14:32,940 --> 01:14:34,700 enteiro real. 1459 01:14:34,700 --> 01:14:37,210 Que fixemos un dos nosos conxuntos de problemas. 1460 01:14:37,210 --> 01:14:38,800 Que fixemos nun número dos nosos conxuntos de problemas. 1461 01:14:38,800 --> 01:14:41,690 Todo o mundo que tivo un número enteiro como un argumento de liña de comandos. 1462 01:14:41,690 --> 01:14:46,490 É por iso que a nosa función atoi recibe unha cadea. 1463 01:14:46,490 --> 01:14:51,910 >> Entón, de novo, no noso exemplo aquí, estamos vai tomar o último. 1464 01:14:51,910 --> 01:14:55,050 Estamos indo a restar o carácter 0 del, porque os personaxes 0 1465 01:14:55,050 --> 01:14:58,810 subtraído polo personaxe 0 dálle o número real de 0, segundo a 1466 01:14:58,810 --> 01:15:00,950 a matemática ASCII que facemos. 1467 01:15:00,950 --> 01:15:04,870 >> Como os carácteres son representados como diferente do que o real - o 1468 01:15:04,870 --> 01:15:08,830 carácter dun, por exemplo, minúsculas é un 97. 1469 01:15:08,830 --> 01:15:10,260 Non é - oops! 1470 01:15:10,260 --> 01:15:13,290 Non é o que esperar que sexa, 0, por exemplo. 1471 01:15:13,290 --> 01:15:16,200 Entón tes que restar o carácter dun para chegar a 0. 1472 01:15:16,200 --> 01:15:18,950 >> Entón, imos facelo aquí para obter o número real. 1473 01:15:18,950 --> 01:15:22,560 E entón nós estamos indo a multiplicala lo por unha potencia de 10, dependendo de onde 1474 01:15:22,560 --> 01:15:27,030 é na cadea, e despois tomar ese e engadir lo ao noso espazo reservado 1475 01:15:27,030 --> 01:15:32,520 variable, para que poidamos chegar a noso enteiro novo final. 1476 01:15:32,520 --> 01:15:35,080 Será que ten sentido para todos? 1477 01:15:35,080 --> 01:15:37,730 >> Entón, nós non estamos indo a este código agora, porque estamos 1478 01:15:37,730 --> 01:15:38,830 ficando en curto tempo. 1479 01:15:38,830 --> 01:15:40,860 Pido desculpas polo tempo do que iso. 1480 01:15:40,860 --> 01:15:44,620 Pero iso é o que, esperamos, faría ser capaz de facer o cuestionario - no 1481 01:15:44,620 --> 01:15:47,710 moito menos, obter este pseudocódigo escrito. 1482 01:15:47,710 --> 01:15:50,840 >> E entón, se fósemos escribir o pseudocódigo, en realidade, poderiamos facelo 1483 01:15:50,840 --> 01:15:51,490 moi rapidamente. 1484 01:15:51,490 --> 01:15:55,230 Cada liña de comentarios que escribimos aquí se traduce en preto de 1485 01:15:55,230 --> 01:15:56,970 unha liña de código C. 1486 01:15:56,970 --> 01:16:01,780 Declarando unha variable nova, escrita un loop, algúns resta, algúns 1487 01:16:01,780 --> 01:16:07,070 multiplicación, e algúns asignación. 1488 01:16:07,070 --> 01:16:09,020 Nós probablemente tamén queren escribir unha liña de retorno. 1489 01:16:09,020 --> 01:16:12,040 Tamén pode querer poñer algunhas comprobacións aquí. 1490 01:16:12,040 --> 01:16:12,655 É. 1491 01:16:12,655 --> 01:16:15,720 >> ALUMNO: Entón podemos tratar s como a secuencia real? 1492 01:16:15,720 --> 01:16:18,730 Porque sei que é só un enderezo. 1493 01:16:18,730 --> 01:16:22,090 Como, como obter a lonxitude de a corda que está a ser pasado a través de? 1494 01:16:22,090 --> 01:16:25,310 >> Jason Hirschhorn: Entón, como é que a lonxitude dunha corda? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> ALUMNO: strlen, si. 1497 01:16:26,660 --> 01:16:30,550 Pero pode pór s como o argumento para iso? 1498 01:16:30,550 --> 01:16:34,620 >> Jason Hirschhorn: Entón strlen leva unha estrela de char. 1499 01:16:34,620 --> 01:16:38,090 E segue-se que a estrela char, e mantén a conta ata que se chega a un 1500 01:16:38,090 --> 01:16:41,865 barra invertida 0. strlen era realmente un dos programas que 1501 01:16:41,865 --> 01:16:42,850 ían código. 1502 01:16:42,850 --> 01:16:44,560 Esta é outra boa para código. 1503 01:16:44,560 --> 01:16:47,270 Este é un pouco máis fácil, porque se vai pensar sobre iso 1504 01:16:47,270 --> 01:16:47,830 conceptualmente - 1505 01:16:47,830 --> 01:16:51,620 Eu só dixen en voz alta - strlen segue un punteiro e segue indo e 1506 01:16:51,620 --> 01:16:54,210 contar e manter o control ata chegar a unha barra invertida 0. 1507 01:16:54,210 --> 01:16:56,530 >> ALUMNO: OK, entender. 1508 01:16:56,530 --> 01:17:00,200 >> Jason Hirschhorn: Entón, o mellor de sorte na proba 0 mañá. 1509 01:17:00,200 --> 01:17:03,170 Se ten algunha dúbida, eu vou estar fóra despois desta. 1510 01:17:03,170 --> 01:17:05,610 Sinto-se a liberdade de me e-mail. 1511 01:17:05,610 --> 01:17:08,480 Estenda a man para o seu propio TF se é non na miña sección, ou buscar o meu 1512 01:17:08,480 --> 01:17:10,005 enviar correo-e, se quere. 1513 01:17:10,005 --> 01:17:13,140 >> Se queres brotes e pode enviar me un e-mail, unha mensaxe freakout, vou 1514 01:17:13,140 --> 01:17:16,710 mandar de volta, así como, un rostro sorridente, ou, tipo, unha broma ou algo así. 1515 01:17:16,710 --> 01:17:18,190 Entón, sexa a vontade para facelo tamén. 1516 01:17:18,190 --> 01:17:20,750 Boa sorte unha vez máis, e eu vou ver todos vostedes a próxima semana. 1517 01:17:20,750 --> 01:17:23,435