Referencias y punteros
Existen dos maneras en C++ para modificar una variable de forma indirecta a través de enlaces a su dirección de memoria. Los punteros es una tecnología muy útil, pero a la vez compleja, que se hereda de C, que explicaremos más adelante. C++ introduce una alternativa más simple a los punteros, las referencias.
Referencias
Como hemos dicho, las referencias se consideran una alternativa simple de los punteros, considerando a estos sus hermanos mayores. Una refencia permite tener más de vía de escritura y lectura de una variable. ¿Cómo puede ser esto? Veamos el siguiente ejemplo, sobre el uso común de una referencia sobre una variable tipo entero:
int j = 8;
int &i = j;
Aviso: a diferencia de los punteros (como veremos más adelante), las referencias siempre tienen que ser inicializadas al ser definidas, por lo que un código como el siguiente daría error:
int &i;
Una vez inicializada, una referencia no se puede cambiar la variable a la que haga referencia. Ya que el operador de asignación cambiará la variable original.
En el caso anterior hemos definido dos variables j
e i
. La primera es una variable de tipo primitivo, pero con la segunda hemos utilizado el operador para definir referencias &
. Si nosotros ejecutamos el siguiente código de ejemplo:
cout << j << endl;
cout << i << endl;
Obtendremos la salida:
8
8
¿Entonces en que cambiar respecto a su código equiparable con variables primitivas?
int j = 8; int i = j;
La diferencia reside al evaluar:
i = 10;
cout << j << endl;
cout << i << endl;
Esperamos, que al igual que en el caso con las variables primitivas, la salida sea:
10
8
Ya que j
se vería inalterada con el cambio de i
. Pero la salida generada por el código con el uso de referencia, nos muestra:
10
10
Esto se debe a que al hacer la referencia int &i = j;
se establece un alias entre j
e i
y a partir de ahí, ambas apuntarán a la misma dirección de memoria, por lo tanto, los cambios que se hagan por cualquiera de las dos variables, repercuten sobre la otra.
Pregunta
- ¿Qué ocurrirá si declaramos una tercera referencia
h
sobrei
?