【发布时间】:2015-06-03 03:53:25
【问题描述】:
假设我有一个具有以下 API 的 C 函数:
int c_function(int **a);
假设 C 函数负责内存分配,我应该如何声明一个 Fortran 数组/指向数组的指针,并将其传递给函数?
【问题讨论】:
-
我不认为你可以。
标签: c fortran fortran-iso-c-binding
假设我有一个具有以下 API 的 C 函数:
int c_function(int **a);
假设 C 函数负责内存分配,我应该如何声明一个 Fortran 数组/指向数组的指针,并将其传递给函数?
【问题讨论】:
标签: c fortran fortran-iso-c-binding
您必须声明 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
【讨论】: