C语言有关指针小问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 02:51:04
这一行代码:
p1 = (A_UINT8 *) &(((WLAN_FRAME_ASSOC_REQ *)pmacHdr)->ssid);

其中p1是前面定义的指针变量,A_UINT8是个类型定义,那么这句的意思是不是把后面那个结构体里ssid的地址进行类型转换后赋值给p1呢?
请指教!

这个语句考查了C语言的优先级和结合率。
小括号的优先级最高:执行顺序为:
1. (WLAN_FRAME_ASSOC_REQ *)pmacHdr,这步是一个指针类型转换
2. ((WLAN_FRAME_ASSOC_REQ *)pmacHdr)->ssid,这步是从结构体WLAN_FRAME_ASSOC_REQ中获得数据成员ssid
3. &(((WLAN_FRAME_ASSOC_REQ *)pmacHdr)->ssid),这步是取2步中得到的数据成员的地址
4. 将3步的地址转换为A_UINT8的指针,即把ssid理解为一个3位的无符号整型数