初始化时无法将long int *转换为double *

时间:2014-10-09 11:08:30

标签: c++ type-conversion

我正在开发自己的C ++项目,并希望在下面的场景中进行:

  1. 将一些值写入long int数组
  2. double array int long int array
  3. 中读取double

    所以,我编写了如下代码:

    long int lArray [100];
    double dArray[100];
    
    for (int i = 0; i < 100; i ++)
       lArray[i] = i * i;
    
    double *dPointer = lArray;
    
    for (int i = 0; i < 100; i ++)
       dArray[i] = *(dPointer++ + 1);
    

    但是,当我编译它时,面对[Error] cannot convert long int* to double* in initialization错误。 我该如何解决这个问题?!

    提前致谢:)

2 个答案:

答案 0 :(得分:4)

首先,您需要显式地转换指针:

double *dPointer = reinterpret_cast<double*>(lArray);

但是,long int的编码与double的编码不兼容。它们可能都是8字节宽(取决于您的平台),但这就是它。唯一的保证是两者都代表零作为8个0字节。其他任何内容都不兼容,这就是为什么你的长0CDEFF3333333333,而是1.10831057258179508893524397544E-246的双倍。

为什么不首先使用double数组呢?此外,由于您正在使用C ++,请查看标准库中的vectorarray模板。

答案 1 :(得分:2)

如果您想将long解释为double,则应使用reinterpret_cast

double *dPointer = reinterpret_cast<double*>(lArray);

您还应该确保sizeof(double) == sizeof(long),因为例如在VS中它不成立(更好地使用unsigned long long):

static_assert(sizeof(double) == sizeof(long), "sizes are different");