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. No exemplo 2 abaixo, mostra o exemplo 1
a aritmética de ponteiros:
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,
a manipulação utilizando aritmética de ponteiros devem ser feito com muito cuidado.