为什么这个Fortran代码不正确?
function foo(x)
real x
real, dimension(3) :: foo
foo = (/1, 2, 3/)
end
......并在主程序中
print*, foo(x)(1)
为什么我们不能直接访问函数结果中的元素?
答案 0 :(得分:3)
当你思考自己的问题时
Why we cannot access element in function result directly?
我建议您在主程序中编写行,例如
res = foo(x) ! having taken care to declare res appropriately
print*, res(1)
继续你的编码。以你尝试过的方式索引函数调用在语法上是不正确的。
因此,对原始问题的一个答案是,因为这是定义Fortran语法的方式,可能会提示您回复为什么Fortran的语法是这样定义的? Even如果这个过程以Fortran设计的根源(现在超过50年)的形式出现了答案,那么你仍然需要修改你的代码以与Fortran的语法保持一致。肯定你的编译器不会说你知道,你编写的内容比我编程接受的语法要好,我现在就编译好了...... < / p>
答案 1 :(得分:1)
answer by High Performance Mark告诉所有需要的人。正如你在句法上的好感之后我会在那里解决一件事:&#34;已经注意适当地宣布res&#34;。
可以使用关联构造来隐藏这一点。
associate (res => foo(x))
print *, res(1)
end associate
除了减少垃圾声明之外,这在答案中没有任何改变。