Вкладені Структури
У C структурах можна використовувати інші структури як члени, окрім базових типів, таких як int або char, масивів і вказівників. Вкладені структури корисні для логічного групування пов’язаних даних.
Вбудована вкладена структура
Вбудована вкладена структура оголошується безпосередньо всередині зовнішньої структури. Це означає, що вкладена структура існує лише у межах зовнішньої структури й не може бути використана в інших місцях.
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; }
У цьому прикладі структура Address визначена всередині Person, тому вона існує лише в контексті структури Person. Доступ до полів вкладеної структури здійснюється через person.address, що дозволяє отримати street, city та index. Такий підхід зручний, коли вкладені дані є специфічними для однієї зовнішньої структури і не потребують повторного використання в інших місцях.
Окрема вкладена структура
Окрема вкладена структура оголошується незалежно, а потім включається до зовнішньої структури. Це дозволяє повторно використовувати вкладену структуру в декількох зовнішніх структурах або створювати її окремі екземпляри.
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; }
Тут Address оголошується незалежно від Person, тому його можна використовувати окремо або всередині кількох структур. Під час ініціалізації Person ми присвоюємо екземпляр Address полю address. Доступ до вкладених полів здійснюється так само через person.address. Такий підхід є більш гнучким і сприяє повторному використанню коду та модульному проєктуванню.
Swipe to start coding
Кожен продукт представлений структурою Product, яка містить вкладену структуру Manufacturer. Функція повинна проходити по масиву продуктів, перевіряти, чи належить продукт вказаному виробнику, і підсумовувати загальну вартість (price * quantity) усіх відповідних продуктів.
Реалізуйте функцію calculateManufacturerTotal з типом повернення float.
- Усередині функції створіть змінну типу
floatз іменемtotal, ініціалізовану значенням0.0f. - Використайте цикл
forдля проходження по масиву продуктів від0доn. - Для кожного продукту порівнюйте поле
manufacturer.companyNameпродукту з параметромcompanyNameза допомогоюstrcmp. - Якщо значення співпадають, додайте
price * quantityдоtotal. - Поверніть фінальне значення змінної
total.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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?
Чудово!
Completion показник покращився до 4.35
Вкладені Структури
Свайпніть щоб показати меню
У C структурах можна використовувати інші структури як члени, окрім базових типів, таких як int або char, масивів і вказівників. Вкладені структури корисні для логічного групування пов’язаних даних.
Вбудована вкладена структура
Вбудована вкладена структура оголошується безпосередньо всередині зовнішньої структури. Це означає, що вкладена структура існує лише у межах зовнішньої структури й не може бути використана в інших місцях.
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; }
У цьому прикладі структура Address визначена всередині Person, тому вона існує лише в контексті структури Person. Доступ до полів вкладеної структури здійснюється через person.address, що дозволяє отримати street, city та index. Такий підхід зручний, коли вкладені дані є специфічними для однієї зовнішньої структури і не потребують повторного використання в інших місцях.
Окрема вкладена структура
Окрема вкладена структура оголошується незалежно, а потім включається до зовнішньої структури. Це дозволяє повторно використовувати вкладену структуру в декількох зовнішніх структурах або створювати її окремі екземпляри.
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; }
Тут Address оголошується незалежно від Person, тому його можна використовувати окремо або всередині кількох структур. Під час ініціалізації Person ми присвоюємо екземпляр Address полю address. Доступ до вкладених полів здійснюється так само через person.address. Такий підхід є більш гнучким і сприяє повторному використанню коду та модульному проєктуванню.
Swipe to start coding
Кожен продукт представлений структурою Product, яка містить вкладену структуру Manufacturer. Функція повинна проходити по масиву продуктів, перевіряти, чи належить продукт вказаному виробнику, і підсумовувати загальну вартість (price * quantity) усіх відповідних продуктів.
Реалізуйте функцію calculateManufacturerTotal з типом повернення float.
- Усередині функції створіть змінну типу
floatз іменемtotal, ініціалізовану значенням0.0f. - Використайте цикл
forдля проходження по масиву продуктів від0доn. - Для кожного продукту порівнюйте поле
manufacturer.companyNameпродукту з параметромcompanyNameза допомогоюstrcmp. - Якщо значення співпадають, додайте
price * quantityдоtotal. - Поверніть фінальне значення змінної
total.
Рішення
Дякуємо за ваш відгук!
single