void *data; *(uint16_t *)data = 66.66; 请问data指向的地址是以浮点数存放了数据66.66,还是以无符号整型存放了66
时间: 2024-04-05 10:31:50 浏览: 125
用浮点数存储方式表示整数数值
这段代码有问题。首先,`data`是一个`void`指针,不能直接解引用,需要进行类型转换。其次,将浮点数66.66转换为16位的`uint16_t`类型会导致精度损失和类型不匹配的问题。
如果代码修改为`float num = 66.66; uint16_t data = *(uint16_t *)#`,则`data`指向的地址是以浮点数存放了数据66.66的内存地址。这是因为`&num`获取了浮点数`num`的内存地址,再通过强制类型转换`(uint16_t *)`将其转换为一个16位的无符号整型指针,然后再通过解引用`*`获取该整型指针指向的16位数据。由于浮点数在内存中的存储方式与整型不同,因此这种类型转换会导致数据的解释方式发生变化,可以将浮点数拆分为两个8位的指数和尾数,分别存放在16位整型的高低字节中,因此`data`会以浮点数存放了数据66.66。
阅读全文