代码:
void *buff;
char *r_buff = (char *)buff;
我无法理解buff
的类型转换。请帮忙。
谢谢。
答案 0 :(得分:10)
buff
是指向某个内存的指针,其内容的类型未指定(因此void
)。
第二行告诉r_buff
指向相同的内存位置,内容应解释为char
(s)。
答案 1 :(得分:6)
buff
被输入为void指针,这意味着它指向内存而不声明内容。
当你转换为char *
时,你声明你正在将指针解释为char指针。
答案 2 :(得分:4)
在编写良好的C ++中,你不应该使用C风格的强制转换。所以你的演员应该是这样的:
void *buff;
char *r_buff = static_cast<char *>(buff);
有关C ++强制转换操作符的说明,请参阅here。
答案 3 :(得分:1)
以它的名字命名,buff很可能是一个用于写入数据的内存缓冲区,可能是二进制数据。
为什么有人可能想把它强制转换为char *
,有可能在写作时使用指针算法,因为你不能用void*
来做。
例如,如果您还提供了一个大小(可能),并且您的API不需要指针和大小,但需要2个指针(开始和结束),您将需要指针算法来确定结束的位置。
代码很可能是C,在这种情况下,强制转换是正确的。如果代码是C ++,虽然最好使用static_cast
,但在这种情况下C cast不是错误的。通常首选static_cast
的原因是,当您以错误的方式进行转换时,编译器会捕获更多场合,并且它也更容易 greppable 。然而,铸造通常会破坏类型安全规则,因此优选地在很多时候避免。 (并不是说它永远不正确,因为它可能在这里)。