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

Структури, об’єднання, бітові поля

В мові С++ є засоби для шести способів створення своїх типів даних:

  1. Структура – це сукупність змінних, об’єднаних одним іменем. Вона може об’єднувати дані різних типів.

  2. Бітове поле – різновид структури, яка надає доступ до окремих бітів.

  3. Об’єднання – змішаний тип даних, який дозволяє одній ділянці пам’яті містити два чи більше різних типи даних.

  4. Перерахування – це список елементів з константними значеннями.

  5. Typedef – створює новий тип і присвоює йому ім’я.

  6. Клас сукупність компонентів-даних і компонентів-функцій, об’єднаних в один тип.

Структури

Оголошення структури приводить до утворення шаблону, який використовують для створення об’єктів структури. Змінні, які утворюють структуру, можуть бути різних типів. Компоненти структури (їх ще називають полями) можуть бути простими змінними, масивами, структурами, об'єднаннями чи бітовими полями. Кожному полю у структурі виділяється окрема ділянка пам’яті, рівна його розміру. Таким чином обсяг пам’яті, необхідний для збереження структури, рівний сумі обсягів пам’яті, необхідних для збереження всіх її полів.Типовий опис структури має вигляд:

struct addr {

char name[30];

char street[40];

char city [20];

char state[3];

unsigned long int zip;

};

Оголошення завершується крапкою з комою, оскільки оголошення є оператором. Ім’я структури addr ідентифікує структуру даних і є специфікатором типу. Для оголошення справжньої змінної, яка відповідає даній структурі, слід написати:

struct addr addr_info;

таким чином відбувається оголошення змінної addr_info типу addr. До тих пір поки не буде оголошена змінна даного типу, вона не буде існувати. Коли оголошена структурна змінна, компілятор автоматично виділяє необхідну ділянку пам’яті для розміщення всіх її полів. аddr_info розміщується в пам’яті і займає такий обсяг пам’яті:

30 байтів+40 байтів+20 байтів+3 байти+4 байти = 97 байтів.

Структури можуть бути компонентами інших складних типів даних, наприклад масивів чи інших структур.

Доступ до компонентів структур:

Доступ до окремих полів структури здійснюється за допомогою оператора . (називається “крапка”). Наприклад, в такому фрагменті коду компоненті zip структурної змінної addr_info присвоюють значення 12345:

addr_info.zip = 12345;

За іменем структурної змінної ставиться крапка, а за нею — ім’я поля, до якого проходить звертання. До всіх полів структури доступ здійснюється таким самим способом. Синтаксис доступу:

ім’я­_структури.ім’я_поля_структури.

Наприклад, можна вивести на екран поле zip

printf("%ld",addr_info.zip)

Присвоювання структур

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

# include <stdio.h>

int main(void)

{

struct {

int a;

int b;

} x,y;

x.a = 10;

x.b = 20;

y = x;

printf("Contents of y: %d %d.", y.a, y.b);

return 0;

}/*після присвоювання y.a, y.b будуть містити 10 і 20 відповідно*/

Можливо, найчастіше структури використовуються при створенні масивів структур. Для оголошення масиву структур, необхідно спочатку оголосити структуру, а потім оголосити масив змінних даного типу. Наприклад, для оголошення 100-елементного масиву структур типу addr (описаний вище), слід написати:

struct addr addr_info [100];

В результаті отримуємо набір зі ста змінних, розміщених, як оголошено, в типі структури addr. Для доступу до окремих структур масиву addr_info слід проіндексувати ім’я масиву. Як і масиви змінних, масиви структур індексуються з нуля.

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