Introdução à União C

Union é um tipo de dados definido pelo usuário em c, que permite armazenar diferentes elementos de dados de diferentes tipos para serem armazenados no mesmo local de memória. Ele fornece uma maneira eficiente de utilizar a memória, pois apenas um membro de uma união pode ser acessado em um determinado momento. O tamanho de uma união, portanto, a qualquer momento seria igual ao tamanho do seu maior elemento. Embora a união seja como uma estrutura, a principal diferença é que em uma estrutura é alocada uma memória separada para cada membro da estrutura, enquanto na união é uma memória compartilhada que é equivalente ao tamanho do maior membro.

Sintaxe:

Uma união pode ser definida como abaixo.

union UnionName
(
UMember1;
UMember2;
UMember3;
) UnionReference;

Os membros da União C podem ser acessados ​​usando a referência 'UnionReference'. união é uma palavra-chave.

Exemplo de estrutura e união na alocação de memória:

Vamos demonstrar a diferença entre struct e união na alocação de memória.

Código:

#include
struct samp_structure
(
char name1(30);
int e_id;
float e_slry;
char name2(60);
)s;
union s_union
(
char name1(30);
int e_id;
float saly;
)u;
int main()
(
printf("size of structure :%ld bytes \n", sizeof(s));
printf("size of union : %ld bytes\n", sizeof(u));
return 0;
)

Resultado:

Exemplos de União C

Vamos ver a implementação da União C com a ajuda dos exemplos mencionados abaixo:

Exemplo 1

Este é o exemplo para definir uma união C e acessar seus membros.

Código:

#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
printf( "record.i : %d\n", t.tint);
t.tf= 200.5;
printf( "record.f : %f\n", t.tf);
strcpy( t.tstr, "Test");
printf( "record.str : %s\n", t.tstr);
return 0;
)

Saída :

Exemplo 2

Abaixo está o mesmo código acima, exceto que as instruções de impressão foram reorganizadas.

Código:

#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
t.tf = 200.5;
strcpy( t.tstr, "Test");
printf( "record.i : %d\n", t.tint);
printf( "record.f : %f\n", t.tf);
printf( "record.str : %s\n", t.tstr);
return 0;
)

Resultado:

Se você observar atentamente a saída, poderá ver que os valores do lixo foram atribuídos para int e float porque a string recebeu a memória, enfim, ou seja, como os membros compartilham a memória em uma união, o membro cujo valor está armazenado no momento tenha acesso à memória.

Exemplo 3

União anônima é uma união que não tem nome; portanto, eles podem ser usados ​​dentro de qualquer estrutura ou união aninhada. Os membros da união anônima podem ser acessados ​​diretamente dentro do escopo de sua definição. Da mesma forma, a estrutura anônima pode ser usada dentro de uma união anônima.

Sintaxe da união e estrutura anônimas da seguinte maneira:

// Anonymous union example
union
(
char anoUChar;
int anoUNum;
);
// Anonymous structure example
struct
(
char anoSChar;
int anoSNum;
);

Exemplo de união anônima struct dentro de uma estrutura:

#include
struct testscope
(
// Anonymous union
union
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
struct testscope ts;
ts.testNum = 65;
// Note that members of union are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)

Resultado:

O testchar foi atribuído ao valor 'A' porque o valor recente na memória de união é 65 que foi atribuído ao testNum, portanto, o caractere ASCII correspondente é impresso.

Nota: Os membros da união são acessados ​​diretamente.

Exemplo de estrutura anônima dentro de uma união:

#include
union testscope
(
// Anonymous union
struct
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
union testscope ts;
ts.testNum = 65;
ts.testChar='V';
//Note: The members of struct are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)

Resultado:

Conclusão

Assim, a união ajuda no gerenciamento eficiente da memória. A desvantagem da união é que apenas o último valor inserido na união estará disponível apenas. Deve ser usado quando os membros do sindicato não precisam estar disponíveis para serem acessados ​​ao mesmo tempo.

Artigos recomendados

Este é um guia para a C Union. Aqui discutimos a introdução, sintaxe e diferentes exemplos de união c com implementação de código. Você também pode consultar os seguintes artigos para saber mais:

  1. C Palavras-chave
  2. Matrizes em programação C
  3. Programa Palindrome em C ++
  4. Classes de armazenamento C