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) more TBA!

  • ccpp/array.1589791569.txt.gz
  • Poslední úprava: 2020/05/18 10:46
  • autor: bures