将double*转换为float*

Ono*_*Ono -1 c c++ pointers

我想知道如何转换double*float*,并float*double*C或C++?谢谢.我尝试使用(float*)和使用(double*),但它似乎没有我的观察工作.

chq*_*lie 6

将指针强制转换为其他类型不会影响指向的值.取消引用此类转换指针将强制读取或写入不同类型的内存内容.由于doublefloat具有不同的不兼容表示,因此会导致未定义的行为.

您可以使用简单循环在数组floatdouble数组之间进行复制,但实际上您将把值从一个表示转换为另一个表示,从而float在转换回时失去精度,而在转换回时不会恢复double.

假设dp和fp指向至少包含n个元素的数组:

void convert_float_to_double_array(double *dp, const float *fp, size_t n) {
    while (n--) *dp++ = *fp++;
}
Run Code Online (Sandbox Code Playgroud)

除非内存大小是一个真正的问题,或者您正在为具有严重硬件限制的嵌入式系统进行编程,否则您根本不应该使用它float.

  • 为什么不使用内置复制功能?`std :: copy_n(fp,n,dp);` (6认同)
  • @Neil:没有C/C++这样的语言.更确切地说,C/C++调用未定义的行为;-).这个答案适用于C.任何高级编译器都能正确优化.C++可能有其他方式,这对OP没有帮助,因为细节是隐藏和模糊的. (2认同)