从您的 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;
有些typedef
s 也会帮助清理东西。
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