gpt4 book ai didi

arrays - Fortran 中零大小数组究竟发生了什么?

转载 作者:行者123 更新时间:2023-12-02 02:16:40 26 4
gpt4 key购买 nike

我看到了几个有关将未分配的数组传递到函数或子例程中的问题,这些问题会导致运行时错误,其中推荐的解决方案是在调用过程中以零长度分配它。我做了一些实验:

program test
integer, allocatable :: A(:)

allocate(A(3))
print*, size(A)
deallocate(A)

allocate(A(-5:-3))
print*, size(A)
deallocate(A)

allocate(A(0))
A(0) = 9
print*,A(0),'Size:',size(a)
deallocate(a)

allocate(A(-4))
print*,size(A)
deallocate(A)

allocate(A(-4:-4))
print*,size(A)
end

第一个是显而易见的。长度为 3 的数组。第二个数组利用了 Fortran 的一项很酷的功能,定义您自己的索引限制。它是一个长度为 3 的数组,包含元素 A(-5)、A(-4) 和 A(-3)。

第三个变得危险。我用零分配它。我可以指定一个值!它打印:9 尺寸:0
第四个也打印出大小为零!

显然,分配长度为1、索引为-4的数组的正确方法是最后一个。

问题:在第三个和第四个变量上,我是否只是写入了可能属于其他变量的内存(当然这个示例没有其他变量)?

最佳答案

尝试定义和引用元素 A(0) 时,第三个片段无效。零大小的数组没有元素(否则它的大小不会为零) - 这包括不存在索引为零的元素。

第四个片段中没有这样的无效定义或引用。分配的数组再次具有零大小(这就是语言所说的当您指定一个维度的上限小于下限的数组时发生的情况(如果未指定,则默认下限为 1)),但什么也没有然后有趣的是分配的数组就完成了。

您可以在不使用可分配对象的情况下构建等效示例。

关于arrays - Fortran 中零大小数组究竟发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48472873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com