Arrays fortran77:指针数组还是结构数组?

Arrays fortran77:指针数组还是结构数组?,arrays,pointers,fortran77,Arrays,Pointers,Fortran77,我正在尝试优化fortran77中的代码,我想知道在例程或头文件中以以下方式声明的数组是指针数组还是结构数组: 案例1:real*8 xred(maxatm) 案例2:公共/原子/x(maxatm) 我已经在互联网上搜索过了,但是我找不到任何关于这个的信息,我发现的唯一一件事是,当你把一个数组传递给一个例程时,它是通过引用传递的。但是关于它是在头文件中还是在例程中声明的,我什么也没发现 提前谢谢 在.f77'header'/common/.CMN文件中,您正在声明要在程序中使用的变量。这些变量所

我正在尝试优化fortran77中的代码,我想知道在例程或头文件中以以下方式声明的数组是指针数组还是结构数组:

案例1:real*8 xred(maxatm)

案例2:公共/原子/x(maxatm)

我已经在互联网上搜索过了,但是我找不到任何关于这个的信息,我发现的唯一一件事是,当你把一个数组传递给一个例程时,它是通过引用传递的。但是关于它是在头文件中还是在例程中声明的,我什么也没发现


提前谢谢

在.f77'header'/common/.CMN文件中,您正在声明要在程序中使用的变量。这些变量所需的空间是在编译时为每个包含头声明的文件建立的。所以对于“My.CMN”,它包含

REAL*8 XEDG(-2:MAXNB+4)  ! left x-edges of cells    
REAL*8 YEDG(-2:MAXNB+4)  ! left y-edges of cells 
REAL*8 XC(-2:MAXNB+4) ! X CELL CENTERS
REAL*8 YC(-2:MAXNB+4) ! Y CELL CENTERS
每次通过
INCLUDE'My.CMN'
在.f77文件中声明这些变量时,都会创建这些变量

但是,使用公共块

COMMON /GRID/ XEDG,YEDG,XC,YC
告诉编译器给定的.CMN文件(或任何文件)中包含的变量在某种程度上是全局/共享的,在此编译器将使用指向内存中相关空间的指针

The COMMON statement defines a block of main memory storage so that 
different program units can share the same data without using arguments.

有关
COMMON
和Sun FORTRAN 77 4.0编译器参考手册的更多信息,请参阅。

我不理解您的问题。首先,标准fortran 77没有头文件的概念,所以请解释一下它们的确切含义。f77也没有指针或结构。关于通过引用传递的结果:标准根本没有提到它,因此,尽管这可能是最常见的方式,但它仍然依赖于实现。他只是问“引擎盖下”发生了什么。F77中的头文件是include/COMMON(.CMN等)文件,它们的作用与C中的.h头文件基本相同(尽管实现方式略有不同)。F77在框架中没有
指针
s。根据规范:“每个指针包含其配对变量的地址。基于指针的变量是指针语句中与指针配对的变量。基于指针的变量通常称为基于指针的变量。指针是包含地址的整数变量。”此外,我认为问题中结构和指针的意思是F77编译器管理内存的方法。标准很明确,传递给
子例程
s和
函数
s的所有值均为参考值,而非数值。另外,F77中是否有结构取决于编译器的选择。@Killercam:如果这是被问到的问题,它应该在问题中。我知道
include
语句,但问题的措辞表明变量是在“头文件”中声明的,而事实上,它只不过是在正确编译之前的文本替换,因此任何声明实际上都在常规程序单元中。您在指针上引用的文本不是来自f77标准,该标准也没有明确提到按引用传递或值传递。因为这都是特定于实现的,所以问题应该指定使用哪个编译器。