我将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;
}
注意:我在野牛中使用此代码来保存我的变量。
答案 0 :(得分:1)
如果void*
至少与double
一样大(它将在64位应用程序中,但不在32位应用程序中),那么您可以使用{{1}将memcpy()
值的位存储在double
指针的位内,例如:
void*
Before: 123.45 After: 123.45