int *a[5] -
This means that “a” is an array of pointers, that is, each member in the array “a” is an integer pointer; Each member of the array may contain an integer address.
int (*a)[5] -
Here "a" is a pointer to an array of 5 integers, in other words, "a" refers to an array containing 5 integers.
Example:
#include<stdio.h>
int main()
{
int b = 3;
int c = 4;
int *a[2] = {&b, &c};
printf("value pointed to by a[0] = %d, by a[1] = %d\n", *a[0], *a[1]);
return 0;
}