type array1D
integer, allocatable :: elements(:) ! The compiler is fine with this!
endtype array1D
type(array1D) :: array2D(10)
integer :: i
do i=1, size(array2D)
allocate(array2D(i)%elements(sizeAt(i))
enddo
int sizeAt(int x); //Function that gets the size in the 2nd dimension
int * array[maxSize];
for (int x = 0; x < maxSize; ++x)
array[x] = (int*)(calloc(sizeAt(x) , sizeof(int)));
在 C 语言中,确实不存在多维数组这样的东西。您可以使用指向数组的指针数组来实现看起来类似的东西,但这并不是真正的多维数组,因为它不共享公共内存块。这可能会对性能产生影响。事实上,在 HPC(许多 Fortran 用户花费时间的地方)中,多维 C 数组通常是包装在宏中的一维数组,用于根据维度的大小计算步幅。另外,取消引用 7D 数组,如下所示:
a[i][j][k][l][m][n][o]
比以下内容更难输入:
a(i,j,k,l,m,n,o)
最后,您发布的解决方案最接近您尝试模拟的 C 代码 - 它有什么问题?请注意,对于您的问题陈述,可能需要更复杂的数据结构(如链接列表)(可以用 C 或 Fortran 实现)。当然,就性能而言,链表是最差的,但如果这不是问题,那么它可能是正确的数据结构,因为“购物者”可以决定将更多东西添加到他们的“购物车”中,即使它不在他们带到商店的购物清单上。