[4]
идет после имени функции, так же, как и после имени переменной в определении переменной:
int (*fn())[4]
{
return &intArray;
}
Так как это очень неясный синтаксис, который может сбить с толку всех, кто его читает, я бы рекомендовал возвращать массив как простой int*
, если у вас нет особых причин, почему он должен быть указателем -в-массив.
Вы также можете упростить определение функции с помощью typedef:
typedef int intarray_t[4];
intarray_t* fn() { ... }