>>592
typedefでもして試せば一目瞭然の気もするが。

最後の例は、
aはintが5個の配列が4個並んだ配列で、
pはintが5個の配列へのポインタ。
言い換えれば、
aはある型のオブジェクトが4個並んだ配列で、
pはその型へのポインタ。
ある型が仮にcharなら、char a[4]; char *p; p = a; となり、
いくらなんでもこれはお馴染みだろう。
たまたま型が配列だっただけなのだよ。