Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Una unin es un tipo de datos derivado, como una estructura, con miembros
que comparten el mismo espacio de almacenamiento. Una variable de tipo
unin puede contener (en momentos diferentes) objetos de diferentes tipos
y tamaos. Las uniones proporcionan una forma de manipular diferentes
clases de datos dentro de una sola rea de almacenamiento. En cualquier
momento una unin puede contener un mximo de un objeto debido a que
los miembros de una unin comparten el espacio de almacenamiento.
La definicin de "unin" es similar a la de "estructura", La diferencia entre
las dos es que en una estructura, los miembros ocupan diferentes reas de
la memoria, pero en una unin, los miembros ocupan la misma rea de
memoria. Ejemplo:
union [nombre_union] {
campo_1;
campo_2;
... } [variable_union];
El programador puede acceder a travs 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 modificar tambin el valor del otro, algunas veces
de maneras impredecibles. El tamao de una unin es el de su miembro de
mayor tamao.
En el interior de una unin, entre las llaves, se pueden definir todos los
elementos necesarios, del mismo modo que se declaran los objetos. La
particularidad es que cada elemento se almacenar comenzando en la
misma posicin de memoria.
Las uniones pueden referenciarse completas, usando su nombre, como
hacamos con las estructuras, y tambin se puede acceder a los elementos
en el interior de la unin usando el operador de seleccin (.), un punto.
Ejemplo de una unin:
#include <stdio.h>
#include <string.h>
/*Creamos una union*/
union ejemplo
{
char nombre[50];
char materia[50];
} palabra;
/*Creamos una estructura*/
struct comparacion
{
char nombre[50];
char materia[50];
} frase;
/*Ntese que la estructura y la unin tienen los mismos tipos de datos*/
int main()
{
/*Inicializamos*/
strcpy(palabra.nombre,"Pepe Luis");
strcpy(palabra.materia,"Software");
/*Inicializamos*/
strcpy(frase.nombre,"Pepe Luis");
strcpy(frase.materia,"Software");
Ejemplo 2:
#include <stdio.h>
union Number {
int x;
float y;};
int main()
{
Number value;
value.x=100;
printf("Imprimo el valor del miembro definido (x): %d\n",value.x);
value.y=10.5;
printf("Imprimo el valor del miembro definido (y): %d\n",value.y);
return 0;
}
Estructura lgica
Supongamos que en nuestro ordenador, int ocupa cuatro bytes, char un
byte y double ocho bytes. La forma en que se almacena la informacin en la
unin sera la siguiente:
Byte 0
Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
A
B
C
Byte
11
Byte
12
Uso de Uniones
Se utiliza cuando se quiere que una misma variable pueda contener datos
de distinto tipo, o cuando se quiere utilizar una misma variable desde
distintos puntos de vista. Las uniones pueden presentarse dentro de
estructuras y arreglos y viceversa. Las operaciones que se pueden realizar
sobre uniones son las siguientes:
-
Byte 7
convenirnos acceder a ellos como si fueran un array: Coor [0], Coor [1] y
Coor [2]. En este caso, la unin puede resultar til:
struct stCoor3D {
int X, Y, Z;
};
union unCoor3D {
struct stCoor3D N;
int Coor[3];
} Punto;
Con estas declaraciones, en nuestros programas podremos referirnos a la
coordenada Y de estas dos formas:
Punto.N.Y
Punto.Coor[1]
Uniones annimas
Uniones annimas son aquellas que no tienen etiqueta y tampoco se utilizan
para declarar un objeto nominado (con nombre). Tienen la forma general:
union { lista-de-miembros };
Sus miembros pueden ser accedidos directamente en el mbito de su
declaracin sin necesidad de usar ninguno de los operadores de
acceso x.y o p->y. Ejemplo:
#include <iostream.h>
void main () {
union { int i; double d; };
i = 25;
cout << "El valor de 'i' es: " << i << endl;
}
Salida:
El valor de 'i' es: 25
Las uniones annimas pueden ser globales, y anidadas o sin anidar.Ejemplo:
#include <iostream.h>
static union { int i; double d; } ;
void main () {
i = 15;
cout << "El valor de 'i' es: " << i << endl;
int y;
char c;
};
};
...
int main(void) {
struct externa ex1; // ex1 es una instancia de externa
Referencias