- •Міністерство освіти та науки україни житомирський державний технологiчний університет
- •Загальні вказівки
- •Вимоги щодо оформлення робіт
- •Теоретичні відомості до першої лабораторної роботи.
- •Елементи мови Сі
- •1.1 Алфавіт
- •1.2. Ідентифікатори
- •1.3. Константи
- •1.4. Коментарі
- •Оператори
- •2.1. Оператор розгалуження if
- •2.2. Оператор switch
- •2.3. Оператор циклу з передумовою while
- •2.4. Оператор циклу з постумовою do … while
- •2.5. Оператор циклу for
- •2.6. Оператор розриву break
- •2.7. Оператор продовження continue
- •2.8. Оператор переходу goto
- •2.9. "Порожній" оператор
- •2.10. "Складений" оператор
- •Лабораторна робота №1 "Прості типи даних. Базові конструкції мови с"
- •Теоретичні відомості до другої лабораторної роботи
- •Лабораторна робота №2 "Цикли та розгалуження. Функції та їх застосування".
- •Теоретичні відомості до третьої лабораторної роботи
- •1.1. Оголошення та звертання в одновимірних масивах
- •1.2. Оголошення та звертання до багатовимірних масивів
- •Символьні рядки
- •2.1. Основні методи ініціалізації символьних рядків.
- •2.2. Функції роботи з рядками
- •Лабораторна робота №3
- •Теоретичні відомості до четвертої лабораторної роботи
- •Структури
- •1.1. Оголошення структури
- •1.2. Масиви структур
- •1.3. Динамічна пам’ять
- •Лабораторна робота №4
- •Теоретичні відомості до п’ятої лабораторної роботи
- •Лабораторна робота №5 "Робота з файлами. Обробка текстової інформації."
Теоретичні відомості до четвертої лабораторної роботи
Структури
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();