结构体变量后边带的冒号:

来源:互联网 发布:知乎推荐书单排行榜 编辑:程序博客网 时间:2024/04/30 14:24

结构体变量后边带的冒号:

结构体中变量后面带有冒号的意义

变量:数字

属于C语言的位段操作可以控制单个的位

C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员成为“位段”或位域,利用位段能够用较少的位数存储数据。如:

struct packed_data (该例子假定int占2个字节,因为在c语言中int一般都为2字节,若在win32平台则为4位)

{ unsigned a:2;

unsigned b:6;

unsigned c:4;

unsigned d:4;

itn i;} data;

该结构所占的内存大小为8个字节,当然,如果 unsigned d:4没有这一项,其结果仍是吧,因为它还要求满足结构体的对齐方式(可参考博客中#pragma pack一节)

如,定义如下结构体
struct STACON_PACKED
{
UINT32 phyRegisterAddr:5;
UINT32 phyAddr:5;
UINT32 write:1;
UINT32 busy:1;
UINT32 preambleSuppress:1;
UINT32 mdc_Clockrating:3;
UINT32 reserved_0:16;
}__attribute__((__packed__));

那么上面这个结构体只占用32位存储空间,从上到下,位数从低到高.x86系列CPU里还越靠前的位地址越低.
但是分配内存的实际结果,还要看编译器的参数.很可能实际给phyRegisterAddr分配的还是32位4个字节长.

数据的以用方式为

data.a =2;//将数字2存储到两个位中,即 10B

注意:(1)关于位段成员的类型必须指定为 unsigned 或int类型 (2)若每一位段要从下一字节开始,可用以下形式:

unsigned a:1;

unsigned b:2;

unsigned :0;//冒号+0

unsigned c:3;//(另一个单元)

0 0
原创粉丝点击