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

questionAnswers(2)

yourAnswerToTheQuestion