23

我有一个问题,我有一个指向内存区域的指针。我想用这个指针来创建一个整数数组。

本质上这就是我所拥有的,指向大小为 100*300*2 = 60000 字节的内存地址的指针

unsigned char *ptr = 0x00000000; // fictional point in memory goes up to 0x0000EA60

我想要实现的是将此内存检查为大小为 100*150 = 15000 ints = 60000 字节的整数数组,如下所示:

unsigned int array[ 100 ][ 150 ];

我假设它涉及一些铸造,但我不确定如何制定它。任何帮助,将不胜感激。

4

2 回答 2

22

您可以将指针转换为unsigned int (*)[150]. 然后可以将其用作2D 数组(“好像”,因为 的行为sizeof不同)。

unsigned int (*array)[150] = (unsigned int (*)[150]) ptr;
于 2012-07-12T14:45:25.153 回答
1

从您的 ptr 声明开始

unsigned char *ptr = 0x00000000; // fictional point in memory goes up to 0x0000EA60

您可以将 ptr 转换为指向您将块视为的任何类型的指针,在本例中为 unsigned int 数组的数组。我们将声明一个新指针:

unsigned int (*array_2d)[100][150] = (unsigned int (*)[100][150])ptr;

然后,通过取消引用然后索引来访问元素,就像普通的二维数组一样。

(*array_2d)[50][73] = 27;

有些typedefs 也会帮助清理东西。

typedef unsigned int my_2d_array_t[100][150];
typedef my_2d_array_t *my_2d_array_ptr_t;
my_2d_array_ptr_t array_2d = (my_2d_array_ptr_t)ptr;
(*array_2d)[26][3] = 357;
...

并且sizeof应该可以正常工作。

sizeof(array_2d); //4, given 32-bit pointer
sizeof(*array_2d); //60000, given 32-bit ints
sizeof((*array_2d)[0]); //600, size of array of 150 ints
sizeof((*array_2d)[0][1]); //4, size of 1 int
于 2017-11-02T19:09:26.530 回答