Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



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

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

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

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

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

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

 

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

 

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

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

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

Контрольні запитання

1. Чим відрізняється визначення шаблона структури від визначення структури?

2. Запишіть (у виді прикладів) способи доступу до членів структури, до елементів масиву ‑ члена структури, до членів структури, що є елементом масиву.

3. Що означає код (*str).alphaі як його ще можна записати?

4. Як ініціалізувати елементи структури?

5. Напишіть код, що визначає розмір масиву структур.

6. Чи правильний запис struct x{int x,y;double z[2];}x;?

7. Схематично показати розподіл пам'яті для структури

struct{int alfa;

int a : 5;

int b : 3;

char ch;}record;

8. Наведіть приклад використання структури в іншій структурі. Привласніть значення одному елементу цієї структури.

9. Що таке об'єднання (union)? Як створити шаблон об'єднання і саме об'єднання?

10. Схематично показати розподіл пам'яті для об'єднання

union{long word;

char delta;

int number;

char gamma[4];}UN;

11. Як ініціалізувати об'єднання?

12. Чим структура відрізняється від об'єднання?

13. Для чого можна використовувати бітові поля?

14. Як задається розмір бітового поля при описі його в структурі?

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

16. Чи може до бітового поля застосовуватися операція "одержати адресу" &?





Переглядів: 500

<== попередня сторінка | наступна сторінка ==>
Індівідуальні завдання | Д.2. Функція scanf()

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.005 сек.