在将此标记为重复之前,请注意我正在为任意维度的数组寻找更通用的解决方案。我在这里或在论坛上阅读了很多关于制作2D或3D整数数组的帖子,但这些是针对特定维度的特定解决方案。我想要一个任何维数组的通用解决方案。首先,我需要一个如下定义的intlist类型:
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指针:
void * c;
我不知道如何从这里继续它。
附:一种解决方案可能是只分配一个内存块,然后使用函数调用元素。但是我想以数组形式调用元素。像tmpmdintlist.c [1] [2] [3] ...
希望我已经清楚地解释了我想要的东西。
附:这是一个古老的帖子,但对于那些可能在这里结束的人,我的一些努力可以在the Cplus repo中看到。
你不能!你只能使用c中的函数选项,因为没有办法改变语言语义。然而,在c ++中你可以重载[]
操作符,即使我永远不会做这样一个丑陋的事情(x[1][2][3]
是丑陋的,如果你继续添加“维度”它真的很难看),我认为这是可能的。
好吧,如果你将指针和数组长度分开,最终会得到更少的代码。
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];