在C中将多维数组转换为单维数

如果我在C中有如下定义的数组:

int B[d1][d2][d3][d4][d5][d6][d7][d8][d9]; 

然后很容易将“B”转换成单维的。 但是,如果我在C中有一个数组,定义如下:

 int********* A; //which will be allocated as follows for example A = (int*********) malloc(N*sizeof(int********)); for(int i=0; i<N; i++) { //differentSizes will be distinct for every "i" //the same distinctness of sizes will be for every other //inner parts of all inner for loops compute(&differentSizes); A[i] = (int********) malloc(differentSizes*sizeof(int*******)); for(...) { ... } } 

其中“A”对于每个维度都具有非常大的尺寸,并且它们对于“A”的所有innerarrays /子arrays都是不同的。

我的问题:有没有一种有效的方法将“A”转换为单维的? 如果可能,你能展示一个简单的例子吗? 谢谢!

我没有看到你的问题。 多维数组在内存中是连续的,因此类型转换将起作用:

 int B[13][37]; int *oneDimension = (int *)B; 

从现在开始,您可以通过计算每个维度中其大小的适当偏移量来访问B的元素; 使用上面的例子:

 int valueAtB_2_6 = oneDimension[2 * 13 + 6]; 

声明数组的所有内容的方式将在内存中连续。 如果您可以确定元素的数量,您可以将数组复制到一维元素或迭代原始元素,这取决于您想要做什么:

 int* singleIndex = (int*)B; for (int i = 0; i < d1 * d2...dN; i++) { printf("Element # %d = %d\n", i, *singleIndex); } 

例如。

现在,如果您正在进行数组的堆初始化,那么这将无法工作,因为所有内存都将分散在堆上,但对于静态/堆栈分配的数组,它会。