Una estructura es una variable que reúne varios elementos o miembros, consta de un nombre opcional, seguido de un conjunto de valores (datos) de tipos diversos que en conjunto permiten describir un concepto, como en el caso de los registros que se tienen para préstamo de libros en una biblioteca. Los elementos de cada estructura indican su tipo cuando se encierran entre llaves (son conocidos como miembros de la estructura y generalmente están relacionados entre sí, tal como ocurre con los campos de un registro). Los miembros pueden ser de tipo entero, real, alfanumérico e inclusive otras estructuras, sin embargo el ámbito de la existencia de cada miembro esta limitado a la estructura que lo define; de esa manera, puede existir otras estructuras con elementos que tengan el mismo nombre y diferentes tipos de datos (sin estar relacionados de estructura a estructura); por último opcionalmente se puede indican una lista de variables que tienen también asociados a los miembros de la estructura. Considere la declaración o definición de la estructura siguiente:
struct fecha_prestamo = {int dia;
int mes;
char anio};
struct alumno = {char nombre[33];
int num_cta;
char carrera[33];
int telefono;
struct fecha_prestamo} generacion_95[200],generacion_96[200];
La estructura alumno cuenta con cuatro miembros que la describen , dentro de ella se incluye otra estructura para la fecha; además generacion_95[200]; son arreglos que especifican 200 registros cada uno con los campos o miembros de las estructuras. Observe que la estructura fecha debe anteceder a la estructura alumno debido a que esta última le hace referencia.
Considere ahora el ejemplo siguiente:
struct nob_tel
{
*nombre;
*telefono;
};
static struct nom_tel agenda[] =
{{"laura","456-456-890"}
{"migel","987-123-567"}
{"alicia","543-567-234"}
{"raul","567-345-678"}
{"maria","319-746-015"}}
En este caso se tiene un arreglo de estructuras desde la estructura 0 hasta la estructura 4, cada una con dos miembros o elementos que además definen sus iniciales y por consiguiente su tipo y tamaño.
Ahí se muestra una de las formas para asignar valores a los miembros de una estructura mediante la estructura nom_tel (que define y almacena el nombre y el teléfono), a continuación con a estructura estática se establece que agenda[] es del tipo nom_tel y por consiguiente se asigna a los dos campos o miembros denominados *nombre, *teléfono a cada miembro de ella con los datos que corresponden a cada uno de ellos.
Cuando los miembros de una estructura son a su vez estructuras, los miembros se accesan indicando el nombre de la estructura, subestructura (en caso de que haya), un punto y el nombre del miembro:
nombre_estructura.miembro
nombre_estructura.nombre_subestructura.miembro
Los valores de las estructuras preferentemente se asignan tal y como se indico anteriormente para asegurar que el programa corre en todas las versiones de C. También se pueden asignar valores mediante lectura.
Cuando se desea definir los elementos o miembros de una estructura sin asociarle un nombre específico y al final asociarle la variable se utiliza typedef:
