Estrutura de Dados - Ponteiros

8.049 visualizações

Publicada em

Publicada em: Tecnologia, Diversão e humor
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
8.049
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
411
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Estrutura de Dados - Ponteiros

  1. 1. Prof. Adriano Teixeira de Souza
  2. 2.  A memória de qualquer computador é uma seqüência de bytes. Cada byte pode armazenar um número inteiro entre 0 e 255. Cada byte na memória é identificado por um endereço numérico, independente do seu conteúdo. Prof. Adriano Teixeira de Souza
  3. 3. Conteúdo Endereço 0000 0001 0x0022FF16 0001 1001 0x0022FF17 0101 1010 0x0022FF18 1111 0101 0x0022FF19 1011 0011 0x0022FF1A Prof. Adriano Teixeira de Souza
  4. 4.  Cada objeto (variáveis, strings, vetores, etc.) que reside na memória do computador ocupa um certo número de bytes: ◦ Inteiros: 4 bytes consecutivos ◦ Caracteres: 1 byte ◦ Ponto-flutuante: 4 bytes consecutivos Cada objeto tem um endereço. Prof. Adriano Teixeira de Souza
  5. 5. Variável Valor Endereço 0001 1001 0x0022FF24 char string1[4] 0101 1010 1111 0101 1011 0011 0000 0001 0x0022FF14 0001 1001 0101 1010 1111 0101 1011 0011 0000 0001 0001 1001 float real[4] 0101 1010 1111 0101 1011 0011 0000 0001 0001 1001 0101 1010 1111 0101 1011 0011 0000 0001 0001 1001 0x0022FF10char string[4] 0101 1010 1111 0101 1011 0011 Prof. Adriano Teixeira de Souza
  6. 6. int x = 100; Ao declararmos uma variável x como acima, temos associados a ela os seguintes elementos: ◦ Um nome (x) ◦ Um endereço de memória ou referência (0xbfd267c4) ◦ Um valor (100) Para acessarmos o endereço de uma variável, utilizamos o operador & Prof. Adriano Teixeira de Souza
  7. 7.  Um ponteiro (apontador ou pointer) é um tipo especial de variável cujo valor é um endereço. Um ponteiro pode ter o valor especial NULL, quando não contém nenhum endereço. NULL é uma constante definida na biblioteca stdlib.h. Prof. Adriano Teixeira de Souza
  8. 8. *var A expressão acima representa o conteúdo do endereço de memória guardado na variável var Ou seja, var não guarda um valor, mas sim um endereço de memória. Prof. Adriano Teixeira de Souza
  9. 9. int x;int *ap; // apontador para inteirosap = &x; // ap aponta para x 0000 0000 (00) 0x0022FF14 ap 0010 0010 (22) 1111 1111 (FF) 0001 0000 (10) 0000 0001 0x0022FF10 x 0001 1001 0101 1010 1111 0101 Prof. Adriano Teixeira de Souza
  10. 10.  Há vários tipos de ponteiros: ◦ ponteiros para caracteres ◦ ponteiros para inteiros ◦ ponteiros para ponteiros para inteiros ◦ ponteiros para vetores ◦ ponteiros para estruturas O compilador C faz questão de saber de que tipo de ponteiro você está definindo. Prof. Adriano Teixeira de Souza
  11. 11. int *ap_int; // apontador para intchar *ap_char; // apontador para charfloat *ap_float; // apontador para floatdouble *ap_double; // apontador para double// apontador para apontadorint **ap_ap_int; Prof. Adriano Teixeira de Souza
  12. 12.  Um conjunto limitado de operação aritméticas pode ser executado. Os ponteiros são endereços de memória. Assim, ao somar 1 a um ponteiro, você estará indo para o próximo endereço de memória do tipo de dado especificado. Prof. Adriano Teixeira de Souza
  13. 13. int *ap;00 00 0022 22 22FF FF FF18 14 10ap ap+1 ap+2 Prof. Adriano Teixeira de Souza
  14. 14.  Sempre que somar ou subtrair ponteiros, deve-se trabalhar com o tamanho do tipo de dado utilizado. Para isso você pode usar o operador sizeof(). Prof. Adriano Teixeira de Souza
  15. 15.  O while deve ser usado sempre que: ◦ Não soubermos exatamente quantas vezes o laço deve ser repetido ◦ O teste deva ser feito antes de iniciar a execução de um bloco de comandos ◦ Houver casos em que o laço não deva ser repetido nenhuma vez antes do teste da condição Atenção: ◦ As variáveis usadas no teste devem ser inicializadas antes do teste. Prof. Adriano Teixeira de Souza
  16. 16.  Permite que um certo trecho de programa seja executado ATÉ QUE uma certa condição deixe de ser verdadeira: do { <comandos_a_repetir> } while (<condição>); <comandos_após_laço_do-while> Prof. Adriano Teixeira de Souza
  17. 17.  Funcionamento: 1.Executar os comando dentro do bloco do-while. 2.Testar a condição. 3.Se a condição for falsa, então sair do laço. 4.Se a condição for verdadeira, então retornar para o passo 1. Prof. Adriano Teixeira de Souza
  18. 18.  O comando do-while deve ser usado sempre que: ◦ Não soubermos exatamente quantas vezes o laço deve ser repetido ◦ O teste deva ser feito depois da execução de um bloco de comandos ◦ O bloco de comandos deve se executado pelo menos uma vez Prof. Adriano Teixeira de Souza
  19. 19.  Ler um número e verificar se este é ou não um número primo. Dada uma dívida de 10 mil reais que cresce a juros de 2,5% ao mês e uma aplicação de 1.500 reais com rendimento de 4% ao mês, escrever um algoritmo que determine o numero de meses necessários para pagar a dívida. Prof. Adriano Teixeira de Souza
  20. 20.  Permite que um certo trecho de programa seja executado um número determinado de vezes.for (comandos_inic; condição_teste; incre/decremento){ <comandos_a_repetir>}<comandos_após_laço_for>; Prof. Adriano Teixeira de Souza
  21. 21.  Funcionamento: 1.Executar os comandos de inicialização. 2.Testar a condição. 3.Se a condição for falsa então sair do laço for. 4.Se a condição for verdadeira então executar os comandos que estão subordinados ao for. 5.Executar os comandos de incremento/decremento. 6.Voltar ao passo 2. Prof. Adriano Teixeira de Souza
  22. 22.  Observações: ◦ Os comandos de inicialização são executados apenas uma vez. ◦ O contador é incrementado/decrementado sempre ao final da execução do bloco. ◦ O teste é feito sempre antes do início da execução do bloco de comandos. Prof. Adriano Teixeira de Souza
  23. 23.  O comando for deve ser usado sempre que: ◦ Soubermos exatamente quantas vezes o laço deve ser repetido. ◦ O teste deva ser feito antes da execução de um bloco de comandos. ◦ Houver casos em que o laço não deva ser repetido nenhuma vez. Prof. Adriano Teixeira de Souza
  24. 24.  Comandos for aninhados ◦ Um comando for pode ser utilizado dentro de outro comando for. ◦ Cuidados devem ser tomados para não aumentar o tempo de execução do algoritmo. Prof. Adriano Teixeira de Souza
  25. 25.  Desenvolver 3 programas, cada programa deverá imprimir uma das figuras abaixo********** ***** ******************* **** **** ************ *** *** ********** ** ** ******** * * ****** * * ***** ** ** ***** *** *** ***** **** **** ***** ***** ********** Prof. Adriano Teixeira de Souza

×