
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? ");
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.graus = 123;
printf ("%f",N.F);
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.