*(<type>*)(<constant>) 是什么意思?
What does *(<type>*)(<constant>) mean?
我最近遇到了以下 C 代码:
*(STRUCT_T*)(0xC6)
STRUCT_T
是一个 typedef
ed 结构。谁能解释一下这是什么意思?
我的猜测: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
的值。
我最近遇到了以下 C 代码:
*(STRUCT_T*)(0xC6)
STRUCT_T
是一个 typedef
ed 结构。谁能解释一下这是什么意思?
我的猜测: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
的值。