如何对void指针执行算术运算

时间:2015-09-25 22:07:41

标签: c pointers void-pointers pointer-arithmetic

我知道如何使用数组进行指针运算,但是如何在没有它们的情况下进行指针运算?

对于我当前的赋值,我有一个指向内存地址的void指针。我有一个size_t,它存储一个以兆字节为单位的大小。

我正在尝试将指定兆字节大小的一半添加到指针,以找到距离指针的内存地址x/2兆字节。

所以

void *ptr = malloc(size_t x)    
void *ptr2 = ptr+x/2;

但编译器说这些数据类型不兼容。这样做的正确语法是什么?

1 个答案:

答案 0 :(得分:4)

你不应该对void指针进行指针运算。如果您只想按字节数递增指针,则需要将指针强制转换为char *,然后对其应用指针算法。

注意:void指针的算术运算不是标准C,尽管某些编译器可能支持这作为编译器扩展,但你最好不要依赖它。

可以找到here的详细解释。

如果可能,您可以通过将ptr的数据类型更改为char *(或simmilar)来避免无效指针算法的问题。 malloc()返回的void指针将在赋值时自动并正确地转换为ptr的数据类型,然后您可以对ptr执行算术运算,同时记住该值的大小。数据类型。