我知道如何使用数组进行指针运算,但是如何在没有它们的情况下进行指针运算?
对于我当前的赋值,我有一个指向内存地址的void指针。我有一个size_t
,它存储一个以兆字节为单位的大小。
我正在尝试将指定兆字节大小的一半添加到指针,以找到距离指针的内存地址x/2
兆字节。
所以
void *ptr = malloc(size_t x)
void *ptr2 = ptr+x/2;
但编译器说这些数据类型不兼容。这样做的正确语法是什么?
答案 0 :(得分:4)
你不应该对void指针进行指针运算。如果您只想按字节数递增指针,则需要将指针强制转换为char *
,然后对其应用指针算法。
注意:void指针的算术运算不是标准C,尽管某些编译器可能支持这作为编译器扩展,但你最好不要依赖它。
可以找到here的详细解释。
如果可能,您可以通过将ptr
的数据类型更改为char *
(或simmilar)来避免无效指针算法的问题。 malloc()
返回的void指针将在赋值时自动并正确地转换为ptr
的数据类型,然后您可以对ptr
执行算术运算,同时记住该值的大小。数据类型。