如何在 ASSOCIATE 块中保留 Fortran 数组边界?

Li *_*ong 5 arrays fortran

我想将关联块中的数组边界保留为:

integer a(2:4,2)
associate (b => a(:,1))
    print *, lbound(b), ubound(b)
end associate
Run Code Online (Sandbox Code Playgroud)

我期望bis 2and的边界4,但实际上它们是1and 3。这该怎么做?提前致谢!

Vla*_*r F 4

您正在关联到一个子数组,其边界始终从 1 开始。尝试

 print *, lbound(a(:,1),1)
Run Code Online (Sandbox Code Playgroud)

AFAIK 你不能在associate构造中使用指针重新映射技巧。具体来说:“如果选择器是一个数组,则关联实体是一个数组,其每个维度的下限等于内在 LBOUND(选择器) 的值。

但你当然可以使用指针

integer,target :: a(2:4,2)

integer,pointer :: c(:)


associate (b => a(:,1))
    print *, lbound(b), ubound(b)
end associate

c(2:4) => a(:,1)
print *, lbound(c), ubound(c)

end
Run Code Online (Sandbox Code Playgroud)