kernel.h中的这段代码是什么意思?

What does this piece of code in the kernel.h mean?

以下代码来自linux内核:

/**
639  * container_of - cast a member of a structure out to the containing structure
640  * @ptr:    the pointer to the member.
641  * @type:   the type of the container struct this is embedded in.
642  * @member: the name of the member within the struct.
643  *
644  */
645 #define container_of(ptr, type, member) ({          \
646     const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
647     (type *)( (char *)__mptr - offsetof(type,member) );})
648 

我不明白第 646-648 行的作用。我从上面的注释中知道这两行是做什么的,但我不逐字理解代码。你能给我解释一下吗?

646 -> 首先创建一个指向该成员的指针 (__mptr)。首先创建一个空指针。这是查找成员类型所必需的(成员的 type 未作为参数给出!)。

647 -> 将创建的指针 (__mptr) 转换为 char*。然后使用 'offsetof' 定义找到该成员的偏移量。然后从铸造的 __mptr 中减去偏移量。需要进行转换,因为 offsetof 给出的结果是以字节为单位的。否则容器的开头计算不正确(有指针的计算是根据指针类型计算的) 需要在第 647 行额外转换为 type*,因为需要返回正确类型的指针。

目的是给定一个匿名指针,您知道它实际上是指向更大结构的某个元素的指针,计算那个更大结构的起始地址。