我试图通过使用 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/