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