Sdílet prostřednictvím


Jednorozměrná pole

Přípona výrazu následovaná výrazem v hranatých závorkách ([ ]) je indexované znázornění prvku objektu pole.Indexovaný výraz představuje hodnotu na adrese, která je výraz pozic za výrazem přípony, je-li určen jako

postfix-expression [ expression ]

Obvykle je hodnota určená výrazem přípony hodnotou ukazatele, jako je například identifikátor pole a výraz je integrální hodnota.Stačí však, aby byl jeden z výrazů typ ukazatele na další integrální typ.A proto může být integrální hodnota na pozici výrazu přípony a hodnota ukazatele může být v závorkách ve výrazu nebo na pozici "dolní index".Platí například tento kód:

// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
   ptr = a;
   sum = 4[ptr];
}

Výrazy dolního indexu se obecně používají k odkazování na prvky pole, je však možné je použít na libovolný ukazatel.Bez ohledu na pořadí hodnot, musí být výraz uzavřen v hranatých závorkách ([ ]).

Výraz dolního indexu je vyhodnocen přidáním integrální hodnoty hodnotě ukazatele a následným použitím nepřímého operátoru (*) na výsledek. (Viz diskuze k tématu nepřímého operátoru Dereference a operátory z adresy.) Ve skutečnosti jsou u jednorozměrného pole následující čtyři výrazy rovnocenné, za předpokladu, že a je ukazatel a b je celé číslo:

a[b]
*(a + b)
*(b + a)
b[a]

Podle pravidel převodu pro přídavné operátory (viz téma Přídavné operátory), je integrální hodnota převedena na posun adresy vynásobením délkou typu adresovaného pomocí ukazatele.

Předpokládejme například, že identifikátor line odkazuje na pole hodnot int.Následující postup slouží k vyhodnocení výrazu dolního indexu line[ i ]:

  1. Celočíselná hodnota i je vynásobena počtem bajtů, které jsou definovány jako délka položky int.Převedená hodnota i představuje posun iint.

  2. Tato převedená hodnota je přidána do původní hodnoty ukazatele (line) na adresu, která je posunuta iint pozic od line.

  3. Nepřímý operátor je použit na novou adresu.Výsledkem je hodnota prvku pole na této pozici (intuitivně, line [ i ]).

Výraz dolního indexu line[0] představuje hodnotu prvního prvku řádku od posunu od adresy reprezentované line je 0.Podobně výraz, jako line[5] odkazuje na posun prvku pět pozic od řádku nebo šestého prvku pole.

Viz také

Referenční dokumentace

Operátor dolního indexu: []