ZAP * p;
В этом обьявлении переменная p является указателем на поле типа ZAP.
Отметим одну важную особенность указателей на структуру. Доступ к элементам структуры, на которую настроен указатель, осуществляется операцией ‘ ->’. Формат соответствующего выражения имеет вид:
Имя_указателя -> имя_элемента_структуры
Вторая возможность обращения к элементу структуры с помощью адресующего указателя – разыменование указателя и формирование уточненного имени:
(*имя_указателя).имя_элемента _структуры
Рассмотрим эти возможности во фрагменте программы:
struct ZAP
{
int TN;
char FIO[15];
float NZP;
float SUD;
float VNR ;
char ROSP[20];
};
ZAP * p;
ZAP x;
int y=5;
p=&x;
p->TN = y;
(*p).TN=y;
Последние два оператора эквивалентны и посылают в поле TN переменной x, которая является структурой типа ZAP, значение y. Таким образом, последние операторы эквивалентны оператору x.TN = y;. Но в таком случае можно было обойтись и без указателя! В данном примере это действительно так, но указатели на структуры незаменимы при вызове функций. В чем мы убедимся, решая рассмотренную задачу с помощью программы, использующей функции.
Алгоритм решения этой задачи с использованием функций может иметь следующий вид:
Начало
указатель = адрес_нулевого_элемента_массива_Tab
вызвать функцию ввода
Vvod(указатель, N)
указатель = адрес_нулевого_элемента_массива_Tab
вызвать функцию вывода
Vyvod(указатель, N)
конец
в этом алгоритме указатель – это указатель на структуру. При вызове функций Vvod и Vyvod им передаются значения указателя, предварительно настроенного на нулевой элемент массива Tab, и значения N, равного количеству элементов массива Tab. Предварительная настройка указателя необходима, поскольку он будет использоваться в функциях для организации циклов по просмотру массива Tab и значение его будет меняться.