如果我在 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”的所有内部数组/子数组都是不同的。
我的问题:有没有一种有效的方法可以将“A”转换为一维的?如果可能的话,你能举一个简单的例子吗?谢谢!
最佳答案
我没有看到你的问题。多维数组在内存中是连续的,因此可以进行类型转换:
int B[13][37];
int *oneDimension = (int *)B;
从现在开始,您可以通过计算其在每个维度中的大小的适当偏移量来访问 B
的元素;使用上面的例子:
int valueAtB_2_6 = oneDimension[2 * 13 + 6];
关于在C中将多维数组转换为一维,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12938357/