Používání proměnných typu pole

Přehled informací

Jednorozměrná pole

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ů.

Syntaxe deklarace jednorozměrná pole

  datový_typ_prvků_pole  jméno_pole[počet];

Argumenty deklarace jednorozměrná pole

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.

Vícerozměrná pole

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:

Syntaxe deklarace vícerozměrná pole

  datový_typ_prvků_pole  jméno_pole[počet1][počet2]...[početn];

Argumenty deklarace vícerozměrná pole

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.

Práce s proměnnými (objekty) typu pole

Typ prvků 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:

Inicializace pole při deklaraci

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.

Příklad deklarace a inicializace 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

Indexování polí

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]);
  }

Poznámka - uložení prvků pole

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.

Přiřazení hodnoty prvku 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;

Příklad průchodu přes pole pomocí cyklu

  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.