Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_2_изд_испр.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

10.7.2. Рекурсивные структуры

Рекурсией, в общем случае, можно назвать правило, позволяющее определить некоторый объект с помощью другого объекта той же структуры. Наиболее распространены рекурсивные функции, простейшим примером которых является формула вычисления факториала: n!=n*(n-1)!

При реализации структур данных таких, как: списки, стеки и т.п., используются объекты программы следующего вида:

Пример.

struct node{

int data;

struct node *next;

};

Здесь в состав структуры включают указатель на структуру того же типа. Такие структуры называют рекурсивными. Их применение будет рассмотрено в курсе "Структуры данных".

10.7.3. Поля битов

До сих пор минимальными адресуемыми элементами программы являлись объекты размером в 1 байт. Примерами таких объектов являлись данные типа char в языке C и типа byte в языке Basic. Однако байт содержит 8 битов (двоичных цифр). Язык C позволяет манипулировать с отдельными битами информации. Такая необходимость возникает, в основном, при программировании аппаратуры, входящей в состав ПК, или программно-аппаратного комплекса. Средством реализации такой возможности является особый вид структуры, имеющий в качестве элементов так называемые поля битов.

Записываются такие структуры следующим образом:

struct{

unsigned [<имя>]: <число битов>;

..........................

}

Пример. Формат регистра состояния ГД RX211.

struct{

unsigned error :1;

unsigned initialize :1;

unsigned addr :2;

unsigned rx02 :1;

unsigned :2;/* Hе используются */

unsigned density :1;

unsigned trreg :1;

unsigned enable :1;

unsigned done :1;

unsigned select :1;

unsigned funct :3;

unsigned go :1;

}save_211;

Поле битов без имени нулевой длины вызывает выравнивание последующих полей на границу объявленного типа данных, т.е они располагаются с адреса, кратного 16 для ОС MS DOS и 32 – Windows.

10.7.4. Объединения (смеси)

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

union [<тип>]{

описание элемента 1;

описание элемента 2;

...................;

описание элемента n;

}[<список-элементов>];

Пример.

union{

float radius; // Окружность

float side[2]; // Прямоугольник

float triangle[3]; // Треугольник

float point[2]; // Точка

}GeomFig;

В каждый момент времени в памяти, отведенной объединению, может находиться только один элемент, т.е. память используется элементами поочередно. Размер отводимой памяти определяется размером наиболее "длинного" элемента. В примере это "треугольник" – 12 байтов.

Заметим, что обобщением понятия объединения является тип данных variant в языке Basic.