Ponteiros e memória

Ponteiros e endereços

Um ponteiro contém o endereço de objeto compatível.

O que é Ponteiros e endereços?

Um ponteiro contém o endereço de objeto compatível.

Armazene endereço, desreferencie e altere o objeto original.

Pontos importantes

  • Todo ponteiro deve apontar para objeto vivo compatível ou ser null.
  • Libere exatamente uma vez cada alocação própria.
  • Expresse ownership e const claramente.

Exemplos de código C e C++

C
Executar →
main.c
#include <stdio.h>

int main(void) {
    int score = 70;
    int *score_ptr = &score;
    *score_ptr += 5;
    printf("score=%d same-address=%s\n", score,
           score_ptr == &score ? "yes" : "no");
    return 0;
}
Saída esperada
score=75 same-address=yes
C++
Executar →
main.cpp
#include <iostream>

int main() {
    int score = 70;
    int* score_ptr = &score;
    *score_ptr += 5;
    std::cout << "score=" << score << " same-address="
              << std::boolalpha << (score_ptr == &score) << '\n';
}
Saída esperada
score=75 same-address=true

Comparação entre C e C++

C usa raw pointer diretamente. C++ o mantém para acesso non-owning e prefere referência quando null não faz sentido.

C

Ownership e limpeza são convenções manuais.

C++

Containers e RAII codificam ownership e limpeza no lifetime.

Exercícios práticos

Execute as duas versões e modifique-as para observar suas garantias.

  • Teste null e falhas de alocação.
  • Use AddressSanitizer e UndefinedBehaviorSanitizer.
  • Documente o ownership de cada ponteiro.