Необхідна умова: Масиви на C
Багатовимірний масив можна назвати масивом масивів, який зберігає однорідні дані в табличній формі. Дані в багатовимірних масивах зазвичай зберігаються в пам’яті в порядку старших рядків.
The загальна форма оголошення N-вимірних масивів показано нижче.
Синтаксис:
data_type array_name[size1][size2]....[sizeN];>
- тип даних : Тип даних, які будуть зберігатися в масиві.
- ім'я_масиву : ім'я масиву.
- розмір1, розмір2,…, розмірN : Розмір кожного виміру.
Приклади :
рядок для символу в java
Two dimensional array: int two_d[10][20]; Three dimensional array: int three_d[10][20][30];>
Розмір багатовимірних масивів:
Загальну кількість елементів, які можуть зберігатися в багатовимірному масиві, можна обчислити шляхом множення розмірів усіх розмірів.
Наприклад:
- Масив int x[10][20] може зберігати всього (10*20) = 200 елементів.
- Аналогічно масив int x[5][10][20] може зберігати всього (5*10*20) = 1000 елементів.
Щоб отримати розмір масиву в байтах, ми множимо розмір окремого елемента на загальну кількість елементів у масиві.
Наприклад:
- Розмір масиву int x[10][20] = 10 * 20 * 4 = 800 байт. (де int = 4 байти)
- Так само розмір int x[5][10][20] = 5 * 10 * 20 * 4 = 4000 байт. (де int = 4 байти)
Найбільш часто використовувані форми багатовимірного масиву:
- Двовимірний масив
- Тривимірний масив
Двовимірний масив на C
А двовимірний масив або 2D масив в C є найпростішою формою багатовимірного масиву. Ми можемо візуалізувати двовимірний масив як масив одновимірних масивів, розташованих один над одним, утворюючи таблицю з рядками «x» і стовпцями «y», де номер рядка коливається від 0 до (x-1), а номер стовпця коливається від 0 до (y-1).

