我想创建一个指向尺寸较小的数组的指针。
例如,我有一些数组arr(1:2, 1:10, 1:10)
。
现在我想创建一个指向arr(1:1, 1:10, 1:10)
的指针,但我想首先删除我不知道应该如何命名它看起来像索引,第二指针指向(2:2,1:10) ,1:10)。
我需要它,因为我想将具有2维(矩阵)的数组发送到函数。
以下是使用伪代码表示我想要做的事情。
INTEGER, DIMENSION (1:2, 1:10, 1:10), TARGET :: BOUNDRIES
INTEGER, DIMENSION (:,:), POINTER : LEFT_BOUNDRY
LEFT_BOUNDRY => BOUNDRIES(1,1:10,1:10)
DO i = 1,n
DO j = 1,10
write(*,*) LEFT_BOUNDRY(i,j)
END DO
END DO
有可能吗?
答案 0 :(得分:1)
当我们在函数或子例程(统称为过程)中有 dummy 参数时,我们在执行该过程时会有相应的实际参数。考虑子例程s
:
subroutine s(x)
real x(5,2)
...
end subroutine s
伪参数x
在这种情况下是一个显式的形状数组,排名为2,形状为[5,2]
。
如果我们想要
call s(y)
其中y
是某些real
的东西,我们不需要y
整数数组,其排名为2,形状为[5,2]
。我们只需要y
至少有十个元素,当我们在子例程中时,一个名为存储关联的东西将这十个元素映射到x
。
想象一下,然后
real y1(10), y2(1,10), y3(29)
call s(y1)
call s(y2)
call s(y3)
这些中的每一个都有效(在最后一种情况下,它只是与伪参数关联的前十个元素)。
至关重要的是,它是一个所谓的元素序列,在选择与x
相关联的元素时非常重要。考虑
real y(5,12,10,10)
call s (y(1,1,1:2,3:7))
这是十个元素中y的数组部分。这十个元素在子例程x
中一起变为s
。
总而言之,如果你想将arr(2,1:10,1:10)
(实际上是一个2级数组部分)传递给第2级参数,这是一个不超过100个元素的显式形状数组,一切都很好。