I used to have issues with C typing too, until I learned how it was created.
In C, the type is described in the way you would use a variable of that type.
Therefore, when you see:
int *x;
it means that the expression *x
is of type int
, so x
is variable of type pointer-to-int.
And if you see:
int x[5];
it means that the expression x[3]
is of type int
, so x
is a variable of type array-of-int.
So, to get to your expression:
int (*x)[];
it means that the expression *x
is of type int[]
(ie, an array of int
of unknown size). Therefore x
is a variable of type pointer-to-an-array-of-int.