将void指针转换为整数数组

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

基本上这就是我所拥有的,指向大小为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 ]; 

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

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

 unsigned int (*array)[150] = (unsigned int (*)[150]) ptr; 

从您的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; 

然后,通过解除引用然后索引来访问元素,就像访问普通的2d数组一样。

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

一些typedef也可以帮助清理。

 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