Entender Apontadores em C 11


Antes de mais o que é um apontador em português corrente? É algo que aponta para alguma coisa, certo? Ok… Então vejamos este exemplo:

O que é o ponteiro de um relógio? É o que aponta para as horas, minutos ou segundos. Em programação é muito semelhante temos as variáveis e o ponteiro vai apontar para o local da memória onde elas se encontram armazenadas que veremos mais à frente chamar-se de endereço da memória.

Arquitectura

“Ponteiros são uma abstracção da capacidade de endereçamento fornecidas pelas arquitecturas modernas. Em termos simples, um endereço de memória é definido para cada unidade de memória no sistema, no qual a unidade é tipicamente um byte ou um char, o que em termos práticos transforma toda a memória num grande vector. Logo, a partir de um endereço, é possível obter o valor armazenado na memória correspondente a esse endereço.”

Fonte: Wikipedia

Resumidamente: O ponteiro é uma variável como qualquer variável mas que armazena um endereço de uma outra variável.

Variáveis e Memória

Explicação de Memória

Quando declaramos int i=2450; estamos a indicar ao compilador para reservar um espaço na memória para poder armazenar valores do tipo inteiro, com o número de bits associado a este para cada compilador e/ou arquitectura. Simultaneamente é atribuído o valor 2450 à variável i, o que significa que no endereço de memória associado à variável i é armazenado o valor 2450.

Apontadores e Memoria Nota: este gráfico não está relacionado com o anterior apesar do valor de i ser o mesmo.

Declarar apontadores

Antes de começar com a declaração de apontadores quero alertar para um erro muito comum quer em programadores novatos quer em programadores mais experientes, nunca se deve usar um ponteiro sem antes inicializa-lo pois ele estará a tentar aceder a um valor da memória desconhecido e dará erro “Segmentation Fault“.

Declarar um apontador é muito simples:

A instrução anterior indica que ap é um apontador do tipo inteiro. Por outras palavras, ap é uma variável cujo valor é um endereço de uma variável do tipo int.
Existem dois operadores unários que são utilizados com os ponteiros.
Um é o operador (*) através dele é possível obter o valor do endereço de memória do ponteiro, o outro é o operador (&) que permite obter o endereço de memória.
De forma mais simples:

  • & significa “endereço de”;
  • * significa “conteúdo do endereço para onde aponta”.

Exemplos de Operações com Ponteiros

Resumindo e Concluindo

  • Uma variável tem sempre um endereço e um valor;
  • Um apontador é uma variável cujo valor é o endereço de uma outra variável;
  • Se a for uma variável então &a é o endereço de a;
  • Se ap for um apontador, *ap é o valor que é indicado por ap;

Qualquer dúvida ou sugestão sintam-se à vontade em comentar, a perguntar é que se pode evoluir, não ficando com as dúvidas só para nós sem serem esclarecidas!

Deixo-vos com um vídeo do Binky a explicar apontadores, penso que será mais interessante e divertido…


Leave a Reply

11 thoughts on “Entender Apontadores em C