До функції передаємо розрізнені змінні, а назад отримаємо структуру.

Лекція 5.2: Структури та функції – шляхи передачі.

Мета:ознайомити студентів з основними операціями, що можна виконати над структурою в мові програмування С. Розглянути шляхи передачі структурованих змінних до функцій користувача.

План:

1. Дозволені операції зі структурами.

2. Робота зі структурами (вирішення задач).

 

 

Дозволені операції зі структурами є:

 

1) копіювання або привласнення структури як одного цілого.

2) Взяття адреси структури.

3) Звертання до елементів структури:

(тип ім’я (аргументи …))

Struct ex f (intx, inty)

{struct ex temp;

(Коментар: структура з відповідним переліком полів повинна бути описана.)

Temp.x=x;

temp.y=y;

return (temp); }

Цю функцію можна використовувати для динамічної ініціалізації структури або для передачі аргументів структур до функції.

 

Арифметичні дії на полях структури. В функцію передаємо 2 структурні змінні а назад отримуємо третю.

Struct point {int x; int y; }

Struct point P1, P2;

F1(P1,P2);

Struct point f1 (struct point pt1, struct point pt2);

{struct point pt3;

Pt3.x=Pt1.x+Pt2.x;

Pt3.y=Pt1.y+Pt2.y;

Return (Pt3);

В цьому прикладі структурами є як і аргументи, так і повернення значення. Замість того, щоб помістити результат у тимчасову змінну в прикладі були проінкрементовані компоненти структури Pt3.

Якщо до функції необхідно передати велику структуру, то це краще за все зробити передавши вказівник на неї, а не копію всіх даних.

Вказівники на структури мають всі властивості вказівників на звичайні змінні. Наступна декларація показує, що рр. є вказівником на структуру типу struct point.

struct point*рр;

Якщо рр. вказує на структуру point ,то *рр - це сама структура, а (*рр).х та (*рр).у – хх поля.

Наприклад, ось таким чином можна звернутися до елементів структури в програмі

struct point origin, *рр;

рр.=& origin;

printf(“origin is(%d,%d)\n”, (*рр).х, (*рр).у;

Дужки у звертаннях до полів необхідні, так як пріоритет операції звертання важче, ніж посилання за вказівником.

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

Нехай рр. – вказівник на структуру, тоді посилання на елемент структури виконається наступним чином.

рр. елемент_структури

printf(“origin is(%d,%d)\n”, рр х, рр у;

 

int A [4]

Int *P_A;

P_A=A;

P_A=&A [0]

Останні 2 вирази є однакові

 

 


int float char

 

struct ex*pointer; -оголошується вказівник.

Struct ex E; - оголошуємо саму змінну.

Pointer = &E; - ініціалізація.

 

Полями структури є координати точки. Визначити три екземпляри структури і знайти периметр трикутника, що утворюють ці точки. Довжину відрізка визначити за допомогою функції користувача.

 

Полями структури є дані про оцінки з п’яти предметів. Створити три екземпляри структури та визначити найбільший середній бал. Розрахунок середнього значення полів структури організувати у функції користувача.

 

Створити структуру з кількома полями типу з плаваючою точкою. Оголосити 3 екземпляри структури та скласти попарно значення перших полів, других і т.д. в ході програми визначити, яке з отриманих значень менше. Попарне складання знач