Ponteiros - Parte 1

Até aqui, declaramos variáveis sem nos importamos com os endereços de memória que armazenam os valores informados por nós. A partir de agora, entenderemos como podemos consultar esses endereços.

📍 Consultando endereços de memória

Na linguagem de programação C, podemos utilizar o operador de endereço (representado por &) antes do nome da variável, para obter o seu endereço de memória. Vejamos o exemplo:

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

int main(void){
    int a = 10;
    printf("%d", a); // imprime o valor de A
    printf("%d", &a); // imprime o endereço de memória de A
    return 0;
}

♐ Criando uma variável que aponta para outra

No exemplo anterior, estávamos apenas imprimindo o valor do endereço de memória da variável a. Podemos criar uma segunda variável, chamada de ponteiro (ou apontador), para armazenar o endereço de memória de a:

int a = 10;
int *aPtr;

aPtr = &a;

Poderíamos também reduzir o código acima, declarando tudo em uma linha apenas:

int a = 10;
int *aPtr = &a;

Para entendermos melhor o que acontece, podemos imprimir os valores:

printf("%p\n", &a);
printf("%p\n", aPtr);

🐣 Inicialização dos ponteiros

Como já compreendemos até aqui, uma variável do tipo ponteiro aponta para uma posição de memória. A simples declaração de um ponteiro, sem a atribuição de um valor (como no exemplo abaixo), não apresenta nenhuma utilidade:

int *x;

Como ressaltado por André Backes (2018), "ponteiros não inicializados apontam para um lugar indefinido", como é o caso do fragmento de código acima. Se usarmos esse ponteiro em seu estágio atual, não saberemos com exatidão qual será o resultado no programa. Pode ser que a variável x aponte para uma posição indefinida de memória ou, ainda, aponte para uma região de memória utilizada por outra variável do programa.

Essa constante, que é equivalente a 0 em muitos compiladores, é fornecida pela biblioteca stdlib.h.

🔢 Manipulando valores

A vantagem do uso de ponteiros está em utilizar o endereço de memória de uma variável para poder alterar o seu valor. Para isso, precisamos usar o operador de indireção , representado por *

O operador de indireção funciona com a seguinte lógica:

*aPtr = 25;