0

假设我有一个对象:

void *tmpValue;

并说我知道 tmpValue 指向双精度值。将其转换为双精度的一种方法是执行以下操作:

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

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

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

提前致谢。

4

4 回答 4

6

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

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

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

double dbl = *(double *)tmpValue;

但是,嘿,这是 C++。最好做

double dbl = *static_cast<double *>(tmpValue);
于 2013-01-30T21:33:09.250 回答
1

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

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

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

double dbl = *( (double*) tmpValue );
于 2013-01-30T21:34:18.143 回答
-1
double dbl = *(double*)tmpValue
于 2013-01-30T21:35:28.057 回答
-2

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

于 2013-01-30T21:33:17.583 回答