Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samostoyatelnye_po_S.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
672 Кб
Скачать
☆

Покажчики на структуру

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

Формат: struct point * pp;

де pp - покажчик на структуру типу struct point, * pp - сама структура, (* pp). x і (* pp). y - члени структури.

Дужки (* pp). X необхідні, так як пріоритет операції (.) Вище пріоритету операції (*). У разі відсутності дужок * pp.x розуміється як * (pp.x).

Ініціалізація покажчика на структуру виконується так само, як і ініціалізація вказівників інших типів: struct point var1, * S1; тут var1 - структурна змінна, * S1 - вказівник на структуру.

Для визначення значення покажчика йому потрібно привласнити адресу вже сформованої структури:

S1 = &var1;

Тепер можливо ще одне звернення до елементів структури:

(* S1). Name.

Покажчики на структури використовуються досить часто, тому для доступу до її полях була введена коротка форма запису. Якщо р - покажчик на структуру, то p → <поле структури> зволяет звернутися до зазначеного полю структурної змінної.

Знак → (стрілка) вводиться з клавіатури за допомогою двох символів: '-' (мінус) і '>' (більше). Наприклад, pp → x; pp → y.

Оператори доступу до полів структури (.) І (→) разом з операторами виклику функції () та індексами масиву [] займають найвище положення в ієрархії пріоритетів операцій в мові C.

Покажчики на структуру використовуються у наступних випадках:

- Доступ до структур, розміщеним в динамічній пам'яті;

- Створення складних структур даних - списків, дерев;

- Передача структур в якості параметрів в функції.

Масиви структур

При необхідності зберігання деяких даних у вигляді декількох масивів однієї розмірності, але різного типу, можлива організація масиву структур. Наочно масив структур можна представити у вигляді таблиці, де стовпчики таблиці являють собою поля структури, а рядки - елементи масиву структур.

Наприклад, є два різнотипних масиву:

char c [N];

int i [N];

Оголошення

struct key

{

char c;

int i;

} Keytab [N];

створює тип структури key і оголошує масив keytab [N], кожен елемент якого є структура типу key.

Можливий запис:

struct key

{

char c;

int i;

};

struct key keytab [N];

Ініціалізація масиву структур виконується наступним чином:

struct key

{

char c;

int i;

} Keytab [] = {

'A', 0,

'b', 0

};

У цьому прикладі створюється масив на дві структури типу key з ім'ям keytab. Розглянемо звернення до поля структури в цьому випадку - для прикладу виведемо на екран вміст масиву:

for (int i = 0; i <2; i + +)

printf ("% c% d \ n", keytab [i]. c, keytab [i]. i);

При зверненні до поля структури спочатку відбувається звернення до елементу масиву (keytab [i]), а потім тільки звернення до поля структури (keytab [i]. C).

Доступ до поля елемента масиву структур може бути отриманий через константу-покажчик на масив і зміщення всередині масиву, наприклад, доступ до поля елемента масиву з номером i потрібно записати таким чином:

(* (Keytab + i)). C або (keytab + i) → c.

Масив структур також може бути переданий у функцію як аргумент, передача масиву відбувається через покажчик на масив.

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

# Include <stdio.h>

# Define N 5

struct point

{int x, y;

};

void form_mas (struct point * mas, int n)

{

printf ("Enter koordinates! \ n");

for (int i = 0; i <n; i + +)

{

printf ("x →");

scanf ("% d", & mas [i]. x);

printf ("y →");

scanf ("% d", & mas [i]. y);}}

void print_mas (struct point * mas, int n)

{printf ("x y \ n");

for (int i = 0; i <n; i + +)

printf ("% 4d% 6d \ n", (mas + i) → x, (mas + i) → y);

}

int main ()

{struct point Points [N];

form_mas (Points, N);

print_mas (Points, N);

return 0;}

Функція form_mas () заповнює масив точок, який переданий у функцію через покажчик mas. Параметр функції n визначає кількість елементів масиву. Доступ до елементу масиву - через операцію. (Крапка). Вираз & mas [i]. X обчислює адресу елемента структури mas [i]. X, так як операція & має нижчий пріоритет, ніж операції [] і • (точка).

Функція print_mas () виводить масив на екран. Передача масиву у функцію відбувається також через покажчик mas. Параметр n - кількість елементів масиву. Доступ до елементу масиву - через операцію → (стрілка).

Питання для контролю:

1.В якому випадку потрібно використовувати показники на структуру?

2. Як оголосити вказівник на структуру?

3.Як організувати масиви структур?

Література:

1.Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. –стор 132-134

Урок №27

(згідно робочої навчальної програми)

Тема: Динамічні масиви, масиви покажчиків

Питання:

1. Динамічне розміщення масивів

2. Робота з динамічними масивами

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]