gpt4 book ai didi

c - 如何找到container_of返回的地址?

转载 作者:行者123 更新时间:2023-11-30 17:05:33 24 4
gpt4 key购买 nike

我不想实现该功能,但我想知道如何从概念上思考它。例如,一个结构体包含 5 个整数。 sizeof() 中每个整数的大小为 4。如果第 5 个元素的地址是 0x8b1000d,如何找到该结构的地址?我读到该结构的地址是第一个元素的地址。那么我是否只需从第 5 个整数的地址中减去每个整数的大小即可找到它?

最佳答案

最好使用 offsetof 宏 ( #include <stddef.h> ) 来获取相关字段的字节偏移量,然后从字段地址中减去该偏移量以获得结构体开头的地址。

给定结构中字段的地址,您所要做的就是从该字段的地址中减去该字段的偏移量(由 offsetof 生成),即可得到该结构的地址。虽然涉及一些选角,但基本上就是这样。这是一个例子:

struct blah {
int a, b, c, d, e;
} xyz;

int *my_blah_e = &xyz.e;
struct blah *my_blah = (struct blah *) (((char *) my_blah_e) - offsetof(blah, e));
// my_blah == &xyz

关于c - 如何找到container_of返回的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236778/

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