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

std*_*all 1 c casting void-pointers

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

( char * ) buf += current_size;
Run Code Online (Sandbox Code Playgroud)

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

error: lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)

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

cni*_*tar 5

为什么我会这样做

仅仅因为语言规则声明即使操作数是1,强制转换也不会产生左值.

ISO/IEC 9899:201x - n1570

在脚注中,第91页

演员阵容不会产生左值.


Jon*_*ler 5

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

buf = (char *)buf + current_size;
Run Code Online (Sandbox Code Playgroud)

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

任务的LHS上的演员表对作业没有影响.