I've been working through *C++ Primer*, and I feel as if something hasn't been explained clearly...

I understand what it means to have a array of pointers to `int`s, for example:

```
int *foo [4];

```

or 

```
int *foo1 [2][4];

```

However, I don't understand what it means to have a pointer to an *array* of some number of `int`s. Here's an example from the book:

```
int ia[3][4];
int (*p) [4] = ia;

```

What is `p` here, and what does this mean, both in the 1D and the 2D case?