在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 3210|回复: 0

[求助] 关于C语言指针的应用

[复制链接]
发表于 2014-2-22 17:58:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 几度十八 于 2014-2-24 10:06 编辑

2014-2-19

问题:定义函数f(),其形参是float型,现在想通过函数f()调用先前定

义的整型数,通过调试总结出如下一些经验,有的地方尚需要官方

或者资深高手给予指点。

#include "stdio.h"

#include "stdlib.h"

#define N 8

float Buf[N];

unsigned int *Ptr;


void f(float x[N])

{

   int i;

   for(i=0;i<N;i++)

   {

      x=x*i;

      printf("%f\n",x);

   }

}


void main(void)

{

   int i;

   Ptr=NULL; //NULL在文件stdio.h中定义过。

   Ptr=(unsigned int *)malloc(N*sizeof(int));  //注意一定是要开辟Nint型的字节长度,不然编译会出错。

   //printf("%ld\n",Ptr);

   for(i=0;i<N;i++)

   {

      *(Ptr+i)=i;

   }

   for(i=0;i<N;i++)

   {

      Buf = *(Ptr+i);

   }


   //下面调用函数f 处理外部RAM中的数

   f((float *)(Ptr)); //请问:这样调用函数有问题吗?

   //f(Buf);   //这样调用则不会有问题。

}

说明:若这样调用函数:f((float *)(Ptr)),则输出结果如下图A1所示:



A1.jpg

A1


若这样调用函数f(Buf),则输出如下图所示A2:

A2.jpg

A2


这说明像f((float *)(Ptr))这样调用函数是有问题的,具体原因就慢慢体会吧,我暂时也不能明确道出个所以然来。

后来我又调试发现:如果存储的时候也是定义Ptrfloat型指针的,那么输出时调用f((float *)(Ptr))便可正确输出结果,而存储时是以unsigned int型指针存储的,则调用的时候应该这样调用:f((*unsigned int *)Ptr)







2014-2-22

对于上述问题,后来我又想到是否可以通过结构体来定义对应的变量,结果还是不行。

#include "stdio.h"

#define N 8

union BufRam

{

   unsigned intIntRam;

   float     FloatRam;

}Buf[N];

void f(float x[N])

{

   int i;

   for(i=0;i<N;i++)

   {

      x=x*i;

      printf("%f\n",x);

   }

}


void main(void)

{

   int i;

   for(i=0;i<N;i++)

   {

      Buf.IntRam=i;

   }

   for(i=0;i<N;i++)

   {

      //Buf.FloatRam=Buf.IntRam;  //若增加这条语句,则下面的处理即可成功了。

   }


   //下面调用函数f 处理外部RAM中的数

   f(&(Buf[0].FloatRam));   //请问:这样调用函数有问题吗?

}

运行结果同上面第一幅图A1


若调用程序中的这条语句Buf.FloatRam=Buf.IntRam,则运行结果同上面第二幅图A2。



这说明即使是定义结构体类型也是不行的啊,因为整型变量与浮点型变量的存储结构是不同的,这一点是我经过多天的理解自己得出的,其可靠性尚需官方或者资深工程师明确说明。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-29 02:44 , Processed in 0.031266 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表