Diferencia entre puntero y referencia

Diferencia entre puntero y referencia

Tanto los punteros como las referencias son las características más poderosas en C y C ++ que permiten a los programadores manipular la dirección de memoria directamente para una gestión de memoria eficiente.

Ambas son variables que se utilizan para referirse a otros objetos indirectamente y comparten algunas características comunes en la superficie. Aunque comparten muchas capacidades comunes, también son muy complejos de entender.

Un puntero es una variable que contiene la dirección de memoria de otra variable, mientras que una referencia es como un puntero que puede usarse para referirse indirectamente a otra variable.

La mayoría de los programadores parecen desarrollar cierta comprensión sobre cuándo usar punteros y cuándo usar referencias, pero a menudo encuentran problemas cuya solución parece poco clara.

Entonces, para comprender mejor la filosofía, comprendamos la diferencia entre los dos.

¿Qué es un puntero??

Cada variable es una ubicación de memoria que se define por su dirección y se combina con un identificador que contiene algún valor que se puede cambiar durante el curso de un programa. En términos simples, la variable es un símbolo que representa una cantidad.

Un puntero es una variable que contiene la dirección de memoria de otra variable. Un puntero no es más que una dirección y una variable que almacena un puntero se llama variable de puntero.

La idea es usar identificadores (o nombres) en lugar de direcciones numéricas para aliviar la carga de la programación, reduciendo así la complejidad de los programas. Dado que estas direcciones se refieren a ubicaciones reales en la memoria de la computadora, los punteros se pueden usar para acceder y manipular el contenido almacenado en la memoria.

Como cualquier variable o constante, los punteros deben declararse por sus tipos. Dado que los punteros contienen direcciones de memoria que pertenecen a un tipo de datos separado, deben declararse utilizando punteros antes de que pueda trabajar con ellas. La forma general de una declaración de puntero es:

Data_type * var-name;

Aquí, "data_type" es el tipo base del puntero y "var-name" es la variable de puntero. El asterisco (*) aquí se usa para declarar el puntero que designa la variable "Var-Name" como una variable de puntero.

int *p; // puntero entero

flotante *x; // Poinero flotante

Aquí, la variable "P" apunta a un tipo de datos enteros que se declara como "int" que se refiere al tipo de datos de la variable. Del mismo modo, en el segundo ejemplo, "Float" se refiere al tipo de datos de la variable "X" que de hecho se designa como un puntero a una variable de punto flotante.

Que es una referencia?

Una referencia es como un puntero con acceso indirecto a una variable. Es como un alias para otra variable, lo que significa que es solo otro nombre para una variable ya existente.

Permite a los programadores crear un segundo nombre para la variable que pueden usar para manipular el contenido almacenado en esa variable. Es una entidad que es una alias para otra variable y tiene la misma dirección que la variable original. Admite pasar por referencia que actúa como parámetros formales de función y una vez que se define para referirse a una variable, no se puede volver a reemplazar, lo que significa que no se puede referir a otra variable.

A diferencia de los punteros, no necesitan un operador de desferenciación para acceder al valor; De hecho, se pueden usar como variables normales.

int i;

int & ri = i;

Aquí, "RI" es una referencia entera inicializada a "I". Declara "RI" como un objeto de tipo "Referencia a INT". Una referencia puede confundirse fácilmente con un puntero que es una variable independiente, cuyos valores de dirección no se pueden reasignar una vez.

Diferencia entre puntero y referencia

  1. Conceptos básicos de puntero y referencia

- Ambos proporcionan capacidades casi similares en términos de usabilidad y la distinción puede ser complicado. Un puntero es solo una variable que almacena la dirección de memoria de otra variable, mientras que una referencia es como un alias para una variable ya existente. Crea un segundo nombre para una variable que se puede usar para modificar el contenido almacenado en esa variable.

  1. Declaración de puntero y referencia

- Un puntero es como cualquier otra variable que almacene un dato. A diferencia de otras variables, las variables de puntero almacenan direcciones de memoria en lugar de valores. Se desactiva un puntero utilizando el operador de indirección * para acceder a la ubicación de memoria de la variable a la que señala. Una referencia, por otro lado, no necesita ningún operador de desferencias para acceder al valor.

  1. Reasignación del puntero y referencia

- A diferencia de los punteros que se pueden inicializar en cualquier momento, las referencias deben asignarse al inicialización. Se pueden acceder directamente a punteros, mientras que no se puede acceder directamente a las referencias.

  1. Dirección de memoria para puntero y referencia

- Una variable de puntero tiene su propia ubicación en la memoria, lo que significa que cuando declara un puntero, especifica una ubicación que es una dirección de memoria asignada a cada unidad de memoria. La variable de puntero tiene la misma dirección donde se guarda en la memoria. Una variable de referencia, por otro lado, es un alias para otra variable, tomando así la dirección de la variable de referencia.

  1. Valor nulo para puntero y referencia

- NULL representa el final de la lista, lo que significa que indica que el valor es desconocido y especifica que la variable no tiene un espacio de direcciones válido. El valor nulo se puede asignar a una variable de puntero directamente que sugiere que no apunta a ninguna parte, mientras que NULL no se puede asignar a una variable de referencia.

Puntero vs. Referencia: Gráfico de comparación

Resumen del puntero vs. Referencia

Los punteros siempre han estado entre los temas favoritos de la discusión de los programadores C/C ++ hasta que las referencias llegaron a la imagen. Las referencias son algo similares a los punteros, pero tienen su parte justa de pros y contras en comparación. Si bien ambos pueden usarse para cambiar las variables locales de una función dentro de otra función, tienen sus diferencias. Ambas son características poderosas en C y C ++ que le permiten manipular directamente la memoria, pero con algunas excepciones. Un puntero contiene la dirección de memoria de una variable, mientras que una referencia es solo un alias para otra variable.