由于 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 开始。