Глава 7. Указатели и ссылки__________________________________759

будет некое 32-разрядное число. Что же касается взаимоотношений адресов и указателей, то если вы напишете

-i.nt *pnut •= nut;

то будет создан указатель, указывающий на ячейку памяти с адресом 5 (рискованное дело). Если на самом деле вы хотели создать для переменной псевдоним, то вам следует написать

int *ctonut = &nut;

Чтобы изменить значение nut через donut, donut следует просто разымено-вать и присвоить новое значение:

*donut = 0;

У псевдонимов есть круг типичных приложений, некоторые из которых исключительно полезны. Одно из них, в частности, играет немаловажную роль в конструкции самой системы Windows 95. Речь идет об указателях на функции или функторах (functors). Функторы активно при1жняются в ряде областей, одна из которых — это создание функций обратного вызова (callback functions), таких как обработчики прерываний (interrupt handlers) и обработчики событий (event handlers). Функторы рассматриваются в главе 12 "Библиотечные функции Borland C++".

Доступ к динамическим объектам

Операция выбора элемента через указатель (->) используется для доступа к элементам динамических составных объектов. Составные (aggregate) объекты — это переменные производных типов, сконструированных из других типов, как то классы или структуры; термин динамические обозначает, что они размещены в куче, скорее всего, с помощью операции new; элемент — это некая переменная, входящая в состав такой комплексной переменной.

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

Struct INTS

( int thingOne, thingTwo; };

В ЭТОМ Примере Элементы — ЭТО thingOne И thingTwo.

Если переменная этого типа, или объект, определена как переменная-ука-затель,

struct INTS *ints = new INTS;