C语言基础--结构体

位域:

 1 struct 位域结构名
 2 { 位域列表 };
 3 
 4 比如
 5 
 6 struct pack
 7 {
 8    unsigned a:2;
 9    unsigned b:8;
10    unsigned c:6;        
11 }pk1, pk2;
12 
13 结构变量pk1或者pk2的3个成员将总共占用16位存储,其中a占用2位,b占用8位,c占用6位。

注:C语言中unsigned即表示unsigned int.

但是, 一个位域必须存储在同一个字节中,不能跨2个字节,当1个字节所剩空间不够存放另一个位域时,应从下一单元存入该位域。也可以有意使某位域从下一单元开始。例如:

 1 struct bs
 2 
 3 {
 4 
 5   unsigned a:4;
 6 
 7   unsigned  :0;   /*空域*/
 8 
 9   unsigned b:4;  /*从下一单元开始存放*/
10 
11   unsinged c:4;
12 
13 }

结构体内部成员的对齐

  在计算结构体长度,尤其是用sizeof运算符时,需要注意根据不同的编译器和处理器,结构体内部的成员有不再的对齐方式,这会引起结构体长度的不确定性。

 1 #include<stdio.h>
 2 struct a
 3 { 
 4     char a1;
 5     char a2;
 6     char a3;
 7 }A;
 8 
 9 struct b
10 {
11     short a2;
12     char a1;
13 }B;
14 
15 int main()
16 {
17     printf( "sizeof(char) = %ld, sizeof(short) = %ld, sizeof(A) = %ld, sizeof(B) = %ld
",
18         sizeof(char), sizeof(short), sizeof(A), sizeof(B) );
19         
20     return 0;
21 }

在Trubo C中结果为:

1,2, 3,3

原文地址:https://www.cnblogs.com/merlindu/p/6417433.html