2010-07-30 78 views
0

是否有可能分配一个1D存储器空间解读线性内存空间1D,2D,...,ND有效地用C

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

然后再铸返回指针2D阵列例如

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

和访问它,如果它是2D阵列例如y[1][2] = 12;

我的目标是获取共享内存段并返回1D,2D,... ND数组,取决于用户想要如何以最大效率解释此线性空间(即不需要声明新的N维数组和复制数据进去)。

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

感谢, bliako

回答

1

我不完全相信您铸造int *会得到你想要的效果。

在您的初始陈述后,x指向您新分配的内存,因此可以使用x[1] = 8;这样的东西。内存保存您的数据(即数组的值)。

但是,在您的第二条语句后,y认为它指向int *,将您以前的数据有效地转换为一组int指针。你之前就存储在所有的值现在被视为在内存其他位置的地址。你不是简单地重新定义你如何处理你之前分配的内存;你完全重新调整内存。

我不认为这是不可能的,你有什么建议,但它并不像你所提供的方法一样容易。

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

+0

我承认,我的问题是完全跛脚。你说得对,数组包含不仅是我的数据,而且还指向每一行。 – bliako 2010-08-04 10:06:43

1

这将这样的伎俩,注意d2并不需要在编译时是已知的。

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