C++ Программирование в среде С++ Builder 5

Структуры


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

struct этикетка [список элементов] [переменные];

Список_элементов состоит из объявлений, аналогичных объявлениям переменных. Объявления элементов оканчиваются точкой с запятой. Вот простой пример структуры, предназначенной для хранения основных сведений о человеке:

struct Person (

char lastName[32]; // Фамилия.

char firstName[32]; // Имя.

Sex sex;

// Пол: перечислимый тип

// (male, female}.

short age; // Возраст.

long phoneNum; // Телефон как длинное целое.

}

aPerson; // Объявляет переменную типа



// struct Person.

Как видите, все довольно просто. Структура группирует различные данные, относящиеся к конкретному человеку. Как и в случае перечислений, в определении структуры можно сразу объявить переменные структурного типа, указав их имена после закрывающей фигурной скобки. Аналогично именем типа является struct этикетка, и его можно сразу переопределить с помощью ключевого слова typedef.

Для доступа к отдельным элементам структуры имеются две операции: точка и стрелка, за которыми следует имя элемента. Какую из них следует применять, зависит от того, имеете ли вы дело с самой переменной-структурой или у вас есть только указатель на нее, как это имеет место в случае динамических объектов. С именем переменной применяется точка, с указателем — стрелка. Имея в виду предыдущее определение, можно было бы написать:

struct Person *pPerson - SaPerson;

// Указатель на

// структуру.

aPerson.age = atol(ageStr);

// Записать в структуру

// возраст aPerson.sex - male;

// и т.д.

pPerson->phoneNum = atol(phoneStr); //

/* Напечатать имя и фамилию (предполагается, что они уже инициализированы).*/

printf("%s %s\n", pPerson->firstName, pPerson->lastName);


Битовые поля



В качестве элементов структуры можно определять битовые поля. Для них задается ширина поля в битах, и компилятор отводит под элемент ровно столько бит, сколько указано. Несколько битовых полей может быть таким образом упаковано в одном слове. Синтаксис битового поля:

тип [имя поля]: ширина поля;

Тип поля может быть int или unsigned int. Доступ к битовым полям осуществляется так же, как и к регулярным элементам структуры. Если имя_поля отсутствует, место под поле отводится, но оно остается недоступным. Это будут просто “заполняющие” биты.



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


Содержание раздела