Если это действительно массив указателей, вам нужно обращаться с ним как с массивом указателей на стороне Фортрана. Вы также должны помнить, что они являются указателями на массивы, а не просто масштабируют действительные числа (хотя они могут быть представлены в C одинаково).
!DEC$ATTRIBUTES DLLEXPORT :: TO_FORTRAN
integer function TO_FORTRAN (test4) BIND(C)
use, intrinsic :: ISO_C_BINDING
implicit none
type(c_ptr), intent(in) :: test4(3)
REAL, pointer :: test1(:), test2(:), test3(:)
call C_F_POINTER(test4(1),test1, [3])
call C_F_POINTER(test4(2),test2, [3])
call C_F_POINTER(test4(3),test3, [3])
TO_FORTRAN = 0
END FUNCTION
и
TO_FORTRAN(test4.data());