【发布时间】:2016-11-21 22:07:38
【问题描述】:
在将其标记为重复之前,请注意我正在为任意维度的数组寻找更通用的解决方案。我在这里或论坛上阅读了许多关于制作 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;
第二部分有几个选项。 on 选项是有一个指向较低维度的 mdintlist 的指针,例如
struct Mdintlist * c;
其他选项是使用 void 指针:
void * c;
我不知道如何从这里继续。
附:一种解决方案可能是只分配一块内存,然后使用函数调用元素。但是我想以数组形式调用元素。类似 tmpmdintlist.c[1][2][3]...
希望我已经清楚地解释了我想要什么。
P.S.这是一篇古老的帖子,但对于那些可能会在这里结束的人,我的一些努力可以在the Cplus repo 中看到。
【问题讨论】:
-
tnx.我不知道。下次我会在那里问。
-
您不能让
array[2][3]和array[2][3][4]在同一个程序中代表数字。如果array[2][3][4]是一个数字,那么array[2][3]是一个数组或一个指针。您不能使这取决于array或其他变量包含的内容。类型是表达式的静态属性。 -
@SanchkeDellowar 我正在努力寻找答案,但是在编译时出现了一些错误。我应该在 stackoverflow 还是在 softwareengineering.stackexchange 上问这个问题?
-
@Foad Stackoverflow(顾名思义)适用于有错误的人。所以是的,只要你在你的问题上付出一些努力,SO就是调试错误的地方:)
标签: c arrays multidimensional-array