【问题标题】:Calling C function with **int parameter from Fortran从 Fortran 调用带有 **int 参数的 C 函数
【发布时间】:2015-06-03 03:53:25
【问题描述】:

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

int c_function(int **a);

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

【问题讨论】:

  • 我不认为你可以。

标签: c fortran fortran-iso-c-binding


【解决方案1】:

您必须声明 type(c_ptr) 的 Fortan c 指针

type(c_ptr) :: ptr

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

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

【讨论】:

  • 我找不到完全相同的副本,只有这个 stackoverflow.com/questions/30481686/… 但这不是很好指向。随意找到更好的。
  • 谢谢,这很好用。尽管如果我在 C 函数中打印指针,我的 MPI 通信器中的所有进程都会得到相同的值。但它以某种方式起作用。
猜你喜欢
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
相关资源
最近更新 更多