Sindicatos em c

Sindicatos em c

“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.