Основні теоретичні відомості
Структура - це об’єднання однієї або більше змінних, можливо, різних типів, в одну групу, що для простоти роботи має одне ім’я.
Структури використовують для організації складних даних в великих програмах. Тому що вони в багатьох ситуаціях дозволяють групувати в єдине ціле поріднені між собою змінні та працювати з ними як з єдиним цілим, а не з окремими складовими. Структури також дозволяють створювати нові типи даних.
Використання покажчиків зі структурами бажане по трьом причинам: їх легше використовувати; структура не може використовуватись в якості аргументу функції, а покажчик на структуру може; багато типових структур даних є структурами які містять покажчики на інші структури.
Загальна форма об’явлення структури наступна:
struct ім’я_структури {
тип 1 поле 1;
тип 2 поле 2;
……
тип n поле n;
} список_змінних;
Наприклад. Об’явимо новий тип stud
struct stud {
char name[80];
int age;
double b;
} st1, st2;
stud Ivan,Petr; //Об’являємо змінні Ivan, Petr типа stud
На рис. 8.1 наведена уява змінної st1 у пам’яті.
| name | 80 байт | |||||||||
age | 2 байт | ||||||||||
b | 8 байт |
Рисунок 8.1 – Ділянка пам’яті, що виділена під змінну st1
Отже, під змінну st1 в пам’яті виділяється 86 байт
При визначенні структур можлива їх ініціалізація, тобто задання початкових значень їх елементів. Наприклад:
stud st1={“Ivanov”, 20, 4.6};
Для звертання до елемента структури використовують оператор ‘.’:
ім‘я_структури.ім’я_елемента_структури
Наприклад:
st1.name=”Ivan”;
st1.age=20;
gets(st2.name);
for (int t=0; st1.name[t]; t++) cout<<st1.name[t];
В С++ вміст однієї структури можна присвоїти другій, якщо обидві ці структури мають один тип.
Наприклад:
struct tt{
int a, b;} var1, var2;
var1=var2;
В С++ покажчики на структури можна використовувати таким самим чином, як і покажчики на змінні різного типу.
ім‘я_структурного типу *ім’я покажчика_на_структуру;
Наприклад:
stud *pStud;
pStud=&st1;
В С++ для того, щоб отримати доступ до членів структури за допомогою покажчика, використовується оператор „–>”.
pStud–>age;
Інша можливість звернення до елементу структури за допомогою адресуючого її покажчика – це розіменування покажчика та формування уточнюючого ім’я такого виду:
(*ім’я_покажчика).ім’я_елемента_структури
Покажчик на структуру може входити до визначення того ж структурного типу. Саме так у визначенні формата структуру record введені два покажчики:
record *prior – покажчик на попередній елемент у двохзв’язному списку структур;
record *next – покажчик на наступний елемент у двозв’язному списку структур.
Об’єднання.
Об’єднання це тип, де всі змінні розділяють одну ділянку пам’яті. Загальна форма запису об’єднання наступна:
union ім’я_типу (
тип 1 поле 1;
тип 2 поле 2;
- - - - - - - - - -
тип N поле N;
} перелік_змінних;
Наприклад:
union { long L; int il, i2; char с[4]; } UNI;
На рис.8.2 ми можемо побачити уяву змінної UNI у пам’яті.
← long L → | |||||
байт | байт | байт | байт | ||
Ділянка пам’яті | ← int i1 → | ||||
← int i2 → | |||||
← chsr c[4] → |
Рисунок 8.2 – Схема розміщення в пам’яті об’єднання UNI
Відповідно до структур звернення до елемента об’єднання можливо через им’я об’єднання або через покажчик:
ім’я_объеднання.ім’я_елемента
покажчик_на_об’єднання->і’мя_елемента
(*покажчик_на_об’єднання).і’мя_елемента