O conceito de apontador ou ponteiro é nada mais do que uma seta a “apontar” para outro local de memória.

Por outras palavras, podemos dizer que é um endereço de memória que contém uma seta a apontar para outro local em memória. Dando uma vista de olhos na imagem a cima, observamos que o endereço de memória 0100 é um ponteiro e está a apontar para o endereço 3000.

Nomeadamente na linguagem C um ponteiro deve ter um tipo primitivo ou não (caso seja definida alguma estrutura), nomeadamente inteiro, string, booleano etc.

Em C um ponteiro declara-se da seguinte forma:

int *ponteiro  ;

Nunca esquecer que todo o ponteiro contem um asterisco antes do seu nome, pois é esse carácter (*) que o define.

Vamos então olhar para um exemplo muito simples.
 
#include <stdio.h>

int main()
{
int i = 2 ;
int *p=NULL ;
p = &i ;
*p = 20 ;

printf ("%dt%dt%pn", i, *p, p);
return 0;


Inicialmente é declarada uma variável estática i com o valor 2, e declaramos um ponteiro *p.

É muito importante referir que na declaração de um ponteiro é quase obrigatório atribuir-lhe o valor de NULL, pois ele poderá aceder a um pedaço de memória que não lhe pertence e pode causar problemas no nosso programa, ao que normalmente chamamos de “segmentation fault”.

Tendo isso então fazemos a atribuição p=&i , que em bom português se traduz pelo seguinte:

“Este apontador p que eu declarei vai conter o endereço da variável i, ou seja o p é uma seta para o i, se eu o alterar altero o valor de i“.

Pois bem, foi isso que fiz: *p=20
Atribui ao p o valor de 20, onde este p é o i, a tal seta. O que o ponteiro p irá fazer é colocar o valor 20 em i

(Consequentemente o valor 2 que estava guardado em i foi perdido.)

Vendo então o output:

 20     20      0012FF21

É claro que os valores de i e de *p serão iguais, já que p aponta para i. O terceiro valor é o endereço de memória onde está i (e, consequentemente, é o próprio valor de p).

Basicamente um apontador ou ponteiro não é nada mais que uma seta, fazemos-nos tomar por outra variável e porém conseguimos alterar o seu valor.