使用void指针的指针算术

时间:2014-07-18 08:59:07

标签: c pointers

我想知道是否有更好的方法而不是向uint8_t转换void指针,然后根据偏移量进行算术运算,然后将其转换为uint32_t,然后取消引用它以获得4byte值在那个确切的偏移处。

void * foo = malloc(1024);
uint32_t myVar;

for(int i = 0; i < 10; i++)
{
  myVar = *((uint32_t*)((uint8_t *) foo + nOffset));
  nOffset += 100;
}

1 个答案:

答案 0 :(得分:1)

你最好只保留在指针算术的一个“域”内。

你应该这样做     uint32_t * foo = malloc(1024);

然后

myVar = foo + nOffset / sizeof(*foo);
nOffset += 100;

myVar = foo + nOffset;
nOffset += 100 / sizeof(*foo);

每步增加100个字节。