Pular para conteúdo

Aula 11 – Ponteiros e Arrays 🎭

Você sabia que, em C, um vetor é na verdade apenas um ponteiro disfarçado? Entender essa relação é a chave para escrever códigos extremamente rápidos e eficientes.


🎭 1. O Nome do Vetor é um Ponteiro

Quando você declara int v[5], o nome v funciona como um ponteiro constante para o primeiro elemento do array (&v[0]).

#include <stdio.h>

int main() {
    int v[3] = {10, 20, 30};

    printf("Endereço de v[0]: %p\n", &v[0]);
    printf("Valor de v (como ponteiro): %p\n", v); // São o mesmo endereço!

    return 0;
}

➕ 2. Aritmética de Ponteiros

Diferente de números comuns, somar 1 a um ponteiro não pula 1 byte, mas sim 1 elemento. O C sabe o tamanho do tipo de dado e pula a quantidade exata de bytes.

  • p + 1: Aponta para o próximo elemento do vetor.
  • *(p + 1): É exatamente o mesmo que v[1].
int v[3] = {10, 20, 30};
int *p = v;

printf("Primeiro: %d\n", *p);       // v[0]
printf("Segundo: %d\n", *(p + 1));  // v[1]
printf("Terceiro: %d\n", *(p + 2)); // v[2]

🔁 3. Percorrendo Arrays sem Colchetes

Podemos usar a aritmética de ponteiros para varrer um vetor de forma muito performática.

int v[5] = {1, 2, 3, 4, 5};
int *p = v;

for (int i = 0; i < 5; i++) {
    printf("Elemento %d: %d\n", i, *(p + i));
}

🏗️ 4. Por que isso importa?

Em sistemas embarcados, drivers de hardware e motores de jogos, acessar a memória via aritmética de ponteiros costuma ser levemente mais rápido que usar a notação de colchetes [], pois evita cálculos extras do compilador.


🚀 Mini-Projeto da Aula: "O Varredor de Memória"

Objetivo: Criar um programa que peça 5 números para um vetor, mas que realize a leitura e a impressão de todos os valores sem usar colchetes [], utilizando apenas ponteiros e aritmética.


📝 Exercícios de Fixação

  1. Crie um vetor de 5 double e use um ponteiro para percorrê-lo e calcular a média.
  2. Tente somar 2 a um ponteiro para int. Quantos bytes o endereço mudou? (Use %p para verificar).
  3. Desafio: Escreva uma função que receba um ponteiro para o início de uma string e conte quantos caracteres ela tem sem usar a função strlen.

Próxima Aula: Estruturas (Structs)