Лекция: Структурные параметры функций

Структуры можно использовать в качестве параметров функций, как и обычные переменные. Для структур поддерживаются все три механизма передачи данных – по значению, через указатели и по ссылке.

Напишем три варианта функции, выводящей на экран данные студента.

 

Вариант 1. Передача данных по значению:

 

Void WriteStudent ( t_Student S )

{

cout << setw(14) << «Фамилия: » << S.Fam << endl;

cout << setw(14) << «Имя: » << S.Name << endl;

cout << setw(14) << «Год рождения: » << S.Year << endl;

If ( S.Sex )

cout << setw(14) << «Пол: » << «М\n»;

Else

cout << setw(14) << «Пол: » << «Ж\n»;

cout << setw(14) << «Средний балл: » << S.Grade << endl;

}

 

В этом варианте функции используется передача данных структуры по значению. Вызов этой функции WriteStudent ( St1 );сопровождается дополнительным расходом памяти для создания локальной переменной Sи дополнительными затратами времени на физическое копирование данных из аргумента St1в параметр S. Учитывая то, что объем структур может быть очень большим, то эти дополнительные затраты вычислительных ресурсов могут быть чрезмерными. Поэтому передачу структур в функции по значению необходимо использовать аккуратно.

 

Вариант 2. Передача данных через указатель:

 

void WriteStudent ( t_Student *S )

{

cout << setw(14) << «Фамилия: » << S -> Fam << endl;

cout << setw(14) << «Имя: » << S -> Name << endl;

cout << setw(14) << «Год рождения: » << S -> Year << endl;

if ( S -> Sex )

cout << setw(14) << «Пол: » << «М\n»;

Else

cout << setw(14) << «Пол: » << «Ж\n»;

cout << setw(14) << «Средний балл: » << S -> Grade << endl;

}

Вызов этой функции: WriteStudent ( &St1 );

В этом варианте фактической передачи данных студента в функцию не осуществляется. Дополнительные затраты памяти для создания локальной переменной небольшие – это адрес памяти (4 байта, независимо от размера самой структуры). Вызов такой функции будет осуществляться быстрее, а расход памяти существенно меньше, чем в первом варианте.

Здесь следует обратить внимание на то, что обращение к полям записи должно осуществляться с помощью оператора “стрелка”.

 

Вариант 3. Передача данных по ссылке:

 

void WriteStudent ( t_Student &S )

{

cout << setw(14) << «Фамилия: » << S.Fam << endl;

cout << setw(14) << «Имя: » << S.Name << endl;

cout << setw(14) << «Год рождения: » << S.Year << endl;

еще рефераты
Еще работы по информатике