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

Теоретичні відомості до четвертої лабораторної роботи

  1. Структури

1.1. Оголошення структури

Структури дозволяють об'єднувати в єдиному об'єкті сукупність значень, які можуть мати різні типи. Оголошення структури здійснюється за допомогою ключового слова struct.

Синтаксис опису структури виглядає так :

struct [ім'я_структури] {

тип1 елемент1;

тип2 елемент2;

типN елементN;

} [список описів];

Можливий і наступний опис структури з використанням typedef:

typedef struct mystruct {

int year;

char size;

float field;

} MYSTRUCT;

MYSTRUCT s; /* те саме, що й struct mystruct s; */

Доступ до окремого елемента структури забезпечується операторами вибору: . (прямий селектор) та -> (непрямий селектор).

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

struct person {

char frnm[20];

char nm[30];

int year;

char s;

};

struct person poet={"Taras", "Shevtchenko",1814, 'M'},classics[]={{"Alfred", "Aho", 1939, 'M'},{"Seimour", "Ginzburg",}, /* … */ {"Jeffrey", "Ulman", 1938, 'M'}};

Доцільним та корисним є зв'язок структур та покажчиків, який дозволяє обійти деякі складні моменти. Так опис MYSTRUCT *pdate утворить покажчик на структуру типу MYSTRUCT. Використовуючи цей покажчик, можна звернутися до будь-якого елемента структури шляхом застосування операції -> , тобто MYSTRUCT ->year , або що еквівалентно операції (*pdate).year. Однак слід зауважити, що спільне використання цих типів потребує від програміста достатньо високої кваліфікації, аби використовувати можливості найбільш ефективно та безпомилково.

1.2. Масиви структур

Як і звичайними масивами простих типів, так само можна оперувати масивами структур, елементи якого мають структурований тип. Наприклад,

ypedef struct Date {

int d; /* день */

int m; /* мiсяць */

int y; /* рiк */

} Date;

Date arr[100];

Доступ до полів структури аналогічний доступу до звичайних змінних, плюс використання індексу номеру елементу у квадратних дужках:

arr[25].d=24;

arr[12].m=12;

1.3. Динамічна пам’ять

Динамічне розподілення пам’яті – можливість отримувати в процесі виконання додаткову пам’ять для зберігання нових елементів та звільняти блоки пам’яті, що вже не потрібні. malloc (від англ. memory allocation, виділення пам'яті) і calloc (від англ. clear allocation, чисте виділення (пам'яті)) - функції виділення динамічної пам'яті, що входять в стандартну бібліотеку мови Сі.

#include <stdlib.h>

void *malloc (size_t size);

void *calloc (size_t num, size_t size);

malloc приймає як аргумент розмір області, що виділяється в байтах; повертає нетипізований покажчик (void *) на область пам'яті заявленого розміру або NULL у випадку, якщо виділити пам'ять неможливо. Вміст виділеної області пам'яті не визначено.

calloc приймає як аргумент кількість елементів і розмір кожного елемента в байтах; повертає нетипізований покажчик (void *) на область пам'яті заявленого розміру або NULL у випадку, якщо виділити пам'ять неможливо. Значення елементів встановлюються в нуль. malloc працює швидше, ніж calloc, у зв'язку з відсутністю функції обнулення пам'яті, що виділяється.

Звільняється пам’ять за допомогою free();