0

是否可以分配一维内存空间

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

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

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

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

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

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

谢谢, bliako

4

2 回答 2

1

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

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

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

我不认为按照您的建议去做是不可能的,但它并不像您提供的方法那么容易。

至于处理多维数组的库,请查看这篇文章:如何最好地处理 C/C++ 中的动态多维数组?

于 2010-07-30T16:43:55.717 回答
1

这可以解决问题,注意d2在编译时不需要知道。

int *y[d2];
y=(int (*)[d2])x;
于 2011-04-01T17:08:59.073 回答