Несколько переменных, описывающих разные свойства одного объекта предметной области можно объединить в структуру.
Каждый элемент структуры имеет уникальное имя. В отличие от массива элементы структуры могут иметь разные типы.
В языке C структуру сначала нужно определить как тип и только после этого определять наборы такого типа:
В C++ определение структуры\
`tt"struct" quad "имя" { "тип"_1 quad "элемент"_1; quad "тип"_2 quad "элемент"_2; quad ...};`\
определяет тип с тем же именем. В C без ``typedef`` вместо простого имени придется указывать ``struct `` `"имя"`.
``typedef`` часто используется для сокращения имени из нескольких слов:
```c
typedef unsigned long long ull;
typedef unsigned char byte;
ull a; // unsigned long long a;
byte b; // unsigned char b;
```
Для доступа к элементам структуры (*полям*) используется операция ``.``: `"имя_структуры" tt"." "имя_поля"`
Список начальных значений для набора-структуры указывается в ``{}`` через запятую. Можно явно указать, какому полю присваивается значение: ` tt"." "имя_поля" ="выражение"`. Если значение какого-либо поля явно не указано, то оно получает значение 0.
Примеры структур:
```c
typedef struct coord { double x, y, z; } coord; // координаты в пространстве
typedef struct date { // дата
char day; // день 1-31
char month; // месяц 1-12
int year; // год
} date;
typedef struct person { // информация о человеке
char name[51]; // имя
date birthday; // дата рождения
char addr[101]; // адрес
char job[16]; // должность
int salary; // зарплата
} person;
```
Примеры определения и инициализации наборов-структур:
```c
coord p1={1, 7, 2.5};
date d1;
person joe={"Joseph",{20,11,1942},"Washigton, DC","President",100000};
person team[5]= // массив лиц
{ {"Kamala", .job="Vice-president",.salary=150000},
{"Antony", .job="Secretary"}
};
```