Estrutura de dados
Prof. Danielson Rodrigues
LINGUAGEM C – VI. PONTEIROS
Ponteiros (ou apontadores) são variáveis que armazenam endereços de outras variáveis. No exemplo ao lado, p e q são ponteiros. Declarações: float a; int c; float *p; int *q; p = &a; q = &c;
PONTEIROS…
Principais utilidades de ponteiros:
Passagem de parâmetros por referência, em sub-programação. Alocação dinâmica de variáveis indexadas. Encadeamento de estruturas.
Operadores.
(&) que retorna o endereço de memória da variável. (*) retorna o conteúdo da variável existente no endereço (ponteiro).
PONTEIROS: NOTAÇÃO
Se p é um ponteiro, *p é o valor da variável apontada por p. Se a é uma variável, &a é o seu endereço. Exemplos:
PONTEIROS: EXEMPLO
Sejam as declarações abaixo: int a=2, b=5, *p=&a; *q=&b;
A inicialização é de p e q, não de *p e *q:
PONTEIROS E VARIÁVEIS INDEXADAS
Sejam as declarações abaixo: int a[7], *p, b[5];
PONTEIROS…
OUTRAS SEMELHANÇAS
Ponteiros podem ter índices, e variáveis indexadas admitem o operador unário ‘*’. Por exemplo, suponha as declarações abaixo: int i, a[50], *p; a[i] é equivalente a *(a+i) *(p+i) é equivalente a p[i]
a contém o endereço de a[0]: p = a equivale a p = &a[0] p = a+1 equivale a p = &a[1]
PONTEIROS…
Constante versus variável: a é o endereço inicial de um vetor estático: seu valor não pode ser alterado. p é uma variável: seu conteúdo pode mudar.
Atribuições: p = &i é permitido a = &i não é permitido
Endereços na memória: a[1] tem sempre o mesmo endereço. p[1] pode variar de endereço.
PONTEIROS…
Passagem de Argumentos por Endereço - passagem de argumentos por endereço, onde a própria variável é utilizada na função, e não uma cópia dela.
Saidas : 2 3 2 3
Saidas : 2 3 3 2
PONTEIROS…
Percebem-se algumas alterações, descritas a seguir. a função troca() passa a receber argumentos do tipo int*, ao invés de int. Isto é necessário para que a função