gpt4 book ai didi

arrays - 有什么理由只传递第一个元素而不是整个数组?

转载 作者:行者123 更新时间:2023-12-02 01:28:20 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How can a scalar be passed to a vector (1D array) to a Fortran subroutine?

(2 个回答)


5年前关闭。




好的,所以昨天我有一个同事来到我的办公室,问我一个关于他必须使用的 Fortran 代码的问题。

基本上,他使用的代码有一个很长的多维数组,以及一个只需要这个长的多维数组作为参数的子例程。

但是,调用该子例程的代码仅传递数组的第一个元素。然而代码有效。所以他问我怎么会这样。

我还没有看到他的特定代码,但这是我如何理解这个问题的一个例子(它有效!):

subroutine print_array(a)
implicit none
integer :: a(10)
write(*, *) a
end subroutine print_array

program passing
implicit none
integer :: i(10)
i = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 /)
call print_array(i(1))
end program passing

所以我告诉他,Fortran 是按顺序存储数组的,数组的位置和第一个元素是一样的,而且由于子程序需要一个特定的形状,它知道沿着这个序列读取多远,依此类推。

我还告诉他这是不好的编程习惯,他不应该自己编写这种代码。

但从那以后我一直在想:为什么写这篇文章的人首先要这样做?有什么理由这样做吗? (这甚至不必是一个很好的理由。)

或者我是对的,这只是愚蠢且容易出错?

最佳答案

您对其工作原理的解释是正确的。你对遵循这种过时做法的厌恶得到了广泛的支持。

至于原因,我已经忘记了(虽然很久以前我曾经这样做过——比如从酒吧开车回家和抽烟,每个人都这样做了,但什么也没想到)但也许该语言的最早版本不支持将整个数组作为参数传递。也许其他人的大脑不会被烈酒、烟草和 FORTRAN 的强效混合所迷惑(没错,大声喊出来)记得更清楚。

关于arrays - 有什么理由只传递第一个元素而不是整个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643669/

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