Графічне представлення двовимірного масиву розміром 3 x 3
Оголошення двовимірного масиву на C
Основна форма оголошення 2D масиву з х ряди і і стовпців у C показано нижче.
Синтаксис:
data_type array_name[x][y];>
де,
- тип даних: Тип даних, які будуть зберігатися в кожному елементі.
- ім'я_масиву: ім'я масиву
- x: Кількість рядів.
- і: Кількість колон.
Ми можемо оголосити двовимірний масив цілих чисел, скажімо «x», з 10 рядків і 20 стовпців як:
приклад:
int x[10][20];>
Примітка. У цьому типі оголошення масиву виділяється пам’ять у стеку, а розмір масиву має бути відомий під час компіляції, тобто розмір масиву є фіксованим. Ми також можемо створити масив динамічно в C за допомогою згаданих методів тут.
Ініціалізація двовимірних масивів у C
Нижче наведено різні способи ініціалізації двовимірного масиву:
- Використання списку ініціалізаторів
- Використання циклів
1. Ініціалізація 2D-масиву за допомогою Initializer List
Ми можемо ініціалізувати 2D-масив у C за допомогою списку ініціалізаторів, як показано в прикладі нижче.
Перший спосіб:
int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}>
Наведений вище масив складається з 3 рядків і 4 стовпців. Елементи в дужках зліва направо зберігаються в таблиці також зліва направо. Елементи масиву будуть заповнені по порядку: перші 4 елементи зліва будуть заповнені в першому рядку, наступні 4 елементи в другому рядку і так далі.
Другий спосіб (кращий) :
int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};>
Цей тип ініціалізації використовує вкладені дужки. Кожен набір внутрішніх дужок представляє один ряд. У наведеному вище прикладі загалом є три ряди, тому є три набори внутрішніх дужок. Перевага цього методу в тому, що його легше зрозуміти.
Примітка. Кількість елементів у списку ініціалізатора завжди має бути меншою або дорівнювати загальній кількості елементів у масиві.
Ми також можемо оголосити масив без визначення розміру рядка, якщо використовуємо ініціалізацію списку. У цьому випадку компілятор автоматично визначить розмір масиву:
data_type array_name[][y] = {...} ;>
Визначення кількості стовпців залишається обов’язковим.
2. Ініціалізація 2D масиву за допомогою циклів
Ми можемо використовувати будь-який цикл C для ініціалізації кожного члена 2D-масиву по одному, як показано в прикладі нижче.
приклад:
int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }>
Цей метод корисний, коли значення кожного елемента мають певне послідовне відношення.
Доступ до елементів двовимірних масивів у C
Доступ до елементів у 2D-масивах здійснюється за допомогою індексів рядків та індексів стовпців. Кожен елемент у двовимірному масиві можна позначити:
Синтаксис:
array_name[i][j]>
де,
- я: Індекс рядка.
- j: Індекс стовпця.
приклад:
int x[2][1];>
Наведений вище приклад представляє елемент, присутній у третьому рядку та другому стовпці.
Примітка : у масивах, якщо розмір масиву N. Його індекс буде від 0 до N-1. Отже, для індексу рядка 2 номер рядка дорівнює 2+1 = 3. Щоб вивести всі елементи двовимірного масиву, ми можемо використовувати вкладені цикли for. Нам буде потрібно два для «петлі. Один для обходу рядків, інший для обходу стовпців.
Для друку всього масиву ми звертаємося до кожного елемента по одному за допомогою циклів. Порядок обходу може бути порядком основних рядків або порядком основних стовпців залежно від вимоги. Наведений нижче приклад демонструє обхід 2D-масиву по рядках.
приклад:
C
// C Program to print the elements of a> // Two-Dimensional array> #include> int> main(> void> )> {> > // an array with 3 rows and 2 columns.> > int> x[3][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };> > // output each array element's value> > for> (> int> i = 0; i <3; i++) {> > for> (> int> j = 0; j <2; j++) {> > printf> (> 'Element at x[%i][%i]: '> , i, j);> > printf> (> '%d
'> , x[i][j]);> > }> > }> > return> (0);> }> // This code is contributed by sarajadhav12052009> |
>
хеш-таблиця java
>Вихід
Element at x[0][0]: 0 Element at x[0][1]: 1 Element at x[1][0]: 2 Element at x[1][1]: 3 Element at x[2][0]: 4 Element at x[2][1]: 5>
Часова складність: O(N*M) , де N(тут 3) і M(тут 2) – кількість рядків і стовпців відповідно.
Просторова складність: O(1)
Як 2D-масиви зберігаються в пам'яті?
Елементи двовимірного масиву мають зберігатися в пам’яті безперервно. Оскільки комп’ютери мають лінійні адреси пам’яті, двовимірні масиви мають бути лінеаризовані, щоб забезпечити їхнє зберігання. Існує два способи досягнення лінеаризації елементів масиву:
- ряд-мажор- Техніка лінеаризації зберігає спочатку перший рядок масиву, потім другий рядок масиву, потім третій рядок і так далі. (тобто елементи зберігаються по рядках. Рядки перераховуються на основі стовпців)
- Колонка-мажор – Ця техніка лінеаризації зберігає спочатку перший стовпець, потім другий стовпець, потім третій стовпець і так далі, тобто (елементи зберігаються по стовпцях. Стовпці перераховуються на основі рядків)
Комп’ютер не відстежує адреси всіх елементів масиву, але відстежує базову адресу (початкову адресу самого першого елемента) і обчислює адреси елементів, коли потрібно.
Щоб дізнатися більше, перегляньте статтю – Розрахунок адреси елемента 1-D, 2-D і 3-D
Тривимірний масив на C
А Тривимірний масив або 3D масив у C — це набір двовимірних масивів. Його можна візуалізувати як кілька двовимірних масивів, складених один на одного.

