Menu
Coddy logo textTech

Punteros a estructuras

Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 44 de 63.

Ahora que te sientes cómodo trabajando con estructuras, es hora de combinarlas con otro concepto potente de C: los punteros. Del mismo modo que puedes crear punteros a tipos de datos básicos como int o char, también puedes crear punteros que contengan la dirección de una variable de estructura.

La sintaxis para declarar un puntero a una estructura sigue el mismo patrón que otras declaraciones de punteros:

struct StructureName *pointerName;

Por ejemplo, usando nuestra conocida estructura Point:

struct Point p1 = {10, 20};
struct Point *ptr;

Esto crea un puntero llamado ptr que puede almacenar la dirección de una estructura Point. Para hacer que el puntero apunte realmente a nuestra variable de estructura, usas el operador de dirección:

ptr = &p1;

Ahora ptr contiene la dirección de memoria de la variable de estructura p1. Esto abre nuevas posibilidades para trabajar con estructuras, especialmente al pasarlas a funciones o gestionar la memoria dinámicamente. Los punteros a estructuras son esenciales para crear estructuras de datos más complejas y escribir programas eficientes en C.

challenge icon

Desafío

Fácil

Crea un programa en C que demuestre cómo trabajar con punteros a estructuras. Tu programa debe:

  1. Definir una estructura struct llamada Product con los siguientes miembros:
    • Un entero id para almacenar el ID del producto
    • Un arreglo de caracteres name con tamaño 25 para almacenar el nombre del producto
    • Un número de punto flotante price para almacenar el precio del producto
    • Un entero quantity para almacenar la cantidad disponible
  2. En la función main, crear una variable Product llamada item e inicializarla con los siguientes valores:
    • ID: 501
    • Nombre: "Laptop"
    • Precio: 899.99
    • Cantidad: 15
  3. Declarar un puntero a una estructura Product llamado itemPtr
  4. Asignar la dirección de la variable item a itemPtr mediante el operador de dirección
  5. Imprimir la información original del producto accediendo directamente a los miembros de la estructura (usando el operador punto) en este formato exacto:
    • Original Product Info:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  6. Imprimir la misma información del producto accediendo a los miembros de la estructura a través del puntero (usando el operador de desreferenciación y la notación de punto: (*itemPtr).member) en este formato exacto:
    • Product Info via Pointer:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  7. Verificar que el puntero apunte correctamente a la estructura imprimiendo las direcciones de memoria en este formato exacto:
    • Address of item: [address]
    • Value of itemPtr: [address]
    • Address verification: [result]

Para la verificación de la dirección, imprime Match si las direcciones son iguales, o No Match si son diferentes.

Este desafío evalúa tu comprensión de la declaración de un puntero a una estructura, la asignación de direcciones mediante el operador de dirección y el acceso a los miembros de una estructura a través de punteros usando el operador de desreferenciación combinado con la notación de punto. También verificarás que el puntero contenga correctamente la dirección de la variable de estructura.

Pruébalo tú mismo

#include <stdio.h>
#include <string.h>

// TODO: Define el struct Product aquí

int main() {
    // TODO: Escribe tu código aquí
    // 1. Crea e inicializa la variable Product 'item'
    // 2. Declara un puntero a Product llamado 'itemPtr'
    // 3. Asigna la dirección de 'item' a 'itemPtr'
    // 4. Imprime la información original del producto usando el operador punto
    // 5. Imprime la información del producto a través del puntero usando (*itemPtr).member
    // 6. Imprime y verifica las direcciones
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de C online