Estructuras

Estructuras

Son un mecanismo que te permite definir un tipo de dato personalizado que puede contener múltiples variables de diferentes tipos agrupadas bajo un mismo nombre. Esto te permite crear un tipo de dato compuesto que puede representar de manera más clara y organizada ciertas entidades o conceptos en tu programa.

Las estructuras se pueden ocupar en diferentes ambitos aunque el mas usado es en las matematicas ya que puede referirse a las relaciones y propiedades que existen entre los elementos de un conjunto. A fin de cuentas proporciona orden, cohesión y organizacion a los elementos que la componen.

Tipos de estructuras

En el lenguaje C hay muchos tipos de estructuras que se utilizan para organizar y manipular datos de diferentes maneras. Es por ello que te mostramos a continuación los tipos de estructuras mas usadas.

Estructuras simples

Son estructuras que contienen un conjunto de variables de diferentes tipos, agrupadas bajo un mismo nombre. Se utilizan para representar entidades simples.

                         

Estructuras Complejas o Anidadas

Las estructuras complejas suelen ser aquellas que tienen múltiples niveles de anidamiento, contienen arreglos multidimensionales, apuntadores o incluso otras estructuras anidadas, Estas estructuras están diseñadas para representar datos que tienen una estructura más compleja o una relación más intrincada entre sus componentes.

                           

Estructuras con punteros

Son estructuras que contienen miembros que son punteros a otros tipos de datos. Se utilizan para representar relaciones dinámicas entre datos o para manejar datos de manera más eficiente.

                                     

Estructura sin nombre

Son estructuras que se definen sin un nombre específico y se utilizan directamente para declarar variables. A menudo se utilizan en conjunción con typedef para crear tipos de datos nuevos.

                                         

Estructura anidada

Claramente una pequeña sección dentro del acordeon anterior no basta para entender bien esto. Como se sabe una anidación es una sección dentro de otra sección, esto quiere decir, si tengo una estructura, dentro de la misma puedo tener otra. Todo esto se hace para representar datos mas complejos, que quiere decir esto, que contienen mucha información. Por ende quiero mostrar un ejemplo pequeño sobre estructuras anidadas

Dentro del codigo de alado la estructura Persona contiene un miembro fechaNacimiento que es de tipo Fecha. Esto permite almacenar la fecha de nacimiento dentro de la estructura de la persona.

                                           

Definición de estructuras

La sintaxis para definir e inicializar seria la siguiente:

Si estamos escribiendo un programa que maneja informacion de personas, podriamos definir una estructura llamada ‘persona’ que contenga variables para el nombre, la edad, dirección etc. La mostramos en el siguiente ejemplo.

                                                       

Donde en dicha estructura ‘persona’ contiene 3 miembros, el arreglo tipo char que almacena 50 caracteres, la variable tipo entero llamada edad y la variable flotante llamada altura.

Inicialización y acceso a datos.

una vez definida podemos declarar variables de ese tipo (mas bien seria una subvariable) y acceder a sus miembros asi como la siguiente manera: 

       

En la mayoria de ejemplos primero se define la estructura o clase que contiene los campos que deseas, y luego se inicializa una variable utilizando los valores deseados para cada campo

Ejemplo

En el ejemplo la estructura Persona se declara e inicializa al mismo tiempo dentro de la función main(). La lista de inicialización { “Juan”, 25 } proporciona valores para cada campo de la estructura en el orden en que están definidos en la estructura.

               

                         

Estructuras predefinidas

Son aquellas que están integradas en un lenguaje de programación y están disponibles para su uso sin necesidad de que el programador las defina explícitamente. Estas estructuras suelen ser parte de la biblioteca estándar del lenguaje y están diseñadas para realizar tareas comunes o para representar datos de uso general.

Te mostraremos a continuación cuales son:

struct tm

Esta estructura se utiliza para representar información de fecha y hora, como año, mes, día, hora, minutos, segundos, etc. Es comúnmente utilizada junto con funciones de manipulación de tiempo como time(), localtime(), gmtime(), etc.

         

File

Esta estructura se utiliza para representar archivos en C. La mayoría de las operaciones de entrada/salida de archivos en C están basadas en esta estructura.

    • typedef struct _IO_FILE FILE;
Size

Es un tipo de datos que se utiliza para representar tamaños de objetos en bytes. Se utiliza comúnmente en funciones que trabajan con arreglos y asignación de memoria dinámica.

      • typedef unsigned int size_t;

Apuntadores a estructuras

Son variables que almacenan direcciones de memoria de estructuras en lugar de almacenar directamente los valores de las estructuras. Esto permite manipular eficientemente estructuras grandes y complejas sin necesidad de copiarlas repetidamente en la memoria.

la sintaxis es un poco confundible lo mostraremos a traves de ejemplos de codigo.

Ejemplo

Suponiendo que tenemos la siguiente estructura.

                                       

podemos declarar un puntero a una estructura de la siguiente manera:

      • struct Persona *pPersona;

Ahora, pPersona es un puntero que puede almacenar la dirección de memoria de una estructura Persona. Usaremos la función malloc() para asignar dinámicamente memoria para una estructura Persona

      • pPersona = (struct Persona *)malloc(sizeof(struct Persona));

Despues de asignar memoria podemos acceder a los campos de la estructura a traves del puntero utilizando el operador

      • strcpy(pPersona->nombre, “Juan”);
        pPersona->edad = 25;

Cuando terminamos de usar la estructura, es importante liberar la memoria asignada utilizando la función free():

 

El uso de punteros es muy util cuando estas manipulando estructuras de manera dinamica, o trabajando con arboles y se quiere evitar la sobrecarga de memoria causada por la copia de grandes estructuras.

 

 

Independencia de Estructuras

Mas vale hablar de esto ya que es un concepto que se ha ido olvidando pero queremos dejarlo en claro. Cuando hablamos de esto nos referimos a que cada estructura debe representar una entidad única o un conjunto coherente de datos relacionados que pueden existir y operar de manera independiente en el programa.  

un ejemplo rapido:

si se esta desarroolando un programa para manejar una biblioteca, podrias tener estructuras independientes para representar libros, usuarios y prestamos, Para que cada una de ellas puedan describir su entidad correspondiente.

Basicamente es poner un orden para ver el codigo mas limpio y al final no mesclar estructuras para que sea mas facil su legibilidad.

Funciona gracias a WordPress Inspiro WordPress Theme por WPZOOM