Programar em C/União

Origem: Wikilivros, livros abertos por um mundo aberto.
Saltar para a navegação Saltar para a pesquisa
Recycle001.svg Esta página precisa ser reciclada (discuta).
Ao melhorá-la, você estará ajudando o Wikilivros.

Unions[editar | editar código-fonte]

As unions são muito parecidas com estruturas. As estruturas guardam variáveis de acordo com seu tipo: se tivermos uma variável membro que é um int e outra float, ela guardará exatamente de acordo com seus respectivos tipos.

Em Unions, as variáveis serão armazenadas todas com um único tipo, que é aquele que ocupa mais espaço dentro dos tipos das variáveis membro. Se tivermos uma variável membro int e outra float , a union vai guardar estas variáveis como se ambas fossem float.

Declaração[editar | editar código-fonte]

 union mytypes_t 
 {
  int i;
  float f;
  } mytypes;

Unions com estruturas[editar | editar código-fonte]

Neste exemplo temos unions e estruturas misturados.

 union mix_t
 {
  long l;
  struct 
   {
    short hi;
    short lo;
    } s;
  char c[4];
 } mix;
mytypes_t long l Struct Char C[4]
mix

Repare que a estrutura não tem nome


Anonymous unions – estruturas com unions[editar | editar código-fonte]

 // estrutura usando "regular union"
 struct {
   char title[50];
   char author[50];
   union {
     float dollars;
     int yens;
   } price;
 } book;

 // estrutura usando "anonymous union"
 struct {
   char title[50];
   char author[50];
   union {
     float dollars;
     int yens;
   };
 } book;

Se declararmos uma união sem nome, ela vai ficar anônima e poderemos acessar seus membros diretamente através dos nomes dos membros.

// Uso regular
book.price.dollars
book.price.yens
// Uso anonimo
book.dollars
book.yens