Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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

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

Вариант 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;





Дата публикования: 2014-11-28; Прочитано: 140 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...