Curso de C

Declaração Union

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:

union nome_do_tipo_da_union
{
tipo_1 nome_1;
tipo_2 nome_2;
...
tipo_n nome_n;
} variáveis_union;

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.
 

Página Anterior Índice da Aula Próxima Página


Curso de C do CPDEE/UFMG - 1996 - 1999