是否可以在子例程中分配公共数组的大小和值,然后从程序的其他子例程中使用它?
以下程序无法正常工作,但我想执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
分配
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
Run Code Online (Sandbox Code Playgroud)
不可以。您可以将指针放在普通的但不能分配的指针中。
原因是通用的基本概念是存储关联,您可以在其中创建通用的所有事物的连续序列,然后在范围之间共享这些序列。可分配表的大小可以在范围内动态变化,这将使得在可分配表之后的公共块中按事物顺序进行跟踪变得相当困难。
(可分配地址的典型实现意味着直接与可分配地址相关联的存储只是一个描述符-实际数据保存在其他位置。考虑到分配状态(如描述符中记录的那样),这实际上打破了存储单元连续序列的概念。 )和数据都是可分配值的一部分,指针的实现类似,但是从概念上讲,内存中其他位置的数据不是指针值的一部分,因此不应期望它出现在指针中。公共对象描述的连续序列-指针在序列中,但不在指针指向的序列中。)
可分配要求F90。这意味着您可以使用模块变量-比对全局数据使用common更好的解决方案。如果必须使用common执行此操作,请使用数据指针。
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |