结构体大小 2.必须能整除单元最大类型的大小。(解决数组)
struct A { char a; int b; };//sizeof(struct A)?结构体的大小问题主要是由内存对齐引入的 规则1.前面所有成员的字节数能整除当前成员大小。(解决单个变量)
struct A { char a;//1+3 int b;//4 };//sizeof(struct A) == 8按照规则一,我们可以算出结构体A的大小为8,成员一也就是char a 的大小为1,它不能整除下一个int b 成员的大小4,所以我们要给它加三个,才能整除int b 的大小,当然可以用图来表示。
我们再来看几个例子
struct B { char a;//1+1 short b;//2 int c;//4 };//8 struct C { char a;//1+1 short b;//2+4 double c;//8 };//16 struct D { char a;//1+3 float b;//4 int *c;//4 };//12那么遇到如下情况结构体大小又是多少呢
struct E { int a;//4 char b;//1 };//是5还是8呢规则2:结构体的大小能整除单个最大成员的字节数
struct E { int a;//4 char b;//1 };//4+1+3,sizeof(struct E) == 8 struct E { int a; char b; }arr[2];那么遇到数组我们应该如何解决呢,图片告诉你!
再来几个例子
struct E { char a;//1+3 int b;//4 long *c;//4+4 double d;//8 };//24 struct F { int a;//4 double b;//8 };//12 struct HH { char a;//1 int b;//4 };//8 struct H { int c;//4 struct HH d;//8 };//12来一份struct H 的示意图!
以上就是关于结构体大小的内容,你会判断结构体的大小了吗?