C语言:指针取地址错误记录
这个问题是在用指针将stm32浮点数拆分为4个字节时遇到的,如下代码是错误的(这里u8是unsigned char):
float Vx=200.5;
buf[0]=*((u8*)(&Vx+0));
buf[1]=*((u8*)(&Vx+1));
buf[2]=*((u8*)(&Vx+2));
buf[3]=*((u8*)(&Vx+3));
错误原因:
Vx是浮点数,&Vx+1实际上是Vx的地址加上4个字节,而不是一个字节,需修改成(u8*)&Vx+1,需先将&Vx强制转换为字节指针,才能实现功能
最终修改为:
float Vx=200.5;
buf[0]=*((u8*)&Vx+0);
buf[1]=*((u8*)&Vx+1);
buf[2]=*((u8*)&Vx+2);
buf[3]=*((u8*)&Vx+3);