gpt4 book ai didi

c - container_of 宏中的 char* 有什么用?

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

我们有container_of的链表实现如下:

 #define container_of(ptr, type, member) ({
const typeof( ((type *)0)->member ) *__mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member) );
})

谁能解释一下 char * 的用途?我可以看到您正在使用偏移量,但为什么将其强制转换为 char * 而不是实际类型本身?

最佳答案

当您在 C 中添加和减去指针时,它以指向的类型的大小的单位 完成。所以,例如,如果

int s[10];

如果 s 指向一个 int,那么 s+1 指向下一个 int,而不是下一个字节。同样,如果您从一个指针中减去另一个指针,您将根据它们的类型而不是字节得到它们之间的距离。

因此 offsetof 将指针转换为 char * 以便它始终以字节为单位返回偏移量。

关于c - container_of 宏中的 char* 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28511051/

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