从 Fortran 调用带有 **int 参数的 C 函数

标签 c fortran fortran-iso-c-binding

假设我有一个带有以下 API 的 C 函数:

int c_function(int **a);

假设 C 函数负责内存分配,我应该如何声明 Fortran 数组/数组指针,并将其传递给函数?

最佳答案

您必须声明 type(c_ptr)

的 Fortan c 指针
type(c_ptr) :: ptr

然后调用您的函数(使用适当的接口(interface))

n = c_function(ptr)

然后才将 Fortran 数组指针指向那里

real, pointer :: Array(:)

call c_f_pointer(ptr, Array, [n])

我假设 n 是数组的大小。你必须知道,否则不可能。

界面看起来像

interface

    integer(c_int) function c_function(ptr) bind(C,name="c_function")
      use iso_c_binding
      type(c_ptr) :: ptr
    end function

end interface

关于从 Fortran 调用带有 **int 参数的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30595888/

相关文章:

c - 无法使用 openssl 解密包含空字符 (\x00) 的加密字符串

c - Fortran 模块与在 C 中访问的过程相结合,反之亦然

c++ - 在派生类型中使用可分配的目标变量

压缩数字: Reading Error

c - 返回值时赋值

c - 给定目录名,如何在 C 中找到它所在的文件系统?

fortran - 使用 openmp 和可分配数组在 fortran 中循环

fortran - 如何在敏感模式下在 gfortran 中编译?

c - 将分配的 C_PTR 到 Fortran 数组传递给 C

fortran - 尝试使用 f2py 围绕两个 C 对象编写 Fortran 包装器时出现段错误