Разница в том, что они бывают разных типов.
int*
- указатель на int; int (*)[5]
- указатель на массив из 5-ти дюймов. (Программа cdecl
полезна для интерпретации объявлений, подобных этим.)
Вполне вероятно (но отнюдь не гарантировано), что они оба будут иметь одинаковый размер и представление. Различие, как и между любыми двумя типами, заключается в операциях, которые могут применяться к объектам этих типов, и значениях этих операций.
В ответ на заголовок "У указателей есть размер?" оператор sizeof
говорит вам, что это такое. Но 5
в int (*)[5]
не соответствует размеру указателя; это количество элементов в массиве, на которое указывает указатель.