O tipo union é um tipo de dado complexo que é composto de um ou mais membros de tipos de dados diferentes.
Esses membros utilizam o mesmo espaço de memória.
A declaração de um enum e de uma variável do tipo union são feita de acordo com as sintaxes abaixo:
Sintaxe
union nome_union
{
tipo_dado membro1;
tipo_dado membro2;
tipo_dado membroN;
};
union nome_union nome_variavel;
O corpo de uma union é delimitado por "{" e "}" e seus membros são separados por (;). Uma union deve ser
teminada com (;) e seus membros não pode ser iniciados como structs ou enums.
O acesso aos membros de um union é feita utilizando o operadore (.) seguido do nome do do membro como pode
ver visto na sintaxe abaixo:
Sintaxe
variavel_union.nome_membro
Exemplo 1
#include <stdio.h>
union uniao
{
float valor1;
int valor2;
};
int main ()
{
union uniao teste;
teste.valor1 = 10.99; // uso do membro float
printf ("%f\n", teste.valor1); //uso do membro float
teste.valor2 = 999; //uso do membro int
printf ("%d\n", teste.valor2); //uso do membro
return 0;
}
Saída
10.990000
999
Como um union agrupa vários tipos de dados em apenas um local de memória, é necessário trabalhar com um
membro de union por vez, ou seja, a cada atribuição a um determinado membro, a utilização do
mesmo deve ser feito em sequência.
Caso seja feita a atribuição de valores para todos os membros de uma union de forma sequencial,
apenas o valor atribuído ao último membro será válido. Acessando outros membros porderá gerar
dados corrompidos.