我想知道如何在C或C ++中将double*
转换为float*
,将float*
转换为double*
?谢谢。我尝试使用(float*)
和(double*)
进行投射,但似乎无法根据我的观察进行投射。
答案 0 :(得分:6)
将指针转换为其他类型不会影响指向的值。取消引用此类转换指针将强制读取或写入不同类型的内存内容。由于double
和float
具有不同的不兼容表示,因此会导致未定义的行为。
您可以使用简单的循环在float
和double
数组之间进行复制,但实际上您将把值从一个表示转换为另一个表示,从而在转换为float
时失去精确度转换回double
时没有恢复。
假设dp和fp指向至少包含n个元素的数组:
void convert_float_to_double_array(double *dp, const float *fp, size_t n) {
while (n--) *dp++ = *fp++;
}
除非内存大小是一个真正的问题,或者您正在为具有严重硬件限制的嵌入式系统进行编程,否则您根本不应该使用float
。