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

What does *(<type>*)(<constant>) mean?

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

*(STRUCT_T*)(0xC6)

STRUCT_T 是一个 typedefed 结构。谁能解释一下这是什么意思?

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

是的,你是对的,但我想,对于为什么我们要这样做,这个问题需要更详细的回答。

首先,让我们看看一元运算符 * 做了什么。它 取消引用 它是基于操作数的 类型 的操作数。用非常简单的术语详细说明,

  • *ptr,当ptr的类型为char *时,将读取sizeof(char),即从ptr
  • 开始的1字节数据
  • *ptr,当ptr的类型为int *时,将读取sizeof(int),即从[=12=开始的4字节数据(在32位系统上) ]

所以,通过说 *(STRUCT_T*)(0xC6),我们正在执行

  • 将指针(地址)0xC6 视为指向类型 STRUCT_T 的指针。
  • 取消引用相同的值以获得类型 STRUCT_T 的值。