Fortran 字符数组

use*_*492 4 arrays fortran

我正在寻找一种方法来处理同一程序单元中两个并发数组的字符信息体。

例如,我想要

CHARACTER(1) Array1(40960)
Run Code Online (Sandbox Code Playgroud)

CHARACTER(4096) Array2(10)
Run Code Online (Sandbox Code Playgroud)

指向相同的信息体。

请注意,在这个示例中,我一直小心地确保数组的维度和秩的乘积是相同的。

我希望解决方案是allocatable,所以我认为EQUIVALENCECOMMON不会起作用。

有任何想法吗?

Ste*_*nel 5

像这样的东西:

use, intrinsic :: iso_c_binding
...
character, dimension(40960), target :: array1
character(4096), dimension(:), pointer :: array2
...
call c_f_pointer (c_loc(array1), array2, [10])
Run Code Online (Sandbox Code Playgroud)

现在,array2 指向与 array1 相同的存储。如果需要,您可以使 array1 可分配 - 在对 c_f_pointer 的调用中,最后一个参数是一个数组构造函数,其中包含新分配的指针的维度信息。不要忘记 array1 上的 TARGET 属性。