Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Struct y Union Anónimos | Uso Avanzado de Structs
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Dominio de las Estructuras en C

bookStruct y Union Anónimos

El lenguaje de programación C tiene estructuras anónimas y uniones anónimas, que permiten definir estructuras y uniones sin especificar un nombre.

¿Qué son las estructuras y uniones anónimas?

Una unión anónima o estructura anónima no tiene un identificador. Por esta razón, no se pueden crear variables independientes de ese tipo; en su lugar, normalmente se utilizan dentro de otras estructuras.

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

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

Las estructuras y uniones anónimas son especialmente útiles cuando están anidadas y solo se utilizarán en el contexto donde se declaran.

Ejemplo práctico

Considere un escenario en el que desea representar una tabla ASCII donde el mismo valor puede interpretarse como un código numérico o como un símbolo de carácter. Utilizar una unión anónima dentro de una estructura permite alternar entre estas dos interpretaciones de manera 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; }

En este ejemplo, la estructura ASCIItable contiene una unión anónima. La unión permite que la misma memoria se interprete tanto como un valor numérico (num) como un carácter (symbol).

Cuando se asigna 65 a AZtable.num, corresponde al código ASCII de 'A'. Utilizando la misma memoria, AZtable.symbol también representa 'A'. Al iterar 26 veces, es posible imprimir todas las letras mayúsculas junto con sus códigos ASCII, demostrando cómo la misma memoria puede representar múltiples vistas de los datos.

Tarea

Swipe to start coding

Crear una función findFurthestPoint que determine el punto más alejado del origen (0,0) en un plano 2D. Cada punto está representado por una estructura Point que contiene una estructura anónima anidada con los campos x y y.

La función debe calcular la distancia euclidiana para cada punto utilizando la fórmula:

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

y devolver el índice del punto con la distancia máxima.

  1. Dentro de la función, calcular la distancia del primer punto al origen usando la fórmula.
  2. Inicializar maxIndex en 0.
  3. Utilizar un bucle for desde i = 1 hasta i = n para iterar sobre los puntos.
  4. Para cada punto, calcular su distancia usando la fórmula anterior.
  5. Si la distancia es mayor que maxDistance, actualizar maxDistance y maxIndex con la distancia y el índice actuales.
  6. Al finalizar el bucle, devolver maxIndex como el índice del punto más alejado.

Solución

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 3
single

single

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you show me the code for the ASCIItable example?

How do I access the members of an anonymous union or struct in C?

What are some other practical uses for anonymous structs and unions?

close

bookStruct y Union Anónimos

Desliza para mostrar el menú

El lenguaje de programación C tiene estructuras anónimas y uniones anónimas, que permiten definir estructuras y uniones sin especificar un nombre.

¿Qué son las estructuras y uniones anónimas?

Una unión anónima o estructura anónima no tiene un identificador. Por esta razón, no se pueden crear variables independientes de ese tipo; en su lugar, normalmente se utilizan dentro de otras estructuras.

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

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

Las estructuras y uniones anónimas son especialmente útiles cuando están anidadas y solo se utilizarán en el contexto donde se declaran.

Ejemplo práctico

Considere un escenario en el que desea representar una tabla ASCII donde el mismo valor puede interpretarse como un código numérico o como un símbolo de carácter. Utilizar una unión anónima dentro de una estructura permite alternar entre estas dos interpretaciones de manera 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; }

En este ejemplo, la estructura ASCIItable contiene una unión anónima. La unión permite que la misma memoria se interprete tanto como un valor numérico (num) como un carácter (symbol).

Cuando se asigna 65 a AZtable.num, corresponde al código ASCII de 'A'. Utilizando la misma memoria, AZtable.symbol también representa 'A'. Al iterar 26 veces, es posible imprimir todas las letras mayúsculas junto con sus códigos ASCII, demostrando cómo la misma memoria puede representar múltiples vistas de los datos.

Tarea

Swipe to start coding

Crear una función findFurthestPoint que determine el punto más alejado del origen (0,0) en un plano 2D. Cada punto está representado por una estructura Point que contiene una estructura anónima anidada con los campos x y y.

La función debe calcular la distancia euclidiana para cada punto utilizando la fórmula:

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

y devolver el índice del punto con la distancia máxima.

  1. Dentro de la función, calcular la distancia del primer punto al origen usando la fórmula.
  2. Inicializar maxIndex en 0.
  3. Utilizar un bucle for desde i = 1 hasta i = n para iterar sobre los puntos.
  4. Para cada punto, calcular su distancia usando la fórmula anterior.
  5. Si la distancia es mayor que maxDistance, actualizar maxDistance y maxIndex con la distancia y el índice actuales.
  6. Al finalizar el bucle, devolver maxIndex como el índice del punto más alejado.

Solución

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 3
single

single

some-alt