考虑以下代码片段:
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。为什么呢?
答案 0 :(得分:1)
整数以直接二进制形式存储在内存中,因此您可以毫无问题地在int
和long
之间进行转换。 doulbe
使用浮点二进制语法存储,其中一些位用于描述尾数,其他位用于描述指数(类似于科学记数法,即5e2 = 500)。
如果您尝试使用double的数据作为double的数据,那么由于二进制存储值的方式不同,它将无法正确转换。