ccpp:array

Toto je starší verze dokumentu!


Datový typ pole

Pole představuje jeden ze strukturovaných datových typů - ukládá pod jedním identifikátorem více hodnot. Hodnoty jsou v poli uloženy v řadě za sebou a jsou očíslované od 0 pomocí tzv. indexu. Všechny honoty v rámci jednoho pole mají jeden stejný datový typ.

Nejzákladnější verze pole je jednorozměré, které si můžeme představit jako v následující ukázce:

+----+----+----+----+----+----+----+
| 13 | 41 | 5  | 17 | 8  | 6  | 14 |  Hodnoty v poli
+----+----+----+----+----+----+----+
  0    1    2    3    4    5    6     Indexy  

Syntaxe deklarace pole vypadá následovně: datovy_typ identifikator[pocet_prvku];, kde počet prvků musí být konstantní (být znám během překladu). Pole je po deklaraci neinicializované stejně jako v případě proměnných jednoduchých datových typů.

Příklad

int pole1[3]; // Pole tří celých čísel
double pole2[5]; // Pole pěti čísel s plovoucí čárkou
char pole3[10]; // Pole deseti znaků

Pole lze v rámci deklarace rovnou inicializovat seznamem hodnot. Pokud je zadáno méně hodnot, než je velikost pole, je zbytek doplněn nulami. Pokud je pole v rámci deklarace inicializováno, nemusí být uveden počet prvků - odvodí se z hodnot.

Příklad

int pole[4] = {1, 2, 3, 4}; // inicializace pole hodnotami 1, 2, 3, 4.
char pole2[] = {'a', 'b', 'c', 'd', 'e', 'f'}; // inicializace bez uvedení počtu prvků

Pokud chceme z pole získat konkrétní hodnotu, musíme k tomu využít její index ve formátu identifikator[index]. Prvky v poli můžeme číst i přepisovat (pokud není celé pole nastavené pouze pro čtení klíčovým slovem const). Položky jsou indexované od 0.

Příklad

const int POCET = 3;
int arr[POCET] = {1, 2, 3};
 
arr[0] = 42;
arr[2] = 13;
 
printf("Prvky pole jsou: %d, %d, %d.\n", arr[0], arr[1], arr[2]); 

Pole může mít i více rozměrů jak jeden. V případě dvou rozměrů si lze pole představit jako tabulku s buňkami (řádky, sloupce) u tří rozměrů jako krychli jejíž části se adresují pomocí souřadnic (např. X, Y, Z). Počet rozměrů není striktně omezen a může značně přesahovat naši fantazii.

Vícerozměrné pole deklarujeme uvedením více hranatých závorek za sebou: datovy_typ identifikator[rozmer1][rozmer2][rozmer3]…;, kde rozměr# představuje velikost pole v daném rozměru.

Příklady deklarací vícerozměrných polí

// tabulka obsahující 3 řádky a 5 sloupců
int tabulka[3][5];
 
// krychle o velikosti 5 obsahující čísla s plovoucí čárkou
cont int velikost = 5;
float krychle[velikost][velikost][velikost]
 
// pole o 5 rozměrech alokující pro každou sekundu z století jeden bajt s možností adresace na rok:den:hodinu:minutu:sekundu
char stoleti[100][365][24][60][60];

Zkuste spočítat jak by bylo veliké pole stoleti, za předpokladu, že velikost se s každým dalším rozměrem násobí. (počítáme tedy zprava doleva)

Prvky pole můžeme opět v rámci deklarace rovnou inicializovat. Opět pomocí složených závorek, které se ale tentokrát do sebe zanořují podle rozměrů. Je třeba uvažovat nad celou věcí jako nad „polem polí“.

Příklad

Matice identity Identity matrix o velikosti 3 uložená po řádcích.

float identity[3][3] = { {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f} };
                       ^                                         ^
                       |                                         |
   První rozměr (řádky) - obsahuje 3 další pole                  |
                                                        Druhý rozměr (3. sloupec) - obsahuje 3 položky typu float

more TBA!

  • ccpp/array.1589793622.txt.gz
  • Poslední úprava: 2020/05/18 11:20
  • autor: bures