Fortran Coder

查看: 2167|回复: 1
打印 上一主题 下一主题

[数值问题] Fortran中传递数组,将三维数组传递到二维数组

[复制链接]

81

帖子

0

主题

0

精华

专家

F 币
471 元
贡献
232 点

规矩勋章新人勋章元老勋章

QQ
楼主
发表于 2022-8-4 09:01:47 | 显示全部楼层
本帖最后由 青衣巷 于 2022-8-4 09:06 编辑

a  :  2x2x2 三维数组。
a(:,:,1)   :   是 2x2 的二维数组,是 a 的前半部分。内容全部等于1
a(:,:,2)   :   也是 2x2 的二维数组,是 a 的后半部分。内容全部等于2

call getarray1(a(:,:,1),dim1,dim2)  这种是推荐使用的方式。没什么好说的。
call getarray2(a(1,1,2),dim1)  这种是不建议的使用方式,容易出错。不易于理解。

a 在内存里是这样存储的
a(1,1,1),a(2,1,1),a(1,2,1),a(2,2,1),a(1,1,2),a(2,1,2),a(1,2,2),a(2,2,2)
1       ,1       ,1       ,1       ,2       ,2       ,2       ,2


call getarray2(a(1,1,2),dim1) 把a(1,1,2) 传递给getarray2函数。
getarray2看到的部分是蓝色的部分:
a(1,1,1),a(2,1,1),a(1,2,1),a(2,2,1),a(1,1,2),a(2,1,2),a(1,2,2),a(2,2,2)
1       ,1       ,1       ,1       ,2       ,2       ,2       ,2      

因此对于getarray2来说,其值是4个2。

这种方式非常不好,不推荐。

参考:http://passarray.w.fcode.cn/

现代Fortran代码,传递数组全部用假定形状+module就好了。
彼岸,有永恒的守候...
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-4 14:58

Powered by Tencent X3.4

© 2013-2024 Tencent

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