1

我有 void 指针,我想对其进行指针运算。为此,我想将其转换为 char 指针。

( char * ) buf += current_size;

但是,当我这样做时,我收到以下错误:

error: lvalue required as left operand of assignment

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

4

3 回答 3

5

为什么我会得到这个

仅仅因为语言规则规定,即使操作数为 one,强制转换也不会产生左值。

ISO/IEC 9899:201x - n1570

在脚注中,第 91 页

强制转换不会产生左值。

于 2012-08-26T17:06:00.403 回答
5

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

buf = (char *)buf + current_size;

您收到警告的部分原因sizeof(void)是未定义,您无法对void *. 注意:GCC 有一个扩展,它将代码视为 if sizeof(void) == 1,但这不在 C 标准中。

分配的 LHS 上的演员表对分配没有影响。

于 2012-08-26T17:07:19.730 回答
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;
于 2012-08-26T17:07:09.877 回答