如何创建一个在编译时仅知道其中一个维度的三维数组。 数组的内容是结构体值,如下
struct mat
{
char x[3];
int a;
}
struct samp
{
int a;
struct mat;
}
该数组应该存储“samp”,其大小为
struct samp samp_arr[unknown][10][unknown];
程序第一次运行时,samp_arr 的第一个维度将为 1,最后一个维度将随着放入数组中的 samp 结构的数量而增长。一段时间后,第一个维度应该增加一,并且任何未定义数量的 samp 结构将被放入其中。等等
最佳答案
如果您有符合 C99 的编译器,则无需重新发明轮子,即使具有动态边界的多维数组也是该语言的一部分。
struct samp samp_arr[unknown][10][unknown];
(假设unknown
是一个计算结果为您喜欢的值的表达式。)
但是,通常在堆栈上分配这么大的变量是一个坏主意,因此您应该使用 malloc
和 friend 来分配它:
struct samp (*samp_arr)[10][unknown] = malloc(sizeof(struct samp[unknown][10][unknown]));
...
// use it
samp_arr[i][j][k].a = ...
...
free(samp_arr);
这声明了一个指向二维数组的指针。
Wenn 将数组传递给可以执行类似操作的函数,您只需注意数组边界在参数列表中排在第一位,以便在涉及数组本身时知道它们:
int fun(size_t r, size_t s, size_t t, struct samp (*A)[s][t]) {
...
}
关于c - 如何创建三维动态数组,其中维度之一在c编译时已知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9451091/