👷8. Составные типы данных. Назначение, занимаемая память, диапазон значений, допустимые операции
Составные типы данных - типы данных, которые состоят из простых, а именно: структура и объединение.
Структура
Это объединение элементов под одним названием. Занимает место равное сумме размеров всех входящих в нее элементов. Переменная структуры хранит в себе все значения для каждого из элементов.
Допустимые операции:
Операция членства <имя структуры>.<член структуры>
Операция косвенного членства <указатель на структуру> -> <член структуры>
Операция взятия адреса &
Операция sizeof
Операция присваивания =
Работа со структурами:
Объявление структуры (шаблона)
struct book {
char title [41];
char author [31];
float value;
};
Определение переменной типа структуры
struct book library;
//или
struct book {
char title [41];
char author [31];
float value;
} library; //объявление с именем переменной
Инициализация структуры
struct book library = {
"The Pinokio",
"Some Author",
1.95
};
//или отдельно
struct book surprise = {.value = 10.99};
Объявление массива структур
struct book library[10];
Здесь library объявляется как массив, содержащий 10 элементов. Каждый элемент этого массива является структурой типа book. Таким образом, library[0] - одна структур типа book, library[1] - вторая структура типа book и т.д.
Указатель на структуру
struct book * shell;
- объявление указателя на структуру
shell = &library;
- определение указателя
library.title == (*shell).title == shell->title
struct book * shell;
- объявление указателя на структуруshell = &library;
- определение указателяlibrary.title == (*shell).title == shell->title
Выравнивание полей структур
Нужно для оптимизации доступа к памяти. Заполнять структуру нужно всегда от больших данных к меньшим, так как объем занимаемой памяти всегда кратен большему.Без выравнивания останутся пустые ячейки:
Объединение
Это тип, позволяющий хранить данные разных типов в одном и том же месте памяти (но не одновременно). Объединение занимает память, равную наибольшему из ее элементов. Переменная объединения может хранить в себе значение только одного из элементов, поэтому изменяя значение одного из элементов, предыдущее значение удаляется.
Допустимы те же операции, что и со структурами

Last updated