linux c 结构体中的冒号 :

功能:

  结构体中的冒号:表示位域。主要是因为一些需要表示的信息并不需要系统定长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测试下,加深理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值