Union
Em C, o recurso de union
(união) é um pouco parecido com o conceito de struct
, embora tenha uma particularidade especial. Apesar das semelhanças com a struct
, a union
prevê que apenas um valor seja armazenado na estrutura.
O conceito pode parecer um pouco confuso, mas vamos esclarecer ao longo do texto.
👨🏾💻 O código
A ideia ainda consiste em criar uma estrutura capaz de reunir diversas variáveis, declarada de forma muito parecida com uma struct
, como no exemplo abaixo:
union nomedauniao{
int variavel1;
char variavel2;
};
Alternativamente, podemos criar uma união como um tipo de dado:
typedef union{
int variavel1;
char variavel2;
} Uniao;
⚖️ Comparando
Como introduzido, enquanto a struct
reservará espaço na memória para as duas variáveis, a union
reservará apenas o espaço necessário para armazenar uma das duas variáveis.
#include<stdio.h>
typedef union {
int variavel1;
char variavel2;
} Uniao;
typedef struct {
int variavel1;
char variavel2;
} Estrutura;
int main()
{
printf("Tamanho: %ld\n", sizeof(Uniao)); // 4 bytes em 32 bits
printf("Tamanho: %ld\n", sizeof(Estrutura)); // 8 bytes em 32 bits
return 0;
}
🤷🏼 Serve para quê?
A utilidade da union
pode parecer muito pequena. Entretanto, podemos destacar uma grande vantagem: o armazenamento de variáveis excludentes. Por exemplo:
#include<stdio.h>
typedef union {
int gramas;
float litros;
} Capacidade;
typedef struct {
int codigo;
Capacidade capacidade;
} Produto;
int main()
{
Produto jarra = { 1, { .litros = 1.5 } };
Produto vasilha = {1, { .gramas = 450} };
/* Imprimindo corretamente */
printf("Jarra -> Código: %d | Capacidade: %f", jarra.codigo, jarra.capacidade.litros);
/* Imprimindo incorretamente */
printf("Jarra -> Código: %d | Capacidade: %d", jarra.codigo, jarra.capacidade.gramas);
return 0;
}
📖 Bibliografia
Livros