“Assim como as estruturas, os sindicatos também são tipos de dados definidos pelo usuário, mas, diferentemente das estruturas, os membros do sindicato compartilham o mesmo local de memória e não possuem locais de memória diferentes. Se declararmos duas variáveis em uma estrutura e depois verificarmos o endereço deles, veremos que ambos têm endereços diferentes, o que significa que os membros de uma estrutura obtêm diferentes locais de memória. Em vez disso, declaramos as mesmas duas variáveis em um sindicato e verificamos seus endereços; será observado que ambos os endereços são iguais, o que prova que ambas as constantes compartilham o mesmo local de memória. No caso da estrutura, um número inteiro levará quatro blocos, mas em uma união, tanto o número inteiro quanto o personagem compartilharão o mesmo bloco de memória.
Uma coisa a ter em mente é que, em um sindicato, os membros compartilharão o mesmo local de memória, o que significa que, se as alterações forem feitas em um membro, elas se refletirão nos outros membros da União também. O tamanho do sindicato é obtido de acordo com o tamanho do maior membro de uma união. Os membros do sindicato podem ser acessados através de ponteiros usando o operador (->). Se quisermos armazenar informações sobre vários objetos, como livros e lojas, teremos que fazer duas estruturas para cada um deles. Vai desperdiçar muita memória. Para esse fim, os sindicatos são usados. Os sindicatos podem salvar informações em vários objetos.”
Sintaxe
A sintaxe a declarar uma união é a seguinte:
A sintaxe para sindicatos e estrutura é quase a mesma. A diferença entre união e estrutura é que usamos a união das palavras -chave em vez de estrutura para declarar sindicatos. Na seção Variáveis, podemos ver que declaramos várias variáveis de diferentes tipos de dados. É o mesmo que as estruturas, mas em estruturas, essas variáveis podem estar relacionadas a um único objeto, como livro ou estudante ou aula, etc. Mas nos sindicatos, podemos declarar variáveis relevantes para mais de um único objeto. Por exemplo, podemos declarar a duração de uma tabela e também o título do livro na tabela.
Exemplo 1
Neste exemplo, criamos uma união e demos o nome "Test_union". No bloco de variáveis, declaramos duas variáveis como membros de nossa união. Inteiro "X" e personagem "Y". Com o suporte de fechamento, existe uma variável de tipo de união “Test_union.”Também podemos declarar uma variável de tipo de união o mesmo que em estruturas. Com a ajuda de "variável1", podemos acessar os membros de nossa união. Dentro da função Main (), pelo uso do operador de pontos, podemos acessar as variáveis declaradas na união. Aqui estamos atribuindo o valor "75" a "x.”Observe que não atribuímos nenhum valor à nossa variável“ y ”.
#incluir
Union test_union
int x;
char y;
variável1;
int main ()
variável1.x = 75;
printf ("x = %d \ n", variável1.x);
printf ("y = %c \ n", variável1.y);
retornar 0;
Depois que nosso código for executado, obteremos a saída que é mostrada na figura abaixo. Imprimimos “X” e seu valor da mesma maneira; Imprimimos “y” e seu valor contra ele. A coisa que deve ser notificada é que não atribuímos nenhum valor para y. Em nossa saída, podemos ver que o compilador imprimiu "x" e um valor de "75" contra ele. Mas contra "y", ele imprimiu "k."Você pode estar se perguntando por que temos esse capital" K "como saída para" Y.”Valor“ 75 ”para“ x ”não é um problema. Mas "Y" é um personagem em que o compilador imprimiu seu valor mesmo quando passamos um número para "x.”
Isso ocorre porque, como discutimos anteriormente, o mesmo bloco de memória é compartilhado pelos membros que são agrupados em uma união. Declaramos “variável1” para nossa união e passamos o valor usando essa variável. Variable1 atribuiu o valor 75 a todos os membros da União. Int assumiu esse valor como um número e imprimiu o mesmo valor. Mas o personagem assumiu esse valor como código ASCII e converteu esse código ASCII no personagem contra ele. Código ASCII para capital "K" é "75", então substituiu "75" por "K.”Este é todo o processo de união alocando o mesmo bloco de memória para as variáveis.
Exemplo 2
Nesse caso, descobriremos como o sindicato utiliza memória. Para esse fim, declaramos um sindicato como exemplo. Em exemplo_union, declaramos quatro constantes e cada um com diferentes tipos de dados. Declaramos int var1, char var2, duplo var3 e flutuar var4 como membros de nossa união. No método principal, imprimimos uma declaração com a função sizeof (). A função sizeof () é uma função padrão na linguagem C que obtém o tamanho de qualquer objeto em nosso código. Passamos o nome de nossa união porque queremos obter o tamanho que nossa união ocupou.
#incluir
Union Explet_union
int var1;
char var2;
Var3 duplo;
flutuar var4;
;
int main ()
printf ("%ld \ n", sizeof (union exemplo_union));
retornar 0;
Esta é a saída após a compilação do nosso código. Vamos obter a saída de 8. No meu sistema, o tamanho do número inteiro é de 4 bytes, o tamanho do personagem é de 1 byte, o tamanho de um duplo é 8 bytes e o tamanho de um flutuador é novamente 4 bytes. No nosso caso, o tamanho de um duplo é 8, que é o maior de todos os tamanhos, de modo que o compilador alocou o tamanho 8 à nossa união. Agora, podemos entender melhor que o tamanho da variável mais alta é alocada a todos os tipos de dados, e a soma de seus tamanhos não é usada pelo compilador, como no caso da estrutura. É por isso que obteremos o resultado 8 como nossa saída.
Conclusão
Neste guia, discutimos os sindicatos em C linguagem. Só para entender o conceito de sindicatos, pode -se dizer que os sindicatos são quase os mesmos que as estruturas. Mas a principal diferença é a alocação de memória. É muito eficaz ao escrever código complexo porque, naquele momento, um programador se concentra na eficiência do código. Um bom programador está sempre tentando ocupar a menor memória do sistema por seu código; Os sindicatos os ajudam a fazer isso. Entregamos o nosso melhor para ajudá -lo a entender os sindicatos implementando e explicando exemplos. No final do tópico, podemos dizer que o uso de sindicatos é uma boa abordagem para lidar com vários registros, além de escrever código otimizado e ajustado ao desempenho. Também ajudará o codificador a otimizar o código para melhor desempenho.