gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:40 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com