Avatar ·

Qual é a diferença entre um ponteiro e uma referência em C++? Explique com exemplos

Olá a todos! Acabei de começar a estudar C++ e não consigo entender qual é a diferença entre ponteiros e referências. Os livros dizem que ambos são formas de trabalhar com endereços de memória, mas se comportam de maneira diferente. Aqui está um exemplo simples. Posso declarar um ponteiro e através dele alterar o valor de uma variável:
int a = 5;
int* ptr = &a;
*ptr = 10; // agora a = 10
E exatamente da mesma forma posso fazer com uma referência:
int a = 5;
int& ref = a;
ref = 10; // também a = 10
Parece que o resultado é o mesmo. Mas ouvi dizer que referências não podem ser reatribuídas, enquanto ponteiros podem. E que referências são mais seguras. Mas por quê? E quando usar cada um? Fico especialmente confuso porque em funções podemos passar parâmetros tanto por ponteiro quanto por referência. Qual forma é melhor? E existem situações onde não podemos evitar ponteiros e referências não servem? Explique, por favor, para um iniciante, de preferência com exemplos de código. Desde já agradeço! <<>>

Principais diferen