c - 使用 offsetof 执行指针运算示例

标签 c pointers struct

我试图通过使用 offsetof() 宏来学习如何访问结构成员,我遇到了这个例子 How can I access structure fields by name at run time? 这一行:

//Set the value of 'a' using pointer arithmetic
*(int *)((char *)structp + offsetf) = 5;

给我带来麻烦。 为什么指针被强制转换为 char * 然后又返回到 int *

最佳答案

首先,结构指针必须转换为“字节指针”类型,因为offsetf 很可能包含所需结构字段的字节偏移。由于这种转换,(char *)structp + offsetf 子表达式中的指针算法是根据 char 对象(以字节为单位)执行的,这正是我们想要的。

其次,上述子表达式为我们提供了一个类型为 char * 的指针,该指针指向所需的数据字段。但实际上该数据字段显然具有 int 类型。因此,为了访问该数据字段,我们必须将 char * 指针转换为正确的 int * 类型。之后,我们可以使用一元 * 运算符对该数据字段执行读(或写)访问。

在您的情况下,值 5 被写入 int 数据字段,该字段位于 指向的对象内的字节偏移量 offsetf结构体.

关于c - 使用 offsetof 执行指针运算示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46576259/

相关文章:

c - 打印两个数组中的公共(public)元素

MySQL Connector C/C API - 特殊字符查询

c - 将字符串数组传入函数+此数组的动态分配不起作用

c - 如何循环结构体指针

c# - 表单是否像指针一样工作?

c - 有没有 Hello World 堆溢出的例子?

c - 在数组中打印偶数/奇数时输出错误 - c

database - 从 PostGres 数据库获取结构

c++ - 不完整的类型,前向声明

c - C 链表中的冒泡排序