在fortran中只为二维数组分配一维

Posted

技术标签:

【中文标题】在fortran中只为二维数组分配一维【英文标题】:Allocate only one dimension for a 2D array in fortran 【发布时间】:2015-06-12 22:50:55 【问题描述】:

假设我有一个二维数组 A(:,2),其中只有第一维的大小是未知的。 是否可以仅分配 A 的第一个维度? 如果没有,我每次都必须使用“ allocate(A(n,2)) ”,将 A 视为 A(:,:)。

【问题讨论】:

不,你不能一次“分配”一个数组。也许如果您解释了为什么要这样做(对我迟钝的感觉),那么有人可能会提供一个既满足您的要求又满足 Fortran 规则的解决方案。 如果你事先知道数组的维度,那么我猜A(:,1)A(:,2) 指的是不同类型的数量,比如一些 x 和 y 值。那么,主要是为了可读性,单独声明数组可能会更好,例如x_data(:)y_data(:)。但如果没有更多信息,很难说。 正确,您不能将数组声明为.. dimension (:,2), allocatable。因此,即使您在编写程序时知道某个特定维度,也必须按照您编写的那样使用 allocate 语句分配该维度。 【参考方案1】:

如果第二维的大小始终为 2,您可以创建一个包含两个变量的数据类型,然后分配它们的数组:

program main
    implicit none

    type two_things
        integer :: first
        integer :: second
    end type two_things

    type(two_things), dimension(:), allocatable :: A

    allocate(A(100))

    A(1)%first = 1
    A(1)%second = 2

    print*, A(1)%first, A(1)%second, shape(A)

    deallocate(A)

end program main

【讨论】:

这是一种很好且合理的方法。谢谢。 这取决于您需要做什么,但请记住,拥有 100 个双组件类型的实例可能不如拥有两个 100 元素数组或一个 2 级数组有效。

以上是关于在fortran中只为二维数组分配一维的主要内容,如果未能解决你的问题,请参考以下文章

试图将一个连续的动态二维数组从 C 传递到 Fortran

试图将一个连续的动态二维数组从 C 传递到 Fortran

java数组(一维数组,二维数组)

如何将二维数组的一维分配给VBA中的新一维数组

如何将二维数组的一维分配给一个指针。

将二维指针数组中的字符串分配给一维指针数组