Předpoklad: Pole v C
Vícerozměrné pole lze nazvat jako pole polí, které ukládá homogenní data v tabulkové formě. Data ve vícerozměrných polích jsou obecně uložena v paměti v pořadí hlavní řádek.
The obecná forma deklarace N-rozměrných polí je zobrazen níže.
Syntax:
data_type array_name[size1][size2]....[sizeN];>
- datový typ : Typ dat, která mají být uložena v poli.
- název_pole : Název pole.
- velikost1, velikost2,…, velikostN : Velikost každého rozměru.
Příklady :
generičnost v Javě
Two dimensional array: int two_d[10][20]; Three dimensional array: int three_d[10][20][30];>
Velikost vícerozměrných polí:
Celkový počet prvků, které lze uložit do vícerozměrného pole, lze vypočítat vynásobením velikosti všech rozměrů.
Například:
- Pole int x[10][20] lze uložit celkem (10*20) = 200 prvků.
- Podobně pole int x[5][10][20] lze uložit celkem (5*10*20) = 1000 prvků.
Abychom získali velikost pole v bajtech, vynásobíme velikost jednoho prvku celkovým počtem prvků v poli.
Například:
- Velikost pole int x[10][20] = 10 * 20 * 4 = 800 bajtů. (kde int = 4 bajty)
- Podobně velikost int x[5][10][20] = 5 * 10 * 20 * 4 = 4 000 bajtů. (kde int = 4 bajty)
Nejčastěji používané formy vícerozměrného pole jsou:
- Dvourozměrné pole
- Trojrozměrné pole
Dvourozměrné pole v C
A dvourozměrné pole nebo 2D pole v C je nejjednodušší forma vícerozměrného pole. Dvourozměrné pole si můžeme představit jako pole jednorozměrných polí uspořádaných nad sebou, které tvoří tabulku s „x“ řádky a „y“ sloupci, kde se číslo řádku pohybuje od 0 do (x-1) a číslo sloupce. se pohybuje od 0 do (y-1).

Grafické znázornění dvourozměrného pole o velikosti 3 x 3
Deklarace dvourozměrného pole v C
Základní forma deklarace 2D pole s X řádky a a sloupců v C je uveden níže.
Syntax:
data_type array_name[x][y];>
kde,
- datový typ: Typ dat, která mají být uložena v každém prvku.
- název_pole: název pole
- X: Počet řádků.
- a: Počet sloupců.
Můžeme deklarovat dvourozměrné celočíselné pole řekněme „x“ s 10 řádky a 20 sloupci jako:
Příklad:
int x[10][20];>
Poznámka: V tomto typu deklarace je poli přidělena paměť v zásobníku a velikost pole by měla být známa v době kompilace, tj. velikost pole je pevná. Pole můžeme také vytvořit dynamicky v C pomocí zmíněných metod tady.
Inicializace dvourozměrných polí v C
Různé způsoby, kterými lze inicializovat 2D pole, jsou následující:
- Použití seznamu inicializátorů
- Použití smyček
1. Inicializace 2D pole pomocí seznamu inicializátorů
Můžeme inicializovat 2D pole v C pomocí seznamu inicializátorů, jak je znázorněno v příkladu níže.
První metoda:
int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}> Výše uvedené pole má 3 řádky a 4 sloupce. Prvky ve složených závorkách zleva doprava jsou v tabulce uloženy také zleva doprava. Prvky budou v poli vyplněny v pořadí: první 4 prvky zleva budou vyplněny v prvním řádku, další 4 prvky ve druhém řádku atd.
Druhá metoda (lepší) :
int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};> Tento typ inicializace využívá vnořené závorky. Každá sada vnitřních závorek představuje jednu řadu. Ve výše uvedeném příkladu jsou celkem tři řady, takže existují tři sady vnitřních výztuh. Výhodou této metody je snadnější pochopení.
Poznámka: Počet prvků v seznamu inicializátoru by měl být vždy menší nebo roven celkovému počtu prvků v poli.
Můžeme také deklarovat pole bez definování velikosti řádku, pokud používáme inicializaci seznamu. Kompilátor v tomto případě automaticky odvodí velikost pole:
data_type array_name[][y] = {...} ;> Stále je povinné definovat počet sloupců.
2. Inicializace 2D pole pomocí Loops
Můžeme použít libovolnou smyčku C k inicializaci každého člena 2D pole jeden po druhém, jak je znázorněno v níže uvedeném příkladu.
Příklad:
int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }> Tato metoda je užitečná, když hodnoty každého prvku mají nějaký sekvenční vztah.
Přístup k prvkům dvourozměrných polí v C
K prvkům ve 2D polích se přistupuje pomocí indexů řádků a indexů sloupců. Na každý prvek ve 2D poli lze odkazovat takto:
Syntax:
array_name[i][j]>
kde,
- já: Index řádku.
- j: Index sloupce.
Příklad:
int x[2][1];>
Výše uvedený příklad představuje prvek přítomný ve třetím řádku a druhém sloupci.
Poznámka : V polích, pokud je velikost pole N. Jeho index bude od 0 do N-1. Pro index řádku 2 je tedy číslo řádku 2+1 = 3. Pro výstup všech prvků dvourozměrného pole můžeme použít vnořené smyčky for. Budeme potřebovat dva' pro „smyčky“. Jeden pro procházení řádků a druhý pro procházení sloupců.
Pro tisk celého pole přistupujeme ke každému prvku jeden po druhém pomocí smyček. Pořadí průchodu může být pořadí hlavní řádek nebo pořadí hlavní sloupec v závislosti na požadavku. Níže uvedený příklad demonstruje procházení hlavní řady 2D pole.
Příklad:
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> |
jaká je velikost mého monitoru
>
>Výstup
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>
Časová složitost: O(N*M) , kde N(zde 3) a M(zde 2) jsou počty řádků a sloupců.
Vesmírná složitost:O(1)
Jak jsou 2D pole uložena v paměti?
Prvky 2-D pole musí být uloženy souvisle v paměti. Protože počítače mají lineární paměťové adresy, musí být 2-D pole linearizována, aby bylo možné jejich uložení. Linearizaci prvků pole lze dosáhnout dvěma způsoby:
- hlavní řada- Technika linearizace ukládá nejprve první řádek pole, poté druhý řádek pole, poté třetí řádek atd. (tj. prvky jsou uloženy po řádcích. Řádky jsou uvedeny na základě sloupců)
- Sloupec-hlavní – Tato technika linearizace ukládá nejprve první sloupec, poté druhý sloupec, poté třetí sloupec atd., tj. (prvky jsou uloženy po sloupcích. Sloupce jsou uvedeny na základě řádků)
Počítač nesleduje adresy všech prvků pole, ale sleduje základní adresu (počáteční adresa úplně prvního prvku) a v případě potřeby vypočítá adresy prvků.
Více informací naleznete v článku – Výpočet adresy prvku 1-D, 2-D a 3-D
Trojrozměrné pole v C
A Trojrozměrné pole nebo 3D pole v C je kolekce dvourozměrných polí. Lze jej vizualizovat jako více 2D polí naskládaných na sebe.

