Diferença entre estrutura e união
Contente
O C ++ permite todas as cinco maneiras fornecidas pela linguagem C para criar dados personalizados. Essas cinco maneiras são 'estrutura', 'campo de bits', 'união', 'enumeração', 'typedef'. No artigo abaixo, estudaremos a diferença entre estrutura e união. A estrutura e a união são os tipos de dados do contêiner que podem conter dados de qualquer "tipo". A principal diferença que distingue estrutura e união é que a estrutura possui um local de memória separado para cada um de seus membros, enquanto os membros de um sindicato compartilham o mesmo local de memória.
Vamos entender a diferença entre estrutura e união, junto com um gráfico de comparação.
- Gráfico de comparação
- Definição
- Principais diferenças
- Semelhanças
- Conclusão
Gráfico de comparação
Base de comparação | Estrutura | União |
---|---|---|
Basic | O local de memória separado é alocado para cada membro da estrutura. | Todos os membros da união compartilham o mesmo local de memória. |
Declaração | struct struct_name { tipo element1; tipo element2; . . } variável1; variável2; ...; | nome_de_ união tipo element1; tipo element2; . . } variável1; variável2; ...; |
palavra chave | struct | União |
Tamanho | Tamanho da estrutura = soma do tamanho de todos os membros dos dados. | Tamanho da união = tamanho dos maiores membros. |
Valor da loja | Armazena valores distintos para todos os membros. | Armazena o mesmo valor para todos os membros. |
De uma vez | Uma estrutura armazena vários valores, dos diferentes membros, da estrutura. | Um sindicato armazena um valor único de cada vez para todos os membros. |
Modo de visualização | Forneça uma maneira única de visualizar cada local da memória. | Forneça várias maneiras de visualizar o mesmo local de memória. |
Recurso anônimo | Nenhum recurso anônimo. | União anônima pode ser declarada. |
Definição de Estrutura
A estrutura é uma coleção de variáveis de diferentes tipos de dados, chamadas por um nome comum. As variáveis em uma estrutura são chamadas de "membros". Por padrão, todos os membros de uma estrutura são "públicos". Ao declarar uma estrutura, você cria um modelo, que pode ser usado para criar objetos de estrutura, compartilhando a mesma organização de membros de dados e funções de membro. A declaração da estrutura é sempre precedida pela palavra-chave "struct", que informa ao compilador que uma estrutura foi declarada. Vamos dar um exemplo.
Vamos dar um exemplo.
struct employee {nome da string; string nome_empresa; cidade de cordas; } emp1, emp2;
Aqui, declaramos uma estrutura para armazenar as informações dos funcionários. A declaração é finalizada por ponto e vírgula, como a declaração de estrutura é uma declaração e, em C ++, a declaração é finalizada por ponto e vírgula.
O nome dado a uma estrutura define um "tipo" (no exemplo acima, o nome da estrutura é "funcionário"). As variáveis desses tipos podem ser criadas, como acima, criamos duas variáveis 'emp1' e 'emp2' do tipo 'employee'. No exemplo acima, criamos uma variável "estrutura" logo após a declaração; alternativamente, poderia ser criado separadamente.
struct funcionário emp1, emp2; // a palavra-chave struct não é obrigatória.
Os membros de uma variável de estrutura podem ser inicializados ou podem ser acessados usando o operador ponto (.).
emp1.name = "ashok";
As informações contidas em uma variável de estrutura podem ser atribuídas a outra variável de estrutura do mesmo tipo a seguir.
emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Nova Deli"; emp2 = emp1; // atribuindo valores do membro de emp1 a emp2. cout <
Aqui, atribuímos a variável de estrutura 'emp1' a 'emp2', para que 'emp1' copie todo o valor de seus membros para o membro correspondente de 'epm2'.
O membro da variável de estrutura pode ser passado para a função
funct (emp1.city);
A variável de estrutura inteira pode ser passada para a função, pelos métodos chamada por valor e chamada por referência.
funt (emp1); // chamando a função por chamada pelo método de valor. . . void funct (struct employee emp) {// recebendo valores dos membros de emp1. cout <
Aqui, a alteração no valor de um membro da variável de estrutura não será refletida fora da função, pois uma variável é passada pelo método de chamada por valor. Agora vamos fazer o mesmo chamando pelo método de referência.
funt (& emp1); // chamando a função por chamada pelo método de referência. . . void funct (struct employee * emp) {// endereço de recebimento de emp1. emp-> cidade = "Nur"; // altera o valor do membro (cidade) da variável de estrutura emp1. . }
Aqui, a variável de estrutura é passada por referência, portanto, a alteração no valor dos membros da variável de estrutura também reflete fora da função.
srtuct employee * emp; // decalcando o ponteiro de estrutura do tipo employee. emp = & emp1; // atribuindo o endereço de emp1 ao ponteiro. emp-> city // ponteiro acessando a cidade membro de emp1.
O ponteiro para a estrutura também pode ser criado; mantém o endereço da variável de estrutura.
Na estrutura, a inicialização agregada é permitida quando a definição da estrutura não contém nenhum construtor definido pelo usuário ou funções virtuais ou classe base ou campo privado ou protegido.
int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Possível, pois a estrutura do funcionário não contém nenhum dos itens mencionados acima.
Definição de União
Uma união é um local de memória compartilhado por dois ou mais tipos diferentes de variáveis declarados em um único tipo de união. A palavra-chave usada para declarar uma união é "união". Em C ++, uma união pode conter função membro e variáveis. Por padrão, todos os membros do sindicato são "públicos". A declaração da “união” é semelhante à declaração da estrutura.
união u_type {int x, char c; flutuador f; } u1, u2;
Aqui, declaramos uma união chamada u_type. Os membros do u_type são 'x' do tipo inteiro, 'c' do tipo de caractere e 'f' do tipo flutuante. Também criamos as variáveis de união 'u1' e 'u2', do tipo 'u_type', logo após a declaração de uma união. Também podemos declarar a variável union separadamente da declaração de uma união.
int main () {união u_type u1, u2; // A união da palavra-chave não é obrigatória em C ++. }
O acesso aos membros da união pode ser feito usando o operador ponto (.), Precedido pela variável union e seguido pelo membro dessa variável.
u1.x = 10;
Como estruturas, a inicialização agregada não é possível em uma união. Como sabemos, a união compartilha o mesmo local de memória para todos os seus membros por vez, apenas uma variável é inicializada e todas as variáveis são atualizadas automaticamente com o valor inicializado.
u1.x = 10; cout <
Se você tentar alterar o valor de qualquer membro de 'u1'. O outro membro será atualizado automaticamente para esse valor.
u1.c = 65; cout <
O espaço alocado para o sindicato é igual ao tamanho do maior membro do sindicato. Como o byte alocado para 'char' é 1 byte, 'int' é 4 byte e 'float' é 4 bytes, portanto, o maior tamanho é 4 byte. Portanto, a memória alocada para 'u1' e 'u2' é de 4 bytes.
int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); // 4
O ponteiro para a união pode ser criado exatamente como na estrutura. O ponteiro contém o endereço da união.
união u_type * un; un = & u1; cout < Assim como a estrutura, a união também pode ser transmitida para as funções pelos dois métodos, ou seja, chamada por valor e chamada por referência. funct (u1); // chamando a função por chamada pelo método de valor. . . void funct (união u_type un) {// recebendo o valor do membro de u1. cout < Agora, vamos chamar a função usando a chamada pelo método de referência. funct (& u1); // chamando a função por chamada pelo método de referência. . . void funct (união u_type un) {// recebendo o endereço de u1. un-> x = 20. } Existe um tipo especial de união em C ++ chamado União Anônima ”. A união anônima não pode ter o nome do tipo e nenhuma variável dessa união pode ser criada. É apenas para informar ao compilador que suas variáveis de membro devem compartilhar o mesmo local. A variável de uma união anônima pode ser referida sem o operador ponto (.) Normal. int main () {union {// define união anônima sem o nome do tipo. int x, char c; flutuador f; }; x = 10; // referiu a variável union com o operador out dot cout < Na união anônima, nenhuma função de membro é permitida, ela não pode conter dados particulares ou protegidos, e a união anônima global deve ser especificada como "estática". Os pontos a serem lembrados para a declaração normal da união. Estrutura e união são o tipo de dados do contêiner que contém o membro de diferentes tipos. Mas as estruturas são usadas quando precisamos armazenar um valor distinto para todos os membros em um local de memória distinto. As uniões são usadas quando a conversão de tipos é necessária.
Semelhanças:
Conclusão: