Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Вкладені Структури | Розширене Використання Структур
Структури в C
Секція 4. Розділ 1
single

single

Вкладені Структури

Свайпніть щоб показати меню

У C структури можуть містити інші структури як члени, окрім базових типів, таких як int або char, масивів і вказівників. Вкладені структури корисні для логічного групування пов’язаних даних.

Вбудована вкладена структура

Вбудована вкладена структура оголошується безпосередньо всередині зовнішньої структури. Це означає, що вкладена структура існує лише у межах зовнішньої структури й не може використовуватися в інших місцях.

main.c

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

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. Такий підхід є більш гнучким і сприяє повторному використанню коду та модульному проєктуванню.

Завдання

Проведіть, щоб почати кодувати

Кожен продукт представлений структурою Product, яка містить вкладену структуру Manufacturer. Функція повинна проходити по масиву продуктів, перевіряти, чи належить продукт вказаному виробнику, і підсумовувати загальну вартість (price * quantity) усіх відповідних продуктів.

Реалізуйте функцію calculateManufacturerTotal з типом повернення float.

  1. Усередині функції створіть змінну типу float з іменем total, ініціалізовану значенням 0.0f.
  2. Використайте цикл for для проходження по масиву продуктів від 0 до n.
  3. Для кожного продукту порівнюйте manufacturer.companyName продукту з параметром companyName за допомогою strcmp.
  4. Якщо співпадає, додайте price * quantity до total.
  5. Поверніть кінцеве значення total.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 1
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt