我正在从 Fortran 90 程序调用 C 函数(我必须使用 Fortran 90)。这个 C 函数接受几个参数并返回一个浮点指针。我似乎无法在 Fortran 代码中正确打印返回的数据。它只是显示一个非常大的数字(我假设它是指针的地址。)
我已经成功地将 REAL Fortran 变量作为参数传递,让 C 函数设置它们(如 Fortran 通过引用传递)并随后访问数据。但是,我必须将指针作为返回变量返回,因为这是旧函数使用的方法(我正在重新实现。)
Fortran 90 中有没有办法从 C 函数返回的非字符(实数、整数等)指针访问数据?(请注意:我不能使用 ISO C 绑定,因为这仅适用于 Fortran 2003 及更高版本。)我已经在下面说明了我正在尝试做的事情......
谢谢!
Fortran 程序
program test_real
real, dimension(10) :: realpt
integer nbr
integer i
real :: a=1.0
real :: b=2.0
real :: c=3.0
nbr = 9
realpt = getpointer(a, b, c)
do 10 i = 1, nbr
print *,"return: ",realpt(i)
10 continue
stop
End
C 函数
float* getpointer(float *a, float *b, float *c) {
float *rfl = (float *) calloc(9,sizeof(float));
int i=0;
for(i=0;i<3;i++) {
rfl[i] = *a;
}
for(i=3;i<6;i++) {
rfl[i] = *b;
}
for(i=6;i<9;i++) {
rfl[i] = *c;
}
return(rfl);
} // End of getpointer function
输出
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07