Programación en C/Estructuras y Uniones
De Wikilibros, la colección de libros de texto de contenido libre.
En la creacion de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos que serian muy dificil de describir en los tipos de datos primitivos, esta es la situacion en la que debemos aprovecharnos de las caracteristicas que hacen al lenguaje C especial, o sea el uso de estructuras uniones y punteros.
[editar] Estructuras
Una estructura contiene varios datos. La forma de definir una estructura es haciendo uso de la palabra clave struct. Aqui hay ejemplo de la declaracion de una estructura:
struct mystruct
{
int int_member;
double double_member;
char string_member[25];
} variable;
"variable" es una instancia de "mystruct" y no es necesario ponerla aquí. Se podria omitir de la declaracion de "mystruct" y más tarde declararla usando:
struct mystruct variable;
También es una práctica muy común asignarle un alias o sinónimo al nombre de la estructura, para evitar el tener que poner "struct mystruct" cada vez. C nos permite la posibilidad de hacer esto usando la palabra clave typedef, lo que crea un alias a un tipo:
typedef struct
{
...
} Mystruct;
La estructura misma no tiene nombre (por la ausencia de nombre en la primera linea), pero tiene de alias "Mystruct". Entonces se puede usar así:
Mystruct variable;
Note que es una convencion, y una buena costumbre usar mayúscula en la primera letra de un sinónimo de tipo. De todos modo lo importante es darle algún identificador para poder hacer referencia a la estructura: podriamos tener una estructura de datos recursiva de algún tipo
[editar] Uniones
La definicion de "union" es similar a la de "estructura", La diferencia entre las dos es que en una estructura, los miembros ocupan diferentes areas de la memoria, pero en una union, los miembros ocupan la misma area de memoria. Entonces como ejemplo:
union {
int i;
double d;
} u;
El programador puede acceder a través de "u.i" o de "u.d", pero no de ambos al mismo tiempo. Como "u.i" y "u.d" ocupan la misma área de memoria, modificar uno modifica el valor del otro, algunas veces de maneras impredecibles.
El tamaño de una union es el de su miembro de mayor tamaño.

