我正在寻找一种在同一程序单元中使用两个并发数组来处理字符信息主体的方法。
比如我要
CHARACTER(1) Array1(40960)
和
CHARACTER(4096) Array2(10)
指向相同的信息体。
请注意,在此示例中我一直很小心,因为数组的维度和秩的乘积是相同的。
我希望解决方案是可分配的
,所以我认为EQUIVALENCE
或COMMON
行不通。
有什么想法吗?
最佳答案
像这样:
use, intrinsic :: iso_c_binding
...
character, dimension(40960), target :: array1
character(4096), dimension(:), pointer :: array2
...
call c_f_pointer (c_loc(array1), array2, [10])
现在,array2 指向与 array1 相同的存储。如果需要,您可以使 array1 可分配 - 在对 c_f_pointer 的调用中,最后一个参数是一个数组构造函数,其中包含新分配指针的维度信息。不要忘记 array1 上的 TARGET 属性。
关于arrays - Fortran 字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18861155/