Proměnnou typu pole je výhodné použít v případě, že potřebujete manipulovat se skupinou souvisejících objektů. Zjednodušeně se dá uvést, že pole Vám umožní uložit a přistupovat k množině objektů stejného typu v rámci jedné proměnné. Na proměnnou typu pole je možné v ARX pohlížet jako na objekt, který ukazuje na množinu dalších objektů.
datový_typ_prvků_pole jméno_pole[počet];
datový_typ_prvků_pole | |||
Povinný. Stanový datový typ prvků pole. Zároveň určuje i velikost potřebné paměti. | |||
jméno_pole | |||
Povinné. Identifikátor proměnné typu pole. | |||
počet | |||
Povinný. Určení počtu položek v poli. |
Deklarace vícerozměrného pole je obdobné jako deklarace jednorozměrného pole. Deklarace vícerozměrného pole se liší pouze v přidání dvojice hranatých závorek pro každý další rozměr:
datový_typ_prvků_pole jméno_pole[počet1][počet2]...[početn];
datový_typ_prvků_pole | |||
Povinný. Stanový datový typ prvků pole. Zároveň určuje i velikost potřebné paměti. | |||
jméno_pole | |||
Povinné. Identifikátor proměnné typu pole. | |||
počet1, počet2 .. početn | |||
Povinný. Určení počtu položek v daném rozměru pole. |
Počet prvků pole musí být zadán konstantním kladným výrazem. V některých speciálních případech je možné vynechat při deklaraci údaj o počtu prvků pole:
Jazyk C++ zakazuje použití následujících typů pro prvky pole:
V programovacím jazyku C++ je možné využít možnosti inicializace pole při definici. V tomto případě uvedeme za identifikátorem pole rovnítko a ve složených závorkách zadáme jednotlivé hodnoty prvků. Při inicializaci není nutné zadávat hodnoty všech prvků. Prvky, které neinicializujeme se musí nacházet v souvislém bloku na konci pole.
int prvniPole[4] = {1, 3, 5, 7}; // vytvoření a inicializace pole. Hodnoty pole budou 1, 3, 5, 7 int druhePole[6] = {1, 3}; // vytvoření a inicializace pole. // Hodnoty pole budou 1, 3, 0, 0, 0, 0 float tretiPole[] = {1.1, 2.2, 3.3, 4.4} // vytvoření a inicializace pole o třech prvcích int ctvrtePole[][2] = { {0, 0}, {1, 1}, {2, 2}, }; // vytvoření a inicializace dvourozměrného pole int patePole[3][2] = {0, 0, 1, 1, 2, 2}; // jiný způsob vytvoření a inicializace předchozího pole
Každý prvek v poli má svůj specifický index (uvádí se v hranatých závorkách za jménem proměnné pole). Indexování pole je v ARX podobné jako v C/C++. První prvek pole má index = 0, druhý prvek rovný 1 atd. Poslední prvek má index (počet_prvků_pole - 1).
int jednoduche_pole[200]; // vytvoření jednoduchého pole o 200 prvcích const int min=10; // deklarace konstanty long druhe_pole[10*min]; // vytvoření pole, velikost pole udána pomocí konstanty struct auto nove[40]; // vytvoření pole se jménem nove, o 40 prvcích typu struct auto
Příklad průchodu a vypsání všech prvků pole testPruchodu:
int testPruchodu[] = {11, 22, 33} for (int i = 0; i < 3; i++) { printf(testPruchodu[i]); }
Prvky pole jsou uloženy v paměti v nepřerušené řadě za sebou. To umožňuje jednoduchou adresaci prvků, rychlý výpočet adres prvků. Díky tomu je možné přistupovat na prvky pole pomocí ukazatelů.
Příklad získání adresy libovolného prvku pole:
&x[i] = bázová_adresa_x + i*sizeof(typ_prvků_pole);
Znak & značí v C++ adresu v paměti, bázová_adresa_x = proměnná typu pole, i index prvku pole, jehož adresu zjišťujeme a typ_prvků_pole = typ prvků pole.
Prvek pole je možné používat jako kteroukoliv jinou proměnnou. Do prvku pole je možné přiřazovat hodnotu, hodnotu z prvku pole číst atd.
Příklad přiřazení hodnoty do prvku pole testPruchodu (pole bylo deklarováno v předchozím příkladě):
testPruchodu[1] = 55;
int poleTest[] = {11, 22, 33, 44, 55, 66} for (int i = 0; i < (sizeof((poleTest))/sizeof(poleTest[0])); i++) { printf("Prvek pole č. " + i + " má hodnotu " + poleTest[i] + "."); }
Výstupem uvedeného úseku kódu by byl výpis:
Prvek pole č. 0 má hodnotu 11. Prvek pole č. 1 má hodnotu 22. Prvek pole č. 2 má hodnotu 33. Prvek pole č. 3 má hodnotu 44. Prvek pole č. 4 má hodnotu 55. Prvek pole č. 5 má hodnotu 66.