为什么将void指针转换为char指针在这种情况下不起作用

时间:2012-08-26 17:02:46

标签: c casting void-pointers

我有无效指针,我想对它做指针运算。 要这样做,我想将它转换为char指针。

( char * ) buf += current_size;

然而,当我这样做时,我收到以下错误:

error: lvalue required as left operand of assignment

我还尝试在整个左侧添加括号,但没有成功。 为什么我会这样做?

3 个答案:

答案 0 :(得分:5)

  

为什么我会这样做

只是因为语言规则声明演员阵容不会产生左值,即使操作数是一个

  

ISO/IEC 9899:201x - n1570

     

在脚注中,第91页

     

演员阵容不会产生左值。

答案 1 :(得分:5)

您可以通过编写赋值运算符来避免警告:

buf = (char *)buf + current_size;

您收到警告的部分原因是sizeof(void)未定义,您无法对void *进行算术运算。注意:GCC有一个扩展,它将代码视为sizeof(void) == 1,但不符合C标准。

作业的LHS演员表对作业没有影响。

答案 2 :(得分:4)

因为它无效,所以你不能这样做。如果你想实现这一点,

将buf声明为char指针; 或使用临时变量:

char *tmp = buf; // note you don't need the casting, void * works with everything
tmp += current_size;
buf = tmp;

编辑:正如其他人也建议的那样,你甚至可以删除那个丑陋的tmp:

buf = (char *)buf + current_size;