Diferencia entre referencia de C ++ y puntero

Aunque la referencia de C ++ al puntero parece ser similar, existe una diferencia significativa entre la referencia de C ++ y el puntero. Una variable de referencia se puede decir como otro nombre para una variable existente. Una vez que esta variable se inicializa, el nombre de la variable se puede usar para referirse a otra variable. Los punteros, por otro lado, son variables que almacenan la dirección de una variable. Al igual que cualquier variable, estas se declaran primero y luego la dirección de cualquier variable se puede almacenar en ellas. Echemos un vistazo a las diferencias entre C ++ Reference vs Pointer en detalle como a continuación.

Comparación cabeza a cabeza entre referencia de C ++ y puntero (infografía)

A continuación se muestra la diferencia de 7 principales entre la referencia de C ++ y el puntero

Diferencias clave entre la referencia de C ++ y el puntero

Tanto C ++ Reference vs Pointer son opciones populares en el mercado; Discutamos algunas de las principales diferencias entre la referencia de C ++ y el puntero:

La principal diferencia entre C ++ Reference vs Pointer es que uno se refiere a otra variable mientras este último almacena la dirección de una variable. Las referencias no hacen un cambio en una variable original, mientras que si se cambia el puntero sí afecta a la variable original. Se debe inicializar una referencia en la declaración, mientras que no es necesario inicializar un puntero una vez que se declara. Se puede crear una matriz de punteros mientras que no se puede crear una matriz de referencias. No se puede asignar un valor nulo a una referencia, pero se puede asignar a un puntero.

Tabla de comparación de referencia de C ++ vs puntero

La comparación principal entre la referencia de C ++ y el puntero se analiza a continuación:

La base de comparación entre referencia de C ++ vs punteroReferencia de C ++Puntero
VariablesUna referencia se puede decir como un alias a una variable existente. El uso principal de esta variable es trabajar como un parámetro que funciona como una referencia de paso. Esto se pasa a una función. La función a la que se pasa esto funciona en la variable original en lugar de la copia en un pase por valor. Los cambios realizados dentro de la función también se reflejarán afuera.Las variables de puntero son variables que almacenan direcciones. A diferencia de las variables habituales que tenemos como int, double y char, almacena direcciones de memoria. Para facilitar la programación, surge la necesidad de esta variable. Es una variable que puede almacenar un valor de un tipo particular.
DeclaraciónLa declaración de una variable de referencia de C ++ se realiza agregando un símbolo '&' antes de una variable. Cuando se usa con una expresión denota que está funcionando como una dirección de operador. Se utiliza para proporcionar otro nombre a una variable existente.
Sintaxis:
tipo & nuevoNombre = existenteNombre ;
// o
tipo & nuevoNombre = existenteNombre ;
// o
tipo & nuevoNombre = existenteNombre ;
Por ejemplo:
/ * Prueba de declaración de referencia e inicialización * /
#incluir
usando el espacio de nombres estándar;
int main () (
nombre de cadena = "Priya"; // Declara una variable de cadena llamada nombre
string & refName = name; // Declarar una referencia (alias) al nombre de la variable
// Tanto refName como name se refieren al mismo valor de "Priya"
cout << nombre << endl; // Imprime el valor de la variable "Priya"
cout << refName << endl; // Imprime el valor de referencia "Priya"
Ahora cambie el valor de Nombre
refName = "Karishma"; // Vuelva a asignar un nuevo valor a refName
cout << refName << endl;
cout << nombre << endl; // El valor del número también cambia "Karishma"
nombre = "Snehal"; // Reasigna un nuevo valor al nombre
cout << namer << endl;
cout << refName << endl; // El valor de refName también cambia "Snehal"
)
Esto significa que los valores de una variable de referencia se pueden cambiar en el original y la copia de la variable.
Antes de usar un puntero en cualquier parte del programa, debe declararse de antemano. Para declarar un puntero y hacer que el sistema sepa que es un puntero, una variable está precedida por un '*'. Un puntero se acompaña con un tipo de datos que puede ser int o double, etc.
Sintaxis:
tipo * pntr ; // Declara una variable de puntero llamada pntr como un puntero de tipo
// o
tipo * pntr ;
// o
tipo * pntr ;
Por ejemplo:
int * newPtr; // Declara una variable de puntero llamada newPtr apuntando a un int (un puntero int)
Este puntero contendrá la dirección. Esa dirección tiene un valor int.
double * newdPtr; // Declarar un puntero doble
El * indica que se está declarando un puntero y no actúa como operador.
ReasignaciónUna variable de referencia no se puede reasignar.
Ejemplo:
int x = 5;
int y = 6;
int & r = x;
Se puede reasignar un puntero y esta propiedad es útil cuando un desarrollador implementa estructuras de datos como listas vinculadas, árboles, etc.
Ejemplo:
int x = 5;
int y = 6;
int * p;
p = & x;
p = & y;
Dirección de memoriaUna variable de referencia comparte la misma dirección que la variable original. Estas referencias se pueden pasar a diferentes funciones, se pueden almacenar en diferentes clases, etc. Una referencia nunca apunta a una nueva variable hasta que la antigua se elimine o quede fuera de alcance.Un puntero tiene su propia dirección de memoria y la almacena en la pila. Un puntero es una variable independiente y puede tener nuevos valores asignados a sí mismo.
Valor nuloUna referencia no puede tener un valor nulo asignado.Un puntero puede tener un valor nulo asignado directamente.
ArgumentosSe puede hacer referencia a una variable de referencia bypass por valor. Aquí los argumentos se pasan por valor a las funciones. Se crea un clon y se envía a la función que lo usa. Los cambios realizados en la copia no tienen efecto en la variable original.Cuando deseamos cambiar la copia original, puede hacerlo pasando un puntero del objeto a la función. Esto se conoce como pasar por referencia.
Cuándo usarLas referencias están accediendo indirectamente a una variable. Considere el siguiente ejemplo:
día de enumeración
(
Domingo Lunes, …
);
Si definimos una variable
día x;
Y queremos sobrecargar un operador a la declaración, entonces podemos escribir de la siguiente manera:
día y operador ++ (día y día)
(
d = (día) (d + 1);
retorno d;
)
En resumen, esto se puede usar en parámetros de función y tipos de referencia.
El uso de punteros es sin ninguna declaración previa.
día * operador ++ (día * d);
Esto se puede usar para implementar estructuras de datos y operaciones aritméticas de puntero.

Conclusión: referencia de C ++ vs puntero

C ++ Reference vs Pointer son difíciles de trabajar, pero mejoran en gran medida la eficiencia del programa. Ambos C ++ Reference vs Pointer tienen sus propios usos y sirven para sus propios fines. Puede usar punteros cuando desee implementar estructuras de datos y algoritmos, mientras que referencias cuando desee usar funciones y parámetros con tipos de retorno.

Artículo recomendado

Esto ha sido una guía para las principales diferencias entre C ++ Reference vs Pointer. Aquí también discutimos las diferencias clave de referencia de C ++ vs puntero con infografías y tabla de comparación. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. Python vs C ++ diferencias
  2. Rendimiento de C vs C ++: las mejores diferencias
  3. MongoDB vs Cassandra
  4. Mobx vs Redux
  5. C ++ Vector vs Array: principales diferencias
  6. MongoDB vs DynamoDB: Funciones
  7. MongoDB vs SQL: ¿Cuáles son las funciones?
  8. C vs C #: funciones