Introducción

En C, una estructura es una colección de variables (de diferentes tipos de datos) bajo un solo nombre. Las estructuras anidadas son estructuras que contienen otras estructuras como miembros. Este concepto es útil para modelar datos complejos y jerárquicos.

Conceptos Clave

  1. Definición de Estructuras: Cómo definir una estructura básica.
  2. Anidación de Estructuras: Cómo incluir una estructura dentro de otra.
  3. Acceso a Miembros: Cómo acceder a los miembros de estructuras anidadas.
  4. Inicialización de Estructuras Anidadas: Cómo inicializar estructuras anidadas.

Definición de Estructuras

Antes de profundizar en las estructuras anidadas, repasemos cómo definir una estructura básica en C.

#include <stdio.h>

// Definición de una estructura básica
struct Persona {
    char nombre[50];
    int edad;
    float altura;
};

int main() {
    // Declaración de una variable de tipo struct Persona
    struct Persona persona1;

    // Asignación de valores a los miembros de la estructura
    strcpy(persona1.nombre, "Juan");
    persona1.edad = 30;
    persona1.altura = 1.75;

    // Acceso a los miembros de la estructura
    printf("Nombre: %s\n", persona1.nombre);
    printf("Edad: %d\n", persona1.edad);
    printf("Altura: %.2f\n", persona1.altura);

    return 0;
}

Anidación de Estructuras

Para anidar estructuras, simplemente definimos una estructura dentro de otra. Aquí hay un ejemplo:

#include <stdio.h>

// Definición de la estructura Dirección
struct Direccion {
    char calle[100];
    char ciudad[50];
    int codigoPostal;
};

// Definición de la estructura Persona que incluye una estructura Dirección
struct Persona {
    char nombre[50];
    int edad;
    float altura;
    struct Direccion direccion; // Estructura anidada
};

int main() {
    // Declaración de una variable de tipo struct Persona
    struct Persona persona1;

    // Asignación de valores a los miembros de la estructura
    strcpy(persona1.nombre, "Juan");
    persona1.edad = 30;
    persona1.altura = 1.75;
    strcpy(persona1.direccion.calle, "Calle Falsa 123");
    strcpy(persona1.direccion.ciudad, "Ciudad Ejemplo");
    persona1.direccion.codigoPostal = 12345;

    // Acceso a los miembros de la estructura anidada
    printf("Nombre: %s\n", persona1.nombre);
    printf("Edad: %d\n", persona1.edad);
    printf("Altura: %.2f\n", persona1.altura);
    printf("Dirección: %s, %s, %d\n", persona1.direccion.calle, persona1.direccion.ciudad, persona1.direccion.codigoPostal);

    return 0;
}

Acceso a Miembros

Para acceder a los miembros de una estructura anidada, utilizamos el operador de punto (.) de manera jerárquica. En el ejemplo anterior, persona1.direccion.calle accede al miembro calle de la estructura direccion dentro de persona1.

Inicialización de Estructuras Anidadas

Podemos inicializar estructuras anidadas de manera similar a cómo inicializamos estructuras básicas, pero debemos tener en cuenta la jerarquía.

#include <stdio.h>

// Definición de la estructura Dirección
struct Direccion {
    char calle[100];
    char ciudad[50];
    int codigoPostal;
};

// Definición de la estructura Persona que incluye una estructura Dirección
struct Persona {
    char nombre[50];
    int edad;
    float altura;
    struct Direccion direccion; // Estructura anidada
};

int main() {
    // Inicialización de una variable de tipo struct Persona
    struct Persona persona1 = {
        "Juan",
        30,
        1.75,
        {"Calle Falsa 123", "Ciudad Ejemplo", 12345} // Inicialización de la estructura anidada
    };

    // Acceso a los miembros de la estructura anidada
    printf("Nombre: %s\n", persona1.nombre);
    printf("Edad: %d\n", persona1.edad);
    printf("Altura: %.2f\n", persona1.altura);
    printf("Dirección: %s, %s, %d\n", persona1.direccion.calle, persona1.direccion.ciudad, persona1.direccion.codigoPostal);

    return 0;
}

Ejercicio Práctico

Ejercicio

Define una estructura Libro que contenga los siguientes miembros:

  • titulo (cadena de caracteres)
  • autor (cadena de caracteres)
  • anioPublicacion (entero)
  • editorial (estructura anidada con los miembros nombre y direccion)

Crea una variable de tipo Libro, inicialízala y muestra sus valores.

Solución

#include <stdio.h>

// Definición de la estructura Editorial
struct Editorial {
    char nombre[50];
    char direccion[100];
};

// Definición de la estructura Libro que incluye una estructura Editorial
struct Libro {
    char titulo[100];
    char autor[50];
    int anioPublicacion;
    struct Editorial editorial; // Estructura anidada
};

int main() {
    // Inicialización de una variable de tipo struct Libro
    struct Libro libro1 = {
        "El Quijote",
        "Miguel de Cervantes",
        1605,
        {"Editorial Ejemplo", "Calle Ejemplo 456"}
    };

    // Acceso a los miembros de la estructura anidada
    printf("Título: %s\n", libro1.titulo);
    printf("Autor: %s\n", libro1.autor);
    printf("Año de Publicación: %d\n", libro1.anioPublicacion);
    printf("Editorial: %s, Dirección: %s\n", libro1.editorial.nombre, libro1.editorial.direccion);

    return 0;
}

Conclusión

Las estructuras anidadas en C permiten organizar datos complejos de manera jerárquica y clara. Este concepto es fundamental para modelar datos en aplicaciones más avanzadas. En el siguiente tema, exploraremos las uniones en C, que ofrecen una forma diferente de manejar datos que pueden ser de diferentes tipos en diferentes momentos.

Curso de Programación en C

Módulo 1: Introducción a C

Módulo 2: Tipos de Datos y Variables

Módulo 3: Flujo de Control

Módulo 4: Funciones

Módulo 5: Arreglos y Cadenas

Módulo 6: Punteros

Módulo 7: Estructuras y Uniones

Módulo 8: Asignación Dinámica de Memoria

Módulo 9: Manejo de Archivos

Módulo 10: Temas Avanzados

Módulo 11: Mejores Prácticas y Optimización

Módulo 12: Proyecto y Evaluación Final

© Copyright 2024. Todos los derechos reservados