}, pt1;=pt;
В результаті виконання цього присвоєння в pt1.x буде записано значення 105, а в pt1.y - число 15.
Об'єкти структур можна привласнювати, передавати в якості аргументів і повертати в якості значень функцій. Інші оператори (такі як == і!=Не визначені).
Існує три способи передачі структур функціям:
передача компонентів структури по частинах;
передача цілком структури;
передача покажчика на структуру.
voidshowrect (struct point p1, struct point p2)
{( Лівий верхній кут прямокутника:% d% d n ,. x, p1.y); ("Правий нижній кут прямокутника:
% d% d n" , p2.x, p2.y);
}
При виклику такої функції їй треба передати дві структури:
struct point pt1={5,5},={50,50}; (pt1, pt2);
Функція, що повертає структуру:
(intx, inty)/* makepoint - формує точку по компонентах x і y */
{point temp; .x=x; .y=y; temp;
}
Результат роботи цієї функції може бути збережений в спеціальній змінній і виведений на екран:
struct point buf;=makepoint (10,40); (% d% d n , buf.x, buf.y);
Після виконання цього фрагмента на екран будуть виведені два числа: 10 і 40.
Структури можна порівнювати. Порівнювати можна тільки значення конкретних полів.
Об'єкти структур можуть бути елементами масивів.
. 4 Покажчики на структуру
Якщо функції передається велика структура, то ефективніше передати покажчик на цю структуру, ніж копіювати її в стек цілком. Покажчик на структуру по виду нічим не відрізняється від покажчиків на звичайні змінні.
Формат: structpoint * pp;
Де pp - покажчик на структуру типу structpoint, * pp - сама структура, (* pp) .x і (* pp) .y - члени структури.
Дужки (* pp) .x необхідні, оскільки пріоритет операції (.) вище пріоритету операції (*). У разі відсутності дужок * pp.x розуміється як * (pp.x).
Ініціалізація покажчика на структуру виконується так само, як і ініціалізація покажчиків інших типів: structpointvar1, * S1;
здесьvar1 - структурна змінна, * S1 - покажчик на структуру.
Для визначення значення покажчика йому потрібно привласнити адреса вже сформованої структури: S1= amp; var1;
Тепер можливо ще одне звернення до елементів структури: (* S1) .name.
Покажчики на структури використовуються вельми часто, тому для доступу до її полях була введена коротка форма запису. Якщо р - покажчик на структуру, то p? lt; поле структури gt; зволяет звернутися до зазначеного полю структурної змінної.
Знак? (стрілка) вводиться з клавіатури за допомогою двох символів: - (мінус) і gt; (більше). Наприклад, pp? x; pp? y.
Оператори доступу до полів структури (.) і (?) разом з операторами виклику функції () та індексами масиву [] займають найвище положення в ієрархії пріоритетів операцій в мові C.
Покажчики на структуру використовуються в наступних випадках:
доступ до структур, розміщеним в динамічної пам'яті;
створення складних структур даних - списків, дерев;
передача структур в якості параметрів у функції
. 5 Вкладені структури
Полем структурної змінної може бути змінна будь-якого типу, в тому числі інша структурна змінна. Поле, що представляє собою структуру, називається укладеною структурою.
Тип вкладеної структури має бути оголошений раніше. Крім того, структура не може бути вкладена в структуру того ж типу.
Оголошення вкладеної структури:
{, y;
};
{point LUPoint, RDPoint;
charBorderColor [20];
} ;;
У змінній Rectдва поля LUPoint (точка, відповідна лівого верхнього кута прямокутника) і RDPoint (точка, відповідна правого нижнього кута) являють собою вкладені структури. Для доступу до полю вкладеної структури слід спочатку звернеться до зовнішньої структурі, потім до вкладеної: Rect.LUPoint.x.
Приклад створення і використання вкладеної структури:
={10,5,50,25, White }; ( Пара...