xiaoniu 发表于 2005-4-21 10:32:58

请教基本问题:主程序,子程序传入传出变量的写法问题

在主程序中:

前三个变量为主程序输入给子程序的,后三个变量是从子程序输出给主程序的。

写法1: call subtry(a1,a2,a3,b1,b2,b3)      ----〉对的

写法2: call subtry(a(2),a(5),a(6),b1,b2,b3) ----〉对的
            (其中a是数组:a(10))
            数组a(10)中的第2,5,6个值作为input输入给子程序。

写法3: call subtry(a(2),a(5),a(6),b(3),b(6),b(7)) ----〉对的
         (其中a是数组:a(10); b是数组:b(10))         
            数组a(10)中的第2,5,6个值作为input输入给子程序;从自程序输出的三个值分别给b数组的第3,6,7。
==========================================

在子程序里:

写法1:subroutine subtry(c1,c2,c3,d1,d2,d3)            ---->对的
写法2:subroutine subtry(c(1),c(2),c(3),d1,d2,d3)   ---->错的
          c(1),c(2),c(3)不能这么写
写法2:subroutine subtry(c1,c2,c3,d(1),d(2),d(3))   ---->错的
         d(1),d(2),d(3)不能这么写

==========================================

上面我试的那些写法,得出的对错结论是对的吗?

1.无论子程序,主程序所有的变量都写成scalar,就不会有问题?
2.但是想直接把一个数值写进数组的某一个位置,好像只能在主程序里这样写,对吗?这么写会有什么潜在的错误?

对这个数据的传递比较糊涂,请各位老师给指导一下。

谢谢:)

iwtry 发表于 2005-4-21 15:40:23

Re:请教基本问题:主程序,子程序传入传出变量的写法问题

通常,主程序调用子程序时,输入参数可以是变量,数组名,数组一部分。子程序头中好像只能是变量,数组,而不能是数组一部分。你得出的结论应该是正确的。至于你的问题,我不敢武断,因为在这方面没有什么深入的研究过。

GWinston 发表于 2005-4-21 18:33:06

Re:请教基本问题:主程序,子程序传入传出变量的写法问题

同意iwtry的观点。
主程序用数组传递时,子程序对应只能是数组
主程序用数组元素传递时,子程序可以是数组,也可以是标量
主程序用标量传递时,子程序只能是标量

想直接把一个数值写进数组的某一个位置,可将该数组元素传递给子程序,子程序中用标量与之对应。

xiaoniu 发表于 2005-4-22 11:25:51

Re:请教基本问题:主程序,子程序传入传出变量的写法问题

谢谢楼上iwtry和GWinston 的回复:)

这样我就放心往下写了,你们回复的很清楚。还有两个问题:

1. 对于数组a(5),b(5),标量a1,a2,b1,b2

main: call sub(a(2),a(4),b(3),b(5))
subroutine sub(a1,a2,b1,b2)
这样是比较保险的,应该不会有错的?

2.GWinston 提到的“主程序用数组元素传递时,子程序可以是数组“
这个不是太明白,可以举个例子吗?

再次感谢两位老师的回复,我刚开始用,以后还会有很多问题请教:)

GWinston 发表于 2005-4-22 12:51:14

Re:请教基本问题:主程序,子程序传入传出变量的写法问题

main: call sub(a(2),a(4),b(3),b(5))
subroutine sub(a1,a2,b1,b2)
一、子程序中a1,a2,b1,b2是标量:没有问题,子程序中a1,a2,b1,b2值的改变会影响主程序中a(2),a(4),b(3),b(5)的值。
二、子程序中a1,a2,b1,b2是数组:假设子程序中定义数组为:
    demension a1(N),a2(N),b1(N),b2(N)
则虚实结合如下:
       a1(1)对应a(2),a1(2)对应a(3),a1(3)对应a(4),......
       a2(1)对应a(4),a2(2)对应a(5),a2(3)对应a(6),......
       b1(1)对应b(3),b1(2)对应b(4),b1(3)对应b(5),......
       b2(1)对应b(5),b2(2)对应b(6),b2(3)对应b(7),......
此时需注意数组的越界问题,即a1(N)对应的数组a的元素是否超出a的下标范围.
      总之, 子程序中数组的第一个元素对应主程序中传递过来的那个数组元素,后面的根据数组在内存中存放的位置一一对应.

hillyuan 发表于 2005-4-22 13:15:15

Re:请教基本问题:主程序,子程序传入传出变量的写法问题

则虚实结合如下:
a1(1)对应a(2),a1(2)对应a(3),a1(3)对应a(4),......
a2(1)对应a(4),a2(2)对应a(5),a2(3)对应a(6),......
b1(1)对应b(3),b1(2)对应b(4),b1(3)对应b(5),......
b2(1)对应b(5),b2(2)对应b(6),b2(3)对应b(7),......

=>危险的写法!应该杜绝。
   另外如果采用explicit interface,编译出错.
页: [1]
查看完整版本: 请教基本问题:主程序,子程序传入传出变量的写法问题