使用指针C ++进行转换

时间:2013-01-30 21:30:46

标签: c++ pointers casting

说我有一个对象:

void *tmpValue;

并说我知道tmpValue指向双倍。 将其转换为double的方法是执行以下操作:

double* dblPtr = (double*) tmpValue;
double dbl = *dblPtr;

但为什么从void *直接转换为double不起作用?

double dbl = (double) tmpValue; //error: "cannot convert from 'void*' to 'double'

提前致谢。

4 个答案:

答案 0 :(得分:6)

将指针(内存地址)解释为浮点值不是一种明智的操作,并且它可能在您的平台上失败,因为void *double的大小不同。< / p>

您要做的是将指针解释为double *并取消引用double *指针,就像在第二个代码段中一样。

您可以在一行中执行此操作:

double dbl = *(double *)tmpValue;

但是,嘿,这是C ++。做得更好

double dbl = *static_cast<double *>(tmpValue);

答案 1 :(得分:1)

您无法从指针类型强制转换为double。回想一下,指针类型本质上是一个存储器地址(通常是4个字节,包含存储器上数据的位置信息)。因此,您可以将指针类型转换为整数,但转换为double是没有意义的。

当你将void *指针转换为double *指针类型时,你基本上是在说“这现在是一个double的地址而不是void *的地址”

如果你想在一个班轮中获得双倍的值,你可以做

double dbl = *( (double*) tmpValue );

答案 2 :(得分:-1)

double dbl = *(double*)tmpValue

答案 3 :(得分:-2)

取消引用指针并强制转换值