C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

C struct. Структури як елементи структур


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

Визначимо наступну програму:

#include <stdio.h>
 
struct company
{
    char name[20];
    char country[30];
};
struct smartphone
{
    char title[20];
    int price;
    struct company manufacturer;
};
 
int main(void)
{
    struct smartphone phone = {"iPhone 8", 56000, "Apple", "USA"};
     
    printf("\n Phone: %s", phone.title);
    printf("\n Price: %d", phone.price);
    printf("\n Manufacturer: %s", phone.manufacturer.name);
    return 0;
}

Використані тут структури відображають об'єкти реального світу. Структура company представляє деяку компанію, її елементи name і country являють назву і країну компанії відповідно. А структура smartphone представляє смартфон, в якому визначено три елементи: title - назва, price - ціна і manufacturer - компанія-виробник. Останній елемент у свою чергу представляє структуру company.

Таким чином, виходить, що структура phone має три елементи, але так як останній елемент складовою і сам містить два елементи, то при ініціалізації структури smartphone нам треба їй передати 4 значення:

struct smartphone phone = {"iPhone 8", 56000, "Apple", "USA"};

Що можна формалізувати наступним чином:

struct smartphone phone = {title, price, manufacturer.name, manufacturer.country};

Знову ж передача значень йде в тому порядку, в якому елементи визначені в структурі, в тому числі у вкладених структурах.

І щоб звернутися до полів вкладеної структури, треба спочатку звернутися до самої цій структурі:

phone.manufacturer.name

І подібне звернення буде застосовуватися при всіх операціях з елементами вкладеної структури company. Наприклад, розглянемо введення даних з консолі:

#include <stdio.h>
 
struct company
{
    char name[20];
    char country[30];
};
struct smartphone
{
    char title[20];
    int price;
    struct company manufacturer;
};
 
int main(void)
{
    struct smartphone phone;// = {"iPhone 8", 56000, "Apple", "USA"};
    printf("Enter phone title: ");
    scanf("%20s", &phone.title);
    printf("Enter price: ");
    scanf("%d", &phone.price);
    printf("Enter manufacturer: ");
    scanf("%s", &phone.manufacturer.name);
    printf("Enter country: ");
    scanf("%s", &phone.manufacturer.country);
     
    printf("\nPhone: %s \n", phone.title);
    printf("Price: %d \n", phone.price);
    printf("Manufacturer: %s \n", phone.manufacturer.name);
    return 0;
}

Для введення значення, наприклад, імені компанії-виробника смартфона, використовується отримання адреси відповідного елемента &phone.manufacturer.name .

Результат роботи програми:

Введіть назву телефону: iPhone
Введіть ціну: 56000
Введіть виробник: Apple,
Введіть Країна: США

Телефон: iPhone
Ціна: 56000
Виробник: Apple

Наш партнер:
beta test mp3 playlist downloader