Ponteiros e endereços em C e C++
Nesta lição, você vai guardar o endereço de uma variável em um ponteiro, acessar o valor pelo ponteiro e alterar a variável original.
Introdução
Um ponteiro (pointer) é uma variável que guarda o endereço de memória de outra variável. O operador & obtém o endereço de uma variável, e o operador * (chamado de desreferência) acessa o valor que está no endereço apontado. Ponteiros são um dos conceitos mais importantes de C e C++.
Pontos importantes
- Um ponteiro só deve apontar para um objeto que ainda existe, do tipo certo, ou ser nulo.
- Cada área de memória alocada deve ser liberada exatamente uma vez.
- Deixe claro qual função é dona da memória (ownership) e quais dados são apenas lidos (const).
Exemplos de código C e 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;
}
score=75 same-address=yes
#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';
}
score=75 same-address=true
Comparação entre C e C++
O ponteiro score_ptr guarda o endereço de score, então *score_ptr += 5 na verdade soma 5 à própria variável score, que passa de 70 para 75. A comparação score_ptr == &score confirma que os dois endereços são o mesmo. C++ ainda usa ponteiros simples (raw pointers) quando só é preciso acessar dados sem gerenciar memória, mas prefere referências quando a variável nunca pode ficar vazia.
A posse e a liberação da memória ficam totalmente por conta do programador.
Contêineres e RAII liberam os recursos automaticamente quando o objeto chega ao fim da vida.
Exercícios práticos
Execute as duas versões e depois mude o código para observar a diferença de segurança que cada linguagem oferece.
- Teste ponteiros nulos e falhas na alocação de memória.
- Execute o programa com AddressSanitizer e UndefinedBehaviorSanitizer para encontrar erros de memória.
- Anote claramente qual ponteiro é dono da memória e qual só serve para leitura.
Pratique com um desafio
Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.
Todos os desafios