Como ya sabemos que '¿Qué es un puntero?' , un puntero es una variable que almacena la dirección de otra variable. El operador de desreferencia también se conoce como operador de indirección y está representado por (*). Cuando se utiliza el operador de indirección (*) con la variable de puntero, se conoce como desreferenciar un puntero. Cuando eliminamos la referencia a un puntero, se devolverá el valor de la variable apuntada por este puntero.
¿Por qué utilizamos un puntero de desreferenciación?
La desreferenciación de un puntero se utiliza por los siguientes motivos:
- Se puede utilizar para acceder o manipular los datos almacenados en la ubicación de la memoria, a la que apunta el puntero.
- Cualquier operación aplicada al puntero desreferenciado afectará directamente el valor de la variable a la que apunta.
Observemos los siguientes pasos para desreferenciar un puntero.
- Primero, declaramos la variable entera a la que apunta el puntero.
int x =9;
- Ahora, declaramos la variable de puntero entero.
int *ptr;
- Después de la declaración de una variable de puntero entero, almacenamos la dirección de la variable 'x' en la variable de puntero 'ptr'.
ptr=&x;
- Podemos cambiar el valor de la variable 'x' eliminando la referencia a un puntero 'ptr' como se indica a continuación:
*ptr =8;
La línea anterior cambia el valor de la variable 'x' de 9 a 8 porque 'ptr' apunta a la ubicación 'x' y la desreferenciación de 'ptr', es decir, *ptr=8 actualizará el valor de x.
Combinemos todos los pasos anteriores:
poda alfa beta
#include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;}
Producción
Consideremos otro ejemplo.
#include int main() { int x=4; int y; int *ptr; ptr=&x; y=*ptr; *ptr=5; printf('The value of x is : %d',x); printf(' The value of y is : %d',y); return 0; }
En el código anterior:
- Declaramos dos variables 'x' e 'y' donde 'x' tiene un valor '4'.
- Declaramos una variable de puntero 'ptr'.
- Después de la declaración de una variable de puntero, asignamos la dirección de la variable 'x' al puntero 'ptr'.
- Como sabemos que 'ptr' contiene la dirección de la variable 'x', entonces '*ptr' es lo mismo que 'x'.
- Asignamos el valor de 'x' a 'y' con la ayuda de la variable 'ptr', es decir, y=* ptr en lugar de utilizar la variable 'x'.
Nota: Según nosotros, si cambiamos el valor de 'x', entonces el valor de 'y' también cambiará ya que el puntero 'ptr' contiene la dirección de la variable 'x'. Pero esto no sucede, ya que 'y' almacena la copia local del valor '5'.
Producción
Consideremos otro escenario.
#include int main() { int a=90; int *ptr1,*ptr2; ptr1=&a; ptr2=&a; *ptr1=7; *ptr2=6; printf('The value of a is : %d',a); return 0; }
En el código anterior:
- Primero, declaramos una variable 'a'.
- Luego declaramos dos punteros, es decir, ptr1 y ptr2.
- Ambos punteros contienen la dirección de una variable.
- Asignamos el valor '7' al *ptr1 y '6' al *ptr2. El valor final de 'a' sería '6'.
Nota: Si tenemos más de un puntero apuntando a la misma ubicación, entonces el cambio realizado por un puntero será el mismo que el de otro puntero.
Producción