这是什么意思?

时间:2011-03-14 10:43:49

标签: c++

代码:

void *buff; 
char *r_buff = (char *)buff;

我无法理解buff的类型转换。请帮忙。

谢谢。

4 个答案:

答案 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 。然而,铸造通常会破坏类型安全规则,因此优选地在很多时候避免。 (并不是说它永远不正确,因为它可能在这里)。