我最近遇到了以下C代码:
*(STRUCT_T*)(0xC6)
STRUCT_T
是typedef
ed结构。有人能解释一下这意味着什么吗?
我的猜测:STRUCT_T*
将地址0xC6
强制转换为结构指针,*
然后检索存储在地址0xC6
的值(struct)?
答案 0 :(得分:2)
是的,你是对的,但我猜,这个问题需要更详细的回答
首先,让我们看看一元*
运算符所做的工作。它根据操作数的类型 取消引用它的操作数。用非常简单的术语来阐述,
*ptr
,当ptr
类型为char *
时会显示sizeof(char)
,即从ptr
开始的1字节数据*ptr
,当ptr
类型为int *
时,将从sizeof(int)
<读取ptr
,即4字节数据(在32位系统上) / LI>
所以,通过说*(STRUCT_T*)(0xC6)
,我们正在执行
0xC6
视为指向STRUCT_T
的指针。STRUCT_T
类型的值。