如何在Fortran中的下一个内存地址分配/获取变量的值

时间:2019-01-08 17:00:56

标签: pointers fortran fortran-common-block

我有两组全局变量,每组全局变量都存储在一个名为common的块中,如下所示:

integer :: x1, y1, z1, x2, y2, z2
common/vars/ x1, y1, z1
common/vars/ x2, y2, z2

我想使用这些变量来做两件事:

  • 将每个变量集的值存储在数组中,这样最终结果将是integer :: a(3) = (/ x1, y1, z1 /), b(3) = (/ x2, y2, z2 /)定义的数组
  • 将第二组中的值存储在第一组中的对应变量中。即:x1 = x2y1 = y2z1 = z2

但是,在实际代码中,每组中有3个以上的变量。因此,我希望能够使用循环执行此操作。在C / C ++中,我可以通过增加指针来轻松地做到这一点。但是,指针不能像Fortran那样工作。有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

不知道您的Fortran编译器支持什么,但是这里有一些使用DEC Fortran-77的想法(技巧)。

  1. 类似于Equivalence,然后将x1引用更改为xyzzy.x1,依此类推。 您可以引用数组a()和b()。
STRUCTURE /MY_STRUCT/
 UNION
  MAP
    INTEGER X1, Y1, Z1, X2, Y2, Z2
  ENDMAP
  MAP
    INTEGER A(3), B(3)
  ENDMAP
 ENDUNION
ENDSTRUCTURE
COMMON /VARS/ XYZZY
RECORD /MY_STRUCT/ XYZZY
  1. 让子例程认为您已传递数组(使用COMMON)。可能需要编译为单独的源代码文件,以避免编译器警告。
 CALL MY_SUB( X1 )
 [...]

 SUBROUTINE MY_SUB( A )
 INTEGER A(3)