💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗如果博客对大家有用的话,请 点赞,关注,加关注 🌞
1.什么是位段
位段的成员必须是整型家族int ,unsigned int , signed int 或char
位段的成员名后面有一个冒号和一个数字(数字表示内存的单位byte)
2.位段的内存分配
1. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。
2. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段
struct S
{
char a:3;这里是占3个比特位
char b:4;
char c:5;
char d:4;
};
struct S s = {0};
s.a = 10;
s.b = 12;
s.c = 3;
s.d = 4;
根据结构体成员类型来判定如果是int型一次开辟32个byte位,char型一次开辟8个比特位·
struct A
{
int _a:2;
int _b:5;
int _c:10;
int _d:30;
};
因为结构体成员是int型一次开辟32byte,当前32位不够开辟30byte位时又重新开辟32byte位
结构体习题练习
int main()
{
unsigned char puc[4];
struct tagPIM
{
unsigned char ucPim1;
unsigned char ucData0 : 1;
unsigned char ucData1 : 2;
unsigned char ucData2 : 3;
}*pstPimData;
pstPimData = (struct tagPIM*)puc;//强转为结构体指针
memset(puc, 0, 4);//初始化puc函数
pstPimData->ucPim1 = 2;
pstPimData->ucData0 = 3;
pstPimData->ucData1 = 4;
pstPimData->ucData2 = 5;
printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
return 0;
}