У меня возникли проблемы с передачей двумерного массива из Fortran в C. Ниже приведена моя функция C, которая просто отображает элементы массива на экране.
#include <stdio.h>
void print2(double *arr , int *n)
{
int y = *n;
printf("\n y = %d", y);
for(int i =0; i<y; i++)
{
for (int j = 0; j < y; j++)
printf("%.6g", *((arr + i*y) + j));
printf("\n");
}
}
Мой код Fortran до сих пор выглядит следующим образом:
program linkFwithC
use, intrinsic :: iso_c_binding
implicit none
real, dimension(3,3)::a
a(1,1)=1
a(1,2)=2
a(1,3)=3
a(2,1)=4
a(2,2)=5
a(2,3)=6
a(3,1)=7
a(3,2)=8
a(3,3)=9
interface
subroutine print2(a,n) bind( c )
use, intrinsic :: iso_c_binding
type(c_ptr)::a
integer(C_INT)::n
end subroutine print2
end interface
call print2(c_loc(a),3)
end program linkFwithC
Я связываю оба файла, создавая статическую библиотеку для функции C и создавая файл .lib. После сборки файла .lib я добавляю его в проект fortran и запускаю проект fortran. Код выполняется без ошибок, и значение n отображается правильно; Однако все отображаемые значения массива неверны.
Пожалуйста помоги !
Спасибо, Анас