#define题目
1、计算结构体成员偏移量:成员的地址与结构体初始地址的差值,结构体成员对齐数:取成员自身字节数与编译器默认的对齐数的较小值。
#include <stdio.h>
#define OFFsiet(name,member) &(((name*)0) ->member)
//假设结构体的初始地址为0,将0强制转化为结构体指针
//在64位系统中不能将地址(指针,数字)转化为int类型、十六进制等等
//故不能是#define OFFsiet(name,member) (int)&(((name*)0) ->member)
struct shu{
char c;
int a;
char b;
};
int main()
{
printf("%x", OFFsiet(shu,b));
return 0;
}
2、
#include <stdio.h>
#include <string.h>
int main() {
unsigned char a[4];
struct weiduan {
unsigned char c;
unsigned char c1: 1;
unsigned char c2: 2;
unsigned char c3: 3;
} *shu;
shu = (weiduan *) a;
memset(a, 0, 4);
shu->c = 2;
shu->c1 = 3;
shu->c2 = 4;
shu->c3 = 5;
//指定占m个比特位(位段变量)被赋值的时候,超位就从右到左截取m个比特位,作为变量值。
for (int i = 0; i < 4; i++) {
printf("%02x ", a[i]);
}
return 0;
}
//结果: 02 29 00 00