对于C语言的指针类型转换问题
我认为可以简单理解成, 指针(无论类型)就是指向某个地址, 关键在于该指针有效范围是多少,
也就是指针的类型了.
例如: void * pvoid = 0x100000, 和 unsigned int * puint = 0x10000000,
它们都指向0x10000000地址, 但pvoid不知道有效范围, 也就是不知道应该什么时候结束, puint知道
有效范围(4个字节).
又例如: 一般void *用作回调函数的形参比较多, 为了回调函数的通用性, 其实在调用
回调函数时你要传递的就是一个地址, 并不是整个数据(甚至结构体), 所以不必在调用时
就知晓指针的有效范围, 在执行回调函数时知道有效范围就可以了.
下面就看看你的问题, osal_msg_hdr_t结构体的第一个成员是void*, 从字面上看只知道它是指向
某个地址, 不知道范围, 从下面的代码可以看出第一个成员其实就是指向osal_event_hdr_t结构体,
那么这就不难理解后续代码对指针的转换了, 转换仅仅是为了告知你(程序员)指针的范围.
|