Структуры данных

Содержание

Слайд 2

Что такое структура? В языке Си, структура (struct) — композитный тип

Что такое структура?

В языке Си, структура (struct) — композитный тип данных,

инкапсулирующий без сокрытия набор значений различных типов. Порядок размещения значений в памяти задаётся при определении типа и сохраняется на протяжении времени жизни объектов, что даёт возможность косвенного доступа (например, через указатели)
Слайд 3

Структура Имеет фиксированный размер Тот же набор байт только больше Создание

Структура

Имеет фиксированный размер
Тот же набор байт только больше
Создание на стеке
Создание в

сегменте данных
Создание массивов
Создание указателя на структуру
Динамический массив
Слайд 4

Пример использования

Пример использования

Слайд 5

Либо

Либо

Слайд 6

Структура в памяти Int a; float b; double c; Int float

Структура в памяти

Int a;
float b;
double c;

Int

float

double

Сплошная область памяти в 18 байт

Слайд 7

Размещение структуры Локально Глобально

Размещение структуры

Локально

Глобально

Слайд 8

Первичная инициализация. Создание экземпляра структуры придерживается тем же правила что и

Первичная инициализация.

Создание экземпляра структуры придерживается тем же правила что и создание

переменных:
Глобальные объявления зануляются(т.к. выделены в сегменте данных), а значит все переменные внутри так же равняются нулю
При локальном объявлении(в теле функции) память резервируется в стеке а значит поля структуры будут инициализированы мусором.
Слайд 9

Первичная инициализация При такой инициализации, явно не инициализированные поля будут приравнены к нулю

Первичная инициализация

При такой инициализации, явно не инициализированные поля
будут приравнены к

нулю
Слайд 10

Практика Напишем функцию которая распечатает данные структуры Person состоящую из полей: firstName, lastName, age, sex

Практика

Напишем функцию которая распечатает данные структуры Person состоящую из полей: firstName,

lastName, age, sex
Слайд 11

#define Директива #define определяет идентификатор и последовательность символов, которой будет замещаться

#define

Директива #define определяет идентификатор и последовательность символов, которой будет замещаться данный

идентификатор при его обнаружении в тексте программы. Стандартный вид директивы следующий:
#define имя_макроса последовательность_символов
Слайд 12

#define

#define

Слайд 13

typedef Объявление typedef, которое содержит имя, которое внутри своей области является

typedef

Объявление typedef, которое содержит имя, которое внутри своей области является синонимом

для типа, указанного частью объявления type-declaration.
Слайд 14

typedef

typedef

Слайд 15

Динамическое выделение памяти под структуры

Динамическое выделение памяти под структуры

Слайд 16

Не все так очевидно Сколько весит структура? 8 байт 8 байт 8 байт

Не все так очевидно

Сколько весит структура?

8 байт

8 байт

8 байт

Слайд 17

Выравнивание данных Смещение данных в структуре до адреса кратного их размеру.

Выравнивание данных

Смещение данных в структуре до адреса кратного их размеру.

Слайд 18

Скучный Интересный факт На процессорах x86 и ARM примитивные типы не

Скучный Интересный факт

На процессорах x86 и ARM примитивные типы не могут

находиться в произвольной ячейке памяти. Каждый тип, кроме char, требует выравнивания. char может начинаться с любого адреса, однако двухбайтовый short должен начинаться только с четного адреса, четырехбайтный int или float — с адреса, кратного 4, восьмибайтные long или double — с адреса, кратного 8. Наличие или отсутствие знака значения не имеет. Указатели — 32-битные (4 байта) или 64-битные (8 байт) — также выравниваются.
Слайд 19

Пример

Пример

Слайд 20

Можно но не нужно Можно убрать выравнивание с помощью выражения #pragma pack(1)

Можно но не нужно

Можно убрать выравнивание с помощью выражения
#pragma pack(1)

Слайд 21

Оптимизация Данные отсортированы по объему, от большего к меньшему

Оптимизация

Данные отсортированы по объему, от большего к меньшему

Слайд 22

Списки Структуры не могу содержать в себе другие структуру того же

Списки

Структуры не могу содержать в себе другие структуру того же типа,

но могут содержать ссылки на них.
Слайд 23

Списки Список – цепочка элементов связанных между собой ссылками

Списки

Список – цепочка элементов связанных между собой ссылками

Слайд 24

Посмотрим на практике. Напишем программу в которую можно вводить не *ограниченное

Посмотрим на практике.

Напишем программу в которую можно вводить не *ограниченное кол-во

координат точек, концом ввода будет отрицательное число, после чего программа распечатывает все точки.
Слайд 25

Виды списка Односвязные – каждый элемент списка имеет ссылку лишь на

Виды списка

Односвязные – каждый элемент списка имеет ссылку лишь на следующий

элемент.
Двусвязные – каждый элемент списка имеет ссылку на следующий и предыдущий элементы.