C ++ double ptr to long ptr conversion

时间:2012-05-09 05:46:01

标签: c++ pointers

考虑以下代码片段:

double * p = new double[16];

int value = 1;
void * q = p;
*((double *)q) = value;

int x = ((long *)p)[0];

cout << "Value of x for double * to long * = " << x << endl;

*((int *)q) = value  ;

x = ((long *)p)[0];

cout << "Value of x for int * to long * = " << x << endl;

这里输出分别为0和1。任何人都可以向我解释原因吗?

此外,如果我直接访问指针的值...即。 p [0],在两种情况下,该值都正确显示为1。为什么呢?

1 个答案:

答案 0 :(得分:1)

整数以直接二进制形式存储在内存中,因此您可以毫无问题地在intlong之间进行转换。 doulbe使用浮点二进制语法存储,其中一些位用于描述尾数,其他位用于描述指数(类似于科学记数法,即5e2 = 500)。

如果您尝试使用double的数据作为double的数据,那么由于二进制存储值的方式不同,它将无法正确转换。