Typedefs dla złożonych typów danych
Próbuję zrozumieć podstawową mechanikę tego, jak C radzi sobie ze złożonymi typedefami, z perspektywy składni.
Rozważ poniższe przykłady (odniesienia na końcu pytania).
typedef int (*p1d)[10];
jest właściwą deklaracją, tzn. tutaj p1d jest wskaźnikiem do tablicy 10 liczb całkowitych, tak jak było pod deklaracją przy użyciu typu Array. Zauważ, że to jest inne niż
typedef int *p1d[10];
co uczyniłoby p1d nazwą tablicy 10 wskaźników do typu int.
Jeśli więc rozważę pierwszeństwo operatorów dla obu przykładów (je przepiszę):
int *p1d[10]; // Becomes ...
int* p1d[10];
Czytając od lewej do prawej i używając pierwszeństwa operatora, otrzymuję: „Wskaźnik do typu int, nazwany p1d, o rozmiarze 10”, co jest błędne. Jeśli chodzi o drugą / pierwszą sprawę:
int (*p1d)[10];
Które czytałem jako „p1d to wskaźnik typu int i jest tablicą 10 takich elementów”, co również jest błędne.
Czy ktoś mógłby wyjaśnić zasady stosowane do określania tych typów? Chciałbym zastosować je również do wskaźników funkcji i mam nadzieję, że ta dyskusja wyjaśni również logikę, która się za nimi kryjeconst
rzuca (tj .: wskaźnik do stałych danych vs stały wskaźnik do zmiennych danych).
Dziękuję Ci.
Referencje:
C Tutorial: Wskaźniki do tablic:http://www.taranets.net/cgi/ts/1.37/ts.ws.pl?w=329;b=285Pierwszeństwo operatora:http://www.swansontec.com/sopc.html