Programação C/C++ · 5 min read · Oct 10, 2025

Aprendendo C/C++ Passo a Passo - Página 11

11. Passo a Passo C/C++ — Programação em C - Uniões

Uniões

| | 1. Introdução

  1. Sobre União
  2. Declaração de uma União
  3. Definindo uma Variável de União
  4. Diferença Entre Estrutura e União
  5. Operações em Uniões
  6. Escopo de uma União |

1. Introdução

| | / 81_union.c /
#include
struct s_emp
{
int eno;
char name[20];
float sal;
};
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
struct s_emp se;
union u_emp ue;
printf(“\nTamanho da estrutura de Funcionário : %d”, sizeof(se));
printf(“\nTamanho da União de Funcionário : %d”, sizeof(ue));
return 0;
} | | | Saída: Tamanho da Estrutura de Funcionário : 26
Tamanho da União de Funcionário : 20 |

2. Sobre União

Quando um grande número de variáveis é solicitado para uso em um programa. Elas ocupam uma grande quantidade de memória. Uniões fornecem uma maneira mais fácil de economizar memória usando a técnica de substituição. Ela usa a mesma localização de memória para todos os tipos de variáveis.

Uma união é um tipo de dado em C, que permite a sobreposição de mais de uma variável na mesma área de memória.

Características das Uniões:

| | 1. A união armazena valores de diferentes tipos em uma única localização na memória.

  1. Uma união pode conter um de muitos tipos diferentes de valores, mas apenas um é armazenado por vez.
  2. A união mantém um valor apenas para um tipo de dado. Se uma nova atribuição for feita, o valor anterior não tem validade.
  3. Qualquer número de membros de união pode estar presente. Mas a variável do tipo união ocupa a maior memória ocupada por seus membros. |

3. Declaração de uma União

A união é um tipo de dado através do qual objetos de diferentes tipos e tamanhos podem ser armazenados em momentos diferentes. A definição de uma União é a mesma que a de uma Estrutura. A única mudança na declaração é a substituição da palavra-chave union pela palavra-chave struct.

| | |

Ex:

| | union ddate
{
int day;
int month;
int year;
}; | union student
{
int sno;
char name[20];
int marks;
float avg;
}; |

4. Definindo uma Variável de União

Definir uma variável de União é o mesmo que estrutura e que para definir um tipo de dado embutido, como int.

| | int a; / Válido /
union date d; / Válido em C e C++ / |

Cálculo do tamanho da União

Cada tipo de dado em C/C++ tem um tamanho especificado, ou seja, int tem 2 bytes de tamanho, float tem 4 bytes de tamanho e assim por diante. Aqui está a maneira de encontrar o tamanho de uma variável de União.
sizeof:- Esta função é usada para encontrar o tamanho de uma variável dada.

| | printf(“%d”, sizeof(int)); / 2 /
printf(“%d”, sizeof(float)); / 4 /
printf(“%d”, sizeof(union emp)); / Exibe o tamanho da união emp / |

5. Diferença entre Estruturas e Uniões

Aqui está a diferença entre Estruturas e Uniões

EstruturaUnião **
1. Pode conter diferentes tipos (variáveis) em uma única localização.1. Pode conter diferentes tipos (variáveis) em diferentes localizações.
2. Pode conter mais de um tipo (variável), mas apenas um é armazenado por vez.2. Pode conter mais de um tipo (variável), todos são armazenados na memória ao mesmo tempo.
3. Qualquer número de membros de união pode estar presente. Mas a variável do tipo união ocupa a maior memória ocupada por seu membro.3. Requer memória do tamanho de todos os seus membros.
4. Em seu processo, apenas um membro pode ser acessado a qualquer momento.4. Em seu processo, todos os membros podem ser acessados a qualquer momento.
5. O escopo da união é a função e o escopo de seus membros é também o mesmo que a própria união. (Eles podem ser acessados diretamente no programa).5. O escopo da Estrutura é apenas a função. Os membros da Estrutura não podem ser acessados diretamente no programa.

6. Operações em Uniões

Uma união é também semelhante a uma estrutura, pode realizar todas as operações como estruturas. As operações em União estão listadas abaixo.

| | • Uma variável de união pode ser atribuída a outra variável de união.
• Uma variável de união pode ser passada para uma função como um parâmetro
• O endereço da variável de união pode ser extraído usando o operador de endereço (&).
• Uma função pode aceitar e retornar uma união ou um ponteiro para uma união. |

| | / 82_union.c /
#include
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
union u_emp ue;
printf(“Digite o Número do Funcionário : “); scanf(“%d”, &ue.eno);
printf(“Digite o Nome do Funcionário : “); scanf(“%s”, ue.name);
printf(“Digite o Salário do Funcionário : “); scanf(“%f”, &ue.sal);
printf(“\n\nOs Detalhes do Funcionário são os seguintes…\n”);
printf(“%d %s %f “, ue.eno, ue.name, ue.sal);
return 0;
} |

| | Qual é a saída?
Apenas ue.sal está correto. E quanto ao resto das variáveis. |

A qualquer instante, apenas uma das variáveis da união terá um valor significativo. Apenas aquele membro, que foi escrito por último, pode ser lido. Neste ponto, outras variáveis conterão lixo. É responsabilidade do programador acompanhar a variável ativa (ou seja, a variável que foi acessada por último).

Aqui está a melhor maneira de aceitar e exibir registros de um funcionário.

| | / 83_emp.c /
#include
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
union u_emp ue;
printf(“\nDigite o Número do Funcionário : “); scanf(“%d”, &ue.eno);
printf(“\n%d”, ue.eno);
printf(“\nDigite o Nome do Funcionário : “); scanf(“%s”, ue.name);
printf(“\n%s”, ue.name);
printf(“\nDigite o Salário do Funcionário : “); scanf(“%f”, &ue.sal);
printf(“\n%f”,ue.sal);
return 0;
} |

7. Escopo de uma União

O escopo da união é diferente da estrutura. Uma variável de estrutura pode ser acessada apenas por suas funções. Enquanto uma união e seus membros podem ser acessados por sua função.

| | / 84_scope.c /
#include
int main()
{
union
{
int i;
char c;
float f;
};
i = 10; c = ‘a’; f = 4.5; / Membros da União /
printf(“O valor de c é : %c”, c);
return 0;
} |

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.