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:
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.
Druhý index, 1, se vynásobí velikostí pole 6 prvků typu int a přičte se k adrese reprezentované výrazem prop[2].
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.
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.