Estrutura de Dados - Ponteiros
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Estrutura de Dados - Ponteiros

on

  • 5,805 views

 

Statistics

Views

Total Views
5,805
Views on SlideShare
5,805
Embed Views
0

Actions

Likes
3
Downloads
262
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Estrutura de Dados - Ponteiros Presentation Transcript

  • 1. Prof. Adriano Teixeira de Souza
  • 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. 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.  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. 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. 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.  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. *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. 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.  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. 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.  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. int *ap;00 00 0022 22 22FF FF FF18 14 10ap ap+1 ap+2 Prof. Adriano Teixeira de Souza
  • 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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  Desenvolver 3 programas, cada programa deverá imprimir uma das figuras abaixo********** ***** ******************* **** **** ************ *** *** ********** ** ** ******** * * ****** * * ***** ** ** ***** *** *** ***** **** **** ***** ***** ********** Prof. Adriano Teixeira de Souza