c语言中使用结构体位段的结构体大小
解决时间 2021-03-04 11:24
- 提问者网友:妳螚鬧俄螚笑
- 2021-03-03 13:43
#include
struct test
{
char c1:1;
char c2:2;
char c3:3;
};
int main()
{
printf("%d\n", sizeof(struct test));
return 0;
}
为什么大小是1呢
最佳答案
- 二级知识专家网友:咱再堅強也是壹菇涼
- 2021-03-03 15:12
char类型的位域,在使用位不超过8的时候占用的字节大小为1,超过8为2字节 你这个结构体总共用了6位,所以是1字节
全部回答
- 1楼网友:刺眼的青春
- 2021-03-03 18:35
因为这个结构体或者说是位段总共只占用了一个char型的空间,所以sizeof当然是1了……
位段的定义char c1:1;表示把一个char型空间中的一个位分配给c1.
- 2楼网友:繁华初下,心已空
- 2021-03-03 17:25
这个和位域没关系,sizeof()一个结构体的时候 ,它有一个对齐的。
struct test {
int i;
char x;
}
printf("%d\n" , sizeof(test) ; //这时候会输出8
当你使用位域的时候,它会输出1, 这就牵涉到一个对齐策略的问题,glibc中对齐的策略是2^n
- 3楼网友:落日海湾
- 2021-03-03 15:56
错了,结构体的内存占用和类对象初始分配内存比较相近
再看看别人怎么说的。
- 4楼网友:陪我去流浪
- 2021-03-03 15:26
这个和位域没关系,sizeof()一个结构体的时候 ,它有一个对齐的。
struct test {
int i;
char x;
}
printf("%d\n" , sizeof(test) ; //这时候会输出8
当你使用位域的时候,它会输出1, 这就牵涉到一个对齐策略的问题,glibc中对齐的策略是2^n
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