programação estruturada ii · ponteiros para matrizes usando funções criamos a função...
TRANSCRIPT
1
Programação Estruturada II
Ponteiros
Prof. Rodrigo [email protected] http://www.bolinhabolinha.com
Apresentação
Prof. Rodrigo Rocha – [email protected]
Ementa
• Depuração e Documentação interna
• Modularização. Uso de funções Por valor
Por referência
• Ponteiros e suas aplicações Básico
Uso avançado
• Registros Básico
Uso avançado de vetores e matrizes
• Arquivos
• Recursão
2
Ponteiros
O que são
• Um modo de acesso a variáveis sem referenciá-lasO mecanismo utilizado é o endereço da variável
• Representação simbólica de um endereço
Razões para o uso de ponteiros
• Fornecer maneiras com as quais as funções podem realmente modificar os argumentos que recebem
• Passagem de matrizes e strings de uma função a outra
• Manipular matrizes
• Criar estruturas de dados complexas: listas, árvores (estruturas que contém referências a outra estrutura)
• Comunicar informações de memória
• Notações de ponteiros compilam mais rapidamente
Variáveis
Entendendo um pouco mais a fundo....
Cada variável ocupa um espaço de memória
• printf(“Tamanho so short %d\n", sizeof(short));
• printf(“Tamanho do inteiro %d\n", sizeof(int));
• printf(“Tamanho do long %d\n", sizeof(long));
3
Endereços
Toda variável possui um endereço
• Exemplo:
int variavel;
variavel=10;
printf("Valor da variavel=%d \n",variavel); //valor da variável
printf(“Endereco da variavel=%d \n",&variavel); //Endereço da variável
printf(“End. Em Hexa da variavel=%x \n",&variavel); //Endereço em hexa
•
Símbolos especiais
• Retorna o valor apontado pelo ponteiro *
• Retorna o endereço da variável &
• Seleciona um membro da estrutura ->
Declaração
Sintaxe:
• Tipo_apontado *nomeponteiro;
Exemplo:
• int *px;
O exemplo acima declara o ponteiro px, e px contém endereço da variável do tipo inteiro;
4
Funcionamento de Ponteiros
Verificando o funcionamento do ponteiro:
int a=100;
int *pta;
//Ponteiro recebe o endereço da variável
pta=&a;
printf("\n Ponteiro pta: %u",pta);
printf("\n Endereco do ponteiro &pta: %u",&pta);
printf("\n Endereco da variavel a : %u",&a);
printf("\n Conteudo apontado por *pta: %i",*pta);
Entendendo...
5
Incremento e Decremento
Podemos utilizar os operadores ++ e --, para incrementar ou decrementar endereços
Exemplo:
O exemplo mostrará:
Ponteiros e matrizes
Relacionamento estreito entre matrizes e ponteiros
O compilador transforma matrizes em ponteiros quando compila
Qualquer operação que pode ser feita com índice de matriz pode ser feita com ponteiros
Exemplo:
*(matriz+indice) É O MESMO QUE matriz[indice]
6
Exemplo
Percorrendo o vetor utilizando operações nos ponteiros• Exemplo:
int a[3]={5,6,7,8,9,10,11,12,13,14};
int *pa;
int i;
pa=&a[0];
for(i=0; i<3;i++) {
printf("\n a[%d] no endereco[%d] vale: %d",i,pa,*pa);
*pa++;
}
Ponteiros para matrizes usando funções
Criamos a função recebendo o ponteiro para a matriz
Chamamos a função, passando a matriz como parâmetro
Saída
7
Ponteiros para Estrutura
Utilização semelhante a ponteiros para variáveis
Para ler os elementos da estrutura, podemos utilizar
• (*ponteiro.elemento) ou
• ponteiro->elemento
Strings e Ponteiros
Uma das melhores maneiras de manipular strings em “C” é utilizando ponteiros
Todo string termina com “\0”
Exemplo: (manipulando string)
8
Bibliografia
Livro texto• MIZRAHI, Victorine Viviane. Treinamento em linguagem C : módulos 1 e 2
: PLT.. 1ª ed. São Paulo: Pearson Prentice Hall, 2007.
• ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene A. V.i de. Fundamentos da Programação de Computadores : algoritmos, pascal e
C/C++. 1ª ed. São Paulo: Pearson Education, 2003.• SCHILDT, Herbert. C Completo e Total. 3ª ed. São Paulo: Pearson
Education, 2005.
Complementar• 1) KERNIGHAN, Brian. C : a linguagem de programação. 3ª ed. Rio de
Janeiro: CAMPUS, 1986.
• 2) HARBISON III, Samuel P.; STEELE/JR., Guy; HARTMANN, Savannah. C : manual de referência. 1ª ed. Rio de Janeiro: Ciência Moderna, 2002.
• 3) LOPES, Anita; GARCIA, Guto. Introdução à Programa. ç1ãªo ed. Rio de Janeiro: CAMPUS, 2002.
• 4) DAMAS, Luís. Linguagem C. 10ª ed. São Paulo: LTC, 2007.