Fortran Coder

查看: 11850|回复: 7
打印 上一主题 下一主题

[子程序] 调用子程序的返回值

[复制链接]

46

帖子

12

主题

0

精华

熟手

F 币
116 元
贡献
104 点
跳转到指定楼层
楼主
发表于 2014-7-16 11:50:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
主程序中CALL MULT22(HM1,BL77,HM7,NN,NN2,NG,2000,2000,4000) ,调用的子程序为:SUBROUTINE MULT22(X,Y,Z,N1,N2,N3,M1,M3,M5),那么调用子程序后只返回HM1,BL77,HM7,NN,NN2,NG这几个值吗?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

46

帖子

12

主题

0

精华

熟手

F 币
116 元
贡献
104 点
8#
 楼主| 发表于 2014-7-16 20:36:25 | 只看该作者
chuxf 发表于 2014-7-16 20:03
NM 是通过 common 获得的,不一定在主程序里,只要使用了common的程序单元,都存在。(相同的拷贝) ...

哦,明白了,我是一个初学者,以后还请大神多多指点,谢谢了

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

7#
发表于 2014-7-16 20:03:05 | 只看该作者
gengyan123456 发表于 2014-7-16 19:16
谢谢!那你可不可以帮我看一下这个程序
SUBROUTINE MATRIX(norder)
      implicit real*8 (a-h,o-z)

NM 是通过 common 获得的,不一定在主程序里,只要使用了common的程序单元,都存在。(相同的拷贝)

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

6#
发表于 2014-7-16 20:01:56 | 只看该作者
程序单元之间共享数据,一般有几种方法:
1.实参虚参对应
2.common(不推荐)
3.module(推荐)
4.文件(极其大量数据)

既然你使用了实参虚参对应,就不必使用 common 了。或者你使用 common,而不要使用实参虚参对应。

46

帖子

12

主题

0

精华

熟手

F 币
116 元
贡献
104 点
5#
 楼主| 发表于 2014-7-16 19:44:27 | 只看该作者
chuxf 发表于 2014-7-16 18:57
虚参的数值可以改变,同时会影响实参。但通常,这种情况不叫“返回值”,以便与 function 相区别。 ...

还是因为COMMON给它定义了全局变量,所以这个值继承了主程序里的值,执行完之后是变回主程序里的值,还是在主程序里用在子程序里执行后的值啊?

46

帖子

12

主题

0

精华

熟手

F 币
116 元
贡献
104 点
地板
 楼主| 发表于 2014-7-16 19:16:39 | 只看该作者
chuxf 发表于 2014-7-16 18:57
虚参的数值可以改变,同时会影响实参。但通常,这种情况不叫“返回值”,以便与 function 相区别。 ...

谢谢!那你可不可以帮我看一下这个程序
SUBROUTINE MATRIX(norder)
      implicit real*8 (a-h,o-z)
      COMMON NG,NM,NM1,NNG,NN,NMS,BA,BB,NSVC,NMG,NTCSC,NMGS
      COMMON/COMC/NGIN(165),NGOUT(165),NMIN(420),NMOUT(420),NMM(420,3)
     +        /COMD/BK(420),BK1(165),BK2(165),TA(165),TB(165),NPSS(10,10)
        COMMON/PGV/PFSV(9,6),GBII(29,4),GBIJ(50,4),VGBI(28,7)
        COMMON/SVTC/KSVC(3,4),SVC(3),KTCSC(3,4),TCSC(3,2),
     1             NDSV(3,11),NDTC(3,11)
      real*8 D1(300,300),BL3(2000,3),BL7(2000,3),HL9(20000,3),
     1           DL7(6000,3),YC(2000,3),Y0(11,3)
      real*8 D2(210,210),HM1(2000,3),BL77(2000,3),HM7(4000,3)
      WRITE(3,*) NG,NM,NM1,NNG,NN,NMS,BA,BB
      OPEN(9,FILE='DVDX.DAT')
      DO 8 I=1,NM
        NMM(I,1)=0
        NMM(I,2)=0
8     CONTINUE
      Y0(1,1)=0.D0
      Y0(1,3)=0.D0
      Y0(1,2)=NNG+1
      DO 18 I=1,NNG
          NI=NN+NNG+I
          II=I*100
为什么有的参数在这里没有赋值还用了呢?如NM的值,它是主程序里的值吗?

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

板凳
发表于 2014-7-16 18:57:20 | 只看该作者
虚参的数值可以改变,同时会影响实参。但通常,这种情况不叫“返回值”,以便与 function 相区别。

62

帖子

14

主题

0

精华

专家

F 币
557 元
贡献
326 点
沙发
发表于 2014-7-16 17:24:41 | 只看该作者

回帖奖励 +5

主程序中的参数也就HM1,BL77,HM7,NN,NN2,NG这几个
你觉得还要返回哪些值呢?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-23 21:55

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表