下面是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),能这样用吗?会不会有问题;
|