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
- Sobre União
- Declaração de uma União
- Definindo uma Variável de União
- Diferença Entre Estrutura e União
- Operações em Uniões
- 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.
- Uma união pode conter um de muitos tipos diferentes de valores, mas apenas um é armazenado por vez.
- 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.
- 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
| Estrutura | Uniã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;
} |
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.