Capítulo 10: Introdução aos Ponteiros 🕶️💊

Neste capítulo, vamos entrar no conceito mais famoso e temido da linguagem C: os Ponteiros! Vamos usar o tema Matrix para entender como eles funcionam.


📖 O que são Ponteiros?

Um ponteiro é uma variável cujo valor é o endereço de memória de outra variável. Em vez de guardar um dado (como o número 42), ele guarda o lugar onde esse dado está guardado na memória ram do computador.

Tomar a Pílula Vermelha significa ver como a Matrix (memória) realmente funciona!


📖 Exemplo Guiado: Endereço do Neo

Vamos criar uma variável para o Neo e usar um ponteiro para descobrir onde ela está na memória.

  1. Crie o arquivo endereco_neo.c na pasta src/:
#include <stdio.h>
 
int main() {
    int neo = 101; // Valor da variável
    int *ponteiro_neo; // Declarando um ponteiro para inteiro
 
    ponteiro_neo = &neo; // O operador '&' pega o endereço de neo
 
    printf("Valor de Neo: %d\n", neo);
    
    // O %p exibe o endereço de memória em hexadecimal
    printf("Endereco de Neo na Matrix: %p\n", &neo);
    printf("Valor guardado no Ponteiro: %p\n", ponteiro_neo);
    
    // O operador '*' (quando usado fora da declaração) pega o valor que está no endereço
    printf("Valor apontado pelo Ponteiro: %d\n", *ponteiro_neo);
 
    return 0;
}

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Compile: gcc endereco_neo.c -o endereco_neo
  3. Execute: ./endereco_neo

Resultado Esperado:

Valor de Neo: 101
Endereco de Neo na Matrix: 000000000061FE14 (o valor pode mudar a cada execução)
Valor guardado no Ponteiro: 000000000061FE14
Valor apontado pelo Ponteiro: 101

📊 Ilustração Visual: Ponteiro na Memória

Veja como o ponteiro aponta para a variável:

graph LR
    subgraph Memória RAM
    A[Variável: neo <br> Valor: 101 <br> Endereço: 0x61FE14]
    B[Ponteiro: ponteiro_neo <br> Valor: 0x61FE14]
    end
    B -->|Aponta para| A

🛠️ Prática Obrigatória 1: Alterando Valores via Ponteiro

Se mudarmos o valor através do ponteiro, a variável original muda! Crie um programa chamado mudar_valor.c que tenha uma variável int pílula = 0. Crie um ponteiro para ela e, usando o ponteiro (*ponteiro = 1), mude o valor da pílula para 1. Exiba o valor da variável original no final.


🔑 Gabarito de Código

Prática 1: mudar_valor.c

#include <stdio.h>
 
int main() {
    int pilula = 0;
    int *p;
 
    p = &pilula;
    
    // Mudando o valor de 'pilula' através do ponteiro
    *p = 1; 
 
    printf("Escolha da pilula (0-Azul / 1-Vermelha): %d\n", pilula);
    
    if (pilula == 1) {
        printf("Voce escolheu a pilula vermelha. Bem-vindo ao mundo real.\n");
    }
 
    return 0;
}

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

(Siga o padrão estabelecido no Guia)


Capitulo Anterior | Proximo Capitulo