Из базовых типов и типов, определенных программистом, можно формировать производные типы, к которым относятся указатели, массивы, структуры, объединения и функции. Базовые типы (int, float, …) считаются скалярными типами. Массивы и структуры являются агрегирующими типами, так как состоят из набора элементов. Массив состоит из однотипных элементов, а структуры могут содержать разнотипные элементы [24].
Структура – это объединение в единое целое множества поименованных элементов (компонентов) данных. В отличие от массива, в котором компоненты имеют один и тот же тип, компоненты структуры могут иметь различные типы.
Формат объявления структурного типа:
struct имя_структурного_типа {
Определение_компонентов_структуры
};
Здесь struct – спецификатор структурного типа;
имя_структурного_типа – произвольно выбираемый идентификатор;
Определение_компонентов_структуры – совокупность одного или более описаний объектов, каждый из которых служит прототипом для элементов структур вводимого структурного типа.
|
|
Еще одну возможность введения структурного типа дает служебное слово typedef, позволяющее ввести собственное обозначение для любого определения типа. В случае структурного типа он может быть введен и поименован следующим образом:
typedef struct {
Определение_компонентов_структуры
} имя_структурного_типа_1;
Структурный тип, которому назначается имя с помощью typedef, может иметь имя и введенное обычным образом:
typedef struct имя_структурного_типа {
Определение_компонентов_структуры
} имя_структурного_типа_1;
В этом случае объекты можно вводить, используя как имя_структурного_типа, так и имя_структурного_типа_1.
Структура используется для определения типов вводимых объектов также как и int, double и так далее, то есть под описание структуры память не выделяется. Выделение памяти происходит при объявлении объектов типа структура. Введение объектов происходит следующим образом:
имя_структурного_типа список_имен_объектов;
В качестве примера иллюстрации выделения памяти рассмотрим структуру вида [24]:
struct goods{
char* name; // Название
long price; // Цен а
float percent; // Процент скидки
char date[9]; // Дата в символьном формате
};
Введем объект типа struct goods:
struct goods coat;
В табл. 10.1 приведено распределение памяти, выделяемой под объект coat.
Таблица 10.1