位段是结构体的一种, 是一种特殊的结构体。 位段可以自己设定元素的内存大小。不具备平台间的移植性。
位段的定义
下面是一个定义的位段

这里成员后面的数字代表比特位。 int a : 1;代表a只占一个比特位。
位段中的元素只能是int, char, 或者unsigned char 等等。
位段的内存
接下来是位段的内存划分:

对于这一个位段的定义, 里面的元素内存划分是这样

首先位段的元素申请空间是从低地址向高地址。 同时申请是以一个字节为单位, 从低位序列向高位序列申请。 当一个字节不够申请时, 就开始申请下一个字节。
所以, 这个位段的大小时两个字节。
位段的应用事项
位段因为有可能多个成员变量共用一个字节。 所以有些成员变量是没有地址的。 就比如本文定义的a 和 b。两个成员公用一个字节。 b没有地址。 所以当我们使用scanf 取地址操作进行赋值时, 不能直接进行赋值, 而是需要使用一个中间变量:如下:

本文介绍了位段,一种特殊的结构体,其元素内存大小自定义且不具移植性。位段内存分配按字节从低地址向高地址,可能导致某些成员无地址。应用时需注意赋值方式,如使用中间变量处理a和b这类共享字节的成员。
2428

被折叠的 条评论
为什么被折叠?