Графічне представлення тривимірного масиву розміром 3 x 3 x 3
Оголошення тривимірного масиву на C
Ми можемо оголосити 3D-масив за допомогою х 2D масиви, кожен з яких має і ряди і с стовпців, використовуючи наведений нижче синтаксис.
Синтаксис:
data_type array_name[x][y][z];>
- тип даних: Тип даних, які будуть зберігатися в кожному елементі.
- ім'я_масиву: назва масиву
- x: Кількість 2D масивів.
- і: Кількість рядків у кожному двовимірному масиві.
- з: Кількість стовпців у кожному двовимірному масиві.
приклад:
int array[3][3][3];>
Ініціалізація тривимірного масиву в C
Ініціалізація в 3D-масиві така ж, як і у 2D-масивах. Різниця полягає в тому, що зі збільшенням кількості вимірів кількість вкладених дужок також збільшуватиметься.
Тривимірний масив у C можна ініціалізувати за допомогою:
- Список ініціалізаторів
- Петлі
Ініціалізація 3D-масиву за допомогою списку ініціалізаторів
Спосіб 1 :
int x[2][3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};>
Спосіб 2 (краще) :
int x[2][3][4] = { { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} }, { {12,13,14,15}, {16,17,18,19}, {20,21,22,23} } };>
Знову ж таки, як і 2D-масиви, ми також можемо оголосити 3D-масиви без визначення розміру перших розмірів, якщо ми використовуємо список ініціалізаторів для ініціалізації. Компілятор автоматично виведе розмір першого виміру. Але нам ще потрібно вказати решту розмірів.
перетворення рядка java в ціле
data_type array_name[][y][z] = {....};>
Ініціалізація тривимірного масиву за допомогою циклів
Це також схоже на 2D-масив з додатковим вкладеним циклом для доступу до ще одного виміру.
int x[2][3][4]; for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { for (int k=0; k<4; k++) { x[i][j][k] = (some_value); } } }>
Доступ до елементів у тривимірному масиві на C
Доступ до елементів у 3D-масивах також подібний до 2D-масивів. Різниця полягає в тому, що ми повинні використовувати три цикли замість двох для одного додаткового виміру в 3D-масивах.
Синтаксис:
array_name[x][y][z]>
де,
- x: Індекс двовимірного масиву.
- і: Індекс цього рядка двовимірного масиву.
- з: Індекс цього стовпця двовимірного масиву.
C
// C program to print elements of Three-Dimensional Array> #include> int> main(> void> )> {> > // initializing the 3-dimensional array> > int> x[2][3][2] = { { { 0, 1 }, { 2, 3 }, { 4, 5 } },> > { { 6, 7 }, { 8, 9 }, { 10, 11 } } };> > // output each element's value> > for> (> int> i = 0; i <2; ++i) {> > for> (> int> j = 0; j <3; ++j) {> > for> (> int> k = 0; k <2; ++k) {> > printf> (> 'Element at x[%i][%i][%i] = %d
'> , i,> > j, k, x[i][j][k]);> > }> > }> > }> > return> (0);> }> |
>
>Вихід
Element at x[0][0][0] = 0 Element at x[0][0][1] = 1 Element at x[0][1][0] = 2 Element at x[0][1][1] = 3 Element at x[0][2][0] = 4 Element at x[0][2][1] = 5 Element at x[1][0][0] = 6 Element at x[1][0][1] = 7 Element at x[1][1][0] = 8 Element at x[1][1][1] = 9 Element at x[1][2][0] = 10 Element at x[1][2][1] = 11>
Таким же чином ми можемо створювати масиви з будь-якою кількістю вимірів. Однак складність також зростає зі збільшенням кількості вимірів. Найбільш використовуваним багатовимірним масивом є двовимірний масив.
Масиви також тісно пов’язані з покажчиками в мові C. Щоб дізнатися більше про зв’язок масивів із покажчиками в C, див це стаття.