program scaltest
    use iso_c_binding
    implicit none
    interface
        subroutine scalprod(n, x_p, y_p, res) bind(c)
            use iso_c_binding
            integer(c_int), value :: n
            type(c_ptr), value :: x_p, y_p
            real(c_double) :: res
        end subroutine scalprod
    end interface
    type(c_ptr) :: x_pt, y_pt
    real(c_double), dimension(5), target :: a = (/ 1, 2, 3, 4, 5 /)
    real(c_double), dimension(5), target :: b = (/ 2, 3, 4, 5, 6 /)
    integer(c_int) :: n = size(a)
    real(c_double) :: res
    x_pt = c_loc(a)
    y_pt = c_loc(b)
    call scalprod(n, x_pt, y_pt, res)
    print *, res
end program scaltest