我正在开发自己的C ++项目,并希望在下面的场景中进行:
long int
数组double
array int long int
array 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
错误。
我该如何解决这个问题?!
提前致谢:)
答案 0 :(得分:4)
首先,您需要显式地转换指针:
double *dPointer = reinterpret_cast<double*>(lArray);
但是,long int
的编码与double
的编码不兼容。它们可能都是8字节宽(取决于您的平台),但这就是它。唯一的保证是两者都代表零作为8个0字节。其他任何内容都不兼容,这就是为什么你的长0CDEFF3333333333
,而是1.10831057258179508893524397544E-246
的双倍。
为什么不首先使用double
数组呢?此外,由于您正在使用C ++,请查看标准库中的vector
和array
模板。
答案 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");