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.