Estructuras y Uniones

Definición y uso de estructuras

Las estructuras en C te permiten definir tus propios tipos de datos combinando varios tipos de datos en una sola entidad. Aquí tienes una explicación detallada:

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

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

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

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

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

    return 0;
}

				
			

Explicación:

  • Definición de una Estructura:

    • Las estructuras se definen con la palabra clave struct seguida del nombre de la estructura y los campos que contiene entre llaves {}. En este caso, definimos una estructura llamada Persona con campos para nombre, edad y altura.
  • Declaración de una Variable de Tipo Estructura:

    • Para utilizar una estructura, primero debemos declarar una variable de ese tipo. En este caso, declaramos una variable persona1 de tipo Persona.
  • Asignación de Valores:

    • Podemos asignar valores a los campos de la estructura utilizando el operador . (punto). Por ejemplo, persona1.nombre accede al campo nombre de la estructura persona1.
  • Acceso a los Campos y Muestra de Valores:

    • Utilizamos printf para mostrar los valores de los campos de la estructura persona1.

Las estructuras te permiten organizar datos relacionados en una sola entidad, lo que facilita el manejo de datos más complejos en tus programas en C.

Anidamiento de estructuras

En C, puedes anidar estructuras dentro de otras estructuras para representar relaciones más complejas entre los datos. Aquí tienes un ejemplo:

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

// Definición de una estructura
struct Fecha {
    int dia;
    int mes;
    int año;
};

// Definición de otra estructura que contiene una estructura Fecha
struct Persona {
    char nombre[50];
    int edad;
    struct Fecha fechaNacimiento;
};

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

    // Asignación de valores a los campos de la estructura
    strcpy(persona1.nombre, "Juan");
    persona1.edad = 25;
    persona1.fechaNacimiento.dia = 15;
    persona1.fechaNacimiento.mes = 6;
    persona1.fechaNacimiento.año = 1990;

    // Acceso a los campos anidados y muestra de los valores
    printf("Nombre: %s\n", persona1.nombre);
    printf("Edad: %d\n", persona1.edad);
    printf("Fecha de Nacimiento: %d/%d/%d\n", persona1.fechaNacimiento.dia, 
           persona1.fechaNacimiento.mes, persona1.fechaNacimiento.año);

    return 0;
}

				
			

Explicación:

  • Definición de Estructuras Anidadas:

    • En este ejemplo, definimos una estructura Fecha que contiene campos para día, mes y año. Luego, definimos una estructura Persona que contiene campos para nombre, edad y otra estructura Fecha para la fecha de nacimiento.
  • Declaración de Variables y Asignación de Valores:

    • Declaramos una variable persona1 de tipo Persona y asignamos valores a sus campos, incluido el campo fechaNacimiento que es de tipo Fecha.
  • Acceso a los Campos Anidados y Muestra de Valores:

    • Utilizamos el operador . para acceder a los campos anidados de la estructura y mostrar sus valores con printf.

El anidamiento de estructuras te permite representar datos más complejos y relacionados de manera organizada en tus programas en C.

Definición y uso de uniones

Vamos a hablar sobre las uniones en C de una manera más accesible y detallada.

Definición y Uso de Uniones en C:

Imagina que una unión es como una caja que puede contener diferentes tipos de objetos, pero solo puede tener uno a la vez. Veamos un ejemplo:

				
					#include <stdio.h>

// Definición de una unión
union Valor {
    int entero;
    float flotante;
    char caracter;
};

int main() {
    // Declaración de una variable de tipo unión
    union Valor valor;

    // Asignación de valores a la unión
    valor.entero = 10;
    printf("Entero: %d\n", valor.entero);

    valor.flotante = 3.14;
    printf("Flotante: %.2f\n", valor.flotante);

    valor.caracter = 'A';
    printf("Caracter: %c\n", valor.caracter);

    return 0;
}

				
			

Explicación:

  • Definición de una Unión:

    • Una unión es como una caja que puede contener diferentes tipos de datos, pero solo uno a la vez. En este ejemplo, definimos una unión llamada Valor que puede contener un entero, un flotante o un carácter.
  • Declaración de una Variable de Tipo Unión:

    • Declaramos una variable llamada valor de tipo Valor. Esta variable puede contener cualquier tipo de datos que definimos en la unión.
  • Asignación de Valores:

    • Podemos asignar diferentes valores a los campos de la unión. Pero ten en cuenta que, al modificar un campo, los otros pueden cambiar porque comparten la misma ubicación de memoria.
  • Acceso a los Campos y Muestra de Valores:

    • Accedemos a los campos de la unión (entero, flotante, caracter) y mostramos sus valores utilizando printf.

Las uniones son útiles cuando necesitas almacenar diferentes tipos de datos en la misma ubicación de memoria, pero solo necesitas acceder a uno de ellos en un momento dado. ¡Es como tener una caja mágica que puede contener diferentes cosas según lo que necesites en cada momento!

Comparación entre estructuras y uniones

Las estructuras y las uniones en C son tipos de datos que te permiten agrupar diferentes variables juntas, pero tienen diferencias importantes en cómo almacenan y acceden a los datos. Vamos a compararlas:

Estructuras:

  • Definición:

    • Las estructuras permiten agrupar variables de diferentes tipos bajo un mismo nombre.
  • Uso:

    • Cada miembro de la estructura tiene su propia ubicación de memoria y pueden contener diferentes valores al mismo tiempo.
  • Acceso a los Miembros:

    • Se accede a cada miembro de la estructura por separado utilizando el operador ..
  • Uso Común:

    • Útil cuando necesitas almacenar y manipular diferentes tipos de datos relacionados entre sí.

Uniones:

  • Definición:

    • Las uniones permiten almacenar diferentes tipos de datos en la misma ubicación de memoria.
  • Uso:

    • Todos los miembros de la unión comparten la misma ubicación de memoria, por lo que solo se puede almacenar un valor a la vez.
  • Acceso a los Miembros:

    • Se accede a un solo miembro de la unión a la vez, pero todos comparten la misma ubicación de memoria.
  • Uso Común:

    • Útil cuando necesitas ahorrar memoria y solo necesitas acceder a un tipo de dato a la vez.

Ejemplo de Diferencia:

				
					#include <stdio.h>

// Definición de una estructura
struct Persona {
    char nombre[50];
    int edad;
};

// Definición de una unión
union Valor {
    int entero;
    float flotante;
};

int main() {
    printf("Tamaño de estructura Persona: %lu bytes\n", sizeof(struct Persona));
    printf("Tamaño de unión Valor: %lu bytes\n", sizeof(union Valor));

    return 0;
}

				
			

En este ejemplo, la estructura Persona ocupará más espacio en memoria porque necesita almacenar dos miembros (nombre y edad), mientras que la unión Valor ocupará solo el tamaño del miembro más grande (entero o flotante) ya que comparten la misma ubicación de memoria.