首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中将double转换为void*

在C中将double转换为void*
EN

Stack Overflow用户
提问于 2011-07-05 03:23:23
回答 4查看 8.1K关注 0票数 6

我正在编写一个解释器,我希望能够将函数返回的任何值存储到空指针中。将int和各种指针存储为空指针没有问题,但是当我尝试将一个双精度值转换为空指针时,我得到了一个错误。我知道double在位级别上的存储方式与整数和指针不同,但我不明白为什么不能在指针中放置任何我想要的位(假设它分配了足够的内存),然后将它们取出,将它们转换为double。

是否有可能使用我不知道的语法将双精度值转换为空指针,或者我误解了空指针的工作方式?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-05 03:25:43

在许多系统中,double为8字节宽,指针为4字节宽。因此,前者不适合后者。

你看起来是在滥用void*。你的解决方案将涉及到分配至少与你需要存储在某种变体结构中的最大类型一样大的存储空间,例如union

票数 15
EN

Stack Overflow用户

发布于 2011-07-05 06:10:16

当然,可以对其进行强制转换。空指针使得C中的多态成为可能。你需要提前知道你传递给函数的是什么。

代码语言:javascript
运行
复制
void *p_v ;
double *p_d ;
p_d = malloc( sizeof( double ) ) ;
p_v = ( void * ) p_d ;
票数 3
EN

Stack Overflow用户

发布于 2021-12-28 07:02:25

继续使用Fabio。并确保您在x64上运行

代码语言:javascript
运行
复制
int main()
{
    double d = 1.00e+00; // 0x3ff0000000000000
    double* pd = &d;
    void** p = (void**)pd;
    void* dp = *p;
    printf("%f %p %p %p \n", d, pd, p, dp);

    printf("%d %f\n", dp, *(double*)p);

    printf("%f\n", *(double*)(void **)&d);
}

输出

代码语言:javascript
运行
复制
1.000000 0000000353F1FA30 0000000353F1FA30 3FF0000000000000
0 1.000000
1.000000
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6575340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档