Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 3.2 (ч.1). Команды и данные. Абстракция да...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
624 Кб
Скачать
☆

3.2.2.6 Структуры

Структурой называется идентифицированный агрегат логически взаимосвязанных данных произвольных типов.

Структура объявляется в соответствии с правилами:

объявление шаблона5 структуры ::= struct, идентификатор,

«{», объявление переменных | объявление массивов «}», «;»;

объявление структур ::= struct, идентификатор шаблона структуры,

идентификатор, [ «[», размерность, «]» ], [ =, инициализаторы, { инициализаторы } ],

{идентификатор, [ «[», размерность, «]» ], [ =, инициализаторы, { инициализаторы } ] },

«;»;

Например:

struct Star { // объявление шаблона структуры «звезда»

char Name [20]; // имя звезды

int Class; // «класс» звезды

float Ang, Dist; // координаты: угол видимости и расстояние

};

// объявление звезды Unona по шаблону Star с инициализацией данных

struct Star Unona = {"Unona", 5, 15., 123.45};

// объявление созвездия Persey из десяти звезд типа Star

struct Star Persey [10];

Элементом шаблона структуры может быть иная структура, например:

struct Planet { // объявление шаблона структуры «планета»

char Name [20]; // имя звезды

float Ang, Dist; // координаты: угол видимости и расстояние

};

struct PlanetSystem { // объявление шаблона структуры «планетная система»

struct Star psSun; // звезда системы

struct Planet psPlanet [10]; // планеты системы

};

struct PlanetSystem SunPlanetSystem;

Языком C++ допускается объединение объявления шаблона структуры и структуры, например:

struct MyStructPattern { // объявление шаблона структуры

int X;

float Y;

} MyStruct; // объявление структуры

Допускается также и объявление анонимной структуры (без предварительного объявления её шаблона), например:

struct {

int X;

float Y;

} NemoStruct; // объявление анонимной структуры

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

struct Pattern1 {

char name[101;

} Xl;

struct Pattern2 {

char name[10];

} X2;

Поэтому выполнение операции Xl = X2 приведет к возникновению ошибки. В то же время при объявлении:

struct Pattern {

char name[101;

} Xl, X2;

операция Xl = X2 не приводит к возникновению ошибки, поскольку Xl и X2 являются данными одного типа Pattern.

К элементу структуры обращаются согласно образцу идентификатор структуры. иден­ти­фи­катор элемента, например: Unona.Class или Persei [2].Ang.

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

длина битового поля ::= целое;

объявление битового поля ::=

(char | int), [ идентификатор ], «:» , длина битового поля, «;»;

объявление шаблона структуры ::= struct, идентификатор,

«{», объявление битового поля, { объявление битового поля }, «}», «;»;

Пример объявления структуры битовых полей:

struct Bit_field {

int j : 2; // переменная j занимает всего 2 бита

unsigned i : 5; // переменная i занимает 5 битов

int : 4; // эти 4 бита поля не используются (идентификатор не указан)

int k : 1; // переменная k занимает всего 1 бит

unsigned n : 4; // переменная n занимает 4 бита

};

struct Bit_field A;

В этой структуре поля битов размещены, как показано на рисунке 3.2.3.

Рисунок 3.2.3

Так, если A=123(10) 0000 0 0000 11110 11 (2), то: A.j=11(2)3(10), A.i=11110(2) 30(10), A.k=0 и A.n=0.