算术的铸造指针 - C

use*_*758 2 c pointers

如果我有一个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)

我哪里出错了?谢谢.

Dav*_*nan 5

我会这样做:

 x = (char*)x - byte_length;
Run Code Online (Sandbox Code Playgroud)

转换xchar*,然后应用偏移量,然后分配回x.由于void*赋值与所有指针类型兼容,因此不需要进一步转换.


Fre*_*Foo 5

(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)