For deciphering C declarations use the Right - Left Rule
For your example int point *[];
is read as point is array of pointer to int.
First understand what the symbols mean.
* // "pointer to"
[] // "array of"
() // "a function returning"
Now that you know the symbols you can decipher any declaration.
For example
int *(*pointer())();`
Step 1 Find the Identifier
int *(*pointer())();
^^^^^^^
In this case it is pointer, so you read as "pointer is"
Step 2 Use Right-Left Rule
int *(*pointer())();
^^
You move right first, and you'll hit a ()
, so you read as pointer is function returning
Step 3 Continue the rule
int *(*pointer())();
^
Then you move right again, but here you have a closing parenthesis )
,
so you move left of the identifier and here you have a *
, so you read as pointer is function returning pointer to
Step 4 Continue the rule
int *(*pointer())();
^^
Then you keep moving left, but there is a opening parenthesis (
, so you can't move left, so now you move right. Now you reached the ()
, you read as pointer is function returning pointer to function returning
Step 5 Continue the rule
int *(*pointer())();
^
Now you can't move right because there are no more symbols, so move left and reach *
,
you read as pointer is function returning pointer to function returning pointer to
Step 6 Continue the rule
int *(*pointer())();
^^^
Now you can't move left or right because you're out of symbols so you read int
,
you finally have
pointer is function returning pointer to function returning pointer to int