Estructuras

En C, al igual que en otros lenguajes de programación, es posible agrupar diferentes tipos de datos dentro de una misma variable o estructura (lo que se conoce en otros lenguajes como registro). Tenemos entonces que una estructura es una colección de elementos (variables), del mismo tipo o de diferente tipo, llamados miembros o campos.

Las estructuras proveen un método útil para unir objetos de datos creando un tipo de datos abstracto. Muchos elementos abstractos pueden ser clasificados como un conjunto de elementos con valores cuantitativos. Por ejemplo, la dirección de una persona puede ser pensada con un valor entero ( o cadena de caracteres) para el número de una casa, y cadenas de caracteres para el nombre de la calle, nombre del pueblo, estado o país y código postal. De esta manera podemos tener la estructura siguiente:

Insurgentes Sur 1590,
Col. Del Valle,
05100, México, D.F.

Declaración de las estructuras

Una estructura es una colección de una o más variables, posiblemente de diferentes tipos, combinadas bajo un solo nombre. El nombre de la estructura se utiliza para introducir un nuevo tipo de la estructura. La sintaxis para declarar una estructura se muestra a continuación:

struct [etiqueta]{
    variables de datos llamadas miembros de la estructura;
    :
};

La declaración de una estructura introduce un tipo de estructura, pero no reserva espacio para ella. La etiqueta es opcional en la declaración pero es útil si alguna referencia posterior a este tipo de estructura se piensa hacer. El espacio se reserva para la estructura hasta que un nombre de la estructura es declarado. Esto se puede hacer de dos maneras:

struct [etiqueta]{
    :;
    miembro;
    :;
} nombre1, nombre2;

Aquí se declara la forma de la estructura, se da una etiqueta opcional, y el nombre entonces se reserva para cada estructura nombrada. (La estructura se puede usar más tarde en el programa si otra estructura de la misma forma se declara). Este método de declaración de una estructura no es el estilo preferido:

struct etiqueta nombre_nuevo;

En esta declaración, la forma de la estructura fue previamente declarada, y una etiqueta ha sido asociada a dicha forma. La declaración de arriba usa ahora esa etiqueta para declarar el nombre de una estructura.

Ejemplo

struct date{
    int dia;
    int mes;
    int anio;
    char nombre_mes[4];
}cumpleanios;

Acceso a los Elementos de una Estructura

Un elemento en particular de una estructura puede ser referido como:

nombre_de_estructura.elemento;

El "." conecta el nombre de la estructura con el elemento deseado. Por ejemplo, si queremos comparar el nombre del mes en d con el nombre del elemento haríamos lo siguiente:

struct date d;

if(strcmp(d.nombre_mes,"Feb") == 0)
:

Los elementos de una estructura pueden ser de cualquier tipo excepto funciones que regresen un valor y void. Una estructura NO debe contener una instancia de sí misma pues esto sería recursivo por naturaleza; aún así, puede contener apuntadores a instancias de estructuras similares. Esto se puede usar para hacer listas de cadenas y será discutido con detalle más adelante.