Uma declaração union determina uma única localização de memória onde podem estar armazenadas várias variáveis diferentes. A declaração de uma união é semelhante à declaração de uma estrutura:
Como exemplo, vamos considerar a seguinte união:
union angulo { float graus; float radianos; };
Nela, temos duas variáveis (graus e radianos) que, apesar de terem nomes diferentes, ocupam o mesmo local da memória. Isto quer dizer que só gastamos o espaço equivalente a um único float. Uniões podem ser feitas também com variáveis de diferentes tipos. Neste caso, a memória alocada corresponde ao tamanho da maior variável no union. Veja o exemplo:
#include <stdio.h>
#define GRAUS 'G'
#define RAD 'R'
union angulo
{
int graus;
float radianos;
};
void main()
{
union angulo ang;
char op;
printf("\nNumeros em graus ou radianos? (G/R):");
scanf("%c",&op);
if (op == GRAUS)
{
ang.graus = 180;
printf("\nAngulo: %d\n",ang.graus);
}
else if (op == RAD)
{
ang.radianos = 3.1415;
printf("\nAngulo: %f\n",ang.radianos);
}
else printf("\nEntrada invalida!!\n");
}
Temos que tomar o maior cuidado pois poderíamos fazer:
#include <stdio.h> union numero { char Ch; int I; float F; };
main (void) { union numero N; N.I = 123; printf ("%f",N.F); /* Vai imprimir algo que nao e' necessariamente 123 ...*/ return 0; }
O programa acima é muito perigoso pois você está lendo uma região da memória, que
foi "gravada" como um inteiro, como se fosse um ponto flutuante. Tome cuidado! O
resultado pode não fazer sentido.
Curso de C do CPDEE/UFMG - 1996 - 1999