如果我有一个void*x,但是我想将它转换为char*,那么++运算符将指向下一个字节而不是下一个4字节块.
但是,当我这样做时:
(char *) x -= byte_length;
Run Code Online (Sandbox Code Playgroud)
编译器抱怨:
Error, lvalue required as left value of assignment.
Run Code Online (Sandbox Code Playgroud)
我哪里出错了?谢谢.
我会这样做:
x = (char*)x - byte_length;
Run Code Online (Sandbox Code Playgroud)
转换x
为char*
,然后应用偏移量,然后分配回x
.由于void*
赋值与所有指针类型兼容,因此不需要进一步转换.
(char *)x
计算到具有相同值x
但不同类型的临时值.编译器不允许-=
临时.做
x = (char *)x - byte_length;
Run Code Online (Sandbox Code Playgroud)
情况类似于以下情况:
short x = 0;
(long)x += 1; // invalid; (long)x is a temporary
x = (long)x + 1; // works
Run Code Online (Sandbox Code Playgroud)