single
Uniões
Deslize para mostrar o menu
Uma união é um tipo de dado definido pelo usuário em C, semelhante a uma estrutura. A principal diferença é que todos os seus membros compartilham o mesmo local de memória. Em qualquer momento, apenas um membro pode armazenar um valor.
Uniões são usadas com pouca frequência, mas são úteis quando se deseja uma variável que possa armazenar diferentes tipos de dados em momentos distintos enquanto economiza memória.
Os dados estão localizados na mesma área de memória para todos os membros da união. Isso significa que todos os membros da união compartilham o mesmo endereço de memória e o tamanho da união é igual ao tamanho de seu maior membro.
O principal uso de uma união é a sobreposição de diferentes tipos de dados em uma única área de memória, ou seja, a representação de uma área de memória como diferentes tipos de dados.
Como em uma união os campos ocupam a mesma célula de memória, é possível processar os mesmos dados de maneiras diferentes:
main.c
12345678910111213141516#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }
No exemplo, as variáveis data.a e data.b compartilham o mesmo espaço de memória. Atribuímos o valor 77 a a, mas podemos interpretar os mesmos bytes como um caractere em b.
Alinhamento em uniões
Assim como as estruturas, as uniões também utilizam alinhamento e preenchimento. O compilador pode adicionar bytes extras para que cada membro comece no limite de memória adequado.
main.c
12345678910111213#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }
Uma união pode armazenar apenas um valor por vez, e seu tamanho é igual ao tamanho de seu maior membro. No exemplo com int a (4 bytes), double b (8 bytes) e char c[20], o tamanho mínimo da união é 20 bytes. No entanto, o compilador pode adicionar bytes extras para alinhamento, para que double ou int comecem no limite de memória adequado. Como resultado, sizeof(union Data) pode ser maior que 20, por exemplo, 24 bytes.
Deslize para começar a programar
A união Data armazena cada valor como um int e permite o acesso ao mesmo valor como um char. A função deve iterar pelo array e imprimir cada valor tanto como inteiro quanto como caractere ASCII correspondente.
A função aceita dois parâmetros: um array de inteiros (values) e seu tamanho (n).
- Declarar uma
union Datacom dois membros:int aechar b. - Em um laço
for, percorrer os elementos do array do índice0atén. - Atribuir o elemento atual do array ao membro
intda união (data.a). - Imprimir o valor inteiro
data.ae a representação em caracteredata.b.
Exemplo
{65, 66, 67, 68, 69} =>
Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E
Solução
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo