C++11 C++;sizeof(结构)

C++11 C++;sizeof(结构),c++11,C++11,代码如下: #include <stdio.h> int main(){ struct{ unsigned char a:4; unsigned char b:4; }i; struct{ unsigned char a:4; unsigned char b:4; unsigned char c:4; }j; i.a = 1; i.b = 1; j.a = 1; j.b = 1; j.c = 1

代码如下:

#include <stdio.h>
int main(){
  struct{
     unsigned char a:4;
     unsigned char b:4;
  }i;

  struct{
     unsigned char a:4;
     unsigned char b:4;
     unsigned char c:4;
  }j;

  i.a = 1;
  i.b = 1;
  j.a = 1;
  j.b = 1;
  j.c = 1;
  printf("size of i is: %d, size of j is: %d", sizeof(i), sizeof(j));
  return 0;
}
#包括
int main(){
结构{
无符号字符a:4;
无符号字符b:4;
}一,;
结构{
无符号字符a:4;
无符号字符b:4;
无符号字符c:4;
}j;
i、 a=1;
i、 b=1;
j、 a=1;
j、 b=1;
j、 c=1;
printf(“i的大小为:%d,j的大小为:%d”,sizeof(i),sizeof(j));
返回0;
}

为什么输出是12?表示i的大小为1字节,j的大小为2字节。我们知道无符号字符有1个字节,为什么我不等于2?对不起,我的英语不好。

C++中的所有变量都被填充到下一个字节。 在struct
i
中,
a
b
都是4位的,总计为1字节

j
中,变量的总和为12位,但由于填充,大小为2字节

参考: