我一直认为我非常了解C,直到我在另一篇文章中看到这样的东西:
struct foo {
int x:1;
};
Run Code Online (Sandbox Code Playgroud)
我真的很想知道这个目的:1.有人能告诉我吗?谢谢.
Tom*_*Tom 11
位域.x是1位长.
每个字段都被访问和操作,就像它是结构的普通成员一样.关键字signed和unsigned意味着你所期望的,除了有趣的是注意到二进制补码机上的1位有符号字段只能取值0或-1.声明允许包含const和volatile限定符.
位域的主要用途是允许紧密打包数据或能够指定一些外部生成的数据文件中的字段.C不能保证机器字中字段的排序,所以如果你因为后一个原因而使用它们,那么你的程序不仅是不可移植的,而且它也将依赖于编译器.标准说,字段被打包成"存储单元",通常是机器字.包装顺序以及位域是否可以跨越存储单元边界是实现定义的.要强制对齐到存储单元边界,在要对齐的字段之前使用零宽度字段.
小心使用它们.它可能需要大量的运行时代码来操作这些东西,并且最终可以使用比它们节省更多的空间.
位字段没有地址 - 您不能指向它们或它们的数组.
http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.html