Структуры в языке С
Структура – это множество поименованных элементов данных одного или различных типов, объединённых в единое целое.
В языке С++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры так, как они определены в языке С:
struct [имя_структурного_типа] {
тип_1 элемент_1;
тип_2 элемент_2;
…
тип_n элемент_n;
} [список_переменных];
Элементы структуры называются полями (членами) структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него.
Если отсутствует имя типа, должен быть указан список описателей переменных, указателей или массивов. В этом случае описание структуры служит определением элементов этого списка. Например,
// Определение массива структур и указателя
// на структуру
struct {
char fio[25];
int date, code;
double salary;
} stuff[50], *ps;
Если список отсутствует, описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами. Например:
// Описание нового типа Worker
struct Worker {
char fio[25];
int date, code;
double salary;
}; // Описание заканчивается точкой с запятой
// Определение массивов элементов типа Worker
// и указателей на тип Worker
struct Worker stuff1[100], *ps1; // Стиль С
Worker stuff2[100], *ps2; // Стиль С++
Для инициализации структуры значения её элементов перечисляют в фигурных скобках в порядке их описания:
Worker w1 = {"Ivanov", 31, 215, 3400.55};
Размер структуры не обязательно равен сумме размеров её элементов, поскольку они могут быть выравнены по границе машинных слов. Выравнивание устанавливается с помощью опций компилятора (например, в Visual Studio прагмой pack).
Для переменных одного и того же структурного типа определена операция присваивания, при этом происходит поэлементное копирование.
Доступ к полям структуры возможен с помощью уточнённого имени:
1) по имени переменной структурного типа
Имя_структуры.имя_элемента
2) по указателю на структуру
а) имя_указателя->имя_элемента
б) (*имя_указателя).имя_элемента
3) по ссылке на структуру