struct A
{
int a;
short b;
int d;
char c;
union
{
int g;
int ar[3];
double f;
};
};
struct B
{
int a;
short b;
struct
{
char e;
int f;
};
char c;
int d;
};
struct C
{
int a;
char arr[20];
char b;
int c;
float d;
char brr[30];
};
struct D
{
int a : 8;
char b : 7;
};
int main()
{
//结构体大小:上面所有变量的字节数的总和必须为下面变量字节的倍数;总的大小必须是单个最大元素的倍数。
//printf("%d\n", sizeof(A));//4,2+2->4,4,1+3->4 》16 union的:最大的成员为 int ar[3],3*4->12个字节,然后需要整除单个最大元素(double),所以就为16字节了
//printf("%d\n", sizeof(B));// 4,2,1+1->2,4 》12 带内嵌结构体的(先算内嵌里的):4,2+2->4,1+3->4,4,1+3->4,4 》24
//printf("%d\n", sizeof(C));//4,20,1+3->4,4,4,30+2 》68
//printf("%d\n", sizeof(D));//同类型的,位数相加然后除8,然后得到字节数(如果结果是小数,向上取整),然后往上凑,是此类型大小(char 1 int 4...)的倍数就行。8+32->40 40/8->5 5+3->8 所以,为8个字节。不同类型的,直接按照正常结构体算.
return 0;
}
关于结构体,联合体,位字段的大小的
最新推荐文章于 2024-04-18 18:23:29 发布