Arrays 在C语言中将线性存储空间有效地解释为1D、2D、…、ND
是否可以分配1D内存空间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我不完
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;
我承认我的问题完全站不住脚。您可以说数组不仅包含我的数据,还包含指向每一行的指针。