#include <stdio.h>
struct date{
int year,month,day;//P12
char week[5];//P5
};
int main(){
printf("%d",sizeof(struct date));//P20
return 0;
}
上题所示,int 4B,char1B,4*3+5*1=17,为什么打印出来的会是20呢
原因就是结构体的字节对齐原则
上述违反了第一个原则,必须是最大成员的整数倍,也就是int(4)的整数倍,17补齐就为20了。
对齐规则如下:
原则1:结构内部各个成员的首地址必然是自身大小的整数倍。
原则2:sizeof的最终结果必然是结构内部最大成员的整数倍,不够补齐。
原则3:结构内部各个成员的首地址必然是min[n,自身大小]的整数倍。(以指定字节n与当前处理字节sizeof值比较)
原则4:整个sizeof的最终结果必然是min[n,结构内部最大成员],不够补齐。