将double *转换为float *

时间:2015-03-01 02:48:52

标签: c++ c pointers

我想知道如何在C或C ++中将double*转换为float*,将float*转换为double*?谢谢。我尝试使用(float*)(double*)进行投射,但似乎无法根据我的观察进行投射。

1 个答案:

答案 0 :(得分: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++;
}

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