Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Structs Anidadas | Uso Avanzado de Structs
Dominio de las Estructuras en C

bookStructs Anidadas

En C, las estructuras pueden contener otras estructuras como miembros, además de tipos básicos como int o char, arreglos y punteros. Las estructuras anidadas son útiles cuando se desea agrupar datos relacionados de manera lógica.

Estructura Anidada Embebida

Una estructura anidada embebida se declara directamente dentro de la estructura externa. Esto significa que la estructura anidada existe solo dentro de la estructura externa y no puede ser utilizada en otro lugar.

main.c

main.c

copy
123456789101112131415161718192021
#include <stdio.h> struct Person { char name[50]; int age; struct Address { char street[50]; char city[50]; char index[10]; } address; // embedded nested structure }; int main() { struct Person person = { "Sherlock Holmes", 27, {"Baker Street", "London", "221B"} }; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }

En este ejemplo, la estructura Address se define dentro de Person, por lo que existe únicamente en el contexto de la estructura Person. Puedes acceder a los campos de la estructura anidada utilizando person.address, lo que te permite obtener street, city e index. Este enfoque es conveniente cuando los datos anidados son específicos de una sola estructura externa y no necesitan reutilizarse en otros lugares.

Estructura Anidada Separada

Una estructura anidada separada se declara de forma independiente y luego se incluye en la estructura externa. Esto permite que la estructura anidada se reutilice en múltiples estructuras externas o se instancie por separado.

main.c

main.c

copy
123456789101112131415161718192021222324
#include <stdio.h> struct Address { char street[50]; char city[50]; char index[10]; }; struct Person { char name[50]; int age; struct Address address; // nested structure }; int main() { struct Address addr = {"Baker Street", "London", "221B"}; struct Person person = {"Sherlock Holmes", 27, addr}; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }

Aquí, Address se declara de forma independiente de Person, por lo que puede utilizarse por sí solo o dentro de múltiples estructuras. Al inicializar un Person, asignamos una instancia de Address al campo address. El acceso a los campos anidados funciona de la misma manera utilizando person.address. Este enfoque es más flexible y fomenta la reutilización del código y un diseño modular.

Tarea

Swipe to start coding

Cada producto está representado por una estructura Product que contiene una estructura anidada Manufacturer. La función debe iterar sobre un arreglo de productos, verificar si el producto pertenece al fabricante especificado y sumar el valor total (price * quantity) de todos los productos que coincidan.

Implementar una función calculateManufacturerTotal con tipo de retorno float.

  1. Dentro de la función, crear una variable float llamada total inicializada en 0.0f.
  2. Utilizar un ciclo for para iterar sobre el arreglo de productos desde 0 hasta n.
  3. Para cada producto, comparar el campo manufacturer.companyName del producto con el parámetro companyName usando strcmp.
  4. Si coincide, agregar price * quantity a total.
  5. Retornar el valor final de total.

Solución

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1
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 an example of how to declare an embedded nested structure in C?

What are the advantages and disadvantages of using embedded versus separate nested structures?

How do I access the fields of a nested structure in C?

close

bookStructs Anidadas

Desliza para mostrar el menú

En C, las estructuras pueden contener otras estructuras como miembros, además de tipos básicos como int o char, arreglos y punteros. Las estructuras anidadas son útiles cuando se desea agrupar datos relacionados de manera lógica.

Estructura Anidada Embebida

Una estructura anidada embebida se declara directamente dentro de la estructura externa. Esto significa que la estructura anidada existe solo dentro de la estructura externa y no puede ser utilizada en otro lugar.

main.c

main.c

copy
123456789101112131415161718192021
#include <stdio.h> struct Person { char name[50]; int age; struct Address { char street[50]; char city[50]; char index[10]; } address; // embedded nested structure }; int main() { struct Person person = { "Sherlock Holmes", 27, {"Baker Street", "London", "221B"} }; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }

En este ejemplo, la estructura Address se define dentro de Person, por lo que existe únicamente en el contexto de la estructura Person. Puedes acceder a los campos de la estructura anidada utilizando person.address, lo que te permite obtener street, city e index. Este enfoque es conveniente cuando los datos anidados son específicos de una sola estructura externa y no necesitan reutilizarse en otros lugares.

Estructura Anidada Separada

Una estructura anidada separada se declara de forma independiente y luego se incluye en la estructura externa. Esto permite que la estructura anidada se reutilice en múltiples estructuras externas o se instancie por separado.

main.c

main.c

copy
123456789101112131415161718192021222324
#include <stdio.h> struct Address { char street[50]; char city[50]; char index[10]; }; struct Person { char name[50]; int age; struct Address address; // nested structure }; int main() { struct Address addr = {"Baker Street", "London", "221B"}; struct Person person = {"Sherlock Holmes", 27, addr}; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }

Aquí, Address se declara de forma independiente de Person, por lo que puede utilizarse por sí solo o dentro de múltiples estructuras. Al inicializar un Person, asignamos una instancia de Address al campo address. El acceso a los campos anidados funciona de la misma manera utilizando person.address. Este enfoque es más flexible y fomenta la reutilización del código y un diseño modular.

Tarea

Swipe to start coding

Cada producto está representado por una estructura Product que contiene una estructura anidada Manufacturer. La función debe iterar sobre un arreglo de productos, verificar si el producto pertenece al fabricante especificado y sumar el valor total (price * quantity) de todos los productos que coincidan.

Implementar una función calculateManufacturerTotal con tipo de retorno float.

  1. Dentro de la función, crear una variable float llamada total inicializada en 0.0f.
  2. Utilizar un ciclo for para iterar sobre el arreglo de productos desde 0 hasta n.
  3. Para cada producto, comparar el campo manufacturer.companyName del producto con el parámetro companyName usando strcmp.
  4. Si coincide, agregar price * quantity a total.
  5. Retornar el valor final de total.

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 1
single

single

some-alt