Tablice wielowymiarowe (C)
Wyrażenie indeksu dolnego może mieć wiele podwyrażeń, jak pokazano poniżej:
expression1 [expression2] [expression3]...
Wyrażenia indeksu dolnego są skojarzone od lewej do prawej.Jako pierwsze obliczane jest wyrażenie indeksu dolnego znajdujące się najbardziej po lewej: expression1**[expression2].Adres, będący wynikiem dodania expression1 i expression2, tworzy wyrażenie wskaźnika; następnie do wyrażenia wskaźnika dodawane jest expression3, aby utworzyć nowe wyrażenie wskaźnika, i tak dalej, dopóki nie zostanie dodane ostatnie wyrażenie indeksu dolnego.Operator pośredni (***) jest stosowany po oszacowaniu ostatniego wyrażenia indeksu dolnego, chyba że końcowa wartość wskaźnika adresuje typ tablicowy (zobacz przykłady poniżej).
Wyrażenia zawierające wiele indeksów dolnych odwołują się do elementów tablic wielowymiarowych. Tablica wielowymiarowa jest tablicą, której elementy są tablicami.Na przykład, pierwszy element tablicy trójwymiarowej jest tablicą z dwoma wymiarami.
Przykłady
W poniższych przykładach tablica o nazwie prop została zadeklarowana za pomocą trzech elementów, z których każdy jest tablicą o wymiarach 4 na 6, zawierającą wartości typu int.
int prop[3][4][6];
int i, *ip, (*ipp)[6];
Odwołanie do tablicy prop wygląda następująco:
i = prop[0][0][1];
W powyższym przykładzie pokazano, w jaki sposób odwołać się pojedynczo do drugiego elementu typu int w tablicy prop.Tablice są przechowywane wierszami, zatem ostatni indeks dolny zmienia się najszybciej; wyrażenie prop[0][0][2] odwołuje się do następnego (trzeciego) elementu tablicy, i tak dalej.
i = prop[2][1][3];
Ta instrukcja jest bardziej złożonym odwołaniem do pojedynczego elementu tablicy prop.Wyrażenie jest oszacowywane w następujący sposób:
Pierwszy indeks dolny (2) jest mnożony przez rozmiar tablicy typu int o wymiarach 4 na 6 i dodawany do wartości wskaźnika tablicy prop.Wynik wskazuje na trzecią tablicę o wymiarach 4 na 6 w tablicy prop.
Drugi indeks dolny (1) jest mnożony przez rozmiar 6-elementowej tablicy typu int i dodawany do adresu reprezentowanego przez prop[2].
Każdy element 6-elementowej tablicy jest wartością typu int, więc końcowy indeks dolny (3) jest mnożony przez rozmiar typu int, zanim zostanie dodany do prop[2][1].Wskaźnik wynikowy adresuje czwarty element 6-elementowej tablicy.
Operator pośredni jest stosowany do wartości wskaźnika.Wynik jest elementem typu int pod tym adresem.
W dwóch następnych przykładach pokazano przypadki, w których operator pośredni nie jest stosowany.
ip = prop[2][1];
ipp = prop[2];
W pierwszej z tych instrukcji wyrażenie prop[2][1] jest prawidłowym odwołaniem do trójwymiarowej tablicy prop, które odwołuje się do 6-elementowej tablicy zadeklarowanej powyżej.Ponieważ wartość wskaźnika adresuje tablicę, operator pośredni nie jest stosowany.
Podobnie, wynik wyrażenia prop[2] w drugiej instrukcji ipp = prop[2]; jest wartością wskaźnika adresującą tablicę dwuwymiarową.