fortran90 内部过程的返回值能否有多个?
答案:1 悬赏:0
解决时间 2021-03-17 11:03
- 提问者网友:斑駁影
- 2021-03-17 00:30
fortran90 内部过程的返回值能否有多个?
最佳答案
- 二级知识专家网友:枭雄戏美人
- 2021-03-17 01:17
不能。
任何函数,返回值都只有一个。
有几种途径来实现你期望的多个返回值。
第一,返回一个数组,存放你的多个值。
第二,也可以返回一个结构体,Type
第三,用虚参来返回。因为 Fortran 是传地址的,而不是传值的。所以你在函数内改变虚参的值,调用者的实参也会变化。
第三,用全局变量返回。(不是很推荐)
补充:
为什么只有一个?这个问题比较难理解。
CPU里有很多寄存器,分别用于不同的功能,通常来说,32位CPU的eax寄存器用来存放返回值。
因为eax只有一个,所以返回值只有一个。
可以通过虚参来获得返回数据。正如我说的第三条那样。
虽然这样也能返回数据,但叫法不能叫“返回值”了,否则会混淆概念。
子例子程序?subroutine 和 function ?我希望从概念上,不要区分这两者。
subroutine 和 function 唯一的区别就是一个有返回值,一个没有返回值。其他完全完全一摸一样。
说白了,subroutine 就是丢弃了返回值的 function。这样说的话,这两个更是没有任何区别。
子例子程序,某些中文教材喜欢这么叫。我个人认为没多大意义。两者不必区分
任何函数,返回值都只有一个。
有几种途径来实现你期望的多个返回值。
第一,返回一个数组,存放你的多个值。
第二,也可以返回一个结构体,Type
第三,用虚参来返回。因为 Fortran 是传地址的,而不是传值的。所以你在函数内改变虚参的值,调用者的实参也会变化。
第三,用全局变量返回。(不是很推荐)
补充:
为什么只有一个?这个问题比较难理解。
CPU里有很多寄存器,分别用于不同的功能,通常来说,32位CPU的eax寄存器用来存放返回值。
因为eax只有一个,所以返回值只有一个。
可以通过虚参来获得返回数据。正如我说的第三条那样。
虽然这样也能返回数据,但叫法不能叫“返回值”了,否则会混淆概念。
子例子程序?subroutine 和 function ?我希望从概念上,不要区分这两者。
subroutine 和 function 唯一的区别就是一个有返回值,一个没有返回值。其他完全完全一摸一样。
说白了,subroutine 就是丢弃了返回值的 function。这样说的话,这两个更是没有任何区别。
子例子程序,某些中文教材喜欢这么叫。我个人认为没多大意义。两者不必区分
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