【发布时间】:2021-08-14 05:32:29
【问题描述】:
我想创建一个指向数组的指针数组,如果/当我的结果准备好时动态分配这些指针。以下代码使用一种类型来解决无法设置指针数组的问题,但函数 makeArray 始终返回 same 内存地址。
预期结果将是不同的地址,因此是可单独控制的数组。 (我需要这样做,因为我有非常非常大的数组,这些数组将随机填充但必须排序,而且我不想预先分配一个巨大的 2x2 数组(8GB 的顺序),也不想经常重新分配和排序为新结果出现了,所以我的解决方案是预分配一个大的 1x1 数组,该数组可以有指向第二个暗淡的指针,这意味着如果/当它可用时,我可以将指向结果的指针放在正确的“槽”中)
module mymodule
contains
function makeArray(size)
integer :: size
integer, target, allocatable :: a(:)
integer, pointer :: makeArray(:)
allocate(a(size))
a = 0
makeArray => a
end function
end module mymodule
program test
use mymodule
implicit none
type :: IntPointer
integer, pointer :: ptr(:)
integer :: id
end type
type(IntPointer), allocatable :: ptrarray(:)
integer :: i
allocate(ptrarray(5))
ptrarray(1)%ptr => makeArray(1277)
ptrarray(1)%id = 1
ptrarray(2)%ptr => makeArray(13567)
ptrarray(2)%id = 2
ptrarray(1)%ptr(12) = 10
do i=1, size(ptrarray)
write(*,*) ptrarray(i)%id
write(*,*) LOC(ptrarray(i)%ptr)
end do
end program
谢谢
EDIT 已解决,我将把它留在这里以供后代使用: 我想问题的症结在于能够分配一个二维数组,其中二维可以显着变化。 我需要寻找的神奇词是“Ragged Array”,看来this 的帖子回答了我的问题。
【问题讨论】:
-
通常需要问的问题是你确定要指针吗?
-
@steve 我想问题的症结在于能够分配一个二维数组,其中二维可能有很大差异。我需要寻找的神奇词是“Ragged Array”,似乎 this 帖子回答了我的问题
-
@Luke 另见stackoverflow.com/questions/67697060/… 这个词也是jagged数组。
标签: arrays function pointers fortran intel-fortran