位段是结构体的一种, 是一种特殊的结构体。 位段可以自己设定元素的内存大小。不具备平台间的移植性。
位段的定义
下面是一个定义的位段
这里成员后面的数字代表比特位。 int a : 1;代表a只占一个比特位。
位段中的元素只能是int, char, 或者unsigned char 等等。
位段的内存
接下来是位段的内存划分:
对于这一个位段的定义, 里面的元素内存划分是这样
首先位段的元素申请空间是从低地址向高地址。 同时申请是以一个字节为单位, 从低位序列向高位序列申请。 当一个字节不够申请时, 就开始申请下一个字节。
所以, 这个位段的大小时两个字节。
位段的应用事项
位段因为有可能多个成员变量共用一个字节。 所以有些成员变量是没有地址的。 就比如本文定义的a 和 b。两个成员公用一个字节。 b没有地址。 所以当我们使用scanf 取地址操作进行赋值时, 不能直接进行赋值, 而是需要使用一个中间变量:如下: