Puntero y referencia

Anonim

Tanto los punteros como las referencias son las funciones más potentes en C y C ++ que permiten a los programadores manipular la dirección de memoria directamente para una administración eficiente de la memoria.

Ambas son variables que se usan para referirse a otros objetos indirectamente y comparten algunas características comunes en la superficie. Aunque comparten muchas capacidades comunes, también son muy complejas 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 se puede usar 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 se encuentran con problemas cuya solución parece poco clara.

Entonces, para entender mejor la filosofía, entendamos 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 está emparejada con un identificador que contiene algún valor que se puede cambiar durante el curso de un programa. En términos simples, 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 una variable de puntero.

La idea es utilizar 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 ser declarados para sus tipos. Dado que los punteros contienen direcciones de memoria que pertenecen a un tipo de datos separado, deben declararse utilizando punteros antes de poder trabajar con ellos. La forma general de una declaración de puntero es:

Tipo de datos * var-name;

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

int * p; // puntero entero

flotar * x; // puntero flotante

Aquí, la variable "p" apunta a un tipo de datos entero que se declara como "int" que se refiere al tipo de datos de la variable. De manera similar, en el segundo ejemplo, "flotante" se refiere al tipo de datos de la variable "x" que, de hecho, se designa como un puntero a una variable de punto flotante.

¿Qué 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 un alias para otra variable y tiene la misma dirección que la variable original. Admite la función de paso por referencia como parámetros formales de función y una vez que se define para referirse a una variable, no se puede volver a asignar, lo que significa que no se puede referir a otra variable.

A diferencia de los punteros, no necesitan un operador de referencia para acceder al valor; De hecho, se pueden utilizar 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 se puede confundir fácilmente con un puntero que es una variable independiente, cuyos valores de dirección no se pueden reasignar una vez creados.

Diferencia entre puntero y referencia

  1. Conceptos básicos de puntero y referencia

- Ambos proporcionan capacidades casi similares en términos de facilidad de uso y la distinción puede ser complicada. 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 almacena un dato. A diferencia de otras variables, las variables de puntero almacenan direcciones de memoria en lugar de valores. Se elimina la referencia de un puntero utilizando el operador de direccionamiento indirecto * para acceder a la ubicación de memoria de la variable a la que apunta. Una referencia, por otro lado, no necesita ningún operador de referencia para acceder al valor.

  1. Reasignación de puntero y referencia

- A diferencia de los punteros que pueden inicializarse en cualquier momento, las referencias deben asignarse en la inicialización. Los punteros se pueden acceder directamente, mientras que las referencias no se pueden acceder directamente.

  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 que toma 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 NULL se puede asignar a una variable de puntero directamente, lo que sugiere que no apunta a ningún lado, mientras que NULL no se puede asignar a una variable de referencia.

Puntero vs. Referencia: Cuadro de comparación

Resumen de puntero vs. referencia

Los punteros siempre han estado entre los temas favoritos de discusión de los programadores de C / C ++ hasta que las referencias llegaron a la imagen. Las referencias son algo similares a los punteros, pero tienen su parte justa de ventajas y desventajas en comparación. Si bien ambas pueden usarse para cambiar las variables locales de una función dentro de otra función, tienen sus diferencias. Ambas son funciones potentes 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.