Sindicatos C (com exemplos)

Neste tutorial, você aprenderá sobre uniões em programação C. Mais especificamente, como criar sindicatos, acessar seus membros e aprender as diferenças entre sindicatos e estruturas.

Uma união é um tipo definido pelo usuário semelhante a structs em C, exceto por uma diferença fundamental. As estruturas alocam espaço suficiente para armazenar todos os seus membros, enquanto os sindicatos alocam o espaço para armazenar apenas o maior membro.

Como definir um sindicato?

Usamos a unionpalavra-chave para definir sindicatos. Aqui está um exemplo:

 union car ( char name(50); int price; ); 

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

Crie variáveis ​​de união

Quando uma união é definida, ela cria um tipo definido pelo usuário. No entanto, nenhuma memória é alocada. Para alocar memória para um determinado tipo de união e trabalhar com ele, precisamos criar variáveis.

Veja como criamos variáveis ​​de união.

 union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; ) 

Outra forma de criar variáveis ​​de união é:

 union car ( char name(50); int price; ) car1, car2, *car3; 

Em ambos os casos, as variáveis ​​de união car1, car2 e um ponteiro de união car3 do union cartipo são criados.

Acessar membros de um sindicato

Usamos a .operadora para acessar membros de um sindicato. Para acessar variáveis ​​de ponteiro, usamos também use o ->operador.

No exemplo acima,

  • Para acessar o preço de car1, car1.priceé usado.
  • Para acessar o preço usando car3, (*car3).priceou car3->pricepode ser usado.

Diferença entre sindicatos e estruturas

Vamos dar um exemplo para demonstrar a diferença entre sindicatos e estruturas:

 #include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; ) 

Resultado

 tamanho da união = 32 tamanho da estrutura = 40 

Por que essa diferença no tamanho das variáveis ​​de união e estrutura?

Aqui, o tamanho de sJob é de 40 bytes porque

  • o tamanho name(32)é de 32 bytes
  • o tamanho salaryé de 4 bytes
  • o tamanho workerNoé de 4 bytes

No entanto, o tamanho de uJob é de 32 bytes. É porque o tamanho de uma variável de união sempre será o tamanho de seu maior elemento. No exemplo acima, o tamanho de seu maior elemento, ( name(32)), é de 32 bytes.

Com um sindicato, todos os membros compartilham a mesma memória .

Exemplo: acessando membros do sindicato

 #include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )

Resultado

 Salário = 0,0 Número de trabalhadores = 100 

Para saber onde os sindicatos são usados, visite Por que precisamos dos sindicatos C?

Artigos interessantes...