欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

已知结点地址,如何访问父结构?

程序员文章站 2022-04-12 11:44:06
先来看这样一段代码: 假设知道了task1.delayNode的地址,怎么反推task1的地址? 如果delayNode定义在task1开头,显然它们俩地址是一样的,这只是一种特殊的情况,如果delayNode放在中间呢? 所以就可以写成 ......

先来看这样一段代码:

typedef struct _ttask
{
  tnode delaynode;
  uint32_t prio;
  uint32_t state;
}ttask;
ttask task1;

假设知道了task1.delaynode的地址,怎么反推task1的地址?

如果delaynode定义在task1开头,显然它们俩地址是一样的,这只是一种特殊的情况,如果delaynode放在中间呢?

已知结点地址,如何访问父结构?

#define tnodeparent(node, parent, name)   \
(parent *)((uint32_t)&((parent *)0)->name)

所以就可以写成

tnodeparent(node, ttask, delaynode)