Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
První dolní index,
2
, se vynásobí velikostí pole 4 krát 6 hodnot typuint
a přičte se k hodnotě ukazateleprop
. Výsledek odkazuje na třetí pole 4 krát 6 výrazuprop
.Druhý dolní index,
1
, se vynásobí velikostí pole 6 prvků typuint
a přičte se k adrese reprezentované výrazemprop[2]
.Každý prvek pole 6 prvků je
int
hodnota, takže konečný dolní index,3
je vynásoben velikostíint
před přidáním doprop[2][1]
. Výsledný ukazatel odkazuje na čtvrtý prvek 6prvkového pole.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.