gpt4 book ai didi

arrays - 在Fortran中访问返回数组的元素

转载 作者:行者123 更新时间:2023-12-04 09:31:30 24 4
gpt4 key购买 nike

如何访问从函数返回的数组元素?例如,shape()返回一个整数数组。如何将该数组的元素与整数进行比较?以下内容无法编译:

integer :: a
integer, dimension(5) :: b

a = 5
if (a .eq. shape(b)) then
print *, 'equal'
end if

错误是:
if (a .eq. shape(c)) then
1
Error: IF clause at (1) requires a scalar LOGICAL expression

我了解这是因为 shape(c)返回一个数组。但是,似乎无法像下面这样访问数组的元素: shape(c)(1)
现在,如果我添加这两行:
integer, dimension(1) :: c
c = shape(b)

...并将 if子句更改为此:
if (a .eq. c(1)) then

...然后它起作用了。但是我是否真的必须声明一个额外的数组变量来保存 shape()的返回值,还是有其他方法可以做到这一点?

最佳答案

除了涉及SHAPE和逻辑表达式等的答案之外,还可以回答您的问题“如何访问从函数返回的数组的元素?”的一般答案。是

  • 您可以将具有函数引用的表达式分配给数组变量,然后对该数组变量进行索引。
  • 您可以使用具有函数引用的表达式作为过程的实际参数,该过程采用虚拟数组参数,并为您进行索引。

  • 因此,您对最后一个问题的一般回答是:“但是我真的必须声明一个额外的数组变量来保存shape()的返回值,还是有其他方法可以做到这一点?”是“是,您确实需要声明另一个数组变量”,因此是“否,没有其他方法”。

    (请注意,合理的优化编译器一旦获得数组函数的结果,就可以避免进行任何其他内存操作/分配等操作,这实际上只是语法问题。)

    语言设计这一特定方面的基本原理有时是由于需要避免语法歧义和字符类型的数组函数结果的混淆(它们可能会被索引和/或子串化-您如何知道要用的是什么?) 。其他人则认为这样做是为了惹恼C程序员。

    关于arrays - 在Fortran中访问返回数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17843826/

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