打印

类型转换问题请教

[复制链接]
1289|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyf9908|  楼主 | 2014-8-26 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
hd, hdr, ev, os, ST
本帖最后由 lyf9908 于 2014-8-26 15:45 编辑

现有如下的两个结构定义:
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),能这样用吗?会不会有问题; 

   

相关帖子

沙发
车彦锋| | 2014-10-16 10:20 | 只看该作者
顶一下

使用特权

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

本版积分规则

133

主题

176

帖子

0

粉丝