pointers - 将一维数组重塑为二维指针数组 Fortran
问题描述
uvw(:,:)
我有一个二维指针,我有一个 1d 缓冲区数组x(:)
。
现在我需要指出uvw(1,:)=>x(1:ncell)
等等uvw(2,:)=>x(ncell+1:ncell*2)
。
我做了一个非常简单的例子。我知道指针数组不起作用,但是有人知道如何解决这个问题吗?
PS:出于务实的原因,我不想用声明的类型包装我的 uvw。(我正在更改一些代码,并且需要 uvw 作为 2D 指针。目前是一个数组,我的想法是避免改变 uvw 的使用方式,因为它被使用了数千次)
program test
real, allocatable,target :: x(:)
real, pointer :: ptr(:,:)
allocate(x(100) )
x = 1.
ptr(1,:) => x(1:10)
end program
错误消息说:
`错误 #8524:此数据指针分配的语法不正确:在此上下文中需要“绑定规范”或“绑定重新映射”。[1]
ptr(1,:) => x(1:10)
----^`
解决方案
您正在尝试执行指针边界重新映射,但您的语法和方法不正确。
指针边界重新映射是一种使指针形状与目标形状不同的方法。特别是,指针和目标的等级可能不同。然而,在这样的分配中,有必要明确指定重新映射的下限和上限;单独使用是不够:
的。
此外,您需要一次性分配整个指针。也就是说,您不能在多个语句中使用“前十个元素指向该切片,后十个指向该切片”等等。
赋值语句将是
ptr(1:10,1:10) => x
请注意,这也意味着您实际上无法拥有您想要的东西。您要求元素ptr(1,1:10)
对应于x(1:10)
和ptr(2,2:10)
对应于x(11:20)
。这是不可能的:数组元素必须按顺序匹配:ptr(1:10,1)
作为 must 的前十个元素,ptr
而是与前十个元素相关联x(1:10)
。上面更正的指针分配有这个。
推荐阅读
- java - 如何从 kubernetes java 客户端连接到 Istio api 并检索虚拟服务?
- java - 黄瓜报告未生成
- azure - 如何从 Azure AppInsights 分析访问自定义事件值?
- c# - 识别对象类型并在运行时将其传递给函数 typeof()
- excel - 在整个列中搜索部分字符串或字符匹配并在另一列上显示结果
- angular - 为什么对前端和后端应用程序使用不同的容器更好?即 net core 3.0 后端和 angular 8 前端
- javascript - 用 this.state 返回一个变量
- oracle - 在 oracle db 中,最好是在列中默认数据还是在插入语句中设置值?
- python - 使用 Python 将 BLOB 图像转换为 PNG、JPG
- python-imaging-library - 尝试使用 PIL 保存 excel 图表时出现 python AttributeError