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

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得到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值