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 quev[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
- Crie um vetor de 5
doublee use um ponteiro para percorrê-lo e calcular a média. - Tente somar
2a um ponteiro paraint. Quantos bytes o endereço mudou? (Use%ppara verificar). - 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.