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 as estruturas, estas guardam variáveis de vários tipos, e portanto guardam cada variável de acordo com o seu tipo, ou seja, se tivermos uma variável membro que é um int e outra float, ela guarda exatamente de acordo com esse tipo.

O que se passa aqui é que vai guardar as variáveis todas com um único tipo, que é aquele que ocupa mais espaço dentro dos tipos das variáveis membro, ou seja, se tivermos uma variável membro int e outra float , a union vai guardar estas variáveis como fossem as duas 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