我正在编写一个解释器,我希望能够将函数返回的任何值存储到空指针中。将int和各种指针存储为空指针没有问题,但是当我尝试将一个双精度值转换为空指针时,我得到了一个错误。我知道double在位级别上的存储方式与整数和指针不同,但我不明白为什么不能在指针中放置任何我想要的位(假设它分配了足够的内存),然后将它们取出,将它们转换为double。
是否有可能使用我不知道的语法将双精度值转换为空指针,或者我误解了空指针的工作方式?
发布于 2011-07-05 03:25:43
在许多系统中,double为8字节宽,指针为4字节宽。因此,前者不适合后者。
你看起来是在滥用void*。你的解决方案将涉及到分配至少与你需要存储在某种变体结构中的最大类型一样大的存储空间,例如union。
发布于 2011-07-05 06:10:16
当然,可以对其进行强制转换。空指针使得C中的多态成为可能。你需要提前知道你传递给函数的是什么。
void *p_v ;
double *p_d ;
p_d = malloc( sizeof( double ) ) ;
p_v = ( void * ) p_d ;发布于 2021-12-28 07:02:25
继续使用Fabio。并确保您在x64上运行
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);
}输出
1.000000 0000000353F1FA30 0000000353F1FA30 3FF0000000000000
0 1.000000
1.000000https://stackoverflow.com/questions/6575340
复制相似问题