Вы находитесь на странице: 1из 11

UNION Y ENUMERACIONES

DARIO CISNEROS
CARLOS MAGDALENO

UNION
Explicado de manera simple, podramos decir

que las uniones le permiten ver los mismos


datos con diferentes tipos, o usar un mismo
dato con distintos nombres.
Las Uniones permiten acceder a una porcin de
memoria como tipos de datos diferentes, ya
que todos estn en realidad en
lamismadireccin de memoria. Su declaracin
y uso es similar a la de las estructuras pero su
funcionalidad es totalmente diferente.

ALGORITMO
union modelo_nombre
{ type1 element1;
type2 element2;
type3 element3;
..
} objeto_nombre;

EJEMPLO:
union mytypes_t
{
char c;
int i;
float f;
} mytypes;

En este ejemplo estamos


sealando que vamos a crear una
union de nombre mytypes_t
La cual va a incluir una variable
C de tipo cadena, o un entero de
nombre i o un real de nombre F
cada uno de un tipo de dato
diferente. Ya que todos se refieren
a la misma direccin en memoria,
la modificacin de uno de los
elementos afectar el valor de
todos. No olviden poner el
nombre otra vez al
final.

Uno de los usos que unaunionpuede tener es


unir un tipo elemental con un arreglo o
estructuras de elementos ms pequeos. Por
ejemplo:
define tres nombres que nos
permiten acceder al mismo grupo
union mix_t
de 4bytes:mix.l,mix.symix.cy el
{ long l;
cual podemos usar de acuerdo a
como queramos accesarlo,
struct {
comolong,shortocharrespectivam
short hi;
ente. Hemos mezclado tipos,
arreglos y estructuras en la union
short lo; }
para que pueda ver las diferentes
s;
maneras en que podemos acceder a
char c[4]; } mix la memoria::

Tenemos la opcin de que las uniones sean


annimas. Si incluimos una unin en una
estructura sin ningn nombre de objeto (el que
va despues de las llaves{ }) la unin ser
annima y podremos acceder a los elementos
directamente por su nombre. Por ejemplo,
observe la diferencia entre estas dos
struct {
struct {
declaraciones:
char title[50];
char author[50];
union {
float dollars;
int yens; }
price;
} book;

char title[50];
char author[50];
union {
float dollars;
int yens; };
} book;

La nica diferencia entre los dos cdigos es que

en el primero le dimos un nombre a la unin


(price) y en el segundo no. La diferencia es
cuando se accede a los
miembrosdollarsyyensde un objeto. En el
primer caso sera:
book.price.dollars
book.dollars
book.price.yens
book.yens
Una vez ms le recuerdo que ya que es una
unin, los camposdollarsyyensocupan el
mismo espacio en la memoria y por lo tanto no
pueden ser usados para almacenar valores
diferentes. Esto significa que puede incluir un
precio en dolares o yens, pero no ambos.

Enumeraciones
Las enumeraciones sirven para crear tipos de

datos para contener algo diferente que no


est limitado a constantes numricas o de
caracteres o a las constantes. Su forma es la
siguiente:
enum model_name {
value1,
value2,
Value3.
. . . } object_name;

Por ejemplo, podramos crear un nuevo tipo de

variable llamadacolorpara almacenar colores


con la siguiente declaracin:

enum colores_t { negro, azul, verde, lila, rojo,


morado, amarillo blanco};
No incluimos ningn tipo de dato en la
declaracin; creamos un nuevo tipo de dato sin
que est basado en ninguno existente: el
tipocolor_t, en el que los valores posibles son los
colores que hemos encerrado entre llaves{}. Por
ejemplo, una vez declarado colores_tlas
siguientes expresiones sern vlidas:

colores_t micolor; //como el int a;

micolor = azul;
if (micolor == verde) micolor = rojo;
El tipo de dato enumerado es compilado como
un entero y sus posibles valores son cualquier
tipo de constante entera especificada. Si no se
especifica, el valor entero equivalente al primer
valor posible es0y los siguientes siguen una
progresin +1. As, en nuestro tipo de
datocolores_tque definimos
antes,negrosera equivalente a0,azulsera
equivalente a1,verde2y as sucesivamente.

En caso de que necesitemos algo diferente, o

simplemente no nos gusta el numero desde 0,


podemos especificar un valor entero para algunos
de los posibles valores de nuestro tipo enumerado
los siguientes valores sern los incrementos de
este, por ejemplo:
enum meses_t { enero=1,febrero, marzo=4, abril,
mayo, junio=8, julio, septiembre, octubre= 15,
noviembre, diciembre} y2k;
en este caso, la variabley2kdel tipo
enumeradomeses_tpuede contener cualquiera de
los 12 posibles valores que van
desdeenerohastadiciembrey que son
equivalentes a : enero=1,
febrero=2,marzo=4,abril=5,mayo=6,junio=8..dicie
mbre=17.

Вам также может понравиться