我最近遇到了以下 C 代码:
*(STRUCT_T*)(0xC6)
STRUCT_T
是一个typedef
ed 结构。谁能解释一下这是什么意思?
我的猜测:STRUCT_T*
将地址 0xC6
转换为结构指针,然后 *
检索存储在该地址的值(结构) 0xC6
?
最佳答案
是的,您是对的,但我想,这个问题需要更详细地回答为什么我们要这样做。
首先,让我们看看一元 *
运算符做了什么。它根据操作数的类型来解引用它的操作数。用非常简单的术语来详细说明,
*ptr
,当ptr
的类型为char *
时,将读取sizeof(char)
即 1从ptr
开始的数据字节
*ptr
,当ptr
的类型为int *
时,将读取sizeof(int)
即 4从ptr
开始的数据字节(在 32 位系统上)
因此,通过说*(STRUCT_T*)(0xC6)
,我们正在执行
- 将指针(地址)
0xC6
视为指向类型STRUCT_T
的指针。 - 取消引用相同内容以获取
STRUCT_T
类型的值。
关于c - *(<类型>*)(<常量>) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30663596/