1 00:00:00,000 --> 00:00:02,670 >> [Música tema] 2 00:00:02,670 --> 00:00:11,834 3 00:00:11,834 --> 00:00:13,365 >> COLUNA 1: Olá, todos. 4 00:00:13,365 --> 00:00:14,365 Bem-vindo de volta à seção. 5 00:00:14,365 --> 00:00:15,700 6 00:00:15,700 --> 00:00:18,700 Belo dia out-- que é por isso, eu sou certeza, existem apenas quatro de vocês aqui 7 00:00:18,700 --> 00:00:21,180 e não o nosso pacote de costume. 8 00:00:21,180 --> 00:00:22,670 Eu tenho estado doente neste fim de semana. 9 00:00:22,670 --> 00:00:24,294 Então, eu não tenho Starburst para vocês. 10 00:00:24,294 --> 00:00:26,400 E eu posso começar a tossir terrivelmente ao longo deste. 11 00:00:26,400 --> 00:00:27,790 Então, só tenha paciência comigo. 12 00:00:27,790 --> 00:00:30,624 Vou realmente tentar e passar por isso em primeiro lugar, 13 00:00:30,624 --> 00:00:32,290 porém, antes de eu ter um ataque de tosse. 14 00:00:32,290 --> 00:00:33,410 15 00:00:33,410 --> 00:00:37,390 Mas apenas ser fácil para mim um pouco bit-- isso é tudo que eu peço. 16 00:00:37,390 --> 00:00:39,370 17 00:00:39,370 --> 00:00:44,289 >> Portanto, a nossa agenda para today-- apenas um reminder-- seu teste é na próxima semana. 18 00:00:44,289 --> 00:00:46,830 Eu disse que isso na semana passada por isso não iria pegar você desprevenido. 19 00:00:46,830 --> 00:00:47,954 Então, eu estou lembrando de novo. 20 00:00:47,954 --> 00:00:49,180 Na próxima semana o seu quiz. 21 00:00:49,180 --> 00:00:52,730 Para esse fim, próxima semana seção será muito mais 22 00:00:52,730 --> 00:00:55,180 de-- eu vou tentar e trabalhar em alguma revisão. 23 00:00:55,180 --> 00:00:58,130 Então, se vocês poderiam me ajudar enviando-me 24 00:00:58,130 --> 00:01:00,990 coisas que você está confortável com, que você está preocupado, 25 00:01:00,990 --> 00:01:03,530 temas que você gostaria de me cobrir, isso seria ótimo. 26 00:01:03,530 --> 00:01:05,740 Então, eu posso tentar trabalhá-los em nossa seção na próxima semana 27 00:01:05,740 --> 00:01:11,540 ou enviar-lhe material extra ou prep que você não pode obter em outro lugar. 28 00:01:11,540 --> 00:01:12,150 >> Yeah! 29 00:01:12,150 --> 00:01:13,520 Mais pessoas estão chegando! 30 00:01:13,520 --> 00:01:17,320 Eu pensei, eu fiz isso mal passado semana, que ninguém quer voltar? 31 00:01:17,320 --> 00:01:18,065 Estou com medo. 32 00:01:18,065 --> 00:01:18,892 33 00:01:18,892 --> 00:01:21,100 Assim, os outros três coisas que nós vamos passar por cima de 34 00:01:21,100 --> 00:01:24,850 são redirecionamento, arquivo I / O, e em seguida, ponteiros e memória dinâmica. 35 00:01:24,850 --> 00:01:29,160 Tenho certeza que você é tudo super animado sobre pointers-- tema favorito de todos, 36 00:01:29,160 --> 00:01:31,310 tão simples de entender. 37 00:01:31,310 --> 00:01:33,130 Tenho certeza que vocês todos tem isso, certo? 38 00:01:33,130 --> 00:01:39,510 >> Assim, as primeiras coisas primeiro, redirection-- este é basicamente apenas uma maneira 39 00:01:39,510 --> 00:01:42,920 para controlar como você entrada as coisas em seu programa, 40 00:01:42,920 --> 00:01:44,606 como você as coisas de saída de seu programa. 41 00:01:44,606 --> 00:01:46,980 As principais formas que vocês Foram interagir com ele 42 00:01:46,980 --> 00:01:51,650 é só por fora padrão com sua tela de impressão aqui. 43 00:01:51,650 --> 00:01:55,940 Mas existem maneiras de pipe-- como vemos aqui 44 00:01:55,940 --> 00:01:58,980 é um de nossa espécie palavras-- de tubo que a informação 45 00:01:58,980 --> 00:02:02,850 ou que os dados em um arquivo de um arquivo. 46 00:02:02,850 --> 00:02:05,820 É apenas maneiras diferentes de fazer as coisas em seu programa 47 00:02:05,820 --> 00:02:10,681 e fora de seu programa, em vez de apenas imprimi-los a esta tela 48 00:02:10,681 --> 00:02:12,430 ou introduzir coisas a partir da linha de comando. 49 00:02:12,430 --> 00:02:13,760 50 00:02:13,760 --> 00:02:18,030 >> Então, primeiro é pouco maior do acento circunflexo. 51 00:02:18,030 --> 00:02:22,085 Então output-- ele só imprime a saída para um arquivo em vez de sua tela. 52 00:02:22,085 --> 00:02:23,620 53 00:02:23,620 --> 00:02:29,500 Então, se você tinha algo que impresso "Olá, mundo!" para a tela, 54 00:02:29,500 --> 00:02:32,400 se você colocá-lo em vez para output.text, que 55 00:02:32,400 --> 00:02:35,220 cria esse arquivo chamado output.text. 56 00:02:35,220 --> 00:02:38,550 E quando você abri-lo, ele vai dizer "Olá, mundo!" lá dentro. 57 00:02:38,550 --> 00:02:41,410 Isto pode ser útil super se você tem uma tonelada de erros 58 00:02:41,410 --> 00:02:43,430 na verdade, como podemos ver em um presente. 59 00:02:43,430 --> 00:02:46,810 Se você fizer dois circunflexo, ele vai imprimir as mensagens de erro. 60 00:02:46,810 --> 00:02:52,090 >> Então, se você está tendo um problema com compilação, ele tem um monte de erros 61 00:02:52,090 --> 00:02:56,770 e você está ficando atolado na tentativa para percorrer em sua linha de comando 62 00:02:56,770 --> 00:02:59,110 através de todos eles, você pode apenas imprimi-los em um arquivo, 63 00:02:59,110 --> 00:03:02,130 abrir esse arquivo para que você pode percorrê-los mais fácil. 64 00:03:02,130 --> 00:03:05,160 Eu realmente usado que um muito quando eu estava depurando 65 00:03:05,160 --> 00:03:07,970 meus 181 Série de Exercícios para aprendizado de máquina. 66 00:03:07,970 --> 00:03:10,000 Por isso, pode ser super útil mais adiante. 67 00:03:10,000 --> 00:03:18,370 Também é útil se você tiver um programa de talvez que está a gerar uma biblioteca 68 00:03:18,370 --> 00:03:20,430 ou gerar algum conjunto de cordas, e você 69 00:03:20,430 --> 00:03:22,846 precisa de ser capaz de ver que está gerando-los corretamente. 70 00:03:22,846 --> 00:03:23,860 71 00:03:23,860 --> 00:03:25,160 Esta é a maneira de fazer isso. 72 00:03:25,160 --> 00:03:28,280 >> Então, se você imprimi-los em um arquivo, você pode mais facilmente examiná-los, certo? 73 00:03:28,280 --> 00:03:30,930 Versus tentando deslocar através de sua linha de comando. 74 00:03:30,930 --> 00:03:32,740 75 00:03:32,740 --> 00:03:35,820 E então uma coisa a notar é que, com apenas o maior 76 00:03:35,820 --> 00:03:40,090 do acento circunflexo, se você está escrevendo para um arquivo que já exists-- 77 00:03:40,090 --> 00:03:44,990 assim como se nós corremos este o primeiro tempo, colocá-lo para output.text, 78 00:03:44,990 --> 00:03:49,970 e depois tivemos um segundo programa que imprimiu isso como programa de dois 79 00:03:49,970 --> 00:03:54,250 e fez um maior do que a output.text, ele substituirá isso-- assim 80 00:03:54,250 --> 00:03:56,715 substituir o que foi sempre em esse arquivo para começar. 81 00:03:56,715 --> 00:03:57,720 82 00:03:57,720 --> 00:04:00,750 >> Então, se você deseja anexar em um arquivo, como vemos aqui, 83 00:04:00,750 --> 00:04:04,779 você acabou de fazer dois sinais de maior que. 84 00:04:04,779 --> 00:04:05,820 E vai anexar a ele. 85 00:04:05,820 --> 00:04:06,750 Não vai substituí-lo. 86 00:04:06,750 --> 00:04:09,770 Então, se você precisa executar múltiplos programas e tipo de manter 87 00:04:09,770 --> 00:04:13,170 a par do que todos eles são retornando para você em um arquivo, 88 00:04:13,170 --> 00:04:14,190 isso é uma maneira de fazê-lo. 89 00:04:14,190 --> 00:04:17,231 Se você não se importa o que está em seu arquivo e é permitido para ser substituído, 90 00:04:17,231 --> 00:04:19,204 você pode apenas usar um único maior do que. 91 00:04:19,204 --> 00:04:20,600 Isso faz sentido para todos? 92 00:04:20,600 --> 00:04:23,205 93 00:04:23,205 --> 00:04:31,140 >> AUDIÊNCIA: Como ponto barra Olá maior de texto de saída do ponto, como duas vezes, 94 00:04:31,140 --> 00:04:34,030 ele só vai mostrar apenas na saída texto dot um segundo tempo-- 95 00:04:34,030 --> 00:04:34,810 >> COLUNA 1: Certo. 96 00:04:34,810 --> 00:04:40,450 Por isso, seria basicamente apenas completamente substituir o que estava lá para começar. 97 00:04:40,450 --> 00:04:44,260 Se este arquivo aqui, o output.text já 98 00:04:44,260 --> 00:04:48,230 existe, basicamente, o que você chamá que novamente com um único maior 99 00:04:48,230 --> 00:04:51,920 que você pode apenas pensar nisso como como ele substituiu o arquivo. 100 00:04:51,920 --> 00:04:54,824 Como quando você está salvando uma Palavra documento e você salvar como, 101 00:04:54,824 --> 00:04:57,365 e você manter o mesmo nome, e ele substitui completamente ele-- 102 00:04:57,365 --> 00:04:58,680 este é o mesmo tipo de coisa. 103 00:04:58,680 --> 00:05:00,380 104 00:05:00,380 --> 00:05:03,550 Alguém tem alguma dúvida sobre apenas a saída para um arquivo? 105 00:05:03,550 --> 00:05:05,051 106 00:05:05,051 --> 00:05:05,550 Impressionante. 107 00:05:05,550 --> 00:05:11,440 >> Então, obviamente, se você inverter a arrow direção, ele pode fazer de entrada. 108 00:05:11,440 --> 00:05:13,090 109 00:05:13,090 --> 00:05:19,960 Então, quando vocês tinham como César ou Visioneer 110 00:05:19,960 --> 00:05:23,195 e você tinha que entrada de alguma coisa, você tinha um argumento de linha de comando 111 00:05:23,195 --> 00:05:24,960 que, na verdade, introduzi-la. 112 00:05:24,960 --> 00:05:27,410 Esta é uma outra maneira de fazer isso. 113 00:05:27,410 --> 00:05:30,520 Então, em vez de esperar para um prompt de comando, 114 00:05:30,520 --> 00:05:33,800 como quando você pediu para o seu mensagem em César ou Visioneer, 115 00:05:33,800 --> 00:05:36,490 se você tivesse um arquivo de texto que teve a sua mensagem, 116 00:05:36,490 --> 00:05:38,280 você pode simplesmente digitá-lo para isso. 117 00:05:38,280 --> 00:05:44,930 >> Então, se isso fosse como ponto barra César 3 menos do que o texto de entrada flecha, que 118 00:05:44,930 --> 00:05:47,240 é a sua mensagem, que iria correr bem. 119 00:05:47,240 --> 00:05:51,310 120 00:05:51,310 --> 00:05:54,020 Quando seu programa César realmente pediu a entrada do usuário, 121 00:05:54,020 --> 00:05:57,360 ele já teria porque você digitou neste arquivo. 122 00:05:57,360 --> 00:05:58,830 Isso é apenas uma outra maneira. 123 00:05:58,830 --> 00:06:02,445 Apenas um reverso da output-- Apenas a entrada para seus dados. 124 00:06:02,445 --> 00:06:04,570 125 00:06:04,570 --> 00:06:06,680 >> E, em seguida, o último é um tubo. 126 00:06:06,680 --> 00:06:07,780 Então, de um presente muito legal. 127 00:06:07,780 --> 00:06:09,890 Porque ele permite que você levar a saída de um 128 00:06:09,890 --> 00:06:13,695 programa e colocá-lo como de entrada para outro programa. 129 00:06:13,695 --> 00:06:15,250 130 00:06:15,250 --> 00:06:18,630 Eu não sei se algum de vocês jogado com o decifração 131 00:06:18,630 --> 00:06:20,590 CS50 que pode ter deu, mas seria 132 00:06:20,590 --> 00:06:27,380 permitir que você tome alguma amostra arquivo, digite-o em sua criptografia, 133 00:06:27,380 --> 00:06:30,350 e, em seguida, a partir daí tipo que em sua descriptografia 134 00:06:30,350 --> 00:06:32,470 para se certificar de que acabou o mesmo. 135 00:06:32,470 --> 00:06:34,050 Então, é tipo como laço de três vias. 136 00:06:34,050 --> 00:06:38,400 137 00:06:38,400 --> 00:06:39,423 Vá em frente. 138 00:06:39,423 --> 00:06:41,785 >> AUDIÊNCIA: Se um programa tem múltiplas entradas, 139 00:06:41,785 --> 00:06:47,646 há uma maneira de contá-la que entrada usar o arquivo de texto ou a saída para? 140 00:06:47,646 --> 00:06:49,325 >> COLUNA 1: Ele tem várias entradas. 141 00:06:49,325 --> 00:06:52,190 142 00:06:52,190 --> 00:07:00,430 Seja qual for o seu arquivo input-- quando é pedindo entrada que pela primeira vez, é 143 00:07:00,430 --> 00:07:03,240 vai assumir, eu acho, é vai tubo em todo o arquivo. 144 00:07:03,240 --> 00:07:03,979 145 00:07:03,979 --> 00:07:07,145 Então se você tem várias entradas, você está vai ser tubulação em vários arquivos. 146 00:07:07,145 --> 00:07:08,190 147 00:07:08,190 --> 00:07:12,390 Então, se você está pedindo mensagens três vezes em seu código, 148 00:07:12,390 --> 00:07:15,230 você vai estar colocando em três ficheiros diferentes. 149 00:07:15,230 --> 00:07:15,980 E ele fica louco. 150 00:07:15,980 --> 00:07:18,188 E você não deve ter que se preocupar com isso agora. 151 00:07:18,188 --> 00:07:19,150 Mas essa é a idéia. 152 00:07:19,150 --> 00:07:20,680 153 00:07:20,680 --> 00:07:26,822 >> Então, sim, a tubulação é apenas saída de um programa utiliza a entrada para a outra. 154 00:07:26,822 --> 00:07:27,665 Todos bom lá? 155 00:07:27,665 --> 00:07:28,565 156 00:07:28,565 --> 00:07:29,065 Legal. 157 00:07:29,065 --> 00:07:30,170 158 00:07:30,170 --> 00:07:30,932 Está bem. 159 00:07:30,932 --> 00:07:32,890 Você provavelmente não terá fazer muito com ele. 160 00:07:32,890 --> 00:07:35,670 Mas você deve entender maneiras que você pode usar isso. 161 00:07:35,670 --> 00:07:38,910 E existem alguns casos em que você pode querer usá-lo. 162 00:07:38,910 --> 00:07:44,590 >> Então arquivo I / O- Eu sei o que você está dizendo-- que estamos acostumados a ler a partir de 163 00:07:44,590 --> 00:07:50,500 e escrever a nossa tela de lá, que é padrão e padrão para fora. 164 00:07:50,500 --> 00:07:54,370 E isso é o que vocês têm sido fazendo desde o início da aula aqui. 165 00:07:54,370 --> 00:07:58,220 Mas você também pode ler e gravar arquivos, que é tudo o arquivo I / O- assim arquivo de entrada, 166 00:07:58,220 --> 00:07:59,850 saída é tudo que ele representa. 167 00:07:59,850 --> 00:08:00,930 168 00:08:00,930 --> 00:08:04,360 Então isso significa, basicamente, que você pode armazenar seus dados agora. 169 00:08:04,360 --> 00:08:08,460 >> Quando você apenas imprimi-lo para o tela, é basicamente ido embora, certo? 170 00:08:08,460 --> 00:08:12,507 Assim que você faz "Olá mundo "e executar" Olá, mundo " 171 00:08:12,507 --> 00:08:14,090 ele imprime "Olá, mundo" para a tela. 172 00:08:14,090 --> 00:08:16,370 Mas você realmente não pode fazer nada com ele de lá. 173 00:08:16,370 --> 00:08:18,950 Se você armazenar em um texto arquivo, em seguida, de repente 174 00:08:18,950 --> 00:08:22,789 você tem esses dados que você está autorizado manipular ou colocá-lo em um arquivo, 175 00:08:22,789 --> 00:08:24,080 ou colocá-lo em um programa mais tarde. 176 00:08:24,080 --> 00:08:26,370 177 00:08:26,370 --> 00:08:29,290 Uma das razões por que fazemos isso é apenas 178 00:08:29,290 --> 00:08:31,560 como uma maneira de armazenar os dados para utilização posterior. 179 00:08:31,560 --> 00:08:34,790 180 00:08:34,790 --> 00:08:37,279 >> Eu tenho um par de passos aqui apenas andando por padrão 181 00:08:37,279 --> 00:08:39,450 I / O. Na etapa um, você precisa criar uma referência 182 00:08:39,450 --> 00:08:43,480 para o arquivo com todos tampas de arquivo Arquivo estrela. 183 00:08:43,480 --> 00:08:45,740 Assim que cria um apontador para um ficheiro. 184 00:08:45,740 --> 00:08:48,080 185 00:08:48,080 --> 00:08:49,650 Então você deseja abri-lo. 186 00:08:49,650 --> 00:08:52,940 E você diz, literalmente, apenas arquivo é igual a fopen. 187 00:08:52,940 --> 00:08:57,400 E isso vai voltar a Ponteiro para o arquivo que você acabou de abrir. 188 00:08:57,400 --> 00:08:59,610 189 00:08:59,610 --> 00:09:01,460 Eu vi um par de você caras no horário de expediente. 190 00:09:01,460 --> 00:09:07,400 >> Mas uma das coisas é ponteiros recorde-- 191 00:09:07,400 --> 00:09:10,409 pode ser algum endereço ou nulo, certo? 192 00:09:10,409 --> 00:09:12,700 Se alguma vez ter um caso em que algo pode retornar nulo, 193 00:09:12,700 --> 00:09:14,990 o que temos que fazer antes de nós nunca usá-lo? 194 00:09:14,990 --> 00:09:16,220 195 00:09:16,220 --> 00:09:19,000 Precisamos verificar se é nulo ou não, certo? 196 00:09:19,000 --> 00:09:23,600 Porque alguns de vocês podem ter tido o problema em que qualquer objeto 197 00:09:23,600 --> 00:09:26,110 estava sendo devolvido em fuga foi nula. 198 00:09:26,110 --> 00:09:28,170 Você tentou executar alguma função nele. 199 00:09:28,170 --> 00:09:29,770 E o seu site computador falha. 200 00:09:29,770 --> 00:09:30,725 Certo? 201 00:09:30,725 --> 00:09:33,640 Aposto que um par de você pode ter tido esse problema. 202 00:09:33,640 --> 00:09:38,890 >> Assim, com fopen, fopen vão quer retornar um ponteiro para o arquivo, 203 00:09:38,890 --> 00:09:41,200 ou se algo der errado, ele vai retornar nulo. 204 00:09:41,200 --> 00:09:45,980 Assim, você sempre precisa verificar que não tenha retornado nulo 205 00:09:45,980 --> 00:09:47,880 antes de tentar fazer qualquer outra coisa. 206 00:09:47,880 --> 00:09:49,110 207 00:09:49,110 --> 00:09:51,974 Isto é como um paradigma padrão que você vai precisar aqui. 208 00:09:51,974 --> 00:09:54,390 Se há sempre uma chance de que algo poderia retornar nulo, 209 00:09:54,390 --> 00:09:56,590 certifique-se de que não antes de prosseguir. 210 00:09:56,590 --> 00:09:58,911 Caso contrário, você vai para obter falhas local lindo. 211 00:09:58,911 --> 00:10:00,410 E ninguém gosta de lidar com aqueles. 212 00:10:00,410 --> 00:10:03,180 213 00:10:03,180 --> 00:10:06,410 >> Assim como vemos aqui, o primeiro argumento é apenas o caminho para o arquivo. 214 00:10:06,410 --> 00:10:09,380 Se esse arquivo não existir, que vai criar esse arquivo. 215 00:10:09,380 --> 00:10:10,713 E isso só vai ficar em branco. 216 00:10:10,713 --> 00:10:10,789 217 00:10:10,789 --> 00:10:13,080 E, em seguida, o segundo argumento é o modo que você deseja. 218 00:10:13,080 --> 00:10:14,610 Não queremos ler a partir deste arquivo? 219 00:10:14,610 --> 00:10:15,560 Você quer escrever a partir dele? 220 00:10:15,560 --> 00:10:16,476 Você quer acrescentar? 221 00:10:16,476 --> 00:10:17,600 222 00:10:17,600 --> 00:10:20,670 Então, na verdade o que acabei de disse- se o arquivo não existe 223 00:10:20,670 --> 00:10:23,400 e você está tentando ler ele, que vai lançar um erro. 224 00:10:23,400 --> 00:10:26,890 Se o arquivo nome-- gostar se não file.text não existe ainda 225 00:10:26,890 --> 00:10:29,250 e você quer escrever para ele, ele criará 226 00:10:29,250 --> 00:10:33,110 um arquivo em branco chamado file.text para você. 227 00:10:33,110 --> 00:10:36,612 E se você deseja anexar, você deve fazer a mesma coisa. 228 00:10:36,612 --> 00:10:38,081 Será que isso faz sentido? 229 00:10:38,081 --> 00:10:40,580 Se você está tentando ler um arquivo que ainda não existe, 230 00:10:40,580 --> 00:10:41,590 ele vai lançar um erro. 231 00:10:41,590 --> 00:10:44,340 Caso contrário, ele irá criar o arquivo para você fazer o que quiser com ele. 232 00:10:44,340 --> 00:10:45,970 233 00:10:45,970 --> 00:10:46,470 Legal. 234 00:10:46,470 --> 00:10:47,510 235 00:10:47,510 --> 00:10:48,880 Agora podemos ler a partir do arquivo. 236 00:10:48,880 --> 00:10:52,570 E esta é apenas uma espécie de ir através dos diferentes funções 237 00:10:52,570 --> 00:10:58,980 que temos de arquivo I / O. Esta vontade ser necessária em pset desta semana, 238 00:10:58,980 --> 00:11:00,505 se bem me lembro. 239 00:11:00,505 --> 00:11:02,880 Sim, é absolutamente será necessário pset desta semana. 240 00:11:02,880 --> 00:11:04,260 241 00:11:04,260 --> 00:11:07,010 Então fgetc retorna o próximo caractere. 242 00:11:07,010 --> 00:11:08,350 243 00:11:08,350 --> 00:11:10,300 fgets retorna apenas uma linha de texto. 244 00:11:10,300 --> 00:11:11,790 245 00:11:11,790 --> 00:11:14,610 Ele irá retornar qualquer coisa até uma nova linha, e ele vai quebrar. 246 00:11:14,610 --> 00:11:15,950 247 00:11:15,950 --> 00:11:18,700 Assim fread lê um certo número de bytes e os coloca 248 00:11:18,700 --> 00:11:20,700 em uma matriz, que é algo que você pode 249 00:11:20,700 --> 00:11:25,485 quer fazer com re-size-- pode ser útil. 250 00:11:25,485 --> 00:11:26,550 251 00:11:26,550 --> 00:11:29,290 >> Quantas pessoas têm lido a especificação pset, pelo caminho? 252 00:11:29,290 --> 00:11:30,980 253 00:11:30,980 --> 00:11:32,261 Está bem. 254 00:11:32,261 --> 00:11:32,760 [Inaudível] 255 00:11:32,760 --> 00:11:35,380 256 00:11:35,380 --> 00:11:36,580 >> COLUNA 1: OK. 257 00:11:36,580 --> 00:11:37,530 Tudo certo. 258 00:11:37,530 --> 00:11:41,940 Definitivamente ler isso-- é um pset divertido. 259 00:11:41,940 --> 00:11:51,320 Você começa a recuperar a memória excluídos card-- realmente emocionante quando ele funciona. 260 00:11:51,320 --> 00:11:54,100 Mas, definitivamente, começar a ler isso. 261 00:11:54,100 --> 00:11:56,280 Venha falar comigo, se você tiver dúvidas sobre isso. 262 00:11:56,280 --> 00:11:59,290 >> OK, então como eu estava dizendo, fread lê um certo número de bytes. 263 00:11:59,290 --> 00:12:01,340 264 00:12:01,340 --> 00:12:03,590 Isso é um número arbitrário que você está indo para definir. 265 00:12:03,590 --> 00:12:05,990 266 00:12:05,990 --> 00:12:08,260 E então fseek apenas movimentos para uma determinada posição. 267 00:12:08,260 --> 00:12:11,150 Então, talvez você não se importa sobre os próximos 10 bytes. 268 00:12:11,150 --> 00:12:12,880 Você só quer pular. 269 00:12:12,880 --> 00:12:14,030 Você não se importa com aqueles. 270 00:12:14,030 --> 00:12:16,280 Você quer ler byte a partir de 11. 271 00:12:16,280 --> 00:12:18,252 fseek permite que você faça isso. 272 00:12:18,252 --> 00:12:20,710 Então, ele permite que você seja seletivo sobre o que você está lendo. 273 00:12:20,710 --> 00:12:25,880 Porque fgetc, fgets e fread leitura a partir de um determinado lugar no arquivo. 274 00:12:25,880 --> 00:12:27,260 275 00:12:27,260 --> 00:12:35,090 >> Uma maneira de pensar sobre isso é se esta é o nosso arquivo, quando você abri-lo, 276 00:12:35,090 --> 00:12:41,140 você tem essa posição no arquivo que começa no início. 277 00:12:41,140 --> 00:12:45,040 Sempre que você chamar fgetc, fgetf, ou fread, 278 00:12:45,040 --> 00:12:48,875 ele vai começar a partir de este marcador de posição. 279 00:12:48,875 --> 00:12:51,340 280 00:12:51,340 --> 00:12:55,245 Vamos dizer que você só quer ler este pedaço de memória aqui. 281 00:12:55,245 --> 00:12:56,300 282 00:12:56,300 --> 00:12:57,960 Você não pode simplesmente ligar. 283 00:12:57,960 --> 00:13:02,430 Você tem que procurar por aqui e, em seguida, ler a partir daí 284 00:13:02,430 --> 00:13:06,540 ou ler, fica, ou getc, dependendo do que você quer. 285 00:13:06,540 --> 00:13:09,310 Então procure apenas permite que você pular partes da memória. 286 00:13:09,310 --> 00:13:11,590 E essa é a única forma, você pode pular as coisas 287 00:13:11,590 --> 00:13:14,012 sem lê-los em seu buffer. 288 00:13:14,012 --> 00:13:15,470 Isso faz sentido para todos? 289 00:13:15,470 --> 00:13:21,110 290 00:13:21,110 --> 00:13:24,780 >> Obviamente, há uma monte de aqui- paralelo 291 00:13:24,780 --> 00:13:27,780 nosso redirecionamento de saída ou de entrada, você ler e escrever. 292 00:13:27,780 --> 00:13:31,800 Então fputc apenas escreve um caracteres para o arquivo. 293 00:13:31,800 --> 00:13:33,655 fputs escreve uma linha. 294 00:13:33,655 --> 00:13:35,030 295 00:13:35,030 --> 00:13:37,420 Fprintf imprime uma saída formatada. 296 00:13:37,420 --> 00:13:41,190 Então se você tem abas, ou espaço, ou outros enfeites. 297 00:13:41,190 --> 00:13:44,180 E então fwrite escreve alguns matriz de bytes em um arquivo. 298 00:13:44,180 --> 00:13:48,860 Portanto, este é o mesmo caminho fwrite e fread são análogas 299 00:13:48,860 --> 00:13:57,550 fgets opposites--, fputs, e em seguida, os lotes fputc e fgetc-- 300 00:13:57,550 --> 00:14:00,710 de loucos, coisas rápidas. 301 00:14:00,710 --> 00:14:05,300 >> Apenas uma espécie de manter este handy-- você vai ter momentos diferentes 302 00:14:05,300 --> 00:14:08,680 onde talvez você só quer um carácter de cada vez. 303 00:14:08,680 --> 00:14:09,890 Talvez você quer uma linha inteira. 304 00:14:09,890 --> 00:14:14,320 Com seu pset-- dicionário que é em dois Série de Exercícios, 305 00:14:14,320 --> 00:14:19,690 Eu acredito, nós damos-lhe um todo dicionário em formato de texto 306 00:14:19,690 --> 00:14:22,252 que tem cada palavra separados por uma linha. 307 00:14:22,252 --> 00:14:24,210 Então, se você queria ler em uma palavra de cada vez, 308 00:14:24,210 --> 00:14:31,769 o que você pode usar se você estiver lendo e eles estão todos separados em novas linhas, 309 00:14:31,769 --> 00:14:33,310 e você só quer uma palavra de cada vez? 310 00:14:33,310 --> 00:14:35,320 311 00:14:35,320 --> 00:14:36,040 >> Audiência: fgets 312 00:14:36,040 --> 00:14:36,748 >> COLUNA 1: Certo. 313 00:14:36,748 --> 00:14:39,960 Fgets-- porque que retorna o que está em uma linha. 314 00:14:39,960 --> 00:14:42,750 E, se cada palavra é sua própria linha, podemos usar fgets. 315 00:14:42,750 --> 00:14:44,511 316 00:14:44,511 --> 00:14:45,010 Legal. 317 00:14:45,010 --> 00:14:47,290 Isso faz sentido, todos? 318 00:14:47,290 --> 00:14:48,020 Legal? 319 00:14:48,020 --> 00:14:50,020 Sim, nós estamos indo para chegar a a parte divertida com ponteiros 320 00:14:50,020 --> 00:14:51,728 muito em breve, onde você começa a fazer um pouco de matemática. 321 00:14:51,728 --> 00:14:52,776 E vai ser ótimo. 322 00:14:52,776 --> 00:14:55,690 323 00:14:55,690 --> 00:14:57,740 >> Última step-- fechar seu arquivo. 324 00:14:57,740 --> 00:15:01,090 Com tantas coisas aqui, um dos nossos paradigmas 325 00:15:01,090 --> 00:15:03,550 é se ele pode retornar null, verifique se nulo. 326 00:15:03,550 --> 00:15:06,160 Se você abrir algo, é melhor fechá-lo. 327 00:15:06,160 --> 00:15:10,419 OK, então você não está feito até que você esteja feito a menos que você já fechou. 328 00:15:10,419 --> 00:15:12,585 Tipo de como não acabou até que a senhora gorda canta. 329 00:15:12,585 --> 00:15:14,130 Isso é como fechar seu arquivo. 330 00:15:14,130 --> 00:15:16,860 331 00:15:16,860 --> 00:15:19,190 Como se diz aqui, apenas para reiterar, sempre 332 00:15:19,190 --> 00:15:21,750 abrir o seu arquivo antes de você lendo ou escrevendo para ele. 333 00:15:21,750 --> 00:15:24,450 E sempre fechá-lo se você já abriu. 334 00:15:24,450 --> 00:15:25,460 Tudo certo? 335 00:15:25,460 --> 00:15:25,960 Legal. 336 00:15:25,960 --> 00:15:26,835 >> Então aqui está um exemplo. 337 00:15:26,835 --> 00:15:29,250 338 00:15:29,250 --> 00:15:34,330 Então tiny-- Eu não sei se você vocês podem ver isso muito bem. 339 00:15:34,330 --> 00:15:36,805 Se pudéssemos aumentar o brilho de alguma forma. 340 00:15:36,805 --> 00:15:40,430 341 00:15:40,430 --> 00:15:45,030 Deixe-me realmente fazer isso se eu puder. 342 00:15:45,030 --> 00:15:48,020 343 00:15:48,020 --> 00:15:51,470 OK, vocês não podem realmente ver que em tudo, não é? 344 00:15:51,470 --> 00:15:52,905 OK, vamos fazer isso, então. 345 00:15:52,905 --> 00:16:35,094 346 00:16:35,094 --> 00:16:35,594 [Inaudível] 347 00:16:35,594 --> 00:16:56,670 348 00:16:56,670 --> 00:16:58,605 >> Suponho que isso é muito melhor para ver. 349 00:16:58,605 --> 00:17:17,330 350 00:17:17,330 --> 00:17:19,455 Qualquer pessoa pode ver onde a minha rato foi é a pergunta? 351 00:17:19,455 --> 00:17:22,837 Ah, lá é-- que se esforça! 352 00:17:22,837 --> 00:17:48,910 353 00:17:48,910 --> 00:17:49,520 >> Está bem. 354 00:17:49,520 --> 00:17:53,845 Basicamente, vocês devem ter tipo de uma idéia do que isso está fazendo. 355 00:17:53,845 --> 00:17:56,740 356 00:17:56,740 --> 00:17:57,600 Não é perfeito. 357 00:17:57,600 --> 00:17:58,851 358 00:17:58,851 --> 00:18:02,425 Mas eu prefiro explicar isso do que gastar mais tempo tentando formatá-lo corretamente. 359 00:18:02,425 --> 00:18:03,610 360 00:18:03,610 --> 00:18:07,280 Basicamente, como você vê aqui, começamos com o arquivo aberto. 361 00:18:07,280 --> 00:18:09,620 E nós temos alguns arquivo de banco de dados que estamos 362 00:18:09,620 --> 00:18:12,300 abertura que diz que é os nossos alunos. 363 00:18:12,300 --> 00:18:14,020 E nós estamos indo para escrever para ele. 364 00:18:14,020 --> 00:18:15,060 365 00:18:15,060 --> 00:18:17,720 Então, é claro, retornar nulo. 366 00:18:17,720 --> 00:18:19,650 Então, temos que verificar a nulidade. 367 00:18:19,650 --> 00:18:22,930 E então, se não é null, nós atravessamos. 368 00:18:22,930 --> 00:18:25,660 E como você pode ver, estamos looping por aqui. 369 00:18:25,660 --> 00:18:26,960 Há alunos. 370 00:18:26,960 --> 00:18:30,520 Estudantes de hash é definida como três. 371 00:18:30,520 --> 00:18:34,060 E o que estamos fazendo é que estamos impressão para o arquivo, certo? 372 00:18:34,060 --> 00:18:36,975 Então o que estamos imprimindo ao nosso arquivo? 373 00:18:36,975 --> 00:18:47,040 374 00:18:47,040 --> 00:18:48,906 >> AUDIÊNCIA: As pontuações que estão na matriz? 375 00:18:48,906 --> 00:18:49,680 >> COLUNA 1: Sim. 376 00:18:49,680 --> 00:18:50,980 As pontuações que estão em o array-- exatamente. 377 00:18:50,980 --> 00:18:53,050 Então estamos abrindo este arquivo de banco de dados, que 378 00:18:53,050 --> 00:18:56,040 Eu suponho que é algum tipo de banco de dados de notas. 379 00:18:56,040 --> 00:19:01,100 E nós estamos apenas imprimir o escores de cada aluno para esse arquivo. 380 00:19:01,100 --> 00:19:02,140 Legal? 381 00:19:02,140 --> 00:19:02,640 Boa. 382 00:19:02,640 --> 00:19:03,811 383 00:19:03,811 --> 00:19:04,310 Impressionante. 384 00:19:04,310 --> 00:19:05,100 Está bem. 385 00:19:05,100 --> 00:19:06,950 Vamos voltar a-- 386 00:19:06,950 --> 00:19:08,646 >> AUDIÊNCIA: Eu tenho uma pergunta rápida. 387 00:19:08,646 --> 00:19:11,570 É o printf não no loop? 388 00:19:11,570 --> 00:19:12,870 Isso é apenas no caso loop? 389 00:19:12,870 --> 00:19:14,370 COLUNA 1: Não, é no loop for. 390 00:19:14,370 --> 00:19:16,150 391 00:19:16,150 --> 00:19:18,810 Eu não consigo ver o meu mouse muito bem até aqui. 392 00:19:18,810 --> 00:19:21,359 Então, eu estou lutando para formato que adequadamente. 393 00:19:21,359 --> 00:19:22,525 Este suporte deve ser ido. 394 00:19:22,525 --> 00:19:23,610 395 00:19:23,610 --> 00:19:25,130 Deve ser por aqui. 396 00:19:25,130 --> 00:19:26,605 Isto é o que está em seu loop. 397 00:19:26,605 --> 00:20:10,680 398 00:20:10,680 --> 00:20:11,180 Lá. 399 00:20:11,180 --> 00:20:12,160 Agora é bonita. 400 00:20:12,160 --> 00:20:16,720 Então é assim que ele deve ser-- exceto para a última faixa que eu demiti. 401 00:20:16,720 --> 00:20:17,220 Está bem. 402 00:20:17,220 --> 00:20:19,491 Isso faz sentido para todos? 403 00:20:19,491 --> 00:20:19,990 Está bem. 404 00:20:19,990 --> 00:20:23,750 Nós vamos seguir em frente para a próxima coisa entăo-- 405 00:20:23,750 --> 00:20:26,180 que, na verdade, você está indo a necessidade de ver o código. 406 00:20:26,180 --> 00:20:28,370 Então, eu estou indo só para cópia que mais agora. 407 00:20:28,370 --> 00:20:31,500 408 00:20:31,500 --> 00:20:32,000 Está bem. 409 00:20:32,000 --> 00:20:35,110 Então eu vou mostrar para vocês este código. 410 00:20:35,110 --> 00:20:38,240 E eu quero que você tente e figura o que é suposto fazer. 411 00:20:38,240 --> 00:20:49,740 412 00:20:49,740 --> 00:20:52,480 >> Assim, dado isso-- levar um minuto ou assim. 413 00:20:52,480 --> 00:20:54,440 Tentar descobrir o que está acontecendo aqui. 414 00:20:54,440 --> 00:21:58,840 415 00:21:58,840 --> 00:21:59,570 >> Qualquer idéias? 416 00:21:59,570 --> 00:22:08,180 417 00:22:08,180 --> 00:22:12,470 >> Nós sabemos que temos pelo menos dois argumentos na linha de comando, certo? 418 00:22:12,470 --> 00:22:16,270 Eu assumo um dos quais vai ser que [inaudível] do nosso programa é 419 00:22:16,270 --> 00:22:17,530 e então algo mais. 420 00:22:17,530 --> 00:22:19,980 Porque se [inaudível] é menos de dois, nós gritar com eles. 421 00:22:19,980 --> 00:22:21,140 Certo? 422 00:22:21,140 --> 00:22:25,300 E a partir do uso, parece que que vai haver algum tipo de arquivo. 423 00:22:25,300 --> 00:22:26,260 Estamos todos de acordo com isso? 424 00:22:26,260 --> 00:22:29,110 425 00:22:29,110 --> 00:22:31,570 Então, agora, o que é o laço está fazendo? 426 00:22:31,570 --> 00:22:32,570 O que vai passar? 427 00:22:32,570 --> 00:22:35,000 428 00:22:35,000 --> 00:22:36,449 >> AUDIÊNCIA: Todos os arquivos. 429 00:22:36,449 --> 00:22:37,240 COLUNA 1: Exatamente. 430 00:22:37,240 --> 00:22:39,650 Ele está passando por toda a arquivos que temos de entrada lá. 431 00:22:39,650 --> 00:22:40,720 432 00:22:40,720 --> 00:22:46,040 Assim, para cada arquivo, é abrindo alguma corda lá. 433 00:22:46,040 --> 00:22:47,560 É abrir esse arquivo. 434 00:22:47,560 --> 00:22:48,060 Certo? 435 00:22:48,060 --> 00:22:49,140 436 00:22:49,140 --> 00:22:52,380 E é a leitura do mesmo. 437 00:22:52,380 --> 00:22:53,420 438 00:22:53,420 --> 00:22:55,540 É claro que, se verificar se é nulo. 439 00:22:55,540 --> 00:22:57,220 E então ele está imprimindo. 440 00:22:57,220 --> 00:23:01,460 Se é nula, é só nos dizer que isso não é um arquivo que existe. 441 00:23:01,460 --> 00:23:04,290 Porque lembre-se, com leia nosso arquivo tem que existir. 442 00:23:04,290 --> 00:23:04,810 Certo? 443 00:23:04,810 --> 00:23:06,870 Com gravação e de acréscimo, você pode ir longe com ele. 444 00:23:06,870 --> 00:23:08,970 Mas, com leitura, o nosso arquivo tem que existir. 445 00:23:08,970 --> 00:23:10,430 446 00:23:10,430 --> 00:23:13,330 >> E então, se ela existe, o que estamos fazendo aqui? 447 00:23:13,330 --> 00:23:14,810 448 00:23:14,810 --> 00:23:15,780 Vamos começar aqui. 449 00:23:15,780 --> 00:23:18,815 O que é isso fazer-- este primeiro caractere. 450 00:23:18,815 --> 00:23:20,960 451 00:23:20,960 --> 00:23:21,790 O que ele faz? 452 00:23:21,790 --> 00:23:24,100 Ele recebe um personagem, certo? 453 00:23:24,100 --> 00:23:25,400 Então o que é esta fazendo? 454 00:23:25,400 --> 00:23:26,775 Está ficando o primeiro caractere. 455 00:23:26,775 --> 00:23:28,860 456 00:23:28,860 --> 00:23:30,200 Alguém sabe EOF? 457 00:23:30,200 --> 00:23:31,170 >> AUDIÊNCIA: Fim do arquivo? 458 00:23:31,170 --> 00:23:32,680 >> COLUNA 1: Fim da file-- exatamente. 459 00:23:32,680 --> 00:23:35,310 Então, ele vai passar por o arquivo inteiro, certo? 460 00:23:35,310 --> 00:23:36,710 461 00:23:36,710 --> 00:23:40,780 E então ele vai atualizar por ficando cada personagem subseqüente. 462 00:23:40,780 --> 00:23:41,565 Certo? 463 00:23:41,565 --> 00:23:43,636 E o que ele está fazendo? 464 00:23:43,636 --> 00:23:44,760 AUDIÊNCIA: Colocar que em-- 465 00:23:44,760 --> 00:23:46,741 466 00:23:46,741 --> 00:23:49,170 >> COLUNA 1: impressões putchar para seu protetor de tela. 467 00:23:49,170 --> 00:23:50,867 468 00:23:50,867 --> 00:23:51,950 [Inaudível] o personagem. 469 00:23:51,950 --> 00:23:54,300 E então, quando ele [inaudível] Isto irá fechar o arquivo. 470 00:23:54,300 --> 00:23:57,370 >> AUDIÊNCIA: Você não precisa de um [? mais? ?] 471 00:23:57,370 --> 00:23:59,005 >> COLUNA 1: Não necessariamente. 472 00:23:59,005 --> 00:24:01,480 Quer dizer, é uma espécie de implícita neste. 473 00:24:01,480 --> 00:24:06,780 Porque este retorna, porém, contanto como isso não pegar esse, você está bem. 474 00:24:06,780 --> 00:24:07,940 475 00:24:07,940 --> 00:24:10,250 Quero dizer, é provavelmente bom prática para fazer uma outra coisa. 476 00:24:10,250 --> 00:24:15,755 Mas uma pessoa nem sempre é especialmente necessário 477 00:24:15,755 --> 00:24:17,610 se você tem algo como um retorno, que 478 00:24:17,610 --> 00:24:20,640 significa que, neste caso, se ele pega ele, seu programa vai acabar 479 00:24:20,640 --> 00:24:21,850 e nunca vamos chegar a isso. 480 00:24:21,850 --> 00:24:23,030 481 00:24:23,030 --> 00:24:29,190 É mais para o caso em que você está não necessariamente algo retornando. 482 00:24:29,190 --> 00:24:31,370 Porque se isso não fosse retornando nada, 483 00:24:31,370 --> 00:24:34,430 isso significaria que, se isso fosse verdade, o resto deste ainda seria executado. 484 00:24:34,430 --> 00:24:36,138 E, nesse caso, você gostaria de ter um falso. 485 00:24:36,138 --> 00:24:38,240 Se ele está retornando, e final do seu programa, 486 00:24:38,240 --> 00:24:41,960 uma pessoa não é necessário tudo o tempo, dependendo do contexto. 487 00:24:41,960 --> 00:24:43,084 488 00:24:43,084 --> 00:24:44,375 Jacob, você tem uma pergunta? 489 00:24:44,375 --> 00:24:46,100 AUDIÊNCIA: Yeah. 490 00:24:46,100 --> 00:24:49,300 O mesmo acontece com fgetc obter o próximo personagem? 491 00:24:49,300 --> 00:24:50,734 Como o personagem aumentar? 492 00:24:50,734 --> 00:24:51,400 COLUNA 1: Sim. 493 00:24:51,400 --> 00:24:52,774 Então fgetc obtém o próximo personagem. 494 00:24:52,774 --> 00:24:54,140 495 00:24:54,140 --> 00:24:56,866 Você pode pensar nisso como C ++ em um sentido. 496 00:24:56,866 --> 00:24:58,350 >> AUDIÊNCIA: Então, qual foi EOF? 497 00:24:58,350 --> 00:25:00,877 >> COLUNA 1: EOF é o fim do arquivo. 498 00:25:00,877 --> 00:25:03,960 É apenas um marcador que permite que você saiba que está no final do seu arquivo. 499 00:25:03,960 --> 00:25:06,742 Então, isso vai imprimir com seu padrão para fora. 500 00:25:06,742 --> 00:25:08,950 E então ele vai fechar o arquivo quando ele é feito. 501 00:25:08,950 --> 00:25:10,700 E então vamos para o próximo arquivo, certo? 502 00:25:10,700 --> 00:25:12,660 Portanto, em geral, o que este programa faz? 503 00:25:12,660 --> 00:25:15,402 504 00:25:15,402 --> 00:25:16,090 >> [Inaudível] 505 00:25:16,090 --> 00:25:16,900 >> COLUNA 1: Sim. 506 00:25:16,900 --> 00:25:18,770 Ele só imprime tudo o que há. 507 00:25:18,770 --> 00:25:23,270 Então CAT se vocês já usei e, em seguida, o nome de alguns file-- 508 00:25:23,270 --> 00:25:26,240 Eu não sei se algum de vocês tem já fez isso no seu terminal. 509 00:25:26,240 --> 00:25:29,630 Mas se você nunca usar o comando CAT-- C-A-T-- 510 00:25:29,630 --> 00:25:31,880 e, em seguida, qualquer arquivo você tem que há-- 511 00:25:31,880 --> 00:25:37,260 imprime-o para o seu terminal, que pode ser super útil para algumas coisas. 512 00:25:37,260 --> 00:25:38,746 Eu usá-lo muito. 513 00:25:38,746 --> 00:25:40,120 Isso faz sentido para todos? 514 00:25:40,120 --> 00:25:41,480 515 00:25:41,480 --> 00:25:42,100 Legal? 516 00:25:42,100 --> 00:25:46,530 >> OK assim que sua tarefa agora- quer por sozinho ou com as pessoas ao redor você- 517 00:25:46,530 --> 00:25:54,930 é apenas para escrever um programa simples que só vai escrever "Olá, mundo!" 518 00:25:54,930 --> 00:25:56,255 para um arquivo. 519 00:25:56,255 --> 00:26:00,215 >> [Inaudível] 520 00:26:00,215 --> 00:26:56,210 521 00:26:56,210 --> 00:26:57,040 >> [Inaudível] 522 00:26:57,040 --> 00:26:59,248 >> COLUNA 1: Eu estava tipo, fez Eu faço isso mal na semana passada? 523 00:26:59,248 --> 00:27:00,201 524 00:27:00,201 --> 00:27:01,492 Eu não acho que foi tão ruim assim. 525 00:27:01,492 --> 00:27:02,479 526 00:27:02,479 --> 00:27:03,520 Estou feliz por você estar todos aqui. 527 00:27:03,520 --> 00:27:04,655 Ele realmente me faz feliz. 528 00:27:04,655 --> 00:27:07,565 529 00:27:07,565 --> 00:27:10,160 Eu sou uma garota de prazeres simples. 530 00:27:10,160 --> 00:27:11,688 Eu só gosto quando minha seção atende. 531 00:27:11,688 --> 00:27:13,830 532 00:27:13,830 --> 00:27:18,270 Então eu estou apenas começando isso começou por vocês para que possamos codificar juntos. 533 00:27:18,270 --> 00:27:22,290 Eu não gosto de colocar qualquer um em o local, a menos que você quer ser. 534 00:27:22,290 --> 00:27:26,486 535 00:27:26,486 --> 00:27:30,086 >> AUDIÊNCIA: Para o questionário, fazer temos que escrever um programa? 536 00:27:30,086 --> 00:27:33,260 >> COLUNA 1: Você pode ser solicitado a escrever programas simples com a mão. 537 00:27:33,260 --> 00:27:35,940 538 00:27:35,940 --> 00:27:36,590 Sim. 539 00:27:36,590 --> 00:27:38,510 >> AUDIÊNCIA: O teste é na próxima semana, certo? 540 00:27:38,510 --> 00:27:40,108 >> COLUNA 1: O teste está próxima quarta-feira. 541 00:27:40,108 --> 00:27:40,855 542 00:27:40,855 --> 00:27:43,730 Isso significa que há um lindo [? CSE?] classificação depois partido, que 543 00:27:43,730 --> 00:27:50,390 significa que você terá a sua pontuação volta que noite-- em que momento? 544 00:27:50,390 --> 00:27:50,890 Quem sabe? 545 00:27:50,890 --> 00:27:51,973 Mas será que a noite. 546 00:27:51,973 --> 00:28:02,020 547 00:28:02,020 --> 00:28:02,855 >> Tudo certo. 548 00:28:02,855 --> 00:28:04,250 Como queremos começar este? 549 00:28:04,250 --> 00:28:07,964 550 00:28:07,964 --> 00:28:09,630 Vou te dar um hint-- começa com isso. 551 00:28:09,630 --> 00:28:11,455 >> AUDIÊNCIA: Você tem que abrir um arquivo. 552 00:28:11,455 --> 00:28:12,250 >> COLUNA 1: Sim. 553 00:28:12,250 --> 00:28:14,060 Então o que você quiser chamar isso? 554 00:28:14,060 --> 00:28:16,150 Você só quer chamá-lo de "arquivo"? 555 00:28:16,150 --> 00:28:17,480 Vamos torná-lo fácil. 556 00:28:17,480 --> 00:28:26,752 Então, qual é o nosso fopen-- teste de saída vai ser? 557 00:28:26,752 --> 00:28:36,130 Chamá-lo de "Olá". 558 00:28:36,130 --> 00:28:37,810 E o que é o nosso modo? 559 00:28:37,810 --> 00:28:39,764 560 00:28:39,764 --> 00:28:41,055 O que estamos fazendo para este arquivo? 561 00:28:41,055 --> 00:28:42,676 562 00:28:42,676 --> 00:28:43,500 >> AUDIÊNCIA: Leia. 563 00:28:43,500 --> 00:28:44,401 564 00:28:44,401 --> 00:28:44,900 Escrevendo. 565 00:28:44,900 --> 00:28:46,191 COLUNA 1: Estamos escrevendo para ele. 566 00:28:46,191 --> 00:28:47,360 567 00:28:47,360 --> 00:28:47,860 Adorável. 568 00:28:47,860 --> 00:28:50,330 569 00:28:50,330 --> 00:28:52,860 OK, então nós temos esse arquivo agora. 570 00:28:52,860 --> 00:28:54,920 571 00:28:54,920 --> 00:28:56,212 O que precisamos fazer? 572 00:28:56,212 --> 00:28:57,420 AUDIÊNCIA: Verifique se ele é nulo. 573 00:28:57,420 --> 00:28:59,820 COLUNA 1: Verifique se é null-- exatamente. 574 00:28:59,820 --> 00:29:01,980 Isso é o que eu gosto de ouvir. 575 00:29:01,980 --> 00:29:05,930 Isso deveria ser automático, especialmente praticamente a partir deste ponto. 576 00:29:05,930 --> 00:29:07,530 577 00:29:07,530 --> 00:29:10,950 Se você começar a segfaulting, você provavelmente não verificar null em algum lugar. 578 00:29:10,950 --> 00:29:12,480 Nove em cada dez vezes, isso é vai ser o seu erro. 579 00:29:12,480 --> 00:29:15,400 Então, se você poderia apenas entrar no hábito, sempre verifique se ele é nulo, 580 00:29:15,400 --> 00:29:18,150 sua vida vai ser agradável e easy-- ou mais fácil. 581 00:29:18,150 --> 00:29:19,480 >> Então, verifique se ele é nulo. 582 00:29:19,480 --> 00:29:21,200 583 00:29:21,200 --> 00:29:24,820 Então, se não é nulo, o que é o que o estrondo igual 584 00:29:24,820 --> 00:29:26,784 means-- não null-- é válido. 585 00:29:26,784 --> 00:29:27,700 O que queremos fazer? 586 00:29:27,700 --> 00:29:29,750 587 00:29:29,750 --> 00:29:31,570 Nós apenas queremos imprimir para esse arquivo, certo? 588 00:29:31,570 --> 00:29:32,923 Então o que é que vamos usar? 589 00:29:32,923 --> 00:29:34,092 >> AUDIÊNCIA: fprintf 590 00:29:34,092 --> 00:29:36,800 >> COLUNA 1: Fprintf-- adorável. 591 00:29:36,800 --> 00:29:38,150 592 00:29:38,150 --> 00:29:44,000 E fprintf leva dois arguments-- onde ele vai eo que queremos impresso. 593 00:29:44,000 --> 00:29:45,820 Então, qual é o primeiro? 594 00:29:45,820 --> 00:29:46,570 Onde é que vai? 595 00:29:46,570 --> 00:29:47,490 >> AUDIÊNCIA: Arquivo. 596 00:29:47,490 --> 00:29:48,785 >> COLUNA 1: Vai para o arquivo. 597 00:29:48,785 --> 00:29:49,784 598 00:29:49,784 --> 00:29:50,950 E o que nós queremos impresso? 599 00:29:50,950 --> 00:29:52,900 600 00:29:52,900 --> 00:29:58,065 "Olá, mundo!" 601 00:29:58,065 --> 00:29:58,565 Tudo certo. 602 00:29:58,565 --> 00:30:03,670 Temos uma última coisa-- outro grande paradigma aqui. 603 00:30:03,670 --> 00:30:04,479 604 00:30:04,479 --> 00:30:05,145 AUDIÊNCIA: Close. 605 00:30:05,145 --> 00:30:05,853 COLUNA 1: Fechar. 606 00:30:05,853 --> 00:30:09,990 607 00:30:09,990 --> 00:30:10,540 Lá você vai. 608 00:30:10,540 --> 00:30:13,384 >> AUDIÊNCIA: Isso está acontecendo se o arquivo é nulo? 609 00:30:13,384 --> 00:30:15,050 COLUNA 1: Não, isso é, se não é nulo. 610 00:30:15,050 --> 00:30:16,881 AUDIÊNCIA: Ah, se é não-- OK. 611 00:30:16,881 --> 00:30:21,728 612 00:30:21,728 --> 00:30:25,410 Para o fopen e, em seguida, o dois argumentos que vão dentro, 613 00:30:25,410 --> 00:30:27,655 o que é que o primeiro argumento dizer de novo? 614 00:30:27,655 --> 00:30:30,392 >> COLUNA 1: O argumento é assim como o nome do arquivo 615 00:30:30,392 --> 00:30:31,350 que você deseja ir. 616 00:30:31,350 --> 00:30:36,020 Assim, após este é executado, você faria tem algum arquivo chamado "Olá" 617 00:30:36,020 --> 00:30:38,320 que tinha "Olá, mundo" dentro dele. 618 00:30:38,320 --> 00:30:38,820 Isso é tudo. 619 00:30:38,820 --> 00:30:39,500 Apenas o nome. 620 00:30:39,500 --> 00:30:42,685 621 00:30:42,685 --> 00:30:48,650 >> AUDIÊNCIA: E já que é a escrita, o arquivo não tem que existir. 622 00:30:48,650 --> 00:30:49,675 É isso que você disse? 623 00:30:49,675 --> 00:30:50,410 >> COLUNA 1: Certo. 624 00:30:50,410 --> 00:30:50,910 Exatamente. 625 00:30:50,910 --> 00:30:53,110 626 00:30:53,110 --> 00:30:55,839 Se "Olá" como um arquivo ainda não existe, é 627 00:30:55,839 --> 00:30:58,380 vai criar um arquivo chamado Olá "e escrever para ele para você. 628 00:30:58,380 --> 00:30:59,631 629 00:30:59,631 --> 00:31:03,610 >> AUDIÊNCIA: Quando você está dizendo o programa a escreveu para o arquivo, 630 00:31:03,610 --> 00:31:08,075 Por que você escreve "arquivo" em vez de o nome do arquivo e fprintf-- 631 00:31:08,075 --> 00:31:13,600 >> COLUNA 1: Porque neste caso, temos que grande FILE-- tudo em estrela caps--, 632 00:31:13,600 --> 00:31:14,260 arquivar. 633 00:31:14,260 --> 00:31:17,370 Portanto, é um ponteiro para o arquivo que você está falando. 634 00:31:17,370 --> 00:31:19,930 Esta é a maneira que nós apenas se referem a ele. 635 00:31:19,930 --> 00:31:24,850 Portanto, neste caso, você pode pensar em aha file--, 636 00:31:24,850 --> 00:31:31,271 podemos usar isto-- arquivo aqui refere-se à abertura do "Olá" 637 00:31:31,271 --> 00:31:32,145 e deixá-lo escrever. 638 00:31:32,145 --> 00:31:34,728 >> AUDIÊNCIA: Poderíamos colocar um "Olá" em vez disso [? de apenas?] arquivo f? 639 00:31:34,728 --> 00:31:40,160 COLUNA 1: Não, porque "Olá" precisa ser aberto e gravável. 640 00:31:40,160 --> 00:31:41,820 641 00:31:41,820 --> 00:31:45,980 Arquivo aqui é como um designador que diz OK, nós 642 00:31:45,980 --> 00:31:49,190 ter este hello-- file-- que nós estamos olhando. 643 00:31:49,190 --> 00:31:50,680 Tem sido aberto. 644 00:31:50,680 --> 00:31:52,140 E nós estamos indo para escrever para ele. 645 00:31:52,140 --> 00:31:55,130 Se você usar apenas "Olá", que é encapsulado na mesma. 646 00:31:55,130 --> 00:31:56,846 Então, ele vai surtar. 647 00:31:56,846 --> 00:31:58,590 648 00:31:58,590 --> 00:32:00,300 Quero dizer, você poderia ter chamado ele. 649 00:32:00,300 --> 00:32:03,960 Você poderia ter feito de arquivo, estrela, "Olá", é igual a isso. 650 00:32:03,960 --> 00:32:07,840 Mas a questão toda é que você precisa de um ponteiro de arquivo estrela em ordem 651 00:32:07,840 --> 00:32:09,281 para ser capaz de usar essas funções. 652 00:32:09,281 --> 00:32:11,280 AUDIÊNCIA: Você poderia fazer arquivo, estrela, arquivo, "Olá" 653 00:32:11,280 --> 00:32:13,113 ou você tem que colocar arquivar estrela, arquivo por ele? 654 00:32:13,113 --> 00:32:16,330 COLUNA 1: Você poderia fazer arquivo, estrela, "Olá". 655 00:32:16,330 --> 00:32:19,790 Você pode mudar isso para qualquer nome que você quiser. 656 00:32:19,790 --> 00:32:22,114 É completamente arbitrário o que esse nome é. 657 00:32:22,114 --> 00:32:23,179 658 00:32:23,179 --> 00:32:24,220 Você pode nomeá-lo de nada. 659 00:32:24,220 --> 00:32:25,501 660 00:32:25,501 --> 00:32:28,020 Nomeie-espaguetes do vôo, se você quisesse. 661 00:32:28,020 --> 00:32:29,690 >> AUDIÊNCIA: O que é o "w" entre aspas para? 662 00:32:29,690 --> 00:32:31,540 >> COLUNA 1: O "w" é apenas o modo. 663 00:32:31,540 --> 00:32:33,170 Então, nós estamos escrevendo a este arquivo. 664 00:32:33,170 --> 00:32:34,410 665 00:32:34,410 --> 00:32:35,320 Todo mundo bom? 666 00:32:35,320 --> 00:32:36,227 Clear? 667 00:32:36,227 --> 00:32:36,981 Sim. 668 00:32:36,981 --> 00:32:40,365 >> AUDIÊNCIA: Então, quando ele escreve esta arquivo, onde é que vamos então encontrar esse arquivo? 669 00:32:40,365 --> 00:32:43,820 >> COLUNA 1: Ele vai ficar na mesma diretório que você está atualmente em. 670 00:32:43,820 --> 00:32:45,650 671 00:32:45,650 --> 00:32:48,880 Se você estiver em pset três e você executar este, dentro de sua pset 672 00:32:48,880 --> 00:32:52,600 três pasta vai ser este arquivo chamado "Olá". 673 00:32:52,600 --> 00:32:53,160 Legal? 674 00:32:53,160 --> 00:32:53,757 Todo mundo bom? 675 00:32:53,757 --> 00:32:55,840 Eu sinto que você é tudo consegui-lo, o que é ótimo. 676 00:32:55,840 --> 00:32:57,290 677 00:32:57,290 --> 00:32:57,790 Está bem. 678 00:32:57,790 --> 00:33:05,960 Então, de volta ao meu slides show-- Eu amo quando as coisas funcionam. 679 00:33:05,960 --> 00:33:08,674 OK, pointers-- Vocês estão animado? 680 00:33:08,674 --> 00:33:09,465 Ponteiros são grandes. 681 00:33:09,465 --> 00:33:11,581 682 00:33:11,581 --> 00:33:13,580 Eles levam um pouco de quebrar a cabeça por aí. 683 00:33:13,580 --> 00:33:15,288 Este é o meu segundo ano ponteiros de ensino. 684 00:33:15,288 --> 00:33:16,850 E eu acho que finalmente consegui-lo. 685 00:33:16,850 --> 00:33:18,650 Então, se você lutar, é OK. 686 00:33:18,650 --> 00:33:19,940 687 00:33:19,940 --> 00:33:24,070 Como eu disse antes, desenhar ajuda muito com as coisas no CS, 688 00:33:24,070 --> 00:33:27,400 tanto quanto eu acho que as pessoas tendem pensar oh, nós estamos em um computador. 689 00:33:27,400 --> 00:33:28,399 Nós devemos apenas código. 690 00:33:28,399 --> 00:33:30,190 Não-- imagens de desenho realmente vai ajudá-lo. 691 00:33:30,190 --> 00:33:32,773 E eu realmente incentivá-lo a tocar em seu lado kindergartner 692 00:33:32,773 --> 00:33:35,010 e trazer para fora giz de cera ou marcadores e sorteio. 693 00:33:35,010 --> 00:33:36,110 Porque ele vai ajudá-lo. 694 00:33:36,110 --> 00:33:39,380 E se você me ver no horário de expediente, eu será que transportam cerca de pilhas de papel 695 00:33:39,380 --> 00:33:41,580 com penas de desenho as coisas. 696 00:33:41,580 --> 00:33:44,370 >> Assim, particularmente com pointers-- tirar fotos. 697 00:33:44,370 --> 00:33:47,970 E tenho certeza de que estamos realmente indo para estar desenhando algumas fotos aqui também. 698 00:33:47,970 --> 00:33:51,270 >> Então vocês todos tem que ver Binky, esta coisa legal claymation. 699 00:33:51,270 --> 00:33:54,720 E nós pensamos que é realmente engraçado quando ele explode em um monte de peças. 700 00:33:54,720 --> 00:33:56,280 701 00:33:56,280 --> 00:33:57,755 É um pouco de alívio cômico para a classe. 702 00:33:57,755 --> 00:34:02,140 703 00:34:02,140 --> 00:34:05,900 C [inaudível] este grande capacidade para ser capaz de controlar de memória. 704 00:34:05,900 --> 00:34:10,090 E é uma das coisas que realmente torna uma linguagem tão poderosa. 705 00:34:10,090 --> 00:34:13,469 Mas com grande poder vem grande responsabilidade. 706 00:34:13,469 --> 00:34:16,230 E as coisas loucas pode acontecer se você não tiver cuidado. 707 00:34:16,230 --> 00:34:18,560 Então, quando você estiver usando ponteiros, você quer fazer 708 00:34:18,560 --> 00:34:21,440 Certifique-se que você realmente entender exatamente o que você está fazendo. 709 00:34:21,440 --> 00:34:25,530 Esperemos que o próximo pouco de tempo vai ajudá-lo a realmente entender 710 00:34:25,530 --> 00:34:27,850 ponteiros, como usá-los, e como manipulá-los. 711 00:34:27,850 --> 00:34:29,170 712 00:34:29,170 --> 00:34:33,460 >> Então memory-- eu tenho certeza que nós temos vi esse diagrama antes. 713 00:34:33,460 --> 00:34:38,540 Portanto, este é apenas um simples diagrama de como as coisas poderiam ser armazenados memória. 714 00:34:38,540 --> 00:34:43,145 Então, você tem basicamente estes enormes matrizes de blocos de um byte 715 00:34:43,145 --> 00:34:46,000 é o que temos aqui- ligeira incrementado em um de cada vez. 716 00:34:46,000 --> 00:34:51,810 Esta é em hexadecimal [inaudível] tão quadras de oito bits. 717 00:34:51,810 --> 00:34:55,510 E cada bloco está associado com algum endereço hexadecimal. 718 00:34:55,510 --> 00:34:58,750 Então, se você já viu o 0x, que está apenas notating 719 00:34:58,750 --> 00:35:00,670 que é um endereço hexadecimal. 720 00:35:00,670 --> 00:35:03,970 Você pode assumir isso significa algum endereço na memória. 721 00:35:03,970 --> 00:35:06,935 Estamos falando de endereços de memória sempre que você vê hexadecimal. 722 00:35:06,935 --> 00:35:10,420 723 00:35:10,420 --> 00:35:14,630 >> Temos ints são variáveis, flutuadores são variáveis ​​que armazenam. 724 00:35:14,630 --> 00:35:16,260 Então, armazenar ints ints. 725 00:35:16,260 --> 00:35:17,430 Loja de carros alegóricos flutua. 726 00:35:17,430 --> 00:35:20,260 Então nós também temos ponteiros que os endereços de memória loja. 727 00:35:20,260 --> 00:35:21,660 Isso é uma espécie de mapeamento. 728 00:35:21,660 --> 00:35:24,240 Os ponteiros são exclusivamente para endereços de memória. 729 00:35:24,240 --> 00:35:25,780 730 00:35:25,780 --> 00:35:27,292 Então, isso é como o seu tipo de lá. 731 00:35:27,292 --> 00:35:29,550 732 00:35:29,550 --> 00:35:34,470 O seu aparelho é de 32 bits, o que significa que o seu endereço de memória é de quatro bytes. 733 00:35:34,470 --> 00:35:37,830 Assim, qualquer ponteiro que você tem Também vai ser quatro bytes. 734 00:35:37,830 --> 00:35:43,200 Ou então se é quatro bytes, memória é de quatro bytes. 735 00:35:43,200 --> 00:35:44,790 Memória loja ponteiros. 736 00:35:44,790 --> 00:35:46,430 Portanto, eles são quatro bytes. 737 00:35:46,430 --> 00:35:48,460 Cool-- só quero reforçar isso. 738 00:35:48,460 --> 00:35:50,120 739 00:35:50,120 --> 00:35:52,220 >> Você deve começar este comic agora. 740 00:35:52,220 --> 00:35:55,040 Eu não sei quantos de vocês são fãs xkcd, mas eu amo xkcd. 741 00:35:55,040 --> 00:35:55,780 É ótimo. 742 00:35:55,780 --> 00:35:57,290 743 00:35:57,290 --> 00:35:57,790 >> Tudo certo. 744 00:35:57,790 --> 00:36:01,640 Assim, a criação de pointers-- como eu disse, é praticamente como qualquer outra coisa. 745 00:36:01,640 --> 00:36:02,930 Você tem um tipo. 746 00:36:02,930 --> 00:36:04,050 Você tem um nome. 747 00:36:04,050 --> 00:36:04,810 Certo? 748 00:36:04,810 --> 00:36:10,410 Isso é o que temos lá. [? Hex?] Estrela significa que é um ponteiro, 749 00:36:10,410 --> 00:36:12,250 e, em seguida, o que você quiser chamá-lo. 750 00:36:12,250 --> 00:36:15,770 Assim, o tipo representa o que você pode armazenar. 751 00:36:15,770 --> 00:36:16,850 752 00:36:16,850 --> 00:36:17,990 Tudo certo? 753 00:36:17,990 --> 00:36:24,350 Da mesma forma que se fizermos ints, sabemos que estamos armazenando um int lá. 754 00:36:24,350 --> 00:36:25,990 755 00:36:25,990 --> 00:36:30,280 Com um ponteiro, ele detém um endereço de memória. 756 00:36:30,280 --> 00:36:34,240 Mas o que isso significa é isso-- aqui é onde um desenho que vai vir a calhar. 757 00:36:34,240 --> 00:36:36,170 758 00:36:36,170 --> 00:36:45,980 Portanto, neste caso, temos alguns value-- digamos quatro. 759 00:36:45,980 --> 00:36:49,306 Quatro é no endereço um. 760 00:36:49,306 --> 00:36:49,805 Ok? 761 00:36:49,805 --> 00:36:51,550 762 00:36:51,550 --> 00:36:56,170 >> Este primeiro aqui significa que é um 2x ponteiro. 763 00:36:56,170 --> 00:36:56,740 Certo? 764 00:36:56,740 --> 00:36:57,628 É algum ponteiro x. 765 00:36:57,628 --> 00:36:58,852 766 00:36:58,852 --> 00:37:00,940 x pode ser algo, qualquer coisa. 767 00:37:00,940 --> 00:37:01,960 768 00:37:01,960 --> 00:37:05,130 O que quer dizer x é-- x é quatro. 769 00:37:05,130 --> 00:37:07,280 Vai para armazenar o endereço de memória aqui. 770 00:37:07,280 --> 00:37:12,260 Assim, int, estrela, x-- este é alguma outra ranhura em memory-- 771 00:37:12,260 --> 00:37:13,590 quem sabe o que é isso. 772 00:37:13,590 --> 00:37:15,430 Mas ele vai armazenar um endereço aqui. 773 00:37:15,430 --> 00:37:27,040 Portanto, este seria como-- neste caso, o que quer, 774 00:37:27,040 --> 00:37:32,630 é armazenado a 0x1-- tudo o que é armazenado no endereço que nosso ponteiro detém, 775 00:37:32,630 --> 00:37:35,280 tem de corresponder-se com o que temos designado. 776 00:37:35,280 --> 00:37:40,330 Assim, em 0x1, neste caso, esta é x. 777 00:37:40,330 --> 00:37:42,500 778 00:37:42,500 --> 00:37:49,340 Isso só pode ser sempre uma int enquanto estamos usando isso. 779 00:37:49,340 --> 00:37:52,950 >> Da mesma forma, se tivermos 1a outro, seja qual for 780 00:37:52,950 --> 00:37:59,130 endereço é armazenado com um y tem para ser uma mesma coisa char-- com z. 781 00:37:59,130 --> 00:38:05,840 Do mesmo modo, sempre que você tentar fazer INTX igual 0,4, 782 00:38:05,840 --> 00:38:09,275 ele vai gritar com você e ser como não, você disse que queria um int. 783 00:38:09,275 --> 00:38:10,525 Isto é suposto ser um int. 784 00:38:10,525 --> 00:38:11,900 Pare de tentar torná-lo um float. 785 00:38:11,900 --> 00:38:14,150 >> Então deixe as coisas serem o que querem ser. 786 00:38:14,150 --> 00:38:15,159 787 00:38:15,159 --> 00:38:16,200 Deixe que as coisas sejam eles mesmos. 788 00:38:16,200 --> 00:38:19,380 789 00:38:19,380 --> 00:38:23,450 Tão grande coisa é apenas qualquer tipo de ponteiro 790 00:38:23,450 --> 00:38:26,101 é, essa é a única coisa que você pode armazenar lá. 791 00:38:26,101 --> 00:38:26,600 Ok? 792 00:38:26,600 --> 00:38:27,910 793 00:38:27,910 --> 00:38:31,160 Com a prática, como com na semana passada, tudo 794 00:38:31,160 --> 00:38:32,817 Parece realmente uma espécie de resumo. 795 00:38:32,817 --> 00:38:34,150 Nós vamos fazer alguma prática. 796 00:38:34,150 --> 00:38:36,760 Deve fazer mais sentido. 797 00:38:36,760 --> 00:38:44,580 >> Então, referenciando e dereferencing-- é realmente importante para obter estes reta. 798 00:38:44,580 --> 00:38:46,630 Eu ainda tenho que atualizar de vez em quando. 799 00:38:46,630 --> 00:38:48,450 E eu sou como espera, que um que eu quero? 800 00:38:48,450 --> 00:38:56,080 Assim, o comercial vai realmente dar você a referência ou o endereço de. 801 00:38:56,080 --> 00:39:00,100 Assim, ele retorna o endereço em memória de qual variável é armazenada. 802 00:39:00,100 --> 00:39:01,170 803 00:39:01,170 --> 00:39:07,020 Então, ele vai realmente voltar para você um hexadecimal, enquanto que dereferencing 804 00:39:07,020 --> 00:39:10,641 está realmente indo para dar-lhe os dados que são armazenados lá. 805 00:39:10,641 --> 00:39:11,140 Ok? 806 00:39:11,140 --> 00:39:12,680 807 00:39:12,680 --> 00:39:16,060 Então, vamos olhar um exemplo muito rápido, ou realmente o próximo. 808 00:39:16,060 --> 00:39:18,050 809 00:39:18,050 --> 00:39:19,150 >> Está bem. 810 00:39:19,150 --> 00:39:21,790 Então, nós temos que pensar realmente cuidadosamente sobre isso. 811 00:39:21,790 --> 00:39:23,860 Portanto, temos aqui algum inteiro x. 812 00:39:23,860 --> 00:39:26,485 Vou tentar tirar esta para o melhor das minhas habilidades. 813 00:39:26,485 --> 00:39:30,230 814 00:39:30,230 --> 00:39:32,410 Então, nós vamos ter esse slot x. 815 00:39:32,410 --> 00:39:35,850 816 00:39:35,850 --> 00:39:37,315 E é armazenar cinco. 817 00:39:37,315 --> 00:39:38,640 818 00:39:38,640 --> 00:39:40,090 Seu endereço é 0x4. 819 00:39:40,090 --> 00:39:41,920 820 00:39:41,920 --> 00:39:43,160 Legal? 821 00:39:43,160 --> 00:39:44,100 Tudo de bom. 822 00:39:44,100 --> 00:39:45,470 >> Portanto, agora temos este ponteiro. 823 00:39:45,470 --> 00:39:46,916 824 00:39:46,916 --> 00:39:47,990 Foi por aqui. 825 00:39:47,990 --> 00:39:52,130 826 00:39:52,130 --> 00:39:57,560 E o comercial nos dá o endereço de alguma coisa. 827 00:39:57,560 --> 00:40:00,780 Assim, neste caso, é o endereço de x. 828 00:40:00,780 --> 00:40:01,875 Qual é o endereço de x? 829 00:40:01,875 --> 00:40:05,660 830 00:40:05,660 --> 00:40:12,590 04-- e este ponteiro está no 0x08. 831 00:40:12,590 --> 00:40:14,490 832 00:40:14,490 --> 00:40:14,990 Legal? 833 00:40:14,990 --> 00:40:16,570 834 00:40:16,570 --> 00:40:21,570 Assim, você pode pensar sobre isso ponteiro, 04, apenas aponta para cá. 835 00:40:21,570 --> 00:40:22,840 836 00:40:22,840 --> 00:40:25,740 E eles são chamados de ponteiros porque, como temos mais para isso, 837 00:40:25,740 --> 00:40:28,450 você vai ver apontando para as coisas. 838 00:40:28,450 --> 00:40:31,470 E um bloco apontando para outra bloco fará muito mais sentido. 839 00:40:31,470 --> 00:40:32,760 840 00:40:32,760 --> 00:40:33,890 Então, aqui estão dois. 841 00:40:33,890 --> 00:40:38,230 E então nós temos alguns cópia, que é 0x0c what--. 842 00:40:38,230 --> 00:40:41,290 843 00:40:41,290 --> 00:40:43,420 E ele vai desreferenciava nosso ponteiro. 844 00:40:43,420 --> 00:40:46,790 >> Então o que ele está dizendo é OK, aqui está o nosso ponteiro. 845 00:40:46,790 --> 00:40:53,090 O valor que ele armazena é 0x04, eo que ele está dizendo é ir a este endereço 846 00:40:53,090 --> 00:40:54,300 e me diga o que está nele. 847 00:40:54,300 --> 00:40:55,520 848 00:40:55,520 --> 00:40:57,710 Então, isso é efetivamente o que esta seta está fazendo. 849 00:40:57,710 --> 00:40:58,750 850 00:40:58,750 --> 00:41:01,280 Você pode pensar nisso como a sua estrela. 851 00:41:01,280 --> 00:41:05,410 Então, OK, quando fazemos estrela, que significa seguir. 852 00:41:05,410 --> 00:41:06,810 Ir para este endereço. 853 00:41:06,810 --> 00:41:11,430 E isso é basicamente seguinte nesta seta para este pedaço de memória. 854 00:41:11,430 --> 00:41:15,380 E dá-nos o que está nele, que é 5. 855 00:41:15,380 --> 00:41:18,840 É por isso que a nossa cópia é igual a 5. 856 00:41:18,840 --> 00:41:20,120 Será que isso faz sentido? 857 00:41:20,120 --> 00:41:22,769 Alguém precisa me passar por isso de novo, ou mais devagar? 858 00:41:22,769 --> 00:41:24,560 Você quer que eu vá por isso mais uma vez? 859 00:41:24,560 --> 00:41:25,060 Está bem. 860 00:41:25,060 --> 00:41:27,549 861 00:41:27,549 --> 00:41:28,840 Nós estamos indo para redesenhá-lo novamente. 862 00:41:28,840 --> 00:41:31,930 863 00:41:31,930 --> 00:41:37,205 Quando começamos, todos nós concordamos que temos algum pedaço de memória que é uma variável 864 00:41:37,205 --> 00:41:40,890 x que estabelecemos igual a 5. 865 00:41:40,890 --> 00:41:42,910 Nós não controlamos onde ele está na memória. 866 00:41:42,910 --> 00:41:45,520 Portanto, este ponto é apenas atribuído arbitrariamente. 867 00:41:45,520 --> 00:41:47,770 868 00:41:47,770 --> 00:41:48,731 Boa lá? 869 00:41:48,731 --> 00:41:49,230 Está bem. 870 00:41:49,230 --> 00:41:50,420 871 00:41:50,420 --> 00:41:53,330 Em seguida, inicializar um ponteiro para um int. 872 00:41:53,330 --> 00:41:56,900 É por isso que é permitido para apontar para x, porque temos um int aqui. 873 00:41:56,900 --> 00:42:00,840 Nós temos um outro pedaço de memória, porque este ponteiro 874 00:42:00,840 --> 00:42:03,485 é uma variável como qualquer outra coisa. 875 00:42:03,485 --> 00:42:06,615 É atribuído arbitrariamente algum espaço na memória. 876 00:42:06,615 --> 00:42:07,630 877 00:42:07,630 --> 00:42:10,830 E o que ele armazena é o endereço de x. 878 00:42:10,830 --> 00:42:13,200 Ampersand significa endereço de x. 879 00:42:13,200 --> 00:42:14,575 Então, qual é o endereço de x? 880 00:42:14,575 --> 00:42:19,179 881 00:42:19,179 --> 00:42:20,614 >> AUDIÊNCIA: É zero-- 882 00:42:20,614 --> 00:42:21,280 COLUNA 1: 0x04. 883 00:42:21,280 --> 00:42:24,350 884 00:42:24,350 --> 00:42:25,940 Então entăo-- último. 885 00:42:25,940 --> 00:42:30,650 Temos algumas copy-- novamente apenas uma outra variável. 886 00:42:30,650 --> 00:42:32,520 Então, vamos atribuir um lugar arbitrário. 887 00:42:32,520 --> 00:42:35,260 888 00:42:35,260 --> 00:42:38,080 E nós desreferenciava nosso ponteiro. 889 00:42:38,080 --> 00:42:42,490 A estrela significa ir para a endereço armazenado no meu ponteiro. 890 00:42:42,490 --> 00:42:44,480 Diga-me o que está lá. 891 00:42:44,480 --> 00:42:47,290 Assim, o endereço armazenado em nosso ponteiro é 0x04. 892 00:42:47,290 --> 00:42:49,070 893 00:42:49,070 --> 00:42:51,310 Então vamos para esse endereço. 894 00:42:51,310 --> 00:42:52,402 895 00:42:52,402 --> 00:42:54,590 Ele está apontando para esse endereço. 896 00:42:54,590 --> 00:42:57,481 O que está dentro deste bloco de memória? 897 00:42:57,481 --> 00:42:57,980 É um cinco. 898 00:42:57,980 --> 00:42:59,210 899 00:42:59,210 --> 00:43:01,650 Então é isso que nós atribuímos a nossa cópia. 900 00:43:01,650 --> 00:43:03,430 901 00:43:03,430 --> 00:43:04,860 Todo mundo bom? 902 00:43:04,860 --> 00:43:05,360 Legal. 903 00:43:05,360 --> 00:43:07,010 904 00:43:07,010 --> 00:43:08,330 Fotos novamente--. 905 00:43:08,330 --> 00:43:19,750 906 00:43:19,750 --> 00:43:25,200 >> Então, seguindo os valores de aqui- Eu sou vai deixar vocês pensam sobre isso. 907 00:43:25,200 --> 00:43:26,550 908 00:43:26,550 --> 00:43:27,750 Podemos tirar outra foto. 909 00:43:27,750 --> 00:43:31,260 Mas eu quero que você tente e razão por isso em seu próprio país por um minuto. 910 00:43:31,260 --> 00:44:01,430 911 00:44:01,430 --> 00:44:04,149 >> Uma vez que eles não dão nós um exemplo de endereço, 912 00:44:04,149 --> 00:44:06,940 Eu só vou fazer x-- comercial que deve ajudar a conduzi-lo para casa. 913 00:44:06,940 --> 00:44:07,950 Ampersand significa endereço. 914 00:44:07,950 --> 00:44:09,540 915 00:44:09,540 --> 00:44:12,360 >> Assim, no primeiro, todos ir com a primeira linha. 916 00:44:12,360 --> 00:44:15,690 Alguns x de five-- algum conjunto ranhura na memória aleatória. 917 00:44:15,690 --> 00:44:17,660 918 00:44:17,660 --> 00:44:23,200 Ponteiro estrela Int é igual para o endereço de x, certo? 919 00:44:23,200 --> 00:44:28,180 Int ponteiro estrela cria Neste bloco, o chama de ponteiro, 920 00:44:28,180 --> 00:44:30,650 e atribui-lo para o endereço de x. 921 00:44:30,650 --> 00:44:32,750 922 00:44:32,750 --> 00:44:34,230 Eu sou terrível e comercial. 923 00:44:34,230 --> 00:44:36,460 924 00:44:36,460 --> 00:44:40,550 >> Agora, o que nós estamos fazendo é que dizemos OK, desreferenciava nosso ponteiro. 925 00:44:40,550 --> 00:44:42,760 Então vamos OK, o que está em nosso ponteiro? 926 00:44:42,760 --> 00:44:44,820 É comercial x. 927 00:44:44,820 --> 00:44:49,400 Ir para Ampersand x e reajusta-lo. 928 00:44:49,400 --> 00:44:51,620 929 00:44:51,620 --> 00:44:57,480 >> Então, agora, comercial x vai ser 35. 930 00:44:57,480 --> 00:45:01,540 931 00:45:01,540 --> 00:45:05,174 Então, basicamente, quando você está dereferencing, você vai OK. 932 00:45:05,174 --> 00:45:07,090 Você vai ser desenho fotos como esta. 933 00:45:07,090 --> 00:45:09,423 Você vai ser desenho suas setas sobre onde ela está. 934 00:45:09,423 --> 00:45:16,030 Então, vá para esse slot na memória e quer dá-me esse valor de volta, ou alterá-lo. 935 00:45:16,030 --> 00:45:21,620 Neste caso, porque estamos neste valor, estamos atribuindo-o a ser de 35. 936 00:45:21,620 --> 00:45:24,700 Considerando que, no passado um, se você observar, nós 937 00:45:24,700 --> 00:45:27,680 Foram atribuindo o que estava aqui para outra coisa. 938 00:45:27,680 --> 00:45:30,450 939 00:45:30,450 --> 00:45:32,245 >> Então eles têm esta tabela incrível. 940 00:45:32,245 --> 00:45:35,000 941 00:45:35,000 --> 00:45:36,890 Não é tão ruim assim. 942 00:45:36,890 --> 00:45:37,970 Vocês trabalhar nele. 943 00:45:37,970 --> 00:45:39,640 Vou tirá-la no tabuleiro. 944 00:45:39,640 --> 00:45:41,306 Nós estamos indo para preenchê-lo juntos, OK? 945 00:45:41,306 --> 00:45:42,290 946 00:45:42,290 --> 00:45:45,530 Então pegue um pouco de papel, grab um parceiro, começar a trabalhar. 947 00:45:45,530 --> 00:45:53,897 948 00:45:53,897 --> 00:45:55,605 Eu estou indo para obter um maior pedaço de giz. 949 00:45:55,605 --> 00:45:56,624 950 00:45:56,624 --> 00:45:58,150 Porque ele vai ser muito. 951 00:45:58,150 --> 00:45:59,410 952 00:45:59,410 --> 00:45:59,910 Está bem. 953 00:45:59,910 --> 00:48:08,567 954 00:48:08,567 --> 00:48:09,150 PROFESSOR: OK. 955 00:48:09,150 --> 00:48:11,599 956 00:48:11,599 --> 00:48:12,890 Vamos começar com a primeira linha. 957 00:48:12,890 --> 00:48:14,070 958 00:48:14,070 --> 00:48:16,970 Vamos começar por aí, então vocês talvez possa trabalhar com um pouco mais. 959 00:48:16,970 --> 00:48:17,870 Está bem. 960 00:48:17,870 --> 00:48:19,810 um é igual a B vezes c então o que é um? 961 00:48:19,810 --> 00:48:21,420 962 00:48:21,420 --> 00:48:23,260 Não é uma pergunta capciosa, eu prometo. 963 00:48:23,260 --> 00:48:24,440 >> ALUNO: 4 vezes 5. 964 00:48:24,440 --> 00:48:25,420 >> PROFESSOR: 4 vezes 5. 965 00:48:25,420 --> 00:48:25,920 20. 966 00:48:25,920 --> 00:48:26,730 Então, qual é b? 967 00:48:26,730 --> 00:48:27,921 968 00:48:27,921 --> 00:48:28,420 ESTUDANTE: 4. 969 00:48:28,420 --> 00:48:30,204 970 00:48:30,204 --> 00:48:31,043 >> PROFESSOR: E c? 971 00:48:31,043 --> 00:48:31,542 ESTUDANTE: 5. 972 00:48:31,542 --> 00:48:32,083 PROFESSOR: 5. 973 00:48:32,083 --> 00:48:35,960 E então este é só ir a ser comercial Uma, ampersand b, 974 00:48:35,960 --> 00:48:38,575 c comercial, certo? 975 00:48:38,575 --> 00:48:39,728 976 00:48:39,728 --> 00:48:40,596 Não é ruim. 977 00:48:40,596 --> 00:48:42,081 É simples o suficiente. 978 00:48:42,081 --> 00:48:42,580 Está bem. 979 00:48:42,580 --> 00:48:44,300 Então a próxima. 980 00:48:44,300 --> 00:48:48,725 A é igual a vezes c, no caso ninguém estava familiarizado com isso. 981 00:48:48,725 --> 00:48:49,812 982 00:48:49,812 --> 00:48:53,300 Está todo mundo conhece com os tempos iguais? 983 00:48:53,300 --> 00:49:00,105 OK, tudo isso means-- este é atalho para um é igual a um vezes c. 984 00:49:00,105 --> 00:49:04,840 Você também pode fazê-lo com a divisão, com adição, com subtracção. 985 00:49:04,840 --> 00:49:12,130 Você pode fazer um igual, ou um plus é igual a c significa um é igual a um mais c, um sinal de menos igual 986 00:49:12,130 --> 00:49:15,190 c seria um é igual a um menos c. 987 00:49:15,190 --> 00:49:16,690 É apenas açúcar sintático. 988 00:49:16,690 --> 00:49:19,380 989 00:49:19,380 --> 00:49:24,140 >> Assim, neste caso, a é igual a uma vezes c ia-nos o que dar? 990 00:49:24,140 --> 00:49:25,910 991 00:49:25,910 --> 00:49:28,186 Novamente, não é uma pergunta capciosa. 992 00:49:28,186 --> 00:49:28,965 >> ESTUDANTE: 100. 993 00:49:28,965 --> 00:49:29,300 >> PROFESSOR: 100. 994 00:49:29,300 --> 00:49:30,383 Será que alguma coisa mudou? 995 00:49:30,383 --> 00:49:31,790 996 00:49:31,790 --> 00:49:32,290 Não. 997 00:49:32,290 --> 00:49:37,380 998 00:49:37,380 --> 00:49:39,850 Talvez eu finalmente chegar melhor para os meus e comercial. 999 00:49:39,850 --> 00:49:42,047 >> ALUNO: OK, desculpe, como você conseguiu 100? 1000 00:49:42,047 --> 00:49:42,630 PROFESSOR: OK. 1001 00:49:42,630 --> 00:49:46,594 Assim, a é igual a um vezes c, assim que uma vezes c. 1002 00:49:46,594 --> 00:49:48,510 ALUNO: Oh, você está usando um para o previous-- 1003 00:49:48,510 --> 00:49:49,135 PROFESSOR: Sim. 1004 00:49:49,135 --> 00:49:51,450 Então, esses são os nossos valores mais recentes. 1005 00:49:51,450 --> 00:49:53,990 Estes são o que você deve ser usando como nós nos movemos para baixo, OK. 1006 00:49:53,990 --> 00:49:57,290 1007 00:49:57,290 --> 00:50:01,520 Assim, b é a única coisa que muda, né? 1008 00:50:01,520 --> 00:50:02,910 Então, vamos preencher todo o resto. 1009 00:50:02,910 --> 00:50:09,110 1010 00:50:09,110 --> 00:50:11,330 B. O que é b vai ser? 1011 00:50:11,330 --> 00:50:13,020 1012 00:50:13,020 --> 00:50:14,140 Para ser ou não ser. 1013 00:50:14,140 --> 00:50:18,680 1014 00:50:18,680 --> 00:50:20,240 Então o que é esta fazendo? 1015 00:50:20,240 --> 00:50:21,605 O que é a estrela pa fazendo? 1016 00:50:21,605 --> 00:50:23,280 1017 00:50:23,280 --> 00:50:25,350 >> ALUNO: Código para o local do pa. 1018 00:50:25,350 --> 00:50:26,390 1019 00:50:26,390 --> 00:50:27,480 >> Estudante: Não, não é bem assim. 1020 00:50:27,480 --> 00:50:29,470 Portanto, esta é uma referência d. 1021 00:50:29,470 --> 00:50:31,580 >> Estudante: Então b é o valor de mão pa. 1022 00:50:31,580 --> 00:50:37,340 >> PROFESSOR: Sim, por isso é pa o endereço de um, certo? 1023 00:50:37,340 --> 00:50:42,430 Então ele está dizendo para ir onde a é armazenados e dar-lhe esse valor. 1024 00:50:42,430 --> 00:50:43,884 Então, o que é b? 1025 00:50:43,884 --> 00:50:44,425 ESTUDANTE: 100. 1026 00:50:44,425 --> 00:50:46,534 PROFESSOR: 100. 1027 00:50:46,534 --> 00:50:47,450 Perfeito. 1028 00:50:47,450 --> 00:50:49,879 OK, então pc é o que está mudando. 1029 00:50:49,879 --> 00:50:51,170 Tudo o resto permanece o mesmo. 1030 00:50:51,170 --> 00:50:57,160 1031 00:50:57,160 --> 00:50:58,620 O que é o PC vai ser? 1032 00:50:58,620 --> 00:51:00,770 1033 00:51:00,770 --> 00:51:01,580 Atribuição simples. 1034 00:51:01,580 --> 00:51:03,520 1035 00:51:03,520 --> 00:51:05,990 Pc é igual ao ano, eo que é pa? 1036 00:51:05,990 --> 00:51:07,049 >> ALUNO: Ampersand a. 1037 00:51:07,049 --> 00:51:07,840 PROFESSOR: Perfeito. 1038 00:51:07,840 --> 00:51:09,490 1039 00:51:09,490 --> 00:51:10,740 Agora estamos começando a ficar interessante. 1040 00:51:10,740 --> 00:51:12,310 1041 00:51:12,310 --> 00:51:15,230 OK, vamos quebrar este para baixo. 1042 00:51:15,230 --> 00:51:21,110 Em primeiro lugar, o que é b vezes c, porque isso é a parte mais fácil de um presente, certo? 1043 00:51:21,110 --> 00:51:22,360 B vezes c é-- 1044 00:51:22,360 --> 00:51:23,320 >> ALUNO: 500. 1045 00:51:23,320 --> 00:51:28,880 >> PROFESSOR: Sim, por isso o que é este fazer, 1046 00:51:28,880 --> 00:51:33,705 Se é estrela pb, o que está mudando? 1047 00:51:33,705 --> 00:51:35,320 1048 00:51:35,320 --> 00:51:37,242 >> Estudante: O que está em as-- 1049 00:51:37,242 --> 00:51:38,200 PROFESSOR: O que está em b? 1050 00:51:38,200 --> 00:51:41,340 Estudante: O que é no espaço pb que está apontando. 1051 00:51:41,340 --> 00:51:43,406 PROFESSOR: E pb está apontando a-- 1052 00:51:43,406 --> 00:51:43,905 ALUNO: B. 1053 00:51:43,905 --> 00:51:46,740 PROFESSOR: B. Assim, a única uma coisa que muda é b, certo. 1054 00:51:46,740 --> 00:51:50,800 Então b vezes c, 500. 1055 00:51:50,800 --> 00:51:52,367 Então, isso é o que muda agora. 1056 00:51:52,367 --> 00:51:59,091 1057 00:51:59,091 --> 00:51:59,590 Legal. 1058 00:51:59,590 --> 00:52:00,340 1059 00:52:00,340 --> 00:52:00,840 Adorável. 1060 00:52:00,840 --> 00:52:01,905 Vocês estão indo muito bem. 1061 00:52:01,905 --> 00:52:03,650 1062 00:52:03,650 --> 00:52:06,740 Tudo bem, quebrando um presente para baixo. 1063 00:52:06,740 --> 00:52:08,050 1064 00:52:08,050 --> 00:52:09,630 C está mudando, certo? 1065 00:52:09,630 --> 00:52:11,530 Assim, podemos preencher todo o resto. 1066 00:52:11,530 --> 00:52:12,540 1067 00:52:12,540 --> 00:52:13,205 Vamos ver. 1068 00:52:13,205 --> 00:52:19,125 1069 00:52:19,125 --> 00:52:19,625 Está bem. 1070 00:52:19,625 --> 00:52:21,420 1071 00:52:21,420 --> 00:52:24,740 Sabemos que c vai ser o produto de dois números, certo? 1072 00:52:24,740 --> 00:52:26,290 1073 00:52:26,290 --> 00:52:27,980 Quais os dois números, embora? 1074 00:52:27,980 --> 00:52:28,970 >> ALUNO: A e C? 1075 00:52:28,970 --> 00:52:31,930 >> PROFESSOR: Então é um direita para a primeira. 1076 00:52:31,930 --> 00:52:34,385 Então, estamos fazendo referência d p de um, certo? 1077 00:52:34,385 --> 00:52:35,390 1078 00:52:35,390 --> 00:52:42,870 P de um aponta para um, por isso sabemos que isso vai ser de 100 vezes o que? 1079 00:52:42,870 --> 00:52:46,232 Vezes o que faz ponto para pc? 1080 00:52:46,232 --> 00:52:47,410 1081 00:52:47,410 --> 00:52:48,740 Aponta para um. 1082 00:52:48,740 --> 00:52:55,038 Assim, é 100 100 vezes 10.000. 1083 00:52:55,038 --> 00:52:56,170 Será que isso faz sentido? 1084 00:52:56,170 --> 00:52:57,640 1085 00:52:57,640 --> 00:52:58,200 Legal. 1086 00:52:58,200 --> 00:53:00,500 Trecho inicial, caras, última linha. 1087 00:53:00,500 --> 00:53:01,190 Está bem. 1088 00:53:01,190 --> 00:53:02,160 O que está mudando aqui? 1089 00:53:02,160 --> 00:53:05,640 1090 00:53:05,640 --> 00:53:06,935 >> ALUNO: A. 1091 00:53:06,935 --> 00:53:09,435 PROFESSOR: A. Perfeito, assim tudo pode ficar na mesma. 1092 00:53:09,435 --> 00:53:16,210 1093 00:53:16,210 --> 00:53:16,710 Está bem. 1094 00:53:16,710 --> 00:53:17,970 E o que é um? 1095 00:53:17,970 --> 00:53:23,610 1096 00:53:23,610 --> 00:53:26,060 Portanto, é uma vezes o que? 1097 00:53:26,060 --> 00:53:27,120 Este é estrela pb. 1098 00:53:27,120 --> 00:53:29,750 1099 00:53:29,750 --> 00:53:34,490 Assim estrela pb significa aqui pb, pontos de pb para b. 1100 00:53:34,490 --> 00:53:35,370 >> ALUNO: 500. 1101 00:53:35,370 --> 00:53:36,230 >> PROFESSOR: 500. 1102 00:53:36,230 --> 00:53:39,236 Portanto, temos 500 vezes 100. 1103 00:53:39,236 --> 00:53:41,758 Isso é 50.000. 1104 00:53:41,758 --> 00:53:43,216 Ufa! 1105 00:53:43,216 --> 00:53:45,646 Olhe para isso. 1106 00:53:45,646 --> 00:53:47,982 >> ALUNO: Por que temos o & c para a last-- 1107 00:53:47,982 --> 00:53:48,690 PROFESSOR: Desculpe. 1108 00:53:48,690 --> 00:53:50,080 ALUNO: Oh, OK. 1109 00:53:50,080 --> 00:53:51,600 PROFESSOR: My bad. 1110 00:53:51,600 --> 00:53:52,890 Lotes de escrita. 1111 00:53:52,890 --> 00:53:53,917 1112 00:53:53,917 --> 00:53:54,500 Todo mundo bom? 1113 00:53:54,500 --> 00:53:55,630 1114 00:53:55,630 --> 00:53:56,660 Não é tão ruim, certo? 1115 00:53:56,660 --> 00:53:58,490 Só tem um pouco tempo para trabalhar. 1116 00:53:58,490 --> 00:54:01,080 Se você dividi-la, entender o que cada parte 1117 00:54:01,080 --> 00:54:03,197 está se referindo a-- como com tudo o que é, 1118 00:54:03,197 --> 00:54:05,780 sim-- decompô-lo para o pequeno problemas e, em seguida, se recombinam, 1119 00:54:05,780 --> 00:54:07,345 e você pode fazer algumas coisas incríveis. 1120 00:54:07,345 --> 00:54:08,970 Não são as respostas, mas nós fizemos isso. 1121 00:54:08,970 --> 00:54:10,324 1122 00:54:10,324 --> 00:54:11,115 A aritmética de ponteiro. 1123 00:54:11,115 --> 00:54:13,961 1124 00:54:13,961 --> 00:54:14,460 Ah. 1125 00:54:14,460 --> 00:54:15,510 Minhas mãos estão todos farináceo. 1126 00:54:15,510 --> 00:54:17,970 Assim, adicionando ou subtraindo int ajusta o ponteiro 1127 00:54:17,970 --> 00:54:21,890 pelo tamanho do tipo de ponteiro. 1128 00:54:21,890 --> 00:54:22,940 1129 00:54:22,940 --> 00:54:28,390 Lembre-se de como cada tipo tem um tamanho diferente? 1130 00:54:28,390 --> 00:54:34,890 Assim como um casal ou um longo tempo é oito e int é quatro, mas de char é um deles. 1131 00:54:34,890 --> 00:54:38,360 >> Então, o que você quer fazer é-- uma coisa a lembrar 1132 00:54:38,360 --> 00:54:44,080 é apenas isso o quanto o seu valor do ponteiro realmente muda 1133 00:54:44,080 --> 00:54:46,550 dependerá da tipo de ponteiro que é. 1134 00:54:46,550 --> 00:54:50,820 1135 00:54:50,820 --> 00:54:51,820 Todo mundo bem com isso? 1136 00:54:51,820 --> 00:54:52,760 Posso apagá-la? 1137 00:54:52,760 --> 00:54:53,440 Nós somos bons? 1138 00:54:53,440 --> 00:54:53,940 Impressionante. 1139 00:54:53,940 --> 00:55:01,020 1140 00:55:01,020 --> 00:55:07,501 >> Então, se nós temos algum ponteiro isso-- isso vai ser-- eu sou 1141 00:55:07,501 --> 00:55:08,834 vai torná-lo um ponteiro int. 1142 00:55:08,834 --> 00:55:10,610 1143 00:55:10,610 --> 00:55:12,760 Ele armazena esta. 1144 00:55:12,760 --> 00:55:14,210 1145 00:55:14,210 --> 00:55:20,170 Se você tivesse que dizer ponteiro mais um, o que vai fazer 1146 00:55:20,170 --> 00:55:23,420 é que vai atualizar por isso o tamanho de um int 1147 00:55:23,420 --> 00:55:25,950 porque essa é a tipo de ponteiro que é. 1148 00:55:25,950 --> 00:55:28,260 >> Com C, tudo é muito rigoroso e regulamentado. 1149 00:55:28,260 --> 00:55:29,440 1150 00:55:29,440 --> 00:55:35,260 O ponteiro int vai atualizar por a quantidade de espaço um int tomaria. 1151 00:55:35,260 --> 00:55:36,260 Um int é de quatro bytes. 1152 00:55:36,260 --> 00:55:37,650 1153 00:55:37,650 --> 00:55:39,060 >> Então, o que este se transformar em? 1154 00:55:39,060 --> 00:55:40,876 1155 00:55:40,876 --> 00:55:44,390 Você está apenas a adição de quatro para isso. 1156 00:55:44,390 --> 00:55:50,040 Agora o ponteiro seria ser-- OK. 1157 00:55:50,040 --> 00:55:51,820 1158 00:55:51,820 --> 00:55:55,380 >> Então, se ele era um char e fizemos ponteiro mais um, o que seria agora? 1159 00:55:55,380 --> 00:56:00,300 1160 00:56:00,300 --> 00:56:03,330 Se started-- fingindo que started-- agora é 0x08. 1161 00:56:03,330 --> 00:56:04,850 1162 00:56:04,850 --> 00:56:10,850 Vamos agora dizer que este foi um carbonizar ponteiro, e nós adicionamos um. 1163 00:56:10,850 --> 00:56:11,850 O que seria mudar para? 1164 00:56:11,850 --> 00:56:14,989 1165 00:56:14,989 --> 00:56:16,030 Quantos bytes é um char? 1166 00:56:16,030 --> 00:56:16,680 >> AUDIÊNCIA: One. 1167 00:56:16,680 --> 00:56:17,304 >> COLUNA 1: One. 1168 00:56:17,304 --> 00:56:18,309 AUDIÊNCIA: Então 0x09. 1169 00:56:18,309 --> 00:56:19,600 COLUNA 1: Então seria nove. 1170 00:56:19,600 --> 00:56:22,571 1171 00:56:22,571 --> 00:56:23,820 Portanto, apenas algo para se lembrar. 1172 00:56:23,820 --> 00:56:28,340 Apenas quando você adiciona um, não é adicionando um a menos que seja um char. 1173 00:56:28,340 --> 00:56:34,190 É a adição de quantos bytes do tipo que é, 1174 00:56:34,190 --> 00:56:36,960 que é por isso que temos essa equação aqui. 1175 00:56:36,960 --> 00:56:40,190 Por isso, é int vezes o tamanho do tipo de ponteiro. 1176 00:56:40,190 --> 00:56:42,850 1177 00:56:42,850 --> 00:56:44,730 >> Portanto, temos o exemplo aqui. 1178 00:56:44,730 --> 00:56:47,250 1179 00:56:47,250 --> 00:56:54,430 y foi atribuído a esse valor, 0x4, quando fizemos y mais é igual a um. 1180 00:56:54,430 --> 00:56:56,830 O que está nele, o que é em x, não muda. 1181 00:56:56,830 --> 00:56:58,610 O que muda é o que está em y. 1182 00:56:58,610 --> 00:57:04,980 O endereço armazenado em y atualizado por quatro porque existem quatro bytes num int 1183 00:57:04,980 --> 00:57:06,097 e é um ponteiro int. 1184 00:57:06,097 --> 00:57:07,290 1185 00:57:07,290 --> 00:57:07,790 >> Tudo certo. 1186 00:57:07,790 --> 00:57:09,123 Portanto, agora temos um outro exercício. 1187 00:57:09,123 --> 00:57:11,140 1188 00:57:11,140 --> 00:57:13,500 Portanto, a questão é o que será impresso. 1189 00:57:13,500 --> 00:57:36,710 1190 00:57:36,710 --> 00:57:37,650 Qualquer idéias? 1191 00:57:37,650 --> 00:57:41,690 1192 00:57:41,690 --> 00:57:43,699 >> AUDIÊNCIA: O número de personagens de gato feliz? 1193 00:57:43,699 --> 00:57:44,490 COLUNA 1: Exatamente. 1194 00:57:44,490 --> 00:57:45,531 Assim como com a sua corda. 1195 00:57:45,531 --> 00:57:47,302 1196 00:57:47,302 --> 00:57:48,260 Será que todo mundo conseguiu isso? 1197 00:57:48,260 --> 00:57:49,509 Não queremos passar por ela? 1198 00:57:49,509 --> 00:57:50,300 1199 00:57:50,300 --> 00:57:52,010 >> Sim, OK. 1200 00:57:52,010 --> 00:57:57,385 Então o que temos aqui- I assim muito mais. 1201 00:57:57,385 --> 00:57:59,340 Eu não tenho a [Inaudível] ridiculamente. 1202 00:57:59,340 --> 00:58:01,690 >> Portanto, temos nossa string aqui, gato feliz. 1203 00:58:01,690 --> 00:58:02,950 Adorável. 1204 00:58:02,950 --> 00:58:05,080 Temos que alguns contador nós estamos mantendo o controle de. 1205 00:58:05,080 --> 00:58:11,430 Portanto, temos alguns de char * ponteiro que apenas é igualada a STR. 1206 00:58:11,430 --> 00:58:14,320 O que isto está fazendo é que é atribuir algum ponteiro 1207 00:58:14,320 --> 00:58:16,380 para o início da seqüência. 1208 00:58:16,380 --> 00:58:19,840 Porque eu tenho certeza que, como foi mencionado na palestra, 1209 00:58:19,840 --> 00:58:22,290 demos a vocês esta tipo de dados chamado string. 1210 00:58:22,290 --> 00:58:29,070 >> Mas realmente cordas são apenas uma variedade de-- como char *. 1211 00:58:29,070 --> 00:58:32,330 É um ponteiro para um bando de personagens que são contíguas na memória. 1212 00:58:32,330 --> 00:58:33,680 1213 00:58:33,680 --> 00:58:36,280 Portanto, esta apenas define que igual a qualquer seqüência é 1214 00:58:36,280 --> 00:58:38,980 identificado por onde seu primeiro personagem. 1215 00:58:38,980 --> 00:58:42,710 Portanto, esta é apenas a criação algum ponto igual ao início da cadeia. 1216 00:58:42,710 --> 00:58:44,130 Todos bom lá? 1217 00:58:44,130 --> 00:58:44,960 Legal. 1218 00:58:44,960 --> 00:58:49,840 >> Portanto, esta é dereferencing nosso ponteiro. 1219 00:58:49,840 --> 00:58:53,760 Por isso realmente vai nos dar algum valor aqui, 1220 00:58:53,760 --> 00:58:55,610 em nossa cadeia que estamos falando. 1221 00:58:55,610 --> 00:58:58,342 E nós estamos dizendo desde que não é terminador nulo. 1222 00:58:58,342 --> 00:59:00,550 Então continue indo até você chegar ao fim da cadeia. 1223 00:59:00,550 --> 00:59:02,180 1224 00:59:02,180 --> 00:59:04,190 Atualize seu ponteiro por um. 1225 00:59:04,190 --> 00:59:09,250 Assim, r, ele vai realmente actualizar por um cada vez, porque este é um char, 1226 00:59:09,250 --> 00:59:09,820 o char *. 1227 00:59:09,820 --> 00:59:10,930 1228 00:59:10,930 --> 00:59:12,340 >> Então, ele vai passar. 1229 00:59:12,340 --> 00:59:13,290 Ele vai atualizar. 1230 00:59:13,290 --> 00:59:16,705 Assim, a primeira vez que este é executado, ele vai estar aqui na hora. 1231 00:59:16,705 --> 00:59:17,590 Ele vai atualizar. 1232 00:59:17,590 --> 00:59:18,185 >> Vai ser um a. 1233 00:59:18,185 --> 00:59:21,310 Vai ser um p, y, e assim por diante e assim por diante. 1234 00:59:21,310 --> 00:59:22,300 Vamos atualizar balcão. 1235 00:59:22,300 --> 00:59:26,160 Quando se chega ao final, ele apenas imprime o quão longe ele está ficando. 1236 00:59:26,160 --> 00:59:27,550 1237 00:59:27,550 --> 00:59:28,050 Sim. 1238 00:59:28,050 --> 00:59:31,475 >> AUDIÊNCIA: Então Conta o espaço como um, certo? 1239 00:59:31,475 --> 00:59:31,974 Está bem. 1240 00:59:31,974 --> 00:59:34,294 1241 00:59:34,294 --> 00:59:35,222 >> COLUNA 1: Acho que sim. 1242 00:59:35,222 --> 00:59:36,830 É que uma question-- 1243 00:59:36,830 --> 00:59:37,746 >> AUDIÊNCIA: [inaudível]. 1244 00:59:37,746 --> 00:59:37,968 1245 00:59:37,968 --> 00:59:38,884 >> COLUNA 1: Não se preocupe. 1246 00:59:38,884 --> 00:59:39,720 1247 00:59:39,720 --> 00:59:42,736 Isso eu faço isso. 1248 00:59:42,736 --> 00:59:47,710 Tudo bem, então uma coisa que eu entender é que, com uma matriz, 1249 00:59:47,710 --> 00:59:51,736 você também pode tratá-lo como um ponteiro porque as matrizes são apenas 1250 00:59:51,736 --> 00:59:52,860 manchas contínuas de memória. 1251 00:59:52,860 --> 00:59:53,970 1252 00:59:53,970 --> 00:59:56,380 >> Assim, você pode tratá-lo da mesma maneira. 1253 00:59:56,380 --> 00:59:59,000 Você pode manipulá-los com ponteiros também. 1254 00:59:59,000 --> 01:00:04,770 Então, ao invés de fazer, neste caso, a coisa análoga 1255 01:00:04,770 --> 01:00:07,490 0 seria matriz é igual a 1. 1256 01:00:07,490 --> 01:00:08,760 1257 01:00:08,760 --> 01:00:15,210 >> Mas, da mesma forma que uma string é determinada 1258 01:00:15,210 --> 01:00:18,740 pelo início da onde sua primeira personagem é, 1259 01:00:18,740 --> 01:00:22,270 uma matriz é determinada pela onde o primeiro elemento é. 1260 01:00:22,270 --> 01:00:25,120 Porque nós sabemos, estamos garantido, que estes 1261 01:00:25,120 --> 01:00:27,985 vão ser contínua blocos de memória. 1262 01:00:27,985 --> 01:00:29,360 Isso é o que nos permite fazer isso. 1263 01:00:29,360 --> 01:00:31,193 Sabemos que eles estão contínua blocos de memória. 1264 01:00:31,193 --> 01:00:32,230 1265 01:00:32,230 --> 01:00:36,500 >> Portanto, neste caso, por dereferencing só matriz, que nos diz: 1266 01:00:36,500 --> 01:00:40,800 OK, vá para o início da sua matriz, que é aqui. 1267 01:00:40,800 --> 01:00:42,640 Assim, você pode configurá-lo igual a um. 1268 01:00:42,640 --> 01:00:48,610 E, neste caso, qualquer que seja sua matriz tipo é, quando você atualizá-lo por um, 1269 01:00:48,610 --> 01:00:50,830 isso é apenas como atualizar -lo para o próximo índice. 1270 01:00:50,830 --> 01:00:52,760 1271 01:00:52,760 --> 01:00:56,360 Você pode fazer isso, porque você saber o que está na sua matriz. 1272 01:00:56,360 --> 01:00:59,770 Por isso, sabe o quanto a atualizar o ponteiro por, 1273 01:00:59,770 --> 01:01:02,925 o endereço para atualizá-lo para assim que você é no próximo slot. 1274 01:01:02,925 --> 01:01:04,740 1275 01:01:04,740 --> 01:01:09,400 >> Portanto, esta é apenas uma forma diferente de escrever gama 0 é igual a 1, 1276 01:01:09,400 --> 01:01:15,114 série 1 é igual a 2, array suporte 2 é igual a 3. 1277 01:01:15,114 --> 01:01:16,780 É apenas uma outra maneira de pensar sobre isso. 1278 01:01:16,780 --> 01:01:19,600 Porque eles são contínuas blocos na memória, 1279 01:01:19,600 --> 01:01:21,830 você pode se referir a eles ou pela matriz notation-- 1280 01:01:21,830 --> 01:01:24,390 que eu, pessoalmente, encontrar easier-- mas talvez 1281 01:01:24,390 --> 01:01:27,347 você precisa manipulá-lo estritamente por endereços de memória. 1282 01:01:27,347 --> 01:01:28,930 E esta é a maneira que você faria isso. 1283 01:01:28,930 --> 01:01:30,630 1284 01:01:30,630 --> 01:01:32,630 Tipo de mais ou menos como um coisa legal que você poderia fazer 1285 01:01:32,630 --> 01:01:35,213 contra talvez não algo que você está realmente vai implementar. 1286 01:01:35,213 --> 01:01:36,960 1287 01:01:36,960 --> 01:01:38,630 >> Eu usá-lo em 61. 1288 01:01:38,630 --> 01:01:41,710 Vocês provavelmente não precisa que se preocupar muito com isso. 1289 01:01:41,710 --> 01:01:43,693 Mas se você estiver interessado, ter 61 no próximo ano. 1290 01:01:43,693 --> 01:01:45,269 1291 01:01:45,269 --> 01:01:46,560 Estamos nas caras estiramento casa. 1292 01:01:46,560 --> 01:01:47,510 Eu sei, é muito tempo. 1293 01:01:47,510 --> 01:01:50,570 1294 01:01:50,570 --> 01:01:58,880 Memória Dinâmica Allocation-- por isso sabemos que um 1295 01:01:58,880 --> 01:02:01,790 das coisas quando falamos durante a primeira secção em conjunto, 1296 01:02:01,790 --> 01:02:04,560 nós olhamos para uma troca função onde foi 1297 01:02:04,560 --> 01:02:08,010 fora do âmbito da nossa função principal. 1298 01:02:08,010 --> 01:02:14,370 E nós estávamos passando esses valores que foram eficazmente cópias. 1299 01:02:14,370 --> 01:02:20,570 >> E uma vez terminado de swap execução, ele apenas deixou uma pilha. 1300 01:02:20,570 --> 01:02:22,830 Lembre-se, temos um empilhar quadro para swap. 1301 01:02:22,830 --> 01:02:26,070 Ele deixa e aqueles valores ficar com ele. 1302 01:02:26,070 --> 01:02:27,050 E eles foram embora. 1303 01:02:27,050 --> 01:02:28,615 Nós não podia fazer nada com eles e ficamos tristes 1304 01:02:28,615 --> 01:02:29,989 porque não podemos trocar os nossos valores. 1305 01:02:29,989 --> 01:02:31,070 1306 01:02:31,070 --> 01:02:36,560 >> Mas com C, como eu mencionei, você tem um monte de poder sobre a memória. 1307 01:02:36,560 --> 01:02:43,310 Então, o que você pode fazer é que você pode alocar as coisas na pilha aqui 1308 01:02:43,310 --> 01:02:46,830 que vai ficar lá até de lhes dizer o contrário. 1309 01:02:46,830 --> 01:02:48,280 >> Eles são como bons filhos. 1310 01:02:48,280 --> 01:02:49,150 Eles ficam lá. 1311 01:02:49,150 --> 01:02:50,270 Eles não deixam. 1312 01:02:50,270 --> 01:02:52,750 Eles vão ficar lá até que você esteja como, OK, você pode ir embora. 1313 01:02:52,750 --> 01:02:55,920 >> Considerando as coisas na pilha, who-- eles são como crianças desobedientes. 1314 01:02:55,920 --> 01:02:59,160 Eles só vai fugir quando quiser estar lá e, em seguida, eles se foram. 1315 01:02:59,160 --> 01:03:00,160 Você não pode levá-los de volta. 1316 01:03:00,160 --> 01:03:01,350 1317 01:03:01,350 --> 01:03:07,187 >> Assim, a pilha é-- vamos falar sobre malloc e free, que 1318 01:03:07,187 --> 01:03:08,895 Eu tenho certeza que vocês ouviu falar sobre a palestra. 1319 01:03:08,895 --> 01:03:10,270 1320 01:03:10,270 --> 01:03:14,210 E isso é basicamente uma forma ter dados muito persistentes. 1321 01:03:14,210 --> 01:03:18,920 Assim, você pode manter os dados ao redor contanto que você quiser. 1322 01:03:18,920 --> 01:03:19,546 Hum. 1323 01:03:19,546 --> 01:03:21,475 >> AUDIÊNCIA: Você pode definir heap e pilha? 1324 01:03:21,475 --> 01:03:24,030 Eles são como lugares para colocar as coisas? 1325 01:03:24,030 --> 01:03:26,630 >> COLUNA 1: Então, eles estão basicamente só-- eles são 1326 01:03:26,630 --> 01:03:29,530 a maneira como nos referimos apenas à memória. 1327 01:03:29,530 --> 01:03:37,300 Então pilha é apenas lugares onde memória é alocada dinamicamente, 1328 01:03:37,300 --> 01:03:40,960 Considerando pilha refere-se mais a pilha de quadros 1329 01:03:40,960 --> 01:03:45,950 que são mais central para o funções que são realmente em execução. 1330 01:03:45,950 --> 01:03:47,200 Você realmente não tem controle. 1331 01:03:47,200 --> 01:03:50,690 >> A grande diferença, você tem controle sobre o monte, se você quiser. 1332 01:03:50,690 --> 01:03:52,710 Você tem menos controle sobre a pilha. 1333 01:03:52,710 --> 01:03:55,030 A pilha depende do funções que estão em execução, 1334 01:03:55,030 --> 01:03:58,320 e a ordem na qual eles são correr, e como as coisas são devolvidos. 1335 01:03:58,320 --> 01:04:01,290 Considerando que, com a pilha, como vamos ver, você pode dizer, 1336 01:04:01,290 --> 01:04:06,639 OK, eu quero que esse valor seja ao redor até que eu diga o contrário. 1337 01:04:06,639 --> 01:04:08,180 Você não tem permissão para se livrar dele. 1338 01:04:08,180 --> 01:04:09,300 Você não tem permissão para substituí-lo. 1339 01:04:09,300 --> 01:04:11,675 Você está indo para mantê-lo em torno de durante o tempo que eu lhe digo. 1340 01:04:11,675 --> 01:04:15,780 Você começa a ser o chefe no heap, enquanto o stack-- talvez se você 1341 01:04:15,780 --> 01:04:18,080 como finagle seu caminho você pode ser o chefe. 1342 01:04:18,080 --> 01:04:19,340 Mas não é bem assim. 1343 01:04:19,340 --> 01:04:20,480 1344 01:04:20,480 --> 01:04:22,070 E ele é realmente apenas memória. 1345 01:04:22,070 --> 01:04:24,260 É apenas maneiras diferentes de se referir a memória. 1346 01:04:24,260 --> 01:04:25,800 1347 01:04:25,800 --> 01:04:26,400 >> Legal. 1348 01:04:26,400 --> 01:04:28,630 Então, com isso, a forma de controlar a sua memória. 1349 01:04:28,630 --> 01:04:32,070 É com malloc, que você vai começar a usar. 1350 01:04:32,070 --> 01:04:37,100 Então é só curto para alocação de memória. 1351 01:04:37,100 --> 01:04:38,459 Isso é tudo o que é. 1352 01:04:38,459 --> 01:04:41,250 Há um monte de outras legal funções que têm alloc no final, 1353 01:04:41,250 --> 01:04:42,750 e eles representam coisas diferentes. 1354 01:04:42,750 --> 01:04:43,550 1355 01:04:43,550 --> 01:04:49,050 >> Então, quando você precisar de armazenamento que precisa para durar mais que sua função atual para 1356 01:04:49,050 --> 01:04:51,010 que quando o seu atual função foge, 1357 01:04:51,010 --> 01:04:55,774 você ainda tem os dados que você tenho a partir dele, você quer usar malloc. 1358 01:04:55,774 --> 01:04:57,190 Isso vai inicializar-lo na pilha. 1359 01:04:57,190 --> 01:05:00,140 E como eu disse e manter dizendo, você vai mantê-lo lá 1360 01:05:00,140 --> 01:05:03,050 até que você diga o contrário, que é a coisa importante aqui. 1361 01:05:03,050 --> 01:05:08,450 >> Então, uma coisa a notar, e isso é normalmente muito importante, 1362 01:05:08,450 --> 01:05:13,620 é que este sizeof é super útil para usar 1363 01:05:13,620 --> 01:05:16,440 porque, dependendo do tipo da máquina que você está executando, 1364 01:05:16,440 --> 01:05:22,470 ele pode ter quantidades variáveis de memória que é preciso. 1365 01:05:22,470 --> 01:05:26,870 Assim, você sempre quer usar o tamanho de modo que você não é dependente da máquina, 1366 01:05:26,870 --> 01:05:30,300 de modo que seu código será rodar em qualquer máquina. 1367 01:05:30,300 --> 01:05:32,360 >> E isso é apenas parte de escrever código bom. 1368 01:05:32,360 --> 01:05:34,610 Se ele funciona em uma máquina, mas não qualquer uma das outras, 1369 01:05:34,610 --> 01:05:36,440 quão útil foi o seu programa? 1370 01:05:36,440 --> 01:05:38,420 Assim, você sempre quer certifique-se e usar sizeof. 1371 01:05:38,420 --> 01:05:41,306 >> AUDIÊNCIA: Assim é que, como o tamanho de 10 polegadas [inaudível]? 1372 01:05:41,306 --> 01:05:43,698 >> COLUNA 1: Este é o tamanho de 10 ints. 1373 01:05:43,698 --> 01:05:44,197 sim. 1374 01:05:44,197 --> 01:05:45,360 1375 01:05:45,360 --> 01:05:48,830 Assim, o tamanho de ints voltará quanto é que um int tomar. 1376 01:05:48,830 --> 01:05:51,530 Ou o tamanho do char, como tanto faz um caractere take. 1377 01:05:51,530 --> 01:05:54,150 E então quantos blocos de que você quer? 1378 01:05:54,150 --> 01:05:57,590 >> Portanto, neste caso, queremos algo que pode armazenar 10 ints para. 1379 01:05:57,590 --> 01:06:00,240 E ele vai trabalhar independentemente da máquina, o que é legal. 1380 01:06:00,240 --> 01:06:01,720 1381 01:06:01,720 --> 01:06:04,846 Então, quantos bytes vontade que realmente dar-lhe? 1382 01:06:04,846 --> 01:06:06,190 Matemática rápida. 1383 01:06:06,190 --> 01:06:06,787 >> AUDIÊNCIA: 40. 1384 01:06:06,787 --> 01:06:07,370 COLUNA 1: 40. 1385 01:06:07,370 --> 01:06:07,869 Exatamente. 1386 01:06:07,869 --> 01:06:09,520 1387 01:06:09,520 --> 01:06:12,030 Assim, uma outra grande coisa. 1388 01:06:12,030 --> 01:06:14,840 Ponteiro ou malloc pode retornar nulo. 1389 01:06:14,840 --> 01:06:17,910 >> Então, novamente, sempre verifique a ver se ele retornou nulo 1390 01:06:17,910 --> 01:06:19,620 antes de tentar fazer qualquer coisa com ele. 1391 01:06:19,620 --> 01:06:23,430 1392 01:06:23,430 --> 01:06:27,350 Se você tentar e desreferenciava este ponteiro agora, 1393 01:06:27,350 --> 01:06:29,720 ele só vai segfault porque você foi e tentou 1394 01:06:29,720 --> 01:06:31,730 tocar nulo quando você não deve ter. 1395 01:06:31,730 --> 01:06:34,000 Portanto, verifique sempre para nulo. 1396 01:06:34,000 --> 01:06:36,075 Mais uma vez, tudo o que você pode fazer. 1397 01:06:36,075 --> 01:06:38,300 1398 01:06:38,300 --> 01:06:39,720 >> Ele pode retornar nulo. 1399 01:06:39,720 --> 01:06:42,740 Ele vai retornar nulo se você é ou fora do espaço, ou por qualquer motivo 1400 01:06:42,740 --> 01:06:44,350 ele correu para algum bug de memória. 1401 01:06:44,350 --> 01:06:45,890 1402 01:06:45,890 --> 01:06:47,510 Às vezes, apenas retorna nulo. 1403 01:06:47,510 --> 01:06:48,990 Então, você apenas tem que verificar para ele. 1404 01:06:48,990 --> 01:06:51,050 Isso é tudo que este slide está dizendo. 1405 01:06:51,050 --> 01:06:53,366 1406 01:06:53,366 --> 01:06:55,240 E então o que temos aqui é uma chamada para libertar. 1407 01:06:55,240 --> 01:07:00,550 Assim, da mesma maneira que se abrir um arquivo você deve fechar um arquivo, 1408 01:07:00,550 --> 01:07:04,340 se você memória malloc, você Deve você liberar essa memória. 1409 01:07:04,340 --> 01:07:06,530 E vocês vão começar para fazer coisas bem legais. 1410 01:07:06,530 --> 01:07:09,624 >> E há um programa que você pode executar a veja se você está sempre com vazamento de memória. 1411 01:07:09,624 --> 01:07:11,040 Mas você não quer vazar memória. 1412 01:07:11,040 --> 01:07:11,820 É muito ruim. 1413 01:07:11,820 --> 01:07:13,191 1414 01:07:13,191 --> 01:07:15,020 Apenas a bagunçar tudo. 1415 01:07:15,020 --> 01:07:20,939 >> É ruim para fazer exatamente como a programação sábio para a eficiência do projeto. 1416 01:07:20,939 --> 01:07:22,980 Mas também é só tipo de ruim para o seu computador. 1417 01:07:22,980 --> 01:07:26,780 Então, só coisas livres quando você malloc-los. 1418 01:07:26,780 --> 01:07:28,190 1419 01:07:28,190 --> 01:07:30,210 >> Vocês ver as simetrias aqui. 1420 01:07:30,210 --> 01:07:31,180 Super simples. 1421 01:07:31,180 --> 01:07:33,010 Apenas livre e, em seguida, qualquer que seja o ponteiro, 1422 01:07:33,010 --> 01:07:34,843 qualquer que seja o nome o ponteiro é, e 1423 01:07:34,843 --> 01:07:36,710 vai cuidar de libertá-la para você. 1424 01:07:36,710 --> 01:07:38,200 1425 01:07:38,200 --> 01:07:38,700 Legal. 1426 01:07:38,700 --> 01:07:40,410 1427 01:07:40,410 --> 01:07:42,530 >> Então nós temos isso. 1428 01:07:42,530 --> 01:07:44,770 Então, nós apenas estamos indo para caminhar por este programa. 1429 01:07:44,770 --> 01:07:46,560 E então vocês são feitos. 1430 01:07:46,560 --> 01:07:50,240 >> Então, [inaudível] apenas principal. 1431 01:07:50,240 --> 01:07:51,690 Portanto, temos alguns ponteiro int *. 1432 01:07:51,690 --> 01:07:53,648 Portanto, temos um ponteiro que vai segurar ints. 1433 01:07:53,648 --> 01:07:54,500 1434 01:07:54,500 --> 01:07:56,170 E quantas ints é que vai segurar? 1435 01:07:56,170 --> 01:07:57,400 1436 01:07:57,400 --> 01:07:58,170 Apenas um. 1437 01:07:58,170 --> 01:07:59,400 1438 01:07:59,400 --> 01:08:01,100 Tamanho de um int. 1439 01:08:01,100 --> 01:08:03,900 >> Vamos verificar para ver se ponteiro é nulo porque 1440 01:08:03,900 --> 01:08:06,130 é, queremos dizer não faça nada. 1441 01:08:06,130 --> 01:08:07,065 É ruim. 1442 01:08:07,065 --> 01:08:08,130 1443 01:08:08,130 --> 01:08:12,130 Então, nós imprimir algum erro fora do memória, na maioria das vezes retornar 1, 1444 01:08:12,130 --> 01:08:14,260 como vocês estão acostumados. 1445 01:08:14,260 --> 01:08:17,390 >> E então nós temos aqui, nós desreferenciava nosso ponteiro. 1446 01:08:17,390 --> 01:08:22,840 Então isso significa que nós estamos indo para armazenar algo no local que nos foi dado. 1447 01:08:22,840 --> 01:08:24,350 1448 01:08:24,350 --> 01:08:30,830 Int * ponteiro, ou malloc, retorna o endereço de onde ele reservou esta 1449 01:08:30,830 --> 01:08:31,750 memória para você. 1450 01:08:31,750 --> 01:08:32,830 1451 01:08:32,830 --> 01:08:34,800 Então é basicamente dando-lhe como-- se 1452 01:08:34,800 --> 01:08:38,149 pensar em um monte de casas em um bairro 1453 01:08:38,149 --> 01:08:40,640 que você quer colocar seu mobiliário em, malloc 1454 01:08:40,640 --> 01:08:43,850 é como OK, você recebe para ir para a casa de três. 1455 01:08:43,850 --> 01:08:45,800 E dá-lhe o endereço da casa de três. 1456 01:08:45,800 --> 01:08:48,775 >> Então isso agora, este lojas ponteiro um endereço, 1457 01:08:48,775 --> 01:08:50,149 armazena o endereço de sua casa. 1458 01:08:50,149 --> 01:08:51,470 1459 01:08:51,470 --> 01:08:54,640 * meio PTR, OK, eu estou na minha casa. 1460 01:08:54,640 --> 01:08:55,326 Legal. 1461 01:08:55,326 --> 01:08:56,580 Preciso ter algum inteiro. 1462 01:08:56,580 --> 01:08:59,229 >> Então, você está pedindo para alguém para dar-lhe móveis agora. 1463 01:08:59,229 --> 01:09:00,430 Para que você obtenha algum int. 1464 01:09:00,430 --> 01:09:05,100 E isso coloca-lo em seu ponteiro onde ele está apontando. 1465 01:09:05,100 --> 01:09:08,670 >> E, então, apenas impressões fora, você entrou onde quer. 1466 01:09:08,670 --> 01:09:11,060 E, novamente, a referência. 1467 01:09:11,060 --> 01:09:15,649 Então, isso é como você foi para isso abordar e você viu o que estava lá. 1468 01:09:15,649 --> 01:09:17,120 1469 01:09:17,120 --> 01:09:17,630 Legal? 1470 01:09:17,630 --> 01:09:20,174 >> E então é claro que libertar o nosso ponteiro. 1471 01:09:20,174 --> 01:09:21,590 Não se esqueça de liberar o ponteiro. 1472 01:09:21,590 --> 01:09:22,933 Não se esqueça de verificar para null. 1473 01:09:22,933 --> 01:09:24,349 Não se esqueça de liberar o ponteiro. 1474 01:09:24,349 --> 01:09:27,270 Você tem duas coisas que você recorda de isso, ou que você deve se lembrar. 1475 01:09:27,270 --> 01:09:27,770 Sim. 1476 01:09:27,770 --> 01:09:31,590 AUDIÊNCIA: coisas [inaudível] assim, o char * s. 1477 01:09:31,590 --> 01:09:33,760 Como é que nós nunca libertar aqueles? 1478 01:09:33,760 --> 01:09:34,529 >> COLUNA 1: Hm? 1479 01:09:34,529 --> 01:09:36,450 >> AUDIÊNCIA: São aqueles que, como cordas? 1480 01:09:36,450 --> 01:09:39,160 Você disse que as cordas são como char * s, certo? 1481 01:09:39,160 --> 01:09:41,200 Então, por que não liberar cordas? 1482 01:09:41,200 --> 01:09:43,204 >> COLUNA 1: Você só para livre se você está mallocing. 1483 01:09:43,204 --> 01:09:44,620 AUDIÊNCIA: Ah, se você está mallocing. 1484 01:09:44,620 --> 01:09:47,399 COLUNA 1: Então malloc e livre são duas coisas 1485 01:09:47,399 --> 01:09:49,000 que você deve ter sempre em conjunto. 1486 01:09:49,000 --> 01:09:51,630 f aberto, f perto, duas coisas você deve ter juntos. 1487 01:09:51,630 --> 01:09:54,471 Em ambos os casos, para verificar nulo. 1488 01:09:54,471 --> 01:09:54,971 Sim. 1489 01:09:54,971 --> 01:09:57,130 >> AUDIÊNCIA: Então livre é apenas permitindo que qualquer outra coisa 1490 01:09:57,130 --> 01:09:59,690 para ser armazenado lá depois este programa tem usado? 1491 01:09:59,690 --> 01:10:01,946 >> COLUNA 1: É só dizer, OK, eu estou feito com isso. 1492 01:10:01,946 --> 01:10:03,320 Você não precisa mantê-lo por perto. 1493 01:10:03,320 --> 01:10:05,340 1494 01:10:05,340 --> 01:10:08,190 Caso contrário, seu computador vai apenas gosto de tentar mantê-lo lá. 1495 01:10:08,190 --> 01:10:10,910 E então você corre can't-- em problemas de memória mais tarde. 1496 01:10:10,910 --> 01:10:13,660 Você sempre quer libertá-lo porque ele diz a seu computador, OK, eu sou 1497 01:10:13,660 --> 01:10:15,190 feito com este local de memória. 1498 01:10:15,190 --> 01:10:17,190 Você pode tê-lo de volta para mim para usar mais tarde. 1499 01:10:17,190 --> 01:10:19,250 1500 01:10:19,250 --> 01:10:20,500 Legal? 1501 01:10:20,500 --> 01:10:21,320 Sim. 1502 01:10:21,320 --> 01:10:26,950 >> AUDIÊNCIA: Então nós usamos o% d apenas porque um casal que está voltando, 1503 01:10:26,950 --> 01:10:28,330 ou porque é-- [inaudível]. 1504 01:10:28,330 --> 01:10:30,170 1505 01:10:30,170 --> 01:10:31,620 >> AUDIÊNCIA: Você pode usar% i? 1506 01:10:31,620 --> 01:10:32,760 >> COLUNA 1: Você pode usar% i. 1507 01:10:32,760 --> 01:10:35,052 1508 01:10:35,052 --> 01:10:36,135 Quaisquer dúvidas de última hora? 1509 01:10:36,135 --> 01:10:38,310 1510 01:10:38,310 --> 01:10:38,985 Continue. 1511 01:10:38,985 --> 01:10:40,610 AUDIÊNCIA: Eu só tenho uma pergunta rápida. 1512 01:10:40,610 --> 01:10:50,200 Assim, a variável ptr, that's-- como, com o int * ptr = malloc, 1513 01:10:50,200 --> 01:10:54,142 que está apenas dizendo que é apontando para um lugar em memory-- 1514 01:10:54,142 --> 01:10:55,600 COLUNA 1: Você quer [inaudível]? 1515 01:10:55,600 --> 01:10:58,050 AUDIÊNCIA: --que é o tamanho de-- não, é OK. 1516 01:10:58,050 --> 01:11:01,292 Mas é apenas apontando para um lugar em memória que é como quatro bytes. 1517 01:11:01,292 --> 01:11:02,000 COLUNA 1: Certo. 1518 01:11:02,000 --> 01:11:03,030 1519 01:11:03,030 --> 01:11:07,070 Então malloc o tamanho do int diz: OK, eu estou indo para ir correr, 1520 01:11:07,070 --> 01:11:08,780 encontrar quatro bytes de memória para você. 1521 01:11:08,780 --> 01:11:10,700 Quando se descobre que quatro bytes de memória, 1522 01:11:10,700 --> 01:11:14,030 lhe dá de volta o endereço de onde ele começa, 1523 01:11:14,030 --> 01:11:16,160 e é isso que armazenado no ponteiro, ou PTR. 1524 01:11:16,160 --> 01:11:17,510 1525 01:11:17,510 --> 01:11:18,010 Boa. 1526 01:11:18,010 --> 01:11:18,742 1527 01:11:18,742 --> 01:11:21,700 Vocês parecem menos confuso do que a maioria pessoas quando falo de ponteiro, 1528 01:11:21,700 --> 01:11:23,670 assim que eu estou me sentindo muito bem agora. 1529 01:11:23,670 --> 01:11:24,520 >> Tudo certo. 1530 01:11:24,520 --> 01:11:27,960 Como sempre, vocês devem ter todos começado suas notas pset2 até agora. 1531 01:11:27,960 --> 01:11:32,769 Eu sei que tem havido alguns instável coisas onde se diz, fórmula não é válido 1532 01:11:32,769 --> 01:11:33,310 ou algo assim. 1533 01:11:33,310 --> 01:11:36,166 Se você está recebendo esse, todos suas notas são válidos do meu lado. 1534 01:11:36,166 --> 01:11:38,040 Então eu posso enviar-lhe screenshots de suas notas. 1535 01:11:38,040 --> 01:11:39,011 1536 01:11:39,011 --> 01:11:41,760 Apenas deixe-me saber bem se você estiver faltando quaisquer notas ou algo 1537 01:11:41,760 --> 01:11:43,060 não parece fazer sentido. 1538 01:11:43,060 --> 01:11:43,720 Venha até mim. 1539 01:11:43,720 --> 01:11:44,830 1540 01:11:44,830 --> 01:11:48,830 >> Tenho sido super orgulhosa de você caras já, de modo a manter-se. 1541 01:11:48,830 --> 01:11:50,640 E ter um bom resto de sua semana. 1542 01:11:50,640 --> 01:11:53,440 Eu tenho certeza que vou ver alguns de você no horário de expediente. 1543 01:11:53,440 --> 01:11:55,414