Como o tipo ponteiro armazena um endereço de memória, podemos realizar operações
aritméticas de incremento e decremento utilizando os operadores (+), (-), (++) e (--).
Internamente, os cálculos aritméticos de endereços de memória são baseados no tamanho em que cada
tipo de dado armazena. Os tipos de dados e seus tamanho foram estudado em
C: Tipos de Dados.
Abaixo, as sintaxes mostram a forma básica de aplicação de operadores aritméticos para incremento e
decremento.
Sintaxe
nome_ponteiro--;
nome_ponteiro++;
*(nome_ponteiro + N)
*(nome_ponteiro - N)
Onde
N: quantidade de posições para avançar
Exemplo 1
#include <stdio.h>
int main ()
{
int vetor[3] = {1,2,3};
int *pnt = &vetor[0];
printf("%d \n",*pnt++);
printf("%d \n",*pnt++);
printf("%d \n\n",*pnt++);
pnt = &vetor[0];
printf("%d \n",*(pnt+0));
printf("%d \n",*(pnt+1));
printf("%d \n",*(pnt+2));
}
Saída
1
2
3
1
2
3
O tipo de dado vetor é um tipo referenciado também, sendo assim, vetor[0] significa o ponteiro para
seu primeiro elemento. O exemplo acima, agora, utilizando o que foi dito neste parágrafo, a aritmética
de ponteiros pode ser vista abaixo:
Exemplo 2
#include <stdio.h>
int main ()
{
// 0 1 2
int vetor[3] = {1, 2, 3};
printf("%d\n", vetor[0] + 0);
printf("%d\n", vetor[0] + 1);
printf("%d\n", vetor[0] + 2);
}
Saída
1
2
3
É importante observar que, como estamos trabalhando em baixo nível, incrementando ou
decrementando ponteiro,há risco de invasão de memória o que pode gerar erros. Assim,
os dados manipulados utilizando ponteiros devem ser feito com muito cuidado.