一.结构体设计
尽量把具有最小的内置类型的结构体成员放在前面。
二.计算结构体中成员的相对偏移量
a | b | b | c | c | c | c | d | d | d | d | f | f | f | f | f | f | f | f | l | l | l | l | l | l | l | l |
a:0
b:2
c:4
d:8
f:16
l:24
方法1:
将char*变成char也可以,但当结构体大小大于char所能表示的范围,就无法表示了。
方法2:
可将此方法用宏定义表示:
代码如下:
#include<stdio.h>
#define MY_OFFSET(type,arg) (int)&(((type*)0)->arg)
struct Node
{
char a;
short b;
int c;
float d;
double f;
long long l;
} list;
int main()
{
//求d的相对偏移量
//int dist = (int)((char*)&(list.d) - (char*)&(list));
//假设(我们并未定义变量)一个结构体指针指向0地址,此时地址即为偏移量
//int dist = (int)&(((struct Node*)0)->d);
printf("%d\n", MY_OFFSET(Node, d));
}