int *A;
A는 int형 포인터이다.
int B[5];
B는 크기가 5인 int형 배열이다.
int *C[5];
연산자우선순위에서 배열첨자인[]가 먼저이므로 C는 배열이다. 크기가 5인 배열.
즉 int형 포인터(int *)를 5개 담을 수 있는 배열이다.
int (*D)[5];
괄호 안을 먼저 처리하므로 D는 포인터이다.
크기가 5인 int형 배열(int [5])의 포인터를 할당할 수 있는 포인터인 것이다.
int *(*E)[5];
D와 같이 괄호 안을 먼저 처리하므로 E는 포인터이다.
이 것 역시 남은 부분을 보면 E가 무슨 포인터인지 알 수 있는데,
남은부분이 int *[5]이므로 E는 int *[5]의 포인터를 담을 수 있는 포인터가 된다.
이 int *[5]꼴은 C와 같은 형태이다. 이것을 참조해서 정리해 보면
E는'int형 포인터(int *)를 5개 담을 수 있는 배열'의 포인터을 할당할 수 있는 포인터이다.
int *F[5][4];
[]가 먼저 처리되므로 F는 이차원배열이다.
int * 형태의 데이터를 5x4로 담을 수 있는 크기가 20인 이차원배열.
int (*G[5])[4];
역시 우선순위를 따져보면 G는 크기 5의 배열이다.
남은부분은 int (*)[4]로, 이는 D와 같은 꼴이다.
즉 G는, D와 같은 형태의 데이터를 5개 담을 수 있는 배열.
int *(*H[5])[4];
H 역시 배열이며, 남은부분은 int *(*)[4]이고,
이는 E와 같은 형태이다.
즉 H는, E와 같은 형태의 데이터를 5개 담을 수 있는 배열.