【发布时间】:2014-01-25 10:20:34
【问题描述】:
关于将数组传递给函数和/或子例程,我有点头疼。我的代码或多或少如下所示。
program test
implicit none
integer arraySize
parameter (arraySize = 10)
integer myFunction
integer someValue
integer array1(arraySize,arraySize)
...
...
someValue = myFunction(arraySize,array1)
...
end
integer function myFunction(arraySize,array1)
implicit none
integer arraySize
integer array1(arraySize,arraySize)
...
end
我可以编译这种类型的子程序,并对数组中的值进行相关的数学运算。这是通过几个 4 维数组完成的,所有这些数组都以上述相同类型的方式定义。
但是,我有一个子程序,我想传递其中的 5 个数组,并对这些值做一些数学运算。我想我会尝试使用通用语句来简化子例程语句,而不是将每个数组作为参数。所以我有以下内容:
program test2
implicit none
integer arraySize
parameter (arraySize = 10)
integer array1(arraySize,arraySize)
integer array2(arraySize,arraySize)
integer array3(arraySize,arraySize)
common /myArrays/ array1, array2, array3
...
call arraySum(arraySize)
...
end
subroutine arraySum(arraySize)
implicit none
integer arraySize
integer array1(arraySize,arraySize)
integer array2(arraySize,arraySize)
integer array3(arraySize,arraySize)
common /myArrays/ array1,array2,array3
...
end
我尝试编译,我得到这个错误
integer array1(arraySize,arraySize)
1
Error: Variable 'arraysize' at (1) in this context must be constant
出于多种原因,我感到困惑。我是否误解了如何使用常用语句?当然,如果我可以像在第一个示例中那样将数组的大小传递给子程序,那么为什么这种方法会有所不同呢?还是我需要在子例程中重新定义另一个整数并使其成为等于arraySize 值的常数?或者它只是 F77 的一个怪癖,我应该咬紧牙关在子程序参数中传递所有 3 个数组?
我为代码的陈旧风格道歉,如果我对 Fortran 编程的原则有任何误解(我之前唯一的经验是使用 C 和 C++)。我想使用比 F77 更新的东西,但目前不是一个选项(学生)。
【问题讨论】:
标签: arrays function fortran subroutine fortran77