Основні теоретичні відомості

Структура - це об’єднання однієї або більше змінних, можливо, різних типів, в одну групу, що для простоти роботи має одне ім’я.

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

Використання покажчиків зі структурами бажане по трьом причинам: їх легше використовувати; структура не може використовуватись в якості аргументу функції, а покажчик на структуру може; багато типових структур даних є структурами які містять покажчики на інші структури.

Загальна форма об’явлення структури наступна:

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 у пам’яті.

 
 


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

 

Відповідно до структур звернення до елемента об’єднання можливо через им’я об’єднання або через покажчик:

 

ім’я_объеднання.ім’я_елемента

покажчик_на_об’єднання->і’мя_елемента

(*покажчик_на_об’єднання).і’мя_елемента