Структура як аргумент функції

Виклик функції з передачею за значенням копії структурної змінної (або її окремих полів) призводить до додаткових втрат часу на запис копії структурної змінної в стек, зате маніпуляції з копією не впливають на вихідну змінну. З тієї ж причини повернення функцією структурної змінної можливий (return імя_структурной_переменной). але вимагає витрат на розміщення в стеку значення, що повертається і подальшого його копіювання з стека в змінну lvalue того ж типу, що й повертається значення функції.

void f3 (Book); // функція, яка отримує аргумент «структура типу Book»

void f4 (Book *); // функція, яка отримує аргумент
// «покажчик на структуру типу Book»

Book f (); // функція повертає структуру типу Book

Book * f1 (); // функція повертає покажчик на структуру типу Book

Book f2 (); // функція повертає посилання на структуру типу Book

Приклади роботи зі структурами

1. Визначення структурного типу complex, що представляє комплексні числа, задані в алгебраїчній формі, і визначення структурних змінних x, y цього типу:

struct complex

float im; // уявна частина числа

При цьому x.re - доступ до поля дійсної частини комплексного числа x,

y.im - доступ до поля уявної частини комплексного числа y,

Тоді функції для введення, виведення, складання комплексних чисел можуть виглядати так:

struct complex ; // визначення структурного типу

complex read (); // прототип функції введення комплексного числа

void print (complex); // прототип функції виведення комплексного числа на екран

void add (complex, complex, complex *); // прототип функції складання комплексних чисел

void add1 (const complex, const complex, complex);

complex c1, c2, c3, c4; // визначення комплексних чисел

c1 = read (); // виклик функції введення числа

add (c1, c2, c3);

print (c1); cout <<"\t + \t" <

print (c2); cout <<" = " <

print (c1); cout <<"\t + \t" <

Схожі статті