foo[]
のように[]がくっつくと、
最初に配列であることが確定するので
*foo[]とすると

foo は "array" of pointer
となりまs

順番を変えて、
foo は "pointer" to array
にするには
(*foo)[]
としまs

そんな感じで
(*foo)()
で "pointer" to function
となりまs

...のようなことが
K&Rの5章12節にかいてありまs