C语言计算结构体长度

来源:互联网 发布:淘宝台服战网点 编辑:程序博客网 时间:2024/04/30 22:23

假设定义了C语言结构体类型如下:

typedef struct
{
    int sq;
    char tentext[200];
} T;

T t1, t2;

计算结构体某个元素在内存中所占的长度公式(宏定义): #define SZOF(s, m) sizeof((((s *)0)->m))   

计算结构体某个元素在内存中相对首地址的位移:#define szoffset(s, m) (size_t)(&(((s *)0)->m))

原理很简单:计算元素长度时,将0强制转化为对应结构体类型指向的首地址,然后直接sizeof计算元素长度;计算位移时,也是将0转化为结构体类型指向的首地址,直接取元素的地址即可,因为首地址的值是0,后续每个元素的地址自然就是相对位移值了。


原创粉丝点击