Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯП - ПОИТ (Бахтизин) часть 1 редакт.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.76 Mб
Скачать

8. Структуры, объединения и перечисления

8.1. Общие сведения

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

Рассмотрим типовую структуру на примере примитивной базы данных:

№ п/п

Наименование

(name)

Стоимость

(cost)

Количество

(quant)

Примечание

(note)

1

2

3

..

..

..

генератор

100,5

10

частота 460 Гц

Объявление структурной переменной состоит из:

  1. задания шаблона структуры или типа структуры

  2. собственно объявления структурной переменной.

Описание структуры начинается с ключевого слова struct. В нашем примере объявление шаблона имеет следующий вид:

struct base

{

int n;

char name[20];

float cost;

int quant;

char note[100];

};

После объявления структуры ставится точка с запятой, поскольку оно (объявление) является оператором.

base определяет имя создаваемого таким образом типа структурной переменной; n, name, cost, quant, note – список элементов (члены, поля) структуры, которые могут иметь любой основной тип, включая тип других структурных переменных.

Если структура описана внутри функции, то она будет видна только в функции. Если вне функции, то шаблон будет доступен после объявления. Структурный шаблон сообщает компилятору, какой вид должна иметь структурная переменная, но сама структурная переменная не создаётся. Чтобы её создать, необходимо её объявить:

struct base m1; // создание переменной m1 типа base.

Когда объявляется структурная переменная, компилятор автоматически выделяет количество памяти, необходимое, чтобы разместить все её члены (рис. 5.1).

Рис. 5.1. Расположение элементов структуры в памяти

Объявление шаблона и одной (или нескольких) структурных переменных можно объединить:

struct base

{

int n;

char name[20];

float cost;

int quant;

char note[100];

} m1, m2, m3;

Структурная переменная представляет собой переменную нового типа, которая задана с помощью шаблона.

Общий вид объявления структуры:

struct [имя_типа_структуры]

{

тип_имя члена;

тип_имя члена;

.

.

.

тип_имя члена;

} [одна или более переменных-структур];

Неявно структурная переменная выравнивается на границу байта. В зависимости от опции IDE может быть задано выравнивание на границу байта или слова (2 байта).

При выравнивании на границу байта данные могут начинаться как с чётного, так и с нечётного адреса.

Если задан режим выравнивания на границу байта, то размер всей переменой равен сумме длин всех полей. Если задан режим выравнивания на границу слова, то все несимвольные данные выравниваются по чётным адресам, а все символьные (char) – по любым.

Исходя из этого видно, что внутри переменной могут появиться дополнительные байты для выравнивания на границу слова.