功能:
结构体中的冒号:表示位域。主要是因为一些需要表示的信息并不需要系统定长bit的int 或char等类型进行存储,为了达到节约空间的目的,将多个信息存储到一个int 或char等结构中。
样式
struct s_name{
int a:2; //第一个字节处 0-1
int b:3; //第一个字节处 2-4
int c:4; //此时第一字节末尾只有3位,不足以保存c,c只能保存到第二个字节 0-3
char d:3; // 第二个字节处 4-6
int e:10; // 第二个字节剩余处无法保存e,将e的前八个位保存到第三个字节的0-7处。后两个保存到第四个字节前两位处0-1
//
int f:20;// 此时上一个int 32位中已经用了4个字节。f只能从第5个字节开始保存,第五和六个字节保存了前16位。第七个字节保存了后四位到0-3
int g:30;// 此时上一个int 还剩一个字节未用,此时g要是8个字节以内就可以保存到第八个字节了。不够保存,从第九个字节开始另开辟一个int的空间 将g的位 依次保存到 第 九 十 十一 和第十二字节的0-5位处
char h:3;//上一个int剩余位不足以保存,开辟新的区域,保存到第十三字节的0-2处
char i:7;//第十三个字节剩余处无法保存i,开辟第十四个字节0-6保存i
int j:10;//此处如果j的位 <= 17,j位会保存到从第十四个字节7位开始一直最多保存17位,一直到十六字节
//如果j的位>17,那就开辟Int区域(十五 十六字节留白用来对齐)从十七字节开始保存j的内容
};
关于指针,结构大小
a b c e 指针相同
d指针为 (char *)a指针+1
h j 指针大小相同,类型不同
i指针大小为h指针+1;
int为32位的系统 上面的 sizeof(struct s_name) 为 16。
其它
这块最好是自己写个test测试下,加深理解。