后来我又调试发现:如果存储的时候也是定义Ptr为float型指针的,那么输出时调用f((float *)(Ptr))便可正确输出结果,而存储时是以unsigned int型指针存储的,则调用的时候应该这样调用:f((*unsigned int *)Ptr) 。
对于上述问题,后来我又想到是否可以通过结构体来定义对应的变量,结果还是不行。
#include "stdio.h"
#define N 8
union BufRam
{
unsigned int IntRam;
float FloatRam;
}Buf[N];
void f(float x[N])
{
int i;
for(i=0;i
{
x[i]=x[i]*i;
printf("%f\n",x[i]);
}
}
void main(void)
{
int i;
for(i=0;i
{
Buf[i].IntRam=i;
}
for(i=0;i
{
//Buf[i].FloatRam=Buf[i].IntRam; //若增加这条语句,则下面的处理即可成功了。
}
//下面调用函数f 处理外部RAM中的数
f(&(Buf[0].FloatRam)); //请问:这样调用函数有问题吗
}
运行结果同上图A1,
若调用程序中的这条语句Buf[i].FloatRam=Buf[i].IntRam,则运行结果同上图A2。
这说明即使是定义结构体类型也是不行的啊,因为整型变量与浮点型变量的存储结构是不同的,这一点是我经过多天的理解自己得出的,其可靠性尚需官方或者资深工程师明确说明。