0

考虑下面的代码片段:

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。为什么?

4

1 回答 1

1

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

如果您尝试将双精度数据用作双精度数据,则由于二进制存储值的方式不同,它将无法正确转换。

于 2012-05-09T06:08:59.427 回答