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

标签 c arrays multidimensional-array

如果我在 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/

相关文章:

javascript - array.map() 不返回单个数组

c - 在二维数组中使用指针运算

java - 在二维数组中获取空​​格分隔的行输入

c++ - C/C++ 检查是否设置了一位,即 int 变量

c - 该程序在我的电脑上运行良好,但当我将其提交到编码站点时,它说存在段错误。有错误请指出

c - C 中 sscanf 的段错误

php从平面创建多维数组

c - 浏览文本文件,用变量的定义/内容替换变量的所有实例

arrays - 冒泡排序对给定数组执行的交换次数

Php关联数组排序并获取最大长度的键