<p>What is the difference between <code>int *a[3]</code> and <code>int (*a)[3]</code>?</p>

There is no difference between
```
int a[3]
```
and
```
int (a)[3]
```
, they both declare
```
a
```
as an array of 3
```
int
```
s.  There is a difference between
```
int *a[3]
```
and
```
int (*a)[3]
```
, the former declares an array of 3 pointers to
```
int
```
whereas the second declares a pointer to an array of 3
```
int
```
s.  The parenthesis make a difference here because in C brackets have a higher precedence than *.