1.语法
struct 结构体名
{
struct 结构体名 成员名;
};
2.结构体大小
例如:
#include <stdio.h>struct A
{char a;int b;char c;char d;
}; int main()
{printf("%d\n",sizeof(struct A));return 0;
}
打印出的结果 : 12
3.字节对齐:
字节对齐主要是针对结构体而言的,通常编译器会自动对其成员变量进行对齐,以提高数据存取的效率;
4.结构体大小的计算方法
自身对齐:看自身的数据类型是多大
默认对齐:看当前环境的位数,通常是4或8
有效对齐:1 2 4 8....和自身对齐一样
存储地址:存储地址必须整除有效对齐
从上面的例子来看:
自身对齐 默认对齐 有效对齐 存储地址
char a 1 4 1 0
int b 4 4 4 4(占了 4,5,6,7)
char c 1 4 1 8
char d 1 4 1 9 (因为8,9只占2个位置,和4个位置(int)相差2个位置,所以需要补2个位置,也就是补10,11,所以最后大小位为12)
5.位域
5.1定义:所谓的“位域”是把一个字节中的二进制位分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。
一般形式:
struct 位域结构体名
{
位域列表;
};
位域列表的形式:类型说明符 位域名:位域长度
5.2位域变量说明
1.struct位域结构体名 变量名
2.struct位域结构体名 变量名= {成员1值,成员2值..}
3.定义位域结构体时顺便创建变量