Оба
int getResult(Foo** fooPtrArray)
и
int getResult(Foo* fooPtrArray[])
а также
int getResult(Foo* fooPtrArray[4])
будет отлично работать (все они эквивалентны).
Из вашего вопроса не ясно, в чем была проблема. Что "не удалось"?
При такой передаче массивов обычно имеет смысл также передавать количество элементов, поскольку прием, позволяющий типу массива переходить в тип указателя, обычно используется специально для разрешения передачи массивов разных размеров
int getResult(Foo* fooPtrArray[], unsigned n);
...
Foo* array3[3];
Foo* array5[5];
getResult(array3, 3);
getResult(array5, 5);
Но если вы всегда будете передавать массивы строго из 4 элементов, лучше использовать указатель с другим типом в качестве параметра
int getResult(Foo* (*fooPtrArray)[4])
В последнем случае вызов функции будет выглядеть следующим образом
Foo* array[4];
getResult(&array);
(обратите внимание на оператор &
, примененный к объекту массива).
И, наконец, поскольку этот вопрос помечен как C ++, в последнем случае вместо указателя также может использоваться ссылка
int getResult(Foo* (&fooPtrArray)[4]);
...
Foo* array[4];
getResult(array);