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.