¿Cuáles son las diferencias entre un puntero y una referencia en C++?
¡Saludos, colegas! Acabo de empezar a aprender C++ después de Java y Python, y tengo confusión con los punteros y las referencias. Parece que ambos permiten trabajar con objetos sin copiar, pero no entiendo cuándo usar cada uno.
Aquí hay un ejemplo de mi código. Escribí una función que intercambia los valores de dos variables. Primero intenté usar referencias:
```cpp
void swap_ref(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
```
Luego supe que se puede hacer lo mismo con punteros:
```cpp
void swap_ptr(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
```
Ambas opciones funcionan. Pero noté que con punteros hay que poner asteriscos y ampersands en todas partes al llamar, mientras que con referencias no. También escuché que las referencias no se pueden reasignar, pero los punteros sí. Y que las referencias siempre deben inicializarse, mientras que los punteros pueden ser nullptr.
Mi pregunta principal: ¿cuáles son las diferencias fundamentales entre punteros y referencias?