Масиви. Частина 2. Двовимірні масиви. Масиви рядків. Багатовимірні масиви
Дана тема є продовженням теми: “Поняття масиву. Одновимірні масиви”.
Зміст
- 1. Двовимірні масиви. Приклади опису та використання
- 2. Ініціалізація двовимірних масивів. Приклад
- 3. Ініціалізація масивів рядків. Приклади
- 4. Багатовимірні масиви. Приклади опису та використання
- 5. Ініціалізація багатовимірних масивів. Приклад
- Зв’язані теми
Пошук на інших ресурсах:
1. Двовимірні масиви. Приклади опису та використання
В мові C++ є можливість використовувати двовимірні та багатовимірні масиви. Двовимірний масив – це список одновимірних масивів.
Для доступу до елементів двовимірного масиву потрібно вказати два індекси. Якщо розглядати масив як таблицю, тоді перший індекс визначає рядок. Другий індекс визначає стовпець таблиці.
Приклад 1. Опис двовимірного масиву Matr цілих чисел розміром 3×4.
int Matr[3][4]; // двовимірний масив розміром 3*4
Доступ до елементів масиву (рисунок 1):
Matr[0][0] = 23; Matr[2][3] = 41; Matr[1][2] = -8;
Рисунок 1. Доступ до елементів матриці Matr
Щоб занулити двовимірний масив Matr потрібно написати такий програмний код:
... int Matr[3][4]; // двовимірний масив розміром 3*4 int i,j; for (i=0; i<3; i++) for (j=0; j<4; j++) Matr[i][j] = 0; ...
Приклад 2. Опис двовимірної матриці Matrix дійсних чисел розміром 10×10.
float Matrix[10][10]; // матриця дійсних чисел розміром 10*10
Доступ до елементів матриці:
// доступ до елементів матриці
Matrix[2][4] = -90.3453;
Matrix[0][8] = 259.3;
Matrix[9][9] = 0.85;
Matrix[3][4] = -0.23;
Приклад занулення матриці Matrix:
// занулення матриці for (i=0; i<10; i++) for (j=0; j<10; j++) Matrix[i][j] = 0.0;
2. Ініціалізація двовимірних масивів. Приклад
Ініціалізація двовимірних та багатовимірних масивів подібна до ініціалізації одновимірних масивів. В цьому випадку список ініціалізаторів кожної розмірності береться в фігурні дужки.
Ініціалізація двовимірних (багатовимірних) масивів може бути:
- з задаванням розміру масиву;
- без задавання розміру масиву (“безрозмірна” ініціалізація).
Приклад 1. Ініціалізація двовимірного масиву M дійсних чисел розміром 3×4. Задається розмір масиву.
// ініціалізація масиву M дійсних чисел розміром 3*4 float M[3][4] = { { 0.5, -2.8, -1.0, 23.45 }, { -2.3, 0.4, 10.5, 0.8 }, { 12.5, 10.4, 5.4, 3.56 } };
Якщо у переліку вказати не всі елементи групи, тоді відсутні елементи будуть доповнюватись нульовими значеннями автоматично (рисунок 2).
// ініціалізація масиву M дійсних чисел розміром 3*4 // відсутні елементи доповнюються нулями float M[3][4] = { { 0.5, -2.8 }, { -2.3 }, { 12.5, 10.4, 5.4, 3.56 } };
Рисунок 2. Доповнення масиву нулями
Приклад 2. “Безрозмірна” ініціалізація масиву B цілих чисел.
// "безрозмірна ініціалізація масиву B int B[][4] = { { 2, -8, 3, 4 }, { -3, 50, 42, -77 }, { 11, 25, -30, 4 } };
Приклад 3. “Безрозмірна ініціалізація масиву B з доповненням нулями (рисунок 3).
// "безрозмірна ініціалізація масиву B // з доповненням нулями int B[][4] = { { 2, -8 }, { -3 }, { 11, 25, -30, 4 } };
Рисунок 3. “Безрозмірна” ініціалізація масиву B з заповненням нулями
Другий індекс масиву (стовпці) обов’язково має бути присутній. В іншому випадку компілятор видає повідомлення про помилку.
3. Ініціалізація масивів рядків. Приклади
Масив рядків також є двовимірний масив символів.
Так само як і з іншими типами даних, ініціалізація масиву рядків може бути:
- з задаванням розміру рядка;
- без задавання розміру рядка (“безрозмірна” ініціалізація).
Приклад 1. Ініціалізація масиву рядків з задаванням довжини рядка. Описується двовимірний масив рядків розміром 5×60 символів.
char Strings[5][60] = { "Text - 1", "Text - 2", "Text - 3", "Text - 4", "Text - 5" };
У вищенаведеному прикладі кожен рядок може містити до 60 символів. Якщо довжина рядка менше за 60, то значення інших символів рівне 0 (рисунок 4).
Рисунок 4. Представлення двовимірного масиву рядків у пам’яті комп’ютера
Приклад 2. “Безрозмірна” ініціалізація масиву рядків
char * Strings2[] = { "String number 1", "String #2", "Third string" };
Вищенаведений код можна записати й іншим чином
char * Strings2[3] = { "String number 1", "String #2", "Third string" };
При “безрозмірній” ініціалізації масиву рядків не потрібно “вручну” підраховувати довжину (кількість символів) рядка. Це здійснюється автоматично на етапі компілювання.
У вищенаведеному прикладі довжина першого рядка рівна 16 символів (рисунок 5). Довжина другого рядка рівна 10. Довжина третього рядка рівна 12 символів. В кінці кожного рядка слідує нульовий символ ‘\0’.
Таким чином, використання безрозмірної ініціалізації дозволяє економити пам’ять, виділену під масив.
Рисунок 5. Представлення рядків при “безрозмірній” ініціалізації
4. Багатовимірні масиви. Приклади опису та використання
// масив цілих чисел розміром 3*5*6 int MI[3][5][6]; MI[0][2][5] = 238; MI[2][4][3] = -3994; // масив дійсних чисел розміром 4*6*2*3 float MF[4][6][2][3]; MF[0][0][0][0] = -394.32f; MF[3][4][1][1] = 4.4f; MF[1][5][0][2] = 0.0f; MF[2][2][1][1] = 555.2437f;
⇑
5. Ініціалізація багатовимірних масивів. Приклад
// ініціалізація масиву M цілих чисел розміром 2*3*4 int M[2][3][4] = { { { 8, 3, -5, 2 }, { -3, 2, 8, 4 }, { 1, 0, 3, -9 } }, { { -2, 9, 5, 4 }, { 1, 0, 2, 5 }, { -8, 3, 4, 2 } } };
Схожі теми
- Масиви. Визначення масиву. Одновимірні масиви. Ініціалізація масиву
- Масиви. Приклади розв’язку поширених задач з одновимірними масивами
- Масиви. Приклади розв’язування задач на рядки символів
- Структури. Виділення пам’яті для структури. Вкладені структури. Масиви native-структур