【问题标题】:Fortran common variables, allocatable arrayFortran 公共变量,可分配数组
【发布时间】:2013-04-12 06:25:00
【问题描述】:

是否可以在子程序中分配公共数组的大小和值,然后在程序的其他子程序中使用它?

以下程序不起作用,但我想做这样的事情:

main.f

program main

integer n
integer, allocatable :: co(:)

common n, co

call assign

print *, co(1), co(2)

deallocate(co)
stop
end program main

assign.f

subroutine assign

integer n
integer, allocatable :: co(:)

common n, co

n = 2
allocate(co(n))

co(1) = 1
co(2) = 2

return
end subroutine assign

【问题讨论】:

  • 最好忘记commonblock dataequivalence 之类的内容。至少对于初学者来说。

标签: arrays fortran


【解决方案1】:

没有。你可以把指针放到公共的,但不是可分配的。

原因是通用的一个基本概念是存储关联,您可以在其中创建通用的所有事物的连续序列,然后这些序列在范围之间共享。 Allocatables 的大小可以在一个范围内动态变化,这会使跟踪 allocatables 之后的公共块中的事物序列变得相当困难。

(可分配的典型实现意味着与可分配直接关联的存储只是一个描述符 - 实际数据保存在其他地方。这实际上打破了存储单元连续序列的概念,因为分配状态(如记录在描述符中)和数据都是可分配值的一部分。指针的实现是相似的,但是从概念上讲,内存中其他地方的数据不是指针值的一部分,因此不应期望出现在公共描述的连续序列中 - 指针在序列中,但不是它指向的位置。)

可分配项需要 F90。这意味着您可以使用模块变量——这是一个比对全局数据使用 common 更好的解决方案。如果您必须使用 common 执行此操作,请使用数据指针。

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 2014-03-27
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多