Hablando de referencias, primero contemos una historia: en el patio donde vivimos hay un niño pequeño, su nombre es Luo XX, nos gusta ponerle un apodo; como se ve que no está bien nutrido, tiene la cabeza grande y el cuerpo pequeño, así que le pusimos el apodo de "Cabeza de Rábano". Entonces Luo XX es su nombre real, y Cabeza de Rábano es su alias. Entonces, ¿qué es una referencia?

Definición:Referencia: es un alias de una variable.

Nota:Como alias, una variable no puede tener solo un alias sin tener su propio nombre real.

Referencias a tipos de datos básicos

Como el siguiente fragmento de código:

Ejemplo

#include <iostream> using namespace std; { int a = 3; int &b = a; //b es la referencia de a, es decir, b es un alias de a. //La referencia debe inicializarse, de lo contrario el compilador dará un error b = 10; cout<< a << endl; //En este momento, el valor de a ha cambiado de 3 a 10. Porque no importa qué operación hagamos sobre el alias, en realidad estamos operando sobre la variable misma. Es como si le pidiéramos a Cabeza de Rábano que haga algo, Luo XX lo hará personalmente. return 0; }

Referencias a tipos de estructura

Como el siguiente fragmento de código:

Ejemplo

#include <iostream> using namespace std; //Define una estructura llamada Coor, que es una coordenada. typedef struct { int x; int y; }Coor; int main(void) { Coor c1; //Define una variable de estructura llamada c1. Coor &c = c1; //A c1 se le da un alias llamado c. c.x = 10; //Asignar valores a los miembros de datos de la variable de estructura mediante la referencia c.y = 20; cout<< c1.x << c2.y; //El resultado de salida: 10 20 return 0; }

Referencias a tipos de puntero

Las referencias a tipos de puntero son la parte más compleja y difícil de entender entre las referencias, y también tienen aspectos distintivos en su forma de escritura.

Definición:

Tipo *&nombre_de_referencia_de_puntero = puntero;

Veamos un ejemplo:

Ejemplo

#include <iostream> using namespace std; int main(void) { int a = 10; //Define una variable entera a, cuyo valor es 10. int *p = &a; //Define un puntero que apunta a la variable a int *&q = p; //Define una referencia de puntero, es decir, q es un alias de p. Método de definición: tipo *&nombre_de_la_referencia_de_puntero = puntero; *q = 20; //Asignar 20 a *q equivale a asignar 20 a *p, lo que equivale a asignar 20 a a. cout<< a << endl; //El valor de salida de a es 20. return 0; }

Referencias como parámetros de función

Antes de aprender las referencias, cuando estudiábamos el lenguaje C, aprendimos este programa clásico:

//Intercambiar dos valores void fun( int *a,int *b) //Los parámetros formales son dos variables puntero de tipo entero { int temp = 0; //Define una variable temporal. Un buen hábito es definir una variable e inicializarla; c = *a; //Asignar *a a c; *a = *b; //Asignar *b a *a; *b = c; //Luego asignar c a *b; así se completa el intercambio de los valores de a y b } int x = 10,y = 20; fun(&x,&y); //Al llamarlo en la función principal, los argumentos reales deben escribirse como dirección de a, dirección de b, lo cual es bastante engorroso y difícil de entender.

Ahora que hemos aprendido las referencias, ¿cómo deberíamos escribirlo para lograr la misma funcionalidad?

Ejemplo

void fun (int &a, int &b) //Los parámetros formales son dos referencias de tipo entero { int temp = 0; temp = a; a = b; b = temp; } int x = 10,y = 20; fun(x,y); //Al llamarlo en la función principal, después de pasar los argumentos reales, a es un alias de x y b es un alias de y.

Dirección original: https://blog.csdn.net/stop_and_go/article/details/51334137