两个值竟然不相等,为什么解决办法

两个值竟然不相等,为什么typedef struct {char achar bint cchar d}ABCDtypedef struct {char achar

两个值竟然不相等,为什么
typedef struct {
  char a;
  char b;
  int c;
  char d;
}ABCD;

typedef struct {
  char a;
  char b;
  char d;
  int c;
}ABDC;
printf("%d,%d",sizeof(ABCD),sizeof(ABDC));
结果是一个12,一个8.

太奇怪了,这是为什么?

----------------------------














[解决办法]
编译器为了保证的数据4字节对齐功能做的
前一个结构体,前2个成员之和小于4字节,第3个是4字节,所以占8字节,最后一个成员虽然是char,但是为了对齐,又占了4个字节,所以总共12个字节

后一个结构体,前3个成员之和不到4字节,按4字节记,第4个成员4字节,所以是8字节