Указатель на структуру -формальный параметр
В "классическом" Си формальными параметрами могут быть базовые типы данных и указатели. Передача параметров в функцию по значению связано с их копированием, поэтому транслятор должен уметь это сделать. А поскольку массивы и структуры нельзя копировать целиком, а только поэлементно, то в формальных параметрах могут быть только указатели на них (о формальных параметрах -массивах -см.4.1). Предыдущий пример с использованием указателя на структуру будет выглядеть следующим образом:
void proc(man *p)
{
p->name[m]... // Для работы с элементами
// структуры через указатель
cout << p->name; // на нее используется
// операция "->"
cout << p->yy << p->mm << p->dd;
} // Фактические параметры -
void main() { // указатели на структурированные
int i; // переменные, полученные
proc(&A); // с помощью операции "&"
for (i=0; i< 10; i++) proc(&X[i]);
}
В данном случае формальный параметр p считается указателем на отдельную структурированную переменную. Функцию можно несколько изменить, если считать, что указатель ссылается на массив структурированных переменных. Для этого его придется сопроводить еще и размерностью массива, а доступ к элементам структур через этот указатель будет выглядеть несколько иначе:
void proc(man *p, int n)
{ // Здесь p[i].name эквивалентно
int i; // (*(p+i)).name - элемент name
for (i=0; i<n; i++) // в i-й структурированной пере-
{ // меннной от текущего положения
p[i].name[m]... // указателя
cout << p[i].name; //
cout << p[i].yy << p[i].mm << p[i].dd;
} // Фактические параметры -
// указатели на структурированныe
proc(&A,1); // переменные (операция "&") и
proc(B,10); // массивы (идентификатор массива)
}