Example:
int *p[5] is an array of pointers
int (*p) [5] is an array pointer
Distinguish between the two as long as the variable name p around the modifier can be.
Here are two points to be clear:
1, whether int *p[5] or int (*p) [5] should not be regarded as a whole, but should be regarded as some modifiers to modify the variable p, so that p is accurately defined;
2, [] The priority is higher than *, the same priority modifier, take a left-to-right compilation.
*P[5] because [] priority is high so [] first modifies the variable name p, so p is an array name, and then look at other modifiers, you can find an int * type of an array, that is, p is an array of pointers.
(*p) [5] because () and [] the priority of the same, so from left to right compile, then * first modify p, so p is a pointer variable, and then look at the surrounding other modifiers, you can find that p is an int array pointer.
C Language Learning Note (6): How to differentiate pointer arrays and array pointers from the surface of a variable declaration