Grafické znázornění trojrozměrného pole o velikosti 3 x 3 x 3
Deklarace trojrozměrného pole v C
Můžeme deklarovat 3D pole pomocí X 2D pole má každé a řádky a S sloupce pomocí syntaxe uvedené níže.
Syntax:
data_type array_name[x][y][z];>
- datový typ: Typ dat, která mají být uložena v každém prvku.
- název_pole: název pole
- X: Počet 2D polí.
- a: Počet řádků v každém 2D poli.
- S: Počet sloupců v každém 2D poli.
Příklad:
int array[3][3][3];>
Inicializace trojrozměrného pole v C
Inicializace ve 3D poli je stejná jako u 2D polí. Rozdíl je v tom, že jak se zvyšuje počet rozměrů, tak se zvyšuje i počet vnořených závorek.
3D pole v C lze inicializovat pomocí:
- Seznam inicializátorů
- Smyčky
Inicializace 3D Array pomocí seznamu inicializátorů
Metoda 1 :
řazení v seznamu polí v jazyce Java
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};> Metoda 2 (lepší) :
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} } };> Opět, stejně jako 2D pole, můžeme také deklarovat 3D pole bez určení velikosti prvních rozměrů, pokud pro inicializaci používáme seznam inicializátorů. Kompilátor automaticky odvodí velikost prvního rozměru. Ještě ale musíme upřesnit zbytek rozměrů.
data_type array_name[][y][z] = {....};> Inicializace 3D Array pomocí smyček
Je to také podobné jako u 2D pole s jednou více vnořenou smyčkou pro přístup k jedné další dimenzi.
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); } } }> Přístup k prvkům v trojrozměrném poli v C
Přístup k prvkům ve 3D polích je také podobný jako u 2D polí. Rozdíl je v tom, že musíme použít tři smyčky místo dvou smyček pro jeden další rozměr v 3D polích.
Syntax:
array_name[x][y][z]>
kde,
- X: Index 2D pole.
- a: Index tohoto řádku 2D pole.
- S: Index tohoto sloupce 2D pole.
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);> }> |
>
>Výstup
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>
Podobnými způsoby můžeme vytvářet pole s libovolným počtem rozměrů. S narůstajícím počtem dimenzí se však také zvyšuje složitost. Nejpoužívanějším vícerozměrným polem je dvourozměrné pole.
Pole také úzce souvisí s ukazateli v jazyce C. Chcete-li se dozvědět více o vztahu polí s ukazateli v C, viz tento článek.