我如何创建一个三维数组,其中在编译时只知道其中一个维。
数组的内容是结构值,如

struct mat
{
char x[3];
int a;
}

struct samp
 {
   int a;
   struct mat;
 }


该数组应该存储“样本”,其大小为

   struct samp samp_arr[unknown][10][unknown];


程序第一次运行时,samp_arr的第一个维度将是一个,而最后一个维度将随着放入数组中的samp结构的数量而增长。片刻之后,第一个维度应增加一个,并且任何未定义数量的采样结构都将放入其中。等等

最佳答案

如果您使用的是符合C99的编译器,则无需重新发明轮子,即使具有动态范围的多维数组也是该语言的一部分。

struct samp samp_arr[unknown][10][unknown];


(假设unknown是一个根据您的喜好的值求值的表达式。)

通常,在堆栈上分配这么大的变量通常是一个坏主意,因此您应该使用malloc和朋友来分配它:

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/

10-11 22:14
查看更多