- •Тема 5. Вказівними та операції над ними..................................................................31
- •Тема 10.Структури......................................................................................................59
- •1.1. Структура програми
- •1.2. Етапи виконання програми
- •1.3. Порядок запуску програми
- •2.1. Функції вводу/виводу мови с
- •Пріоритет виконання операцій
- •Операції присвоювання
- •4.1. Складові оператори
- •4.2. Оператори розгалуження
- •If (умова) оператор1;
- •4.3. ОператорИ циклУ
- •For (вираз_1; вираз_2; вираз_3 ) оператор;
- •4.4. Оператори переходу
- •Тема 5. Вказівники та операції над ними
- •5.1. Поняття вказівника
- •5.2. Дії над вказівниками
- •Контрольні запитання:
- •Тема 6. Робота з одновимірними масивами
- •6.2. Рядки, як одновимірні масиви символів
- •Тема 7. Двовимірні масиви
- •Наприклад:
- •Тема 8. Символьна інформація та рядки
- •8.1. Збереження символьної інформації
- •8.2. Функції вводу/виводу при роботі з рядками
- •8.3. Спеціальні функції для роботи з рядками та символами
- •Тема 9. Функції користувача
- •9.1. Функції: визначення, опис, виклик
- •9.2. Передача масивів у функцію
- •9.4. Функції зі змінною кількістю параметрів
- •Тема 10. Структури
- •Контрольні запитання:
- •Список використаної літератури
Тема 6. Робота з одновимірними масивами
СТАТИЧНІ ТА ДИНАМІЧНІ МАСИВИ
Масив – це кінцева послідовність даних одного типу. Кожен елемент масиву має однакове ім’я – ім’я масиву, і відрізняється індексом (ціле число), за яким здійснюється доступ до елемента масиву. Індекси масивів у С/С++ починаються з 0.У програмі одновимірний масив оголошується наступним чином:
<тип> <ім’я масиву> [розмір] <ініціалізація>; ,
де розмір – кількість елементів одновимірного масиву.
Після визначення ім’я масиву стає вказівником-константою, значення якого є незмінним і становить адресу першого (нульового) елемента масиву.
За способом розміщення масиви поділяються на статичні та динамічні. Розмір статичного масиву можна задавати константою або константним виразом. Оскільки ділянка у оперативній пам’яті під масив задається на етапі компіляції і її розмір визначається типом елементів масиву та їх кількістю, розмірність масиву повинна бути визначена у тексті програми, а не підчас її виконання. Для визначення масиву змінного розміру використовується механізм динамічного виділення пам’яті.
Наприклад:
- оголошення одновимірного масиву з п’яти елементів цілого типу:
int a[5];
- динамічне виділення пам’яті під 10 цілочисельних елементів:
int*m=new int [10];
Враховуючи те, що імя масиву є вказівником, зрозумілим стає зміст останньої операції: вказівникові наintmприсвоюється початкова адреса ділянки памяті, виділеної у динамічній області під 10 цілочисельних елементів.
Перевагою динамічних масивів є те, що їх розмірність може бути змінною, тобто у програмі можна працювати з масивами довільного розміру, не вносячи змін до тексту програми. Проте, динамічні масиви не можна ініціалізувати при визначенні і вони за замовчуванням не заповнюються нулями.
Натомість ініціалізацію статичних масивів можна здійснювати при їх визначенні. При цьому слід зауважити, що у С/С++ не перевіряється вихід індексу за межі масиву.
Наприклад:
double d[] = {1, 2, 3, 4, 5};
float f[10]={1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.0};
При поєднанні визначення масиву з ініціалізацією його розмірність у квадратних дужках можна не вказувати. Довжину масиву компілятор визначить за кількістю значень, наведених у фігурних дужках.
Для звернення до елементів масивів використовуються два способи, наприклад до 4-го (по порядку) елемента масиву aможна звернутися якa[3]або*(a+3). Останнє звернення базується на факті, що ім’я масиву є одночасно вказівником на його нульовий елемент, а зміщення вказівника у пам’яті відбувається на величину індексу помножену на розмір типу елементів масиву у байтах.
|
|
|
|
|
0 |
1 |
2 |
3 |
4 |
а(а+3)
Пам’ять, зарезервовану під динамічний масив за допомогою new[ ],потрібно звільняти операторомdelete [] <імя массиву>.
Отже, якщо кількість елементів масиву відома до виконання програми, краще використовувати статичний масив, розмірність якого позначити як значення іменованої константи. Якщо розмірність масиву необхідно задавати в процесі виконання програми (до введення його елементів), то доцільно створювати динамічний масив.