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

Вказівники на структури

Мова С дозволяє створювати вказівники на структури так само, як і на інші типи змінних. Тим не менше, є декілька аспектів, які необхідно пам’ятати:

  • вказівники на структуру оголошуються шляхом розміщення * перед іменем структурної змінної;

  • для отримання адреси структурної змінної слід помістити оператор & перед іменем структури;

  • для доступу до полів структури за допомогою вказівника на структуру слід використовувати оператор “стрілка” -> .

Наприклад, оголосимо структуру:

struct bal{

float balance;

char name[80];

} person;

struct bal *p; /*оголошення вказівника на структуру*/

тоді

p = &person;

запише адресу структури person у вказівник p.

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

Поле структури може бути як простим, так і складеним. Просте поле – це звичайний базовий тип даних, наприклад цілочисельний або символьний. Символьний масив, що використовується в addr_info – типовий приклад складеного типу. Іншим прикладом складених типів даних є одномірні та багатомірні масиви різних типів, інші структури, об’єднання і т. д.

Розглянемо таку структуру:

struct x{

int a [10][10];

float b;

} y;

Для звертання до числа з індексами 3, 7 масиву а структури у потрібно написати:

y.a[3][7];

Якщо структура є полем іншої структури, то вона називається вкладеною структурою. Наприклад, нижче описана структура addr вкладена в emp:

struct emp {

struct addr address;

float wage;

} worker;

У цьому прикладі структура emp має два поля: перше – структура addr, яка містить адреси службовців, друге – це wage, яке містить заробітну платню службовців. Нижче показано, як присвоїти 35000$ елементу wage структури worker і 98765 – полю zip структури address:

worker.wage = 35000.00;

worker.adderess.zip = 98765;

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

Бітові поля

У мові С передбачена можливість для роботи з окремими бітами – бітові поля. Використання бітових полів має такі переваги:

  1. якщо місце для зберігання інформації обмежене, то можна зберігати декілька логічних змінних в одному байті;

  2. деякі інтерфейси передають інформацію, закодувавши біти в один байт;

  3. деяким процедурам числового кодування необхідно отримати доступ до окремих бітів в байті.

Метод використання бітових полів для доступу до бітів грунтується на структурах. Бітове поле – особливий тип структури, в якій зазначено довжину кожного поля структури. Синтаксис оголошення бітових полів такий:

struct ім’я_структури {

тип ім’я1: довжина;

тип ім’я2: довжина;

...

тип ім’яN: довжина; }

Бітові поля необхідно оголосити як int, unsigned або signed. Бітові поля довжиною 1, необхідно оголосити як unsigned, оскільки 1 біт не може мати знаку.

Немає необхідності називати кожне бітове поле. До поля, яке має назву, легше отримати доступ. Бітові поля мають обмеження. Не можна отримати адресу змінної бітового поля. Змінні бітового поля не можна розміщувати в масив. Переходячи від комп’ютера на комп’ютер, не можна бути впевненим, в порядку зміни бітів (зліва направо чи справа наліво). Будь-який код, з використанням бітового поля, залежить від комп’ютера.

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