Unidade E - Vetores e Apontadores

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

 

Sempre devemos inicializar um ponteiro com o endereço de uma variável.
int i, *p;
p=&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;

}