Лекція 11. Одновимірні масиви
План:
-
Визначення одновимірного масиву
-
Операції на одновимірними масивами
-
Одновимірні динамічні масиви
-
Оголошення одновимірних динамічних масивів
-
Виділення і звільнення пам'яті
-
Звернення до елементів одновимірного динамічного масиву
Основні визначення
Масив – однорідна, фіксована за розміром і конфігурацією, послідовність елементів простої або складної структури, впорядкованих по індексах і розташованих в пам'яті підряд. Елементи цієї послідовності даних називаються елементами масиву. Нумерація елементів виконується індексними послідовностями: кожний елемент масиву має свій індекс.
Масив визначається ім'ям і розмірністю – кількістю індексів, необхідних для вказівки місцезнаходження елемента масиву (для одновимірного масиву – одним, для двомірного – двома і т.д.). Масив називається багатовимірним при кількості індексів більше за одне.
В С++ ознакою одновимірного масиву є наявність парних дужок [ ], в яких указується кількість елементів масиву (його довжина, розмір), зафіксована у визначенні масиву і в процесі роботи програми не змінна. Розмір може бути заданий тільки цілою додатньою константою або константним виразом.
Визначення одновимірного масиву:
Тип_Ім'я [розмір масиву];
В деяких випадках допустимий опис масиву без вказівки кількості його елементів:
Extern int array[ ];
До окремого елемента масиву можна звернутися за допомогою змінної з індексом: імені масиву (єдиного для всіх елементів) і одного або декількох індексів, в залежності ось розмірності масиву. Індекс може мінятися ось 0 до n-1, де n – кількість елементів масиву, його розмір. Максимальний індекс елемента завжди на 1 менше розміру масиву.
Наприклад:
char buffer[81]; //масив складається з елементів buffer[0]. buffer[80] типу char;
int key[4]; //масив складається з елементів key[0]. key[3] типу int;
float а[10]; //масив складається з елементів a[0]. a[9] типу float;
Доступ до елемента масиву:
buffer[80] key[3] а[1] а[9]
Автоматичний контроль виходу індексу за межі масиву не проводиться, тому програміст повинен стежити за цим самостійно. Типовою помилкою при використовуванні масивів є звернення до неіснуючого елемента, тобто вихід індексу за допустиме значення.
При визначенні масиву його розмір може не бути вказаний. В цьому випадку повинна бути присутній ініціалізація, і компілятор виділить пам'ять по кількості ініціалізували що значиться. Ті, що ініціалізували, значення для масивів записуються у фігурних дужках. Значення елементам привласнюються по порядку.
Якщо елементів в масиві більше, ніж ініціалізацій елементи, для яких значення не вказані, обнуляються:
int b[5]={3, 2, 1}; //масив цілих значиться, займає 5*4=20 байтів //b[0]=3; b[1]=2; b[2]=1; b[3]=0; b[4]=0;
float f[10]; //масив займає 10*4=40 байтів
double x [ ] = {1.5, 2.8, 3.4, 0.5, 7.3} ; //масив дійсних змінних займає 5*8=40 байтів
char str [ ] = {‘a’, ‘b’, ‘+’}; //масив символів, займає 3 байти
Якщо елементів в масиві менше ніж ініціалізацій, то визначення масиву буде помилковим:
double B[]; //помилка у визначенні – немає розміру
double B[3]={1, 2, 3, 4, 5}; //помилка ініціалізації
Для статичних або зовнішніх масивів компілятор виконує ініціалізацію за умовчанням (всім елементам привласнюються нульові значення).
Найбільш часто масив використовується для зберігання даних. Наприклад, структура з трьох що значиться типу float, проіндексованих заданим діапазоном цілих чисел від 0 до 2 оголошується записом: float V [3];
В пам'яті елементи V[0], V[1], V[2] розташовуються послідовно:
V[0] |
V[1] |
V[2] |
Адрес масиву в пам'яті співпадає з адресою його першого елемента (елемента із значенням індексу рівним лівій межі діапазону індексів).
Будь-яким полином можна описати масивом його коефіцієнтів a0, a1 ., ak-1, ak, в якому роль індексу грає ступінь змінної х: а, а, .a[k-1], а[k].
Характеристики масиву
У якості характеристик масиву виступають:
-
Тип – загальний тип елементів масиву.
-
Розмірність – кількість індексів масиву (а[10] – одновимірний масив; b[3][5] – двомірний масив; з[2][3][5] – тривимірний і т.д.)
-
Розмір (кількість елементів) по кожній з размірностей.
Тип компонентів. Тип індексів
Елементами масиву можуть бути дані будь-якого типу, включаючи похідні (масиви, терміни, структури, файли). Як індекси можуть використовуватися цілі позитивні константи або константні вирази. Рекомендується задавати розміри масиву у вигляді іменованих або препроцесорних констант. При необхідності такі константи легко змінити, адаптуючи їх до різних наборів початкових даних, хоча і з повторною трансляцією програми. Крім того, завдання значення такої константи достатньо великим, дозволить працювати з масивами даного типу будь-якого меншого розміру і як би імітує змінну довжину статичного масиву.
Приклад використовування при визначенні масиву заздалегідь певних констант:
#define до 50 const int n=10; const int m=20;
double а [n]; char b [m];
double ar[k];