当前位置:  开发笔记 > 开发工具 > 正文

为什么这个联合的大小是2的位域?

如何解决《为什么这个联合的大小是2的位域?》经验,为你挑选了1个好方法。

我在Windows上的turbo C上工作,其中char占用一个字节.现在我的问题在于下面的联合.

union a
{
 unsigned char c:2;
}b;
void main()
{
printf("%d",sizeof(b));  \\or even sizeof(union a)
}

该程序打印输出为2,其中union应该只占用1个字节.为什么会这样?

对于struct,它可以很好地给出1个字节但这个联合工作不正常.

还有一件事如何访问这些位字段.

scanf("%d",&b.c);  //even scanf("%x",b.c);

没有用,因为我们不能有位的地址.所以我们必须使用下面的另一个变量

int x;
scanf("%d",&x);
b.c=x;

我们不能避免吗?有没有其他方法???



1> CB Bailey..:

允许编译器向结构和联合添加填充,而我承认,当你能够获得一个完全允许的单字节结构时,你的联合会将联合四舍五入到两个字节大小有点令人惊讶.

回答你的第二个问题:不,这是不可避免的.位字段是结构打包优化,并且要支付的性能和便利性惩罚是位字段成员不能单独寻址.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有