Урок №77. Масиви

  Оновл. 24 Сер 2021  | 

 15130

 ǀ   2 

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

Що таке масив?

На щастя, структури не є єдиним агрегованим типом даних в мові C++. Є ще масиви — типи даних, які дозволяють отримати доступ до всіх змінних одного і того ж типу даних через використання одного ідентифікатора.

Розглянемо випадок, коли потрібно записати результати тестів 30 студентів в класі. Без використання масиву нам доведеться виділити майже 30 однакових змінних!

З використанням масиву все набагато простіше. Наступний рядок еквівалентний коду, наведеному вище:

В оголошенні змінної масиву ми використовуємо квадратні дужки [], щоб повідомити компілятору, що це змінна масиву (а не звичайна змінна), а в дужках знаходиться кількість виділених елементів (це називається довжиною або розміром масиву).

У вищенаведеному прикладі ми оголосили фіксований масив з ім’ям testResult, довжиною 30. Фіксований масив (або “масив фіксованої довжини”) — це масив, розмір якого відомий під час компіляції. При створенні testResult, компілятор виділить 30 цілочисельних змінних.

Елементи масиву


Кожна зі змінних в масиві називається елементом. Елементи не мають своїх власних унікальних імен. Замість цього для доступу до них використовується ім’я масиву разом з оператором індексу [] і параметром, який називається індекс, і який повідомляє компілятору, який елемент ми хочемо вибрати. Цей процес називається індексуванням масиву.

У вищенаведеному прикладі першим елементом в нашому масиві є testResult[0], другий — testResult[1], десятий — testResult[9], останній — testResult[29]. Добре, що вже не потрібно відстежувати і пам’ятати купу різних (хоч і схожих) імен змінних — для доступу до різних елементів потрібно змінити тільки індекс.

Важливо: На відміну від повсякденного життя, відлік в програмуванні і в мові С++ завжди починається з 0, а не з 1!

В масиві довжиною N елементи будуть пронумеровані від 0 до N-1! Це називається діапазоном масиву.

Приклад програми з використанням масиву

Тут ми можемо спостерігати як визначення, так і індексування масиву:

Результат виконання програми:

The lowest number is 3
The sum of the first 5 numbers is 29

Типи даних і масиви


Масив може бути будь-якого типу даних. Наприклад, оголосимо масив типу double:

Результат виконання програми:

The average is 3.1

Масиви також можуть бути визначені зі структур. Наприклад:

Щоб отримати доступ до члена структури з елемента масиву, спочатку потрібно вибрати елемент масиву, потім використати оператор вибору члена структури, а потім необхідний член структури:

Індекси масивів

У мові C++ індекси масивів завжди повинні бути інтегрального типу даних (char, short, int, long, long long, bool тощо). Ці індекси можуть бути або константними значеннями, або неконстантними значеннями. Наприклад:

Оголошення масивів фіксованого розміру


При оголошенні масиву фіксованого розміру, його довжина (між квадратними дужками) повинна бути константою типу compile-time (яка визначається під час компіляції). Ось кілька різних способів оголошення масивів з фіксованим розміром:

Зверніть увагу, що в двох останніх випадках ми отримаємо помилку, оскільки довжина масиву не є константою типу compile-time. Деякі компілятори можуть дозволити використання таких масивів, але вони є некоректними відповідно до стандартів мови C++ і не повинні використовуватися в програмах, написаних на мові C++.

Трішки про динамічні масиви

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

   Масиви фіксованого розміру не можуть мати довжину, яка ґрунтується на будь-якому користувацькому вводі або іншому значенні, яке обчислюється під час виконання програми (runtime).

   Фіксовані масиви мають фіксовану довжину, яку не можна змінити.

У багатьох випадках ці обмеження є проблематичними. На щастя, мова C++ підтримує ще один тип масивів — динамічні масиви. Розмір такого масиву може бути встановлений під час виконання програми і його можна змінити. Однак створення динамічних масивів дещо складніше фіксованих, тому ми поговоримо про це детально на відповідному уроці.

Висновки

Фіксовані масиви забезпечують простий спосіб виділення та використання кількох змінних одного типу даних до тих пір, поки розмір масиву відомий під час компіляції.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (71 оцінок, середня: 4,93 з 5)
Завантаження...

Коментарів: 2

  1. Lab_U55 :

    В чому небезпека, де можна почитати детальніше ? Будь-ласка наведіть посилання чи приклад, бо практикую заголовочні файли (rrr.h) з визначеннями (описи регістрів пристроїв – #define DEVICE_REGR_NAME deviceRegrAddress), файли з узагальненими функціями (fff.h/fff.cpp) зі змінними аргументами- константами, визначеними для кожного пристрою у відповідному rrr.h , і відповідними #include “*.h” в main.cpp. Дякую!
    // Приємно вражений українською локалізацією ravesli, з повагою і вдячністю давній, але все ще непрофесійний, пошановувач-користувач !

  2. dontuo :

    цікавий факт)))

    Можна зробити ось так

    і типу воно працює)))

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *