C语言 struct问题

include <stdio.h>

struct Bit {
unsigned int a:5;
unsigned int :2;
unsigned int b:1;
unsigned int :0;
unsigned int c:2;
unsigned int :2;
unsigned int d:4;
unsigned int e:8;
};
void main(void) {
printf("%d\n",sizeof(struct Bit)/sizeof(unsigned int));
} //输出是2, 为什么?

阅读 5.2k
2 个回答

感觉楼上都说的貌似不太对。
structsizeof要注意两点:
1. 建立满足位数要求的整数unsigned int空间,最少为1unsigned int
2. 不能跨越两个unsigned int存储一个标示,可以用语句unsigned int:0强制使用下一个unsigned int
所以,sizeof(struct Bit)的value是2*unsigned int

struct存储示意

这是段结构体(我也是百度了的),当一个字剩余位比你定义的位少时,它会从下一个字节开始定义下一个位。例如unsigned int a:5;由于unsigned int是四个字节,一个字节8位,a只占了第一个字节的5位,从下一个字节开始定义占2位的那个。你定义了8个的变量均不超过一个字节。所以struct Bit 就是8个字节,而unsigned int是4个字节,结果自然是2

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进