将 void* 强制转换为任何内容的无效结果

invalid result in casting void* to anything

我将 double 之类的东西转换为 void* 并将其传递给另一个函数。但是当我想将 void* 转换为 double 时,我得到了错误的结果!!!类似于 9.18358-e10。

内存地址与上一个函数相同,sizeofvoid*double相同。但铸造后的结果是错误的。

我试过 reinterpret_cast<> , static_cast<> , memcpy ,...但是没有任何反应。

怎么了??我应该怎么办?

代码

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

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

注意:我在 bison 中使用这段代码来保存我的变量。

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

#include <iostream>
#include <cstring>

void doIt(void *p)
{
    double d;
    std::memcpy(&d, &p, sizeof(double));
    std::cout << "After: " << d << std::endl;
}

int main() {
    static_assert(sizeof(void*) >= sizeof(double), "void* is not large enough!");

    double d = 123.45;
    std::cout << "Before: " << d << std::endl;

    void *p = nullptr;
    std::memcpy(&p, &d, sizeof(double));
    doIt(p);

    return 0;
}
Before: 123.45
After: 123.45

Live Demo