урок 15
Особливості мови С. Навчальний посібник
Найчастіше змінні структур оголошуються так:
Тут оголошуються три структури типу circle і одна структура типу book. Можна оголошувати типи структур і їх змінні по-іншому, але ми для уникнення плутанини розглядати інші способи не будемо.
Кожна змінна типу circle містить чотири елементи (або поля) - x, y, dia, color. Можна сказати, що вони являють собою вкладені змінні. Причому ці змінні різних типів. Таким чином змінна-структура дозволяє об'єднати під одним ім'ям ряд різнорідних даних. Зазвичай це потрібно для зручності обробки даних. Якщо не можна було б створювати структури, то довелося б створювати безліч незалежних змінних або ряд масивів, явною взаємозв'язку між якими не було б. Структуру ж дозволяють об'єднувати взаємопов'язані дані. Це звичайно ще не об'єктно-орієнтоване програмування, але вже погляд у його бік.
Оголосивши змінну структурного типу, ми можемо отримати доступ до кожного її елементу для присвоювання, зміни або отримання значення:
Значення змінної-структури можна привласнити змінної того ж типу:
У четвертому рядку коду дані змінної old присвоюються new. У підсумку друга структура містить копію даних першої. Те, що можна виконувати присвоювання по окремих полях повинно бути зрозуміло.
Структури і функції
Структури-змінні можна передавати у функції в якості параметрів і повертати їх звідти. Структури передаються за значенням, як звичайні змінні, а не за посиланням, як масиви.
Розглянемо програму, в якій одна функція повертає структуру, а інша - приймає її як параметр:
Примітка. При компіляції програми в GNU / Linux команда виглядає так: gcc program. c - lm. Це пов'язано з використанням бібліотеки з математичними функціями.
- Оголошується структура circle як глобальний тип даних. Таким чином будь-яка, а не тільки main (). функція може створювати змінні цього типу.
- Функція new_circle () повертає структуру, а функція cross () приймає структуру за значенням. Слід зазначити, що можна створювати функції, які як приймають (можливо, кілька структур) так і повертають структуру.
- У функції new_circle () створюється змінна new типу struct circle. поля якої заповнюються користувачем. Функція повертає значення змінної new в функцію main (). де це значення присвоюється змінної a. яка також належить типу sctruct circle.
- Функція cross () визначає, перетинає чи коло початок координат. В її тілі обчислюється відстань від центру кола до початку координат. Це відстань є гіпотенузою прямокутного трикутника, довжина катетів якого дорівнює значенням x і у. Далі, якщо гіпотенуза менше радіуса, то коло перетинає початок координат, тобто точку (0, 0).
- У функції main () при виклику cross () дані, що містяться в змінної a. копіюються і присвоюються змінної c.
Покажчики і структури
У мові програмування C записи типу (* pnew). title часто замінюють на такі: pnew -> title. що дозволяє синтаксис мови. Коли в програмі ви бачите стрілку (тире і дужки) завжди пам'ятайте, то, що написано до стрілки, - це покажчик на структуру, а не змінна-структура.
Приклад коду з використанням покажчиків:
масиви структур
Зазвичай створення в програмі однієї змінної структурного типу не має особливого сенсу. Найчастіше структурами користуються, коли необхідно описати безліч схожих об'єктів, що мають різні значення ознак. Значення кожного об'єкта слід об'єднати разом (в структуру) і тим самим відокремити від значень інших об'єктів. Наприклад, опис ряду книг або безлічі людей. Таким чином ми можемо організувати масив, де кожен елемент являє собою окрему структуру, а всі елементи належать одному і тому ж структурному типу.
Програма надаватиме можливість отримувати інформацію про всіх моделях і змінювати кількість комп'ютерів зазначеної користувачем моделі. У програмі будуть визначені дві функції (крім main ()): для виведення всієї інформації і для зміни кількості комп'ютерів.
Приклад результату роботи програми:
