Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
364.88 Кб
Скачать

Производные типы данных.

К производным (сложным) типам данных в языке C относятся структуры и объединения. Эти типы данных позволяют описывать большие объёмы данных в структурированном (упорядоченном) виде.

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

Структура (struct).

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

struct ИмяСтруктуры

{

тип элемент1;

тип элемент2;

}ИмяПеременной;

где ИмяСтруктуры – некоторый идентификатор структуры,

ИмяПеременной – имя создаваемой переменной.

Внутри фигурных скобок находится список переменных – элементов (членов) структуры, разделённых точкой с запятой. Аналогично синтаксису определения перечисления, ИмяСтруктуры и ИмяПеременной могут быть опущены.

Пример:

struct st1

{

int i;

char str[5];

double j;

}var1;

В результате выполнения такого определения будет создана структура с идентификатором st1 и переменная var1 типа структура st1. Её элементы будут размещены в памяти следующим образом:

Адрес начала переменной var1( = &var1)

B0

B1

B2

B3

B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15

B16

int i;

char str[5];

double j;

На самом деле, точно такое представление в памяти будет только в том случае, если выключить автоматическое выравнивание структур (с помощью директивы препроцессора #pragma pack(0)).

Дело в том, что современные процессоры быстрее оперируют в блоками данных длиной в несколько байт (обычно 8), поэтому в современных компиляторах по умолчанию включено автоматическое выравнивание структур, дополняющее каждый элемент структуры таким количеством байт, что его длина становится кратной восьми.

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

Структуры являются очень мощным инструментом, позволяющим оптимизировать хранение и обработку больших объёмов данных. Но не стоит перебарщивать и связывать в структуры переменные совершенно не связанные между собой логически. Например, не стоит связывать в структуру две независимые переменные i и j, являющиеся отдельно используемыми счётчиками. В то же время две переменных x и y, описывающие координаты какой-либо точки можно и нужно связать в структуру Point и использовать далее как элементы этой структуры.