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

#include<stdio.h>
struct test
{
char c1:1;
char c2:2;
char c3:3;
};
int main()
{
printf("%d\n", sizeof(struct test));
return 0;
}
为什么大小是1呢

这个和位域没关系,sizeof()一个结构体的时候 ,它有一个对齐的。
struct test {
int i;
char x;
}
printf("%d\n" , sizeof(test) ; //这时候会输出8

当你使用位域的时候,它会输出1, 这就牵涉到一个对齐策略的问题,glibc中对齐的策略是2^n
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-07
这个和位域没关系,sizeof()一个结构体的时候 ,它有一个对齐的。
struct test {
int i;
char x;
}
printf("%d\n" , sizeof(test) ; //这时候会输出8

当你使用位域的时候,它会输出1, 这就牵涉到一个对齐策略的问题,glibc中对齐的策略是2^n
第2个回答  2013-02-18
char类型的位域,在使用位不超过8的时候占用的字节大小为1,超过8为2字节 你这个结构体总共用了6位,所以是1字节本回答被提问者采纳
第3个回答  2013-02-18
因为这个结构体或者说是位段总共只占用了一个char型的空间,所以sizeof当然是1了……
位段的定义char c1:1;表示把一个char型空间中的一个位分配给c1.
第4个回答  2013-02-18
错了,结构体的内存占用和类对象初始分配内存比较相近
相似回答
大家正在搜