在C中有效地将线性存储空间解释为1D,2D,...,ND

时间:2010-07-30 10:07:53

标签: arrays memory n-dimensional

是否可以分配1D内存空间

int *x=(int *)malloc(100*sizeof(int));

然后将返回的指针重新转换为2D数组,例如

int **y=(int **)x;

并像访问2D数组一样访问它,例如y[1][2] = 12;

我的目标是获取共享内存段并返回1D,2D,... ND阵列,具体取决于用户如何以最高效率解释此线性空间(即,不声明新的N维数组并将数据复制到它)。

在第二个注释中,是否有一个C库可以处理N维数组,从中获取切片并有效地转换它们(例如将row-major转换为col-major)?

感谢, bliako

2 个答案:

答案 0 :(得分:1)

我不完全确定你的int *会产生你想要的效果。

在您的初始陈述之后,x指向新分配的内存,因此可以执行x[1] = 8;之类的操作。内存保存您的数据(即数组的值)。

但是,在您的第二个声明之后,y认为它指向int *,有效地将您以前的数据转换为一组int指针。之前存储的所有值现在都被视为内存中其他位置的地址。您不是简单地重新定义如何处理先前分配的内存;你完全重新利用了记忆。

我认为不可能按照你的建议行事,但这并不像你提供的方法那么简单。

至于处理多维数组的库,请查看以下帖子:How do I best handle dynamic multi-dimensional arrays in C/C++?

答案 1 :(得分:1)

这将解决问题,请注意在编译时不需要知道d2

int *y[d2];
y=(int (*)[d2])x;