c - *(<类型>*)(<常量>) 是什么意思?

标签 c pointers memory casting

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

*(STRUCT_T*)(0xC6)

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

我的猜测: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/

相关文章:

c - 等价于数组的指针

c - 将节点添加到单链列表的中间

c - 对数组使用动态内存分配

c++ - 将char数组传递给exec *()系列函数后,如何释放它们的内存

c - 我的嵌套结构声明有问题吗?

c++ - 嵌入式设备上的 C/C++ CGI、POST、GET、LOGIN?

C 交换二维数组中的字符串(不带指针)

c - 使用初始化器设置多维数组的所有边界

c++ - 试图在映射 C++ 中存储指向抽象类的指针

java - Scala 和进程中的内存泄漏