sábado, 19 de octubre de 2013

Estructuras (Struct)

Cuando programamos hacemos uso de tipos básicos de datos, como enteros, decimales, caracteres, cadenas de caracteres, fechas. Pongo un ejemplo simple:

    //definición de nombre y edad de la persona
    char *nombre;
    int edad;
    //instanciación del nombre y la edad de la persona
    nombre = "Juan";
    edad = 21;

digamos que ahora queremos trabajar con la información de 2 personas:

    //definición de nombre y edad de las personas
    char *nombre1;
    int edad1;
    char *nombre2;
    int edad2;
    //instanciación del nombre y la edad de las personas
    nombre1 = "Juan";
    edad1 = 21;
    nombre2 = "Pedro";
    edad2 = 25;

¿Qué pasaría si queremos trabajar con 100 personas? ¿Crearíamos 100 variables para el nombre y 100 variables para la edad?

Lo primero que se nos ocurre es que si son muchos elementos iguales podemos utilizar un Array, pero los elementos de un Array deben ser todos del mismo tipo por ejemplo char * para guardar un array de nombres o int para guardar un Array de edades. Así podríamos modificar nuestro programa para poder manejar la información de las 100 personas:

//instanciación de los Arrays de nombres y de edades
    char * nombres[100];
    int edades[100]; 

Con esto tendríamos resuelto el manejo de la información de 100 personas con nombre y edad, pero qué pasaría si ahora además del nombre y la edad queremos saber: el apellido, la fecha de nacimiento, el número de identificación, el email, etc. ¿Tendríamos que crear un Array para cada dato?

La solución para esto son las estructuras (se llaman también registros o tuplas), son agrupaciones de tipos de datos para crear un nuevo tipo de dato definido por el programador, así con un único tipo de dato crearíamos un solo Array.

Para el ejemplo nuestro nuevo tipo de dato sería Persona y lo definiríamos así:

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

//nombre y edad quedan dentro de la estructura Persona
typedef struct Persona {
   char * nombre;
   int edad;
   //si quisiéramos agregar más información a la persona la agregaríamos aquí y no modificaríamos la definición del Array
} Persona;


int main(int argc, char *argv[])
{
    //Definimos un Array de 100 elementos de tipo Persona
    //Persona es el tipo de variable
    //listaPersonas es el nombre de la variable
    Persona listaPersonas[100];
}

Las estructuras se utilizan normalmente en la programación estructurada y su concepto es similar al de las clases (programación orientada a objetos).