C++结构中的位字段:
与c语言一样,C++也允许指定占用特定位数的结构成员。这使得创建与某个硬件设备上的寄存器对应的数据结构非常方便。字段的类型应为整型或者枚举,接下来是冒号,冒号后面是一个数字,代表使用的位数。可以使用没有名称的字段来提供间距。每个成员都被称为位字段。
struct test
{
int sn:4;
unsigned int :4;
bool flag:1;
bool flag1:1;
};
test p={1,true,false};
可以像通常那样初始化,还可以使用标准的结构表示法来访问位字段。
位字段通常用在低级编程中。
共用体:
共用体是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中一种数据类型,它里面的成员共享一块地址空间。简单来说,结构可以同时存储int,long和double,而共用体只能存储int或者long或者double。共用体的长度为其最大成员的长度。共用体的声明和结构很类似:
union test
{
int p1;
double p2;
long p3;
};
共用体的用途之一是,当数据项使用两种或多种格式,但不会同时使用时,可节省空间。
当共用体本身又是一个结构体的成员时,可以省略名称,即匿名共用体:
struct Student
{
char name[20];
int sex; //0代表男性,1代表女性
union
{
int female_id; //假设男学生id比女学生id长
long male_id;
};
}t;
t.sex=1;
t.male_id=1;
if(t.sex==0) printf("%ld\n",t.male_id);
else printf("%d\n",t.female_id);
尽管现在系统的内存很大,好像没有节省那么一点空间。但C++还用于嵌入式系统编程,对这些应用程序来说,内存非常宝贵,则节省内存显得很有必要。另外,共用体常用于操作系统数据结构或硬件数据结构。