I know that:
Foo *array[10]; // array of 10 Foo pointers
Foo (*array)[10]; // pointer to array of 10 Foos
However, I don't really understand the logic behind this notation. That is, why does the first part create an array of pointers why the second creates a pointer to an array?
Of course I can easily remember this notation, but I would like to know the logic behind it.