*(<type> *)(<constant>)是什么意思?

时间:2015-06-05 09:56:19

标签: c pointers memory casting

我最近遇到了以下C代码:

*(STRUCT_T*)(0xC6)

STRUCT_Ttypedef ed结构。有人能解释一下这意味着什么吗?

我的猜测:STRUCT_T*将地址0xC6强制转换为结构指针,*然后检索存储在地址0xC6的值(struct)?

1 个答案:

答案 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类型的值。