由于 Fortran 例程按引用传递参数,因此可将 FORTRAN 77 (Cray) 指针作为指针的指针传递给 C 例程。
表 11–10 传递 FORTRAN 77 (Cray) 指针|
Fortran 调用 C |
C 调用 Fortran |
||
|---|---|---|---|
|
|
C 指针与 Fortran 95 标量指针兼容,但与数组指针不兼容。
|
Fortran 95 用标量指针调用 C |
||
|---|---|---|
|
Fortran 95 例程:
C 例程:
|
Cray 与 Fortran 95 指针间的主要区别是 Cray 指针的目标始终是已命名的。在许多上下文中,声明 Fortran 95 指针会自动标识其目标。另外,被调用 C 例程还需要显式 INTERFACE 块。
要将 Fortran 95 指针传递给数组或数组段,需要特定的 INTERFACE 块,如下例所示:
Fortran 95 例程:
INTERFACE
SUBROUTINE S(P)
integer P(*)
END SUBROUTINE S
END INTERFACE
integer, target:: A(0:9)
integer, pointer :: P(:)
P => A(0:9:2) !! pointer selects every other element of A
call S(P)
...
C 例程:
void s_(int p[])
{
/* change middle element */
p[2] = 444;
}
|
请注意,由于 C 例程 S 不是 Fortran 95 例程,因此不能在接口块中将其定义成假定的形状 (integer P(:))。如果 C 例程需要知道数组的实际大小,必须将其作为参数传递给 C 例程。
另请注意,C 与 Fortran 间的下标编排不同,C 数组以下标 0 开始。