Gráfica comparativa
Base para la comparación | Puntero | Referencia |
---|---|---|
BASIC | El puntero es la dirección de memoria de una variable. | La referencia es un alias para una variable. |
Devoluciones | La variable de puntero devuelve el valor ubicado en la dirección almacenada en la variable de puntero que está precedida por el signo de puntero '*'. | La variable de referencia devuelve la dirección de la variable precedida por el signo de referencia '&'. |
Los operadores | *, -> | Y |
Referencia nula | La variable de puntero puede referirse a NULL. | La variable de referencia nunca puede referirse a NULL. |
Inicialización | Se puede crear un puntero sin inicializar. | Nunca se puede crear una referencia no inicializada. |
Tiempo de Inicialización | La variable de puntero se puede inicializar en cualquier momento del programa. | La variable de referencia solo se puede inicializar en el momento de su creación. |
Reinicialización | La variable de puntero se puede reinicializar tantas veces como sea necesario. | La variable de referencia nunca podrá reinicializarse nuevamente en el programa. |
Definición de puntero
Un "puntero" es una variable que contiene la ubicación de memoria de otra variable. Los operadores utilizados por la variable de puntero son * y ->. La declaración de la variable del puntero contiene el tipo de datos base seguido del signo '*' y el nombre de la variable.
escribe * var_name;
Entendamos puntero con la ayuda de un ejemplo.
int a = 4; int * ptr = & a; cout <Aquí, tenemos una variable entera a y una variable de puntero ptr que almacena la dirección de la variable a.
Aritmética de puntero
La variable de puntero puede operarse con dos operadores aritméticos que son "suma" y "resta". La adición se refiere como "incremento", y la resta se refiere como "disminución". A medida que se incrementa una variable de puntero, apunta a la ubicación de memoria de la siguiente variable de su tipo base. A medida que disminuye la variable del puntero, apunta a la ubicación de la memoria de la variable anterior de su tipo base. Por lo tanto, se puede acceder a una matriz de manera eficiente mediante una variable de puntero.
Indirección múltiple
Un puntero apunta a la otra variable de puntero que apunta al valor objetivo. Este tipo de puntero siempre se inicializa con la dirección de otra variable de puntero. La declaración de un puntero a un puntero es como sigue.
tipo ** var_name;Vamos a estudiarlo con un ejemplo.
int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; cout <Puntero de funcion
Como sabemos que una función no es una variable, todavía tiene una ubicación de memoria, que se puede asignar a una variable de puntero. Una vez que un puntero apunta a una función, entonces se puede llamar a la función con ese puntero de función.
Los puntos importantes a recordar sobre el puntero.
- La variable de puntero se puede crear sin su inicialización y se puede inicializar en cualquier parte del programa.
- La variable de puntero se puede reinicializar a otra variable.
- La variable de puntero puede referirse a NULL.
Definición de Referencia
La variable de referencia se utiliza para referirse a la variable que se asigna a esa variable de referencia. El operador utilizado por la variable de referencia es '&'. La declaración de una variable de referencia contiene el tipo base seguido por el signo '&' y luego el nombre de la variable.
escriba & refer_var_name = var_ name;Aquí, el tipo es el tipo de datos, el operador & confirma que es una variable de referencia. El refer_var_name es el nombre de la variable de referencia. Var_name es el nombre de la variable, a la que queremos que se refiera la variable de referencia.
Entendamos la variable de referencia con la ayuda de un ejemplo.
int a = 4; int & b = a; // b se refiere a ab = 6; // ahora a = 6Aquí, a la variable de tipo int se le asigna un valor 4. A la variable de referencia se le asigna la variable a, es decir, b es el alias de a. Ahora, cuando asignamos otro valor a b, modificamos el valor de a. Por lo tanto, se puede decir que los cambios realizados en una variable de referencia también ocurrirán en la variable referida por esa variable de referencia.
El punto más importante es que la variable de referencia se debe inicializar en el momento de su creación. Una vez que la variable de referencia se inicializa con una variable, no se puede reinicializar para referirse a otra variable. En el momento en que asigna un valor a una variable de referencia, asigna ese valor a una variable a la que apunta una variable de referencia. La variable de referencia nunca puede referirse a NULL. La aritmética no se puede realizar en una variable de referencia.
La variable de referencia se puede utilizar de tres maneras:
- Como función devuelve valor.
- Como parámetro de una función.
- Como referencia independiente.
Diferencias clave entre puntero y referencia
- La referencia es como crear otro nombre para referirse a una variable de modo que se pueda referir con nombres diferentes. Por otro lado, un puntero es simplemente una dirección de memoria de una variable.
- Una variable de puntero, si está precedida por '*', devuelve el valor de una variable cuya dirección se almacena en el puntero variable. Una variable de referencia cuando es precedida por '&' devuelve la dirección de esa variable.
- Los operadores de puntero son * y -> mientras que, el operador de referencia es &.
- Una variable de puntero, si no lleva ninguna dirección de variable, apunta a nula. Por otro lado, una variable de referencia nunca puede referirse a Null.
- Siempre puede crear una variable de puntero unializado, pero creamos una referencia cuando necesitamos un alias de alguna variable para que nunca pueda crear una referencia unitaria.
- Puede reinicializar un puntero, pero una vez que se inicializa una vez, no puede reinicializarlo nuevamente.
- Puede crear un puntero vacío e inicializarlo en cualquier momento, pero debe inicializar la referencia solo cuando cree una referencia.
Nota:
Java no soporta punteros.
Conclusión
Tanto el puntero como la referencia se utilizan para señalar o referir otra variable. Pero ambos difieren en su uso e implementación.