Struct 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
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.
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.
- Dentro da função, calcule a distância do primeiro ponto em relação à origem utilizando a fórmula.
- Inicialize
maxIndexcom0. - Utilize um laço
fordei = 1atéi = npara iterar sobre os pontos. - Para cada ponto, calcule sua distância utilizando a fórmula acima.
- Se a distância for maior que
maxDistance, atualizemaxDistanceemaxIndexpara a distância e o índice do ponto atual. - Após o laço, retorne
maxIndexcomo o índice do ponto mais distante.
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
Incrível!
Completion taxa melhorada para 4.35
Struct 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
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.
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.
- Dentro da função, calcule a distância do primeiro ponto em relação à origem utilizando a fórmula.
- Inicialize
maxIndexcom0. - Utilize um laço
fordei = 1atéi = npara iterar sobre os pontos. - Para cada ponto, calcule sua distância utilizando a fórmula acima.
- Se a distância for maior que
maxDistance, atualizemaxDistanceemaxIndexpara a distância e o índice do ponto atual. - Após o laço, retorne
maxIndexcomo o índice do ponto mais distante.
Solução
Obrigado pelo seu feedback!
single