Apontadores
Apontadores são também conhecidos como ponteiros. Um ponteiro é uma variável que contém um endereço de memória. Esse é o endereço ocupado por outra variável na memória.
Declaração de Apontadores
Para uma variável ser ponteiro, ela deve ser declarada como tal:
tipo *nome;
onde:
<tipo>: corresponde ao tipo de dado do apontador.
<*nome>: nome do ponteiro. O asterisco indica que estamos trabalhando com ponteiro.
Operadores de ponteiros
Existem dois operadores que são utilizados para trabalharmos com ponteiros: * e &.
O & indica o endereço de memória onde está armazenada a variável na memória.
O * indica o valor armazenado no endereço que o ponteiro está apontando.
Exemplo:
int i;
int *p; //declaração de um variável ponteiro do tipo inteiro
p=&i; //atribuição do endereço da variável i
| ||||
| ||||
|
Ilustrando o funcionamento dos ponteiros:
#include <stdlib.h>
#include <stdio.h>
int main()
{ int i,*p;
i=10;
p=&i;
//o p está apontando para a variável i, assim terá conteúdo 10
printf("A variavel item tem conteudo: %d e o ponteiro %d",i,*p); //mostrará 10 para i e 10 para *P
printf("Endereco do ponteiro %p",p);
//através do %p mostrará o endereçco de p
system("PAUSE");
return 0;
}
Agora, se modificarmos o conteúdo da variável para a qual o ponteiro aponta:
#include <stdlib.h>
#include <stdio.h>
int main()
{ int i,*p;
i=10;
p=&i;
//o p está apontando para a variável i, assim terá conteúdo 10
printf("A variavel item tem conteudo: %d e o ponteiro %d\n",i,*p);
//mostrará 10 para i e 10 para *P
printf("Endereco do ponteiro %p\n",p);
//através do %p mostrará o endereço de p
i=20;
printf("A variavel item tem conteudo: %d e o ponteiro %d\n",i,*p); //mostrará 20 para i e 20 para *P
*p=30;
//como o p está apontando para a variável i, o conteúdo de i também será modificado.
printf("A variavel item tem conteudo: %d e o ponteiro %d\n",i,*p); //mostrará 30 para i e 30 para *P
system("PAUSE");
return 0;
}
Utilizando vetores e ponteiros.
#include <stdlib.h>
#include <stdio.h>
int main()
{ int *p;
int v[3]={5,0,2};
p=v;
//ou p=&v[0], significa que o ponteiro receberá a primeira posição do vetor
printf("Ponteiro: %d e 1a posicao do vetor: %d\n",*p,v[0]); //mostrará 5 para *p e 5 para v[0]
p++;
//incrementa o ponteiro, assim irá apontar para o próximo elemento do vetor.
printf("Ponteiro: %d e 2a posicao do vetor: %d\n",*p,v[1]); //mostrará 0 para *p e 0 para v[1]
p++;
//incrementa o ponteiro, assim irá apontar para o próximo elemento do vetor.
printf("Ponteiro: %d e 3a posicao do vetor: %d\n",*p,v[2]); //mostrará 2 para *p e 2 para v[2]
system("PAUSE");
return 0;