Unions em Linguagem C

Unions em Linguagem C

Uma Union é uma estrutura de dados em linguagem C que permite agrupar dados de tipos diferentes como um único objeto de dados. Unions são tipos de dados derivados, cujos membros compartilham o mesmo espaço de armazenamento.

Em diferentes situações em um programa, algumas variáveis podem ser importantes, ao passo que outras podem não ser relevantes, e uma union, por compartilhar o espaço entre suas variáveis internas acaba por economizar espaço de armazenamento.

Note que apenas um membro da union pode ser referenciado por vez.

Como Declarar Unions

A declaração de Unions em linguagem C é bem parecida com a declaração de uma estrutura (struct), como podemos ver a seguir:

union teste {
  int a;
  float b;
};

Neste exemplo declaramos uma union de nome teste, que é um tipo de dado contém dois membros: o campo a, para um valor inteiro, e o campo b, para armazenar um dado do tipo float. Uma union pode conter campos de qualquer tipo, incluindo structs e outras unions.

Ao declarar uma union, é possível inicializá-la, mas somente com um valor do mesmo tipo do primeiro membro contido na union.

Após criar o modelo da union, podemos criar variáveis baseadas nele usando a seguinte sintaxe:

union teste un01;

Criamos com esta declaração a variável un01, que é do tipo teste (union).

Como Acessar os membros da Union

Podemos acessar os membros de uma union usando o operador ponto (.). Por exemplo, vamos atribuir o valor 15 ao membro a da union teste, e logo após copiar seu valor deste membro para uma variável do programa:

int valor;
un01.a = 15;
valor = un01.a;
printf("Valor: %d", valor);

Com uma union somente pode conter valor em um membro por vez, se tentarmos atribuir valores a mais de um membro somente o último valor atribuido será realmente armazenado. Veja o seguinte exemplo:

union teste un01;

int valor;
un01.a = 15;
un01.b = 20.50;

printf("Valor do membro a: %d\n", un01.a);
printf("Valor do membro b: %f\n", un01.b);

A saída desse programa mostra o seguinte resultado:

Unions em linguagem C

Note que o valor do membro b está correto (20,50), porém o valor atribuído ao membro a (que é 15) não faz sentido algum. Agora veja o que ocorre se invertermos a ordem de atribuição, desta forma:

un01.b = 20.50;
un01.a = 15;

Unions em linguagem C - 02

Agora o valor do membro a está correto, mas o do membro b está zerado. Isso mostra claramente que a union somente pode guardar valor em um de seus membros por vez. Se um membro possui valor armazenado, e é atribuído valor e um outro membro, o primeiro membro perde seu conteúdo.

Lembre-se sempre dessa propriedade das unions, pois isso pode causar problemas se não for levado em consideração em seus programas.

Operações em Unions

As operações que podems er realizadas em uma union são:

  • Atribuir uma union a outra union do mesmo tipo
  • Obter o endereço da union (&)
  • Acessar seus membros com operadores adequados.

As unions não podem ser comparadas entre si (assim como as structs).

 

Sobre Fábio dos Reis (1358 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*