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, 为什么?

回答:

感觉楼上都说的貌似不太对。
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

以上是 C语言 struct问题 的全部内容, 来源链接: utcz.com/p/195366.html

回到顶部