
Estructuras en C
1.-Una Estructura es una colección de variables simples, que pueden contener diferentes tipos de datos. Es un tipo de dato definido por el usuario. Son también conocidas como Registros. Ayudan a organizar y manejar datos complicados en programas debido a que agrupan diferentes tipos de datos a las que se les trata como una sola unidad en lugar de ser vistas como unidades separadas.
1.1-La Declaración de estructuras en programas C es un nuevo tipo de datos denominado tipo Estructura y declarar una variable de este tipo.
En la definición del tipo de estructura, se especifican los elementos que la componen así como sus tipos. Cada elemento es llamado miembro (similar a un campo de un registro).

Después de definir un tipo estructura, se puede declarar una o más variables de ese tipo de la siguiente forma: struct tipo_estructura [variables];

Definición de variables de esta estructura : struct a, b; O también se pueden definir la estructura y sus variables al mismo tiempo:

1.2-El Acceso a los Miembros de la Estructura es por medio del operador Punto de la siguiente manera:

Los miembros de las Estructuras también se pueden Inicializar individualmente o bien, todos simultáneamente. La inicialización individual es por medio del operador punto, para la estructura completa es con caracteres llaves y los valores de los miembros separados por coma. Iniciando solo por miembros: a.codigo=1234;
Iniciando Estructura completa: Articulo a={1234, "escoba", 23, 1.50};
1.3-Arreglos de Estructuras pueden ser construidas, es decir, conceptuar a los elementos de un arreglo como estructuras, esto se puede hacer de la siguiente manera:

Para tener acceso a una determinada estructura , se indexa el nombre de la estructura de la siguiente manera: alumnos[i].nombre; aquí sabemos el nombre del alumno que se encuentra en la posición i del arreglo, y de esta manera para todos los datos. Si se desea inicializar los valores, se podría hacer de la siguiente manera:
Struct datos.alumno[5]={96147523, "Luis", 22, "m", pino 45};
Estructuras Anidadas. El siguiente ejemplo muestra una estructura anidada. Las estructuras que hemos visto han sido muy sencillas aunque útiles. Es posible definir estructuras conteniendo docenas y aún cientos ó miles de elementos pero sería ventajoso para el programador no definir todos los elementos en una pasada sino utilizar una definición de estructura jerárquica.
La primera estructura contiene tres elementos pero no le sigue ninguna variable definida, sólo una estructura, pero como incluimos un nombre al principio de la estructura, la estructura es llamada persona. La palabra persona puede utilizarse para referirse a la estructura pero no a cualquier variable de éste tipo de estructura, se trata por lo tanto de un nuevo tipo que hemos definido y lo podemos utilizar de la misma manera en que usamos un int, char o cualquier otro tipo que existe en C. La única restricción es que éste nuevo tipo debe estar siempre asociado con la palabra clave struct.
La siguiente definición de estructura contiene tres campos siendo el segundo la estructura previamente definida la cual llamamos persona. La variable de tipo persona se llama descripcion, así la nueva estructura contiene dos variables simples, calificacion y una cadena llamada comida, y la estructura llamada descripcion. Como descripcion contiene tres variables, la nueva estructura tiene entonces cinco variables, a ésta estructura le hemos dado el nombre de datos, lo cual es otro tipo definido. Finalmente, dentro de la función main ( ) definimos un array de 53 variables cada una con la estructura definida por el tipo datos, y cada una con el nombre estudiante, en total hemos definido 53 veces 5 variables, cada una de las cuales es capaz de almacenar datos. Como tenemos la definición de un nuevo tipo podemos utilizarla para a su vez definir dos variables. Las variables maestro y sub están definidas en la línea 20 como variables de tipo datos por lo que cada una de éstas dos variables contienen 5 campos en los cuales podemos almacenar datos.
En las líneas 22 a 26 del programa asignamos valores a cada uno de los campos de maestro. El primero es el campo calificacion y es manejado como las otras estructuras que hemos estudiado porque no forma parte de la estructura anidada. Enseguida deseamos asignar un valor a edad el cual es parte de la estructura anidada. Para acceder a éste campo empezamos con el nombre de la variable maestro al cual le concatenamos el nombre del grupo descripcion, y entonces debemos definir en cuál campo de la estructura anidada estamos interesados por lo que concatenamos el nombre de la variable edad. El estado de los maestros se manejan de la misma manera que su edad pero los últimos dos campos son cadenas asignadas utilizando la función strcpy ( ). Observe que los nombres de las variables en la función strcpy ( ) se consideran como una unidad aunque estén compuestas de varias partes.
Compile y ejecute el programa, probablemente obtenga un aviso sea de error ó advertencia respecto a un desbordamiento de memoria.
Lo que ésto significa es que el programa requiere más memoria que la asignada por el compilador por lo que es necesario incrementar el tamaño de stacks, el método para hacer ésto varía de un compilador a otro.
2.-Uniones. Las uniones son similares a las estructuras, con la diferencia de que en las uniones se almacenan en los campos solapándose unos con otros en la misma disposición; al contrario que en las estructuras, al contrario que en las estructuras, donde los campos se almacenan unos a continuación de otros. En esencia, las uniones sirven para ahorrar espacio en memoria. Para Almacenar los miembros de una unión, se requiere una zona de memoria igual a la que ocupa el miembro mas largo de la unión. Todos los miembros son almacenados en el mismo espacio de memoria y comienzan en la misma dirección. El valor almacenado es sobreeescrito cada vez que se asigna un valor al mismo miembro o a un miembro diferente, aquí radica la diferencia con las estructuras.
2.1- La Declaración de Unioneses similar a la de las estructuras:

Después de definir un tipo union, se puede declarar una o mas variables de ese tipo de la siguiente forma: union tipo_union [variables];
Una declaración union define un tipo. La llave derecha que temina la lista de miembros puede ser seguida por una lista de variables de la siguiente manera:

Dicho de una forma simple, una unión le permite manejar los mismos datos con diferentes tipos, ó utilizar el mismo dato con diferente nombre, a continuación le presento un ejemplo:
En éste ejemplo tenemos dos elementos en la unión, la primera parte es el entero llamado valor el cual es almacenado en algún lugar de la memoria de la computadora como una variable de dos bytes. El segundo elemento está compuesto de dos variables de tipo char llamadas primero y segundo. Estas dos variables son almacenadas en la misma ubicación de almacenamiento que valor porque ésto es precisamente lo que una unión hace, le permite almacenar diferentes tipos de datos en la misma ubicación física. En éste caso Usted puede poner un valor de tipo entero en valor y después recobrarlo en dos partes utilizando primero y segundo, ésta técnica es utilizada a menudo para empaquetar bytes cuando, por ejemplo, combine bytes para utilizarlos en los registros del microprocesador. La unión no es utilizada frecuentemente y casi nunca por programadores principiantes, en este momento no necesita profundizar en el empleo de la unión así que no dedique mucho tiempo a su estudio, sin embargo no tome a la ligera el concepto de la unión, podría utilizarlo a menudo.
Si has Estudiado Bien el Capitulo Click Aqui para hacer el Examen 4
¿No Entiendes Bien Algún Concepto?... Consultalo!
¿Deseas Encontrar Algo Especifico?...Encuentralo!
Ejemplo Práctico de este Capitulo !
Este tutorial desarrolla al 100% sus Aplicaciones con un Navegador
en 800x600
OPCIÓN ALTERNA:
Introducción@Elementos de C@Apuntadores y Arreglos@Estructuras y Uniones@Bibliografía
Archivos y Gráficos@POO1@POO2@POO3@Creditos@Presentación Principal@Menú Principal