我有无效指针,我想对它做指针运算。 要这样做,我想将它转换为char指针。
( char * ) buf += current_size;
然而,当我这样做时,我收到以下错误:
error: lvalue required as left operand of assignment
我还尝试在整个左侧添加括号,但没有成功。 为什么我会这样做?
答案 0 :(得分:5)
答案 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;