Aritmética de ponteiros

Sabemos que ponteiros são variáveis que armazenam endereços de memória. Como esses endereços são números, algumas operações aritméticas são aplicáveis a eles: adição e subtração. Embora simples, há algumas questões importantes em relação a essas operações, com as quais devemos nos atentar.

➕ Tipos de operações

Como descrito anteriormente, a aritmética de ponteiros é bastante limitada, possibilitando apenas as operações de adição e subtração, que também apresentam uma limitação: apenas valores inteiros devem ser considerados. Isso acontece porque as posições de memória são representadas em valores inteiros.

⚠️ 1 + 1 != 2

Para começar, vamos analisar o seguinte fragmento de código:

#include<stdio.h>
#include<stdlib.h>

int main(void){
    int a = 10;
    int *aPtr = &a;
    return 0;
}

Imagine que a variável a esteja armazenada no endereço de memória hipotético 1. Agora, analise o código a seguir e identifique qual seria o resultado:

*aPtr += 1;

Se você imaginou que a resposta é 2, está enganado. A justificativa para isso é interessante: quando lidamos com a aritmética de ponteiros, as operações levam em conta o espaço (em bytes) necessário para armazenar aquele tipo de dado.

Como uma variável do tipo int ocupa 4 bytes de armazenamento, o resultado do fragmento de código anterior será 5.

Vejamos:

#include<stdio.h>
#include<stdlib.h>

int main(void){
    int a = 10;
    int *aPtr = &a;

    int *soma = aPtr + 1;

    printf("Endereço de A: %p \n", aPtr);
    printf("Soma: %p \n", soma);
}

Por esse motivo, ao fazer a aritmética de ponteiros, é sempre importante relembrar que o valor resultante pode não ser necessariamente o esperado, já que será levado em consideração a quantidade de bytes necessária para armazenar aquele tipo de dado.

⛔ Acessos inválidos

A aritmética de ponteiros, embora possível na linguagem C, é um recurso que deve ser utilizado com muita cautela. Erros nas operações podem resultar na tentativa de acesso a posições inválidas de memória, situação que pode comprometer o bom funcionamento da solução computacional que estamos desenvolvendo. A dica é: se for usar, use com cautela.

📖 Bibliografia

Livros

  • Backes, A. (2018). Linguagem C - Completa e Descomplicada.