Sdílet prostřednictvím


Vícerozměrná pole (C)

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

expression1 [ expression2 ] [ expression3 ] /*...*/ ;

Výrazy dolního indexu se přiřazují zleva doprava. První výraz expression1[ expression2 ]dolního indexu vlevo je vyhodnocen. Adresa, která má za následek přidání expression1 a expression2 vytvoření výrazu ukazatele. Potom expression3 se do tohoto výrazu ukazatele přidá, aby se vytvořil nový výraz ukazatele atd. až do přidání posledního dolního indexu výrazu. Operátor indirection (*) se použije po vyhodnocení posledního dolního indexovaného výrazu, pokud konečná hodnota ukazatele neřeší typ pole.

Výrazy s více dolními indexy odkazují na prvky "multidimenzionálních polí". Multidimenzionální pole je matice, jejíž prvky jsou matice. 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];

Příklad ukazuje, jak odkazovat na druhý jednotlivý int prvek prop. Pole jsou uložena po řádku, takže poslední dolní 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í dolní index, 2, se vynásobí velikostí pole 4 krát 6 hodnot typu int a přičte se k hodnotě ukazatele prop. Výsledek odkazuje na třetí pole 4 krát 6 výrazu prop.

  2. Druhý dolní 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 pole 6 prvků je int hodnota, takže konečný dolní index, 3je vynásoben velikostí int před přidáním do prop[2][1]. Výsledný ukazatel odkazuje na čtvrtý prvek 6prvkového pole.

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

Tyto dva příklady ukazují případy, kdy se operátor nepřímých operátorů nepoužije.

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; odkazuje na pole se 6 prvky (deklarované dříve). Vzhledem k tomu, že hodnota ukazatele řeší matici, operátor nepřímých výrazů se nepoužije.

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é

Operátor dolního indexu: []