大众信息网

c语言中使用结构体位段的结构体大小

关注:280  答案:5  手机版
解决时间 2021-03-04 11:24
#include
struct test
{
char c1:1;
char c2:2;
char c3:3;
};
int main()
{
printf("%d\n", sizeof(struct test));
return 0;
}
为什么大小是1呢
最佳答案
char类型的位域,在使用位不超过8的时候占用的字节大小为1,超过8为2字节 你这个结构体总共用了6位,所以是1字节
全部回答
因为这个结构体或者说是位段总共只占用了一个char型的空间,所以sizeof当然是1了…… 位段的定义char c1:1;表示把一个char型空间中的一个位分配给c1.
这个和位域没关系,sizeof()一个结构体的时候 ,它有一个对齐的。 struct test { int i; char x; } printf("%d\n" , sizeof(test) ; //这时候会输出8 当你使用位域的时候,它会输出1, 这就牵涉到一个对齐策略的问题,glibc中对齐的策略是2^n
错了,结构体的内存占用和类对象初始分配内存比较相近 再看看别人怎么说的。
这个和位域没关系,sizeof()一个结构体的时候 ,它有一个对齐的。 struct test { int i; char x; } printf("%d\n" , sizeof(test) ; //这时候会输出8 当你使用位域的时候,它会输出1, 这就牵涉到一个对齐策略的问题,glibc中对齐的策略是2^n
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!