Cuando pasamos un puntero como parámetro a un método, en realidad pasamos una copia del puntero al método, o podemos decir que pasar el puntero es el valor del puntero aprobado. El editor del Canal de Tecnología del Nuevo Error explicará la diferencia entre referencias y punteros en C ++ en detalle. ¡Ven y mira!
Explicación detallada de la diferencia entre referencia y puntero en C ++
Las referencias se introducen a partir de C ++ y no existen en C. Para comprender el concepto de cita, primero debe comprender la definición de variables y la diferencia entre referencias y variables. Hay dos elementos de variables: nombre y espacio.
Una referencia no es una variable, es solo un alias para una variable y no tiene espacio independiente. Solo cumple con el elemento "Nombre" de la variable, y el elemento "Espacio" no está satisfecho. En otras palabras, una referencia debe compartir el mismo espacio de memoria que la variable que hace referencia, y el cambio a la referencia es en realidad una modificación a la variable que hace referencia. Y las referencias deben inicializarse cuando se definen.
El tipo de parámetro pase y puntos relacionados:
1 Pase por valor: el valor del parámetro formal no se puede modificar. El parámetro real debe inicializar el parámetro formal, y el espacio debe asignarse y luego copiar el contenido del parámetro real en el parámetro formal.
2 Pase de referencia: no hay necesidad de asignar espacio cuando se inicializa el parámetro real.
Pasando 3 puntero: en esencia, todavía se pasa por valor. Cuando se inicializa el parámetro real, el espacio aún debe asignarse. Si necesita modificar la dirección del puntero, simplemente no es posible pasarla con un puntero. Debes usar ** o *&
Los siguientes son los contenidos relevantes citados:
1 concepto de cita
2 cotizaciones de constante
3 referencia de pase como parámetro
4 referencia como valor de retorno de función
5. La diferencia entre referencia y puntero
1 concepto de cita
Solo tenga en cuenta los siguientes puntos clave:
(1) La referencia es un alias para variables y no hay espacio independiente
(2) La referencia debe compartirse con las variables que hace referencia
(3) El cambio a una referencia es en realidad un cambio a la variable que hace referencia
(4) Se deben inicializar referencias al definir
(5) Una vez que se inicializa la referencia, no se pueden recitar otras variables.
Vea el siguiente ejemplo:
int main (void) {int val = 100; // int & refval; <span style = "white-space: pre"> </span> // error, la referencia debe inicializarse int & refval = val; cout << "val =" << val << endl; Refval = 200; <span style = "White-Space: pre"> </span> // De hecho, la variable Val se ha cambiado cout << "val =" << Val << endl; int val2 = 500; Refval = val2; <span style = "White-Space: pre"> </span> // Esto no significa que la variable Val2 se haga referencia a Val2, // solo significa asignar Val2 a Refval, es decir, Val. cout << "val =" << val << endl; regresar 0; }2 cotizaciones de constante
Los puntos clave de Const Quote son los siguientes:
(1) Como su nombre lo indica, una referencia constante es una referencia a un objeto const.
(2) Una referencia constante puede referirse a un objeto no Const, pero una referencia no Const no puede referirse a un objeto const. Consulte el siguiente ejemplo de función.
int a = 200; const int & ref = a; // OK const int b = 100; int & ref2 = b; //Error,
(3) El valor del objeto referenciado por const es una constante y no se puede modificar.
const int a = 200; const int & ref = a; ref = 100; // Error, el objeto referenciado es constante y no se puede modificar
(4) Una referencia constante puede referirse a variables de diferentes tipos, pero producirá una variable temporal. como sigue:
doble a = 3.14; const int & ref = a; // OK, el proceso que genera es: // int tmp = a; Genere la variable temporal TMP, y los datos pueden truncarse. // const int & ref = tmp; la referencia es en realidad una variable temporal
3 referencia de pase como parámetro
Pasar una referencia como parámetro es uno de los parámetros. No necesita asignar espacio de memoria cuando se inicializa el parámetro real. Aquí hay un ejemplo:
Swap void (int & a, int & b) {int tmp = a; a = b; b = tmp; } int main () {int x = 20; int y = 30; intercambio (x, y); cout << x << endl; // x = 30; cout << y << endl; // y = 20; }4 referencia como valor de retorno de función
Primera lista de los ejemplos, como sigue:
int a [] = {1,2,3,4,5,6,7,8,9,0}; int & index (int i) {return a [i]; } int main () {index (3) = 100; cout << a [3] << endl; // Salida: 100}Esta es otra función de las referencias, donde la función se puede colocar a la izquierda del operador de asignación. La función de índice devuelve una referencia de []. Los cambios en la referencia modificarán el cambio en sí, por lo que A [3] se modifica a 100.
5. La diferencia entre referencia y puntero
(1) La referencia de acceso es acceso directo, y el puntero de acceso es acceso indirecto.
(2) La referencia es un alias para las variables. No asigna su propio espacio de memoria por separado, pero el puntero tiene su propio espacio de memoria
(3) Una vez que se inicializa la referencia, no se pueden hacer referencia a otras variables, pero el puntero puede
(4) Use referencias tanto como sea posible y use punteros siempre que tenga que hacerlo.
Gracias por leer y explicar las diferencias entre referencias y punteros en C ++ en detalle. Espero que pueda ayudarte. ¡Gracias por su apoyo de la nueva red de canales de tecnología!