Створімо тепер декілька структур, придатних для графіки. Основним об'єктом є пункт, який має координати x і y, обидві цілі числа.
y
^
|
| . (4,3)
|
|
|
------+---------------> x
(0,0) |
|
Ці дві складові можна помістити в структуру, оголошену як:
struct point {
int x;
int y;
};
Ключове слово struct оголошує структуру, яка в свою чергу являється списком оголошень, включених у фігурні дужки. За словом struct може слідувати необов'язкова назва, яку називають «етикеткою структури» (як point у цьому прикладі). Етикетка присвоює назву структурі, і може використовуватись пізніше як скорочення для частин, оголошенних у фігурних дужках.
Змінні, вказані всередині, називаються елементами структури. Елемент структури, етикетка та звичайна, не включена в структуру, змінна можуть мати ту саму назву, не створюючи конфлікту, оскільки вони завжди розділені контекстом. Більше того, ті самі назви елементів можуть повторюватись у різних структурах, хоча, з міркувань стилю, таке використання назв можна застосувати хіба що для тісно взаємопов'язаних об'єктів.
Саме оголошення struct визначає новий тип. За правою закриваючою дужкою може слідувати список змінних, так само як і у випадку інших основних типів. Тобто, вираз
struct { ... } x, y, z;
синтаксично аналогічний
int x, y, z;
у тому сенсі, що обидва вирази оголошують змінні x, y і z як певного типу і зумовлюють відведення для них місця.
Оголошення структури, за яким не слідує список змінних, не зарезервує місця для зберігання; воно тільки описує зразок або форму структури. Однак, якщо оголошення включає етикетку, цю етикетку можна використати пізніше для означення окремих взірців структури. Так, наприклад, використовуючи вищенаведене оголошення point,
struct point pt;
визначить змінну pt, що являтиметься структурою типу struct point. Структуру (змінну типуstruct) можна започаткувати, якщо додати до її означення список ініціалізаторів, кожен з яких — це сталий вираз для окремих елементів структури:
struct point maxpt = { 320, 200 };
Автоматичну структуру також можна ініціювати через присвоєння або шляхом виклику функції, що повертає структуру правильного типу.
Елемент певної структури можна вказати у якомусь виразі конструкцією, що має форму
назва-структури.елемент
Оператор елемента структури «.» (крапка) зв'язує назву структури з одним з її елементів. Щоб вивести координати пункту pt, наприклад, нам потрібно вказати
printf("%d,%d", pt.x, pt.y);
або, щоб обчислити відстань від початку координат (0,0) до pt,
double dist, sqrt(double);
dist = sqrt((double)pt.x * pt.x + (double)pt.y * pt.y);
Структури можуть гніздитися. Одним з представлень прямокутника може бути два пункти, що знаходяться у протилежних кутах:
y
^
|
| +----------+ pt2
| | |
| | |
| +----------+
| pt1
|
----+------------------> x
|
|
struct rect {
struct point pt1;
struct point pt2;
};
Структура rect включає дві структури point. Якщо ми оголосимо screen як
struct rect screen;
тоді
screen.pt1.x
посилається на координату x елемента pt1 структури screen.