Arrays 在C语言中将线性存储空间有效地解释为1D、2D、…、ND

Arrays 在C语言中将线性存储空间有效地解释为1D、2D、…、ND,arrays,memory,n-dimensional,Arrays,Memory,N Dimensional,是否可以分配1D内存空间 int*x=(int*)malloc(100*sizeof(int)) 然后将返回的指针重铸到2D数组,例如 int**y=(int**)x 并像二维数组一样访问它,例如y[1][2]=12 我的目标是获取共享内存段并返回1D、2D、…ND数组,具体取决于用户希望以最大效率解释该线性空间的方式(即不声明新的N维数组并将数据复制到其中) 第二个注意事项是,是否有一个C库可以处理N维数组,从中获取切片并有效地转换它们(例如,将行主调转换为列主调) 谢谢, bliako我不完

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

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

然后将返回的指针重铸到2D数组,例如

int**y=(int**)x

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

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

第二个注意事项是,是否有一个C库可以处理N维数组,从中获取切片并有效地转换它们(例如,将行主调转换为列主调)

谢谢,
bliako

我不完全确定你的
int*
是否能达到你想要的效果

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

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

我不认为你所建议的是不可能的,但这并不像你提供的方法那么简单


关于处理多维数组的库,请参阅本文:

这就可以了,请注意,
d2
不需要在编译时知道

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

我承认我的问题完全站不住脚。您可以说数组不仅包含我的数据,还包含指向每一行的指针。