2012-05-09 65 views
0

考虑下面的代码片断:C++双PTR到长的ptr转换

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

所有这些类型转换都被视为代码异味。不要在真实的代码中使用。 – iammilind

+2

这基本上是'reinterpret_cast'。该标准不能保证你甚至可以得到什么结果(即从有效的结果)。 –

回答

1

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

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

相关问题