Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Struct e Union Anônimos | Uso Avançado de Structs
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Dominando Structs em C

bookStruct e Union Anônimos

A linguagem de programação C possui estruturas anônimas e uniões anônimas, que permitem definir estruturas e uniões sem especificar um nome.

O que são Estruturas e Uniões Anônimas?

Uma união anônima ou estrutura anônima não possui um identificador. Por esse motivo, não é possível criar variáveis independentes desse tipo; em vez disso, elas são normalmente utilizadas dentro de outras estruturas.

// Anonymous union
union {
    char x;
    int y;
};

// Anonymous structure
struct {
    char x;
    int y;
};

Structs e uniões anônimas são especialmente úteis quando estão aninhadas e serão utilizadas apenas no contexto em que são declaradas.

Exemplo prático

Considere um cenário em que se deseja representar uma tabela ASCII onde o mesmo valor pode ser interpretado como um código numérico ou como um símbolo de caractere. Utilizar uma união anônima dentro de uma estrutura permite alternar entre essas duas interpretações de forma eficiente.

main.c

main.c

copy
123456789101112131415161718192021
#include <stdio.h> struct ASCIItable { // Anonymous union allows dual representation of the same memory union { char symbol; int num; }; }; int main() { struct ASCIItable AZtable; AZtable.num = 65; // ASCII code for 'A' // Print all uppercase letters and their numeric codes for (int i = 0; i < 26; i++) { printf("num = %d | symbol = `%c`\n", AZtable.num + i, AZtable.symbol + i); } return 0; }

Neste exemplo, a estrutura ASCIItable contém uma união anônima. A união permite que a mesma área de memória seja interpretada tanto como um valor numérico (num) quanto como um caractere (symbol).

Quando AZtable.num é definido como 65, ele corresponde ao código ASCII para 'A'. Utilizando a mesma memória, AZtable.symbol também representa 'A'. Ao iterar 26 vezes, é possível exibir todas as letras maiúsculas juntamente com seus códigos ASCII, demonstrando como a mesma memória pode representar múltiplas visões dos dados.

Tarefa

Swipe to start coding

Crie uma função findFurthestPoint que identifica o ponto mais distante da origem (0,0) em um plano 2D. Cada ponto é representado por uma estrutura Point contendo uma estrutura anônima aninhada com os campos x e y.

A função deve calcular a distância Euclidiana para cada ponto utilizando a fórmula:

distance = sqrt(x*x + y*y)

e retornar o índice do ponto com a maior distância.

  1. Dentro da função, calcule a distância do primeiro ponto em relação à origem utilizando a fórmula.
  2. Inicialize maxIndex com 0.
  3. Utilize um laço for de i = 1 até i = n para iterar sobre os pontos.
  4. Para cada ponto, calcule sua distância utilizando a fórmula acima.
  5. Se a distância for maior que maxDistance, atualize maxDistance e maxIndex para a distância e o índice do ponto atual.
  6. Após o laço, retorne maxIndex como o índice do ponto mais distante.

Solução

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. 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

bookStruct e Union Anônimos

Deslize para mostrar o menu

A linguagem de programação C possui estruturas anônimas e uniões anônimas, que permitem definir estruturas e uniões sem especificar um nome.

O que são Estruturas e Uniões Anônimas?

Uma união anônima ou estrutura anônima não possui um identificador. Por esse motivo, não é possível criar variáveis independentes desse tipo; em vez disso, elas são normalmente utilizadas dentro de outras estruturas.

// Anonymous union
union {
    char x;
    int y;
};

// Anonymous structure
struct {
    char x;
    int y;
};

Structs e uniões anônimas são especialmente úteis quando estão aninhadas e serão utilizadas apenas no contexto em que são declaradas.

Exemplo prático

Considere um cenário em que se deseja representar uma tabela ASCII onde o mesmo valor pode ser interpretado como um código numérico ou como um símbolo de caractere. Utilizar uma união anônima dentro de uma estrutura permite alternar entre essas duas interpretações de forma eficiente.

main.c

main.c

copy
123456789101112131415161718192021
#include <stdio.h> struct ASCIItable { // Anonymous union allows dual representation of the same memory union { char symbol; int num; }; }; int main() { struct ASCIItable AZtable; AZtable.num = 65; // ASCII code for 'A' // Print all uppercase letters and their numeric codes for (int i = 0; i < 26; i++) { printf("num = %d | symbol = `%c`\n", AZtable.num + i, AZtable.symbol + i); } return 0; }

Neste exemplo, a estrutura ASCIItable contém uma união anônima. A união permite que a mesma área de memória seja interpretada tanto como um valor numérico (num) quanto como um caractere (symbol).

Quando AZtable.num é definido como 65, ele corresponde ao código ASCII para 'A'. Utilizando a mesma memória, AZtable.symbol também representa 'A'. Ao iterar 26 vezes, é possível exibir todas as letras maiúsculas juntamente com seus códigos ASCII, demonstrando como a mesma memória pode representar múltiplas visões dos dados.

Tarefa

Swipe to start coding

Crie uma função findFurthestPoint que identifica o ponto mais distante da origem (0,0) em um plano 2D. Cada ponto é representado por uma estrutura Point contendo uma estrutura anônima aninhada com os campos x e y.

A função deve calcular a distância Euclidiana para cada ponto utilizando a fórmula:

distance = sqrt(x*x + y*y)

e retornar o índice do ponto com a maior distância.

  1. Dentro da função, calcule a distância do primeiro ponto em relação à origem utilizando a fórmula.
  2. Inicialize maxIndex com 0.
  3. Utilize um laço for de i = 1 até i = n para iterar sobre os pontos.
  4. Para cada ponto, calcule sua distância utilizando a fórmula acima.
  5. Se a distância for maior que maxDistance, atualize maxDistance e maxIndex para a distância e o índice do ponto atual.
  6. Após o laço, retorne maxIndex como o índice do ponto mais distante.

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 4. Capítulo 3
single

single

some-alt