请教基本问题:主程序,子程序传入传出变量的写法问题
在主程序中:前三个变量为主程序输入给子程序的,后三个变量是从子程序输出给主程序的。
写法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.但是想直接把一个数值写进数组的某一个位置,好像只能在主程序里这样写,对吗?这么写会有什么潜在的错误?
对这个数据的传递比较糊涂,请各位老师给指导一下。
谢谢:)
Re:请教基本问题:主程序,子程序传入传出变量的写法问题
通常,主程序调用子程序时,输入参数可以是变量,数组名,数组一部分。子程序头中好像只能是变量,数组,而不能是数组一部分。你得出的结论应该是正确的。至于你的问题,我不敢武断,因为在这方面没有什么深入的研究过。Re:请教基本问题:主程序,子程序传入传出变量的写法问题
同意iwtry的观点。主程序用数组传递时,子程序对应只能是数组
主程序用数组元素传递时,子程序可以是数组,也可以是标量
主程序用标量传递时,子程序只能是标量
想直接把一个数值写进数组的某一个位置,可将该数组元素传递给子程序,子程序中用标量与之对应。
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 提到的“主程序用数组元素传递时,子程序可以是数组“
这个不是太明白,可以举个例子吗?
再次感谢两位老师的回复,我刚开始用,以后还会有很多问题请教:)
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的下标范围.
总之, 子程序中数组的第一个元素对应主程序中传递过来的那个数组元素,后面的根据数组在内存中存放的位置一一对应.
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]