Указатели на элементы структуры
Если структура имеет несколько элементов одного типа, то для нее может быть создан "внутренний" указатель, который принимает значение внутреннего адреса (смещения) элемента относительно выбранной структуры. Формирование и использование такого указателя ясно из примера:
struct dat
{
int day,month,year;
void Getdat();
void Putdat();
void Nextdat();
};
void main() {
int dat::*p; // Указатель на элемент типа int в структуре dat
p = &dat::month; // Значение p - смещение (адрес) элемента month
// в структуре типа dat
dat x,*px = &x;
x.*p = 5; // Обращение по внутреннему
px->*p = 5; // указателю эквивалентно
// x.month = 5;
} // px->month =5;
Аналогичный внутренний указатель может быть создан для функций-элементов, принадлежащих одной структуре, при этом функции должны быть идентичными по результатам и параметрам:
void (dat::*fun)(); // Указатель на функцию- элемент структуры dat
fun = & dat::Putdat(); // Значение fun - указатель на элемент-функцию
// Putdat в dat
(x.*fun)(); // Вызовы функции-элемента по
(px->*fun)(); // указателю fun эквивалентны
// x.Putdat(); px->Putdat();