我正在尝试在C++ Fortran互操作程序中传递多维Fortran数组给C++程序。我基本知道如何从Fortran传递数组到C++,即从Fortran向C++传递数组的位置。然后,C++接收扁平化的数组,并需要进行一些代数计算以找到给定多维数组中的元素。
我已经成功地在标量数组上测试了这个想法。在C++中找到元素的索引并不难,因为它是从Fortran索引线性映射到C++索引,偏移量为-1。Fortran和C++的示例代码如下:
我已经成功地在标量数组上测试了这个想法。在C++中找到元素的索引并不难,因为它是从Fortran索引线性映射到C++索引,偏移量为-1。Fortran和C++的示例代码如下:
! Fortran main program
program fprogram
integer :: i
real*8 :: array(2)
array(1) = 1.0
array(2) = 2.0
! call cpp function
call cppfuncarray(array, 2)
write(*,*) array
end program
//cpp file
extern "C" {
void cppfuncarray_(double *array, int *imax);}
void cppfuncarray_(double *array, int *imax) {
int iMax = *imax;
for ( int i = 0; i < iMax; i++ ) {
array[i] = array + 1.0*i;
}
};
输出将为array(1) = 1和array(2) =3。现在我正在尝试将多维数组(如A(2,2)或A(2,3,2))从Fortran传递到C++。我知道像A(2,2)这样的二维数组在C++中会很容易地找出压平的数组。但我认为在C++中查找三维或四维数组的元素可能会更具挑战性。
正确的方法是什么,可以在C++中构建多维数组,以便我可以像在Fortran中那样通过A[k][j][i]引用数组A(k,j,i)?
提前致谢!