El operador de desreferencia (*)
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 4 de 63.
Ahora que sabes cómo almacenar direcciones en punteros, necesitas aprender cómo acceder al valor real almacenado en esa dirección de memoria. El operador de desreferencia (*) te permite "seguir" al puntero para obtener el valor al que apunta.
Cuando colocas el operador * delante de una variable de puntero, este accede al valor almacenado en la dirección de memoria que contiene el puntero. Piénsalo como si dijeras "dame lo que hay dentro de la habitación en esta dirección".
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Imprime 25 - el valor de ageEs importante entender que el asterisco (*) tiene dos significados diferentes en C. Al declarar un puntero como int *ptr;, el asterisco indica que ptr es un puntero. Cuando se usa con un puntero existente como *ptr, desreferencia el puntero para acceder al valor al que apunta.
El operador de desreferencia es esencial porque completa el ciclo de los punteros: puedes almacenar una dirección en un puntero con & y luego recuperar el valor en esa dirección con *. Esto te permite acceder y modificar variables de forma indirecta a través de sus direcciones de memoria.
Desafío
FácilEscribe un programa en C que demuestre el flujo de trabajo completo de los punteros: declaración, asignación de dirección y desreferenciación. Tu programa debe:
- Declarar una variable entera llamada
valuee inicializarla con el valor 75 - Declarar una variable de tipo float llamada
pricee inicializarla con el valor 19.99 - Declarar un puntero a un entero llamado
value_ptr - Declarar un puntero a un float llamado
price_ptr - Usar el operador de dirección (address-of) para asignar la dirección de
valueavalue_ptr - Usar el operador de dirección (address-of) para asignar la dirección de
priceaprice_ptr - Usar el operador de desreferenciación para imprimir el valor de
valuea través devalue_ptr - Usar el operador de desreferenciación para imprimir el valor de
pricea través deprice_ptrcon exactamente 2 decimales
Tu salida debe mostrar los valores desreferenciados en el siguiente formato:
Value through pointer: 75
Price through pointer: 19.99El desafío pone a prueba tu comprensión de cómo el operador de desreferenciación recupera el valor de la variable original siguiendo la dirección almacenada en el puntero.
Hoja de referencia
El operador de desreferencia (*) te permite acceder al valor almacenado en la dirección de memoria que contiene un puntero.
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Imprime 25 - el valor de ageEl asterisco (*) tiene dos significados diferentes en C:
- En declaraciones como
int *ptr;- indica queptres un puntero - Con punteros existentes como
*ptr- desreferencia el puntero para acceder al valor al que apunta
El operador de desreferencia completa el ciclo del puntero: almacena una dirección con &, luego recupera el valor en esa dirección con *.
Pruébalo tú mismo
#include <stdio.h>
int main() {
// TODO: Escribe tu código aquí
// 1. Declarar e inicializar las variables
// 2. Declarar los punteros
// 3. Asignar direcciones a los punteros
// 4. Imprimir los valores desreferenciados
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas