将void * *转换为无效的结果

时间:2018-04-30 22:42:16

标签: c++ g++ bison

我将double之类的内容转换为void*并将其传递给其他函数。但是当我想将void*投射到double时,我得到了错误的结果!像9.18358-e10这样的东西。

内存地址在之前的函数中相同,sizeof void*double相同。但铸造后的结果是错误的。

我尝试了reinterpret_cast<>static_cast<>memcpy,......但没有发生任何事情。

怎么了?我该怎么办?

代码

void* def_double(double* d){
    void* v = d;
    return v;
}

void print(void* v){
    cout << *((double*) v) << endl;
}

注意:我在野牛中使用此代码来保存我的变量。

1 个答案:

答案 0 :(得分:1)

如果void*至少与double一样大(它将在64位应用程序中,但不在32位应用程序中),那么您可以使用{{1}将memcpy()值的位存储在double指针的位内,例如:

void*
Before: 123.45
After: 123.45

Live Demo