计算C结构体成员偏移量两种方式本质上是一样的

Posted Paprika

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算C结构体成员偏移量两种方式本质上是一样的相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stddef.h>
typedef struct test_st {
    char a[3];
    char b[13];
    int *p;
}test_t;
#define OFFSET(type,member) ((size_t)(&(((type *)0)->member)))
int main()
{
    printf("a:offset\t:%ld \t2:%ld\n",offsetof(test_t, a),OFFSET(test_t, a));
    printf("b:offset\t:%ld \t2:%ld\n",offsetof(test_t, b),OFFSET(test_t, b));
    printf("p:offset\t:%ld \t2:%ld\n",offsetof(test_t, p),OFFSET(test_t, p));
    return 0;
}

结果:

a:offset    :0     2:0
b:offset    :3     2:3
p:offset    :16     2:16
offsetof函数在linux中实现方式与这个宏一致。

以上是关于计算C结构体成员偏移量两种方式本质上是一样的的主要内容,如果未能解决你的问题,请参考以下文章

C 语言结构体 ( 指针运算与指针内存操作 | 结构体成员偏移量计算 )

计算结构体的大小

结构体对齐计算方式

怎样求结构体成员的偏移地址 || 结构体的 sizeof 总结

计算结构体的大小

计算结构体内元素的偏移量宏