Structs 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
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
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.
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.
- Dentro de la función, crear una variable
floatllamadatotalinicializada en0.0f. - Utilizar un ciclo
forpara iterar sobre el arreglo de productos desde0hastan. - Para cada producto, comparar el campo
manufacturer.companyNamedel producto con el parámetrocompanyNameusandostrcmp. - Si coincide, agregar
price * quantityatotal. - Retornar el valor final de
total.
Solución
¡Gracias por tus comentarios!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
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?
Genial!
Completion tasa mejorada a 4.35
Structs 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
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
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.
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.
- Dentro de la función, crear una variable
floatllamadatotalinicializada en0.0f. - Utilizar un ciclo
forpara iterar sobre el arreglo de productos desde0hastan. - Para cada producto, comparar el campo
manufacturer.companyNamedel producto con el parámetrocompanyNameusandostrcmp. - Si coincide, agregar
price * quantityatotal. - Retornar el valor final de
total.
Solución
¡Gracias por tus comentarios!
single