Pular para conteúdo

Ponteiros e Arrays 🎭

Aula 11 - A Relação Secreta


O que vamos aprender hoje? 📅

  • O array como ponteiro
  • Aritmética de Ponteiros
  • Navegando na Memória
  • Array Notation vs Pointer Notation
  • Performance e Eficiência

O Segredo do C 🤐

Em C, o nome de um vetor é um ponteiro constante para o seu primeiro elemento.

int v[5];
// v é igual a &v[0]

Aritmética na Prática ➕

Somar 1 ao ponteiro move o endereço para o próximo elemento, não para o próximo byte.

  • p + 1 -> Próximo int (4 bytes depois)
  • p + 2 -> Dois ints depois (8 bytes depois)

Notações Equivalentes ↔️

Notação de Array Notação de Ponteiro
v[0] *v
v[1] *(v + 1)
v[i] *(v + i)
&v[i] v + i

Percorrendo um Vetor 🔁

int v[] = {10, 20, 30};
int *p = v;

for (int i=0; i<3; i++) {
    printf("%d ", *(p + i));
}

Incremento de Ponteiro ⬆️

Podemos mover o ponteiro em si:

while (p <= &v[2]) {
    printf("%d ", *p);
    p++;
}

Arrays em Funções 📦

Quando passamos um array para uma função, passamos apenas o endereço do primeiro elemento.

void imprimir(int *v, int tam) { ... }

Por isso o sizeof() não funciona dentro da função!


Performance ⚡

Aritmética de ponteiros costuma ser mais rápida em loops críticos, pois evita a multiplicação índice * tamanho_do_tipo a cada passo.


Strings são Arrays... 🔡

...logo, strings são ponteiros!

char *s = "Olá";
printf("%c", *(s + 1)); // Saída: 'l'

Perigos: Out-of-bounds 🚫

A aritmética de ponteiros permite que você "saia" do vetor facilmente.

int v[3];
*(v + 10) = 5; // DESASTRE! 💀

Desafio da Aula 🚀

Crie o "Varredor de Memória": Preencha um vetor e use aritmética de ponteiros para percorrê-lo e encontrar o maior valor.


Próxima Aula 🔜

Aula 12 - Estruturas (Structs)

Como criar nossos próprios tipos de dados complexos? 🏗️


Dúvidas? 🤔

Mantenha a calma e confie na aritmética!


FIM DA AULA 11 ✨

Você agora domina o fluxo da memória!