Агрегаты данных

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

Структура

Структура это тип данных, представляющий собой определяемый пользователем набор именованных членов (компонентов). Эти компоненты могут быть любых типов, как встроенных (например, int, char, long, float, double и т.д.), так и созданных пользователем, записанные в любой последовательности. Кроме того, компонента структуры может иметь тип битового поля. Тип структуры в языке С/C++ позволяет обрабатывать сложные структуры данных так же легко, как и простые переменные.

Структуры объявляются при помощи ключевого слова struct. Например:

struct mystruct {... }; // mystruct – это тег структуры, т.е. имя типа,

// созданного пользователем.

Тогда объект с типом данной структуры будет создан объявлением

struct mystruct s, *ps, arrs[10]; /* s имеет тип структуры mystruct;

ps это указатель на тип struct mystruct,

arrs – это массив из 10 стpуктуp типа mystruct */

Если тег структуры опущен, то имеется безтеговая структура. Такую структуру можно использовать для объявления идентификаторов в разделяемом запятыми списке идентификаторов структуры как имеющих данный тип структуры, но нельзя объявлять объекты этого типа где-нибудь еще. Например:

struct {...} s, *ps, arrs[10]; // безтеговая структура

При объявлении структуры с тегом или без него, можно использовать ключевое слово typedef. Например:

typedef struct {... } MYSTRUCT;

MYSTRUCT s, *ps, arrs[10]; // то же, что и struct mystruct s и т.д.

typedef struct {... } YRSTRUCT;

YRSTRUCT y, *yp, arry[20];

Список объявления компонентов в фигурных скобках объявляет типы и имена компонентов структуры. Компоненты структуры могут быть любого типа, за двумя исключениями:

Первое исключение – тип компонента не может быть тот же, что и объявляемая в текущий момент структура, например:

struct mystruct { mystruct s } s1, s2; // так нельзя

Тем не менее, тег структуры может быть указателем на объявляемую структуру. Например:

struct mystruct { mystruct *ps } s1, s2; // так можно

Кроме того, структура может содержать ранее объявленные типы структур (в языке С++ можно опускать ключевое слово struct).

Второе исключение – компонент структуры нигде не может иметь тип "функция, возвращающая...", кроме языка С++, но тип "указатель на функцию, возвращающую..." допустим. В языке С++ ключевое слово struct может иметь компоненты-функции.

Доступ к компонентам структур и объединений выполняется операторами выбора (.) и (->). Операция (.) называется прямым выбором компонента структуры; операция (->) называется косвенным выбором компонента (или указателем) структуры. Например:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: