#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;
}
为什么输出为1 2?表示我拥有1个字节的大小,j拥有2个字节。我们知道unsigned char有1个字节,为什么我不等于2?我很抱歉我的英语。
答案 0 :(得分:4)
C ++中的所有变量都填充到下一个字节。
在结构i
中,a
和b
都是4位,总计为1个字节。
在j
中,变量总和最多12位,但由于填充,大小为2字节。