Информатика и технология программирования

       

Указатель на структуру -формальный параметр


В "классическом" Си формальными параметрами могут быть базовые типы данных и указатели. Передача параметров в функцию по значению связано с их копированием, поэтому транслятор должен уметь это сделать. А поскольку массивы и структуры нельзя копировать целиком, а только поэлементно, то в формальных параметрах могут быть только указатели на них (о формальных параметрах -массивах -см.4.1). Предыдущий пример с использованием указателя на структуру будет выглядеть следующим образом:


void proc(man *p)
{
p-&#62name[m]... // Для работы с элементами


// структуры через указатель


cout &#60&#60 p-&#62name; // на нее используется


// операция "-&#62"


cout &#60&#60 p-&#62yy &#60&#60 p-&#62mm &#60&#60 p-&#62dd;
} // Фактические параметры -


void main() { // указатели на структурированные


int i; // переменные, полученные


proc(&#38A); // с помощью операции "&#38"


for (i=0; i&#60 10; i++) proc(&#38X[i]);
}

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


void proc(man *p, int n)
{ // Здесь p[i].name эквивалентно


int i; // (*(p+i)).name - элемент name


for (i=0; i&#60n; i++) // в i-й структурированной пере-


{ // меннной от текущего положения


p[i].name[m]... // указателя


cout &#60&#60 p[i].name; //


cout &#60&#60 p[i].yy &#60&#60 p[i].mm &#60&#60 p[i].dd;
} // Фактические параметры -


// указатели на структурированныe


proc(&#38A,1); // переменные (операция "&#38") и


proc(B,10); // массивы (идентификатор массива)


}



Содержание раздела