Sdílet prostřednictvím


Vícerozměrná pole (C)

Výraz indexu může mít také více indexů následovně:

expression1 [expression2] [expression3]...

Výrazy indexu přiřazují zleva doprava.Výraz indexu nejvíce vlevo expression1**[expression2]** je vyhodnocen jako první.Adresa, která je výsledkem sečtení expression1 a expression2 tvoří výraz ukazatele, poté je k tomuto výrazu ukazatele přičten výraz expression3, což vytvoří nový výraz ukazatele a tak dále až do přičtení posledního výrazu indexu.Operátor dereference (*) je použit po vyhodnocení posledního výrazu indexu, pokud konečná hodnota ukazatele odkazuje na typ pole (další příklady naleznete níže).

Výrazy s více indexy odkazují na prvky „vícerozměrného pole“. Vícerozměrné pole je pole, jehož prvky jsou pole.Například, první prvek trojrozměrného pole je dvourozměrné pole.

Příklady

Pro následující příklady je pole s názvem prop deklarováno se třemi prvky, každý z nich je pole 4 krát 6 hodnot typu int.

int prop[3][4][6];
int i, *ip, (*ipp)[6];

Odkaz na pole prop vypadá takto:

i = prop[0][0][1];

Výše uvedený příklad ukazuje, jak odkazovat na druhý jednotlivý prvek typu int pole prop.Pole jsou uloženy po řádku, takže poslední index se mění nejrychleji. Výraz prop[0][0][2] odkazuje na další (třetí) prvek pole a tak dále.

i = prop[2][1][3];

Tento příkaz je složitější odkaz na jednotlivý prvek pole prop.Výraz se vyhodnotí takto:

  1. První index, 2, se vynásobí velikostí 4 krát 6 pole hodnot typu int a přičte se k hodnotě ukazatele prop.Výsledek odkazuje na třetí 4 krát 6 pole výrazu prop.

  2. Druhý index, 1, se vynásobí velikostí pole 6 prvků typu int a přičte se k adrese reprezentované výrazem prop[2].

  3. Každý prvek 6 prvkového pole je hodnota typu int, takže konečný index, 3, se vynásobí velikostí typu int před přičtením k výrazu prop[2][1].Výsledný ukazatel odkazuje na čtvrtý prvek 6 prvkového pole.

  4. Na hodnotu ukazatele je použit operátor dereference.Výsledkem je prvek typu int na této adrese.

Další dva příklady zobrazují případy, kdy operátor dereference není použit.

ip = prop[2][1];

ipp = prop[2];

V prvním z těchto příkazů, je výraz prop[2][1] platným odkazem na trojrozměrné pole prop odkazující na 6 prvkové pole (deklarované výše).Vzhledem k tomu, že hodnota ukazatele odkazuje na pole, operátor dereference není použit.

Podobně, výsledek výrazu prop[2] v druhém příkazu ipp = prop[2]; je hodnota ukazatele odkazující na dvourozměrné pole.

Viz také

Referenční dokumentace

Operátor dolního indexu: []