Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

5.5.2. "Безрозмірна" ініціалізація масивів

Припустимо, що ми використовуємо такий варіант ініціалізації масивів для побудови таблиці повідомлень про помилки:

char e1[14] = "Ділення на 0\n";

char е2[23] = "Кінець файлу\n";

char е3|[21] = "У доступі відмовлено\n";

Неважко припустити, що вручну незручно підраховувати символи у кожному повідомленні, щоб визначити коректний розмір масиву. На щастя, у мові програмування C++ передбачено можливість автоматичного визначення довжини масивів шляхом використання їх "безрозмірного" формату. Якщо в настанові ініціалізації масиву не вказано його розмір, то мова програмування C++ автоматично створить масив, розмір якого буде достатнім для зберігання всіх значень ініціалізацій. При такому підході попередній варіант ініціалізації масивів для побудови таблиці повідомлень про помилки можна переписати так:

char e1[] = "Ділення на 0\n";

char e2[] = "Кінець файлу\n";

char е3[] = "У доступі відмовлено \n|";

Крім зручності в первинному визначенні масивів, метод "безрозмірної" ініціалізації дає змогу змінити будь-яке повідомлення без переліку його довжини. Тим самим усувається можливість внесення помилок, викликаних випадковим прорахунком.

"Безрозмірна" ініціалізація масивів не обмежується одновимірними масивами. Під час ініціалізації багатовимірних масивів Вам треба вказати усі дані, за винятком крайньої зліва розмірності, щоб С++-компілятор міг належним чином індексувати масив. Використовуючи "безрозмірну" ініціалізацію масивів, можна створювати таблиці різної довжини, даючи змогу компіляторові автоматично виділяти область пам'яті, достатню для їх зберігання.

У такому прикладі масив sqrMas оголошується як "безрозмірний":

int sqrMas[][2] = {

1, 1,

2, 4,

3, 9,

4, 16,

5, 25,

6, 36,

7, 49,

8, 64,

9, 81,

10, 100

};

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

5.6. Масиви рядків

Існує спеціальна форма двовимірного символьного масиву, яка є масив рядків. У використанні масивів рядків немає нічого незвичайного. Наприклад, у програмуванні баз даних для з'ясування коректності команд, що вводяться користувачем, вхідні дані порівнюються з вмістом масиву рядків, у якому записано допустимі у цьому додатку команди.

5.6.1. Побудова масивів рядків

Для побудови масиву рядків використовується двовимірний символьний масив, у якому розмір лівого індексу визначає кількість рядків, а розмір правого – максимальну довжину кожного рядка. Наприклад, у процесі виконання такої настанови оголошується масив, призначений для зберігання 30 рядків завдовжки 80 символів:

char strMas2[30][80];

Масив рядків – це спеціальна форма двовимірного масиву символів.

Отримати доступ до окремого рядка достатньо просто: достатньо вказати тільки лівий індекс. Наприклад, така настанова викликає функцію gets() для запису третього рядка масиву:

gets(strMas2[2]);

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

Код програми 5.17. Демонстрація введення рядка тексту і відображення його на екрані

#include <iostream> // Для потокового введення-виведення

#include <cstdio> // Для підтримки системи введення-виведення

using namespace std; // Використання стандартного простору імен

int main()

{

int t, i;

char text[100][80];

for(t=0; t<100; t++) {

cout << t << ": ";

gets(text[t]);

if(!text[t][0]) break; // Вихід з циклу за

} // порожнім рядком.

// Відображення рядків на екрані.

for(i=0; i<t; i++)

cout << text[i] << "\n";

getch(); return 0;

}

Звернемо Вашу увагу на те, як у програмі виконується перевірка на введення порожнього рядка. Функція gets() повертає рядок нульової довжини, якщо єдиною натиснутою клавішею виявилася клавіша <Enter>. Це означає, що першим байтом у рядку буде нульовий символ. Нульове значення завжди інтерпретується як помилкове, але узяте із запереченням (!) дає значення ІСТИНА, яке дає змогу виконати негайний вихід з циклу за допомогою настанови break.