English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Linguagem C

Controle de Fluxo de Linguagem C

Função do C

Array do C

Ponteiro do C

String do C

Estrutura de Linguagem C

Arquivos de Linguagem C

Outros C

Manual de Referência do Linguagem C

União do C (Union)

Neste tutorial, você aprenderá sobre union em linguagem C. Mais especificamente, como criar um union, acessar seus membros e entender a diferença entre union e estrutura. Union também é conhecido como union, e ambos pertencem ao tipo de estrutura de dados no C.

Union é um tipo de dados especial que permite armazenar diferentes tipos de dados no mesmo endereço de memória. Você pode definir um union com múltiplos membros, mas sempre pode haver apenas um membro com valor. O union oferece uma maneira eficaz de usar o mesmo endereço de memória.

Union também é um tipo de usuário definido, semelhante ao union em C.structA diferença está em uma palavra-chave. A estrutura aloca espaço suficiente para armazenar todos seus membros, enquanto o union aloca espaço apenas para o maior membro.

Como definir um union?

Usamos a palavra-chave union para definir um union. Este é um exemplo:

union car
{
  char name[50];
  int preço;
};

O código acima define o tipo derivado union car.

Criar variável de union

Após definir a union, ela criará um tipo de usuário definido. Mas, não há alocação de memória. Para alocar memória para o tipo de union dado e usá-lo, precisamos criar variáveis.

Isso é como criamos variáveis de union.

union car
{
  char name[50];
  int preço;
};
int main()
{
  union car car1, car2, *car3;
  return 0;
}

Outra maneira de criar uma variável de union é:

union car
{
  char name[50];
  int preço;
}1, car2, *car3;

Nesses dois casos, será criado uma variável de tipo union car1、car2e ponteiros de union car3。

Acessar membros da union

Usamos o operador . para acessar os membros da union. Para acessar variáveis de ponteiros, também usamos-> operador.

No exemplo acima,

  • Para acessar car1o preço (preço), use car1.preço.

  • Para acessar car3o preço (preço), pode ser acessado usando (* car3).preço ou car3-> preço.

Diferenças entre unions e structs

Vamos usar um exemplo para explicar a diferença entre unions e structs:

#include <stdio.h>
union unionJob
{
   //Definir union
   char name[32];
   float salary;
   int workerNo;
} uJob;
struct structJob
{
   char name[32];
   float salary;
   int workerNo;
} sJob;
int main()
{
   printf("union 的大小 = %d bytes", sizeof(uJob));
   printf("\nstruct 的大小 = %d bytes", sizeof(sJob));
   return 0;
}

Resultados de Saída

tamanho da union = 32 bytes
tamanho da structure  = 40 bytes

Por que o tamanho das variáveis de union e struct existe essa diferença?

aqui, o tamanho do sJob é40 bytes, porque

  • name[32] é32bytes

  • o tamanho do salary é4bytes

  • o tamanho do workerNo é4bytes

mas, o tamanho da uJob é32bytes. Isso porque o tamanho da variável de union sempre será o tamanho do maior elemento. No exemplo acima, o maior elemento (name[32O tamanho do ]) é32bytes.

Usando unions, todos os membros compartilhammesma memória

Exemplo: Acesso ao membro do unions

#include <stdio.h>
union Job {
   float salary;
   int workerNo;
} j;
int main() {
   j.salary = 12.3;
    //quando j.workerNo for atribuído
    // j.salary não será mantido12.3
   j.workerNo = 100;
   printf("Salário = %.1f\n", j.salary);
   printf("Número de Trabalhadores = %d", j.workerNo);
   return 0;
}

Resultados de Saída

Salário = 0.0
Número de Trabalhadores = 100