2016-11-21 146 views
3

在将其标记为重复项之前,请注意我正在为任意维数组寻找更一般的解决方案。我已经在这里或在有关制作二维或三维整数数组的论坛上看过很多帖子,但这些是针对特定尺寸的特定解决方案。我想为任何维度的数组提供一个通用的解决方案。 首先我需要有一种类型的intList中定义如下:如何在C中创建多维动态分配数组?

typedef struct{ 
    int l // length of the list 
    int * e // pointer to the first element of the array 
}intlist; 

这实际上填满了用于治疗阵列只是作为指针在C间隙。使用这种类型,我可以将数组传递给函数,而不必担心失去大小。 然后在下一步,我想有一个mdintlist作为多维动态分配数组。类型定义应该是这样的:

typedef struct Mdintlist{ 
    intlist d // dimension of the array 
    /* second part */ 
}mdintlist; 

第二部分有几个选项。期权是有对低维的mdintlist指针像

struct Mdintlist * c; 

其他选项是使用空指针:

void * c; 

我不知道应该怎么继续下去。

P.S.一种解决方案可能是分配一块内存,然后使用函数调用这些元素。不过,我想调用数组形式的元素。像tmpmdintlist.c [1] [2] [3] ...

希望我已经解释清楚我想要什么。

+0

TNX。我不知道。下次我会在那里问。 – Foad

+0

在同一个程序中,你不能让'array [2] [3]'和'array [2] [3] [4]'代表*数字*。如果'array [2] [3] [4]'是一个数字,那么'array [2] [3]'是一个数组或指针。你不能使这取决于'array'或其他变量包含什么。 Type是表达式的* static *属性。 –

+0

@SanchkeDellowar我试图找到答案,但是我在编译时遇到了一些错误。我应该在stackoverflow还是softwareengineering.stackexchange问​​这个问题? – Foad

回答

2

你不能!你只能使用c中的函数选项,因为没有办法改变语言的语义。在C++但是你可以重载[]操作,即使我永远不会做这样的丑陋的东西(x[1][2][3]是alreadŸ难看,如果你继续添加“尺寸”它变得非常难看),我认为这是可能的。

+0

实际上,我不确定我是否能够成功解释我需要的东西。我不想改变语言。我想解决的主要问题是我放松了函数内数组的大小。我成功解决了定义intlist的1D数组的问题。但我不知道如何实现多维数组。 – Foad

2

好吧,如果你分开的指针和数组的长度,你最终得到更少的代码。

int *one_dem_array; 
size_t one_dem_count[1]; 

int **two_dem_array; 
size_t two_dem_count[2]; 

int ***three_dem_array; 
size_t three_dem_count[3]; 

这样,您仍然可以使用您的首选表示法。

int num_at_pos = three_dem_array[4][2][3]; 
+0

这实际上距离我想要的更近一步。除了我必须手动定义特定尺寸的指针。如果我可以使用void指针,然后每次基于维度进行投射,那将是非常好的。 – Foad

+0

@Foad所以你可以解释* n *维数组的程序吗? –

+0

是的不只是两三个...... – Foad