Типы данных в языке C++ 713

который присвоил указателю Ppers адрес объекта Pers. Тогда указанные выше
присваивания элементам структуры можно выполнить так:

Ppers->Fam = "Иванов";

Ppers->Nam = "Иван";

Ppers->Par = "Иванович";

Ppers->Year = 1960;

Ppers->Sex = true;

Ppers->Dep = "Бухгалтерия";

12.11.2 Самоадресуемые структуры

Теперь рассмотрим еще один вид структур — самоадресуемые структуры. Не-
редко в памяти надо динамически размещать (см. главу 11 раздел 11.9) последова-
тельность структур, как бы формируя некий фрагмент базы данных, предназна-
ченный для оперативного анализа и обработки. Поскольку динамическое размеще-
ние проводится в непредсказуемых местах памяти, то такие структуры надо снаб-
дить элементами, содержащими указатели на следующую аналогичную структу-
ру. Такие структуры со ссылками на аналогичные структуры и называются само-
адресуемыми. Ниже приведена схема связи таких структур в последовательность.
Полю указателя в последней структуре обычно присваивается значение NULL, что
является признаком последней структуры при организации поиска в списке.

структура 1               структура 2                структура N

NULL
поле указателя ————> поле указателя -------> поле указателя ————>

Если мы хотим рассмотренную в разделе 12.11.1 структуру сделать самоадре-
суемой, следует изменить ее объявление следующим образом:

struct TPers {

AnsiString Fam,Nam,Par;

unsigned   Year;

bool       Sex;

AnsiString Dep;

TPers * pr;

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

TPers *РО = NULL, *Pnew, *Pold;

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

// выделение памяти под новую структуру
Pnew = new TPers;

// заполнение элементов структуры
Pnew->Fam = "Иванов";

Pnew->Nam = "Иван";

Pnew->Par = "Иванович";

Pnew->Year = 1960;

Pnew->Sex = true;

Pnew ->Dep = "Бухгалтерия";

Pnew->pr = NULL;