|
本帖最后由 青衣巷 于 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就好了。
|
|