打印

类型转换问题请教!

[复制链接]
987|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyf9908|  楼主 | 2014-8-26 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
hd, hdr, ev, os, ST
下面是BLE协议中摘录整理的代码;
现有如下的两个结构定义:
typedef struct
{
   void   *next;
   uint16 len;
   uint8  dest_id;
} osal_msg_hdr_t;

typedef struct
{
   uint8  event;
   uint8  status;
} osal_event_hdr_t;

osal_msg_hdr_t *foundHdr = listHdr;// 此处定义了一个指针变量并赋值,所以foundHdr指向内存中一个                     
                    osal_msg_hdr_t型的结构体变量;

osal_event_hdr_t *pMsg = (osal_event_hdr_t *)foundHdr //此处把foundHdr类型转换后赋给变量pMsg
                            本质上pMsg还是指向上面定义的  
                            osal_msg_hdr_t型的结构体变量;

if (pMsg->event == HCI_GAP_EVENT_EVENT)    //此处引用pMsg->event,其在内存中的位置应                           
                           该就是osal_msg_hdr_t结构体变量的
                           void   *next它存储的是一个指向消息头的指针
{
   ......
}

此处foundHdr先被定义为sal_msg_hdr_t型的指针变量,并给其赋初值,其指向一个osal_msg_hdr_t型的结构体变量
接着把foundHdr转换成osal_event_hdr_t 型的指针后赋给pMsg,所以本质上而言,pMsg在内存中还是指向osal_msg_hdr_t型的结构体变量
接着使用pMsg->event,所以此时的pMsg->event按在内存中的位置而言,应该就是osal_msg_hdr_t变量的void   *next; void   *next处应为一个消息头的指针,与event没有关系,而此时直接使用if (pMsg->event ==  HCI_GAP_EVENT_EVENT),能这样用吗?会不会有问题; 

相关帖子

沙发
msblast| | 2014-8-29 22:16 | 只看该作者
从C语言角度来看,是可以的。
从应用逻辑来看,视具体场景而定。

使用特权

评论回复
板凳
NWPU_CHEN| | 2014-8-30 09:07 | 只看该作者
个人觉得没什么问题,完全可以

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

176

帖子

0

粉丝