Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Uniões | Compreendendo Structs e Memória
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Dominando Structs em C

bookUniões

Note
Definição

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 imposição de diferentes tipos de dados em uma única área de memória comum, ou seja, a representação de uma área de memória como diferentes tipos de dados.

Como em uma união os campos estão na mesma célula de memória, é possível processar os mesmos dados de maneiras diferentes:

main.c

main.c

copy
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 a mesma 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 apropriado.

main.c

main.c

copy
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, garantindo que double ou int comecem no limite de memória apropriado. Como resultado, sizeof(union Data) pode ser maior que 20, por exemplo, 24 bytes.

Tarefa

Swipe to start coding

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 sobre o array e exibir cada valor tanto como inteiro quanto como o caractere ASCII correspondente.

A função recebe dois parâmetros: um array de inteiros (values) e seu comprimento (n).

  1. Utilizar uma union Data com dois membros: int a e char b.
  2. Em um laço for, iterar sobre os elementos do array de 0 a n.
  3. Atribuir o elemento atual do array ao membro int da união (data.a).
  4. Exibir o valor inteiro data.a e a representação em caractere data.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

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 3
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

close

bookUniões

Deslize para mostrar o menu

Note
Definição

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 imposição de diferentes tipos de dados em uma única área de memória comum, ou seja, a representação de uma área de memória como diferentes tipos de dados.

Como em uma união os campos estão na mesma célula de memória, é possível processar os mesmos dados de maneiras diferentes:

main.c

main.c

copy
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 a mesma 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 apropriado.

main.c

main.c

copy
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, garantindo que double ou int comecem no limite de memória apropriado. Como resultado, sizeof(union Data) pode ser maior que 20, por exemplo, 24 bytes.

Tarefa

Swipe to start coding

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 sobre o array e exibir cada valor tanto como inteiro quanto como o caractere ASCII correspondente.

A função recebe dois parâmetros: um array de inteiros (values) e seu comprimento (n).

  1. Utilizar uma union Data com dois membros: int a e char b.
  2. Em um laço for, iterar sobre os elementos do array de 0 a n.
  3. Atribuir o elemento atual do array ao membro int da união (data.a).
  4. Exibir o valor inteiro data.a e a representação em caractere data.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

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 3
single

single

some-alt