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, 为什么?
回答:
感觉楼上都说的貌似不太对。struct
的sizeof
要注意两点:
1. 建立满足位数要求的整数个unsigned int
空间,最少为1
个unsigned int
2. 不能跨越两个unsigned int
存储一个标示,可以用语句unsigned int:0
强制使用下一个unsigned int
所以,sizeof(struct Bit)的value是2*unsigned int
回答:
这是段结构体(我也是百度了的),当一个字剩余位比你定义的位少时,它会从下一个字节开始定义下一个位。例如unsigned int a:5;由于unsigned int是四个字节,一个字节8位,a只占了第一个字节的5位,从下一个字节开始定义占2位的那个。你定义了8个的变量均不超过一个字节。所以struct Bit 就是8个字节,而unsigned int是4个字节,结果自然是2
以上是 C语言 struct问题 的全部内容, 来源链接: utcz.com/p/195366.html