Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Uniões em C Explicadas: Gerenciamento Eficiente de Memória para Múltiplos Tipos de Dados

Uma união é um tipo de dado especial disponível em C que permite armazenar diferentes tipos de dados na mesma localização de memória. Você pode definir uma união com muitos membros, mas apenas um membro pode conter um valor em um determinado momento. Uniões fornecem uma maneira eficiente de usar a mesma localização de memória para múltiplos propósitos.

Definindo uma União

Para definir uma união, você deve usar a instrução union da mesma forma que fez ao definir uma estrutura. A instrução union define um novo tipo de dado com mais de um membro para seu programa. O formato da instrução union é o seguinte:

union [tag_da_uniao] {
    definicao_membro;
    definicao_membro;
    ...
    definicao_membro;
} [uma ou mais variáveis de união];

O tag_da_uniao é opcional e cada definição de membro é uma definição normal de variável, como int i; ou float f; ou qualquer outra definição de variável válida. No final da definição da união, antes do ponto e vírgula final, você pode especificar uma ou mais variáveis de união, mas isso é opcional. Aqui está como você definiria um tipo de união chamado Dados com três membros i, f e str:

union Dados {
    int i;
    float f;
    char str[20];
} dados;

Agora, uma variável do tipo Dados pode armazenar um inteiro, um número de ponto flutuante ou uma string de caracteres. Isso significa que uma única variável, ou seja, a mesma localização de memória, pode ser usada para armazenar múltiplos tipos de dados. Você pode usar quaisquer tipos de dados embutidos ou definidos pelo usuário dentro de uma união com base na sua necessidade.

A memória ocupada por uma união será grande o suficiente para conter o maior membro da união. Por exemplo, no exemplo acima, o tipo Dados ocupará 20 bytes de espaço de memória porque este é o espaço máximo que pode ser ocupado por uma string de caracteres. O exemplo a seguir exibe o tamanho total de memória ocupado pela união acima:

#include <stdio.h>
#include <string.h>
union Dados {
    int i;
    float f;
    char str[20];
};
int main() {
    union Dados dados;
    printf("Tamanho de memória ocupado por dados: %d\n", sizeof(dados));
    return 0;
}

Quando o código acima é compilado e executado, produz o seguinte resultado:

Tamanho de memória ocupado por dados: 20

Acessando Membros da União

Para acessar qualquer membro de uma união, usamos o operador de acesso a membro (.). O operador de acesso a membro é codificado como um ponto entre o nome da variável de união e o membro da união que desejamos acessar. Você usaria a palavra-chave union para definir variáveis de tipo união. O exemplo a seguir mostra como usar uniões em um programa:

#include <stdio.h>
#include <string.h>
union Dados {
    int i;
    float f;
    char str[20];
};
int main() {
    union Dados dados;
    dados.i = 10;
    dados.f = 220.5;
    strcpy(dados.str, "Programação C");
    printf("dados.i: %d\n", dados.i);
    printf("dados.f: %f\n", dados.f);
    printf("dados.str: %s\n", dados.str);
    return 0;
}

Quando o código acima é compilado e executado, produz o seguinte resultado:

dados.i: 1917853763
dados.f: 4122360580327794860452759994368.000000
dados.str: Programação C

Aqui, podemos ver que os valores dos membros i e f da união ficaram corrompidos porque o valor final atribuído à variável ocupou a localização de memória e esta é a razão pela qual o valor do membro str está sendo impresso muito bem.

Agora, vamos olhar para o mesmo exemplo mais uma vez, onde usaremos uma variável por vez, que é o principal propósito de ter uniões:

#include <stdio.h>
#include <string.h>
union Dados {
    int i;
    float f;
    char str[20];
};
int main() {
    union Dados dados;
    dados.i = 10;
    printf("dados.i: %d\n", dados.i);
    dados.f = 220.5;
    printf("dados.f: %f\n", dados.f);
    strcpy(dados.str, "Programação C");
    printf("dados.str: %s\n", dados.str);
    return 0;
}

Quando o código acima é compilado e executado, produz o seguinte resultado:

dados.i: 10
dados.f: 220.500000
dados.str: Programação C

Aqui, todos os membros estão sendo impressos corretamente porque um membro está sendo usado por vez.


Linguagem C

  1. Microprocessadores: A Evolução da Computação com Programa Armazenado
  2. Dados Completos de Op-Amp: Folhas de Dados National Semiconductor e CA3130
  3. Entendendo Tipos de Dados em C++: Fundamentos, Modificadores e Boas Práticas
  4. Tipos de Dados em C Explicados: int, float, char e Mais – Guia Completo
  5. Unions em C Explicadas: Definição, Uso e Comparação com Structs
  6. Dominando Tipos de Dados em Python: Guia Prático
  7. Entendendo Tipos de Dados em C: Guia Abrangente
  8. Estruturas de Dados em C++: Construindo Programas Eficientes com Arrays, Structs e Mais
  9. Dominando Abstração de Dados em C++: Simplifique Design com Separação Interface-Implementação
  10. Encapsulamento de Dados em C++: Proteja Seu Código