我有一个问题,我有一个指向内存区域的指针。我想用这个指针创建一个整数数组。
基本上这就是我所拥有的,指向大小为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 ];
我假设它涉及一些演员虽然我不确定如何制定它。任何帮助将不胜感激。
答案 0 :(得分:18)
您可以将指针强制转换为unsigned int (*)[150]
。然后可以使用它就好像它是一个2D数组(“好像”,因为sizeof
的行为不同)。
unsigned int (*array)[150] = (unsigned int (*)[150]) ptr;
答案 1 :(得分: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;
然后,通过解除引用然后索引来访问元素,就像访问普通的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