Нет разницы для компилятора C.Для программиста, который читает код, есть разница.
Здесь arr - указатель на целое число (возможно, для возврата результата из функции):
foo(int* arr) {}
Здесь,arr - указатель на первое целое число в массиве (возможно, для передачи списка чисел в и / или вне функции):
foo(int arr[]) {}
Также может помочь указание возвращаемого типа функции.