位段(以32位int整数的机器为例)数组
概念:ide
C语言容许在一个结构体中以位为单位来指定成员所占内存的实际大小,这种以位为单位的成员咱们称为spa
位段,位段是一种特殊的结构体,位段的声明和任何普通的结构体成员声明相似,以下:3d
Struct 位段结构体名指针
{blog
Unsigned 位段名:位段长度;内存
Unsigned 位段名:位段长度;get
………………..it
Unsigned 位段名:位段长度;io
}位段结构体变量名;
但有两个例外,首先位段成员必须声明成int ,unsigned int, signed int,。其次,在成员的后面是一
个冒号和一个整数,这个整数指定该位段所占用位的个数。
位段使用时须要注意是:
位段结构体中的成员不能使用位段数组和位段指针,但结构体变量能够使数组或者指针,由于数组和指针都是以字节为单位的,同理也不能用&获取位段的地址。
例如:声明一个位段,咱们先来分析一下他在计算机里面是如何存储的(一个无符号的int是4字节)。
struct tagAAA
{
unsigned int a : 1;
unsigned int b : 2;
unsigned int c : 6;
unsigned int d : 4;
unsigned int e;
}AAA_S;
由此咱们能够明白位段的优势,原本定义了5个成员,须要5个存储单位,可是使用位段后只须要4个存储空间就足够了。
优势:
但它的成员是一个或多个位的字段,这些不一样长度的字段其实是存储于一个或多个×××变量中,他的优势是可以以较少的内存单元存储数据。位段能够用×××形式输出。
struct tagAAA
{
unsigned int a : 1;
unsigned int : 2;
unsigned int c : 6;
unsigned int d : 4;
unsigned int e;
}AAA_S;