It's just one pointer, but it points at 3 ints (in an array).
Code:
int a[3];
int *pa = &a[0]; // an integer
int (*pa)[3] = &a; // an array of 3 ints
You need the parentheses so you get "pointer (singular) to an array (of 3 ints)".
Without them, int *pa[3] is "array of (three) pointers (plural) to int".
Also, you can do this
Code:
int a[3];
int b[7][3];
int (*pa)[3];
pa = &a;
pa = b[0];
pa = &b[0][0];
You see the same syntax when you pass a 2D array as a parameter to a function.
Consider this alternative example
Code:
struct foo {
int a;
int b;
int c;
} bar;
int *pa = &bar.a; // pointer to one int
struct foo *pa = &bar; // pointer to the whole thing
In both cases, one is a pointer to the first element of the compound object (array or struct), and the second is a pointer to the whole thing.