array of pointers :
int *a[4];
We know that pointer holds a address of int data type variable. So the above mentioned a[] can store four different int data type address i.e. a[0], a[1], a[2], a[3]. each can hold a int data type address.
For example:
int a1;
int a2;
int a3;
int a4;
So we have four different variable which are of type int so we can assign these to the above declared a[]
i.e.int a[0] = & a1
This is similar to declaring four different int pointers but instead we used an array to hold these four pointers
Pointer to array :
int ( *a)[4];
In simple language the "a " is a single variable that holds the address of the array.
Example:
int simple_array[4];
Now we can assign
a = simple_array; or
a = & simple_array[0];