已知结点地址,如何访问父结构?
程序员文章站
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)