您的位置:首页 > 其它

c offsetof-计算结构体内成员的偏移值

2018-03-16 11:55 316 查看
1.作用:
计算结构体内成员的偏移值

2.使用场景:
可在结构体内定义数据结构的节点类型,相当于内嵌数据结构

3.例子(内嵌list数据结构):
例子代码:
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

typedef struct ListNode {
    struct ListNode *next;
} ListNode;

struct Demo {
    int data;
    ListNode node;
};

int main(int argc, char **argv) {
    struct Demo demo1 = {1, NULL}; 
    struct Demo demo2 = {2, NULL};
    struct Demo demo3 = {3, NULL};

    demo1.node.next = &demo2.node;

    demo2.node.next = &demo3.node; 

    ListNode *node = &demo1.node;
    while (node) {
        struct Demo *demo = (struct Demo*)((char*)node - offsetof(struct Demo, node));
        printf("demo data : %d\n", demo->data);
        node = node->next;
    }   
    
    return 0;
}

正常定义ListNode作为简单数据结构List的实现,现在将ListNode定义在Demo中,那么每个Demo中的node按照ListNode数据结构组装,遍历查询均与Demo无关,只有需要访问到Demo的数据成员时,可直接根据数据结构节点node来通过offsetof得到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: