将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