ALLISON BUCHHOLTZ-AU: Ei, todo mundo.
Bem-vindo à seção.
Hoje é apenas vai ser tudo o questionário revisão para o seu teste na quarta-feira.
Espero que todo mundo se lembra que eles têm um quiz na quarta-feira.
E se você não o fez, bem, agora que você foi lembrado.
Então, quarta-feira, certifique-se mostrar-se para a classe ou outras acomodações como
necessário.
Vocês estão indo para ser incrível.
Vai ser ótimo.
E eu vou fazer tudo que eu puder para ajudar a se preparar hoje para o seu questionário
agora.
E também no caso de você não sei, existe um campo de sessão de revisão ampla
hoje, às 07:00, em Laboratórios Noroeste B103 quarto.
Você pode me ver de novo para um encore como Vou levar parte dessa sessão de revisão
também.
Então, se você não pode obter o suficiente de mim Agora, você pode vir de novo hoje à noite.
>> Todos, então primeiro coisas certas primeiro.
Apenas algumas dicas do quiz antes realmente mergulhar em comentários.
Assim como acontece com qualquer exame, a prática vai certamente ajudá-lo.
Existem provas do passado seis ou sete anos lá,
de modo que é um monte de prática material para que vocês têm.
E, de fato, hoje é realmente apenas estar indo sobre quaisquer temas
que vocês têm perguntas sobre como bem como trabalhar através de problemas práticos
do questionário zero.
Então, eu vou vomitar questionário de zero desde o ano passado aqui,
e podemos trabalhar com todos os problemas que vocês gostariam.
>> Assim praticando.
Você vai começar a fazer isso hoje.
Código no papel.
Então, sim, se todos realmente pode sair
papel, que vai ser ótimo, porque você não é
vai ter o seu computador na exame e escrevendo código manualmente
muitas vezes é muito mais difícil do que você poderia esperar.
Você está acostumado a apenas vê-lo e digitá-lo,
e você tem seu compilador para ajudá-lo quando você tem erros,
mas você não conseguir isso no exame.
Então, é realmente importante para realmente ser capaz de escrever o código,
e que a memória muscular de fazer tudo na mão realmente irá ajudá-lo.
>> Então, nós estamos ficando um pouco perto.
É segunda-feira.
Seu exame é na quarta-feira.
Mas se você tiver tempo, assumir definitivamente uma
dos exames do ano passado ou o ano antes sob a restrição de tempo
de uma hora e meia.
Apenas bater para fora uma hora e uma metade do tempo,
e sentar-se para baixo, e apenas trabalhar com os problemas
como se fosse verdade tomá-lo, porque um
das maiores coisas que ouvimos sobre os testes é que eles são muito longo.
É uma grande quantidade de material.
Há um monte de perguntas, ea maioria das pessoas pode não terminar.
Eu sei que eu totalmente não terminou meus testes quando eu tirei a classe.
>> Na mesma nota, como uma menor seção confortável,
entender que este curso se destina para atender a pessoas de todos os níveis.
Toda a razão que temos de dividir menos confortável, em algum lugar entre,
e é mais confortável para tipo de torná-lo mais justo.
E se você é menos confortável, é não é necessário por si para obter tudo.
Como se você estivesse recebendo tudo, você provavelmente
estar na seção mais confortável.
Então, obviamente, não bater-vos muito difícil se você não pode terminar o exame.
Tire isso de mim, eu não fiz isso.
Eu ainda sou um concentrador.
Eu ainda estou ajudando ministrar o curso.
Você vai ficar bem.
Tudo certo.
E, finalmente, dormir um pouco.
Obviamente, com qualquer exame sempre dizemos isso.
Congestionamento na noite anterior e não conseguir dormir
faz não-- talvez se que funciona para você, vá para ele.
Mas, para a grande maioria de pessoas, ficando um pouco de sono,
deixar o seu descanso do cérebro e recuperar antes de vir para o exame
realmente vai ajudá-lo.
Também haverá quase certamente doces no exame,
então você tem que olhar para frente.
Vocês vão fazer grande.
Ele vai ficar bem.
E agora na próxima hora e meia eu vai tentar prepará-lo da melhor maneira que eu puder.
>> Então, eu tenho slides basicamente todas as seções até agora.
Eu não vou passar por todos eles, porque isso não é
viável em uma hora e meia, bem como trabalhar através de problemas práticos.
Então, ao invés Eu tenho uma lista de tópicos.
Estas são todas as coisas que pudéssemos interrogar sobre si.
Se há uma coisa que realmente salta para fora
que pretende passar por cima, que você quer que eu vá mais conceitualmente,
Eu posso tentar dar uma visão geral lá.
Ou se você quiser saltar para a direita para fazendo prática problemas juntos,
nós podemos fazer isso.
Cabe a vocês.
Não há que muitos de vocês.
Então, é tudo o que vocês gostam de fazer.
Eu quero ser o mais útil para vocês.
Então eu vou deixar você só olhar.
>> AUDIÊNCIA: Uma coisa é o gráfico que mantemos
dizendo sobre a pilha eo heap.
Apenas a idéia por trás que e que isso significa.
ALLISON BUCHHOLTZ-AU: Sim, OK.
Este é todo o caminho no final, então deixe-me percorrer.
>> AUDIÊNCIA: Não temos a fazê-lo agora, mas o que quer.
>> ALLISON BUCHHOLTZ-AU: Houve anything-- este.
É este tipo de fuzzy para as pessoas?
AUDIÊNCIA: Sim, eu concordo.
E podemos também fazer buffer overflow?
ALLISON BUCHHOLTZ-AU: Buffer overflow?
Está bem.
Então estouro de buffer é muito fácil apenas para falar.
É basicamente buffers você pensa sobre alguma memória matriz que você tem, certo?
Nós normalmente falamos sobre buffer overflow quando
você não está verificando o quanto o usuário está colocando em, certo?
E a idéia de com estouro de buffer é
eles estão colocando em muito muitos dados para o espaço
que você tenha alocado para eles, certo?
>> Então, se você diz, dar me alguma mensagem, estamos
assumindo que eles vão dar nos uma mensagem comprimento razoável.
Talvez linhas de um casal, outros enfeites.
Então, nós não verificar.
Em vez disso, nos alimentar em um todo livro que é uma mensagem,
e transborda a quantidade de espaço que temos alocado para isso.
E o que acontece é que poderia substituir lugares que não é suposto.
>> Então eu sei que o professor disse Malan algo sobre ataques de estouro de buffer.
Então é aí que a entrada de vontade do usuário alguns enorme quantidade de dados na esperança
que ele substitui passado o final de seu buffer
e substitui something-- eu me pergunto Eu temos essas lâminas aqui.
Eu não acho que nós temos esses slides em aqui.
Mas, basicamente, ele substitui alguma porção da memória
que permite-lhe o acesso às partes de seu computador
que você não faria normalmente tem acesso.
>> Coisa maior com buffer overflow é apenas
a entender que acontece quando você não está
verificar o quanto o seu usuário está colocando em.
Quando não são o tipo de salvaguarda contra isso.
E na sua forma mais simples coisa, é apenas o seu usuário
introduzindo uma enorme quantidade de dados na tentativa
para substituir alguma segurança parte de sua memória.
Isso é tudo o que é.
>> Portanto, este aqui, pilha e heap.
Basicamente tudo isso é é apenas uma representação de memória
e onde as coisas são guardadas.
Isso é realmente uma espécie de tudo que você precisa saber.
As maiores coisas que você precisa saber são
isso-- deixe-me ver se há uma melhor-- aqui.
Portanto, esta é a pilha aqui.
>> Então pilha tem a ver com todas as suas funções
que você está chamando a qualquer momento.
E o que é importante lembrar saindo da semana passada com malloc
é que você realmente não tem controle necessário sobre ele.
Tudo depende de quando certa funções estão sendo executadas.
E quando eles estão executando, eles tem o que são chamados de quadros de pilha
que ir até aqui.
>> Por isso, todo o tipo de acontece sem qualquer participação real a partir de você.
Você escreve o seu programa, e você deixá-lo correr,
e o tipo de pilha leva cuidar de si mesmo como ele precisa.
Então, se no principal que você está chamando cubo, que será passado para cá.
Ele vai criar um quadro.
Mas não há nada que você explicitamente fazer para criar esse quadro de pilha diferente
escrever a função, para começar, OK?
>> O que é uma espécie de sob o controle é a pilha com malloc.
Assim, sempre que você malloc alguma coisa, você está tomando a memória da pilha.
E essa é a memória que você têm, por falta de uma palavra melhor,
controle explícito sobre, pois lembre-se com malloc
é basicamente lá até que você diga o contrário.
Para aqueles de vocês que seção assistiu na semana passada,
ele está lá até que você diga a ele para ir embora.
Ele vai estar lá, a menos caso contrário, não disse.
Assim, a pilha é apenas algo você pode pensar em como a memória
que você tem controle sobre.
E esses são apenas o duas grandes coisas diferentes.
>> Fora isso, você não deve ter se preocupar muito sobre pilha e heap
perguntas ou tipicamente mais justo se você tem parâmetros locais
ou uma função seria na pilha ou heap.
Obviamente, neste caso seria a pilha.
Se você está mallocing alguma coisa, onde é que vem?
O heap.
Se você olhar para testes práticos, aqueles são geralmente do tipo de perguntas
que eles têm.
>> Você não precisa se preocupar muito sobre isso.
Você entrar em mais explicitamente sobre pilha e heap
mais tarde ou em outras classes de CS.
Então, basta ter uma espécie de idéia geral do que isso é
vai ser bom, que eu apenas uma espécie de passou.
Quaisquer outros temas?
Sim?
>> AUDIÊNCIA: Você pode passar por cima de ponteiros de novo muito rapidamente?
ALLISON BUCHHOLTZ-AU: Ponteiros?
Você quer conceptual Resumo dos ponteiros
ou você pratica com ponteiros?
AUDIÊNCIA: Assim como a sintaxe.
ALLISON BUCHHOLTZ-AU: A sintaxe?
Sim.
OK, estamos chegando lá.
Sim, por isso esta é apenas uma espécie de algo quando você tem uma função recursiva,
cada vez que a função recursiva é chamado, ele só acrescenta outro quadro de pilha.
Praticamente um exemplo de como você realmente não
tem controle sobre o quadros em seu stack.
>> OK, ponteiros.
Tudo bem, então a criação de ponteiros.
Lembre-se, é só digitar estrela.
Assim, qualquer tipo de dados que você vai estar apontando para.
Portanto, este seria um ponteiro para um int.
Este seria um ponteiro para um char.
Este seria um ponteiro de um flutuador.
Por isso é basicamente o que quer você quer que ele seja apontando,
estrela é como você declarar o ponteiro, OK?
>> Mas, então, obviamente, fica um pouco complicado quando você tem pointer
ou o que quer que você tem estrela.
Assim, a grande diferença é quando você está declaring--
por isso temos some-- assim isso leva algum int estrela.
Portanto, este é um ponteiro chama de x para um int, certo?
Então lembre-se que isso faz É esta chama o sistema x.
E isso vai tem algum endereço, certo?
Então vamos apenas dizer que este é o nosso endereço.
Ponteiros segurar endereços.
Então, o que isso diz é que, neste localização, estamos armazenando um int.
>> Assim, uma outra forma, podemos pensar em isto é que este é um int.
Nós realmente não temos atribuído a nada ainda, mas é apenas um int.
Então o que podemos fazer é se nós estrelar x é igual a 5, isso se torna um 5, OK?
Isto diz para ir para qualquer x é apontando para, então vá a este endereço
e torná-lo igual a 5.
Então vamos atribuir 5 para este endereço, certo?
>> E então, se você fizer isso, isso nos dá o endereço de.
Este é o endereço do operador.
Então, qual é o endereço de x?
Nós não sabemos.
Nós não lhe é atribuído um endereço.
Poderíamos dizer que é some-- agora demos que um endereço, de modo que o endereço é 4.
E, na verdade, se passar por algo assim, o tipo do que nós fizemos.
Então, trabalhando através de aqui- eu encontrar ajuda se você tirar os ponteiros.
Se você estiver em seu exame, eu recomendo caixas de desenho.
>> Portanto, este primeiro, int x é igual a 5.
Isto apenas significa que temos alguma colocar na memória que é 5, certo?
E a nossa mesa aqui nos diz que é no endereço 0x04.
E então criamos alguns ponteiro.
Então, vamos decompô-lo um de cada vez.
Então isso cria alguns caixa para um int, certo?
Ele vai segurar algum endereço de uma lo.
Portanto, este é um ponteiro.
E este giz é realmente pequena.
Portanto, temos alguns ponteiro aqui.
E a nossa mesa nos diz que é o endereço é 0x08.
Legal.
E estamos atribuindo -lo para o endereço de x.
>> Lembre-se, os ponteiros segurar endereços, OK?
Portanto, se queremos manter x, temos usar o operador de endereço, que
é o comercial, para obter o endereço de x, que neste caso, 0x04.
E então, se temos alguma cópia int, isso só
cria alguma outra caixa que detém uma cópia int chamado.
E se nós atribuí-la a isto-- por isso este é referência a ele.
Então ele diz que quer ir para ponteiro endereço detém.
Ponteiro ocupa este endereço, então nós iríamos até aqui,
e dizemos: OK, o que está nele?
É 5.
Assim, torna-se cópia 5.
Faz sentido?
>> E se eu tentasse atribuir isso só ponteiro.
O que faz ponteiro realmente iguais?
Seria apenas o que ponteiro contém, certo?
E então o que se eu fizesse isso?
O que cópia ser agora?
>> AUDIÊNCIA: 0x08.
ALLISON BUCHHOLTZ-AU: Sim, o endereço do nosso ponteiro.
Qualquer parte que que precisa ser re-explicado?
Legal.
Há definitivamente um muito problema diversão em um questionário
que podemos sobre essa dá-lhe mais prática.
Os caras da semana passada pode dizer-lhe que não era tão ruim assim.
Temos através de um todo gráfico, e todos fizeram grande.
>> OK, então isso é visão geral de sintaxe de ponteiros.
Maior coisa é entender como para criá-los, fazê-referenciamento,
e endereço, OK?
Legal.
Quaisquer outros temas antes mergulhamos em prática.
Além disso, se estamos passando por os problemas de prática
e há algo que você quer um reciclagem, podemos fazer isso também.
Você tem alguma coisa?
>> AUDIÊNCIA: Estruturas e listas ligadas.
ALLISON BUCHHOLTZ-AU: Structs e listas ligadas, OK.
Então estruturas.
Nós, na verdade, estão indo sobre isso esta noite também.
OK, então estruturas.
Estruturas são, basicamente, apenas uma maneira para que você mantenha
vários valores de diferentes tipos.
Assim, com uma matriz estamos contraiu a um tipo de dados.
Nossa matriz ou tem que ser apenas números, ou ser apenas caracteres, ou ser apenas carros alegóricos.
>> Mas talvez você precisa conter mais do que isso.
Talvez você precisa hold-- se você está falando de um aluno,
você vai ter a sua casa, a sua Número de identificação, sua idade, onde moram,
certo?
E todos aqueles que são diferentes tipos de tipos.
Então você não pode armazenar todos aqueles em uma matriz.
>> Então, o que você pode fazer é você pode criar um struct, que
você pode pensar que o seu próprio tipo de dados pessoais.
Então, ao invés de apenas ter ints e em vez de apenas ter carros alegóricos,
você pode ter um aluno tipo que tem todos esses campos na mesma.
Então, a nossa forma de inicializar nossas estruturas é-- realmente
desde a minha escrita é terrível, nós vão fazer a transição para a digitação.
Woo.
>> OK, por isso, se queremos criar um struct-- Eu estou indo só para ele aqui.
Desconsidere o principal em tudo o que que usaremos mais tarde.
Assim, a maneira que você quer fazer é com typedef struct.
E vamos chamar esse aluno porque é isso que eu estava usando.
OK, então typedef significa que você está a definição de um novo tipo, OK?
Há nuances em quando você faz apenas um struct contra um struct typedef.
Para todas as intenções e propósitos, vocês são apenas
vai assumir que eles estão aproximadamente o mesmo e apenas
usar typedef struct para agora.
Ele vai se tornar muito mais aparente em sua próxima P definir o que essas diferenças são,
mas eu não acho que você precisa se preocupar com isso agora.
Eu prefiro muito mais você sabe como criar um,
acessá-lo, e atribuir [? valor. ?]
>> Um novo tipo de estrutura, e estamos chamando-o de estudante.
Então, depois que terminar de criar este, para todos os efeitos,
você vai ter um tipo chamado aluno.
E você pode pensar nele apenas como um tipo como um int ou um float, ou um char.
É apenas um outro tipo, OK?
>> Assim, no presente, o que temos?
Temos talvez um nome.
Então talvez nós queremos um nome de cadeia.
E nós temos talvez um int que é um ID.
E nós temos um outro em que é o número de telefone.
E nós temos some-- vamos ver.
O que mais podemos ter?
Nós vamos ter alguma corda em sua casa.
Todas as coisas que um estudante tem.
>> Então, isso cria um struct agora.
Então, como podemos criar um estudante?
Se tivermos alguma variável que está vai falar sobre Walker aqui,
então nós estamos apenas have-- vai chamar este andador.
Ele precisa de um tipo.
Qual é o seu tipo?
AUDIÊNCIA: Estudante.
ALLISON BUCHHOLTZ-AU: Estudante.
Então, isso apenas cria um objeto que você pode pensar que tem todas essas coisas.
Você acabou de criar um estudante walker.
Então, agora nós precisamos ser capazes para atribuir tudo isso, certo?
Então, alguém se lembra como temos acesso dentro de um struct?
AUDIÊNCIA: Período.
ALLISON BUCHHOLTZ-AU: Período Exatamente.
Então, se quiséssemos atribuir lhe um nome, nós poderíamos fazer isso.
Obviamente, isso faria ser-- esta parte aqui seria
estar dentro principal, de modo na verdade, deixe-me fazer isso.
Declare esta acima principal, para que podemos usá-lo dentro principal.
Então agora eu quero que ele faça ID, e vamos fazer alguma lá,
e depois vamos atribuir uma casa.
Bam.
Legal.
>> Portanto, agora devemos sempre precisam de acesso nada mais tarde on-- talvez nós--
se alguma vez precisar acessar qualquer coisa, vamos fazer um ID int cópia.
E eu quero copiar ID para este Walker.
Como eu poderia fazer isso?
Você precisa acessar dentro do walker struct de [? ir para que?] [? E?].
E, do mesmo modo que nós atribuiu-se aqui, como
poderemos acessá-lo quando queremos dar esse valor para algo mais?
AUDIÊNCIA: Walker.id.
ALLISON BUCHHOLTZ-AU: Sim, exatamente.
Então, isso é tudo muito bonito que você precisa saber para estruturas.
Você só precisa pensar em -los como uma outra variável.
Basicamente a criar o seu próprio tipo de variável, OK?
Você usá-lo para declarar variáveis ​​em qualquer forma.
Aqui walker ainda é uma variável.
Ele só tem um aluno tipo agora, em vez de um int tipo, ou um tipo string,
ou um tipo char.
Se houvesse uma maneira fácil de falar sobre estruturas, é literalmente apenas um
criar o seu próprio tipo de dados que permite que você agrupe
todas estas diferentes tipo de dados em conjunto.
Será que isso faz sentido?
Está bem.
Isso e acessar com pontos.
Praticamente tudo que você precisa.
>> OK, onde foi o meu PowerPoint ir?
Aqui está.
Bem, isso é estranho.
Aha.
OK, legal.
Quaisquer outras coisas ou nós quer ir para a prática?
Prática?
Está bem.
Impressionante.
Eu vou sair desta.
Se em qualquer momento durante questões práticas,
Estou feliz por renovar e passar por coisas.
Então, eu tenho questionário zerar até aqui.
Se vocês querem puxar lo em seu computador,
assim como levar de cinco minutos para percorrer.
Talvez escolher alguns topo perguntas que você quer passar por cima.
Se vocês não podem decidir, nós vamos lentamente começar a trabalhar com eles,
mas eu tenho certeza que vai ser um pouco perguntas que são particularmente
ansioso para falar e ter me trabalhar com com todos vocês.
Então, basta ir em frente e tomar cinco minutos.
Percorra.
E este é o teste a partir de 2013.
>> AUDIÊNCIA: Zero?
>> ALLISON BUCHHOLTZ-AU: Sim, quiz zero.
Nós não estamos fazendo um teste de material.
Faremos isso em algumas semanas.
Também para aqueles de vocês que veio no final, temos doces,
por isso que vocês querem doce?
>> AUDIÊNCIA: Claro.
>> ALLISON BUCHHOLTZ-AU: Eu sou apenas vai passar ao redor.
Ei, se vocês chegarem aqui cedo, você tem mais doces.
Isso é bom.
Ben, você quer doces?
Você quer algum destes?
Há também Snickers se alguém quer Snickers.
Eu vou deixá-los aqui e aqui.
Sinta-se livre.
Você quer mais?
AUDIÊNCIA: tudo pronto.
Obrigado.
>> ALLISON BUCHHOLTZ-AU: E eu tinha um bom pequena pilha lá no início.
Vocês começar a fazer o teste e Eu começo a ter uma festa de questionário classificação.
É o caos.
900 exames.
Vai ser muito divertido.
Vai ser ótimo.
Tenho certeza de que essa é uma da maior ligação pessoal
noites do ano.
Alguém já fez teste de zero a partir de ainda no ano passado, por curiosidade?
>> AUDIÊNCIA: As partes dele.
>> ALLISON BUCHHOLTZ-AU: Partes dele, OK.
Você tem perguntas sobre qualquer um deles?
AUDIÊNCIA: Eu já foi para o horário de expediente.
Obrigado embora.
ALLISON BUCHHOLTZ-AU: Bem, espero que ainda é tipo de útil.
Quando você vai para o horário de expediente para isso?
AUDIÊNCIA: Meu TF tinha-lhes esta tarde.
ALLISON BUCHHOLTZ-AU: Oh.
Quem é o seu TF?
AUDIÊNCIA: Fred [? Wujaya?].
ALLISON BUCHHOLTZ-AU: Há tantas TFs.
Tantos.
Tudo certo.
Alguém tem alguma para começar o que eu posso anotar que queremos trabalhar?
Eu suponho que os ponteiros um com a tabela.
Vá em frente.
>> AUDIÊNCIA: Talvez a chave de um.
ALLISON BUCHHOLTZ-AU: Então o número 12?
Presumo número 8 e 9 são provavelmente aqueles que as pessoas querem passar por cima.
>> AUDIÊNCIA: E 10 e 11.
>> ZAMYLA Chan: E vocês sabem você recebe uma página de anotações, certo?
>> AUDIÊNCIA: Sim, então o que são estamos autorizados a colocar sobre isso.
>> ALLISON BUCHHOLTZ-AU: Você está autorizado para colocar o que quiser.
E ele pode ser digitado.
Tanto quanto me lembro, nossos foram digitados.
>> AUDIÊNCIA: Você pode fazer costas e ambos os lados?
>> ALLISON BUCHHOLTZ-AU: Sim, ambos os lados.
Portanto, algo como a pilha e [? back-end?] montão, sua corrida
vezes.
Útil.
Talvez pequenas coisas sobre ponteiros para lembrá-lo.
Sintaxe para as coisas.
Tendo como um esqueleto programa pode ser super útil.
Eu sei que eu sempre esquecia exatamente o que Era para eu escrever para int main,
porque eu sempre basta copiar colar do meu set anterior P
ou ele já está lá, então Eu realmente nunca escreveu,
assim que ter que pode ser super útil.
>> OK, então por que não nós começar com o número 8, então?
Tudo certo.
Está bem.
Por isso, considero o programa abaixo.
Então, obviamente, quando vemos ponteiros, é provavelmente
uma boa idéia para começar a desenhar, né?
Eu quero saber onde todo o meu grandes pedaços de giz foi.
Este é tipo de chato.
>> Portanto, temos aqui alguns função swap que vai levar em dois ponteiros.
Portanto, neste caso, eles realmente deve ser a mudança
coisas contra a nossa troca de originais função que só levou em cópias.
Então, o que ele vai fazer é-- vamos começar com principal,
porque é onde 1 é.
>> Portanto, temos alguns int x 1.
Temos alguns y que é igual a 2.
E então nós temos alguma troca que vai levar os.
E vamos ver o que temos aqui.
E no nosso mesa-- oh boy.
Como é que eu vou fazer isso?
Vou desenhar a minha mesa aqui.
Fazendo mal lá.
Fazendo mal.
1, 2, 3, 4, 5, 6, 7.
E eles nos dão de que um é um, e 1 2.
Legal.
Impressionante.
Então 3.
E não há [? 1. uma?]
>> Tudo certo.
E então o endereço de x é 0x123.
E y é Ox127.
Legal.
Tudo certo.
Eu quero que vocês trabalhar neste para o trabalho apenas como-- nele
com as pessoas ao seu redor.
Eu gostaria de ter dito que enquanto eu estava montando.
Trabalhar nele.
Experimente e trabalhar nele por vos por alguns minutos,
e depois vou trabalhar nisso com você.
Porque a única maneira que você é realmente vai aprender é fazendo isso sozinho.
Não se preocupe.
Boa sorte.
>> OK, por que não nós lentamente começar a trabalhar por isso.
Então, todo mundo fica após a linha um, x é 1.
Depois linha dois, X e y são 1 e 2, certo?
Legal.
Então linha de três é onde as coisas ficar interessante, claro.
>> Então, o que nós fizemos aqui é que temos agora trocados.
Dizemos que x e y têm esses pontos, ou eles têm o endereço de x e y,
certo?
Portanto, neste caso, três, o que é o valor de um?
um tinha sido transmitido, foi dada o valor do endereço de x, certo?
>> AUDIÊNCIA: 1?
>> ALLISON BUCHHOLTZ-AU: Então, nós adicioná-lo à x?
Qual é o endereço de x?
>> AUDIÊNCIA: 0x123.
>> ALLISON BUCHHOLTZ-AU: Exatamente.
Mas o que é uma verdade, apontando para?
Se fôssemos para excluir a referência a, qual o valor que nos daria.
AUDIÊNCIA: 1.
ALLISON BUCHHOLTZ-AU: Seria dá-nos um, porque o que
nós estamos dizendo é ir a este endereço, diga-nos qual é o valor.
Então, o que seria b?
>> AUDIÊNCIA: 0x127.
ALLISON BUCHHOLTZ-AU: Exatamente.
Por isso, é o endereço do y.
E então o que [? desreferenciava? ?]
AUDIÊNCIA: 2.
ALLISON BUCHHOLTZ-AU: OK, então agora quatro.
Dissemos um é equal-- bem agora temos feito int temperatura é igual a estrela de um.
Então, o que muda?
Só há uma coisa que muda aqui.
O que é isso?
>> AUDIÊNCIA: Temp.
ALLISON BUCHHOLTZ-AU: O temporário.
Assim, podemos reescrever tudo isso.
Uma boa estratégia para estes é apenas descobrir
quais as mudanças, porque na maioria das vezes só há uma coisa que é
vai mudar em um determinado ponto, OK?
Então, nós temos atribuído temporário.
>> Agora nosso próximo ponto, cinco, nós ter feito uma estrela igual para estrelar b.
Então, o que muda agora?
>> AUDIÊNCIA: estrela a.
>> ALLISON BUCHHOLTZ-AU: estrela um, de modo tudo o resto permanece o mesmo.
E o que estrelar um igual?
>> AUDIÊNCIA: 2.
ALLISON BUCHHOLTZ-AU: 2.
Adorável.
Impressionante.
OK, e então agora temos iniciar b é igual a temperatura.
Então, a única coisa que a mudança é a estrela b.
Tudo o resto permanece o mesmo.
E o que é estrela b igual a agora?
E você já completou a mesa.
Porque agora, no final, se dissermos x e y, sabemos que neste ponto--
sabemos que quando nós mudou estrelar um para dois,
o que fez é que disse OK, em abordar 0x123 aqui, alterá-lo.
Agora, este foi 2.
E, em seguida, neste ponto, dissemos OK, vá para estrelar b.
Então, vá para o endereço em 0x127 e torná-lo um 1.
Então, agora no final, quando nós realmente voltar para o principal,
nós realmente temos que x é igual a 2 e y é igual a 1.
Todo mundo bem com isso?
OK, legal.
Número 9.
Vocês trabalham com isso.
Vou criar um conselho para que possamos chamar por ela.
Vai ser uma explosão.
As grandes mesas podem ser realmente assustador, eu sei.
Mas se você simplesmente levá-los uma linha de um tempo, eles ficam muito menos assustador.
Tudo certo.
>> Então você sabe que isso terá atravessado principal em primeiro lugar, certo?
Inicializa x e y e então tenta trocá-los.
Assim, mesmo swap é acima, forma real que vai é que estamos passando principal,
e então ele está chamando até trocar, tudo bem?
Então, todo mundo sabe disso.
>> Então, qual deles você caras querem começar?
Alguém está realmente certo sobre um destes?
Ou mesmo parcialmente certo?
Por que não começar com x?
O que pensamos x é?
>> AUDIÊNCIA: 1.
ALLISON BUCHHOLTZ-AU: 1.
Então por que é 2.
E isso porque o grande distinção aqui
é que só são passando cópias, certo?
Nós não estamos passando por referência.
Assim, mesmo no final do este programa x e y
ter permanecido o mesmo, porque eles são apenas cópias na função swap.
Eles realmente não mudar, certo?
>> Então, o que acontece com a, b, e temperatura?
>> AUDIÊNCIA: a é b.
>> ALLISON BUCHHOLTZ-AU: a é b.
Portanto, neste caso, uma era x, que é um, certo?
Então, aqui, vamos atravessá-la.
Assim, no início, uma e b são 1 e 2 e indefinido.
Então, originalmente temperatura fica atribuído a um, de modo temporário é 1.
um é igual a B, portanto, obter 2, e b é igual a temperatura.
Agora nós temos um.
>> AUDIÊNCIA: No anterior, que trocados ampersand x e y comercial.
O que exatamente isso significa?
ALLISON BUCHHOLTZ-AU: Então isso significa que você está passando por referência.
Então isso significa que você está realmente passando os endereços de onde
x e y são armazenados.
AUDIÊNCIA: Mas você não é trocar o endereço.
ALLISON BUCHHOLTZ-AU: Você não é trocando os endereços.
Você está trocando o que está dentro deles.
Como o que é nesse endereço, e é por isso que ele funciona.
Versus aqui este programa que você está fazendo é que você está criando cópias.
Então você tem x e y que existem como as suas próprias variáveis ​​aqui fora.
Mas, então, quando você passa los em troca, é
como se você está criando todo este outro conjunto.
Então, você nunca está realmente x tocantes e y.
>> AUDIÊNCIA: Se comercial x é o que está em o endereço de x, o que iria estrelar x ser?
>> ALLISON BUCHHOLTZ-AU: Ampersand x é o que está em o endereço de x, então star-- bem,
neste caso, x não é um ponteiro.
AUDIÊNCIA: Oh, OK.
Então você só faça isso porque não é um ponteiro.
ALLISON BUCHHOLTZ-AU: Certo.
Você só pode fazer de estrela algo que é um ponteiro.
Talvez você poderia fazê-lo para coisas que não são, mas a compilação que você
fazer coisas malucas que iria acontecer.
E eu não sou exatamente certo o que iria acontecer.
Você sempre pode ter o endereço de alguma coisa,
mas você não pode excluir a referência algo que não é um ponteiro.
Se isso faz sentido, isso é uma boa distinção de ter.
>> Então não é tão ruim, certo?
As mesas estão espero ficando um pouco menos assustador.
Tudo certo.
Ah, os divertidos.
Então, agora, escrever o seu próprio código.
Então, eu vou deixar vocês trabalham sobre isso por cerca de quatro minutos,
e depois podemos falar sobre as formas de abordá-lo.
Sinta-se livre para conversar com as pessoas ao seu redor.
Também isso é interessante.
É como uma todas as meninas seção agora.
Muito emocionante.
Excepto para Chang.
Mas Chang não é realmente parte da seção.
Impressionante.
Perfeito.
Então eu vou dar-lhe um par de sugestões.
No caso em que você tem mais de um personagem, onde
você tem algo mais como 123 ou 1000 alguma coisa,
você precisa ser capaz de laço através de e converter cada um deles.
Portanto, há um casal maneiras que você poderia fazer isso,
mas você definitivamente vai ter um loop for em algum lugar lá para fazer um loop
através deles, o que é como o tipo de oferta
com mesmo se você chamar strlen, que é tipo de gosto oh
talvez você queira usar o comprimento da seqüência de alguma forma.
>> Tudo certo.
Então, o que vocês acham que pode ser uma das primeiras coisas que queremos fazer?
Há alguns casos em aqui precisamos explicar, certo?
Ou temos algo que é nulo.
O que nós temos?
Casos.
Null.
Temos o caso que tem algo diferente de 09, certo?
Então, vamos dizer que tem cartas.
Ou temos o caso que é válido.
Três casos de pensar.
Então, qual deles você acha que pode ser a mais fácil de cuidar em primeiro lugar?
AUDIÊNCIA: Null.
ALLISON BUCHHOLTZ-AU: O caso é nula.
Então o que fazemos lá?
AUDIÊNCIA: [inaudível].
ALLISON BUCHHOLTZ-AU: Yeah.
E o que eu quero fazer?
>> AUDIÊNCIA: Return 0.
>> ALLISON BUCHHOLTZ-AU: Exatamente.
Impressionante.
Está bem.
Então, agora caso haja cartas e o caso em que é válida.
Podemos realmente cuidar isso dentro de um loop, OK?
Assim, uma maneira de fazer ele-- o que poderia ser uma maneira simples de verificar se é válido.
Nós teríamos que passar por cada letra e fazer o que?
>> AUDIÊNCIA: Verifique se é em--
>> ALLISON BUCHHOLTZ-AU: Certo, você pode verificar se é entre 0 e 9, certo?
E, em seguida, no caso que é válido, nós somos
vai acabar iterar nossa string de qualquer maneira, certo?
Então, por que não tentar combiná-los em um só.
Nós vamos fazer uma iteração através de fora da corda, e como nós
fazer isso, vamos primeiro fazer uma verificação para ver se essa letra
ou se esse personagem é válido.
Se for, nós estamos indo para executar a operação que precisamos convertê-lo.
Caso contrário, ele vai retornar 0, certo?
>> Então, antes de fazer isso, nós provavelmente vai querer alguma variável
que podemos voltar no final que vai ser o nosso valor real.
Então, nós estamos indo para inicializar algum valor para ser 0.
E é assim que começamos.
Então, eu estou indo para se livrar dessa.
Então, como é que vamos iterar esta cadeia.
AUDIÊNCIA: Para loop.
ALLISON BUCHHOLTZ-AU: Um laço for.
Então, qual é o nosso para?
>> AUDIÊNCIA: i é 0.
ALLISON BUCHHOLTZ-AU: Mm-hm.
E o que estamos repetindo até?
>> AUDIÊNCIA: comprimento de str s.
>> ALLISON BUCHHOLTZ-AU: OK, agora me lembro há uma maneira melhor. [Inaudível].
>> AUDIÊNCIA: Sim, nós podemos fazer n é igual.
ALLISON BUCHHOLTZ-AU: Exatamente.
>> AUDIÊNCIA: i é menor que n.
ALLISON BUCHHOLTZ-AU: E por iríamos querer fazer isso?
Você se lembra do motivo?
AUDIÊNCIA: Nós temos que recalcular-lo.
ALLISON BUCHHOLTZ-AU: Becasue desta forma você só tem que calcular STRLEN uma vez.
Se você fizer i é menor que strlen s, isso é significa que recalcula
o comprimento de cada vez você executar o loop,
que não é um custo enorme de energia, mas é
melhor prática para tentar fazer coisas como que uma vez.
A não ser que talvez você tenha uma string louco que está mudando a cada iteração.
Mas se ele vai ficar o mesmo, salvá-lo.
Tudo certo.
E então eu plus plus.
Impressionante.
Estamos no nosso caminho.
AUDIÊNCIA: Realmente rapidamente.
Em primeiro lugar, então vamos dizer que nós apenas Será que eu menos de strlen de s,
eles estão nos classificar no projeto em todos ou apenas de correção?
Eles não são.
Estamos classificação na correção para testes, tanto quanto eu sei.
Eu não posso fazer um em cheio garantia, mas para a maior parte,
grande maioria é correto, porque você está sob um monte de restrição de tempo.
Desenho significa tipicamente você tem tempo para pensar
sobre a elegância de sua situação.
>> OK, então nós estamos interagindo através.
Por isso, precisamos fazer um check para ver se esse personagem é válido
ou se podemos realizar o nosso normal de [? um para i?] função.
Podemos nos preocupar com o que isto é, em um segundo.
Então, por que nós não take-- se alguém pode pensar
sobre uma maneira de verificar a ver se isso é válido.
Sabemos que vai ser alguns se condição, certo?
E lembre-se este é em ASCII, então como pode
vemos se não é 0,1, 2, 3, 4, 5, 6, 7, 8 ou 9.
AUDIÊNCIA: Se alfa.
>> ALLISON BUCHHOLTZ-AU: Então, se alfa faria apenas deixe-nos saber se é uma carta.
E se eles nos dão um símbolo, é ainda não completamente indo para verificar.
Então, se você puxar o seu ASCII tabela, sabemos que de 0 a 9
estão em um segmento.
Diga-me os números que eles correspondem a, se possível.
AUDIÊNCIA: 40.
>> ALLISON BUCHHOLTZ-AU: Então, o intervalo é como 40--
AUDIÊNCIA: Talvez.
48-57.
Eu não tenho certeza.
>> ALLISON BUCHHOLTZ-AU: 40-57?
>> AUDIÊNCIA: 48, eu acho.
ALLISON BUCHHOLTZ-AU: 48-57.
Então, nós sabemos que aqueles ASCII symbols-- se o valor ASCII não está
entre 48 e 57 anos, não é válido, certo?
Assim, poderíamos usar isso para nossa vantagem possivelmente?
Como é que vamos chegar Nesta carta, o primeiro fora?
Como estamos acessando este esta personagem?
>> AUDIÊNCIA: s suporte i.
>> ALLISON BUCHHOLTZ-AU: Mm-hm.
Porque nós podemos pensar em cordas como matrizes, lembre-se.
Então, o que queremos dizer?
Queremos dizer se este é-- eu vou te dar uma dica.
É um menos do que.
O que você acha que deve ser inferior a?
AUDIÊNCIA: 57?
>> ALLISON BUCHHOLTZ-AU: 47, certo?
Mas representa também que à medida que a 0 em single [? raios?], porque isso é
o personagem 0.
Você também pode colocar 47.
Tendo tabela ASCII, como você vê, é apenas algo
você deve ter em sua folha de quiz.
>> Assim, se este for o caso, se é um inferior a 0-- e não necessariamente.
É só ou vai ser inferior ou igual a 9.
Assim, você pode preencher este último para mim?
Então, ou s de i é o que, Rhea?
>> AUDIÊNCIA: Maior que 9.
>> ALLISON BUCHHOLTZ-AU: Não.
Isso faz sentido para todos, como chegamos lá?
Estes problemas, eles são como uma vez que você ver as soluções, é como oh, OK.
E é por isso que a prática irá ajudá-lo.
OK, então nós retornar 0.
Adorável.
Tudo certo.
Caso contrário, o que queremos fazer?
Esta é a parte interessante onde é um pouco mais
como a matemática contra CS na minha opinião.
Alguém tem uma idéia de como podemos fazer isso?
Então, a coisa importante a perceber é o primeiro caractere
nós estamos levando vai ser o dígito mais alto fim, certo?
Então, se nós estamos olhando para a conversão 123, a primeira vez que uma iteração
vai ser um, mas precisamos que, para ser 100 até o final, certo?
Então, uma coisa que você pode fazer é que com cada dígito subsequente
você toma, você multiplica seu valor por 10, para que pelo tempo que você chegar ao fim,
tudo tem sido deslocada para cima, certo?
>> Assim, a primeira vez que você executa ele, você tem 1 como seu valor.
É a segunda vez que você executá-lo, você multiplicar o seu valor por 10.
Ele irá atualizá-lo para que seja agora 10, e você adicionar no seu próximo valor.
E então você multiplicar isso por 10 e adicionar no seu próximo valor.
E é por isso que eles dizem que este é muito mais parecido com o teste
um algoritmo matemático contra CS, mas eu discordo.
Eu não escrevo os quizzes.
>> Então, uma coisa que podemos fazer é nós dizer vezes de valor igual a 10.
Então, isso vai mudar o dígito uma vez a cada hora.
E então nós só queremos adicionar.
Queremos acrescentar no que nós só temos, certo?
Então, como é que vamos realmente converter a nossa Caracteres ASCII para o número
que representa?
>> Então, nós sabemos que 0 é igual a 47, certo?
Então, se 0 é 47, o que que nós temos que fazer a ele
para realmente fazê-lo ser um int de 0?
>> AUDIÊNCIA: É 48.
ALLISON BUCHHOLTZ-AU: 48?
Desculpe.
Gostaríamos de subtrair 48, certo?
Lembre-se de matemática ASCII?
Podemos tratá-los como números normais.
Se você tratá-los como números, eles se tornam números de forma eficaz.
Então, se temos s de i, que vamos dizer, neste caso é igual a 0.
Assim, s de i neste caso seria a ASCII--
o int ASCII pois seria 47.
Assim, poderíamos subtract-- ou 48.
Você poderia fazer isso, é um caminho.
Alguém sabe uma melhor maneira que nós poderíamos fazer 48?
Nós apenas disse 0 é-- entrar em o ASCII que você poderia fazer cotação de 0.
Então faz isso tipo de fazer sentido como isso funciona?
>> AUDIÊNCIA: Neste ponto, é o valor 0 porque mesmo se você multiplicar por 10,
você está começando com zero, por isso, deve ser ligado?
>> ALLISON BUCHHOLTZ-AU: Então, nesse caso, você quer multiplicá-lo antes de adicionar,
porque, neste caso, sim, seria ainda ser-- meu ponteiro está faltando.
O valor neste caso, o primeiro vez que executá-lo será zero.
Então você está apenas adicionando em que o primeiro dígito.
O que é importante é a próxima vez você interagir, você quer transferi-lo para cima
antes de adicionar o próximo dígito.
Será que esclarecer para você?
Está bem.
>> Às vezes você vai obter mais coisas estranhas Mathy.
Se você tivesse mais de isso, você ainda vai
para get-- você vai fazer muito bem.
Crédito parcial é muito grande coisa sobre quizzes CS50.
Então escreva o que você sabe.
Se você tem tudo exceto por aqui, você é
ainda vai fazer muito bem o problema.
Porque você está mostrando, OK, eu quase sei.
Eu sei que eu preciso para percorrer.
Eu sei o que eu preciso para verificar.
Eu só não muito obter como convertê-lo.
Você vai ficar bem.
Sim, você vai perder alguns pontos,
mas você ainda está indo para obter um bom número de pontos para algo
assim, se você estiver faltando essas duas linhas.
Eu seria como OK, essa pessoa sabe o que está fazendo.
Matemática é difícil.
Então, eu diria que você estaria bem.
>> OK, então vocês prontos para tente strlen com ponteiros agora
que vocês são mestres ponteiro?
Então, eu vou deixar vocês trabalham em que, por um pouco.
Se alguém precisar de uma reciclagem.
Então você quer usar ponteiro aritmética, e, em seguida, se s é nulo,
sua implementação deve retornar 0.
Coisas como esta que fazem você muito feliz de apenas chamar strlen
no fim do dia.
Acho que este pode ser um pouco mais fácil do que a última, que
é bom.
Eu vou dar a vocês mais um minuto, e depois nós vamos trabalhar com ele.
E então nós começamos a ir para switches.
>> OK, rapazes prontos?
Talvez um pouco.
Então, eu dei-lhe o seu duas opções, certo?
Ou verificar null e retornar 0 se ele é, na verdade, ou calcular o comprimento.
Então, quem quer escrever verificar null?
Vá em frente.
>> AUDIÊNCIA: Se parênteses s é igual é igual a nulo retorno 0.
ALLISON BUCHHOLTZ-AU: Lovely.
Eu amo quando metade do seu problema é apenas a verificação de nulo.
Eu sei com vocês última semana eu era como verificação para nulo
literalmente o tempo todo.
OK, assim--
>> AUDIÊNCIA: Se o retorno 0 é apenas uma linha, que ainda precisamos do suporte encaracolado?
>> ALLISON BUCHHOLTZ-AU: Você não tecnicamente precisa-los, desde que você é consistente.
É uma boa prática apenas para adquirir o hábito
do uso de chaves, mas tecnicamente não.
Você não precisa deles para uma linha.
Nós só tendem a recomendar para pessoas a partir de programa.
>> Então agora o que podemos querer fazer aqui?
Portanto, agora sabemos que a nossa cadeia é válido.
Queremos manter compute o comprimento.
O que é provavelmente a primeira coisa que queremos fazer?
>> AUDIÊNCIA: Criar um int que é o comprimento.
ALLISON BUCHHOLTZ-AU: Exatamente.
AUDIÊNCIA: E queremos configurá-lo para?
ALLISON BUCHHOLTZ-AU: 0.
Perfeito.
Tudo certo.
Agora, o que quer fazer?
Esta é realmente a maior parte dele.
Vá em frente.
>> AUDIÊNCIA: Então você provavelmente fazer um loop.
E, em seguida, uma vez que quando você chamar s você está obter o endereço da primeira coisa,
você poderia começar com i é igual a 0.
E então, enquanto x mais eu não é barra invertida 0.
ALLISON BUCHHOLTZ-AU: O terminador nulo.
AUDIÊNCIA: O terminador nulo.
Em seguida, você adicionar um para comprimento.
>> ALLISON BUCHHOLTZ-AU: Yeah.
OK, então vamos transformar essa em código muito concreto.
Mas essa é a idéia perfeita.
Isso é exatamente o que estamos fazendo.
Nós vamos ser a iteração através de com o ponteiro.
Então, o que nós queremos fazer é, em vez de um int
aqui, porque nós somos não referindo-se a uma lo.
Nós estamos referindo-se ao início de uma corda, que começam a ser algum endereço,
certo?
>> Então, nós queremos um ponteiro.
Então, nós vamos ter alguma estrela char, porque corresponde aos nossos s, certo?
Portanto, este é um ponto que está inicializando para o início da string, OK?
Então vamos chamá-lo i.
Se é o início da cadeia, o que é que vai ser atribuído a?
Não 0.
Queremos que ele seja o início da nossa cadeia.
O que representa o início do nossa cadeia que nos foi dado?
>> AUDIÊNCIA: Just s.
>> ALLISON BUCHHOLTZ-AU: s.
Então isso cria alguns ponteiro nova que representa o início de nossa cadeia, OK?
Outra maneira de pensar nisso é como aqui é a nossa matriz.
Essa é a nossa corda, s.
Então, digamos que este é o primeiro local, e este é 0x4.
04.
Esta é a nossa s, que detém esse endereço.
E nós acabamos de criar um outro chamado i que apenas refere-se à mesma coisa.
Então, eles estão ambos apenas apontando para o início da nossa cadeia.
Esta é apenas uma representação gráfica.
>> Então agora o que queremos fazer é que nós queremos fazer uma iteração
nossa condição de iteração através da nossa cadeia.
Agora compras.
Tenho que fazer compras, pessoal.
É que queremos manter a atualização até alcançamos o terminador nulo, certo?
Então, o que poderia parecer?
Queremos i, ou queremos estrela i é a pergunta?
É o terminador nulo um endereço ou algo localizado em um endereço?
Localizado em um endereço, certo?
>> Por isso, precisamos desreferenciava tudo o que é aqui, porque este é apenas um endereço.
Para realmente chegar ao início precisamos desreferenciava este
para que possamos realmente começar o que está neste primeiro lugar.
Então, se fizermos estrelar i, o que Não queremos que igual?
AUDIÊNCIA: Back barra?
>> ALLISON BUCHHOLTZ-AU: Não.
Isso faz sentido para todos?
Precisamos entrar em nossa string e certifique-se de que não é o fim.
E então podemos apenas atualizar como este.
Atualização normal.
Assim, enquanto estes são Met, o que precisamos fazer?
>> AUDIÊNCIA: Comprimento plus plus.
>> ALLISON BUCHHOLTZ-AU: Mm-hm.
E, depois de o loop termina, o que vamos querer voltar?
AUDIÊNCIA: Comprimento?
ALLISON BUCHHOLTZ-AU: Comprimento.
Lá você vai.
Obviamente, a carne de um presente é entender isso por loop.
Será que todo mundo começa como isso funcionou?
Estou feliz de passar por isso novamente.
>> AUDIÊNCIA: A segunda parte, de modo que a estrela i lá,
que é o endereço do first--
ALLISON BUCHHOLTZ-AU: Não é o endereço.
É o que está.
AUDIÊNCIA: Isso é realmente lá.
ALLISON BUCHHOLTZ-AU: Isso é o que é realmente lá.
Portanto, esta é dizendo-- deixar me fazer isso melhor.
Portanto, esta é 0x04, e eu só vou para dizer que eu vou fazer o meu nome.
Está bem.
Sim, eu sei que tenho revisão questionário esta noite.
Lotes de revisão questionário.
Então, digamos que esta string é o meu nome, Allison.
Pouco confuso, mas está lá.
E s representa o local de onde a string começa,
então eu vou fazer isso real-- este é o endereço de um,
onde a string começa, certo?
>> Então, o que fazemos aqui é que nós queremos usar ponteiros para percorrer.
Então nós criamos alguns ponteiro, i, que também é igual ao do início da cadeia.
E em cada ponto, queremos continuar a atravessar a matriz
aqui até acertar o terminador nulo.
Então, nós queremos sempre verificar o que está em cada um desses endereços.
>> Então, nós desreferenciava i, de modo que a primeira vez que o fazemos nós
dizer, OK, o que é no endereço 0x04?
É uma uma.
OK, estamos bem.
Comprimento de incremento.
Passar para a próxima.
Então lembre-se i-- ponteiros aumento pela tamanho de tudo o que está apontando.
Portanto, neste caso, uma vez que é um char, ele vai atualizar por um.
Então, agora vamos olhar para 5, o que significa que está acontecendo por aqui.
Por isso, diz OK, vá para 0x05.
O que há lá dentro?
É um l.
E ele vai continuar fazendo isso até atingir este.
E diz OK, o que está em qualquer endereço que é isso?
O terminador nulo, OK.
Saída.
E só voltar comprimento.
Porque você precisa o que é, na verdade, a esse endereço, não o próprio endereço.
>> Há muito poucos lugares onde você realmente precisa do endereço.
A maior parte do tempo quando você está usando o e é
quando você está em primeiro lugar atribuição de um ponteiro ou quando
você está passando-a em outra função.
OK, todo mundo bem lá?
Mais ou menos?
Está bem.
>> Portanto, parece que nós temos tem cerca de 12 minutos para a esquerda,
então vamos passar a talvez o nosso último problema,
e depois há qualquer conceitos que vêm-se
entretanto podemos ir rapidamente sobre isso.
>> Assim Mudando de assunto é a última problema aqui, mudar declarações.
Portanto, o seu trabalho é reescrever esta de modo que ele se comporta da mesma
mas não usa switches.
Mãos gessados.
Então, qualquer dúvida sobre esta fora do bastão?
Nenhum?
Está bem.
Será que todo mundo entende que, se o caso não tem nada depois dela,
isto significa que ele deve siga o próximo passo?
Assim, caso 1 e 2, neste caso fazer exatamente a mesma coisa.
Às vezes, um ponto de confusão.
>> Tudo certo.
Alguém tem alguma idéia?
Sim?
>> AUDIÊNCIA: Então você pode apenas fazer se declarações.
>> ALLISON BUCHHOLTZ-AU: Mm-hm.
Então, qual é o nosso primeiro?
>> AUDIÊNCIA: Se n é igual a igual a 1, e as duas linhas ou para n igual
é igual a 2, em seguida, imprimir pequenas.
E então você pode fazer outra coisa se?
Ou você pode simplesmente fazer um caso?
>> ALLISON BUCHHOLTZ-AU: Você pode fazer outra coisa se?
>> AUDIÊNCIA: Será que importa se você faria se?
ALLISON BUCHHOLTZ-AU: Então ele faz.
Será que anyone-- assim, você obterá o mesmo resultado
se você usar apenas ifs contra se você usa outra pessoa ifs.
Vocês podem pensar na razão por que você pode querer usar um outro
se contra um monte de ifs?
Tem que com eficiência.
Sim?
>> AUDIÊNCIA: Seria verifique todos os ifs cada vez.
>> ALLISON BUCHHOLTZ-AU: Assim, mesmo se ele bateu este primeiro,
ele iria em cheque todo outro.
Então você quer usar if else ifs em casos em que apenas um deles vai aplicar sempre.
Assim, a exclusão mútua é o que temos a tendência de dizer.
Se você tem um monte de ifs, isso significa que talvez mais de um deles
assuntos, e talvez mais do que um deles pode ser verdade.
E você quer que os dois para executar, se elas são verdadeiras.
Se você só quer um deles para trabalhar nestes casos mutuamente exclusivos,
você quiser usar outra coisa se, porque tudo isso tem a ver com eficiência.
Seu código é apenas melhor projetado se adere a esta prática.
Portanto, neste caso teremos uma outra pessoa se.
E isso seria?
>> AUDIÊNCIA: n é igual é igual a 3.
ALLISON BUCHHOLTZ-AU: Perfeito.
Meio de impressão.
E então, em nosso último caso, o que temos?
Pessoa ou coisa se?
AUDIÊNCIA: Else.
>> ALLISON BUCHHOLTZ-AU: Do que want-- Você quer else if porque temos casos concretos.
Não é uma espécie de captura tudo.
Se você tivesse um padrão em uma switch-- lembre-se de opções que você pode ter caso,
e então você tem padrão.
Se você tivesse um padrão, esse é o tipo da sua declaração mais lá.
Mas se ele tem apenas os casos, que significa que você precisa
verificar para ver se é cada um deles.
Portanto, neste caso, seria o 4 ou 5.
Queremos uma impressão off.
É grande.
E lá vai você.
E isso seria o seu programa.
>> Portanto, neste caso, se tinha um padrão de algo,
teríamos uma outra coisa em tudo o que queria que fizéssemos.
Então, essa é uma boa distinção conhecer, entender.
Será que isso ajuda com interruptores para você?
Perfeito.
Tudo certo.
>> Nós temos cerca de oito minutos do fim.
Vocês têm qualquer outros conceitos de alto nível?
Perguntas em geral?
Sim?
>> AUDIÊNCIA: Eu tinha um pergunta sobre um deles
que era sobre o aleatório gerador de números no questionário zero.
ALLISON BUCHHOLTZ-AU: Ah, aquele.
Aquele é um outro onde é mais matemática than-- sim.
A solução para isso-- eu mesmo quando Eu vejo isso, eu sou como o que é isso.
>> AUDIÊNCIA: Foi o número 7.
>> ALLISON BUCHHOLTZ-AU: É estranho, na minha opinião.
Então, basicamente, você quer para usar drand48, que
vai lhe dar algum número entre 0 e 1.
E você quiser usá-lo de modo que de alguma forma obter a--
e é muito mais um problema de matemática para mim do que eu acho que um problema CS.
>> A maneira que você faz ele-- e às vezes ele vai ser assim.
Mais uma vez, estes são os casos em que é tipo
de como escrever o que você pode e crédito parcial.
Portanto, se queremos um retorno, sabemos que estamos
vai estar usando drand48 de alguma forma, certo?
Então, por que nós não apenas anotar que para baixo.
Nós estamos usando isso de alguma forma.
A maneira que eles têm vocês usá-lo é
como este, que eu vou tentar explicar.
>> Então, basicamente o que acontece aqui é porque é entre 0 e 1,
o que você está fazendo é que você está se multiplicando por-- isso é muito mais uma questão de matemática.
Apenas disclaimer completo, este é completamente uma questão de matemática.
O que você está fazendo é porque de 0 e 1 e você
quer que seja dentro dessa faixa, você realmente
descobrir como grande a faixa é, em seguida
basicamente você escalá-lo para cima, que é o que este está fazendo.
>> b menos um dá-lhe essa faixa, o diferença entre esses números.
Você pode multiplicar entre 0 e 1, e, em seguida, adicionando apenas um
significa que o seu dimensionamento-lo de modo que seja entre um e b,
que eu realmente não gosto deste problema.
Como eu disse, este quiz pretende englobar
pessoas que são menos confortáveis, em algum lugar no meio,
e mais confortável.
Então, se eles fizeram isso de modo que era algo
que todos no menor lugar confortável iria ficar,
teríamos longe demais pessoas marcando aperfeiçoa,
eo mais confortável seria aborrecido.
>> Então, eles sempre têm estes tipo de cérebro perguntas provocação
que está destinado a ser um pouco mais difícil que levar algum pensamento criativo.
Quando você vê-los, não ficar muito perplexo.
Eu definitivamente dizer aleta através de seu teste primeiro.
Enfrentar os problemas que você sabe que pode,
porque não adianta ficar preso em um problema quando existem três
ou quatro ou cinco na página depois que você pode facilmente fazer.
>> AUDIÊNCIA: Por que exatamente você multiplicá-lo pela faixa?
>> ALLISON BUCHHOLTZ-AU: Você multiplicar o alcance que você sabe-- é como o quanto depois de um
você quer?
Então você pode pensar, porque retorna um número entre 0 e 1,
Você pode pensar nisso como uma porcentagem.
Então está dizendo basicamente, se temos nossa linha número aqui, um está aqui,
e b é aqui.
Você é como o quanto um passado que é?
É tudo o que estamos fazendo.
Então você está apenas pedindo para o percentual dessa faixa, que
é o que está lhe dando.
E então você basicamente só aumentá-lo adicionando um.
É um teaser de matemática cérebro.
>> Se houve algum conselho último minuto, eu diria folhear as perguntas,
descobrir quais você sei que como, oh Eu tenho esse.
Quase certamente eles vão ser perguntas que você não conhece
ou que você vai ter tempo para, de modo a acertar seus pontos fortes, OK?
Vocês estão indo bem.
Há uma grande quantidade de questões por uma razão,
para que você tenha tempo para espécie de ter a oportunidade
para demonstrar que você é realmente bom.
Por isso é OK se você estiver não é bom em tudo.
Jogue com seus pontos fortes.
Sim?
>> AUDIÊNCIA: Assim é que isto vai retornar algo que está truncado?
Sim, é verdade, porque drand retornos entre 0 e 1.
Ele vai retornar um int, porque ele vai truncar
quando adicionamos um ou multiplicar por ele.
Legal.
Quaisquer dúvidas de última hora?
>> Vocês vão fazer grande.
Você está indo para ser fabuloso.
E mesmo se não for, haverá ser doces aqui na próxima semana.
E eu vou te amar.
Eu vou amar vocês independente.
Tudo bem, todos, boa sorte.
Tenha um ótimo tempo.
Você vai ficar bem.
E você sabe o quê?
Em dois dias ele vai para ser mais, enquanto eu
tem duas midterms na quinta-feira, por isso pelo menos vocês será feito.
Tudo bem, eu vou ver vocês na próxima semana.